поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    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).

     
    © 1997-2005 PHP Club Team
    Rambler's Top100