powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Баг с порядком выполнения Cast / CHECK ?
4 сообщений из 4, страница 1 из 1
Баг с порядком выполнения Cast / CHECK ?
    #39448406
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим я хочу, чтобы все 4 символа содержали цифры и хоты бы один из символов не должен быть '0'. Делаю следующий домен:
Код: sql
1.
2.
3.
CREATE DOMAIN ID9999$ AS CHAR(4)
  CHARACTER SET ASCII
  CHECK(VALUE SIMILAR TO '0{0,3}[1-9][0-9]{0,3}');

Естественно в надежде, что при выполнении чего то типа:
Код: sql
1.
SELECT Cast('10' AS ID9999$) FROM oneRow

сервер сначала выполнит приведение к CHAR(4), дополнив строку 'бланками', а затем проверит результат по условию в CHEK. В результате сервер проглатывает оператор SELECT и выдает результат, хотя ожидаемой реакцией сервера для меня был бы результат, который я получаю при выполнении:
Код: sql
1.
SELECT Cast('10  ' AS ID9999$) FROM oneRow


Кто что думает по этому поводу? Это "лыжи не едут" или со мной что-то не так?
...
Рейтинг: 0 / 0
Баг с порядком выполнения Cast / CHECK ?
    #39448411
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

а с чего ты взял что это баг? Используй VARCHAR и будет работать так как ты хочешь
...
Рейтинг: 0 / 0
Баг с порядком выполнения Cast / CHECK ?
    #39448446
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, VARCHAR не поможет. Требуется, чтобы, в конечном счете, проверке подвергались все 4 символа (не больше и не меньше) независимо от количества символов в переданной строке. Т.е., ИМХО, сначала должно быть выполнено преобразование к CHAR(4), а затем проверка условия CHECK.
...
Рейтинг: 0 / 0
Баг с порядком выполнения Cast / CHECK ?
    #39448700
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, частично выкрутился:
Код: sql
1.
2.
3.
CREATE DOMAIN ID9999$ AS CHAR(4)
  CHARACTER SET ASCII
  CHECK(VALUE SIMILAR TO '(000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3})');

но необходимость в понимании - что и в какой очередности должен делать сервер и почему, осталась.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Баг с порядком выполнения Cast / CHECK ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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