int sqlite3session_diff( sqlite3_session *pSession, const char *zFromDb, const char *zTbl, char **pzErrMsg );
如果表 zTbl 尚未附加到作为第一个参数传递的会话对象,则此函数会以与 sqlite3session_attach() 函数相同的方式附加表 zTbl。如果 zTbl 不存在,或它没有主键,则此函数不会执行任何操作(但不会返回错误)。
参数 zFromDb 必须是附加到与包含与通过此函数附加到会话的表兼容的表的会话对象相同的数据库句柄的数据库的名称(“main”、“temp”等)。如果表满足以下条件,则被认为是兼容的:
如果表不兼容,则返回 SQLITE_SCHEMA。如果表兼容,但没有 PRIMARY KEY 列,则不会出错,但不会将任何更改添加到会话对象。与其他会话 API 一样,没有 PRIMARY KEY 的表会被简单地忽略。
此函数向会话对象添加一组更改,这些更改可用于更新数据库 zFrom 中的表(称为“源表”),使其内容与附加到会话对象的表(称为“目标表”)相同。具体而言:
为了更清楚地说明,如果调用此函数,然后使用 sqlite3session_changeset() 构造一个更改集,则在将该更改集应用于数据库 zFrom 后,两个兼容表的內容将完全相同。
如果数据库 zFrom 不存在或不包含所需的兼容表,则会出错。
如果操作成功,则返回 SQLITE_OK。否则,返回 SQLite 错误代码。在这种情况下,如果参数 pzErrMsg 不为 NULL,则 *pzErrMsg 可能被设置为指向包含英文错误消息的缓冲区的指针。调用者有责任使用 sqlite3_free() 释放此缓冲区。