Добавление функций в 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', предоставляет буфер для хранения результата. Строковая функция должна вернуть строку, которая хранит результат.
Все строковые функции должны избегать выделения памяти больше, чем им абсолютно необходимо! Системные ресурсы не бесконечны...