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.
parent f49eb3fd
......@@ -111,6 +111,9 @@ int handle_options(int *argc, char ***argv,
int error, i;
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 */
(*argv)++; /* --- || ---- */
init_variables(longopts);
......
......@@ -215,6 +215,29 @@ static struct st_mysql_show_var simple_status[]=
{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
*/
......@@ -231,8 +254,8 @@ mysql_declare_plugin(ftexample)
simple_parser_plugin_deinit,/* deinit function (when unloaded) */
0x0001, /* version */
simple_status, /* status variables */
NULL, /* system variables */
NULL /* config options */
simple_system_variables, /* system variables */
NULL
}
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);
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)))
DBUG_RETURN(TRUE);
/* 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 *table;
int error, argc=0;
int error, argc;
char *argv[2];
struct st_plugin_int *tmp;
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);
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);
if (error || !(tmp= plugin_find_internal(name, MYSQL_ANY_PLUGIN)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment