Самый базовый код MySQL UDF для Windows
Я пытаюсь создать основную пользовательскую функцию для 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
1 ответ
- Функция foo() должна измениться как
char *foo(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
- Добавьте функцию foo_deinit(). Mysql UDF требует 3 функции и имя как
udf_name_init
,udf_name
а такжеudf_name_deinit
, - Скомпилируйте и поместите файл dll под
<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...
}