用于Windows的最基本MySQL UDF代码

用于Windows的最基本MySQL UDF代码,mysql,udf,Mysql,Udf,我正在尝试为MySQL创建最基本的用户定义函数 #include <mysql.h> extern "C" { my_bool foo_init(UDF_INIT *initid, UDF_ARGS *args, char *message); char *foo(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); } my_bool foo_init(UDF_INIT *initid, U

我正在尝试为MySQL创建最基本的用户定义函数

#include <mysql.h>

extern "C" {
    my_bool foo_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
    char *foo(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
}

my_bool foo_init(UDF_INIT *initid, UDF_ARGS *args, char *message) {
    return 0;
}

char *foo(UDF_INIT *initid, UDF_ARGS *args,  char *is_null, char *error) {
    return "";
}
它说
SQL错误(1127):在库中找不到符号“foo”

  • foo()函数必须更改为
    char*foo(UDF\u INIT*initid,UDF\u ARGS*ARGS,char*result,unsigned long*length,char*is\u null,char*error)
  • 添加foo_deinit()函数。Mysql UDF需要3个函数和名称,如
    UDF\u name\u init
    UDF\u name
    UDF\u name\u deinit
  • 编译dll文件并将其放在
    /lib/plugin/
  • 下面的代码还没有经过测试,但应该可以运行。

    #包括
    我的兄弟
    foo_init(UDF_init*initid,
    UDF_参数*参数,
    字符*消息)
    {
    返回0;
    }
    煤焦*
    foo(UDF_INIT*initid,
    UDF_参数*参数,
    字符*结果,
    无符号长*长,
    char*为空,
    字符*错误)
    {
    //指定了返回字符串的长度
    //参见第3440行和第3454行中的项目
    // https://github.com/MariaDB/server/blob/9cc7789e9084e7d59a43f9560870e496843535f9/sql/item_func.cc#L3440
    *长度=0;
    返回“”;
    }
    无效的
    foo_deinit(UDF_INIT*initid)
    {
    //没什么。。。
    }
    
    CREATE FUNCTION foo RETURNS STRING SONAME "mysql_plugin2.dll"
    
    #include <mysql.h>
    
    my_bool
    foo_init(UDF_INIT *initid,
             UDF_ARGS *args,
             char     *message)
    {
        return 0;
    }
    
    char *
    foo(UDF_INIT      *initid,
        UDF_ARGS      *args,
        char          *result,
        unsigned long *length,
        char          *is_null,
        char          *error)
    {
         // specified the return string length
         // see item_func.cc line #3440 and #3454 
         // https://github.com/MariaDB/server/blob/9cc7789e9084e7d59a43f9560870e496843535f9/sql/item_func.cc#L3440
         *length = 0;
         return "";
    }
    
    void
    foo_deinit(UDF_INIT *initid)
    {
        // nothing...
    }