FB2.5 не будет допускать смешения стилей связывания?
Модераторы: kdv, Alexey Kovyazin
FB2.5 не будет допускать смешения стилей связывания?
Firebird 2.5 начиная где-то между билдами 26124 и 26147 снапшотов начал ругаться на такую конструкцию: ... from A, B join C ...
Это так и задумано или бажок?
Это так и задумано или бажок?
Re: FB2.5 не будет допускать смешения стилей связывания?
такая конструкция некорректна. либо Вы пишете целиком неявный join, либо целиком явный. Ругается правильно, ибо нефиг.
http://www.ibase.ru/devinfo/joins.htm
http://www.ibase.ru/devinfo/joins.htm
Re: FB2.5 не будет допускать смешения стилей связывания?
Гхм... Я, конечно, дико извиняюсь, но хрен знает сколько лет такая конструкция была вполне корректной и, что самое главное, вполне себе корректно работала.
Ломать вот так вот походя то, что давным-давно работает - не есть зашибись. Хотя это, наверное, не к тебе...
Ломать вот так вот походя то, что давным-давно работает - не есть зашибись. Хотя это, наверное, не к тебе...
Re: FB2.5 не будет допускать смешения стилей связывания?
смешанные джойны в целом вполне допускаются. Но далеко не все из них. Объяснения даны тут:
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
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 не будет допускать смешения стилей связывания?
Код: Выделить всё
Ломать вот так вот походя то, что давным-давно работает - не есть зашибись.
объяснение, как работает from a, b, join c дано в указанной мной статье про join. Dimitr абсолютно прав - если такой запрос писали намеренно, то ок. А если "от балды" - то извините за прямоту, но надо головой думать.
Один из типичных примеров - запрет на присвоение значений new. в after-триггерах. Это не работало по факту, т.е. в after уже запись изменена, но тем не менее много людей такой бред писали. И естественно, что они получили "проблемы" при переходе на FB 2.x, где такая операция явно запрещена, в силу своей бессмысленности. В результате люди стали исправлять код, который НЕ РАБОТАЛ.
В Вашем случае то же самое - код "работал", но Вы (или кто его написал) не понимали как.
Re: FB2.5 не будет допускать смешения стилей связывания?
Во-первых, Дима, если тебе очень хочется мне "выкать", то таки лучше делать это правильно и писать "вы" с маленькой буквы. Президентов и монархов тут вроде нет
Во-вторых, в твоей статье ничего не сказано про то, что такие запросы могут выдавать неправильные результаты. Вот у Еманова по ссылкам - да, сказано.
И таки смешивать джойны тоже можно, оказывается.
В-третьих, что там планомерно уничтожается от версии к версии - малоинтересно. Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
В-четвертых, я и не претендую на полное понимание того, что да как работает, и на вылизанность всей своей туевой хучи запросов, которые часто модифицируются не глядя с помощью копипаста, тоже не претендую. Высматривать каждый раз порядок таблиц во from в примитивных запросах перед тем как воткнуть туда из буфера строку с джойном - это к сильно глазастым. Кое-что и от балды написано, ага. Главное, что оно работало, а теперь не работает.
Я все сказал
Во-вторых, в твоей статье ничего не сказано про то, что такие запросы могут выдавать неправильные результаты. Вот у Еманова по ссылкам - да, сказано.
И таки смешивать джойны тоже можно, оказывается.
В-третьих, что там планомерно уничтожается от версии к версии - малоинтересно. Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
В-четвертых, я и не претендую на полное понимание того, что да как работает, и на вылизанность всей своей туевой хучи запросов, которые часто модифицируются не глядя с помощью копипаста, тоже не претендую. Высматривать каждый раз порядок таблиц во from в примитивных запросах перед тем как воткнуть туда из буфера строку с джойном - это к сильно глазастым. Кое-что и от балды написано, ага. Главное, что оно работало, а теперь не работает.
Я все сказал
Re: FB2.5 не будет допускать смешения стилей связывания?
по правилам русского языка, "вы" с маленькой буквы пишется при обращении к множественному числу, и "Вы" с большой буквы - к конкретному человеку.Во-первых, Дима, если тебе очень хочется мне "выкать", то таки лучше делать это правильно и писать "вы" с маленькой буквы.
Потом, пишет в топике какой-то mustafa, которого я не знаю, и естественно обращаюсь на Вы, а далее отвечает некто IBExpert, и пусть хоть я его трижды знаю, но это виртуально, поэтому ко всем не знакомым лично я обращаюсь именно на "Вы". Привычка такая.
можно, но нужно понимать, что это даст в результате.И таки смешивать джойны тоже можно, оказывается.
ну-ну.В-третьих, что там планомерно уничтожается от версии к версии - малоинтересно.
потому что кривой. и выдавал "то что нужно" только при определенных условиях.Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
вот я именно о том. не надо писать "от балды", надо учить sql. Это я к тому, что я читаю README.incompatibilities.txt от версии к версии, а кто-то его игнорирует.Кое-что и от балды написано, ага.
Re: FB2.5 не будет допускать смешения стилей связывания?
Дима, "Вы" с большой буквы пишется только в официозе. Читай классиков, Пушкина Александра Сергеича, например. Письмо Татьяны Онегину и его ответkdv писал(а): по правилам русского языка, "вы" с маленькой буквы пишется при обращении к множественному числу, и "Вы" с большой буквы - к конкретному человеку.
Еще раз: в твой статье нет ни слова о том, почему такие запросы являются кривыми и могут вернуть неверный результат. НИ СЛОВА.kdv писал(а):потому что кривой. и выдавал "то что нужно" только при определенных условиях.Синтаксис корректный, запрос работал, выдавал то, что нужно. И вдруг работать перестал...
Там только "крайне не рекомендуется" без каких-либо внятных объяснений. Но именно к своей статье ты отсылаешь.
Это здорово, конечно, что ты читаешь README.incompatibilities.txt, но то, что обсуждается, изменилось в одном из снапшотов уже после выхода релиза.Это я к тому, что я читаю README.incompatibilities.txt от версии к версии, а кто-то его игнорирует.
И никаких README.incompatibilities.txt там нет.
Re: FB2.5 не будет допускать смешения стилей связывания?
А что именно обсуждается ?IBExpert писал(а):то, что обсуждается, изменилось в одном из снапшотов уже после выхода релиза.
Re: FB2.5 не будет допускать смешения стилей связывания?
обсуждается CORE-2812, который вносит запрет на некоторые запросы в минором релизе. Что безусловно совсем не хорошо, но в данном случае показалось меньшей из зол. Спросите таблоида
kdv конечно преувеличает со своей паникой, т.к. кричать на каждом углу "мешать джойны нельзя" без каких-либо объяснений - это фигня полная. Тем паче что в общем это вполне допустимый стандартом синтаксис, в отличие от других приведенных примеров. Но с т.з. практического геморроя сермяжная правда тут есть.
но насчет "я тут скопипастил и оно работало" - это, пардон, подстава на бейсбольную биту
kdv конечно преувеличает со своей паникой, т.к. кричать на каждом углу "мешать джойны нельзя" без каких-либо объяснений - это фигня полная. Тем паче что в общем это вполне допустимый стандартом синтаксис, в отличие от других приведенных примеров. Но с т.з. практического геморроя сермяжная правда тут есть.
но насчет "я тут скопипастил и оно работало" - это, пардон, подстава на бейсбольную биту
Re: FB2.5 не будет допускать смешения стилей связывания?
http://www.gramota.ru/spravka/letters?rub=rubric_88Дима, "Вы" с большой буквы пишется только в официозе.
для меня "вы" с маленькой буквы - обращение к множеству.
Код: Выделить всё
Еще раз: в твой статье нет ни слова о том, почему такие запросы являются кривыми и могут вернуть неверный результат. НИ СЛОВА.
в статье объясняется, почему "нельзя". Давайте так - в здравом уме человек такое писать не будет, на 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 не будет допускать смешения стилей связывания?
Я хотел бы, чтобы IBExpert сам ответил на мой вопрос.dimitr писал(а):обсуждается CORE-2812
Ибо я не уверен, что он обсуждает то же самое, что мы имеем в виду.
Re: FB2.5 не будет допускать смешения стилей связывания?
у него в IBE отвалились запросы к MON$ после этого изменения Отсюда и живой интерес к теме. "Оно же работало, факинг шит!"
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: FB2.5 не будет допускать смешения стилей связывания?
Кстати, о зацикливании - да. Это удобный способ догнать таблицу до нужного размера. Понавставлял несколько записей, а потом insert select where id<1000000 быстренько сделает её миллионной. Этакий "вертикальный RPAD".