SQLite C 接口

xBestIndex() 中的约束值

int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);

此 API 只能在虚拟表实现的xBestIndex 方法 中使用。从 xBestIndex 方法外部调用此接口的结果是未定义的,可能有害。

当从虚拟表实现的xBestIndex方法中调用 sqlite3_vtab_rhs_value(P,J,V) 接口时,P 是sqlite3_index_info的副本传递给 xBestIndex 的对象指针和 J 是 P->aConstraint[] 中从 0 开始的索引,然后如果右侧操作数已知,则此例程尝试将 *V 设置为该约束的右侧操作数的值。如果右侧操作数未知,则 *V 设置为 NULL 指针。当且仅当 *V 被设置为一个值时,sqlite3_vtab_rhs_value(P,J,V) 接口返回 SQLITE_OK。如果第 J 个约束的右侧不可用,则 sqlite3_vtab_rhs_value(P,J,V) 接口返回 SQLITE_NOTFOUND。如果出现问题,sqlite3_vtab_rhs_value() 接口可以返回 SQLITE_OK 或 SQLITE_NOTFOUND 以外的结果代码。

sqlite3_vtab_rhs_value() 接口通常只有在约束的右侧操作数是原始 SQL 语句中的文字值时才会成功。如果右侧操作数是一个表达式或对其他列或主机参数的引用,则 sqlite3_vtab_rhs_value() 可能会返回SQLITE_NOTFOUND

一些约束,例如SQLITE_INDEX_CONSTRAINT_ISNULLSQLITE_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”的缩写。

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