我正在尝试为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 "";
}
它编译得很好,但是当我尝试从中创建函数时
CREATE FUNCTION foo RETURNS STRING SONAME "mysql_plugin2.dll"
它说SQL Error (1127): Can't find symbol 'foo' in library
答案 0 :(得分:1)
char *foo(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
udf_name_init
,udf_name
和udf_name_deinit
。<mysql_installation_folder>/lib/plugin/
。以下代码尚未经过测试,但应该可以使用。
#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...
}