• sqlite3 第五章—扩展API


      SQLite C API 中扩展API支持用户自定义函数、聚合和排序规则。用户自定义函数就是映射到用户自己用C语言或其他语言实现的SQL函数。

      自定义扩展必须一对一注册到连接,因为他们存在于程序内存中。当程序或脚本启动时,为计划使用自定义扩展的连接负责这侧所需的扩展。

    一、创建用户自定义函数

    1. 编写处理程序。实现想要SQL执行的事情。
    2. 注册处理程序。提供SQL名称、参数个数及指向该处理程序的指针。
    //注册函数,第五个参数“任意指针”,不知道做什么用。
    sqlite3_create_function(db, "hello_newman", 0, SQLITE_UTF8, NULL,hello_newman,NULL,NULL);
    
    //自定义函数
    void hello_newman(sqlite3_context* ctx, int nargs, sqlite3_value** values)
    {
        const char *msg = "Hello Jerry";
    
        sqlite3_result_text(ctx, msg, strlen(msg), SQLITE_STATIC);
    }

      需要说明的是,如果要在app中看到结果,需要使用回调函数或sqlite3_get_table(),把结果打印出来。

    二、创建用户自定义聚合

      聚合函数适用于结果集中的所有记录,并从中计算某种聚合值的函数。如sum()、count()、avg()都是标准的SQL聚合函数。

      自定义聚合需要三步:

    1. 注册聚合
    2. 实现结果集中每个记录调用的步骤函数
    3. 实现结果处理后调用的完成函数

      下面实现了一个称为pysum的简单SUM()聚合例子。

     1 #!/usr/bin/env python
     2 
     3 import apsw, string
     4 
     5 connection=apsw.Connection("seinfeld.db")
     6 
     7 #步骤2
     8 def step(context, *args):
     9     context['value'] += args[0]
    10         
    11 def finalize(context):
    12     return context['value']
    13 
    14 def pysum():
    15     
    16     return ({'value' : 0}, step, finalize)
    17 
    18 #步骤1
    19 connection.createaggregatefunction("pysum", pysum)
    20 
    21 #步骤3
    22 c = connection.cursor()
    23 print c.execute("select pysum(id) from foods").next()[0]

    三、创建用户自定义排序

       sqlite3_create_collation()

       通过上述API提供用户自定义排序规则,提供一种不同文本比较和排序方法。SQLite提供了三种默认排序规则:BINARY、NOCASE、RTRIM。

      BINARY使用memcmp()比较字符串值,NOCASE区分大小写,RTRIM忽略尾随空格。

  • 相关阅读:
    pdf.js使用
    当前时间距离下一个分钟值以0或者5结尾的时间点(单位:毫秒)小于1分钟时,返回下下个以0或5结尾的时间点
    1
    Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot get a connection, pool error Pool exhausted 异常原因排查
    gcp导出mysql慢日志写入数据库分析
    redis慢日志结构化
    谷歌云监控告警
    google-cloud的sql-rds导出my.cnf
    慢sql 实时钉钉告警
    docker跨网段搭建gp测试环境
  • 原文地址:https://www.cnblogs.com/mofei004/p/9372360.html
Copyright © 2020-2023  润新知