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

22.2.4.2. Сменные Структуры данных

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

Если сменная библиотека содержит какие-либо плагины сервера, она должна включать следующую информацию о дескрипторе:

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

Если сменная библиотека содержит клиентский плагин, она должна включать дескриптор для плагина. Дескриптор начинается с фиксированного набора элементов, характерных для всех клиентских плагинов, сопровождаемых любыми элементами, определенными для сменного типа. Чтобы служить основой дескриптора, вызовите два макросов от 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() макросы отличаются несколько по тому, как они могут быть вызваны, у которого есть импликации для содержания сменных библиотек. Следующие направляющие линии суммируют правила:

Когда клиентская программа ищет клиентский плагин, который находится в сменной библиотеке и не создан в libmysqlclient, это ищет файл с базовым именем, которое является тем же самым как сменным именем. Например, если программа должна использовать названный плагин аутентификации клиента auth_xxx на системе, которая использует .so как суффикс библиотеки, это смотрит в названном файле auth_xxx.so. (На Mac OS X программа выглядит первой для auth_xxx.dylib, тогда для auth_xxx.so.) Поэтому, если сменная библиотека содержит клиентский плагин, у библиотеки должно быть то же самое базовое имя как тот плагин.

То же самое не является истиной для библиотеки, которая содержит плагины сервера. --plugin-load опция и INSTALL PLUGIN оператор обеспечивает имя файла библиотеки явно, таким образом, должно не быть никаким явным отношением между именем библиотеки и именем любых плагинов сервера, которые это содержит.

22.2.4.2.1. Библиотека Плагина сервера и Сменные Дескрипторы

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

Дескриптор библиотеки должен определить два символа:

  • _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 таблица. Значение включает главные и незначительные числа. Если Вы пишете значение как шестнадцатеричную константу, формат 0xMMNN, где MM и NN главные и незначительные числа, соответственно. Например, 0x0302 представляет версию 3.2.

  • status_vars: Указатель на структуру для переменных состояния, связанных с плагином, или NULL если нет таких переменных. Когда плагин устанавливается, эти переменные выводятся на экран в выводе SHOW STATUS оператор.

    status_vars элемент, если нет NULL, точки массиву st_mysql_show_var структуры, которые описывают переменные состояния. См. Раздел 22.2.4.2.2, "Состояние Плагина сервера и Системные Переменные".

  • system_vars: Указатель на структуру для системных переменных, связанных с плагином, или NULL если нет таких переменных. Эти опции и системные переменные могут использоваться, чтобы помочь инициализировать переменные в пределах плагина.

    system_vars элемент, если нет NULL, точки массиву st_mysql_sys_var структуры, которые описывают системные переменные. См. Раздел 22.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 оператор.

Сервер вызывает 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;

22.2.4.2.2. Состояние Плагина сервера и Системные Переменные

Интерфейс плагина сервера позволяет плагинам представить состояние и системные переменные, используя 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 значения и какова соответствующая переменная должна быть.

Таблица 22.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: Дополнительное использование отмечает для системной переменной. Следующая таблица показывает допустимые флаги.

    Таблица 22.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 параметр, чтобы быть только для чтения.

22.2.4.2.3. Клиентские Дескрипторы Плагина

У каждого клиентского плагина должен быть дескриптор, который предоставляет информацию клиентскому 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() в дескрипторе, только показанном), который обрабатывает передачу с сервером. См. Раздел 22.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 параметр. См. Раздел 21.8.14, "Клиентские Функции Плагина API C".