sqlite3_filename sqlite3_create_filename( const char *zDatabase, const char *zJournal, const char *zWal, int nParam, const char **azParam ); void sqlite3_free_filename(sqlite3_filename);
这些接口供 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(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() 获得的内存分配。在 Y 为 NULL 指针的情况下调用 sqlite3_free_filename(Y) 是一个无害的空操作。
如果 sqlite3_free_filename(Y) 的 Y 参数不是 NULL 指针或之前从 sqlite3_create_filename() 获取的指针,则可能会发生不良情况,例如堆损坏或段错误。在调用 sqlite3_free_filename(Y) 后,不应再次使用值 Y。这意味着,如果 VFS 的 sqlite3_vfs.xOpen() 方法已使用 Y 调用,则在调用 sqlite3_free_filename(Y) 之前也应调用相应的 [sqlite3_module.xClose() 方法。