mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
WL#2936 - Falcon & MySQL plugin interface: server variables
Added initialization for the plugin structure created in plugin_add(). Made a correct argument vector in mysql_install_plugin(): handle_options() assumes that arg0 (program name) always exists.
This commit is contained in:
parent
f49eb3fde8
commit
98ff6f0a95
3 changed files with 36 additions and 4 deletions
|
@ -111,6 +111,9 @@ int handle_options(int *argc, char ***argv,
|
||||||
int error, i;
|
int error, i;
|
||||||
|
|
||||||
LINT_INIT(opt_found);
|
LINT_INIT(opt_found);
|
||||||
|
/* handle_options() assumes arg0 (program name) always exists */
|
||||||
|
DBUG_ASSERT(argc && *argc >= 1);
|
||||||
|
DBUG_ASSERT(argv && *argv);
|
||||||
(*argc)--; /* Skip the program name */
|
(*argc)--; /* Skip the program name */
|
||||||
(*argv)++; /* --- || ---- */
|
(*argv)++; /* --- || ---- */
|
||||||
init_variables(longopts);
|
init_variables(longopts);
|
||||||
|
|
|
@ -215,6 +215,29 @@ static struct st_mysql_show_var simple_status[]=
|
||||||
{0,0,0}
|
{0,0,0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Plugin system variables.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static long sysvar_one_value;
|
||||||
|
static char *sysvar_two_value;
|
||||||
|
|
||||||
|
static MYSQL_SYSVAR_LONG(simple_sysvar_one, sysvar_one_value,
|
||||||
|
PLUGIN_VAR_RQCMDARG,
|
||||||
|
"Simple fulltext parser example system variable number one. Give a number.",
|
||||||
|
NULL, NULL, 100L, 10L, ~0L, 0);
|
||||||
|
|
||||||
|
static MYSQL_SYSVAR_STR(simple_sysvar_two, sysvar_two_value,
|
||||||
|
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
|
||||||
|
"Simple fulltext parser example system variable number two. Give a string.",
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
|
static struct st_mysql_sys_var* simple_system_variables[]= {
|
||||||
|
MYSQL_SYSVAR(simple_sysvar_one),
|
||||||
|
MYSQL_SYSVAR(simple_sysvar_two),
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Plugin library descriptor
|
Plugin library descriptor
|
||||||
*/
|
*/
|
||||||
|
@ -231,8 +254,8 @@ mysql_declare_plugin(ftexample)
|
||||||
simple_parser_plugin_deinit,/* deinit function (when unloaded) */
|
simple_parser_plugin_deinit,/* deinit function (when unloaded) */
|
||||||
0x0001, /* version */
|
0x0001, /* version */
|
||||||
simple_status, /* status variables */
|
simple_status, /* status variables */
|
||||||
NULL, /* system variables */
|
simple_system_variables, /* system variables */
|
||||||
NULL /* config options */
|
NULL
|
||||||
}
|
}
|
||||||
mysql_declare_plugin_end;
|
mysql_declare_plugin_end;
|
||||||
|
|
||||||
|
|
|
@ -701,6 +701,8 @@ static bool plugin_add(MEM_ROOT *tmp_root,
|
||||||
sql_print_error(ER(ER_UDF_EXISTS), name->str);
|
sql_print_error(ER(ER_UDF_EXISTS), name->str);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
/* Clear the whole struct to catch future extensions. */
|
||||||
|
bzero((char*) &tmp, sizeof(tmp));
|
||||||
if (! (tmp.plugin_dl= plugin_dl_add(dl, report)))
|
if (! (tmp.plugin_dl= plugin_dl_add(dl, report)))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
/* Find plugin by name */
|
/* Find plugin by name */
|
||||||
|
@ -1569,7 +1571,8 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
|
||||||
{
|
{
|
||||||
TABLE_LIST tables;
|
TABLE_LIST tables;
|
||||||
TABLE *table;
|
TABLE *table;
|
||||||
int error, argc=0;
|
int error, argc;
|
||||||
|
char *argv[2];
|
||||||
struct st_plugin_int *tmp;
|
struct st_plugin_int *tmp;
|
||||||
DBUG_ENTER("mysql_install_plugin");
|
DBUG_ENTER("mysql_install_plugin");
|
||||||
|
|
||||||
|
@ -1585,7 +1588,10 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl
|
||||||
|
|
||||||
pthread_mutex_lock(&LOCK_plugin);
|
pthread_mutex_lock(&LOCK_plugin);
|
||||||
rw_wrlock(&LOCK_system_variables_hash);
|
rw_wrlock(&LOCK_system_variables_hash);
|
||||||
error= plugin_add(thd->mem_root, name, dl, &argc, NULL, REPORT_TO_USER);
|
argv[0]= ""; /* handle_options() assumes arg0 (program name) always exists */
|
||||||
|
argv[1]= NULL;
|
||||||
|
argc= 1;
|
||||||
|
error= plugin_add(thd->mem_root, name, dl, &argc, argv, REPORT_TO_USER);
|
||||||
rw_unlock(&LOCK_system_variables_hash);
|
rw_unlock(&LOCK_system_variables_hash);
|
||||||
|
|
||||||
if (error || !(tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))
|
if (error || !(tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))
|
||||||
|
|
Loading…
Reference in a new issue