RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
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);

Эти интерфейсы полезны только в методе 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, чтобы указывать на первое или следующее значение RHS в ограничении IN. Если больше нет значений на правой стороне ограничения IN, то *P установлен в NULL, и это возвращает SQLITE_DONE. Возвращаемое значение могло бы быть некоторым другим значением, таким как SQLITE_NOMEM, в случае сбоя.

Значения *ppOut, возвращенные этой функцией, действительны только до следующего вызова этой функции или до конца метода xFilter, из которого вызвали эту функцию. Если виртуальное внедрение таблицы должно сохранить значения *ppOut дольше, оно должно сделать копии. Значения *ppOut protected.