如何传递用于SQLite中触发功能的变量

How can I pass variables meant for a trigger function in SQLite?

本文关键字:功能 变量 何传递 用于 SQLite      更新时间:2023-10-16
/*//这是触发定义创建临时触发器" inserttrigger",而不是插入" foo"开始    选择栏(new.id,new.timestamp);"结尾;//*/void insert(sqlite3 *db,char *id,char *timestamp,void *context){    exec_query(db,"插入foo(id,timestamp)值(?,?)",id,timestamp);}void bar(sqlite3_context *上下文,int argc,sqlite3_value ** argv){    char *id =(char *)sqlite3_value_text(argv [0]);    char *timestamp =(char *)sqlite3_value_text(argv [1]);   //如何获得上下文* ???   //这必须是线程安全函数(即多个线程具有其自己的sqlite3*,并且所有执行查询(可能包括此)}

有能力解决这个问题吗?就像一个想法:

void insert(sqlite3 *db,char *id,char *timestamp,void *context){    sqlite3_mutex_enter(sqlite3_db_mutex(db));    sqlite3_user_setdata(db,context);//这不存在    exec_query(db,"插入foo(id,timestamp)值(?,?)",id,timestamp);    sqlite3_mutex_leave(sqlite3_db_mutex(db));}void bar(sqlite3_context *上下文,int argc,sqlite3_value ** argv){    char *id =(char *)sqlite3_value_text(argv [0]);    char *timestamp =(char *)sqlite3_value_text(argv [1]);    void *context_ = sqlite3_user_data(context);}

还有其他一些方法似乎能够完成此操作,例如sqlite3_get_auxdata功能,但我真的不明白API的工作原理。

context不是查询的一部分,因此它将在触发函数中不可用。

毕竟,您发送以更新表的SQL语句可能根本不知道触发器!