diff options
author | unknown <malff/marcsql@weblab.(none)> | 2007-01-23 15:14:08 -0700 |
---|---|---|
committer | unknown <malff/marcsql@weblab.(none)> | 2007-01-23 15:14:08 -0700 |
commit | 186e3ee534024c69fe9aec197dffb0f7dc86da82 (patch) | |
tree | 01c7ed4d2173fa714e0ec36c17d94bcc087641f4 | |
parent | a361cf1b85a69f35577b79a74ec2821fc2d96c2c (diff) | |
download | mariadb-git-186e3ee534024c69fe9aec197dffb0f7dc86da82.tar.gz |
Bug#24392 (SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS)
Before this fix, the command SHOW ENGINE <name> STATUS would:
- print a warning if the engine name is unknown,
- proceed and implement the same behavior as SHOW ENGINE ALL STATUS,
and list the status of all the storage engines registered.
In particular, this behavior caused confusion about the command :
SHOW ENGINE MUTEX STATUS, which as a side effect would print the status
of the innodb engine when that engine is registered.
Also, before this fix, every time an unknown engine name was substituted by
the default engine (which happen unless SQL_MODE NO_ENGINE_SUBSTITUTION is
set), a malformed warning was raised.
For example, the command ALTER TABLE T1 ENGINE = X would print :
Warnings:
Error 1286 Unknown table engine 'X'
With this fix:
SHOW ENGINE <name> STATUS|LOGS|MUTEX
always fails with an error when the engine <name> is unknown.
For other commands, warnings about unknown engines are raised as:
Warnings:
Warning 1286 Unknown table engine 'X'
In other words, engine substitution never affect the SHOW ENGINE command,
since this would lead to very confusing results.
mysql-test/r/ndb_dd_basic.result:
Warnings for unknown engines.
mysql-test/r/partition_innodb.result:
Warnings for unknown engines.
mysql-test/r/ps_1general.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/r/show_check.result:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/ps_1general.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
mysql-test/t/show_check.test:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
sql/sql_yacc.yy:
Fixed SHOW ENGINE <name> STATUS|LOGS|MUTEX
-rw-r--r-- | mysql-test/r/ndb_dd_basic.result | 2 | ||||
-rw-r--r-- | mysql-test/r/partition_innodb.result | 4 | ||||
-rw-r--r-- | mysql-test/r/ps_1general.result | 4 | ||||
-rw-r--r-- | mysql-test/r/show_check.result | 14 | ||||
-rw-r--r-- | mysql-test/t/ps_1general.test | 10 | ||||
-rw-r--r-- | mysql-test/t/show_check.test | 18 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 34 |
7 files changed, 63 insertions, 23 deletions
diff --git a/mysql-test/r/ndb_dd_basic.result b/mysql-test/r/ndb_dd_basic.result index 724b42b6db3..014858e6856 100644 --- a/mysql-test/r/ndb_dd_basic.result +++ b/mysql-test/r/ndb_dd_basic.result @@ -11,7 +11,7 @@ ADD UNDOFILE 'undofile02.dat' INITIAL_SIZE = 4M ENGINE=XYZ; Warnings: -Error 1286 Unknown table engine 'XYZ' +Warning 1286 Unknown table engine 'XYZ' Error 1466 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP' CREATE TABLESPACE ts1 ADD DATAFILE 'datafile.dat' diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index 8619d0909ee..4449d105db0 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -54,7 +54,7 @@ create table t1 (a int) engine = x partition by key (a); Warnings: -Error 1286 Unknown table engine 'x' +Warning 1286 Unknown table engine 'x' show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -67,7 +67,7 @@ partition by list (a) (partition p0 values in (0)); alter table t1 engine = x; Warnings: -Error 1286 Unknown table engine 'x' +Warning 1286 Unknown table engine 'x' show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result index 762ceeaa03b..391d22d232b 100644 --- a/mysql-test/r/ps_1general.result +++ b/mysql-test/r/ps_1general.result @@ -304,7 +304,9 @@ execute stmt4; Variable_name Value sql_mode prepare stmt4 from ' show engine bdb logs '; -execute stmt4; +ERROR 42000: Unknown table engine 'bdb' +prepare stmt4 from ' show engine foo logs '; +ERROR 42000: Unknown table engine 'foo' prepare stmt4 from ' show grants for user '; prepare stmt4 from ' show create table t2 '; prepare stmt4 from ' show master status '; diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result index 516355839b5..986fe32ff98 100644 --- a/mysql-test/r/show_check.result +++ b/mysql-test/r/show_check.result @@ -730,4 +730,18 @@ show keys from `mysqlttest\1`.`a\b`; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment drop table `mysqlttest\1`.`a\b`; drop database `mysqlttest\1`; +show engine foobar status; +ERROR 42000: Unknown table engine 'foobar' +show engine foobar logs; +ERROR 42000: Unknown table engine 'foobar' +show engine foobar mutex; +ERROR 42000: Unknown table engine 'foobar' +show engine mutex status; +ERROR 42000: Unknown table engine 'mutex' +show engine csv status; +Type Name Status +show engine csv logs; +Type Name Status +show engine csv mutex; +Type Name Status End of 5.1 tests diff --git a/mysql-test/t/ps_1general.test b/mysql-test/t/ps_1general.test index dd70f7edfa7..5b0118ced49 100644 --- a/mysql-test/t/ps_1general.test +++ b/mysql-test/t/ps_1general.test @@ -321,14 +321,10 @@ prepare stmt4 from ' show status like ''Threads_running'' '; execute stmt4; prepare stmt4 from ' show variables like ''sql_mode'' '; execute stmt4; -# The output depends on the bdb being enabled and on the history -# history (actions of the bdb engine). -# That is the reason why, we switch the output here off. -# (The real output will be tested in ps_6bdb.test) ---disable_result_log +--error ER_UNKNOWN_STORAGE_ENGINE prepare stmt4 from ' show engine bdb logs '; -execute stmt4; ---enable_result_log +--error ER_UNKNOWN_STORAGE_ENGINE +prepare stmt4 from ' show engine foo logs '; prepare stmt4 from ' show grants for user '; prepare stmt4 from ' show create table t2 '; prepare stmt4 from ' show master status '; diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test index be803a74c7b..198e676065d 100644 --- a/mysql-test/t/show_check.test +++ b/mysql-test/t/show_check.test @@ -563,4 +563,22 @@ show keys from `mysqlttest\1`.`a\b`; drop table `mysqlttest\1`.`a\b`; drop database `mysqlttest\1`; +# +# Bug#24392: SHOW ENGINE MUTEX STATUS is a synonym for SHOW INNODB STATUS +# + +--error ER_UNKNOWN_STORAGE_ENGINE +show engine foobar status; +--error ER_UNKNOWN_STORAGE_ENGINE +show engine foobar logs; +--error ER_UNKNOWN_STORAGE_ENGINE +show engine foobar mutex; + +--error ER_UNKNOWN_STORAGE_ENGINE +show engine mutex status; + +show engine csv status; +show engine csv logs; +show engine csv mutex; + --echo End of 5.1 tests diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3755f6d3b67..6ec460be7d0 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1021,7 +1021,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %type <interval_time_st> interval_time_st -%type <db_type> storage_engines +%type <db_type> storage_engines known_storage_engines %type <row_type> row_types @@ -4228,19 +4228,31 @@ default_collation: Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; }; +known_storage_engines: + ident_or_text + { + $$ = ha_resolve_by_name(YYTHD, &$1); + if ($$ == NULL) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); + YYABORT; + } + } + ; + storage_engines: ident_or_text { $$ = ha_resolve_by_name(YYTHD, &$1); if ($$ == NULL) - if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) - { - my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); - YYABORT; - } - else { - push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_ERROR, + if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) + { + my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); + YYABORT; + } + + push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, ER_UNKNOWN_STORAGE_ENGINE, ER(ER_UNKNOWN_STORAGE_ENGINE), $1.str); } @@ -8433,12 +8445,10 @@ show_param: if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) YYABORT; } - | ENGINE_SYM storage_engines + | ENGINE_SYM known_storage_engines show_engine_param { Lex->create_info.db_type= $2; } - show_engine_param - | ENGINE_SYM ALL + | ENGINE_SYM ALL show_engine_param { Lex->create_info.db_type= NULL; } - show_engine_param | opt_full COLUMNS from_or_in table_ident opt_db wild_and_where { LEX *lex= Lex; |