box.prepare()
Подготавливает SQL-запрос, переданный в параметре sql-statement.
Синтаксис и требования для box.prepare такие же, как для
box.execute().
Параметры:
sql-statement(string) — запрос, который должен соответствовать правилам SQL-грамматики
Возвращает
prepared_table — с идентификатором, методами и метаданными
Тип возвращаемого значения
table
box.prepare компилирует SQL-запрос в байт-код и сохраняет байт-код в
кэше. Поскольку компиляция занимает значительное время, подготовка
запроса повышает производительность при многократном выполнении.
Если box.prepare завершается успешно, prepared_table содержит:
stmt_id:integer— идентификатор, сгенерированный с помощью хеширования строки запросаexecute:functionparams:map[name : string, type : string] — описания параметровunprepare:functionmetadata:map[name : string, type : string] (присутствует только для запросов SELECT или PRAGMA и имеет то же содержимое, что и метаданные результирующего набора дляbox.execute)param_count:integer— количество параметров
Полученный результат может использоваться в prepared_table:execute() и в prepared_table:unprepare().
Кэш подготовленных запросов (также называемый хранилищем подготовленных запросов) является «общим», то есть существует один кэш для всех сессий. Однако сессия X не может выполнить запрос, подготовленный сессией Y. Для мониторинга кэша см. box.info().sql. Для изменения размера кэша используйте sql.cache_size.
Подготовленные запросы «устаревают» (становятся недействительными), если любой объект базы данных удаляется, создается или изменяется — даже если объект не упоминается в SQL-запросе, даже если создание, удаление или изменение откатывается, даже если создание, удаление или изменение выполняется в другой сессии.