Флаги подготовки
#define SQLITE_PREPARE_PERSISTENT 0x01 #define SQLITE_PREPARE_NORMALIZE 0x02 #define SQLITE_PREPARE_NO_VTAB 0x04 #define SQLITE_PREPARE_DONT_LOG 0x10 #define SQLITE_PREPARE_FROM_DDL 0x20
Эти константы определяют различные флаги, которые можно передать в параметр «prepFlags» интерфейсов sqlite3_prepare_v3() и sqlite3_prepare16_v3().
В будущих выпусках SQLite могут появиться новые флаги.
- SQLITE_PREPARE_PERSISTENT
- Флаг SQLITE_PREPARE_PERSISTENT служит подсказкой планировщику запросов о том, что подготовленная инструкция будет храниться долго и, вероятно, использоваться повторно много раз. Без этого флага sqlite3_prepare_v3() и sqlite3_prepare16_v3() предполагают, что подготовленная инструкция будет использована только один раз или, в крайнем случае, несколько раз, а затем вскоре уничтожена с помощью sqlite3_finalize(). Текущая реализация учитывает эту подсказку, не используя память lookaside, чтобы не истощать ограниченный резерв такой памяти. В будущих версиях SQLite эта подсказка может обрабатываться иначе.
- SQLITE_PREPARE_NORMALIZE
- Флаг SQLITE_PREPARE_NORMALIZE не выполняет никаких действий. Ранее этот флаг требовался для любой подготовленной инструкции, которой нужно было использовать интерфейс sqlite3_normalized_sql(). Однако теперь интерфейс sqlite3_normalized_sql() доступен для всех подготовленных инструкций независимо от того, используют они этот флаг или нет.
- SQLITE_PREPARE_NO_VTAB
- Флаг SQLITE_PREPARE_NO_VTAB заставляет компилятор SQL возвращать ошибку (код ошибки SQLITE_ERROR), если инструкция использует какие-либо виртуальные таблицы.
- SQLITE_PREPARE_DONT_LOG
- Флаг SQLITE_PREPARE_DONT_LOG запрещает отправлять ошибки компилятора SQL в журнал ошибок, заданный с помощью SQLITE_CONFIG_LOG. Например, это позволяет выполнять тестовую компиляцию, чтобы проверить правильность синтаксиса SQL, не создавая сообщений в глобальном журнале ошибок в случае ошибки. Если тестовая компиляция завершается неудачей, вызов sqlite3_prepare_v3() возвращает те же сведения об ошибке независимо от того, задан ли этот флаг; он лишь пропускает вызов sqlite3_log(), который записывает ошибку в журнал.
- SQLITE_PREPARE_FROM_DDL
- Флаг SQLITE_PREPARE_FROM_DDL заставляет компилятор SQL применять ограничения безопасности, которые в противном случае применялись бы только при разборе схемы базы данных. Иными словами, этот флаг заставляет компилятор SQL рассматривать подготавливаемую инструкцию SQL так, как если бы она поступила от злоумышленника. Если задан SQLITE_PREPARE_FROM_DDL, а SQLITE_DBCONFIG_TRUSTED_SCHEMA выключен, вызывать можно только SQL-функции с меткой SQLITE_INNOCUOUS, а использовать — только виртуальные таблицы с меткой SQLITE_VTAB_INNOCUOUS. Рекомендуется использовать параметр SQLITE_PREPARE_FROM_DDL при подготовке любого SQL-кода, полученного из частей схемы базы данных. В частности, реализации виртуальных таблиц, выполняющие инструкции SQL, полученные из аргументов инструкции CREATE VIRTUAL TABLE, всегда должны использовать sqlite3_prepare_v3() и задавать флаг SQLITE_PREPARE_FROM_DDL, чтобы предотвратить обход проверок безопасности SQLITE_DBCONFIG_TRUSTED_SCHEMA.
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/c_prepare_dont_log.html