在线文档教程
Sqlite
C界面 | C Interface

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编译时选项时可用。