Virtual Table Configuration Options
Virtual Table Configuration Options
#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
这些宏定义了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 is in the Public Domain.