Ответ меня не интересует. Задачка на подумать и сделать выводы.
Есть Delphi код:
var
A, B: TField;
aSqlCondition: String;
begin
A := CreateField('A');
B := CreateField('B');
aSqlCondition := (A = B) and ((A = 'ku-ku') or (B = 1) and (A <> B));
Необходимо реализовать TField так, чтобы занчение aSqlCondition стало
"A=B and (A='ku-ku' or B=1 and A<>B)"
.
ЗЫ: Изменения аргументов ‘A’, ‘B’, ‘ku-ku’, 1 в коде должны приводить к соответствующему изменению результата.
>>Так вы хотите сделать как в Linq или мечтаете об этом?
Задача имеет решешение на Delphi XE2 и Delphi 2007 точно.
Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
Здравствуйте, SuvAlexander, Вы писали:
>>>Так вы хотите сделать как в Linq или мечтаете об этом? SA>Задача имеет решешение на Delphi XE2 и Delphi 2007 точно.
Как, или вы предлагаете догадываться/придумывать самим? Не понятен смысл топика.
SA>Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
Здравствуйте, SuvAlexander, Вы писали:
>>>Так вы хотите сделать как в Linq или мечтаете об этом? SA>Задача имеет решешение на Delphi XE2 и Delphi 2007 точно. SA>Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
Не задумывались прикрутить такой подход, например к DORM ?
Re[4]: Задачка: Эмуляция LINQ
От:
Аноним
Дата:
28.11.13 15:21
Оценка:
Здравствуйте, Danchik, Вы писали:
>>>>Так вы хотите сделать как в Linq или мечтаете об этом? SA>>Задача имеет решешение на Delphi XE2 и Delphi 2007 точно. SA>>Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
D>Ну теперь ясно откуда ноги растут
D>http://habrahabr.ru/post/203970/
А>Вот это было пораньше http://bugs.freepascal.org/view.php?id=25370
Если честно, вы меня немного расстроили.
Идея витала у меня давно, но всё упиралось в слепую веру в документацию.
Сдесь http://docwiki.embarcadero.com/RADStudio/XE5/en/Operator_Overloading_%28Delphi%29
чётко сказано, что все логические операции (=, <>) должны возвращать Boolean. Только недели три назад я удосужился проверить, что компилятор более лоялен. Но у Embarcadero остаётся полное моральное право изменить поведение компилятора согласно документации. Для нас это означает, что в больших проектах, которые планируются партироваться на ещё не существующие версии Delphi, необходимо предусмотреть способ отказаться от такого изврата. Но тут же начальство можно успокоить:
1) Я уверен, что этот подход (кстати, он прокатывает и на C#, только смысла в нём там меньше) заиспотьзуют большенство ORM-ов. Embarcadero придётся поддержать существующее поведение компилятора в будущем.
2) Если что-то пойдёт не так, возьмём наш парсер Паскаля и заменим "=, <>" на вызовы обычных функций. Будет не так красиво смотрться, но работать будет.