mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
BUG#28248 - mysqldump results with MERGE ... UNION=() cannot be executed
When there are no underlying tables specified for a merge table, SHOW CREATE TABLE outputs a statement that cannot be executed. The same is true for mysqldump (it generates dumps that cannot be executed). This happens because SQL parser does not accept empty UNION() clause. This patch changes the following: - it is now possible to execute CREATE/ALTER statement with empty UNION() clause. - the same as above, but still worth noting: it is now possible to remove underlying tables mapping using ALTER TABLE ... UNION=(). - SHOW CREATE TABLE does not output UNION() clause if there are no underlying tables specified for a merge table. This makes mysqldump slightly smaller.
This commit is contained in:
parent
9c4e4640ad
commit
1f0e9f5a5d
4 changed files with 42 additions and 1 deletions
|
@ -918,4 +918,26 @@ id ref
|
|||
3 2
|
||||
4 5
|
||||
DROP TABLE t1, t2, t3;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE m1(a INT) ENGINE=MERGE;
|
||||
SHOW CREATE TABLE m1;
|
||||
Table Create Table
|
||||
m1 CREATE TABLE `m1` (
|
||||
`a` int(11) default NULL
|
||||
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE m1;
|
||||
CREATE TABLE m1(a INT) ENGINE=MERGE UNION=();
|
||||
SHOW CREATE TABLE m1;
|
||||
Table Create Table
|
||||
m1 CREATE TABLE `m1` (
|
||||
`a` int(11) default NULL
|
||||
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||
ALTER TABLE m1 UNION=(t1);
|
||||
ALTER TABLE m1 UNION=();
|
||||
SHOW CREATE TABLE m1;
|
||||
Table Create Table
|
||||
m1 CREATE TABLE `m1` (
|
||||
`a` int(11) default NULL
|
||||
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, m1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -542,5 +542,18 @@ SELECT * FROM t3;
|
|||
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
#
|
||||
# BUG#28248 - mysqldump results with MERGE ... UNION=() cannot be executed
|
||||
#
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE m1(a INT) ENGINE=MERGE;
|
||||
SHOW CREATE TABLE m1;
|
||||
DROP TABLE m1;
|
||||
CREATE TABLE m1(a INT) ENGINE=MERGE UNION=();
|
||||
SHOW CREATE TABLE m1;
|
||||
ALTER TABLE m1 UNION=(t1);
|
||||
ALTER TABLE m1 UNION=();
|
||||
SHOW CREATE TABLE m1;
|
||||
DROP TABLE t1, m1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -602,6 +602,12 @@ void ha_myisammrg::append_create_info(String *packet)
|
|||
packet->append(STRING_WITH_LEN(" INSERT_METHOD="));
|
||||
packet->append(get_type(&merge_insert_method,file->merge_insert_method-1));
|
||||
}
|
||||
/*
|
||||
There is no sence adding UNION clause in case there is no underlying
|
||||
tables specified.
|
||||
*/
|
||||
if (file->open_tables == file->end_table)
|
||||
return;
|
||||
packet->append(STRING_WITH_LEN(" UNION=("));
|
||||
MYRG_TABLE *open_table,*first;
|
||||
|
||||
|
|
|
@ -2932,7 +2932,7 @@ create_table_option:
|
|||
my_error(ER_WARN_DEPRECATED_SYNTAX, MYF(0), "RAID_CHUNKSIZE", "PARTITION");
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| UNION_SYM opt_equal '(' table_list ')'
|
||||
| UNION_SYM opt_equal '(' opt_table_list ')'
|
||||
{
|
||||
/* Move the union list to the merge_list */
|
||||
LEX *lex=Lex;
|
||||
|
|
Loading…
Add table
Reference in a new issue