SQLite C 接口

函数辅助数据

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(C,N,P,X) 中的析构函数 X 可能会在 sqlite3_set_auxdata() 接口返回之前立即被调用。因此,sqlite3_set_auxdata() 应该在函数实现接近尾声时调用,并且在调用 sqlite3_set_auxdata() 之后,函数实现不应使用任何 P。

实际上,元数据保存在函数调用之间,函数参数是编译时常量,包括文字值和参数以及由它们组成的表达式。

这些接口的 N 参数的值应该是非负的。未来的增强可能会使用负 N 值来定义新的函数缓存行为。

这些例程必须从运行 SQL 函数的同一线程中调用。

另请参阅 对象常量函数的列表。