parent
65180225b8
commit
9aac2bf86e
@ -332,10 +332,9 @@ RENAME TABLE t1 TO t2;
|
|||||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# INSTALL IF NOT EXISTS [PLUGIN name] SONAME library /
|
# INSTALL IF NOT EXISTS PLUGIN name SONAME library /
|
||||||
# UNINSTALL IF EXISTS PLUGIN|SONAME name
|
# UNINSTALL IF EXISTS PLUGIN|SONAME name
|
||||||
#
|
#
|
||||||
#
|
|
||||||
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
||||||
PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE
|
PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE
|
||||||
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
|
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
|
||||||
|
@ -267,10 +267,9 @@ RENAME TABLE t1 TO t2;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # INSTALL IF NOT EXISTS [PLUGIN name] SONAME library /
|
--echo # INSTALL IF NOT EXISTS PLUGIN name SONAME library /
|
||||||
--echo # UNINSTALL IF EXISTS PLUGIN|SONAME name
|
--echo # UNINSTALL IF EXISTS PLUGIN|SONAME name
|
||||||
--echo #
|
--echo #
|
||||||
--echo #
|
|
||||||
|
|
||||||
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
||||||
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
|
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
|
||||||
@ -297,9 +296,12 @@ select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins whe
|
|||||||
|
|
||||||
UNINSTALL SONAME IF EXISTS 'ha_example';
|
UNINSTALL SONAME IF EXISTS 'ha_example';
|
||||||
|
|
||||||
|
--replace_regex /\.dll/.so/
|
||||||
UNINSTALL SONAME IF EXISTS 'ha_example';
|
UNINSTALL SONAME IF EXISTS 'ha_example';
|
||||||
|
--replace_regex /\.dll/.so/
|
||||||
SHOW WARNINGS;
|
SHOW WARNINGS;
|
||||||
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
|
||||||
|
|
||||||
|
--replace_regex /\.dll/.so/
|
||||||
--error 1305
|
--error 1305
|
||||||
UNINSTALL SONAME 'ha_example';
|
UNINSTALL SONAME 'ha_example';
|
||||||
|
@ -1090,15 +1090,9 @@ static enum install_status plugin_add(MEM_ROOT *tmp_root, bool if_not_exists,
|
|||||||
if (name->str && plugin_find_internal(name, MYSQL_ANY_PLUGIN))
|
if (name->str && plugin_find_internal(name, MYSQL_ANY_PLUGIN))
|
||||||
{
|
{
|
||||||
if (if_not_exists)
|
if (if_not_exists)
|
||||||
{
|
MyFlags|= ME_NOTE;
|
||||||
my_error(ER_PLUGIN_INSTALLED, MyFlags | ME_NOTE, name->str);
|
|
||||||
DBUG_RETURN(INSTALL_FAIL_WARN_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
my_error(ER_PLUGIN_INSTALLED, MyFlags, name->str);
|
my_error(ER_PLUGIN_INSTALLED, MyFlags, name->str);
|
||||||
DBUG_RETURN(INSTALL_FAIL_NOT_OK);
|
DBUG_RETURN(if_not_exists ? INSTALL_FAIL_WARN_OK : INSTALL_FAIL_NOT_OK);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* Clear the whole struct to catch future extensions. */
|
/* Clear the whole struct to catch future extensions. */
|
||||||
bzero((char*) &tmp, sizeof(tmp));
|
bzero((char*) &tmp, sizeof(tmp));
|
||||||
@ -1881,7 +1875,7 @@ end:
|
|||||||
static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
||||||
{
|
{
|
||||||
char buffer[FN_REFLEN];
|
char buffer[FN_REFLEN];
|
||||||
LEX_STRING name= {buffer, 0}, dl= {NULL, 0}, *str= &name;
|
LEX_CSTRING name= {buffer, 0}, dl= {NULL, 0}, *str= &name;
|
||||||
char *p= buffer;
|
char *p= buffer;
|
||||||
DBUG_ENTER("plugin_load_list");
|
DBUG_ENTER("plugin_load_list");
|
||||||
while (list)
|
while (list)
|
||||||
@ -1900,7 +1894,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
|||||||
#ifndef __WIN__
|
#ifndef __WIN__
|
||||||
case ':': /* can't use this as delimiter as it may be drive letter */
|
case ':': /* can't use this as delimiter as it may be drive letter */
|
||||||
#endif
|
#endif
|
||||||
str->str[str->length]= '\0';
|
p[-1]= 0;
|
||||||
if (str == &name) // load all plugins in named module
|
if (str == &name) // load all plugins in named module
|
||||||
{
|
{
|
||||||
if (!name.length)
|
if (!name.length)
|
||||||
@ -1913,7 +1907,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
|||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
||||||
name.str= 0; // load everything
|
name.str= 0; // load everything
|
||||||
if (plugin_add(tmp_root, false, (LEX_CSTRING*) &name, (LEX_CSTRING*) &dl,
|
if (plugin_add(tmp_root, false, &name, &dl,
|
||||||
MYF(ME_ERROR_LOG)) != INSTALL_GOOD)
|
MYF(ME_ERROR_LOG)) != INSTALL_GOOD)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -1921,7 +1915,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
|||||||
{
|
{
|
||||||
free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
if (plugin_add(tmp_root, false, (LEX_CSTRING*) &name, (LEX_CSTRING*) &dl,
|
if (plugin_add(tmp_root, false, &name, &dl,
|
||||||
MYF(ME_ERROR_LOG)) != INSTALL_GOOD)
|
MYF(ME_ERROR_LOG)) != INSTALL_GOOD)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -1934,7 +1928,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
|
|||||||
case '#':
|
case '#':
|
||||||
if (str == &name)
|
if (str == &name)
|
||||||
{
|
{
|
||||||
name.str[name.length]= '\0';
|
p[-1]= 0;
|
||||||
str= &dl;
|
str= &dl;
|
||||||
str->str= p;
|
str->str= p;
|
||||||
continue;
|
continue;
|
||||||
@ -2205,7 +2199,8 @@ bool mysql_install_plugin(THD *thd, const LEX_CSTRING *name,
|
|||||||
mysql_audit_acquire_plugins(thd, event_class_mask);
|
mysql_audit_acquire_plugins(thd, event_class_mask);
|
||||||
|
|
||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
error= plugin_add(thd->mem_root, thd->lex->create_info.if_not_exists(), name, &dl, MYF(0));
|
error= plugin_add(thd->mem_root, thd->lex->create_info.if_not_exists(),
|
||||||
|
name, &dl, MYF(0));
|
||||||
if (unlikely(error != INSTALL_GOOD))
|
if (unlikely(error != INSTALL_GOOD))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
@ -2249,17 +2244,9 @@ static bool do_uninstall(THD *thd, TABLE *table, const LEX_CSTRING *name)
|
|||||||
if (!(plugin= plugin_find_internal(name, MYSQL_ANY_PLUGIN)) ||
|
if (!(plugin= plugin_find_internal(name, MYSQL_ANY_PLUGIN)) ||
|
||||||
plugin->state & (PLUGIN_IS_UNINITIALIZED | PLUGIN_IS_DYING))
|
plugin->state & (PLUGIN_IS_UNINITIALIZED | PLUGIN_IS_DYING))
|
||||||
{
|
{
|
||||||
if (thd->lex->if_exists())
|
myf MyFlags= thd->lex->if_exists() ? ME_NOTE : 0;
|
||||||
{
|
my_error(ER_SP_DOES_NOT_EXIST, MyFlags, "PLUGIN", name->str);
|
||||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, ER_SP_DOES_NOT_EXIST,
|
return !MyFlags;
|
||||||
ER_THD(thd, ER_SP_DOES_NOT_EXIST), "PLUGIN", name->str);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "PLUGIN", name->str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!plugin->plugin_dl)
|
if (!plugin->plugin_dl)
|
||||||
{
|
{
|
||||||
@ -2381,15 +2368,9 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_CSTRING *name,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (thd->lex->if_exists())
|
myf MyFlags= thd->lex->if_exists() ? ME_NOTE : 0;
|
||||||
{
|
my_error(ER_SP_DOES_NOT_EXIST, MyFlags, "SONAME", dl.str);
|
||||||
my_error(ER_SP_DOES_NOT_EXIST, ME_NOTE, "SONAME", dl.str);
|
error|= !MyFlags;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
error= true;
|
|
||||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "SONAME", dl.str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reap_plugins();
|
reap_plugins();
|
||||||
|
@ -17513,6 +17513,7 @@ uninstall:
|
|||||||
UNINSTALL_SYM PLUGIN_SYM opt_if_exists ident
|
UNINSTALL_SYM PLUGIN_SYM opt_if_exists ident
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
|
lex->check_opt.init();
|
||||||
if (lex->add_create_options_with_check($3))
|
if (lex->add_create_options_with_check($3))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
|
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
|
||||||
@ -17521,6 +17522,7 @@ uninstall:
|
|||||||
| UNINSTALL_SYM SONAME_SYM opt_if_exists TEXT_STRING_sys
|
| UNINSTALL_SYM SONAME_SYM opt_if_exists TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
|
lex->check_opt.init();
|
||||||
if (lex->add_create_options_with_check($3))
|
if (lex->add_create_options_with_check($3))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
|
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user