powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / nullif и повторное вычиление expr1 - баг?
10 сообщений из 10, страница 1 из 1
nullif и повторное вычиление expr1 - баг?
    #39516298
AnyUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
create sequence gen$test;
alter sequence gen$test restart with 0;

select nullif(gen_id(gen$test, 1),0) from rdb$database


Если выполнять этот запрос - то приращение всегда будет 2. Тоесть происходит повторное вычисление expr1, чего из описания не следует. Баг?
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516317
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyUser,

нет. Это особенность работы с выражениями
Выражения не кешируются а вычисляются заново при каждом использовании

Код: sql
1.
nullif(gen_id(gen$test, 1),0) = case when gen_id(gen$test, 1)=0 then null else  gen_id(gen$test, 1) end
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516352
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyUser> Баг?

Нет, не баг. Я точно помню, что описывал это где-то.
В релизнотах, скорее всего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516354
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. При чём это относится не только к генераторам,
и приращение вовсе не всегда будет 2. За давностью
лет я уже не вспомню, но 3 - точно было; может, и 4 тоже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516371
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, тут было бы лучше заводить временную невидимую переменную до передачи в case

иначе действительно контр-интуитивно получается.

Пусть не баг, но вполне себе грабли, "gotcha"


С другой стороны, nullif это же для совместимости ввели, кажется еще Олегом Лоа, с каким-то другим сервером, скорее всего MS SQL
Надо проверить, как в нём это отрабатывает.
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516439
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516448
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyUser,

кстати зачем это
Код: sql
1.
nullif(gen_id(gen$test, 1),0)



вы там что генераторы в -1 сбрасываете? Трюк сам по себе глючный
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516460
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это касалось не только nullif, AFAIR.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516491
AnyUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисвы там что генераторы в -1 сбрасываете? Трюк сам по себе глючный
Нет, это синтетический пример. Просто нужна была функция с подобным поведением (если бы не этот "тонкий момент").
...
Рейтинг: 0 / 0
nullif и повторное вычиление expr1 - баг?
    #39516504
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf Oracle и NULLIF — подводные камни

Аргумент...

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


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