const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam); int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault); sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64); const char *sqlite3_uri_key(sqlite3_filename z, int N);
这些是实用程序例程,对 自定义VFS实现 有用,它们检查数据库文件是否是包含特定查询参数的URI,如果是,则获取该查询参数的值。
这些接口的第一个参数(以下称为F)必须是以下之一:
如果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)。如果查询参数P的值是“yes”、“true”或“on”中的任何一个(不区分大小写),或者如果值以非零数字开头,则sqlite3_uri_boolean(F,P,B)例程返回true (1)。如果查询参数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位有符号整数,并返回该整数,或返回D(如果P不存在)。如果P的值不是整数,则返回零。
sqlite3_uri_key(F,N)返回指向文件名F的第N个查询参数的名称(而不是值)的指针,或返回NULL指针(如果N小于零或大于查询参数的数量减1)。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 文件名 文档。