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

SQLite C 介面

虛擬表格設定選項

#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
#define SQLITE_VTAB_INNOCUOUS          2
#define SQLITE_VTAB_DIRECTONLY         3
#define SQLITE_VTAB_USES_ALL_SCHEMAS   4

這些巨集定義了 sqlite3_vtab_config() 介面的各種選項,虛擬表格 的實作可以使用這些選項來自訂和優化其行為。

SQLITE_VTAB_CONSTRAINT_SUPPORT
支援 sqlite3_vtab_config(db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) 形式的呼叫,其中 X 是一個整數。如果 X 為零,則呼叫 sqlite3_vtab_config()虛擬表格xCreatexConnect 方法不支援約束。在此設定(預設設定)中,如果對 xUpdate 方法的呼叫返回 SQLITE_CONSTRAINT,則會將整個陳述式回滾,如同使用者 SQL 陳述式中已指定 OR ABORT 一樣,無論實際指定的 ON CONFLICT 模式為何。

如果 X 不為零,則虛擬表格實作保證,如果 xUpdate 返回 SQLITE_CONSTRAINT,它會在對內部或永久性資料結構進行任何修改之前執行此操作。如果 ON CONFLICT 模式為 ABORT、FAIL、IGNORE 或 ROLLBACK,SQLite 可以回滾陳述式或資料庫交易,並根據需要放棄或繼續處理目前的 SQL 陳述式。如果 ON CONFLICT 模式是 REPLACE 且 xUpdate 方法返回 SQLITE_CONSTRAINT,SQLite 會將此情況處理為 ON CONFLICT 模式為 ABORT。

需要處理 OR REPLACE 的虛擬表格實作必須在 xUpdate 方法中執行此操作。如果對 sqlite3_vtab_on_conflict() 函式的呼叫指出目前的 ON CONFLICT 策略是 REPLACE,虛擬表格實作應該在 xUpdate 回呼中靜默地替換適當的列並返回 SQLITE_OK。或者,如果無法執行此操作,它可能會返回 SQLITE_CONSTRAINT,在這種情況下,SQLite 會退回到 OR ABORT 約束處理。

SQLITE_VTAB_DIRECTONLY
虛擬表格 實作的 xConnectxCreate 方法中呼叫 sqlite3_vtab_config(db,SQLITE_VTAB_DIRECTONLY) 會禁止在觸發程序和視圖中使用該虛擬表格。

SQLITE_VTAB_INNOCUOUS
虛擬表格 實作的 xConnectxCreate 方法中呼叫 sqlite3_vtab_config(db,SQLITE_VTAB_INNOCUOUS) 會將該虛擬表格標識為可在觸發程序和視圖中安全使用。從概念上講,SQLITE_VTAB_INNOCUOUS 標籤表示即使虛擬表格被惡意駭客控制,也不會造成嚴重損害。開發人員應避免設定 SQLITE_VTAB_INNOCUOUS 旗標,除非絕對必要。

SQLITE_VTAB_USES_ALL_SCHEMAS
虛擬表格 實作的 xConnectxCreate 方法中呼叫 sqlite3_vtab_config(db,SQLITE_VTAB_USES_ALL_SCHEMA) 會指示查詢規劃器在每次使用虛擬表格時,至少在所有結構描述(「main」、「temp」和任何 ATTACH 的資料庫)上開始讀取交易。

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