我正在尝试为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
发布于 2018-01-14 20:24:07
foo()函数必须更改为char *foo(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
udf_name_deinit.udf_name_init、udf_name三个函数和名称,并将dll文件放在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...
}https://stackoverflow.com/questions/42875584
复制相似问题