List:Commits« Previous MessageNext Message »
From:Jim Winstead Date:March 13 2006 1:01pm
Subject:bk commit into 5.1 tree (jimw:1.2167) BUG#17097
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of jimw. When jimw does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2167 06/03/13 05:01:11 jimw@stripped +3 -0
  Bug #17097: Partitions: failing ADD PRIMARY KEY leads to temporary rotten metadata,crash
    When doing an ALTER TABLE on a table using partitioning, force the table
    definition to get reloaded, since it may become invalid whenever the ALTER
    TABLE fails (even for an ALTER TABLE without specific partitioning changes).

  sql/sql_partition.cc
    1.47 06/03/13 04:58:59 jimw@stripped +10 -8
    Always force table to get reloaded when we ALTER a
    partitioned table

  mysql-test/t/partition.test
    1.20 06/03/13 04:58:42 jimw@stripped +11 -0
    New regression test

  mysql-test/r/partition.result
    1.16 06/03/13 04:58:39 jimw@stripped +11 -0
    New results

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jimw
# Host:	rama.(none)
# Root:	/home/jimw/my/mysql-5.1-17097

--- 1.15/mysql-test/r/partition.result	2006-03-07 03:23:15 -08:00
+++ 1.16/mysql-test/r/partition.result	2006-03-13 04:58:39 -08:00
@@ -422,4 +422,15 @@
 x123	11,12	1
 x234	NULL,1	1
 drop table t1;
+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

--- 1.19/mysql-test/t/partition.test	2006-03-07 03:23:15 -08:00
+++ 1.20/mysql-test/t/partition.test	2006-03-13 04:58:42 -08:00
@@ -540,4 +540,15 @@
 from information_schema.partitions where table_schema ='test';
 drop table t1;
 
+#
+# 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

--- 1.46/sql/sql_partition.cc	2006-03-07 03:23:15 -08:00
+++ 1.47/sql/sql_partition.cc	2006-03-13 04:58:59 -08:00
@@ -4060,6 +4060,15 @@
 {
   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 |
@@ -4068,19 +4077,12 @@
        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;
Thread
bk commit into 5.1 tree (jimw:1.2167) BUG#17097Jim Winstead13 Mar