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_uri_parameter(),
- sqlite3_uri_boolean(),
- sqlite3_uri_int64(),
- sqlite3_uri_key(),
- sqlite3_filename_database(),
- sqlite3_filename_journal(), or
- sqlite3_filename_wal().
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() 方法。