SQLite C 接口
获取 URI 参数的值
const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam); int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault); sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64); const char *sqlite3_uri_key(const char *zFilename, int N);
这些是实用例程,对自定义 VFS 实现很有用,它们检查数据库文件是否是包含特定查询参数的 URI,如果是,则获取该查询参数的值。
这些接口的第一个参数(以下简称为 F)必须是以下之一:
- 由 SQLite 核心创建并传递给 VFS 实现的 xOpen() 方法的数据库文件名指针,或
- 从sqlite3_db_filename()获得的文件名,或
- 使用sqlite3_create_filename()构造的新文件名。
如果 F 是一个合适的文件名(如前一段所述)并且如果 P 是查询参数的名称,则 sqlite3_uri_parameter(F,P) 返回 P 参数的值(如果存在)或 NULL 指针(如果 P 不存在)作为 F 上的查询参数出现。如果 P 是 F 的查询参数并且没有显式值,则 sqlite3_uri_parameter(F,P) 返回一个指向空字符串的指针。
sqlite3_uri_boolean(F,P,B)例程假定P是一个布尔参数,根据P的值返回true(1)或false(0)。sqlite3_uri_boolean(F,P,B)例程返回true(1)如果查询参数 P 的值在任何情况下都是“yes”、“true”或“on”之一,或者如果该值以非零数字开头。如果查询参数 P 的值在任何情况下都是“no”、“false”或“off”之一,或者如果值以数字零开头,则 sqlite3_uri_boolean(F,P,B) 例程返回 false (0)。如果 P 不是 F 上的查询参数,或者如果 P 的值与上述任何一个都不匹配,则 sqlite3_uri_boolean(F,P,B) 返回 (B!=0)。
sqlite3_uri_int64(F,P,D) 例程将 P 的值转换为 64 位有符号整数并返回该整数,如果 P 不存在则返回 D。如果 P 的值不是整数,则返回零。
sqlite3_uri_key(F,N) 返回指向文件名 F 的第 N 个查询参数的名称(不是值)的指针,如果 N 小于零或大于查询参数的数量减 1,则返回 NULL 指针。 N 值从零开始,因此 N 应为 0 以获取第一个查询参数的名称,为 1 以获取第二个参数,依此类推。
如果 F 是 NULL 指针,则 sqlite3_uri_parameter(F,P) 返回 NULL,而 sqlite3_uri_boolean(F,P,B) 返回 B。如果 F 不是 NULL 指针,也不是 SQLite 核心传入的数据库文件路径名指针xOpen VFS 方法,那么这个例程的行为是未定义的,可能是不需要的。
从 SQLite版本 3.31.0(2020-01-22)开始,输入的 F 参数除了主数据库文件外,还可以是回滚日志文件或 WAL 文件的名称。在版本 3.31.0 之前,这些例程仅在 F 是主数据库文件的名称时才有效。当 F 参数是回滚日志或 WAL 文件的名称时,它可以访问与在主数据库文件中找到的所有相同的查询参数。
有关其他信息,请参阅URI 文件名文档。