Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




Справочное руководство по MySQL

9.2.2.4 Возвращаемые значения и обработка ошибок

    9.2.2.4 Возвращаемые значения и обработка ошибок

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

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

    Эти величины следует устанавливать равными содержимому и длине возвращаемого значения. К примеру:

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

    Размер буфера result, передаваемого вычислительной функции, составляет 255 байтов. Если этого достаточно для полученного результата, то о распределении памяти для результатов беспокоиться нечего.

    Если строковая функция должна возвращать строку длиннее, чем 255 байтов, то для строки необходимо выделять память с помощью malloc() в функции xxx_init() или в функции xxx() и освобождать ее в функции xxx_deinit(). Указатель на распределенную память можно сохранить в поле ptr структуры UDF_INIT, чтобы в последующих вызовах xxx() использовать эту память повторно (see section 9.2.2.1 Последовательность вызова UDF для простых функций.

    Чтобы указать в главной функции на возврат значения NULL, is_null устанавливается в 1:

    *is_null = 1;
    

    Чтобы указать в главной функции на возврат ошибки, в 1 устанавливается параметр error:

    *error = 1;
    

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

    *error = 1;
    *is_null = 1;
    

Поиск по документации:



РЕКЛАМА НА САЙТЕ
  Создание сайтов | 500 write failed: Broken pipe |