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