SQLite C 接口
记录数据库快照
int sqlite3_snapshot_get( sqlite3 *db, const char *zSchema, sqlite3_snapshot **ppSnapshot );
sqlite3_snapshot_get(D,S,P)接口尝试创建一个新的sqlite3_snapshot对象, 该对象记录数据库连接 D 中模式 S 的当前状态。成功时, sqlite3_snapshot_get(D,S,P)接口将指针写入新创建的sqlite3_snapshot对象放入 *P 并返回 SQLITE_OK。如果在调用此函数时模式 S 上还没有打开的读取事务,则会自动打开一个。
要使此功能成功,必须满足以下条件。如果调用 sqlite3_snapshot_get() 时以下任何语句为假,则返回 SQLITE_ERROR。在这种情况下,*P 的最终值未定义。
- 数据库句柄不得处于自动提交模式。
- 数据库连接D的模式S必须是WAL模式的数据库。
- 数据库连接 D 的模式 S 上不能有打开的写事务。
- 自从在磁盘上创建(通过任何连接)以来,一个或多个事务必须已写入当前 wal 文件。这意味着第一次打开后不能立即对没有 wal 文件的 wal 模式数据库进行快照。必须首先向其中写入至少一个事务。
该函数也可能返回 SQLITE_NOMEM。如果在自动提交模式下使用数据库句柄调用它但由于某些其他原因而失败,则未定义是否在模式 S 上打开读取事务。
从成功调用 sqlite3_snapshot_get()返回的sqlite3_snapshot对象必须使用sqlite3_snapshot_free()释放 以避免内存泄漏。
sqlite3_snapshot_get()接口仅在使用 SQLITE_ENABLE_SNAPSHOT编译时选项时可用。