int sqlite3session_diff( sqlite3_session *pSession, const char *zFromDb, const char *zTbl, char **pzErrMsg );
如果尚未附加至作為第一個引數傳遞的 session 物件,此函式會以與 sqlite3session_attach() 函式相同的方式附加資料表 zTbl。如果 zTbl 不存在,或其沒有主鍵,此函式為空操作(但不會傳回錯誤)。
引數 zFromDb 必須是附加至與 session 物件相同的資料庫處理常式的資料庫名稱(「main」、「temp」等),其中包含與此函式附加至 session 的資料表相容的資料表。資料表會在下列情況下被視為相容:
如果資料表不相容,會傳回 SQLITE_SCHEMA。如果資料表相容,但沒有任何 PRIMARY KEY 欄位,則不會產生錯誤,但不會對 session 物件新增任何變更。與其他 session API 一樣,沒有 PRIMARY KEY 的資料表會被忽略。
此函式會新增一組變更至 session 物件,可使用該組變更來更新資料庫 zFrom 中的資料表(稱為「來源資料表」),使其內容與附加至 session 物件的資料表(稱為「目標資料表」)相同。具體來說:
說明一下,如果呼叫此函數,然後使用 sqlite3session_changeset() 建構變更集,在將該變更集套用至資料庫 zFrom 之後,兩個相容資料表的內容將相同。
如果資料庫 zFrom 不存在或不包含必要的相容資料表,則會發生錯誤。
如果操作成功,會傳回 SQLITE_OK。否則,會傳回 SQLite 錯誤碼。在此情況下,如果引數 pzErrMsg 不為 NULL,*pzErrMsg 可能會設定為指向包含英文錯誤訊息的緩衝區。呼叫端負責使用 sqlite3_free() 釋放此緩衝區。