Loading mysql-test/r/partition.result +11 −0 Original line number Diff line number Diff line Loading @@ -453,4 +453,15 @@ s1 drop table t2; create temporary table t1 (a int) partition by hash(a); ERROR HY000: Cannot create temporary table with partitions create table t1 (a int, b int) partition by list (a) (partition p1 values in (1), partition p2 values in (2)); alter table t1 add primary key (b); ERROR HY000: A PRIMARY KEY need to include all fields in the partition function show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` 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) drop table t1; End of 5.1 tests mysql-test/t/partition.test +11 −0 Original line number Diff line number Diff line Loading @@ -577,4 +577,15 @@ drop table t2; --error ER_PARTITION_NO_TEMPORARY create temporary table t1 (a int) partition by hash(a); # # Bug #17097: Partitions: failing ADD PRIMARY KEY leads to temporary rotten # metadata,crash # create table t1 (a int, b int) partition by list (a) (partition p1 values in (1), partition p2 values in (2)); --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF alter table t1 add primary key (b); show create table t1; drop table t1; --echo End of 5.1 tests sql/sql_partition.cc +10 −8 Original line number Diff line number Diff line Loading @@ -4061,6 +4061,15 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, { DBUG_ENTER("prep_alter_part_table"); /* We are going to manipulate the partition info on the table object so we need to ensure that the data structure of the table object is freed by setting version to 0. table->s->version= 0 forces a flush of the table object in close_thread_tables(). */ if (table->part_info) table->s->version= 0L; if (alter_info->flags & (ALTER_ADD_PARTITION | ALTER_DROP_PARTITION | ALTER_COALESCE_PARTITION | ALTER_REORGANIZE_PARTITION | Loading @@ -4069,19 +4078,12 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, ALTER_REPAIR_PARTITION | ALTER_REBUILD_PARTITION)) { partition_info *tab_part_info= table->part_info; uint flags= 0; if (!tab_part_info) { my_error(ER_PARTITION_MGMT_ON_NONPARTITIONED, MYF(0)); DBUG_RETURN(TRUE); } /* We are going to manipulate the partition info on the table object so we need to ensure that the data structure of the table object is freed by setting version to 0. table->s->version= 0 forces a flush of the table object in close_thread_tables(). */ uint flags= 0; table->s->version= 0L; if (alter_info->flags == ALTER_TABLE_REORG) { uint new_part_no, curr_part_no; Loading Loading
mysql-test/r/partition.result +11 −0 Original line number Diff line number Diff line Loading @@ -453,4 +453,15 @@ s1 drop table t2; create temporary table t1 (a int) partition by hash(a); ERROR HY000: Cannot create temporary table with partitions create table t1 (a int, b int) partition by list (a) (partition p1 values in (1), partition p2 values in (2)); alter table t1 add primary key (b); ERROR HY000: A PRIMARY KEY need to include all fields in the partition function show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` 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) drop table t1; End of 5.1 tests
mysql-test/t/partition.test +11 −0 Original line number Diff line number Diff line Loading @@ -577,4 +577,15 @@ drop table t2; --error ER_PARTITION_NO_TEMPORARY create temporary table t1 (a int) partition by hash(a); # # Bug #17097: Partitions: failing ADD PRIMARY KEY leads to temporary rotten # metadata,crash # create table t1 (a int, b int) partition by list (a) (partition p1 values in (1), partition p2 values in (2)); --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF alter table t1 add primary key (b); show create table t1; drop table t1; --echo End of 5.1 tests
sql/sql_partition.cc +10 −8 Original line number Diff line number Diff line Loading @@ -4061,6 +4061,15 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, { DBUG_ENTER("prep_alter_part_table"); /* We are going to manipulate the partition info on the table object so we need to ensure that the data structure of the table object is freed by setting version to 0. table->s->version= 0 forces a flush of the table object in close_thread_tables(). */ if (table->part_info) table->s->version= 0L; if (alter_info->flags & (ALTER_ADD_PARTITION | ALTER_DROP_PARTITION | ALTER_COALESCE_PARTITION | ALTER_REORGANIZE_PARTITION | Loading @@ -4069,19 +4078,12 @@ uint prep_alter_part_table(THD *thd, TABLE *table, ALTER_INFO *alter_info, ALTER_REPAIR_PARTITION | ALTER_REBUILD_PARTITION)) { partition_info *tab_part_info= table->part_info; uint flags= 0; if (!tab_part_info) { my_error(ER_PARTITION_MGMT_ON_NONPARTITIONED, MYF(0)); DBUG_RETURN(TRUE); } /* We are going to manipulate the partition info on the table object so we need to ensure that the data structure of the table object is freed by setting version to 0. table->s->version= 0 forces a flush of the table object in close_thread_tables(). */ uint flags= 0; table->s->version= 0L; if (alter_info->flags == ALTER_TABLE_REORG) { uint new_part_no, curr_part_no; Loading