Commit 09d29dfc authored by Alexander Barkov's avatar Alexander Barkov

MDEV-18767 Port "MDEV-16294: INSTALL PLUGIN IF NOT EXISTS / UNINSTALL PLUGIN...

MDEV-18767 Port "MDEV-16294: INSTALL PLUGIN IF NOT EXISTS / UNINSTALL PLUGIN IF EXISTS" to sql_yacc_ora.yy
parent 9bd47835
--echo #
--echo # MDEV-16294: INSTALL PLUGIN IF NOT EXISTS / UNINSTALL PLUGIN IF EXISTS
--echo #
--echo # INSTALL IF NOT EXISTS PLUGIN name SONAME library /
--echo # UNINSTALL IF EXISTS PLUGIN|SONAME name
--echo #
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';
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
--replace_regex /\.dll/.so/
--error ER_PLUGIN_INSTALLED
INSTALL PLUGIN example SONAME 'ha_example';
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
SHOW WARNINGS;
UNINSTALL PLUGIN IF EXISTS example;
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
UNINSTALL PLUGIN IF EXISTS example;
SHOW WARNINGS;
--error ER_SP_DOES_NOT_EXIST
UNINSTALL PLUGIN example;
INSTALL SONAME 'ha_example';
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
UNINSTALL SONAME IF EXISTS 'ha_example';
--replace_regex /\.dll/.so/
UNINSTALL SONAME IF EXISTS 'ha_example';
--replace_regex /\.dll/.so/
SHOW WARNINGS;
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
--replace_regex /\.dll/.so/
--error ER_SP_DOES_NOT_EXIST
UNINSTALL SONAME 'ha_example';
......@@ -332,6 +332,8 @@ RENAME TABLE t1 TO t2;
ERROR 42S02: Table 'test.t1' doesn't exist
DROP TABLE t1;
#
# MDEV-16294: INSTALL PLUGIN IF NOT EXISTS / UNINSTALL PLUGIN IF EXISTS
#
# INSTALL IF NOT EXISTS PLUGIN name SONAME library /
# UNINSTALL IF EXISTS PLUGIN|SONAME name
#
......
......@@ -266,42 +266,4 @@ UNINSTALL PLUGIN example;
RENAME TABLE t1 TO t2;
DROP TABLE t1;
--echo #
--echo # INSTALL IF NOT EXISTS PLUGIN name SONAME library /
--echo # UNINSTALL IF EXISTS PLUGIN|SONAME name
--echo #
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';
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
--replace_regex /\.dll/.so/
--error ER_PLUGIN_INSTALLED
INSTALL PLUGIN example SONAME 'ha_example';
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
SHOW WARNINGS;
UNINSTALL PLUGIN IF EXISTS example;
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
UNINSTALL PLUGIN IF EXISTS example;
SHOW WARNINGS;
--error 1305
UNINSTALL PLUGIN example;
INSTALL SONAME 'ha_example';
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
UNINSTALL SONAME IF EXISTS 'ha_example';
--replace_regex /\.dll/.so/
UNINSTALL SONAME IF EXISTS 'ha_example';
--replace_regex /\.dll/.so/
SHOW WARNINGS;
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
--replace_regex /\.dll/.so/
--error 1305
UNINSTALL SONAME 'ha_example';
--source include/install_plugin_if_exists.inc
SET sql_mode=ORACLE;
#
# MDEV-16294: INSTALL PLUGIN IF NOT EXISTS / UNINSTALL PLUGIN IF EXISTS
#
# INSTALL IF NOT EXISTS PLUGIN name SONAME library /
# UNINSTALL IF EXISTS PLUGIN|SONAME name
#
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE
INSTALL PLUGIN IF NOT EXISTS example SONAME '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
EXAMPLE ACTIVE STORAGE ENGINE
INSTALL PLUGIN example SONAME 'ha_example';
ERROR HY000: Plugin 'example' already installed
INSTALL PLUGIN IF NOT EXISTS example SONAME 'ha_example';
Warnings:
Note 1968 Plugin 'example' already installed
SHOW WARNINGS;
Level Code Message
Note 1968 Plugin 'example' already installed
UNINSTALL PLUGIN IF EXISTS example;
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE
UNINSTALL PLUGIN IF EXISTS example;
Warnings:
Note 1305 PLUGIN example does not exist
SHOW WARNINGS;
Level Code Message
Note 1305 PLUGIN example does not exist
UNINSTALL PLUGIN example;
ERROR 42000: PLUGIN example does not exist
INSTALL SONAME '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
EXAMPLE ACTIVE STORAGE ENGINE
UNUSABLE ACTIVE DAEMON
UNINSTALL SONAME IF EXISTS 'ha_example';
UNINSTALL SONAME IF EXISTS 'ha_example';
Warnings:
Note 1305 SONAME ha_example.so does not exist
SHOW WARNINGS;
Level Code Message
Note 1305 SONAME ha_example.so does not exist
select PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_TYPE from information_schema.plugins where plugin_library like 'ha_example%';
PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE
UNINSTALL SONAME 'ha_example';
ERROR 42000: SONAME ha_example.so does not exist
SET sql_mode=ORACLE;
--source include/install_plugin_if_exists.inc
......@@ -10160,3 +10160,50 @@ Item *st_select_lex::pushdown_from_having_into_where(THD *thd, Item *having)
return having;
}
bool LEX::stmt_install_plugin(const DDL_options_st &opt,
const Lex_ident_sys_st &name,
const LEX_CSTRING &soname)
{
create_info.init();
if (add_create_options_with_check(opt))
return true;
sql_command= SQLCOM_INSTALL_PLUGIN;
comment= name;
ident= soname;
return false;
}
void LEX::stmt_install_plugin(const LEX_CSTRING &soname)
{
sql_command= SQLCOM_INSTALL_PLUGIN;
comment= null_clex_str;
ident= soname;
}
bool LEX::stmt_uninstall_plugin_by_name(const DDL_options_st &opt,
const Lex_ident_sys_st &name)
{
check_opt.init();
if (add_create_options_with_check(opt))
return true;
sql_command= SQLCOM_UNINSTALL_PLUGIN;
comment= name;
ident= null_clex_str;
return false;
}
bool LEX::stmt_uninstall_plugin_by_soname(const DDL_options_st &opt,
const LEX_CSTRING &soname)
{
check_opt.init();
if (add_create_options_with_check(opt))
return true;
sql_command= SQLCOM_UNINSTALL_PLUGIN;
comment= null_clex_str;
ident= soname;
return false;
}
......@@ -4391,6 +4391,16 @@ struct LEX: public Query_tables_list
bool parsed_create_view(SELECT_LEX_UNIT *unit, int check);
bool select_finalize(st_select_lex_unit *expr);
void relink_hack(st_select_lex *select_lex);
bool stmt_install_plugin(const DDL_options_st &opt,
const Lex_ident_sys_st &name,
const LEX_CSTRING &soname);
void stmt_install_plugin(const LEX_CSTRING &soname);
bool stmt_uninstall_plugin_by_name(const DDL_options_st &opt,
const Lex_ident_sys_st &name);
bool stmt_uninstall_plugin_by_soname(const DDL_options_st &opt,
const LEX_CSTRING &soname);
};
......
......@@ -17994,42 +17994,25 @@ opt_migrate:
install:
INSTALL_SYM PLUGIN_SYM opt_if_not_exists ident SONAME_SYM TEXT_STRING_sys
{
LEX *lex= Lex;
lex->create_info.init();
if (lex->add_create_options_with_check($3))
if (Lex->stmt_install_plugin($3, $4, $6))
MYSQL_YYABORT;
lex->sql_command= SQLCOM_INSTALL_PLUGIN;
lex->comment= $4;
lex->ident= $6;
}
| INSTALL_SYM SONAME_SYM TEXT_STRING_sys
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_INSTALL_PLUGIN;
lex->comment= null_clex_str;
lex->ident= $3;
Lex->stmt_install_plugin($3);
}
;
uninstall:
UNINSTALL_SYM PLUGIN_SYM opt_if_exists ident
{
LEX *lex= Lex;
lex->check_opt.init();
if (lex->add_create_options_with_check($3))
if (Lex->stmt_uninstall_plugin_by_name($3, $4))
MYSQL_YYABORT;
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
lex->comment= $4;
}
| UNINSTALL_SYM SONAME_SYM opt_if_exists TEXT_STRING_sys
{
LEX *lex= Lex;
lex->check_opt.init();
if (lex->add_create_options_with_check($3))
if (Lex->stmt_uninstall_plugin_by_soname($3, $4))
MYSQL_YYABORT;
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
lex->comment= null_clex_str;
lex->ident= $4;
}
;
......
......@@ -18170,44 +18170,36 @@ opt_migrate:
;
install:
INSTALL_SYM PLUGIN_SYM ident SONAME_SYM TEXT_STRING_sys
INSTALL_SYM PLUGIN_SYM opt_if_not_exists ident SONAME_SYM TEXT_STRING_sys
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_INSTALL_PLUGIN;
lex->comment= $3;
lex->ident= $5;
if (Lex->stmt_install_plugin($3, $4, $6))
MYSQL_YYABORT;
}
| INSTALL_SYM SONAME_SYM TEXT_STRING_sys
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_INSTALL_PLUGIN;
lex->comment= null_clex_str;
lex->ident= $3;
Lex->stmt_install_plugin($3);
}
;
uninstall:
UNINSTALL_SYM PLUGIN_SYM ident
UNINSTALL_SYM PLUGIN_SYM opt_if_exists ident
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
lex->comment= $3;
if (Lex->stmt_uninstall_plugin_by_name($3, $4))
MYSQL_YYABORT;
}
| UNINSTALL_SYM SONAME_SYM TEXT_STRING_sys
| UNINSTALL_SYM SONAME_SYM opt_if_exists TEXT_STRING_sys
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_UNINSTALL_PLUGIN;
lex->comment= null_clex_str;
lex->ident= $3;
if (Lex->stmt_uninstall_plugin_by_soname($3, $4))
MYSQL_YYABORT;
}
;
/* Avoid compiler warning from sql_yacc.cc where yyerrlab1 is not used */
keep_gcc_happy:
IMPOSSIBLE_ACTION
{
YYERROR;
}
{
YYERROR;
}
;
/**
......
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