Найти все элементы справа от ограничения IN
Найти все элементы справа от ограничения IN.
int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut); int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);
Эти интерфейсы полезны только внутри метода xFilter() реализации виртуальной таблицы виртуальной таблицы. Результат вызова этих интерфейсов из любого другого контекста неопределен и, вероятно, вреден.
Параметр X в вызове sqlite3_vtab_in_first(X,P) или sqlite3_vtab_in_next(X,P) должен быть одним из параметров метода xFilter, который вызывает эти функции, и, конкретно, параметром, который ранее был выбран для обработки ограничения IN «все сразу» с использованием интерфейса sqlite3_vtab_in() в методе xBestIndex. Если параметр X не является аргументом xFilter, который был выбран для обработки ограничения IN «все сразу», то эти функции возвращают SQLITE_ERROR.
Используйте эти функции для доступа ко всем значениям справа от ограничения IN, используя код, подобный следующему:
for(rc=sqlite3_vtab_in_first(pList, &pVal);
rc==SQLITE_OK && pVal;
rc=sqlite3_vtab_in_next(pList, &pVal)
){
// do something with pVal
}
if( rc!=SQLITE_OK ){
// an error has occurred
}
При успешном выполнении функции sqlite3_vtab_in_first(X,P) и sqlite3_vtab_in_next(X,P) возвращают SQLITE_OK и устанавливают *P для указания первого или следующего значения справа от ограничения IN. Если больше значений справа от ограничения IN нет, то *P устанавливается в NULL, а эти функции возвращают SQLITE_DONE. Возвращаемое значение может быть другим значением, например, SQLITE_NOMEM, в случае сбоя.
Значения *ppOut, возвращаемые этими функциями, действительны только до следующего вызова любой из этих функций или до конца метода xFilter, из которого были вызваны эти функции. Если реализации виртуальной таблицы необходимо сохранить значения *ppOut дольше, она должна сделать копии. Значения *ppOut защищены защищены.
См. также списки Объектов, Констант и Функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/vtab_in_first.html