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;
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|