void * sqlite3_get_auxdata(sqlite3_context *,int N); void sqlite3_set_auxdata(sqlite3_context *,int N,void *,void(*)(void *));
这些函数可由(非聚合)SQL函数用于将元数据与参数值相关联。如果在查询执行期间将相同的值传递给同一SQL函数的多个调用,则在某些情况下,可能会保留关联的元数据。正则表达式匹配函数中的一个示例。正则表达式的编译版本可以存储为与模式字符串关联的元数据。然后,只要模式字符串保持不变,就可以在同一函数的多次调用中重用已编译的正则表达式。
sqlite3_get_auxdata(C,N)接口返回指向由sqlite3_set_auxdata(C,N,P,X)函数关联的元数据的指针,其中第N个自变量值为应用程序定义的函数。对于最左边的函数参数,N为零。如果没有与该函数参数关联的元数据,则sqlite3_get_auxdata(C,N)接口返回NULL指针。
sqlite3_set_auxdata(C,N,P,X)接口将P保存为应用程序定义函数的第N个参数的元数据。如果元数据仍然有效,则对sqlite3_get_auxdata(C,N)的后续调用从最近的sqlite3_set_auxdata(C,N,P,X)调用返回P,如果元数据已被丢弃,则返回NULL。在每次调用sqlite3_set_auxdata(C,N,P,X)(其中X不为NULL)之后,当丢弃元数据时,SQLite将使用参数P精确地调用析构函数X一次。SQLite可以随时随意丢弃元数据,包括:
特别要注意最后一个项目符号。在sqlite3_set_auxdata()接口甚至返回之前,可以立即调用sqlite3_set_auxdata(C,N,P,X)中的析构函数X。因此,应在函数实现的结尾附近调用sqlite3_set_auxdata(),并且在调用sqlite3_set_auxdata()之后,函数实现不应使用P。
实际上,元数据是在函数调用的函数调用之间保留的,这些函数参数是编译时常量,包括文字值和参数以及由它们组成的表达式。
这些接口的N参数的值应为非负数。将来的增强功能可能会使用负N值来定义新类型的功能缓存行为。
这些例程必须从运行SQL函数的同一线程中调用。