Spec-Zone .ru
спецификации, руководства, описания, API

22.3.2.4. Возвращаемые значения UDF и Обработка ошибок

Функция инициализации должна возвратиться 0 если никакая ошибка не произошла и 1 иначе. Если ошибка происходит, xxx_init() должен сохранить завершенное нулем сообщение об ошибке в message параметр. Сообщение возвращается клиенту. Буфер сообщения MYSQL_ERRMSG_SIZE символы долго, но следует попытаться сохранить сообщение меньше чем к 80 символам так, чтобы оно соответствовало width стандартного терминального экрана.

Возвращаемое значение основной функции xxx() значение функции, для long long и double функции. Строковая функция должна возвратить указатель на результат и установить *length к длине (в байтах) возвращаемого значения. Например:

memcpy(result, "result string", 13);*length = 13;

MySQL передает буфер к xxx() функция используя result параметр. Этот буфер достаточно длинен, чтобы содержать 255 символов, которые могут быть многобайтовыми символами. xxx() функция может сохранить результат в этом буфере, если это соответствует, когда возвращаемое значение должно быть указателем на буфер. Если функция хранит результат в различном буфере, это должно возвратить указатель на тот буфер.

Если Ваша строковая функция не использует предоставленный буфер (например, если это должно возвратить строку дольше чем 255 символов), следует выделить место для своего собственного буфера с malloc() в Вашем xxx_init() функционируйте или Ваш xxx() функционируйте и освободите это в Вашем xxx_deinit() функция. Можно сохранить выделенную память в ptr слот в UDF_INIT структура для повторного использования будущим xxx() вызовы. См. Раздел 22.3.2.1, "Вызывающие последовательности UDF для Простых Функций".

Указать на возвращаемое значение NULL в основной функции, наборе *is_null к 1:

*is_null = 1;

Чтобы указать на ошибочный возврат в основной функции, установить *error к 1:

*error = 1;

Если xxx() наборы *error к 1 для любой строки значение функции NULL для того текущей, строки и для любых последующих строк, обработанных оператором, в который XXX() был вызван. (xxx() даже не требуется последующие строки.)