SQLite C 接口
确定虚拟表列访问是否用于更新
int sqlite3_vtab_nochange(sqlite3_context*);
如果在虚拟表的xColumn 方法中 调用 sqlite3_vtab_nochange(X) 例程,那么如果列作为 UPDATE 操作的一部分被提取,则它可能返回 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。