小巧。快速。可靠。
三选二。

SQLite C 接口

自动真空压缩量回调

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;
    }

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