最近用到MySQL的UDF, 查了一下相关文献, 对用户用户实现function和Aggregate function的方法做个介绍.
快速编写一个MySQL UDF
为了能够快速了解UDF(user-defined function)是什么, 我们首先构建一个最简单的UDF, 然后再介绍更细节的内容. 本文在Ubuntu16.04下测试, 开始之前需要先安装MySQL以及相关的库, 在Ubuntu下是:
sudo apt-get install libmysqlclient-dev
Step1: 编写c++代码并生成动态链接库
示例c++代码如下:
extern "c"{
long long myadd(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
my_bool myadd_init(UDF_INIT *initid, UDF_ARGS *args,
char *message);
}
long long myadd(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error) {
int a = *((long long *)args->args[0]);
int b = *((long long *)args->args[1]);
return a + b;
}
my_bool myadd_init(UDF_INIT *initid, UDF_ARGS *args,
char *message){
return 0;
}
完成以后, 将文件保存为udf.cpp 然后使用如下的命令编译动态链接库:
g++ -shared -fPIC -I /usr/include/mysql -o udf.so udf.cpp
获得udf.so文件.
Step2: 在MySQL中添加函数
完成上述的编写以后, 讲udf.so文件拷贝到MySQL的plugin目录下, 在Ubuntu16.04中默认是:
/usr/lib/mysql/plugin/
然后使用如下的命令在MySQL中安装动态链接库.
CREATE FUNCTION myadd RETURNS INTEGER SONAME 'udf.so'
Step3: 调用函数以及相关查询
- 调用函数
select myadd(1,2);
可以获得计算结果3
- 查询安装列表
select * from mysql.func;<