小巧. 快速. 可靠.
三选一.

SQLite C 接口

确定虚拟表列访问是否用于更新

int sqlite3_vtab_nochange(sqlite3_context*);

如果 sqlite3_vtab_nochange(X) 例程在 xColumn 方法的 虚拟表 中被调用,那么如果列是在更新操作中被获取的,并且该列的值不会改变,则它可能会返回 true。 虚拟表实现可以使用此提示作为权限来替换一个计算成本较低的返回值,并且相应的 xUpdate 方法将此返回值理解为“无变化”值。

如果 xColumn 方法调用 sqlite3_vtab_nochange() 并发现该列没有被 UPDATE 语句更改,那么 xColumn 方法可以选择不设置结果就返回,也不调用任何 sqlite3_result_xxxxx() 接口。 在这种情况下, sqlite3_value_nochange(X) 将为 xUpdate 方法中的同一列返回 true。

sqlite3_vtab_nochange() 例程是一种优化。 即使 sqlite3_vtab_nochange() 接口始终返回 false,虚拟表实现也应该继续给出正确的结果。 在当前的实现中,sqlite3_vtab_nochange() 接口对于增强的 UPDATE FROM 语句始终返回 false。

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