9.2.2.5 Компиляция и установка определяемых пользователем функций
9.2.2.5 Компиляция и установка определяемых пользователем функций
Файлы, реализующие UDFы, должны компилироваться и устанавливаться на
машине, где работает сервер. Эта процедура описана ниже для файла примеров
UDF `udf_example.cc', входящего в поставку исходного кода MySQL. Данный файл
содержит следующие функции:
-
metaphon() возвращает metaphon-строку для строкового аргумента. Эта
строка в общем напоминает soundex-строку, но более приспособлена для
английского языка.
-
myfunc_double() возвращает отношение суммы ASCII-значений символов своих
аргументов к суммарной длине аргументов.
-
myfunc_int() возвращает суммарную длину своих аргументов.
-
sequence([const int]) возвращает последовательность, начиная с заданного
номера, либо с 1, если номер не задан.
-
lookup() возвращает IP-адрес для имени удаленного компьютера.
-
reverse_lookup() возвращает имя удаленного компьютера для IP-адреса.
Функция может вызываться для строки "xxx.xxx.xxx.xxx" либо для четырех
чисел.
Динамически загружаемый файл должен компилироваться как разделяемый
объектный файл с помощью команды следующего вида:
shell> gcc -shared -o udf_example.so myfunc.cc
Корректные опции компилятора для своей системы можно легко получить,
запустив следующую команду в каталоге `sql' дерева исходных текстов MySQL:
shell> make udf_example.o
Следует выполнить команду компиляции, подобную приведенной выше make, с
той разницей, что надо удалить опцию -c ближе к концу строки и добавить -o
`udf_example.so' в конце строки (в некоторых системах, возможно, -c придется
оставить в команде).
После компиляции разделяемого объектного файла, содержащего UDFы, следует
установить его и дать о нем знать MySQL. В результате компиляции
разделяемого объектного модуля из `udf_example.cc' получается файл с именем
наподобие `udf_example.so' (точное имя может на разных платформах может быть
различным). Скопируйте этот файл в какой-нибудь просматриваемый ld
каталог, вроде `/usr/lib'. Во многих системах можно устанавливать переменную
окружения LD_LIBRARY или LD_LIBRARY_PATH для указания каталога, в котором
размещены файлы UDF-функций. В руководстве по dlopen указывается, какую
переменную следует использовать в данной системе. Необходимо сделать
соответствующие установки в mysql.server или safe_mysqld и перезапустить
mysqld.
После установки библиотеки следует уведомить mysqld о новых функциях
следующими командами:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so";
mysql> CREATE FUNCTION myfunc_double RETURNS REAL SONAME "udf_example.so";
mysql> CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "udf_example.so";
mysql> CREATE FUNCTION lookup RETURNS STRING SONAME "udf_example.so";
mysql> CREATE FUNCTION reverse_lookup
-> RETURNS STRING SONAME "udf_example.so";
mysql> CREATE AGGREGATE FUNCTION avgcost
-> RETURNS REAL SONAME "udf_example.so";
Функции могут быть удалены с помощью DROP FUNCTION:
mysql> DROP FUNCTION metaphon;
mysql> DROP FUNCTION myfunc_double;
mysql> DROP FUNCTION myfunc_int;
mysql> DROP FUNCTION lookup;
mysql> DROP FUNCTION reverse_lookup;
mysql> DROP FUNCTION avgcost;
Команды CREATE FUNCTION и DROP FUNCTION обновляют системную таблицу func
в базе данных mysql. В таблицу записываются имя функции, ее тип и имя
разделяемой библиотеки. Для создания и удаления функций необходимо
обладать привилегиями INSERT и DELETE для базы данных mysql.
Недопустимо использовать CREATE FUNCTION для добавления функции, которая
уже была создана. Если необходимо переустановить функцию, ее следует
удалить с помощью DROP FUNCTION и затем переустановить посредством CREATE
FUNCTION. Эти действия приходится выполнять, например, когда компилируется
новая версия данной функции, и надо, чтобы mysqld получил новую версию.
Иначе сервер будет продолжать пользоваться старой версией.
Активные функции подгружаются при каждом запуске сервера, за исключением
случая, когда mysqld запускается с опцией --skip-grant-tables. Тогда
инициализация UDF пропускается и UDFы недоступны (активная функция - это
функция, которая была загружена посредством CREATE FUNCTION и не удалена с
помощью DROP FUNCTION).
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|