int sqlite3changeset_start( sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ int nChangeset, /* Size of changeset blob in bytes */ void *pChangeset /* Pointer to blob containing changeset */ ); int sqlite3changeset_start_v2( sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ int nChangeset, /* Size of changeset blob in bytes */ void *pChangeset, /* Pointer to blob containing changeset */ int flags /* SESSION_CHANGESETSTART_* flags */ );
创建一个用于遍历变更集内容的迭代器。如果成功,则 *pp 被设置为指向迭代器句柄,并返回 SQLITE_OK。否则,如果发生错误,则 *pp 被设置为零,并返回一个 SQLite 错误代码。
以下函数可用于推进和查询由此函数创建的变更集迭代器
调用者有责任最终通过将迭代器传递给 sqlite3changeset_finalize() 来销毁它。包含变更集的缓冲区 (pChangeset) 必须在迭代器销毁后保持有效。
假设变更集 Blob 是由 sqlite3session_changeset()、sqlite3changeset_concat() 或 sqlite3changeset_invert() 函数中的一个创建的,则变更集内应用于单个表的变更都会分组在一起。这意味着当应用程序使用由此函数创建的迭代器遍历变更集时,所有与单个表相关的变更都会连续访问。迭代器不会访问应用于表 X 的变更,然后访问表 Y 的变更,之后再访问表 X 的另一个变更。
sqlite3changeset_start_v2() 及其流式等效项的行为可以通过将 支持的标志 的组合作为第 4 个参数传递来修改。
请注意,sqlite3changeset_start_v2() API 仍然处于实验阶段,因此可能会发生变化。