SQLite C 接口

Autovacuum 压实量回调

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) 的副本、正在自动清理的附加数据库的模式名称、数据库文件的页面大小、空闲页面数和每个字节数页,分别。回调应返回应由 autovacuum 删除的空闲页面数。如果回调返回零,则不会发生 autovacuum。如果返回的值大于或等于空闲页面的数量,则会发生完整的 autovacuum。

如果有多个 ATTACH-ed 数据库文件作为事务提交的一部分被修改,那么将为每个文件单独调用 autovacuum 页面回调。

回调不可重入。回调函数不应尝试调用任何其他 SQLite 接口。如果是这样,可能会发生不好的事情,包括分段错误和损坏的数据库文件。回调函数应该是一个简单的函数,它对其输入参数进行一些运算并返回结果。

sqlite3_autovacuum_pages(D,C,P,X) 的 X 参数是 P 参数的可选析构函数。如果 X 不为 NULL,则每当数据库连接关闭或回调被 sqlite3_autovacuum_pages() 的另一次调用覆盖时,都会调用 X(P)。

每个数据库连接只有一个 autovacuum 页面回调。对 sqlite3_autovacuum_pages() 接口的每次调用都会覆盖该数据库连接的所有先前调用。如果 sqlite3_autovacuum_pages(D,C,P,X) 的回调参数 (C) 是 NULL 指针,那么 autovacuum 步骤回调将被取消。sqlite3_autovacuum_pages() 的返回值通常是 SQLITE_OK,但如果出现问题,可能是其他错误代码。当前的实现只会返回 SQLITE_OK 或 SQLITE_MISUSE,但在未来的版本中可能会添加其他返回码。

如果未指定 autovacuum 页面回调(通常情况)或为回调提供 NULL 指针,则默认行为是清理所有空闲页面。所以,换句话说,默认行为就像回调函数是这样的一样:

    unsigned int demonstration_autovac_pages_callback(
      void *pClientData,
      const char *zSchema,
      unsigned int nDbPage,
      unsigned int nFreePage,
      unsigned int nBytePerPage
    ){
      return nFreePage;
    }

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