![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Эти интерфейсы полезны только в методе
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, используя такой код: При успехе sqlite3_vtab_in_first(X,P) и sqlite3_vtab_in_next(X,P)
вернут SQLITE_OK и установят *P, чтобы указывать на первое или следующее
значение RHS в ограничении IN. Если больше нет значений на правой стороне
ограничения IN, то *P установлен в NULL, и это возвращает
SQLITE_DONE. Возвращаемое значение могло бы
быть некоторым другим значением, таким как SQLITE_NOMEM, в случае сбоя. Значения *ppOut, возвращенные этой функцией, действительны только до
следующего вызова этой функции или до конца метода xFilter, из которого
вызвали эту функцию. Если виртуальное внедрение таблицы должно сохранить
значения *ppOut дольше, оно должно сделать копии.
Значения *ppOut protected.
Choose any three.
SQLite C Interface
Найдите все элементы на правой стороне ограничения IN
int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);
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
}