Small. Fast. Reliable.
Choose any three.

SQLite C接口

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

int sqlite3_vtab_nochange(sqlite3_context *);

如果在虚拟表xColumn 方法中调用了sqlite3_vtab_nochange(X)例程,则如果作为UPDATE操作的一部分来获取该列(在此期间该列的值不会更改),则该例程可能返回true。虚拟表实现可以使用此提示作为许可来替换返回值,该返回值的计算成本较低,并且相应的 xUpdate方法将其理解为“不变”值。

如果xColumn方法调用sqlite3_vtab_nochange()并发现UPDATE语句未更改该列,则xColumn方法可以选择返回而不设置结果,而无需调用任何sqlite3_result_xxxxx()接口。在这种情况下,对于xUpdate方法中的同一列,sqlite3_value_nochange(X)将返回true 。

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

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