Spec-Zone .ru
спецификации, руководства, описания, API
|
Сменный файл библиотеки включает информацию о дескрипторе, чтобы указать на то, какие плагины это содержит.
Если сменная библиотека содержит какие-либо плагины сервера, она должна включать следующую информацию о дескрипторе:
Дескриптор библиотеки указывает на общий номер версии API плагина сервера,
используемый библиотекой, и содержит общий сменный дескриптор для каждого плагина сервера в библиотеке.
Чтобы служить основой для этого дескриптора, вызовите два макросов от plugin.h
заголовочный файл:
mysql_declare_plugin(name
)... one or more server plugin descriptors here ...
mysql_declare_plugin_end;
Макросы расширяются, чтобы обеспечить объявление для версии API автоматически. Следует обеспечить сменные дескрипторы.
В пределах дескриптора библиотеки каждый общий плагин сервера описывается a st_mysql_plugin
структура. Эта сменная структура дескриптора содержит
информацию, которая характерна для каждого типа плагина сервера: значение, которое указывает на сменный
тип; сменное имя, автор, описание, и тип лицензии; указатели на инициализацию и функции
deinitialization, которые вызывает сервер, когда это загружает и разгружает плагин, и указатели на любое
состояние или системные переменные сменные реализации.
Каждый общий дескриптор плагина сервера в пределах дескриптора библиотеки также содержит указатель на специфичный для типа сменный дескриптор. Структура специфичных для типа дескрипторов изменяется от одного сменного типа до другого, потому что у каждого типа плагина может быть свой собственный API. Специфичный для типа сменный дескриптор содержит специфичный для типа номер версии API и указатели на функции, которые необходимы, чтобы реализовать тот сменный тип. Например, у полнотекстового плагина синтаксического анализатора есть инициализация и функции deinitialization, и основная функция парсинга. Сервер вызывает эти функции, когда он использует плагин, чтобы проанализировать текст.
Сменная библиотека также содержит функции интерфейса, на которые ссылаются общие и специфичные для типа дескрипторы для каждого плагина в библиотеке.
Если сменная библиотека содержит клиентский плагин, она должна включать дескриптор для плагина. Дескриптор
начинается с фиксированного набора элементов, характерных для всех клиентских плагинов, сопровождаемых любыми
элементами, определенными для сменного типа. Чтобы служить основой дескриптора, вызовите два макросов от client_plugin.h
заголовочный файл:
mysql_declare_client_plugin(plugin_type
) ...members common to all client plugins
... ...type-specific extra members
...mysql_end_client_plugin;
Сменная библиотека также содержит любые функции интерфейса, на которые ссылается клиентский дескриптор.
mysql_declare_plugin()
и mysql_declare_client_plugin()
макросы отличаются несколько по тому, как они могут быть вызваны, у которого есть импликации для содержания
сменных библиотек. Следующие направляющие линии суммируют правила:
mysql_declare_plugin()
и mysql_declare_client_plugin()
может оба использоваться в том же самом исходном файле, что означает, что сменная библиотека может
содержать и сервер и клиентские плагины. Однако, каждый из mysql_declare_plugin()
и mysql_declare_client_plugin()
может использоваться самое большее однажды.
mysql_declare_plugin()
многократные объявления плагина
сервера разрешений, таким образом, сменная библиотека может содержать многократные плагины сервера.
mysql_declare_client_plugin()
разрешения только
единственное клиентское объявление плагина. Чтобы создать многократные клиентские плагины, отделитесь
нужно пользоваться, сменными библиотеками.
Когда клиентская программа ищет клиентский плагин, который находится в сменной библиотеке и не создан в libmysqlclient
, это ищет файл с базовым именем, которое является тем же самым как
сменным именем. Например, если программа должна использовать названный плагин аутентификации клиента auth_xxx
на системе, которая использует .so
как
суффикс библиотеки, это смотрит в названном файле auth_xxx.so
. (На Mac OS X
программа выглядит первой для auth_xxx.dylib
, тогда для auth_xxx.so
.)
Поэтому, если сменная библиотека содержит клиентский плагин, у библиотеки должно быть то же самое базовое имя
как тот плагин.
То же самое не является истиной для библиотеки, которая содержит плагины сервера. --plugin-load
опция и INSTALL PLUGIN
оператор обеспечивает имя файла библиотеки явно, таким образом,
должно не быть никаким явным отношением между именем библиотеки и именем любых плагинов сервера, которые это
содержит.
Каждая сменная библиотека, которая содержит плагины сервера, должна включать дескриптор библиотеки, который содержит общий сменный дескриптор для каждого плагина сервера в файле. Этот раздел обсуждает, как записать библиотеку и общие дескрипторы для плагинов сервера.
Дескриптор библиотеки должен определить два символа:
_mysql_plugin_interface_version_
определяет номер
версии общей сменной платформы. Это дается MYSQL_PLUGIN_INTERFACE_VERSION
символ, который определяется в plugin.h
файл.
_mysql_plugin_declarations_
определяет массив
сменных объявлений, завершенных объявлением со всем задействованным набором к 0. Каждое объявление
является экземпляром st_mysql_plugin
структура (также определенный в
plugin.h
). Должен быть один из них для каждого плагина сервера в
библиотеке.
Если сервер не находит те два символа в библиотеке, он не принимает это как юридическую сменную библиотеку и отклоняет это с ошибкой. Это предотвращает использование библиотеки в сменных целях, если оно не было создано определенно как сменная библиотека.
Стандартный способ определить два необходимых символа при использовании mysql_declare_plugin()
и mysql_declare_plugin_end
макросы от plugin.h
файл:
mysql_declare_plugin(name
)... one or more server plugin descriptors here ...
mysql_declare_plugin_end;
У каждого плагина сервера должен быть общий дескриптор, который предоставляет информацию API плагина
сервера. У общего дескриптора есть та же самая структура для всех сменных типов. st_mysql_plugin
структура в plugin.h
файл определяет этот дескриптор:
struct st_mysql_plugin{ int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ void *info; /* pointer to type-specific plugin descriptor */ const char *name; /* plugin name */ const char *author; /* plugin author (for I_S.PLUGINS) */ const char *descr; /* general descriptive text (for I_S.PLUGINS) */ int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ int (*init)(void *); /* the function to invoke when plugin is loaded */ int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ unsigned int version; /* plugin version (for I_S.PLUGINS) */ struct st_mysql_show_var *status_vars; struct st_mysql_sys_var **system_vars; void * __reserved1; /* reserved for dependency checking */ unsigned long flags; /* flags for plugin */};
st_mysql_plugin
элементы структуры дескриптора используются следующим образом.
char *
элементы должны быть определены как завершенные нулем строки.
type
: Сменный тип. Это должно быть одним из
значений сменного типа от plugin.h
:
/* The allowable types of plugins*/#define MYSQL_UDF_PLUGIN 0 /* User-defined function */#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */#define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */#define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */#define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */...
Например, для полнотекстового плагина синтаксического анализатора, type
значение MYSQL_FTPARSER_PLUGIN
.
info
: Указатель на специфичный для типа дескриптор
для плагина. Структура этого дескриптора зависит от определенного типа плагина, в отличие от той из
общей сменной структуры дескриптора. В целях управления версиями первый элемент специфичного для
типа дескриптора для каждого сменного типа, как ожидают, будет версией интерфейса для типа. Это
позволяет серверу проверить специфичную для типа версию на каждый плагин независимо от того его тип.
После номера версии дескриптор включает любые другие необходимые элементы, такие как функции
обратного вызова и другая информация, необходимая серверу, чтобы вызвать плагин должным образом.
Более поздние разделы по записи определенных типов плагинов сервера описывают структуру своих
специфичных для типа дескрипторов.
name
: Строка, которая дает сменное имя. Это - имя,
которое будет перечислено в mysql.plugin
таблица и которым Вы отсылаете
к плагину в SQL-операторах такой как INSTALL PLUGIN
и UNINSTALL PLUGIN
, или с --plugin-load
опция. Имя также видимо в INFORMATION_SCHEMA.PLUGINS
таблица или вывод от SHOW PLUGINS
.
Сменное имя не должно начаться с имени любого параметра сервера. Если это сделает, то сервер
будет не в состоянии инициализировать это. Например, у сервера есть a --socket
опция, таким образом, недопустимо использовать
сменное имя такой как socket
, socket_plugin
, и т.д.
author
: Строка, называя сменного автора. Это может
быть тем, что Вы любите.
desc
: Строка, которая обеспечивает общее описание
плагина. Это может быть тем, что Вы любите.
license
: Сменный тип лицензии. Значение может быть
одним из PLUGIN_LICENSE_PROPRIETARY
, PLUGIN_LICENSE_GPL
,
или PLUGIN_LICENSE_BSD
.
init
: Некогда единственная функция инициализации,
или NULL
если нет такой функции. Сервер выполняет эту функцию, когда
это загружает плагин, который происходит для INSTALL PLUGIN
или, для плагинов, перечисленных в mysql.plugin
таблица, при запуске сервера. Функция берет один
параметр, который указывает на внутреннюю структуру, используемую, чтобы идентифицировать плагин.
Это возвращает нуль для успеха и ненулевой для отказа.
deinit
: Некогда единственная функция
deinitialization, или NULL
если нет такой функции. Сервер выполняет эту
функцию, когда это разгружает плагин, который происходит для UNINSTALL PLUGIN
или, для плагинов, перечисленных в mysql.plugin
таблица, на завершении работы сервера. Функция берет
один параметр, который указывает на внутреннюю структуру, используемую, чтобы идентифицировать
плагин, Это возвращает нуль для успеха и ненулевой для отказа.
version
: Сменный номер версии. Когда плагин
устанавливается, это значение может быть получено от INFORMATION_SCHEMA.PLUGINS
таблица. Значение включает главные и
незначительные числа. Если Вы пишете значение как шестнадцатеричную константу, формат 0x
, где MMNN
MM
и NN
главные и
незначительные числа, соответственно. Например, 0x0302
представляет
версию 3.2.
status_vars
: Указатель на структуру для переменных
состояния, связанных с плагином, или NULL
если нет таких переменных.
Когда плагин устанавливается, эти переменные выводятся на экран в выводе SHOW STATUS
оператор.
status_vars
элемент, если нет NULL
,
точки массиву st_mysql_show_var
структуры, которые описывают
переменные состояния. См. Раздел
23.2.4.2.2, "Состояние Плагина сервера и Системные Переменные".
system_vars
: Указатель на структуру для системных
переменных, связанных с плагином, или NULL
если нет таких переменных.
Эти опции и системные переменные могут использоваться, чтобы помочь инициализировать переменные в
пределах плагина.
system_vars
элемент, если нет NULL
,
точки массиву st_mysql_sys_var
структуры, которые описывают
системные переменные. См. Раздел
23.2.4.2.2, "Состояние Плагина сервера и Системные Переменные".
__reserved1
: Заполнитель для будущего. В настоящий
момент это должно быть установлено в NULL
.
flags
: Сменные флаги. Отдельные биты соответствуют
различным флагам. Значение должно быть установлено в ИЛИ применимых флагов. Эти флаги доступны:
#define PLUGIN_OPT_NO_INSTALL 1UL /* Not dynamically loadable */#define PLUGIN_OPT_NO_UNINSTALL 2UL /* Not dynamically unloadable */
PLUGIN_OPT_NO_INSTALL
указывает, что плагин не может быть загружен
во времени выполнения с INSTALL
PLUGIN
оператор. Это является подходящим для плагинов, которые должны быть
загружены при запуске сервера с --plugin-load
опция. PLUGIN_OPT_NO_UNINSTALL
указывает, что плагин не может быть разгружен во времени выполнения с UNINSTALL PLUGIN
оператор.
Этот элемент был добавлен в MySQL 5.6.3.
Сервер вызывает init
и deinit
функции в общем
сменном дескрипторе только, когда загрузка и разгрузка плагин. Им нечего делать к использованию плагина с
того, который происходит, когда SQL-оператор заставляет плагин быть вызванным.
Например, информация о дескрипторе для библиотеки, которая содержит единственный полнотекстовый названный
плагин синтаксического анализатора simple_parser
похож на это:
mysql_declare_plugin(ftexample){ MYSQL_FTPARSER_PLUGIN, /* type */ &simple_parser_descriptor, /* descriptor */ "simple_parser", /* name */ "Oracle Corporation", /* author */ "Simple Full-Text Parser", /* description */ PLUGIN_LICENSE_GPL, /* plugin license */ simple_parser_plugin_init, /* init function (when loaded) */ simple_parser_plugin_deinit,/* deinit function (when unloaded) */ 0x0001, /* version */ simple_status, /* status variables */ simple_system_variables, /* system variables */ NULL, 0}mysql_declare_plugin_end;
Для полнотекстового плагина синтаксического анализатора тип должен быть MYSQL_FTPARSER_PLUGIN
.
Это - значение, которое идентифицирует плагин, как являющийся законным для использования в a WITH PARSER
пункт, создавая a FULLTEXT
индексировать. (Никакой другой сменный тип не является законным для этого пункта.)
plugin.h
определяет mysql_declare_plugin()
и mysql_declare_plugin_end
макросы как это:
#ifndef MYSQL_DYNAMIC_PLUGIN#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= {#else#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= {#endif#define mysql_declare_plugin(NAME) \__MYSQL_DECLARE_PLUGIN(NAME, \ builtin_ ## NAME ## _plugin_interface_version, \ builtin_ ## NAME ## _sizeof_struct_st_plugin, \ builtin_ ## NAME ## _plugin)#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}}
Те объявления определяют _mysql_plugin_interface_version_
символ,
только если MYSQL_DYNAMIC_PLUGIN
символ определяется. Это означает это
-DMYSQL_DYNAMIC_PLUGIN
должен быть обеспечен как часть команды компиляции,
чтобы создать плагин как совместно используемую библиотеку.
Когда макросы используются как только показано, они расширяются до следующего кода, который определяет оба
из необходимых символов (_mysql_plugin_interface_version_
и _mysql_plugin_declarations_
):
int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION;int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin);struct st_mysql_plugin _mysql_plugin_declarations_[]= {{ MYSQL_FTPARSER_PLUGIN, /* type */ &simple_parser_descriptor, /* descriptor */ "simple_parser", /* name */ "Oracle Corporation", /* author */ "Simple Full-Text Parser", /* description */ PLUGIN_LICENSE_GPL, /* plugin license */ simple_parser_plugin_init, /* init function (when loaded) */ simple_parser_plugin_deinit,/* deinit function (when unloaded) */ 0x0001, /* version */ simple_status, /* status variables */ simple_system_variables, /* system variables */ NULL, 0} ,{0,0,0,0,0,0,0,0,0,0,0,0}}};
Предыдущий пример объявляет единственный плагин в общем дескрипторе, но возможно объявить многократные
плагины. Перечислите объявления один за другим между mysql_declare_plugin()
и
mysql_declare_plugin_end
, разделенный запятыми.
Плагины сервера MySQL могут быть записаны в C или C++ (или другой язык, который может использовать
соглашения о вызовах C). Если Вы пишете плагин C++, одна функция C++, которую недопустимо использовать,
является непостоянными переменными, чтобы инициализировать глобальные структуры. Элементы структур такой как
st_mysql_plugin
структура должна быть инициализирована только с постоянными
переменными. simple_parser
дескриптор, показанный ранее, допустим в плагине
C++, потому что удовлетворяет что требование:
mysql_declare_plugin(ftexample){ MYSQL_FTPARSER_PLUGIN, /* type */ &simple_parser_descriptor, /* descriptor */ "simple_parser", /* name */ "Oracle Corporation", /* author */ "Simple Full-Text Parser", /* description */ PLUGIN_LICENSE_GPL, /* plugin license */ simple_parser_plugin_init, /* init function (when loaded) */ simple_parser_plugin_deinit,/* deinit function (when unloaded) */ 0x0001, /* version */ simple_status, /* status variables */ simple_system_variables, /* system variables */ NULL, 0}mysql_declare_plugin_end;
Вот другой допустимый способ записать общий дескриптор. Это использует постоянные переменные, чтобы указать на сменное имя, автора, и описание:
const char *simple_parser_name = "simple_parser";const char *simple_parser_author = "Oracle Corporation";const char *simple_parser_description = "Simple Full-Text Parser";mysql_declare_plugin(ftexample){ MYSQL_FTPARSER_PLUGIN, /* type */ &simple_parser_descriptor, /* descriptor */ simple_parser_name, /* name */ simple_parser_author, /* author */ simple_parser_description, /* description */ PLUGIN_LICENSE_GPL, /* plugin license */ simple_parser_plugin_init, /* init function (when loaded) */ simple_parser_plugin_deinit,/* deinit function (when unloaded) */ 0x0001, /* version */ simple_status, /* status variables */ simple_system_variables, /* system variables */ NULL, 0}mysql_declare_plugin_end;
Однако, следующий общий дескриптор недопустим. Это использует элементы структуры, чтобы указать на сменное имя, автора, и описание, но структуры не считают постоянными инициализаторами в C++:
typedef struct{ const char *name; const char *author; const char *description;} plugin_info;plugin_info parser_info = { "simple_parser", "Oracle Corporation", "Simple Full-Text Parser"};mysql_declare_plugin(ftexample){ MYSQL_FTPARSER_PLUGIN, /* type */ &simple_parser_descriptor, /* descriptor */ parser_info.name, /* name */ parser_info.author, /* author */ parser_info.description, /* description */ PLUGIN_LICENSE_GPL, /* plugin license */ simple_parser_plugin_init, /* init function (when loaded) */ simple_parser_plugin_deinit,/* deinit function (when unloaded) */ 0x0001, /* version */ simple_status, /* status variables */ simple_system_variables, /* system variables */ NULL, 0}mysql_declare_plugin_end;
Интерфейс плагина сервера позволяет плагинам представить состояние и системные переменные, используя status_vars
и system_vars
элементы общего сменного
дескриптора.
status_vars
элемент общего сменного дескриптора, если не 0, указывает массиву
st_mysql_show_var
структуры, каждая из которых описывает одну переменную
состояния, сопровождаемую структурой со всем задействованным набором к 0. st_mysql_show_var
у структуры есть это определение:
struct st_mysql_show_var { const char *name; char *value; enum enum_mysql_show_type type;};
Когда плагин устанавливается, сменное имя и name
к значению присоединяются с
подчеркиванием, чтобы сформировать имя, выведенное на экран SHOW STATUS
.
Следующая таблица показывает допустимую переменную состояния type
значения и
какова соответствующая переменная должна быть.
Таблица 23.1. Типы переменной Состояния Плагина сервера
Тип переменной | Значение |
---|---|
SHOW_BOOL |
Указатель на логическую переменную |
SHOW_INT |
Указатель на целочисленную переменную |
SHOW_LONG |
Указатель на переменную длинного целого |
SHOW_LONGLONG |
Указатель на longlong целочисленную переменную |
SHOW_CHAR |
Строка |
SHOW_CHAR_PTR |
Указатель на строку |
SHOW_ARRAY |
Указатель на другого st_mysql_show_var массив |
SHOW_FUNC |
Указатель на функцию |
SHOW_DOUBLE |
Указатель на двойное |
Для SHOW_FUNC
введите, функция вызывается и заполняет out
параметр, который тогда предоставляет информацию о переменной, которая будет
выведена на экран. У функции есть эта подпись:
#define SHOW_VAR_FUNC_BUFF_SIZE 1024typedef int (*mysql_show_var_func) (void *thd, struct st_mysql_show_var *out, char *buf);
system_vars
элемент, если не 0, указывает массиву st_mysql_sys_var
структуры, каждая из которых описывает одну системную переменную (который может также быть установлен от
командной строки или конфигурационного файла), сопровождаемый структурой со всем задействованным набором к
0. st_mysql_sys_var
структура определяется следующим образом:
struct st_mysql_sys_var { int flags; const char *name, *comment; int (*check)(THD*, struct st_mysql_sys_var *, void*, st_mysql_value*); void (*update)(THD*, struct st_mysql_sys_var *, void*, const void*);};
Дополнительные поля, добавляют как требуется в зависимости от флагов.
Для удобства много макросов определяются, которые делают создающие новые системные переменные в пределах плагина намного более простыми.
Всюду по макросам следующие поля доступны:
name
: Неупомянутый идентификатор для системной
переменной.
varname
: Идентификатор для статической переменной.
Где не доступный, это - то же самое как name
поле.
opt
: Дополнительное использование отмечает для
системной переменной. Следующая таблица показывает допустимые флаги.
Таблица 23.2. Системные Флаги Переменной Плагина сервера
Флаговое значение | Описание |
---|---|
PLUGIN_VAR_READONLY |
Системная переменная только для чтения |
PLUGIN_VAR_NOSYSVAR |
Системная переменная не является пользователем, видимым во времени выполнения |
PLUGIN_VAR_NOCMDOPT |
Системная переменная не конфигурируема из командной строки |
PLUGIN_VAR_NOCMDARG |
Никакой параметр не требуется в командной строке (обычно используемый для логических переменных) |
PLUGIN_VAR_RQCMDARG |
Параметр требуется в командной строке (это - значение по умолчанию), |
PLUGIN_VAR_OPCMDARG |
Параметр является дополнительным в командной строке |
PLUGIN_VAR_MEMALLOC |
Используемый для строковых переменных; указывает, что память должна быть выделена forstorage строки |
comment
: Дескриптивный комментарий, который будет
выведен на экран в сервере, помогает сообщению. NULL
если эта
переменная должна быть скрыта.
check
: Функция проверки, NULL
для значения по умолчанию.
update
: Функция обновления, NULL
для значения по умолчанию.
default
: Переменное значение по умолчанию.
minimum
: Переменное минимальное значение.
maximum
: Переменное максимальное значение.
blocksize
: Переменный размер блока. Когда значение
устанавливается, оно округляется к самому близкому кратному числу blocksize
.
К системной переменной можно получить доступ или при использовании статической переменной непосредственно
или при использовании SYSVAR()
макрос средства доступа. SYSVAR()
макрос обеспечивается для законченности. Обычно это должно использоваться только, когда код не может
непосредственно получить доступ к базовой переменной.
Например:
static int my_foo;static MYSQL_SYSVAR_INT(foo_var, my_foo, PLUGIN_VAR_RQCMDARG, "foo comment", NULL, NULL, 0, 0, INT_MAX, 0); ... SYSVAR(foo_var)= value; value= SYSVAR(foo_var); my_foo= value; value= my_foo;
К переменным сеанса можно получить доступ только через THDVAR()
макрос средства
доступа. Например:
static MYSQL_THDVAR_BOOL(some_flag, PLUGIN_VAR_NOCMDARG, "flag comment", NULL, NULL, FALSE); ... if (THDVAR(thd, some_flag)) { do_something(); THDVAR(thd, some_flag)= FALSE; }
Вся глобальная переменная и системные переменные сеанса должны быть опубликованы к mysqld перед использованием. Это делается, создавая a NULL
- завершенный массив переменных и соединения с этим в сменном открытом
интерфейсе. Например:
static struct st_mysql_sys_var *my_plugin_vars[]= { MYSQL_SYSVAR(foo_var), MYSQL_SYSVAR(some_flag), NULL};mysql_declare_plugin(fooplug){ MYSQL_..._PLUGIN, &plugin_data, "fooplug", "foo author", "This does foo!", PLUGIN_LICENSE_GPL, foo_init, foo_fini, 0x0001, NULL, my_plugin_vars, NULL, 0}mysql_declare_plugin_end;
Следующие макросы удобства позволяют Вам объявить различные типы системных переменных:
Булевы системные переменные типа my_bool
, который
составляет булев 1 байт. (0 = ЛОЖЬ, 1 = ИСТИНА)
MYSQL_THDVAR_BOOL(name, opt, comment, check, update, default)MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, default)
Строковые системные переменные типа char*
, который
является указателем на завершенную нулем строку.
MYSQL_THDVAR_STR(name, opt, comment, check, update, default)MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, default)
Целочисленные системные переменные, из которых есть несколько вариантов.
int
системная переменная, которая
обычно является 4 байтами подписанное слово.
MYSQL_THDVAR_INT(name, opt, comment, check, update, default, min, max, blk)MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
unsigned int
системная переменная,
которая обычно является 4-байтовым словом без знака.
MYSQL_THDVAR_UINT(name, opt, comment, check, update, default, min, max, blk)MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
A long
системная переменная, которая
обычно является или 4-или 8 байтами подписанное слово.
MYSQL_THDVAR_LONG(name, opt, comment, check, update, default, min, max, blk)MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
unsigned long
системная переменная,
которая обычно является или 4-или 8-байтовым словом без знака.
MYSQL_THDVAR_ULONG(name, opt, comment, check, update, default, min, max, blk)MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
A long long
системная переменная,
которая обычно является 8 байтами подписанное слово.
MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, default, minimum, maximum, blocksize)MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
unsigned long long
системная
переменная, которая обычно является 8-байтовым словом без знака.
MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, default, minimum, maximum, blocksize)MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, default, minimum, maximum, blocksize)
unsigned long
системная переменная,
которая обычно является или 4-или 8-байтовым словом без знака. Диапазон возможных
значений является ординалом числа элементов в typelib
,
запуск от 0.
MYSQL_THDVAR_ENUM(name, opt, comment, check, update, default, typelib)MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, default, typelib)
unsigned long long
системная
переменная, которая обычно является 8-байтовым словом без знака. Каждый бит представляет
элемент в typelib
.
MYSQL_THDVAR_SET(name, opt, comment, check, update, default, typelib)MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update,default, typelib)
Внутренне, все изменчивые и сменные системные переменные сохранены в a HASH
структура.
Дисплей текста справки командной строки сервера обрабатывается, компилируя a DYNAMIC_ARRAY
из всех переменных, относящихся к параметрам командной строки, сортируя их, и затем выполняя итерации через
них, чтобы вывести на экран каждую опцию.
Когда параметр командной строки был обработан, он тогда удаляется из argv
handle_option()
функция (my_getopt.c
); в
действительности это используется.
Параметры командной строки серверных процессов во время сменного процесса установки, сразу после того, как плагин был успешно загружен, но прежде, чем сменная функция инициализации была вызвана
Плагины, загруженные во времени выполнения, не извлекают выгоду ни из каких параметров конфигурации и должны
иметь применимые значения по умолчанию. Как только они устанавливаются, они загружаются в mysqld время инициализации, и параметры конфигурации
могут быть установлены в командной строке или в пределах my.cnf
.
Плагины должны рассмотреть thd
параметр, чтобы быть только для чтения.
У каждого клиентского плагина должен быть дескриптор, который предоставляет информацию клиентскому API плагина. Структура дескриптора начинается с фиксированного набора элементов, характерных для всех клиентских плагинов, сопровождаемых любыми элементами, определенными для сменного типа.
st_mysql_client_plugin
структура в client_plugin.h
файл определяет "универсальный" дескриптор,
который содержит общие элементы:
struct st_mysql_client_plugin{ int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *);};
Общее st_mysql_client_plugin
элементы структуры дескриптора используются
следующим образом. char *
элементы должны быть определены как завершенные нулем
строки.
type
: Сменный тип. Это должно быть одним из
значений сменного типа от client_plugin.h
, такой как MYSQL_CLIENT_AUTHENTICATION_PLUGIN
.
interface_version
: Сменная версия интерфейса.
Например, это MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION
для
плагина аутентификации.
name
: Строка, которая дает сменное имя. Это - имя,
которым Вы обращаетесь к плагину, когда Вы вызываете mysql_options()
с MYSQL_DEFAULT_AUTH
опция или определяет --default-auth
опция к клиентской программе MySQL.
author
: Строка, называя сменного автора. Это может
быть тем, что Вы любите.
desc
: Строка, которая обеспечивает общее описание
плагина. Это может быть тем, что Вы любите.
version
: Сменная версия как массив трех целых
чисел, указывающих на майора, незначительного, и версии подростка. Например, {1,2,3}
указывает на версию 1.2.3.
license
: Строка, которая определяет тип лицензии.
mysql_api
: Для внутреннего пользования. Определите
это как NULL
в сменном дескрипторе.
init
: Некогда единственная функция инициализации,
или NULL
если нет такой функции. Клиентская библиотека выполняет эту
функцию, когда это загружает плагин. Функция возвращает нуль для успеха и ненулевой для отказа.
init
функционируйте использует его первые два параметра, чтобы
возвратить сообщение об ошибке, если ошибка происходит. Первым параметром является указатель на
a char
буфер, и второй параметр указывают на буферную длину. Любое
сообщение, возвращенное init
функция должна быть завершена нулем,
таким образом, максимальная длина сообщения является буферной длиной минус один. К следующим
параметрам передают mysql_load_plugin()
.
Первое указывает, насколько больше параметров там (0 если ни один), сопровождаются любыми
остающимися параметрами.
deinit
: Некогда единственная функция
deinitialization, или NULL
если нет такой функции. Клиентская
библиотека выполняет эту функцию, когда это разгружает плагин. Функция не берет параметров. Это
возвращает нуль для успеха и ненулевой для отказа.
options
: Функция для того, чтобы обработать опции,
которые передают к плагину, или NULL
если нет такой функции. Функция
берет два параметра, представляющие имя опции и указатель на его значение.
Для данного клиентского типа плагина общие элементы дескриптора могут сопровождаться дополнительными
элементами, необходимыми, чтобы реализовать плагины того типа. Например, st_mysql_client_plugin_AUTHENTICATION
у структуры для плагинов аутентификации есть функция в конце, который клиентская библиотека вызывает, чтобы
выполнить аутентификацию.
Чтобы объявить плагин, используйте mysql_declare_client_plugin()
и mysql_end_client_plugin
макросы:
mysql_declare_client_plugin(plugin_type
) ...members common to all client plugins
... ...type-specific extra members
...mysql_end_client_plugin;
Не определяйте type
или interface_version
элемент
явно. mysql_declare_client_plugin()
макрос использует plugin_type
параметр, чтобы генерировать их значения
автоматически. Например, объявите клиентский плагин аутентификации как это:
mysql_declare_client_plugin(AUTHENTICATION) "my_auth_plugin", "Author Name", "My Client Authentication Plugin", {1,0,0}, "GPL", NULL, my_auth_init, my_auth_deinit, my_auth_options, my_auth_mainmysql_end_client_plugin;
Это объявление использует AUTHENTICATION
параметр установленному type
и interface_version
элементы к MYSQL_CLIENT_AUTHENTICATION_PLUGIN
и MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION
.
В зависимости от сменного типа у дескриптора могут быть другие элементы после общих элементов. Например, для
плагина аутентификации, есть функция (my_auth_main()
в дескрипторе, только
показанном), который обрабатывает передачу с сервером. См. Раздел
23.2.4.9, "Пишущий Плагины Аутентификации".
Обычно, клиентская программа, которая поддерживает использование плагинов аутентификации, заставляет плагин
быть загруженным, вызывая mysql_options()
установить MYSQL_DEFAULT_AUTH
и MYSQL_PLUGIN_DIR
опции:
char *plugin_dir = "path_to_plugin_dir
";char *default_auth = "plugin_name
";/* ... process command-line options ... */mysql_options(&mysql, MYSQL_PLUGIN_DIR, plugin_dir);mysql_options(&mysql, MYSQL_DEFAULT_AUTH, default_auth);
Как правило, программа также примет --plugin-dir
и --default-auth
опции, которые позволяют пользователям переопределить значения по умолчанию.
Если клиентская программа требует сменного управления низшего уровня, клиентская библиотека содержит
функции, которые берут st_mysql_client_plugin
параметр. См. Раздел
22.8.14, "Клиентские Функции Плагина API C".