小。 速度很快。 可靠。 选择任意三个选项。
int sqlite3_wal_checkpoint_v2( sqlite3*db,/*数据库句柄*/ const char*zDb,/*附加数据库的名称(或NULL)*/ int eMode,/*SQLITE_CHECKPOINT_*值*/ int*pnLog,/*OUT:WAL日志的大小(以帧为单位)*/ int*pnCkpt/*OUT:检查点的总帧数*/ );
sqlite3_wal_checkpoint_v2(D,X,M,L,C)接口运行检查点 对数据库X的操作 数据库连接 D处于模式M。状态 信息被写回L和C指向的整数。 M参数必须有效 检查站模式 :
SQLITE_CHECKPOINT_PASSIVE(SQLITE_检查点_被动) 在不等待任何数据库的情况下,检查尽可能多的帧 读取器或写入器完成,然后同步数据库文件(如果所有帧) 日志中有检查点。 这个 busy-handler回调 从不在SQLITE_CHECKPOINT_PASSIVE模式下调用。 另一方面,被动模式可能会使检查点未完成 如果有并发的读者或作者。
SQLITE_CHECKPOINT_FULL(SQLITE_CHECKPOINT_FULL) 此模式阻塞(它调用 busy-handler回调 )直到没有 数据库编写器和所有读者正在读取最新的数据库 快照。 然后,它检查日志文件中的所有帧,并同步 数据库文件。 此模式在挂起时阻止新的数据库写入程序, 但新的数据库阅读器可以不受阻碍地继续使用。
SQLITE_CHECKPOINT_RESTART(SQLITE_检查点_重新启动) 此模式的工作方式与SQLITE_CHECKPOINT_FULL相同,但添加了 在检查指向日志文件后,它会阻止(调用 busy-handler回调 ) 直到所有读卡器都只读取数据库文件。 这确保了 下一个写入程序将从头开始重新启动日志文件。 与SQLITE_CHECKPOINT_FULL一样,此模式会阻止新的 数据库写入程序在挂起时尝试,但不会妨碍读取程序。
SQLITE_CHECKPOINT_TRUNCATE(SQLITE_检查点_运行) 此模式的工作方式与SQLITE_CHECKPOINT_RESTART相同 此外,它还将之前的日志文件截断为零字节 成功回归。
如果pnLog不为NULL,则*pnLog设置为 如果检查点由于以下原因无法运行,则将日志文件或设置为-1 错误或数据库不在 WAL模式 。如果pnCkpt不是 NULL,则*pnCkpt设置为 日志文件(包括函数之前已经检查过的任何日志文件 如果检查点由于错误或 因为数据库未处于WAL模式。 注意,成功后 完成SQLITE_CHECKPOINT_TRUNCATE后,日志文件将 截断为零字节,因此*pnLog和*pnCkpt都将设置为零。
所有调用都会在数据库文件上获得一个独占的“检查点”锁。 如果 任何其他进程同时运行检查点操作 无法获取锁,并返回SQLITE_BUSY。 即使有 繁忙处理程序配置,在这种情况下将不会调用它。
SQLITE_CHECKPOINT_FULL、RESTART和TRUNCATE模式还获得 数据库文件上的独占“writer”锁。 如果写入器锁不能 立即获取,配置busy-handler,调用它并 写入器锁将重试,直到busy-handler返回0或锁 成功获得。 在等待时也会调用busy-handler 如上所述的数据库读取器。 如果busy-handler在之前返回0 获取writer锁,或者在等待数据库读取器时 检查点操作从该点开始的方式与 SQLITE_CHECKPOINT_PASSIVE-检查点尽可能多的帧 没有任何阻碍。 在本例中返回SQLITE_BUSY。
如果参数zDb为NULL或指向零长度字符串,则 尝试对所有WAL数据库执行指定的操作 附属的 到 数据库连接 数据库。 在这种情况下 写入输出参数*pnLog和*pnCkpt的值未定义。 如果 处理一个或多个 已连接WAL数据库,仍在尝试对任何剩余的 附加的数据库和SQLITE_BUSY在末尾返回。 如果有其他 处理附加数据库时出错,放弃处理 并立即将错误代码返回给调用者。 如果没有错误 处理附加的 数据库,则返回SQLITE_OK。
如果数据库zDb是不在WAL中的附加数据库的名称 模式下,返回SQLITE_OK,并且*pnLog和*pnCkpt都设置为-1。 如果 zDb不是NULL(或零长度字符串),并且不是任何 附加数据库SQLITE_ERROR返回给调用者。
除非返回SQLITE_MISUSE, sqlite3_wal_checkpoint_v2()接口 设置查询的错误信息 sqlite3_errcode() 和 sqlite3_errmsg() .
这个 PRAGMA wal_检查点 命令可用于调用此接口 来自SQL。
另请参见列表 物体 , 常量 、和 功能 .