powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / where 1=0
24 сообщений из 24, страница 1 из 1
where 1=0
    #39313112
Коллеги, подскажите плиз, то что запрос вида:
Код: plsql
1.
select * from SOMETABLE where 1=0


производит non-indexed reads это баг или фича?
Есть ли способ добиться остутствия каких-либо чтений при заведомо невыполнимом условии в секции where?
...
Рейтинг: 0 / 0
where 1=0
    #39313123
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтений чего?

Код: sql
1.
where rdb$db_key = ''
...
Рейтинг: 0 / 0
where 1=0
    #39313124
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вообще умышленно пихать такие запросы к базе?
...
Рейтинг: 0 / 0
where 1=0
    #39313127
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйА зачем вообще умышленно пихать такие запросы к базе?
Такое обычно делают для отключения одного из условий запроса.
Один из них должен быть параметром, типа 1=:param.
...
Рейтинг: 0 / 0
where 1=0
    #39313128
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда параметр - понятно. А тут лучше бы написал что-то типа NULL IS NOT NULL :)
...
Рейтинг: 0 / 0
where 1=0
    #39313138
wadman,
Всё верно. Просто привёл максимально рафинированный пример.
Если интересно - изначально хотелось добиться чего-то такого:
Код: sql
1.
2.
3.
select ... from SOMETABLE where T.IndexedField=:param and :param is not null
union all
select ... from SOMETABLE where :param is null


чтобы при :param=null получать все записи, иначе только конкретную.
...
Рейтинг: 0 / 0
where 1=0
    #39313146
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

ну так попробуй. В Firebird 3.0 здесь будет подхватываться индекс

Код: sql
1.
select ... from SOMETABLE where T.IndexedField=:param or :param is null
...
Рейтинг: 0 / 0
where 1=0
    #39313192
Симонов Денис,
Да, в тройке это работает. Если таблица одна и та же.
Но всё-таки хотелось бы найти способ при заведомо невыполнимом условии в секции where не шуршать по таблице.
Если его нет сейчас - считается ли текущее поведение багом?
...
Рейтинг: 0 / 0
where 1=0
    #39313198
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

нет, не считается. Баг - это ошибка, когда что-то неправильный результат даёт, или падает, или БД портится. А это просто несовершенство оптимизатора. О проблеме известно, в трекере такой тикет есть.
...
Рейтинг: 0 / 0
where 1=0
    #39313220
Симонов Денис,
Подскажите пожалуйста номер тикета. Не вижу ничего подобного в планах на 4.0.
...
Рейтинг: 0 / 0
where 1=0
    #39313224
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

CORE-1287

на 4.0 никаких планов на этот счёт нет. Там другие фичи в приоритете, если время останется может быть и сделают.
Появится dimitr прояснит этот момент.
...
Рейтинг: 0 / 0
where 1=0
    #39313232
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник, может это своеобразная попытка заставить сервер "собрать мусор", которую, обычно, делают запросом с агрегатной функцией?
...
Рейтинг: 0 / 0
where 1=0
    #39313234
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

чушь
...
Рейтинг: 0 / 0
where 1=0
    #39313243
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никчтобы при :param=null получать все записи, иначе только конкретную.Так 19668664 подойдет?
...
Рейтинг: 0 / 0
where 1=0
    #39313248
Симонов Денисчушь
не, чушь можно пороть, а это просто бред :)
PS: Спасибо за тикет. Надеюсь dimitr расскажет какие у него перспективы.
...
Рейтинг: 0 / 0
where 1=0
    #39313257
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никне, чушь можно пороть, а это просто бред :)Это не бред, а предположение о чем думал автор запроса, когда написал where 1=0
...
Рейтинг: 0 / 0
where 1=0
    #39313288
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никНо всё-таки хотелось бы найти способ при заведомо невыполнимом условии в секции where не
шуршать по таблице.

Единственный способ не шуршать по таблице - не посылать дурной запрос. Не ленись, сделай
из него два отдельных запроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
where 1=0
    #39313299
Dimitry Sibiryakov,
Это понятно. Но ИМХО сервер сам должен уметь дурные запросы обезвреживать. И чем больше - тем лучше.
...
Рейтинг: 0 / 0
where 1=0
    #39313305
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никИМХО сервер сам должен уметь дурные запросы обезвреживать.

Если его научить вычислению выражений на фазе компиляции (что само по себе нетривиально),
он начнёт "обезвреживать" и "хинты" типа +0 и ||''. А от такого уже многие взвоют.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
where 1=0
    #39313306
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

нужны нормальные хинты, а не затычки.
+0 и ||'' это не хинты. Просто те кто знают как работает оптимизатор использует эту возможность для его обмана. Нормальный хинт был бы предпочтительней.
...
Рейтинг: 0 / 0
where 1=0
    #39313309
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли его научить вычислению выражений на фазе компиляции (что само по себе нетривиально),
он начнёт "обезвреживать" и "хинты" типа +0 и ||''. А от такого уже многие взвоют.
...
Рейтинг: 0 / 0
where 1=0
    #39313310
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 22 сентября 2016 г. 12:30:39:

Симонов Денис> нужны нормальные хинты, а не затычки.
> +0 и ||'' это не хинты.
> Просто те кто знают как работает оптимизатор использует эту возможность для его обмана.
> Нормальный хинт был бы предпочтительней.+100500!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
where 1=0
    #39313627
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйКогда параметр - понятно. А тут лучше бы написал что-то типа NULL IS NOT NULL :)
Бывает полезно и без параметра.
Чтобы получить в результате 0 записей.
...
Рейтинг: 0 / 0
where 1=0
    #39313691
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никчтобы при :param=null получать все записи, иначе только конкретную.

А такой вариант не подойдет?
Код: plsql
1.
select * from SOMETABLE t where t.INDEXEDFIELD = coalesce( :PARAM, t.INDEXEDFIELD )



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


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