my_udf_init не вызывается - PullRequest
       21

my_udf_init не вызывается

0 голосов
/ 10 сентября 2011

Я впервые пытаюсь создать 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() с неправильным числом аргументов возвращает пустой набор. Почему ошибки не отображаются?

1 Ответ

1 голос
/ 10 сентября 2011

Вы всегда возвращаете EXIT_SUCCESS в charmatch_init (), но

"Функция инициализации должна возвращать 0, если ошибка не возникла, и 1 в противном случае. Если происходит ошибка, xxx_init () должна сохранить сообщение об ошибке с нулевым символом в конце в параметре сообщения."

http://dev.mysql.com/doc/refman/5.0/en/udf-return-values.html

Наверное, поэтому ваши сообщения об ошибках игнорируются.

...