int sqlite3_deserialize( sqlite3 *db, /* The database connection */ const char *zSchema, /* Which DB to reopen with the deserialization */ unsigned char *pData, /* The serialized database content */ sqlite3_int64 szDb, /* Number bytes in the deserialization */ sqlite3_int64 szBuf, /* Total size of buffer pData[] */ unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ );
sqlite3_deserialize(D,S,P,N,M,F) 介面會使資料庫連線 D 與資料庫 S 斷開連線,然後根據 P 中包含的序列化數據,將 S 重新開啟為記憶體資料庫。序列化後的資料庫 P 的大小為 N 位元組。M 是緩衝區 P 的大小,它可能大於 N。如果 M 大於 N,且 F 中未設定 SQLITE_DESERIALIZE_READONLY 位元,則允許 SQLite 向記憶體資料庫新增內容,只要總大小不超過 M 位元組。
如果在 F 中設定了 SQLITE_DESERIALIZE_FREEONCLOSE 位元,則當資料庫連線關閉時,SQLite 將會在序列化緩衝區上呼叫 sqlite3_free()。如果設定了 SQLITE_DESERIALIZE_RESIZEABLE 位元,則當資料庫上的寫入操作導致其大小超過 M 位元組時,SQLite 將嘗試使用 sqlite3_realloc64() 增加緩衝區大小。
在資料庫連線 D 關閉之前,應用程式不得修改緩衝區 P 或使其失效。
如果資料庫目前處於讀取交易中或涉及備份操作,sqlite3_deserialize() 介面將會因為 SQLITE_BUSY 而失敗。
無法反序列化到 TEMP 資料庫。如果 sqlite3_deserialize(D,S,P,N,M,F) 的 S 參數為 "temp",則該函式將返回 SQLITE_ERROR。
反序列化的資料庫不應處於 WAL 模式。如果資料庫處於 WAL 模式,則任何嘗試使用該資料庫檔案的操作都將導致 SQLITE_CANTOPEN 錯誤。應用程式可以在呼叫 sqlite3_deserialize(D,S,P,N,M,F) 之前將輸入資料庫 P 的檔案格式版本號(位元組 18 和 19)設定為 0x01,以強制資料庫檔案進入回滾模式並解決此限制。
如果 sqlite3_deserialize(D,S,P,N,M,F) 因任何原因失敗,並且在參數 F 中設定了 SQLITE_DESERIALIZE_FREEONCLOSE 位元,則在返回之前會在參數 P 上呼叫 sqlite3_free()。
如果使用 SQLITE_OMIT_DESERIALIZE 選項編譯 SQLite,則會省略此介面。