Spec-Zone .ru
спецификации, руководства, описания, API

22.3.2.5. Компиляция и Установка Определяемых пользователем Функций

Файлы реализовывая UDFs должны быть скомпилированы и установлены на узле, куда сервер работает. Этот процесс описывается ниже для примера файл UDF sql/udf_example.c это включается в исходные дистрибутивы MySQL.

Если UDF будет упомянут в операторах, которые будут тиражированы в ведомые серверы, следует гарантировать, что каждое ведомое устройство также имеет функцию в наличии. Иначе, репликация перестанет работать на ведомых устройствах, когда они попытаются вызвать функцию.

Сразу следующие инструкции для Unix. Инструкции для Windows даются позже в этом разделе.

udf_example.c файл содержит следующие функции:

Динамически загружаемый файл должен быть скомпилирован как объектный файл с обеспечением совместного доступа, используя команду что-то вроде этого:

shell> gcc -shared -o udf_example.so
        udf_example.c

Если Вы используете gcc с CMake (который является, как MySQL конфигурируется), следует быть в состоянии создать udf_example.so с более простой командой:

shell> make udf_example

После того, как Вы компилируете совместно используемый объект, содержащий UDFs, следует установить его и сказать MySQL об этом. Компиляция совместно используемого объекта от udf_example.c использование gcc непосредственно производит названный файл udf_example.so. Скопируйте совместно используемый объект в сменный каталог сервера и назовите это udf_example.so. Этот каталог дается значением plugin_dir системная переменная.

На некоторых системах ldconfig программа, которая конфигурирует динамического компоновщика, не распознает совместно используемый объект, если его имя не начинается lib. В этом случае следует переименовать файл такой как udf_example.so к libudf_example.so.

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

  1. Получите исходное распределение MySQL. См. Раздел 2.1.3, "Как к MySQL Get".

  2. Получите CMake, создают утилиту, в случае необходимости, от http://www.cmake.org. (Версия 2.6 или позже требуется).

  3. В исходном дереве загляните sql каталог. Есть названные файлы udf_example.def udf_example.c там. Скопируйте оба файла от этого каталога до Вашего рабочего каталога.

  4. Создайте CMake makefile (CMakeLists.txt) с этим содержанием:

    PROJECT(udf_example)# Path for MySQL include directoryINCLUDE_DIRECTORIES("c:/mysql/include")ADD_DEFINITIONS("-DHAVE_DLOPEN")ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def)TARGET_LINK_LIBRARIES(udf_example wsock32)
  5. Создайте проект VC и файлы решения:

    cmake -G "<Generator>"

    Вызывая cmake - справка показывает Вам список допустимых Генераторов.

  6. Создать udf_example.dll:

    devenv udf_example.sln /build Release

После того, как совместно используемый объектный файл был установлен, уведомьте mysqld о новых функциях со следующими операторами. Если у объектных файлов есть суффикс, отличающийся от .so на Вашей системе замените корректным суффиксом повсюду (например, .dll на Windows).

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 sequence 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 sequence;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 получил новую версию. Иначе, сервер продолжает использовать старую версию.

Активная функция является той, которая была загружена CREATE FUNCTION и не удаленный с DROP FUNCTION. Все активные функции перезагружаются каждый раз, когда сервер запускается, если Вы не запускаете mysqld с --skip-grant-tables опция. В этом случае инициализация UDF пропускается, и UDFs недоступны.