Small. Fast. Reliable.
Choose any three.

SQLite C接口

虚拟表配置选项

#定义SQLITE_VTAB_CONSTRAINT_SUPPORT 1
#定义SQLITE_VTAB_INNOCUOUS 2
#定义SQLITE_VTAB_DIRECTONLY 3

这些宏为sqlite3_vtab_config()接口定义了各种选项 ,虚拟表实现可用于自定义和优化其行为。

SQLITE_VTAB_CONSTRAINT_SUPPORT
支持形式为sqlite3_vtab_config(db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X)的调用 ,其中X为整数。如果X为零,则其 xCreatexConnect方法调用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
虚拟表实现的xConnectxCreate方法中,以sqlite3_vtab_config(db,SQLITE_VTAB_DIRECTONLY)形式进行的调用 禁止在触发器和视图中使用该虚拟表。

SQLITE_VTAB_INNOCUOUS
虚拟表实现的xConnectxCreate方法中,以sqlite3_vtab_config(db,SQLITE_VTAB_INNOCUOUS)形式进行的调用将 在触发器和视图中安全使用该虚拟表。从概念上讲,SQLITE_VTAB_INNOCUOUS标记意味着即使虚拟表受到恶意黑客的控制,也不会造成严重危害。除非绝对必要,否则开发人员应避免设置SQLITE_VTAB_INNOCUOUS标志。

另请参见 对象常量函数的列表