parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Re: кэширование prepared запросов средствами парсера

Олег 18.04.2003 14:56

OK, это будет очень удобно. Принимаем ваш синтаксис:

$name[^string:sql{select name where id=@id}[
$.id[...]
]]

Механизм обработки запросов с явно указанными параметрами такой:
Если запроса нет в кэше (попадание в кэш определяется банальным сравнение тела запроса), то парсер вызывает не query(), а

void* prepare(services, connection, statement, handlers);

функция должна вернуть хэндл препарированного запроса.

После подготовки или же если запрос есть в кэше, парсер вызывает

void* execute(services, connection, void* statementHandle, int paramsCount, void* params, offset, limit, handlers);

Ну или как-нибудь в этом духе. Что скажете?

(Парсить запрос, кстати, не так уж и сложно. Достаточно один раз пройтись и вынести из запроса все квотированные блоки, подставив на их место формальные параметры.)