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

22.2.5. MySQL Services for Plugins

У плагинов сервера MySQL есть доступ к серверу "службы". Интерфейс служб представляет функциональность сервера, которую могут вызвать плагины. Это дополняет сменный API и имеет эти характеристики:

Текущие службы включают следующий, и другие могут быть реализованы:

Сменный интерфейс служб отличается от сменного API следующим образом:

Для разработчиков, которые хотят изменить сервер, чтобы добавить новую службу, см. MySQL Services for Plugins.

Остаток от этого раздела описывает, как плагин использует функциональность сервера, которая доступна как сервис. См. также источник для плагина "демона" в качестве примера, который использует my_snprintf служба. В пределах исходного распределения MySQL тот плагин располагается в plugin/daemon_example каталог.

Чтобы определить, какие службы существуют и что функционирует, они обеспечивают, заглядывают include/mysql каталог исходного распределения MySQL. Соответствующие файлы:

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

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

#include <mysql/plugin.h>

Это не представляет дополнительной стоимости установки. Плагин должен включать тот файл так или иначе, потому что это содержит определения и структуры, в которых нуждается каждый плагин.

Чтобы получить доступ к службе, плагин вызывает служебные функции как любая другая функция. Например, чтобы отформатировать строку в буфер для того, чтобы напечатать, вызовите my_snprintf() функция обеспечила службой того же самого имени:

char buffer[BUFFER_SIZE];my_snprintf(buffer, sizeof(buffer), format_string, argument_to_format, ...);

Чтобы сообщить ошибка, которую сервер запишет в журнал ошибок, сначала выберите ошибочный уровень. mysql/service_my_plugin_log.h определяет эти уровни:

enum plugin_log_level{  MY_ERROR_LEVEL,  MY_WARNING_LEVEL,  MY_INFORMATION_LEVEL};  

Затем вызовите my_plugin_log_message():

int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level,                          const char *format, ...);

Например:

my_plugin_log_message(plugin_ptr, MY_ERROR_LEVEL, "Cannot initialize plugin");

Когда Вы создаете свой плагин, следует соединиться в libmysqlservices библиотека. Используйте -lmysqlservices флаг во время ссылки. Например, для CMake, помещает это в верхний уровень CMakeLists.txt файл:

FIND_LIBRARY(MYSQLSERVICES_LIB mysqlservices  PATHS "${MYSQL_SRCDIR}/libservices" NO_DEFAULT_PATH)

Вставьте это CMakeLists.txt файл в каталоге, содержащем сменный источник:

# the plugin needs the mysql services library for error loggingTARGET_LINK_LIBRARIES (your_plugin_library_name ${MYSQLSERVICES_LIB})