Значения ограничений в xBestIndex()
int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
Этот API может быть использован только внутри метода xBestIndex реализации виртуальной таблицы. Результат вызова этого интерфейса за пределами метода xBestIndex не определен и, вероятно, вреден.
Когда интерфейс sqlite3_vtab_rhs_value(P,J,V) вызывается внутри метода xBestIndex реализации виртуальной таблицы, где P является копией указателя на объект sqlite3_index_info, переданного в xBestIndex, а J — индекс от 0 до P->aConstraint[], эта процедура пытается установить *V в значение правой части этого ограничения, если правая часть известна. Если правая часть неизвестна, то *V устанавливается в NULL. Интерфейс sqlite3_vtab_rhs_value(P,J,V) возвращает SQLITE_OK тогда и только тогда, когда *V установлен в значение. Интерфейс sqlite3_vtab_rhs_value(P,J,V) возвращает SQLITE_NOTFOUND, если правая часть J-го ограничения недоступна. Интерфейс 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.
Объект sqlite3_value, возвращённый в *V, является защищённым sqlite3_value и остаётся действительным в течение вызова метода xBestIndex. При возвращении из xBestIndex объект sqlite3_value, возвращённый sqlite3_vtab_rhs_value(), автоматически освобождается.
"_rhs_" в имени этой процедуры — это аббревиатура от "Right-Hand Side" (правой части).
См. также списки Объектов, Констант и Функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/vtab_rhs_value.html