#定义SQLITE_VTAB_CONSTRAINT_SUPPORT 1 #定义SQLITE_VTAB_INNOCUOUS 2 #定义SQLITE_VTAB_DIRECTONLY 3
这些宏为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约束处理。