int sqlite3_autovacuum_pages( sqlite3 *db, unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), void*, void(*)(void*) );
sqlite3_autovacuum_pages(D,C,P,X) 接口注册一个回调函数 C,该函数在数据库文件的每次自动真空之前被调用。回调函数传递通用数据指针 (P) 的副本,正在进行自动真空的附加数据库的模式名称,数据库文件的大小(以页为单位),空闲页的数量以及每页的字节数。回调函数应返回自动真空应删除的空闲页数。如果回调函数返回零,则不会发生自动真空。如果返回值大于或等于空闲页数,则会发生完全自动真空。
如果有多个附加的数据库文件作为事务提交的一部分被修改,则会为每个文件分别调用自动真空页回调。
回调函数不是可重入的。 回调函数不应尝试调用任何其他 SQLite 接口。如果这样做,可能会发生不良情况,包括段错误和数据库文件损坏。回调函数应该是一个简单的函数,对它的输入参数进行一些算术运算并返回结果。
sqlite3_autovacuum_pages(D,C,P,X) 的 X 参数是 P 参数的可选析构函数。如果 X 不为 NULL,则每当数据库连接关闭或回调被 sqlite3_autovacuum_pages() 的另一次调用覆盖时,都会调用 X(P)。
每个数据库连接只有一个自动真空页回调。每次调用 sqlite3_autovacuum_pages() 接口都会覆盖该数据库连接之前的所有调用。如果 sqlite3_autovacuum_pages(D,C,P,X) 的回调参数 (C) 是一个 NULL 指针,则自动真空步骤回调将被取消。sqlite3_autovacuum_pages() 的返回值通常是 SQLITE_OK,但如果出现错误,也可能是其他错误代码。当前实现只会返回 SQLITE_OK 或 SQLITE_MISUSE,但在将来的版本中可能会添加其他返回值。
如果没有指定自动真空页回调(通常情况)或为回调提供了 NULL 指针,则默认行为是清理所有空闲页。换句话说,默认行为与回调函数类似于以下代码:
unsigned int demonstration_autovac_pages_callback( void *pClientData, const char *zSchema, unsigned int nDbPage, unsigned int nFreePage, unsigned int nBytePerPage ){ return nFreePage; }