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 。