Small. Fast. Reliable.
Choose any three.

SQLite C接口

在历史快照上启动读取事务

int sqlite3_snapshot_open(
  sqlite3 * db,
  const char * zSchema,
  sqlite3_snapshot * pSnapshot
);

sqlite3_snapshot_open(d,S,P)接口或者开始一个新的读事务或升级现有的架构的小号 数据库连接d使得读事务是指历史快照P,而不是最近的更改到数据库。所述sqlite3_snapshot_open()接口返回成功或适当SQLITE_OK错误代码,如果它失败。

为了成功,调用sqlite3_snapshot_open(D,S,P)时,数据库连接不得处于 自动提交模式。如果已在模式S上打开读取事务,则数据库句柄必须没有活动语句(已传递给sqlite3_step()的SELECT语句,但没有传递给sqlite3_reset()或sqlite3_finalize()的语句)。如果违反这些条件之一,或者模式S不存在,或者快照对象无效,则返回SQLITE_ERROR。

如果指定的快照已被checkpoint覆盖,则对sqlite3_snapshot_open()的调用将无法打开。在这种情况下,将返回SQLITE_ERROR_SNAPSHOT。

如果在调用此函数时已经有一个读取事务打开,则如果返回SQLITE_ERROR,SQLITE_BUSY或SQLITE_ERROR_SNAPSHOT,则相同的读取事务保持打开状态(在同一数据库快照上)。如果返回了另一个错误代码(例如SQLITE_PROTOCOL或SQLITE_IOERR错误代码),则未定义读取事务的最终状态。如果返回SQLITE_OK,则现在在数据库快照P上打开读取的事务。

如果数据库连接D不知道模式S的数据库文件处于WAL模式,则sqlite3_snapshot_open(D,S,P)的调用将失败。如果该数据库连接上没有先前的I / O,或者数据库 在数据库连接上的最新I / O之后进入WAL模式,则数据库连接可能不知道该数据库文件处于WAL模式。(提示:针对新打开的数据库连接运行“ PRAGMA application_id ”,以使其准备好使用快照。)

所述sqlite3_snapshot_open()的接口时仅可 SQLITE_ENABLE_SNAPSHOT用于编译时选择。

另请参见 对象常量函数的列表