Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / where 1=0 / 24 сообщений из 24, страница 1 из 1
22.09.2016, 09:00
    #39313112
where 1=0
Коллеги, подскажите плиз, то что запрос вида:
Код: plsql
1.
select * from SOMETABLE where 1=0


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

Код: sql
1.
where rdb$db_key = ''
...
Рейтинг: 0 / 0
22.09.2016, 09:19
    #39313124
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=0
А зачем вообще умышленно пихать такие запросы к базе?
...
Рейтинг: 0 / 0
22.09.2016, 09:20
    #39313127
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=0
ЛюбезныйА зачем вообще умышленно пихать такие запросы к базе?
Такое обычно делают для отключения одного из условий запроса.
Один из них должен быть параметром, типа 1=:param.
...
Рейтинг: 0 / 0
22.09.2016, 09:24
    #39313128
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=0
Когда параметр - понятно. А тут лучше бы написал что-то типа NULL IS NOT NULL :)
...
Рейтинг: 0 / 0
22.09.2016, 09:42
    #39313138
where 1=0
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
22.09.2016, 09:53
    #39313146
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=0
серый-серый ник,

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

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

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

CORE-1287

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

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

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

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

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

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

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



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


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