const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam); int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault); sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64); const char *sqlite3_uri_key(sqlite3_filename z, int N);
這些是實用程式,對於自訂 VFS 實作很有用,它們會檢查資料庫檔案是否為包含特定查詢參數的 URI,如果是,則取得該查詢參數的值。
這些介面的第一個參數(以下簡稱為 F)必須是以下其中之一:
如果 F 是合適的檔名(如上一段所述),且 P 是查詢參數的名稱,則 sqlite3_uri_parameter(F,P) 會傳回 P 參數的值(如果存在),如果 P 未以查詢參數的形式出現在 F 上,則傳回 NULL 指標。如果 P 是 F 的查詢參數,但沒有明確的值,則 sqlite3_uri_parameter(F,P) 會傳回指向空字串的指標。
sqlite3_uri_boolean(F,P,B) 函式假設 P 是一個布林參數,並根據 P 的值傳回 true (1) 或 false (0)。如果查詢參數 P 的值在任何情況下為「yes」、「true」或「on」,或者如果該值以非零數字開頭,則 sqlite3_uri_boolean(F,P,B) 函式會傳回 true (1)。如果查詢參數 P 的值在任何情況下為「no」、「false」或「off」,或者如果該值以數字零開頭,則 sqlite3_uri_boolean(F,P,B) 函式會傳回 false (0)。如果 P 不是 F 上的查詢參數,或者 P 的值與上述任何一項都不相符,則 sqlite3_uri_boolean(F,P,B) 會傳回 (B!=0)。
sqlite3_uri_int64(F,P,D) 函式會將 P 的值轉換為 64 位元帶符號整數並傳回該整數,如果 P 不存在,則傳回 D。如果 P 的值不是整數,則傳回零。
sqlite3_uri_key(F,N) 會傳回指向檔名 F 的第 N 個查詢參數名稱(而非值)的指標,如果 N 小於零或大於查詢參數數量減 1,則傳回 NULL 指標。N 值是以零為基底的,因此 N 應為 0 以取得第一個查詢參數的名稱,1 為第二個參數,依此類推。
如果 F 是 NULL 指標,則 sqlite3_uri_parameter(F,P) 傳回 NULL,sqlite3_uri_boolean(F,P,B) 傳回 B。如果 F 不是 NULL 指標,且不是 SQLite 核心傳遞到 xOpen VFS 方法的資料庫檔案路徑名稱指標,則此函式的行為未定義,且可能不理想。
從 SQLite 3.31.0 版 (2020-01-22) 開始,除了主要的資料庫檔案之外,輸入 F 參數也可以是回滾日誌檔案或 WAL 檔案的名稱。在 3.31.0 版之前,這些函式只有在 F 是主要資料庫檔案的名稱時才能運作。當 F 參數是回滾日誌或 WAL 檔案的名稱時,它可以存取與主要資料庫檔案上找到的所有相同查詢參數。
如需更多資訊,請參閱URI 檔名文件。