小巧、快速、可靠。
選擇其中三項。

SQLite C 介面

找出 IN 約束條件右側的所有元素。

int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);

這些介面僅在虛擬表格實作的 xFilter() 方法 中有用。從任何其他上下文呼叫這些介面會導致未定義的行為,而且可能造成損害。

呼叫 sqlite3_vtab_in_first(X,P) 或 sqlite3_vtab_in_next(X,P) 時的 X 參數應該是呼叫這些常式的 xFilter 方法的其中一個參數,尤其是一個先前使用 sqlite3_vtab_in() 介面在 xBestIndex 方法 中選擇用於一次性 IN 約束條件處理的參數。如果 X 參數不是選擇用於一次性 IN 約束條件處理的 xFilter 參數,則這些常式會返回 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 值已受到保護

另請參閱 物件常數函式 列表。