小巧、快速、可靠。
三者擇其三。

SQLite C 介面

自動真空壓縮數量回調 (Autovacuum Compaction Amount Callback)

int sqlite3_autovacuum_pages(
  sqlite3 *db,
  unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
  void*,
  void(*)(void*)
);

sqlite3_autovacuum_pages(D,C,P,X) 介面會註冊一個回調函數 C,該函數會在每次自動真空資料庫檔案之前被呼叫。 回調函數會分別傳入通用資料指標 (P) 的副本、正在進行自動真空的附加資料庫的 schema 名稱、資料庫檔案的大小(以頁面為單位)、閒置頁面的數量,以及每頁的位元組數。 回調函數應返回自動真空應移除的閒置頁面數量。 如果回調函數返回零,則不會執行自動真空。 如果返回的值大於或等於閒置頁面的數量,則會執行完整的自動真空。

如果在事務提交過程中有多個 ATTACH 的資料庫檔案被修改,則會針對每個檔案分別呼叫自動真空頁面回調函數。

此回調函數不可重入。 回調函數不應嘗試呼叫任何其他 SQLite 介面。 否則,可能會發生不好的事情,包括區段錯誤和資料庫檔案損壞。 回調函數應該是一個簡單的函數,它對其輸入參數進行一些算術運算並返回結果。

sqlite3_autovacuum_pages(D,C,P,X) 中的 X 參數是 P 參數的選用解構器。 如果 X 不為 NULL,則每當資料庫連線關閉或回調函數被另一次 sqlite3_autovacuum_pages() 呼叫覆蓋時,都會呼叫 X(P)。

每個資料庫連線只有一個自動真空頁面回調函數。 每次呼叫 sqlite3_autovacuum_pages() 介面都會覆蓋該資料庫連線之前的所有呼叫。 如果 sqlite3_autovacuum_pages(D,C,P,X) 的回調參數 (C) 是 NULL 指標,則自動真空步驟回調函數將被取消。 sqlite3_autovacuum_pages() 的返回值通常是 SQLITE_OK,但如果發生錯誤,則可能是其他錯誤代碼。 目前的實作只會返回 SQLITE_OK 或 SQLITE_MISUSE,但在未來的版本中可能會新增其他返回代碼。

如果未指定自動真空頁面回調函數(通常情況)或為回調函數提供了 NULL 指標,則預設行為是清空所有閒置頁面。 換句話說,預設行為與回調函數如下所示相同

    unsigned int demonstration_autovac_pages_callback(
      void *pClientData,
      const char *zSchema,
      unsigned int nDbPage,
      unsigned int nFreePage,
      unsigned int nBytePerPage
    ){
      return nFreePage;
    }

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