int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
此 API 只能在 xBestIndex 方法 的 虚拟表 实现中使用。在 xBestIndex 方法之外调用此接口的结果是未定义的,并且可能造成危害。
当 sqlite3_vtab_rhs_value(P,J,V) 接口在 xBestIndex 方法的 虚拟表 实现中被调用时,其中 P 是传递到 xBestIndex 的 sqlite3_index_info 对象指针的副本,J 是 P->aConstraint[] 中的 0 索引,则此例程会尝试将 *V 设置为该约束的右侧操作数的值,如果右侧操作数已知。如果右侧操作数未知,则 *V 将被设置为 NULL 指针。sqlite3_vtab_rhs_value(P,J,V) 接口仅当 *V 被设置为值时才返回 SQLITE_OK。sqlite3_vtab_rhs_value(P,J,V) 接口在第 J 个约束的右侧不可用时返回 SQLITE_NOTFOUND。sqlite3_vtab_rhs_value() 接口如果出现错误,则可能返回除 SQLITE_OK 或 SQLITE_NOTFOUND 之外的结果代码。
sqlite3_vtab_rhs_value() 接口通常只有在约束的右侧操作数是原始 SQL 语句中的字面量值时才成功。如果右侧操作数是表达式或对其他列或 主机参数 的引用,则 sqlite3_vtab_rhs_value() 可能会返回 SQLITE_NOTFOUND。
某些约束,例如 SQLITE_INDEX_CONSTRAINT_ISNULL 和 SQLITE_INDEX_CONSTRAINT_ISNOTNULL,没有右侧操作数。对于此类约束,sqlite3_vtab_rhs_value() 始终返回 SQLITE_NOTFOUND。
在 *V 中返回的 sqlite3_value 对象是受保护的 sqlite3_value,在 xBestIndex 方法调用的持续时间内保持有效。当 xBestIndex 返回时,sqlite3_vtab_rhs_value() 返回的 sqlite3_value 对象将被自动释放。
此例程名称中的 "_rhs_" 是 "Right-Hand Side"(右侧)的缩写。