mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
BUG#17772
A crash after ALTER TABLE t1 RENAME ... mysql-test/r/partition.result: New test case mysql-test/t/partition.test: New test case sql/sql_lex.h: Introduced like name for CREATE TABLE t1 LIKE t2 sql/sql_parse.cc: Introduced like name for CREATE TABLE t1 LIKE t2 sql/sql_partition.cc: Introduced like name for CREATE TABLE t1 LIKE t2 sql/sql_yacc.yy: Introduced like name for CREATE TABLE t1 LIKE t2
This commit is contained in:
parent
2d360cd035
commit
01cce283a7
6 changed files with 41 additions and 10 deletions
|
@ -546,4 +546,15 @@ t1 CREATE TABLE `t1` (
|
|||
`b` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY LIST (a) (PARTITION p1 VALUES IN (1) ENGINE = MyISAM, PARTITION p2 VALUES IN (2) ENGINE = MyISAM)
|
||||
drop table t1;
|
||||
create table t1 (a int unsigned not null auto_increment primary key)
|
||||
partition by key(a);
|
||||
alter table t1 rename t2, add c char(10), comment "no comment";
|
||||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`c` char(10) DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='no comment' PARTITION BY KEY (a)
|
||||
drop table t2;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -697,4 +697,21 @@ alter table t1 add primary key (b);
|
|||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
############################################
|
||||
#
|
||||
# Author: Mikael Ronstrom
|
||||
# Date: 2006-03-01
|
||||
# Purpose
|
||||
# Bug 17772: Crash at ALTER TABLE with rename
|
||||
# and add column + comment on
|
||||
# partitioned table
|
||||
#
|
||||
############################################
|
||||
create table t1 (a int unsigned not null auto_increment primary key)
|
||||
partition by key(a);
|
||||
alter table t1 rename t2, add c char(10), comment "no comment";
|
||||
show create table t2;
|
||||
|
||||
drop table t2;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -761,6 +761,7 @@ typedef struct st_lex
|
|||
const uchar *tok_start_prev, *tok_end_prev;
|
||||
|
||||
char *length,*dec,*change,*name;
|
||||
Table_ident *like_name;
|
||||
char *help_arg;
|
||||
char *backup_dir; /* For RESTORE/BACKUP */
|
||||
char* to_log; /* For PURGE MASTER LOGS TO */
|
||||
|
|
|
@ -2897,9 +2897,9 @@ mysql_execute_command(THD *thd)
|
|||
else
|
||||
{
|
||||
/* regular create */
|
||||
if (lex->name)
|
||||
if (lex->like_name)
|
||||
res= mysql_create_like_table(thd, create_table, &lex->create_info,
|
||||
(Table_ident *)lex->name);
|
||||
lex->like_name);
|
||||
else
|
||||
{
|
||||
res= mysql_create_table(thd, create_table->db,
|
||||
|
|
|
@ -3741,14 +3741,14 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
|
|||
ha_legacy_type(default_db_type)));
|
||||
if (is_create_table_ind)
|
||||
{
|
||||
if (old_lex->name)
|
||||
if (old_lex->like_name)
|
||||
{
|
||||
/*
|
||||
This code is executed when we do a CREATE TABLE t1 LIKE t2
|
||||
old_lex->name contains the t2 and the table we are opening has
|
||||
old_lex->like_name contains the t2 and the table we are opening has
|
||||
name t1.
|
||||
*/
|
||||
Table_ident *table_ident= (Table_ident *)old_lex->name;
|
||||
Table_ident *table_ident= old_lex->like_name;
|
||||
char *src_db= table_ident->db.str ? table_ident->db.str : thd->db;
|
||||
char *src_table= table_ident->table.str;
|
||||
char buf[FN_REFLEN];
|
||||
|
|
|
@ -1214,7 +1214,8 @@ create:
|
|||
lex->create_info.options=$2 | $4;
|
||||
lex->create_info.db_type= lex->thd->variables.table_type;
|
||||
lex->create_info.default_table_charset= NULL;
|
||||
lex->name=0;
|
||||
lex->name= 0;
|
||||
lex->like_name= 0;
|
||||
}
|
||||
create2
|
||||
{ Lex->current_select= &Lex->select_lex; }
|
||||
|
@ -3272,13 +3273,13 @@ create2:
|
|||
| LIKE table_ident
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (!(lex->name= (char *)$2))
|
||||
if (!(lex->like_name= $2))
|
||||
YYABORT;
|
||||
}
|
||||
| '(' LIKE table_ident ')'
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (!(lex->name= (char *)$3))
|
||||
if (!(lex->like_name= $3))
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
@ -4712,8 +4713,8 @@ alter:
|
|||
{
|
||||
THD *thd= YYTHD;
|
||||
LEX *lex= thd->lex;
|
||||
lex->name= 0;
|
||||
lex->sql_command= SQLCOM_ALTER_TABLE;
|
||||
lex->name= 0;
|
||||
lex->duplicates= DUP_ERROR;
|
||||
if (!lex->select_lex.add_table_to_list(thd, $4, NULL,
|
||||
TL_OPTION_UPDATING))
|
||||
|
@ -4722,7 +4723,8 @@ alter:
|
|||
lex->key_list.empty();
|
||||
lex->col_list.empty();
|
||||
lex->select_lex.init_order();
|
||||
lex->select_lex.db=lex->name=0;
|
||||
lex->select_lex.db=lex->name= 0;
|
||||
lex->like_name= 0;
|
||||
bzero((char*) &lex->create_info,sizeof(lex->create_info));
|
||||
lex->create_info.db_type= (handlerton*) &default_hton;
|
||||
lex->create_info.default_table_charset= NULL;
|
||||
|
|
Loading…
Reference in a new issue