Задачка: Эмуляция LINQ
От: SuvAlexander  
Дата: 25.11.13 10:15
Оценка:
Ответ меня не интересует. Задачка на подумать и сделать выводы.
Есть 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 в коде должны приводить к соответствующему изменению результата.
Re: Задачка: Эмуляция LINQ
От: Danchik Украина  
Дата: 25.11.13 12:44
Оценка:
Здравствуйте, SuvAlexander, Вы писали:

SA>Ответ меня не интересует. Задачка на подумать и сделать выводы.


Ну сделал выводы, но смысл поста остался непонятен. Так вы хотите сделать как в Linq или мечтаете об этом?
Re[2]: Задачка: Эмуляция LINQ
От: SuvAlexander  
Дата: 25.11.13 17:45
Оценка:
>>Так вы хотите сделать как в Linq или мечтаете об этом?
Задача имеет решешение на Delphi XE2 и Delphi 2007 точно.
Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
Re[3]: Задачка: Эмуляция LINQ
От: Danchik Украина  
Дата: 26.11.13 14:38
Оценка:
Здравствуйте, SuvAlexander, Вы писали:

>>>Так вы хотите сделать как в Linq или мечтаете об этом?

SA>Задача имеет решешение на Delphi XE2 и Delphi 2007 точно.

Как, или вы предлагаете догадываться/придумывать самим? Не понятен смысл топика.

SA>Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.
Re[3]: Задачка: Эмуляция LINQ
От: Danchik Украина  
Дата: 28.11.13 12:29
Оценка:
Здравствуйте, SuvAlexander, Вы писали:

>>>Так вы хотите сделать как в Linq или мечтаете об этом?

SA>Задача имеет решешение на Delphi XE2 и Delphi 2007 точно.
SA>Основная решаемая цель — контроль компилятора соответвия исходного кода структуре базы.

Ну теперь ясно откуда ноги растут

http://habrahabr.ru/post/203970/

Не задумывались прикрутить такой подход, например к 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
Re[4]: Задачка: Эмуляция LINQ
От: SuvAlexander  
Дата: 29.11.13 18:33
Оценка:
Пока я использую самопальный ORM.
Re[5]: Задачка: Эмуляция LINQ
От: SuvAlexander  
Дата: 29.11.13 19:18
Оценка:
А>Вот это было пораньше 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) Если что-то пойдёт не так, возьмём наш парсер Паскаля и заменим "=, <>" на вызовы обычных функций. Будет не так красиво смотрться, но работать будет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.