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)必须是以下之一:
如果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的值在任何情况下均为“是”,“ 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文件名文档。