SELECT * FROM gd_contact z JOIN gd_people p ON p.contactkey = z.idНапоминаем, что главная таблица бизнес-объекта у нас всегда имеет алиас z.
Во время выполнения программы, после создания экземпляра бизнес-объекта, в процессе его открытия (не забываем, что БО является набором данных, т.н. датасетом), происходит последовательная разборка запроса, добавление списка пользовательских полей (для ссылок добавляются джоины на справочники), и обратная сборка запроса. Информация о пользовательских полях и их типах берется из глобального объекта atDatabase.
То ли существующий парсер работает достаточно медленно, то ли все дело в обращении к объекту atDatabase (точных замеров не производилось), после формирования запроса он кэшируется и создаваемые позже объекты такого же типа используют уже готовый текст запроса из кэша.
Собственно, задание:
- В классе TatSQLSetup заменить старый парсер на новый.
Откомпилированную грамматику Firebird SQL подлинковать к экзешнику ввиде двоичного ресурса.
Проверить быстродействие нового парсера и, возможно, отказаться от кэширования сформированного текста запроса.
Код, использующий новый парсер, отделить от существующего условной компиляцией под символом NEW_SQL_PARSER.
1 комментарий:
Первоначальный парсинг начального запроса достаточно быстрый, там медленное соединение по внешним ключам по left join таблиц.
Отправить комментарий