SQLite学习笔记(9)

扩展 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 * ,  int , sqlite3_value * ) ,

                                                          void ( *xFinal)(sqlite3_context * ,  int , sqlite3_value * ) 

                                                            );     

         int  sqlite3_create_function16(

                                                           sqlite * cnx ,                  /*连接句柄*/

                                                           const  char  *zFunctionName,    /*在sql语句中使用的函数聚合名称*/

                                                           int  nArg ,                            /*参数的格式,-1表示参数的个数不稳定*/

                                                           int   eTextRep,                    /*编码格式*/

                                                           void  *pUserData ,            /*传递个回调函数的应用程序数据*/

                                                           void ( *xFunc )(sqlite3_context * ,  int , sqlite3_value * ) , 

                                                           void ( *xStep)(sqlite3_context * ,  int , sqlite3_value * ) ,

                                                          void ( *xFinal)(sqlite3_context * ,  int , 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的工作、定义基本一样。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值