#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(), который можно использовать, чтобы настроить и оптимизировать виртуальную таблицу.
Если 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.