
扩展 C API
实现函数、聚合、排序的基本方法是使用回调函数,并在程序中注册,然后在sql中使用。
函数和聚合使用相同的注册函数和类似的回调函数。用户自定义聚合、函数和排序规则的生命周期是很短的,基于连接注册,不存储在数据库中,需要确保应用程序夹杂了定制扩展并在连接中注册。
扩展必须在每一个使用它们的连接上注册。
注册函数:
可以使用sqlite3_create_function()在连接中注册和聚合。(UTF-8和UTF-16版本)
int sqlite3_create_function(
sqlite * cnx,/*连接句柄*/
const char *zFunctionname,/*在SQL语句中使用的函数聚合名称*/
int nArg,/*参数的格式,-1表示参数的个数不稳定*/
int eTextRep,/*编码格式*/
voID *pUserData,/*传递个回调函数的应用程序数据*/
voID ( *xFunc )(sqlite3_context *,int,sqlite3_value * ),
voID ( *xStep)(sqlite3_context *,
voID ( *xFinal)(sqlite3_context *,sqlite3_value * )
);
int sqlite3_create_function16(
sqlite * cnx,sqlite3_value * )
);
步骤函数:
他和自定义函数的回调函数一样声明如下:
voID fn(
sqlite3_context * ctx,/*聚合的上下文环境,接受sqlite3_create_function()提供的应用程序数据参数*/
int nargs,/*包含传递给函数的参数个数*/
sqlite3_value **values
);
可以使用sqlite3_user_data()获得用户数据:voID *sqlite3_user_data(sqlite3_context * ) ;
聚合通过sqlite3_aggregate_context()为每个实例分配状态: voID *sqlite3_aggregate_context( sqlite3_context *,int nBytes);
返回值:
参数value是sqlite3_value结构体数组,是sqlite实际参数值的句柄。这些值的实际数据可以通过sqlite3_value_xxx()获取:
xxx sqlite3_value_xxx(sqlite3_value* value) ;
注意他获取标量值和数组值的方式。
函数返回值五种形式。
函数:page221.
返回值:page222;
数组与内存清理器、错误处理、返回输入值、聚合、注册函数。
注意排序规则的定义等等。
扩展的许多规则和原来核心API的工作、定义基本一样。
总结以上是内存溢出为你收集整理的SQLite学习笔记(9)全部内容,希望文章能够帮你解决SQLite学习笔记(9)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)