Pull to refresh

Comments 8

Это все конечно замечательно, но лучше использовать mORMot Framework и почти забыть про sql)
Почему вы считатете, что выражение
(P.Father = F.ID) and… and (P.Mother <> 20)
может генерировать только SQL. SQL был взят для простоты восприятия.
В реальном проекте генерируется не SQL, а объектную модель условия выборки для ORM, которая передаётся на Application Server и там модифицируетя\дополняется. И только потом трансформируется в SQL.
Т.е. этот подход не заменяет ORM, а дополняет одну из слабых их мест (по состоянию лет 7 назад) — генерацию динамического уловия под контролем компилятора. Т.е. следующая статья может называться «Эмуляция LINQ for mORMot Framework на Delphi».

Покажите, пожалуйста, как будет выглядеть генерация вышеуказанного условия на mORMot Framework engine.
UFO just landed and posted this here
Я, можно сказать, делфист «с рождения» и безумно люблю Паскаль, но уже много-много лет даже не рассатриваю вакансии, где требуется поддерживать Delphi-код. Всё потому, что львиная доля имеющихся Delphi-проектов это, простите мой француский, сборище говнокода, не знающее рефакторинга лет десять. Прочитав в начале статьи о том, что «Клиент программно строит динамические SQL запросы для выполнения на SQL сервере. Запросов много, логика построения размазана по всему клиентскому коду.» я даже поностальгировал, в каком-то смысле: слава богам, что уже миллион лет не приходится иметь дело с такими подельями. Однако, я хотел бы выразить автору статьи огромнейший респект за смелость и упорство. За те качества, которых мне когда-то не хватило, чтобы остаться рядом с проектами такого рода и доводить их до ума.
Мне подсказали, что всё придумано до меня
bugs.freepascal.org/view.php?id=25370

Хочу ещё предостеречь, что в документации
docwiki.embarcadero.com/RADStudio/XE5/en/Operator_Overloading_%28Delphi%29
чётко сказано, что все логические операции (=, <>) должны возвращать Boolean. Т.е. в данном подходе используется недокументированная особенность компилятора, а значит у Embarcadero остаётся полное моральное право изменить поведение компилятора согласно документации. А в больших проектах, которые планируются партироваться на ещё не существующие версии Delphi, необходимо предусмотреть способ отказаться от недокументированных возможностей. Но тут же начальство можно успокоить:
1) Я уверен, что этот подход (кстати, он прокатывает и на C#, только смысла в нём там меньше) заиспотьзуют большенство ORM-ов. Embarcadero придётся поддержать существующее поведение компилятора в будущем.
2) Если что-то пойдёт не так, возьмём наш парсер Паскаля и заменим "=, <>" на вызовы обычных функций. Будет не так красиво смотрться, но работать будет.
По моему, для создания чего-то linq подобного хорошо подходят хелперы, которые, как минимум, есть в fpc.
Sign up to leave a comment.

Articles