Я впервые пытаюсь создать udf для mysql. Документы утверждают, что my_func_init
вызывается до выполнения основной функции, но в моей среде этого, похоже, не происходит.
long long charmatch(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
return 42;
}
my_bool charmatch_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
if (args->arg_count != 2)
{
strncpy(message, "charmatch() requires two arguments", 34);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
if(args->arg_type[0] != STRING_RESULT)
{
strncpy(message, "argument 1 must be a string", 27);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
if(args->arg_type[0] != STRING_RESULT)
{
strncpy(message, "argument 2 must be a string", 27);
return EXIT_FAILURE;
// was return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
Как видите, я проверяю, есть ли два аргумента. Теоретически SELECT CHARMATCH()
должен возвращать сообщение о том, что я должен установить два аргумента, но это не так: он возвращает 42.
Почему он не возвращает сообщение?
РЕДАКТИРОВАТЬ Похоже, проблема была в моих возвращаемых значениях для ошибок, равных 0 вместо 1. Я исправил это, и теперь вызов SELECT CHARMATCH()
с неправильным числом аргументов возвращает пустой набор. Почему ошибки не отображаются?