9.2. Додавання нових функцій MySQL 9.2.2. Додавання нової визначуваної користувачем функції
9.2.2.5. Компіляція та встановлення визначених користувачем функцій
Файли, що реалізують UDF, повинні компілюватися та встановлюватися на машині, де працює сервер. Ця процедура описана нижче для прикладних файлів UDF udf_example.cc , що входить у поставку вихідного коду MySQL. Цей файл містить такі функції:
metaphon() повертає metaphon -рядок для рядкового аргументу. Цей рядок нагадує soundex-рядок, але більш пристосований для англійської мови.
myfunc_double() повертає відношення суми ASCII значень символів своїх аргументів до сумарної довжини аргументів.
myfunc_int() повертає сумарну довжину аргументів.
sequence([const int]) повертає послідовність, починаючи із заданого номера, або з 1, якщо номер не заданий.
Динамічно завантажуваний файл повинен компілюватися як об'єктний файл, що розділяється, за допомогою команди наступного виду:
Коректні опції компілятора для своєї системи можна легко отримати запустивши наступну команду в каталозі sql дерева вихідних текстів MySQL:
Слід виконати команду компіляції, подібну до наведеної вище 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 про нові функції наступними командами:
Функції можна видалити за допомогою DROP FUNCTION :
Команди 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 ).