Record A Database Snapshot
Record A Database Snapshot
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()时以下任何语句为false,则返回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编译时选项时可用。