#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 约束处理。