powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сто тысяч "Почему так реализовано?"
81 сообщений из 81, показаны все 4 страниц
Сто тысяч "Почему так реализовано?"
    #39865642
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большая просьба разъяснить с логическим обоснованием - с чем связано отсутствие данной возможности?

Могу задать ограничение CHECK для домена или для таблицы, а также могу использовать домен с ограничением CHECK при объявлении (DECLARE VARIABLE) переменной внутри SP/EB/Fn, но не могу использовать ограничение CHECK в самом объявлении переменной внутри SP/EB/Fn, например:
Код: plsql
1.
DECLARE VARIABLE uint8 SMALLINT DEFAULT NULL CHECK(uint8 BETWEEN 0 AND 255);

Ругается на 'CHECK' - token unknown
Почему? Опять стандарт?

З.Ы. Тему так назвал, чтобы для подобных вопросов по сто тысяч раз не создавать. :)
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865652
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а шо там у Оракела?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865655
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, а причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц? Почему Оракел - законодатель, а не комьюнити?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865658
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.09.2019 14:22, rdb_dev пишет:
> Мимопроходящий, а причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц? Почему Оракел - законодатель, а не комьюнити?

завыл матерно, напился, набил рожу вопрошавшему, долго бился головой об стенку, в общем, ушел от ответа...
(С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865659
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ИХМО,
DECLARE VARIABLE внутри PSQL с ограничениями не имеет смысла. Ты и так там можешь всё проверить с помощью IF и бросить нормальное исключение с понятным текстом, а не непонятное системное.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865662
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devа причём тут Оракел, который сам под себя стандарты лабает, когда у нас Огнептиц?

Ну ок, а что там у стандарта?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865667
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devБольшая просьба разъяснить с логическим обоснованием - с чем связано отсутствие данной возможности?

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

Патамушта Check - это триггер. Я так дуиаю (С).
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865670
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, конечно могу!
Могу вместо выплёвывания стандартного EXCEPTION на нарушение ограничения CHECK определить свой EXCEPTION, проверить в операторе IF и выплюнуть этот свой EXCEPTION. Или могу создать свой домен с CHECK и использовать его при объявлении переменной внутри SP/EB/Fn. Могу... Но хотелось бы иметь геморрой поменьше.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865672
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу ок, а что там у стандарта?А что у нас, обычно, помещают в стандарт? То, что, в большинстве случаев, уже используется де-факто у "законодателей"?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865674
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.09.2019 14:34, rdb_dev пишет:
> хотелось бы иметь геморрой поменьше.

Релиф! (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865680
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПочему Оракел - законодатель, а не комьюнити?

комьюнити эта твоя супер фича на фиг не упёрлась. Иначе бы давно попросили.
И я кстати против такой возможности
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865681
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийРелиф! (С)Оценил!
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865683
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНо хотелось бы иметь геморрой поменьше.

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


или при объявлении домена:
Код: plsql
1.
CREATE DOMAIN UINT8 AS SMALLINT CHECK(VALUE BETWEEN 0 AND 255);

, так в порядке вещей, а как для DECLARE VARIABLE, так сразу "суперфича"?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865687
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно говоря, пофигу что там с геморроями.
вопрос упирается в то, КТО и за каким *** будет ЭТО реализовывать?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865689
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, ответ на вопрос "Кто?" - очевиден, а ответ "за каким...?" я уже дал.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865692
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.09.2019 14:50, rdb_dev пишет:
> а ответ "за каким...?" я уже дал.

не-а.
пока прозвучало лишь "ДАЙТЕ!"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865694
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, нет! Пока что прозвучало обоснованное "Почему?"
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865696
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

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

p.s. нунах...
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865700
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

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

Все вендоры делали язык хранимок на своё усмотрение. Позже кое-что в него стали вносить из стандарта, но основа всё равно осталось своя. Так вот, до тебя не было людей которые считали, что CHECK в DECLARE вообще нужно.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865703
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, а как CHECK выглядит для домена, который, к примеру, используется только в DECLARE VARIABLE?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865705
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, ведь можете, когда хотите!
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865706
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВсе вендоры делали язык хранимок на своё усмотрение. Позже кое-что в него стали вносить из стандарта, но основа всё равно осталось своя. Так вот, до тебя не было людей которые считали, что CHECK в DECLARE вообще нужно.Обойдусь пока - не горит... Но хотелось бы - для большего единообразия объявлений и удобства.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865707
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

kdvp.s. нунах...

+100500
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865716
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, вот уж нет!
Исходя из твоего описания TYPE OF и тиражируемости на переменные внутри SP/EB/Fn, это именно тип данных с проверкой ограничения, подобно типам с проверкой в таких RTL, как JVM или .Net
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865718
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULLНикогда не ставлю доменам NOT NULL. Вот уж действительно - бесполезная глупость.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865723
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,

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

kdvp.s. нунах...

+100500

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

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

с другой стороны, тип данных переменной определяется на этапе компиляции процедуры, а вот условия - на момент выполнения. да еще на каждый чих.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865726
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorс другой стороны, тип данных переменной определяется на этапе компиляции процедуры, а вот условия - на момент выполнения. да еще на каждый чих.

вот именно. Потом какой-нибудь одарённый разработчик воткнёт в CHECK запрос и начнёт спрашивать, а почему всё так тормозит.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865727
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, так ведь втыкают и тормозит, если рукожопы... Разве нет?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865730
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не сорите идеями.
заинтересуйте материально.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865731
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor, до появления BOOLEAN примерно так и делал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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")
);
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865743
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devа как CHECK выглядит для домена, который, к примеру, используется только в DECLARE VARIABLE?

Никак. Он тупо игнорируется как в MySQL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865747
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devpastor, до появления BOOLEAN примерно так и делал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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. память слаба, да и пальцы нефиг бить.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865750
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

у них уже домены появились? Насколько я понимаю они и CHECK то совсем недавно прикрутили
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865752
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНасколько я понимаю они и CHECK то совсем недавно прикрутили

Насколько я в курсе - таки не прикрутили. Синтаксис есть, а не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865753
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, нет, он не игнорируется, а работает как должен.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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;

Результат:
Код: plaintext
1.
2.
The insert failed because a column definition includes validation constraints.
validation error for variable TMP, value "256".
At function 'TEST', line: 9, col: 3.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865760
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ну и используй себе домены. Зачем тебе CHECK по месту определять?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865768
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, есть ещё один очень интересный момент:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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)
);
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865771
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev, ну и используй себе домены. Зачем тебе CHECK по месту определять?В переводе это означает - "определяй домен на каждый чих" или "определяй свой EXCEPTION для каждого чиха и собирай для этого EXCEPTION описательное сообщение". Супер!
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865772
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

потому что ты пытаешься сделать фигню.
Вот объясни зачем тебе на вычисляемое поле нужен CHECK? Геморроя заработать?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865776
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev, потому что ты пытаешься сделать фигню.
Вот объясни зачем тебе на вычисляемое поле нужен CHECK? Геморроя заработать?Это был пример не столько про сам CHECK, сколько про реализованный синтаксис. У тебя не возник когнитивный диссонанс при просмотре примера и сравнения работающих и неработающих объявлений?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865778
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

какая разница где ты проверку сделаешь в DECLARE или в IF? Экономия на спичках?
И да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865785
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВ переводе это означает - "определяй домен на каждый чих"Сервер и так это делает на каждый чих, достаточно посмотреть список доменов включая системные. Ну будет там чуть больше пользовательских и чуть меньше системных, в результате серверу пофиг.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865853
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,

какая разница где ты проверку сделаешь в DECLARE или в IF? Экономия на спичках?
И да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.Меня вполне устраивает стандартное сообщение об ошибке вида:
Код: plaintext
1.
2.
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 я изобретать не хочу.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865854
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky, понятно! Как обычно, предлагается топтать батоны для описания доменов на каждый чих, пока не з...
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865855
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисИ да своё сообщение лучше. Был даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.Вы же сами много раз убеждали, что прежде, чем писать тикет в трэкер, лучше, для начала, обсудить здесь. У вас семь пятниц на неделе!
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865869
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

И да моё мнение предлагаемая фича (DECLARE ... CHECK), может и не навредит, но никому на фиг не упала.
Что-то не увидел здесь никого кто бы тебя поддержал.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865908
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

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

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

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

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

p.s. да, я минималист и ортодокс.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865922
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

он их ещё и к вычисляемым столбцам прикрутить пытается. Сего замысла я понять не могу
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39865952
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВот вы чего хотите получить этим check для declare variable?

Я так думаю - он боится забыть переменную инициализировать. И хочет чтобы при первом же использовании в выражениях оно матюкнулось мнэээ... выразилось.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866003
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devСимонов Дениса как раз ограничения от доменов в PSQL часто мешают. Особенно какой-нибудь NOT NULLНикогда не ставлю доменам NOT NULL. Вот уж действительно - бесполезная глупость.Ну и зря.
У меня во всех таблицах есть поле типа T_KEY - очень удобно. Почти во всех - поле(поля) типа T_DATETIME_NN и прочие.
И в параметрах/переменных в процедурах - тоже, хоть и не всегда, тут надо с умом использовать домены с ограничениями. Но тоже удобно.
Я вообще практически не использую голые типы (без доменов).
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866087
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, в примере ниже я предпочёл бы, вместо объявления исключения и использования его по условию в IF, просто написать:
Код: plaintext
DECLARE VARIABLE dig INT64 CHECK(dig BETWEEN 0 AND 9)
не создавая для подобных вещей кучи доменов на все случаи жизни и получая стандартное сообщение об ошибке.
Пример BCD_TO_INT64
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
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, то для проверки выходного значения я предпочёл бы иметь более описательный вариант объявления столбца таблицы:
Код: plsql
1.
"field_3" UINT8 COMPUTED BY (SomeFunction("id"))

вместо
Код: plsql
1.
2.
"field_3" SMALLINT COMPUTED BY (SomeFunction("id"))
CONSTRAINT test__chk CHECK("field_3" BETWEEN 0 AND 255)


А когда при объявлении поля я путаю порядок указания DEFAULT и NOT NULL, то без матов точно не обходится. И вот таких мелочей, которые, казалось бы, должны работать хотя бы из принципа единообразия, огромное количество и это попросту выбешивает. Конечно, это не похоже на хождение по граблям - не тот масштаб, но всё равно неприятно.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866091
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, "в каждой избушке свои погремушки".
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866152
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devYuRock, "в каждой избушке свои погремушки".Просто не вижу в этом подводных камней.
И потому не вижу смысла не забывать копипастить везде NOT NULL или NOT NULL DEFAULT CURRENT_TIMESTAMP.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866154
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисБыл даже тикет чтобы к чекам определённое пользователем сообщение делать, но не сделали.Я нашёл другой тикет .
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866158
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денискомьюнити эта твоя супер фича на фиг не упёрлась. Иначе бы давно попросили.
И я кстати против такой возможностиПопросили давно, ещё в 2007-ом году для версии 2.5.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866159
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devредпочёл бы иметь более описательный вариант объявления столбца
смешались в кучу... Вот зачем ты смешиваешь в кучу?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866163
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, затем, что это примерно из той же оперы про доказательство необходимости, казалось бы, очевидных и элементарных вещей, которые должны работать, но не работают.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866288
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

да нифига не "из той же оперы". Я вообще не понимаю, как у вас там с логикой. Не работает логика совсем (включая "подобия").
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866333
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866443
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дывысь кум (ц) советский анекдотИдут по Киеву два кума.
Подходит к ним прохожий: Каак прайти на Крещатик?
Кумы: Га?
Прохожий: Шпрехензидойч?
Кумы: Га?
Прохожий: Дуюспикинглиш?
Кумы: Га?
Прохожий чертыхнулся и пошёл дальше.
Первый кум: Дывысь, кум, яка вумна людина - скильки мовий знает!
Второй кум: Ну и чим та ий помогло?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866454
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.Вот чё-то умное написал, я не понял. На всякий случай, если это маты какие-то, предупреждение.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866458
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devментальный набор атрибутов аналогий объектов
ШТА???
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866460
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvШТА???"Рецессивный аллель влияет на фенотип только если генотип гомозиготен".

P.S.
"Во многих знаниях - многия печали"
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866462
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvrdb_devментальный набор атрибутов аналогий объектов
ШТА???Та ни шо!... Просто выпендриваюсь. :)
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866464
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

у меня предложение. А давай всё оставим как есть
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866467
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПросто выпендриваюсь. :) А летать-то умеешь?
http://www.vostokolyub.info/myblog/horoshiy-anekdot-malenkaya-pritcha-34.htm
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866468
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov"Во многих знаниях - многия печали" "И кто умножает познания, умножает скорбь"
/Экклесиаст/
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866472
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev, у меня предложение. А давай всё оставим как естьБоюсь, нас комьюнити не поймёт. :)
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866473
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyА летать-то умеешь?Канэшна! Я же ворона, тока белая.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866474
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ну не всё, а твою чепуху с CHECK в DECLARE. Всё равно желающих её реализовать не найдётся
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866477
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, людей, желающих что-то реализовывать вообще очень немного. :)
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866488
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ты сам готов предложить патч?
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866520
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Же не манж па сис жур
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866570
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev, ты сам готов предложить патч?Чтобы предложить патч, надо, для начала, разобраться в исходниках. Даже боюсь представить, сколько времени этой займёт.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866575
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДмитрий, причём тут логика? За ассоциативные связи объектов отвечает ментальный набор атрибутов аналогий объектов, который у нас с тобой разный. :) Просто мой набор атрибутов аналогий шире и более формализован.
Может, твой набор просто более тонким слоем размазан... :)
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866619
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЖе не манж па сис жур
же манж дю фуа гра а Прагуе ен жульет.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866671
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Ту девре боар де ла бьер а Праг
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866735
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЧтобы предложить патч, надо, для начала, разобраться в исходниках. Даже боюсь представить, сколько времени этой займёт.Ну вот, а говорил летать умею, хоть и белый.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39866867
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyНу вот, а говорил летать умею, хоть и белый.Домашняя птица тоже, в большинстве своём, умеет летать... Но зачем?
Мне ради одной правки "день потерять, потом за пять минут долететь" не приемлемо.
...
Рейтинг: 0 / 0
Сто тысяч "Почему так реализовано?"
    #39867218
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёМожет, твой набор просто более тонким слоем размазан... :)Это лишь вопрос интерпретации. :)
...
Рейтинг: 0 / 0
81 сообщений из 81, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сто тысяч "Почему так реализовано?"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]