powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сто тысяч "Почему так реализовано?"
25 сообщений из 81, страница 2 из 4
Сто тысяч "Почему так реализовано?"
    #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
25 сообщений из 81, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сто тысяч "Почему так реализовано?"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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