void *sqlite3_wal_hook( sqlite3*, int(*)(void *,sqlite3*,const char*,int), void* );
The sqlite3_wal_hook() 函数用于注册一个回调函数,该函数在每次将数据提交到 wal 模式下的数据库时调用。
回调函数由 SQLite 在提交完成后且数据库相关写入锁释放后调用,因此实现可以根据需要读取、写入或 检查点 数据库。
当回调函数被调用时,传递给它的第一个参数是注册回调函数时传递给 sqlite3_wal_hook() 的第三个参数的副本。第二个参数是数据库句柄的副本。第三个参数是写入的数据库的名称 - "main" 或已 附加 数据库的名称。第四个参数是当前预写日志文件中的页面数量,包括刚刚提交的页面。
回调函数通常应返回 SQLITE_OK。如果返回错误代码,该错误将传播回 SQLite 代码库,导致导致回调的语句报告错误,尽管提交仍然会发生。如果回调函数返回 SQLITE_ROW 或 SQLITE_DONE,或者如果它返回的值与任何有效的 SQLite 错误代码不对应,则结果未定义。
单个数据库句柄一次最多只能注册一个预写日志回调。调用 sqlite3_wal_hook() 会替换任何先前注册的预写日志回调。返回值是先前调用(如果有)的第三个参数的副本,或者为 0。请注意,sqlite3_wal_autocheckpoint() 接口和 wal_autocheckpoint pragma 都会调用 sqlite3_wal_hook() 并会覆盖任何先前的 sqlite3_wal_hook() 设置。