如何传递用于SQLite中触发功能的变量
How can I pass variables meant for a trigger function in SQLite?
/*//这是触发定义创建临时触发器" 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语句可能根本不知道触发器!
相关文章:
- 将 2D 数组传递给大小为变量的功能
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 功能原型变量范围C
- 避免为每个成员变量重复功能
- 线程安全性和静态变量/成员功能
- 功能和变量从何而来
- 无全局变量或功能参数的递归调用
- 在已经运行的功能C 中更改变量
- 将功能输出分配给变量
- 从成员变量更新类变量或调用类功能是给出运行时错误
- 如何访问C 中的功能范围变量
- 我的朋友功能无法访问私人变量
- 不同的变量和功能起作用
- 在功能中设置对象变量
- 类和本地功能变量内的全局变量
- 我需要在类C 中定义所有私人功能和变量
- 如何在Arduino的功能中提供软件变量
- 是否可以在C++中推迟 const 变量的初始化,例如 Java 的"blank final"功能?
- 无法从类中的其他功能访问同一类的变量
- 操纵功能变量在doxygen中