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);
Ну или как-нибудь в этом духе. Что скажете?
(Парсить запрос, кстати, не так уж и сложно. Достаточно один раз пройтись и вынести из запроса все квотированные блоки, подставив на их место формальные параметры.)