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

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Ответить
mustafa
Сообщения: 67
Зарегистрирован: 07 мар 2006, 17:53

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

Сообщение mustafa » 16 дек 2010, 10:38

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 16 дек 2010, 12:13

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

IBExpert
Сообщения: 3
Зарегистрирован: 16 дек 2010, 13:12

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

Сообщение IBExpert » 16 дек 2010, 13:18

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

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

Сообщение dimitr » 16 дек 2010, 13:41

смешанные джойны в целом вполне допускаются. Но далеко не все из них. Объяснения даны тут:
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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 17 дек 2010, 10:26

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

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

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

IBExpert
Сообщения: 3
Зарегистрирован: 16 дек 2010, 13:12

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

Сообщение IBExpert » 18 дек 2010, 16:44

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 19 дек 2010, 00:01

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

IBExpert
Сообщения: 3
Зарегистрирован: 16 дек 2010, 13:12

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

Сообщение IBExpert » 19 дек 2010, 09:37

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

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

Сообщение hvlad » 19 дек 2010, 13:14

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

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

Сообщение dimitr » 19 дек 2010, 19:46

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

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 19 дек 2010, 20:01

Дима, "Вы" с большой буквы пишется только в официозе.
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, найдутся люди, которые тоже будут против. И что?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

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

Сообщение hvlad » 19 дек 2010, 21:21

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

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

Сообщение dimitr » 19 дек 2010, 21:41

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

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

Сообщение Dimitry Sibiryakov » 20 дек 2010, 14:33

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

Ответить