Администрирование пакета MySQL - Добавление функций в MySQL

ОГЛАВЛЕНИЕ

Добавление функций в MySQL

Если Вы понимаете C++, и Yacc, то относительно просто добавить функцию к СУБД MySQL. Если не понимаете, то дело хуже.

Сначала добавьте строку в файл sql_lex.cc с именем функции в массив sql_functions.

Затем добавьте две строки в файл sql_yacc.y. Первая определяет символ препроцессора yacc. Вы должны добавить это к началу файла. Затем определите параметры функции, и создайте 'item' с этими параметрами.

В файле item_func.h объявляют класс, который наследуется из Item_num_func или Item_str_func, в зависимости от того, возвращает ли ваша функция число или строку.

В intem_func.cc добавьте:

double *Item_func_newname::val()

если Вы определяете числовую функцию, или

String *Item_func_newname::Str(String *str)

если Вы определяете строковую функцию.

Для строковой функции вы должны также определить следующую функцию:

void Item_func_newname::fix_length_and_dec()

Она должна по крайней мере вычислить 'max_length' основанный на полученных параметрах. max_length - максимальное число символов, которое функция может вернуть (максимальная длина возвращаемого значения).

Если функция не может возвращать null, Вы должны также установить 'maybe_null=0'.

Для строковых функций параметр 'String *str', предоставляет буфер для хранения результата. Строковая функция должна вернуть строку, которая хранит результат.

Все строковые функции должны избегать выделения памяти больше, чем им абсолютно необходимо! Системные ресурсы не бесконечны...