Spec-Zone.ru › SQLite

Параметры конфигурации виртуальной таблицы

#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
#define SQLITE_VTAB_INNOCUOUS          2
#define SQLITE_VTAB_DIRECTONLY         3
#define SQLITE_VTAB_USES_ALL_SCHEMAS   4

Эти макросы определяют различные параметры для интерфейса sqlite3_vtab_config(), которые реализации виртуальных таблиц виртуальных таблиц могут использовать для настройки и оптимизации своего поведения.

SQLITE_VTAB_CONSTRAINT_SUPPORT
Вызовы вида sqlite3_vtab_config(db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) поддерживаются, где X — целое число. Если X равно нулю, то виртуальная таблица, чей метод xCreate или xConnect вызвал sqlite3_vtab_config(), не поддерживает ограничения. В этой конфигурации (которая является по умолчанию), если вызов метода xUpdate возвращает SQLITE_CONSTRAINT, то весь оператор отменяется, как если бы OR ABORT был указан в операторе SQL пользователя, независимо от фактического режима ON CONFLICT.

Если X не равно нулю, то реализация виртуальной таблицы гарантирует, что если xUpdate возвращает SQLITE_CONSTRAINT, это произойдёт до внесения каких-либо изменений во внутренние или постоянные структуры данных. Если режим ON CONFLICT равен ABORT, FAIL, IGNORE или ROLLBACK, SQLite может отменить оператор или транзакцию базы данных и соответственно отменить или продолжить обработку текущего оператора SQL. Если режим ON CONFLICT равен REPLACE, и метод xUpdate возвращает SQLITE_CONSTRAINT, SQLite обрабатывает это так, как если бы режим ON CONFLICT был ABORT.

Реализации виртуальных таблиц, которые обязаны обрабатывать OR REPLACE, должны делать это в методе xUpdate. Если вызов функции sqlite3_vtab_on_conflict() указывает, что текущая политика ON CONFLICT — REPLACE, реализация виртуальной таблицы должна молча заменить соответствующие строки внутри обратного вызова xUpdate и вернуть SQLITE_OK. Либо, если это невозможно, она может вернуть SQLITE_CONSTRAINT, в этом случае SQLite переходит к обработке ограничений по умолчанию OR ABORT.

SQLITE_VTAB_DIRECTONLY
Вызовы вида sqlite3_vtab_config(db,SQLITE_VTAB_DIRECTONLY) из методов xConnect или xCreate реализации виртуальной таблицы запрещают использование этой виртуальной таблицы в триггерах и представлениях.

SQLITE_VTAB_INNOCUOUS
Вызовы вида sqlite3_vtab_config(db,SQLITE_VTAB_INNOCUOUS) из методов xConnect или xCreate реализации виртуальной таблицы идентифицируют эту виртуальную таблицу как безопасную для использования в триггерах и представлениях. По сути, тег SQLITE_VTAB_INNOCUOUS означает, что виртуальная таблица не может нанести серьезного вреда, даже если она контролируется злоумышленником. Разработчики должны избегать установки флага SQLITE_VTAB_INNOCUOUS, если это не абсолютно необходимо.

SQLITE_VTAB_USES_ALL_SCHEMAS
Вызовы вида sqlite3_vtab_config(db,SQLITE_VTAB_USES_ALL_SCHEMA) из методов xConnect или xCreate реализации виртуальной таблицы указывают планостроителю запросов на начало по крайней мере чтения транзакции на всех схемах ("main", "temp" и любых присоединенных баз данных) всякий раз, когда используется виртуальная таблица.

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/c_vtab_constraint_support.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API