SQLite C 接口

创建和销毁 VFS 文件名

char *sqlite3_create_filename(
  const char *zDatabase,
  const char *zJournal,
  const char *zWal,
  int nParam,
  const char **azParam
);
void sqlite3_free_filename(char*);

这些接口供VFS shim实现使用,在该上下文之外没有用。

sqlite3_create_filename(D,J,W,N,P) 分配内存来保存数据库文件名 D 的版本,对应的日志文件 J 和 WAL 文件 W 以及数组 P 中的 N URI 参数键/值对。sqlite3_create_filename 的结果(D,J,W,N,P) 是指向数据库文件名的指针,可以安全地传递给以下例程:

如果发生内存分配错误,sqlite3_create_filename() 可能会返回 NULL 指针。从 sqlite3_create_filename(X) 获得的内存必须通过相应调用 sqlite3_free_filename(Y) 来释放。

sqlite3_create_filename(D,J,W,N,P) 中的 P 参数应该是一个包含 2*N 个字符串指针的数组。此数组中的每对指针对应于查询参数的键和值。如果 N 为零,则 P 参数可以是 NULL 指针。P 数组中的 2*N 个指针都不能是 NULL 指针,关键指针不应该是空字符串。sqlite3_create_filename(D,J,W,N,P) 的 D、J 或 W 参数都不能是 NULL 指针,尽管它们可以是空字符串。

sqlite3_free_filename(Y) 例程释放先前从 sqlite3_create_filename() 获得的内存分配。调用 sqlite3_free_filename(Y) 其中 Y 是 NULL 指针是无害的空操作。

如果 sqlite3_free_filename(Y) 的 Y 参数不是 NULL 指针或先前从 sqlite3_create_filename() 获取的指针,那么可能会发生堆损坏或段错误等坏事。在调用 sqlite3_free_filename(Y) 之后不应再次使用值 Y。这意味着如果使用 Y 调用了 VFS 的sqlite3_vfs.xOpen()方法,则还应在调用 sqlite3_free_filename(Y) 之前调用相应的 [sqlite3_module.xClose() 方法。

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