码迷,mamicode.com
首页 > 数据库 > 详细

Mysql udf插件自定义实现

时间:2020-07-03 00:35:16      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:res   返回   att   mysql   char   har   创建   attr   调用   

UDF官方文档:https://dev.mysql.com/doc/refman/5.7/en/adding-udf.html

参考文章:https://blog.csdn.net/cssxn/article/details/89497942

UDF的调用过程:

技术图片

如果需要内存,则必须将其放入 xxx_init()并释放 xxx_deinit()。

那么也就是在创建udf的dll的时候要实现的是XXX_INIT 和 XXX_DEINIT 这两个函数!

实现模板:

my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

void xxx_deinit(UDF_INIT *initid);

由于用到的udf调用结果都是字符串,那么这里返回结果就声明为char*了

技术图片

用到的模板则是如下:

char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);

UDF_ARGS的结构体如下:

类型为char** attributes的这个,

typedef struct st_udf_args
{
  unsigned int arg_count;		/* Number of arguments */
  enum Item_result *arg_type;		/* Pointer to item_results */
  char **args;				/* Pointer to argument */
  unsigned long *lengths;		/* Length of string arguments */
  char *maybe_null;			/* Set to 1 for all maybe_null args */
  char **attributes;                    /* Pointer to attribute name */
  unsigned long *attribute_lengths;     /* Length of attribute arguments */
  void *extension;
} UDF_ARGS;

类型为char** attributes的展示效果如下:

技术图片

这个可以拿来获取参数的值!

调用UDF的实现模板就是如下:

//初始化
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

//自定义函数
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);

//反初始化
void xxx_deinit(UDF_INIT *initid);

代码实现:

X

Mysql udf插件自定义实现

标签:res   返回   att   mysql   char   har   创建   attr   调用   

原文地址:https://www.cnblogs.com/zpchcbd/p/13227920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!