Spec-Zone .ru
спецификации, руководства, описания, API
|
Файлы реализовывая UDFs должны быть скомпилированы и установлены на узле, куда сервер работает. Этот процесс
описывается ниже для примера файл UDF sql/udf_example.c
это включается в исходные
дистрибутивы MySQL.
Если UDF будет упомянут в операторах, которые будут тиражированы в ведомые серверы, следует гарантировать, что каждое ведомое устройство также имеет функцию в наличии. Иначе, репликация перестанет работать на ведомых устройствах, когда они попытаются вызвать функцию.
Сразу следующие инструкции для Unix. Инструкции для Windows даются позже в этом разделе.
udf_example.c
файл содержит следующие функции:
metaphon()
возвращает metaphon строку строкового
параметра. Это - что-то как строка soundex, но она более настраивается для английского языка.
myfunc_double()
возвращает сумму значений ASCII
символов в его параметрах, разделенных на сумму длины его параметров.
myfunc_int()
возвращает сумму длины ее параметров.
sequence([const int])
возвращает последовательность,
запускающуюся с данного числа или 1, если никакое число не было дано.
lookup()
возвращает IP-адрес для имени хоста.
reverse_lookup()
возвращает имя хоста для IP-адреса.
Функция может быть вызвана любой с единственным строковым параметром формы 'xxx.xxx.xxx.xxx'
или с четырьмя числами.
avgcost()
возвращает среднюю стоимость. Это -
агрегатная функция.
Динамически загружаемый файл должен быть скомпилирован как объектный файл с обеспечением совместного доступа, используя команду что-то вроде этого:
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 можно скомпилировать определяемые пользователем функции при использовании следующей процедуры:
Получите исходное распределение MySQL. См. Раздел 2.1.3, "Как к MySQL Get".
Получите CMake, создают утилиту, в
случае необходимости, от
В исходном дереве загляните sql
каталог. Есть
названные файлы udf_example.def
udf_example.c
там. Скопируйте оба файла от этого каталога до Вашего
рабочего каталога.
Создайте 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)
Создайте проект VC и файлы решения:
cmake -G "<Generator>"
Вызывая cmake - справка показывает Вам список допустимых Генераторов.
Создать 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 недоступны.