Commit 055371d8 authored by mikael@zim.(none)'s avatar mikael@zim.(none)

Merge mronstrom@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into  zim.(none):/home/mikael/bug17772
parents 8cb582cf 89b10826
...@@ -546,4 +546,15 @@ t1 CREATE TABLE `t1` ( ...@@ -546,4 +546,15 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL `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) ) 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; 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 End of 5.1 tests
...@@ -697,4 +697,21 @@ alter table t1 add primary key (b); ...@@ -697,4 +697,21 @@ alter table t1 add primary key (b);
show create table t1; show create table t1;
drop 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 --echo End of 5.1 tests
...@@ -761,6 +761,7 @@ typedef struct st_lex ...@@ -761,6 +761,7 @@ typedef struct st_lex
const uchar *tok_start_prev, *tok_end_prev; const uchar *tok_start_prev, *tok_end_prev;
char *length,*dec,*change,*name; char *length,*dec,*change,*name;
Table_ident *like_name;
char *help_arg; char *help_arg;
char *backup_dir; /* For RESTORE/BACKUP */ char *backup_dir; /* For RESTORE/BACKUP */
char* to_log; /* For PURGE MASTER LOGS TO */ char* to_log; /* For PURGE MASTER LOGS TO */
......
...@@ -2897,9 +2897,9 @@ mysql_execute_command(THD *thd) ...@@ -2897,9 +2897,9 @@ mysql_execute_command(THD *thd)
else else
{ {
/* regular create */ /* regular create */
if (lex->name) if (lex->like_name)
res= mysql_create_like_table(thd, create_table, &lex->create_info, res= mysql_create_like_table(thd, create_table, &lex->create_info,
(Table_ident *)lex->name); lex->like_name);
else else
{ {
res= mysql_create_table(thd, create_table->db, res= mysql_create_table(thd, create_table->db,
......
...@@ -3741,14 +3741,14 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf, ...@@ -3741,14 +3741,14 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
ha_legacy_type(default_db_type))); ha_legacy_type(default_db_type)));
if (is_create_table_ind) 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 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. 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_db= table_ident->db.str ? table_ident->db.str : thd->db;
char *src_table= table_ident->table.str; char *src_table= table_ident->table.str;
char buf[FN_REFLEN]; char buf[FN_REFLEN];
......
...@@ -1214,7 +1214,8 @@ create: ...@@ -1214,7 +1214,8 @@ create:
lex->create_info.options=$2 | $4; lex->create_info.options=$2 | $4;
lex->create_info.db_type= lex->thd->variables.table_type; lex->create_info.db_type= lex->thd->variables.table_type;
lex->create_info.default_table_charset= NULL; lex->create_info.default_table_charset= NULL;
lex->name=0; lex->name= 0;
lex->like_name= 0;
} }
create2 create2
{ Lex->current_select= &Lex->select_lex; } { Lex->current_select= &Lex->select_lex; }
...@@ -3272,13 +3273,13 @@ create2: ...@@ -3272,13 +3273,13 @@ create2:
| LIKE table_ident | LIKE table_ident
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (!(lex->name= (char *)$2)) if (!(lex->like_name= $2))
YYABORT; YYABORT;
} }
| '(' LIKE table_ident ')' | '(' LIKE table_ident ')'
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (!(lex->name= (char *)$3)) if (!(lex->like_name= $3))
YYABORT; YYABORT;
} }
; ;
...@@ -4712,8 +4713,8 @@ alter: ...@@ -4712,8 +4713,8 @@ alter:
{ {
THD *thd= YYTHD; THD *thd= YYTHD;
LEX *lex= thd->lex; LEX *lex= thd->lex;
lex->name= 0;
lex->sql_command= SQLCOM_ALTER_TABLE; lex->sql_command= SQLCOM_ALTER_TABLE;
lex->name= 0;
lex->duplicates= DUP_ERROR; lex->duplicates= DUP_ERROR;
if (!lex->select_lex.add_table_to_list(thd, $4, NULL, if (!lex->select_lex.add_table_to_list(thd, $4, NULL,
TL_OPTION_UPDATING)) TL_OPTION_UPDATING))
...@@ -4722,7 +4723,8 @@ alter: ...@@ -4722,7 +4723,8 @@ alter:
lex->key_list.empty(); lex->key_list.empty();
lex->col_list.empty(); lex->col_list.empty();
lex->select_lex.init_order(); 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)); bzero((char*) &lex->create_info,sizeof(lex->create_info));
lex->create_info.db_type= (handlerton*) &default_hton; lex->create_info.db_type= (handlerton*) &default_hton;
lex->create_info.default_table_charset= NULL; lex->create_info.default_table_charset= NULL;
......
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