Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4      [все]
 Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Большая просьба разъяснить с логическим обоснованием - с чем связано отсутствие данной возможности?

Могу задать ограничение CHECK для домена или для таблицы, а также могу использовать домен с ограничением CHECK при объявлении (DECLARE VARIABLE) переменной внутри SP/EB/Fn, но не могу использовать ограничение CHECK в самом объявлении переменной внутри SP/EB/Fn, например:
DECLARE VARIABLE uint8 SMALLINT DEFAULT NULL CHECK(uint8 BETWEEN 0 AND 255);
Ругается на 'CHECK' - token unknown
Почему? Опять стандарт?

З.Ы. Тему так назвал, чтобы для подобных вопросов по сто тысяч раз не создавать. :)
23 сен 19, 14:14    [21976856]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582

а шо там у Оракела?

Posted via ActualForum NNTP Server 1.5

23 сен 19, 14:19    [21976869]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Мимопроходящий, а причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц? Почему Оракел - законодатель, а не комьюнити?
23 сен 19, 14:22    [21976872]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582

23.09.2019 14:22, rdb_dev пишет:
> Мимопроходящий, а причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц? Почему Оракел - законодатель, а не комьюнити?

завыл матерно, напился, набил рожу вопрошавшему, долго бился головой об стенку, в общем, ушел от ответа...
(С)

Posted via ActualForum NNTP Server 1.5

23 сен 19, 14:25    [21976876]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

ИХМО,
DECLARE VARIABLE внутри PSQL с ограничениями не имеет смысла. Ты и так там можешь всё проверить с помощью IF и бросить нормальное исключение с понятным текстом, а не непонятное системное.
23 сен 19, 14:25    [21976877]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48618

rdb_dev
а причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц?

Ну ок, а что там у стандарта?

Posted via ActualForum NNTP Server 1.5

23 сен 19, 14:29    [21976884]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 645
rdb_dev
Большая просьба разъяснить с логическим обоснованием - с чем связано отсутствие данной возможности?

Могу задать ограничение CHECK для домена или для таблицы, а также могу использовать домен с ограничением CHECK при объявлении (DECLARE VARIABLE) переменной внутри SP/EB/Fn, но не могу использовать ограничение CHECK в самом объявлении переменной внутри SP/EB/Fn


Патамушта Check - это триггер. Я так дуиаю (С).
23 сен 19, 14:31    [21976890]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, конечно могу!
Могу вместо выплёвывания стандартного EXCEPTION на нарушение ограничения CHECK определить свой EXCEPTION, проверить в операторе IF и выплюнуть этот свой EXCEPTION. Или могу создать свой домен с CHECK и использовать его при объявлении переменной внутри SP/EB/Fn. Могу... Но хотелось бы иметь геморрой поменьше.
23 сен 19, 14:34    [21976894]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Dimitry Sibiryakov
Ну ок, а что там у стандарта?
А что у нас, обычно, помещают в стандарт? То, что, в большинстве случаев, уже используется де-факто у "законодателей"?
23 сен 19, 14:36    [21976897]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582

23.09.2019 14:34, rdb_dev пишет:
> хотелось бы иметь геморрой поменьше.

Релиф! (С)

Posted via ActualForum NNTP Server 1.5

23 сен 19, 14:37    [21976900]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev
Почему Оракел - законодатель, а не комьюнити?


комьюнити эта твоя супер фича на фиг не упёрлась. Иначе бы давно попросили.
И я кстати против такой возможности
23 сен 19, 14:39    [21976907]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Мимопроходящий
Релиф! (С)
Оценил!
23 сен 19, 14:40    [21976908]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev
Но хотелось бы иметь геморрой поменьше.


такая возможность наоборот повысит вероятность геморроя на ровном месте.
23 сен 19, 14:42    [21976912]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
комьюнити эта твоя супер фича на фиг не упёрлась. Иначе бы давно попросили.
И я кстати против такой возможности
Ну, какая же это "суперфича"? На таковую не тянет... Почему-то при объявлении таблицы:
CONSTRAINT CHECK("field_name" BETWEEN 0 AND 255)

или при объявлении домена:
CREATE DOMAIN UINT8 AS SMALLINT CHECK(VALUE BETWEEN 0 AND 255);
, так в порядке вещей, а как для DECLARE VARIABLE, так сразу "суперфича"?
23 сен 19, 14:45    [21976920]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582
собственно говоря, пофигу что там с геморроями.
вопрос упирается в то, КТО и за каким *** будет ЭТО реализовывать?

Сообщение было отредактировано: 23 сен 19, 15:26
23 сен 19, 14:46    [21976922]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Мимопроходящий, ответ на вопрос "Кто?" - очевиден, а ответ "за каким...?" я уже дал.
23 сен 19, 14:50    [21976929]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582

23.09.2019 14:50, rdb_dev пишет:
> а ответ "за каким...?" я уже дал.

не-а.
пока прозвучало лишь "ДАЙТЕ!"

Posted via ActualForum NNTP Server 1.5

23 сен 19, 14:52    [21976932]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Мимопроходящий, нет! Пока что прозвучало обоснованное "Почему?"
23 сен 19, 14:53    [21976934]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
rdb_dev,

возможно, я идиотский ответ дам, но всё же дам:
- столбец таблицы - это не переменная.
- у переменных в компилируемых ЯП нет никаких подобных ограничений.

поэтому check для declare variable выглядит как "зуб в носу" (с).

p.s. нунах...
23 сен 19, 14:55    [21976936]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

ну ладно. Смотри в стандарте для таблиц и доменов ограничение CHECK явно определено ещё в SQL-92. Что касается хранимых процедур, то их вовсе в стандарте не было до SQL-99. В СУБД различных вендоров они появились давно.

Так вот в стандарте нет ничего насчёт DECLARE VARIABLE. Вообще ничего. К слову если бы у нас курсоры были только по стандарту, то ты бы обплевался хранимки писать, ибо FOR SELECT там как раз нету.

Все вендоры делали язык хранимок на своё усмотрение. Позже кое-что в него стали вносить из стандарта, но основа всё равно осталось своя. Так вот, до тебя не было людей которые считали, что CHECK в DECLARE вообще нужно.
23 сен 19, 14:57    [21976947]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
kdv, а как CHECK выглядит для домена, который, к примеру, используется только в DECLARE VARIABLE?
23 сен 19, 14:58    [21976950]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, ведь можете, когда хотите!
23 сен 19, 14:59    [21976953]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
Все вендоры делали язык хранимок на своё усмотрение. Позже кое-что в него стали вносить из стандарта, но основа всё равно осталось своя. Так вот, до тебя не было людей которые считали, что CHECK в DECLARE вообще нужно.
Обойдусь пока - не горит... Но хотелось бы - для большего единообразия объявлений и удобства.
23 сен 19, 15:02    [21976955]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

и кстати домен это не тип данных!!! Это просто тиражируемое ограничение на столбец, чтобы многократно можно было использовать в нескольких таблицах. По доброте душевной их дали использовать в PSQL, хотя самое правильное делать TYPE OF DOMAIN или TYPE OF COLUMN, а как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULL

kdv
p.s. нунах...


+100500
23 сен 19, 15:04    [21976959]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, вот уж нет!
Исходя из твоего описания TYPE OF и тиражируемости на переменные внутри SP/EB/Fn, это именно тип данных с проверкой ограничения, подобно типам с проверкой в таких RTL, как JVM или .Net
23 сен 19, 15:11    [21976973]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
а как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULL
Никогда не ставлю доменам NOT NULL. Вот уж действительно - бесполезная глупость.
23 сен 19, 15:12    [21976975]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
pastor
Member

Откуда: Калуга
Сообщений: 1049
Симонов Денис
rdb_dev,

и кстати домен это не тип данных!!! Это просто тиражируемое ограничение на столбец, чтобы многократно можно было использовать в нескольких таблицах. По доброте душевной их дали использовать в PSQL, хотя самое правильное делать TYPE OF DOMAIN или TYPE OF COLUMN, а как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULL

kdv
p.s. нунах...


+100500


сейчас и пишем TYPE OF DOM$BOOLEAN

ограничение для микросправочника TYPE OF CHECK(value in (0,1)) не помешало бы.

с другой стороны, тип данных переменной определяется на этапе компиляции процедуры, а вот условия - на момент выполнения. да еще на каждый чих.
23 сен 19, 15:17    [21976983]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
pastor
с другой стороны, тип данных переменной определяется на этапе компиляции процедуры, а вот условия - на момент выполнения. да еще на каждый чих.


вот именно. Потом какой-нибудь одарённый разработчик воткнёт в CHECK запрос и начнёт спрашивать, а почему всё так тормозит.
23 сен 19, 15:25    [21976993]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, так ведь втыкают и тормозит, если рукожопы... Разве нет?
23 сен 19, 15:28    [21976998]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30582

не сорите идеями.
заинтересуйте материально.

Posted via ActualForum NNTP Server 1.5

23 сен 19, 15:32    [21977003]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
pastor, до появления BOOLEAN примерно так и делал:
CREATE DOMAIN BOOL AS CHAR(1) CHARACTER SET ASCII
  DEFAULT 'N' CHECK (VALUE = 'N' OR VALUE = 'Y');

CREATE TABLE "my_table"
(
    "id"      ID NOT NULL,
    "flag_1"  BOOL NOT NULL,
    "flag_2"  BOOL NOT NULL,
  CONSTRAINT "my_table__pk" PRIMARY KEY ("id")
);
23 сен 19, 15:34    [21977006]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48618

rdb_dev
а как CHECK выглядит для домена, который, к примеру, используется только в DECLARE VARIABLE?

Никак. Он тупо игнорируется как в MySQL.

Posted via ActualForum NNTP Server 1.5

23 сен 19, 15:57    [21977037]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
pastor
Member

Откуда: Калуга
Сообщений: 1049
rdb_dev
pastor, до появления BOOLEAN примерно так и делал:
CREATE DOMAIN BOOL AS CHAR(1) CHARACTER SET ASCII
  DEFAULT 'N' CHECK (VALUE = 'N' OR VALUE = 'Y');

CREATE TABLE "my_table"
(
    "id"      ID NOT NULL,
    "flag_1"  BOOL NOT NULL,
    "flag_2"  BOOL NOT NULL,
  CONSTRAINT "my_table__pk" PRIMARY KEY ("id")
);


домен DMN_BOOLEAN начали использовать еще до появления дурацких кавычек. живем как-то.
только хватило ума не делать его строковым.
и не смешивать DEFAULT с NULLABLE.

там где он может быть NULL, там будет другой домен, без додуманного бабским ИИ значением по умолчанию.

и не писать для каждого столбца not null. память слаба, да и пальцы нефиг бить.
23 сен 19, 15:59    [21977042]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
Dimitry Sibiryakov,

у них уже домены появились? Насколько я понимаю они и CHECK то совсем недавно прикрутили
23 сен 19, 16:03    [21977049]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48618

Симонов Денис
Насколько я понимаю они и CHECK то совсем недавно прикрутили

Насколько я в курсе - таки не прикрутили. Синтаксис есть, а не работает.

Posted via ActualForum NNTP Server 1.5

23 сен 19, 16:06    [21977052]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Dimitry Sibiryakov, нет, он не игнорируется, а работает как должен.

CREATE DOMAIN UINT8 AS SMALLINT CHECK(VALUE BETWEEN 0 AND 255);

SET TERM ^;
CREATE FUNCTION test
  (
    par SMALLINT DEFAULT NULL
  )
  RETURNS BOOLEAN
AS
  DECLARE VARIABLE tmp UINT8;
BEGIN
  IF (:par IS NULL) THEN RETURN NULL;
  tmp = par;
  RETURN TRUE;
END^
SET TERM ;^

SELECT test(256) FROM oneRow;
Результат:
The insert failed because a column definition includes validation constraints.
validation error for variable TMP, value "256".
At function 'TEST', line: 9, col: 3.
23 сен 19, 16:06    [21977053]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

ну и используй себе домены. Зачем тебе CHECK по месту определять?
23 сен 19, 16:21    [21977066]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, есть ещё один очень интересный момент:
CREATE DOMAIN UINT8 AS SMALLINT CHECK(VALUE BETWEEN 0 AND 255);

CREATE TABLE test
(
    "id"      ID NOT NULL,

    /* следующее объявление работает */
    "field_1" COMPUTED BY (Cast(Bin_AND(Bin_SHR("id", 24), 0x0ff) AS UINT8)),

    /* следующее объявление НЕ работает */
--  "field_2" SMALLINT COMPUTED BY (Bin_AND(Bin_SHR("id", 24), 0x0ff))
--    CHECK("field_2" BETWEEN 0 AND 255),

    /* следующее объявление тоже НЕ работает */
--  "field_3" UINT8 COMPUTED BY (Bin_AND(Bin_SHR("id", 24), 0x0ff)),

    /* следующее объявление работает */
    "field_4" SMALLINT COMPUTED BY (Bin_AND(Bin_SHR("id", 24), 0x0ff))
  CONSTRAINT test__chk CHECK("field_4" BETWEEN 0 AND 255)
);
23 сен 19, 16:42    [21977079]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
rdb_dev, ну и используй себе домены. Зачем тебе CHECK по месту определять?
В переводе это означает - "определяй домен на каждый чих" или "определяй свой EXCEPTION для каждого чиха и собирай для этого EXCEPTION описательное сообщение". Супер!
23 сен 19, 16:47    [21977083]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

потому что ты пытаешься сделать фигню.
Вот объясни зачем тебе на вычисляемое поле нужен CHECK? Геморроя заработать?
23 сен 19, 16:47    [21977084]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
rdb_dev, потому что ты пытаешься сделать фигню.
Вот объясни зачем тебе на вычисляемое поле нужен CHECK? Геморроя заработать?
Это был пример не столько про сам CHECK, сколько про реализованный синтаксис. У тебя не возник когнитивный диссонанс при просмотре примера и сравнения работающих и неработающих объявлений?
23 сен 19, 16:50    [21977088]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

какая разница где ты проверку сделаешь в DECLARE или в IF? Экономия на спичках?
И да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.
23 сен 19, 16:52    [21977090]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8395
rdb_dev
В переводе это означает - "определяй домен на каждый чих"
Сервер и так это делает на каждый чих, достаточно посмотреть список доменов включая системные. Ну будет там чуть больше пользовательских и чуть меньше системных, в результате серверу пофиг.
23 сен 19, 16:57    [21977099]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
rdb_dev,

какая разница где ты проверку сделаешь в DECLARE или в IF? Экономия на спичках?
И да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.
Меня вполне устраивает стандартное сообщение об ошибке вида:
The insert failed because a column definition includes validation constraints.
validation error for variable TMP, value "256".
At function 'TEST', line: 9, col: 3.
И в данном случае, велосипед с EXCEPTION я изобретать не хочу.
23 сен 19, 19:34    [21977232]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Ivan_Pisarevsky, понятно! Как обычно, предлагается топтать батоны для описания доменов на каждый чих, пока не з...
23 сен 19, 19:35    [21977233]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
И да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.
Вы же сами много раз убеждали, что прежде, чем писать тикет в трэкер, лучше, для начала, обсудить здесь. У вас семь пятниц на неделе!
23 сен 19, 19:36    [21977234]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

по поводу обсуждения фич я свою точку зрения не изменил. Не знаю где ты увидел это.
Тикет тот создавал не я. Создан он был очень давно, был даже в планах на тройку, но потом отказались.

И да моё мнение предлагаемая фича (DECLARE ... CHECK), может и не навредит, но никому на фиг не упала.
Что-то не увидел здесь никого кто бы тебя поддержал.
23 сен 19, 19:51    [21977251]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
rdb_dev,

МЛЯ (не знаю, как еще привлечь внимание, кроме как большими буквами).

Вот вы чего хотите получить этим check для declare variable?
Например, если в переменную засовывать входной параметр процедуры, то есть шанс, что во входной параметр
засунется что-то неприличное для variable?
Или, у столбца, куда будет пихаться variable нет такого ограничения?

Я пытаюсь понять, откуда ноги у этого бреда растут. Я еще раз повторю, что у переменных компилируемых ЯП, да и интерпретируемых тоже, нет никаких check constraints. Check constraints - для столбцов таблиц. Здесь аналогия - экземпляр класса с методами, ограничивающими значения переменных класса методами set/get. Check в данном случае как "метод класса", то есть триггер на таблице.

Какой такой великий смысл должен иметь check у variable процедуры или триггера? Проверка на недопустимость передаваемых в процедуру значений? Проверка на недопустимость читаемых из таблицы значений? Проверка на недопустимость записываемых в таблицу значений?

Откуда вообще вот эти программерские закидоны?

p.s. да, я минималист и ортодокс.
23 сен 19, 21:42    [21977309]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
kdv,

он их ещё и к вычисляемым столбцам прикрутить пытается. Сего замысла я понять не могу
23 сен 19, 22:04    [21977328]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 645
kdv
Вот вы чего хотите получить этим check для declare variable?


Я так думаю - он боится забыть переменную инициализировать. И хочет чтобы при первом же использовании в выражениях оно матюкнулось мнэээ... выразилось.
23 сен 19, 22:41    [21977365]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4011
rdb_dev
Симонов Денис
а как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULL
Никогда не ставлю доменам NOT NULL. Вот уж действительно - бесполезная глупость.
Ну и зря.
У меня во всех таблицах есть поле типа T_KEY - очень удобно. Почти во всех - поле(поля) типа T_DATETIME_NN и прочие.
И в параметрах/переменных в процедурах - тоже, хоть и не всегда, тут надо с умом использовать домены с ограничениями. Но тоже удобно.
Я вообще практически не использую голые типы (без доменов).
24 сен 19, 01:33    [21977434]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
kdv, в примере ниже я предпочёл бы, вместо объявления исключения и использования его по условию в IF, просто написать:
DECLARE VARIABLE dig INT64 CHECK(dig BETWEEN 0 AND 9)
не создавая для подобных вещей кучи доменов на все случаи жизни и получая стандартное сообщение об ошибке.
+ Пример BCD_TO_INT64
CREATE OR ALTER EXCEPTION "any__xImproperValue" 'Improper value';

SET TERM ^;
CREATE OR ALTER FUNCTION BCD_TO_INT64
  (
    "bcd" INT64 DEFAULT NULL
  )
  RETURNS INT64
  DETERMINISTIC
AS
  DECLARE VARIABLE tmp    INT64;
  DECLARE VARIABLE dig    INT64;
  DECLARE VARIABLE factor INT64 DEFAULT 1;
  DECLARE VARIABLE ret    INT64 DEFAULT 0;
BEGIN
  IF (:"bcd" IS NULL) THEN
    RETURN NULL;
  tmp = "bcd";
  WHILE (:tmp != 0 AND :tmp != -1) DO
    BEGIN
      dig = Bin_AND(tmp, 0x0f);
      IF (:dig > 9) THEN
        EXCEPTION "any__xImproperValue";
      ret = ret + dig * factor;
      factor = factor * 10;
      tmp = Bin_SHR(tmp, 4);
    END
  RETURN ret;
END^
SET TERM ;^

Или, в случае с вычисляемыми полями, когда в CHECK находится какая-то функция, которая писана не мной и вообще эта функция в UDF/UDR, то для проверки выходного значения я предпочёл бы иметь более описательный вариант объявления столбца таблицы:
"field_3" UINT8 COMPUTED BY (SomeFunction("id"))
вместо
"field_3" SMALLINT COMPUTED BY (SomeFunction("id"))
CONSTRAINT test__chk CHECK("field_3" BETWEEN 0 AND 255)

А когда при объявлении поля я путаю порядок указания DEFAULT и NOT NULL, то без матов точно не обходится. И вот таких мелочей, которые, казалось бы, должны работать хотя бы из принципа единообразия, огромное количество и это попросту выбешивает. Конечно, это не похоже на хождение по граблям - не тот масштаб, но всё равно неприятно.
24 сен 19, 10:00    [21977561]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
YuRock, "в каждой избушке свои погремушки".
24 сен 19, 10:01    [21977566]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4011
rdb_dev
YuRock, "в каждой избушке свои погремушки".
Просто не вижу в этом подводных камней.
И потому не вижу смысла не забывать копипастить везде NOT NULL или NOT NULL DEFAULT CURRENT_TIMESTAMP.
24 сен 19, 11:29    [21977660]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.
Я нашёл другой тикет.
24 сен 19, 11:33    [21977662]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
комьюнити эта твоя супер фича на фиг не упёрлась. Иначе бы давно попросили.
И я кстати против такой возможности
Попросили давно, ещё в 2007-ом году для версии 2.5.
24 сен 19, 11:38    [21977667]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
rdb_dev
редпочёл бы иметь более описательный вариант объявления столбца

смешались в кучу... Вот зачем ты смешиваешь в кучу?
24 сен 19, 11:38    [21977668]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
kdv, затем, что это примерно из той же оперы про доказательство необходимости, казалось бы, очевидных и элементарных вещей, которые должны работать, но не работают.
24 сен 19, 11:40    [21977676]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
rdb_dev,

да нифига не "из той же оперы". Я вообще не понимаю, как у вас там с логикой. Не работает логика совсем (включая "подобия").
24 сен 19, 13:31    [21977869]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Дмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.
24 сен 19, 14:15    [21977942]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9473
+ Дывысь кум (ц) советский анекдот
Идут по Киеву два кума.
Подходит к ним прохожий: Каак прайти на Крещатик?
Кумы: Га?
Прохожий: Шпрехензидойч?
Кумы: Га?
Прохожий: Дуюспикинглиш?
Кумы: Га?
Прохожий чертыхнулся и пошёл дальше.
Первый кум: Дывысь, кум, яка вумна людина - скильки мовий знает!
Второй кум: Ну и чим та ий помогло?
24 сен 19, 15:55    [21978119]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 16982
rdb_dev
Дмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.
Вот чё-то умное написал, я не понял. На всякий случай, если это маты какие-то, предупреждение.
24 сен 19, 16:10    [21978149]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
rdb_dev
ментальный набор атрибутов аналогий объектов

ШТА???
24 сен 19, 16:15    [21978157]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9473
kdv
ШТА???
"Рецессивный аллель влияет на фенотип только если генотип гомозиготен".

P.S.
"Во многих знаниях - многия печали"
24 сен 19, 16:17    [21978162]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
kdv
rdb_dev
ментальный набор атрибутов аналогий объектов

ШТА???
Та ни шо!... Просто выпендриваюсь. :)
24 сен 19, 16:19    [21978164]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

у меня предложение. А давай всё оставим как есть
24 сен 19, 16:21    [21978167]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8395
rdb_dev
Просто выпендриваюсь. :)
А летать-то умеешь?
http://www.vostokolyub.info/myblog/horoshiy-anekdot-malenkaya-pritcha-34.htm
24 сен 19, 16:23    [21978172]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Basil A. Sidorov
"Во многих знаниях - многия печали"
"И кто умножает познания, умножает скорбь"
/Экклесиаст/
24 сен 19, 16:24    [21978173]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
rdb_dev, у меня предложение. А давай всё оставим как есть
Боюсь, нас комьюнити не поймёт. :)
24 сен 19, 16:28    [21978182]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Ivan_Pisarevsky
А летать-то умеешь?
Канэшна! Я же ворона, тока белая.
24 сен 19, 16:29    [21978184]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

ну не всё, а твою чепуху с CHECK в DECLARE. Всё равно желающих её реализовать не найдётся
24 сен 19, 16:31    [21978187]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис, людей, желающих что-то реализовывать вообще очень немного. :)
24 сен 19, 16:34    [21978193]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10084
rdb_dev,

ты сам готов предложить патч?
24 сен 19, 16:52    [21978223]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 16982
Симонов Денис,

Же не манж па сис жур
24 сен 19, 17:24    [21978268]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Симонов Денис
rdb_dev, ты сам готов предложить патч?
Чтобы предложить патч, надо, для начала, разобраться в исходниках. Даже боюсь представить, сколько времени этой займёт.
24 сен 19, 18:55    [21978372]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1325
rdb_dev
Дмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.

Может, твой набор просто более тонким слоем размазан... :)
24 сен 19, 19:08    [21978386]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28289
WildSery
Же не манж па сис жур

же манж дю фуа гра а Прагуе ен жульет.
25 сен 19, 00:37    [21978513]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 16982
kdv,

Ту девре боар де ла бьер а Праг
25 сен 19, 09:48    [21978608]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8395
rdb_dev
Чтобы предложить патч, надо, для начала, разобраться в исходниках. Даже боюсь представить, сколько времени этой займёт.
Ну вот, а говорил летать умею, хоть и белый.Картинка с другого сайта.
25 сен 19, 11:16    [21978716]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
Ivan_Pisarevsky
Ну вот, а говорил летать умею, хоть и белый.
Домашняя птица тоже, в большинстве своём, умеет летать... Но зачем?
Мне ради одной правки "день потерять, потом за пять минут долететь" не приемлемо.
25 сен 19, 13:58    [21978913]     Ответить | Цитировать Сообщить модератору
 Re: Сто тысяч "Почему так реализовано?"  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
ёёёёё
Может, твой набор просто более тонким слоем размазан... :)
Это лишь вопрос интерпретации. :)
26 сен 19, 10:55    [21979545]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / Firebird, InterBase Ответить