Страница 1 из 1

FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 16 дек 2010, 10:38
mustafa
Firebird 2.5 начиная где-то между билдами 26124 и 26147 снапшотов начал ругаться на такую конструкцию: ... from A, B join C ...
Это так и задумано или бажок?

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 16 дек 2010, 12:13
kdv
такая конструкция некорректна. либо Вы пишете целиком неявный join, либо целиком явный. Ругается правильно, ибо нефиг.
http://www.ibase.ru/devinfo/joins.htm

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 16 дек 2010, 13:18
IBExpert
Гхм... Я, конечно, дико извиняюсь, но хрен знает сколько лет такая конструкция была вполне корректной и, что самое главное, вполне себе корректно работала.
Ломать вот так вот походя то, что давным-давно работает - не есть зашибись. Хотя это, наверное, не к тебе...

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 16 дек 2010, 13:41
dimitr
смешанные джойны в целом вполне допускаются. Но далеко не все из них. Объяснения даны тут:
http://tracker.firebirdsql.org/browse/CORE-2812

а насчет "вполне себе корректно работала" позволю себе не согласиться:
http://tracker.firebirdsql.org/browse/CORE-94
http://tracker.firebirdsql.org/browse/CORE-1668
http://tracker.firebirdsql.org/browse/CORE-2378

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 17 дек 2010, 10:26
kdv

Код: Выделить всё

Ломать вот так вот походя то, что давным-давно работает - не есть зашибись.
зашибись. в FB начиная с 1.0 планомерно уничтожают "возможности" парсера, которые позволяли выполнять некорректные и нестандартные запросы, которые на разных данных могут выдавать разные (!) результаты.
объяснение, как работает from a, b, join c дано в указанной мной статье про join. Dimitr абсолютно прав - если такой запрос писали намеренно, то ок. А если "от балды" - то извините за прямоту, но надо головой думать.
Один из типичных примеров - запрет на присвоение значений new. в after-триггерах. Это не работало по факту, т.е. в after уже запись изменена, но тем не менее много людей такой бред писали. И естественно, что они получили "проблемы" при переходе на FB 2.x, где такая операция явно запрещена, в силу своей бессмысленности. В результате люди стали исправлять код, который НЕ РАБОТАЛ.

В Вашем случае то же самое - код "работал", но Вы (или кто его написал) не понимали как.

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 18 дек 2010, 16:44
IBExpert
Во-первых, Дима, если тебе очень хочется мне "выкать", то таки лучше делать это правильно и писать "вы" с маленькой буквы. Президентов и монархов тут вроде нет :D
Во-вторых, в твоей статье ничего не сказано про то, что такие запросы могут выдавать неправильные результаты. Вот у Еманова по ссылкам - да, сказано.
И таки смешивать джойны тоже можно, оказывается.
В-третьих, что там планомерно уничтожается от версии к версии - малоинтересно. Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
В-четвертых, я и не претендую на полное понимание того, что да как работает, и на вылизанность всей своей туевой хучи запросов, которые часто модифицируются не глядя с помощью копипаста, тоже не претендую. Высматривать каждый раз порядок таблиц во from в примитивных запросах перед тем как воткнуть туда из буфера строку с джойном - это к сильно глазастым. Кое-что и от балды написано, ага. Главное, что оно работало, а теперь не работает.
Я все сказал :P

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 00:01
kdv
Во-первых, Дима, если тебе очень хочется мне "выкать", то таки лучше делать это правильно и писать "вы" с маленькой буквы.
по правилам русского языка, "вы" с маленькой буквы пишется при обращении к множественному числу, и "Вы" с большой буквы - к конкретному человеку.
Потом, пишет в топике какой-то mustafa, которого я не знаю, и естественно обращаюсь на Вы, а далее отвечает некто IBExpert, и пусть хоть я его трижды знаю, но это виртуально, поэтому ко всем не знакомым лично я обращаюсь именно на "Вы". Привычка такая.
И таки смешивать джойны тоже можно, оказывается.
можно, но нужно понимать, что это даст в результате.
В-третьих, что там планомерно уничтожается от версии к версии - малоинтересно.
ну-ну.
Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
потому что кривой. и выдавал "то что нужно" только при определенных условиях.
Кое-что и от балды написано, ага.
вот я именно о том. не надо писать "от балды", надо учить sql. Это я к тому, что я читаю README.incompatibilities.txt от версии к версии, а кто-то его игнорирует.

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 09:37
IBExpert
kdv писал(а): по правилам русского языка, "вы" с маленькой буквы пишется при обращении к множественному числу, и "Вы" с большой буквы - к конкретному человеку.
Дима, "Вы" с большой буквы пишется только в официозе. Читай классиков, Пушкина Александра Сергеича, например. Письмо Татьяны Онегину и его ответ :P
kdv писал(а):
Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
потому что кривой. и выдавал "то что нужно" только при определенных условиях.
Еще раз: в твой статье нет ни слова о том, почему такие запросы являются кривыми и могут вернуть неверный результат. НИ СЛОВА.
Там только "крайне не рекомендуется" без каких-либо внятных объяснений. Но именно к своей статье ты отсылаешь.
Это я к тому, что я читаю README.incompatibilities.txt от версии к версии, а кто-то его игнорирует.
Это здорово, конечно, что ты читаешь README.incompatibilities.txt, но то, что обсуждается, изменилось в одном из снапшотов уже после выхода релиза.
И никаких README.incompatibilities.txt там нет.

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 13:14
hvlad
IBExpert писал(а):то, что обсуждается, изменилось в одном из снапшотов уже после выхода релиза.
А что именно обсуждается ?

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 19:46
dimitr
обсуждается CORE-2812, который вносит запрет на некоторые запросы в минором релизе. Что безусловно совсем не хорошо, но в данном случае показалось меньшей из зол. Спросите таблоида :-)

kdv конечно преувеличает со своей паникой, т.к. кричать на каждом углу "мешать джойны нельзя" без каких-либо объяснений - это фигня полная. Тем паче что в общем это вполне допустимый стандартом синтаксис, в отличие от других приведенных примеров. Но с т.з. практического геморроя сермяжная правда тут есть.

но насчет "я тут скопипастил и оно работало" - это, пардон, подстава на бейсбольную биту 8)

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 20:01
kdv
Дима, "Вы" с большой буквы пишется только в официозе.
http://www.gramota.ru/spravka/letters?rub=rubric_88
для меня "вы" с маленькой буквы - обращение к множеству.

Код: Выделить всё

Еще раз: в твой статье нет ни слова о том, почему такие запросы являются кривыми и могут вернуть неверный результат. НИ СЛОВА.
там написано, что крайне не рекомендуется, потому что на самом деле это будет не join, а cross join, т.е. декартово произведение.
т.к. кричать на каждом углу "мешать джойны нельзя" без каких-либо объяснений - это фигня полная.
в статье объясняется, почему "нельзя". Давайте так - в здравом уме человек такое писать не будет, на 90%. Если программист написал лажу, то говорить что "так можно, и оно работало", не оправдание. В IB можно много всякой херни писать, которая "работала", и которую в ФБ уже писать нельзя. Начиная с ambiguous queries.

Ко мне может быть только одна претензия - что я жестко отношусь к данному вопросу. Но я к нему так отношусь, потому что все-таки я вижу, ПОЧЕМУ в массе люди так пишут.
CORE-2812 - вполне справедливая вещь, и уж тут говорить что "я знаю что пишу и правильно пишу", по-моему слишком.
Претензии к CORE-2812 есть? ну так пишите претензии в трекер. Только с пометкой, что "в стандарте вот так, и должно быть вот так, и результат должен быть вот такой, и т.д.". А не с жалобами что "я тут нафигачил, у меня это работало, а теперь нет".
Или переходите на InterBase, там кривизна SQL вообще не исправляется, писать можно все что хочешь.

p.s. дискуссия ни о чем, собственно. Помню, Дед выступал против исправления update set a=b, b=a, потому что у него эта фича используется. Одновременно на эту "фичу" был наезд со стороны пользователей других СУБД. Еще раз подчеркну - в ФБ регулярно изничтожается масса кривизны. То что конкретный человек попал на эту кривизну - его собственный недосмотр.
Вполне вероятно, что когда исправят зацикливание insert into select from, найдутся люди, которые тоже будут против. И что?

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 21:21
hvlad
dimitr писал(а):обсуждается CORE-2812
Я хотел бы, чтобы IBExpert сам ответил на мой вопрос.
Ибо я не уверен, что он обсуждает то же самое, что мы имеем в виду.

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 19 дек 2010, 21:41
dimitr
у него в IBE отвалились запросы к MON$ после этого изменения :-) Отсюда и живой интерес к теме. "Оно же работало, факинг шит!" :-)

Re: FB2.5 не будет допускать смешения стилей связывания?

Добавлено: 20 дек 2010, 14:33
Dimitry Sibiryakov
Кстати, о зацикливании - да. Это удобный способ догнать таблицу до нужного размера. Понавставлял несколько записей, а потом insert select where id<1000000 быстренько сделает её миллионной. Этакий "вертикальный RPAD".