List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:August 6 2009 12:28pm
Subject:bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3057)
Bug#46478
View as plain text  
#At file:///Users/mattiasj/clones/bzrroot/b46478-51-bugteam/ based on revid:dao-gang.qu@stripped

 3057 Mattias Jonsson	2009-08-06
      Bug#46478: timestamp field incorrectly defaulted
      when partition is reoganized.
      
      Problem was that table->timestamp_field_type was not changed
      before copying rows between partitions.
      
      fixed by setting it to TIMESTAMP_NO_AUTO_SET as the first thing
      in fast_alter_partition_table, so that all if-branches is covered.

    modified:
      mysql-test/r/partition.result
      mysql-test/t/partition.test
      sql/sql_partition.cc
=== modified file 'mysql-test/r/partition.result'
--- a/mysql-test/r/partition.result	2009-07-31 23:39:26 +0000
+++ b/mysql-test/r/partition.result	2009-08-06 12:28:39 +0000
@@ -1,4 +1,41 @@
 drop table if exists t1, t2;
+CREATE TABLE t1 (
+a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+b varchar(10),
+PRIMARY KEY (a)
+)
+PARTITION BY RANGE (to_days(a)) (
+PARTITION p1 VALUES LESS THAN (733407),
+PARTITION pmax VALUES LESS THAN MAXVALUE
+);
+INSERT INTO t1 VALUES ('2007-07-30 17:35:48', 'p1');
+INSERT INTO t1 VALUES ('2009-07-14 17:35:55', 'pmax');
+INSERT INTO t1 VALUES ('2009-09-21 17:31:42', 'pmax');
+SELECT * FROM t1;
+a	b
+2007-07-30 17:35:48	p1
+2009-07-14 17:35:55	pmax
+2009-09-21 17:31:42	pmax
+ALTER TABLE t1 REORGANIZE PARTITION pmax INTO (
+PARTITION p3 VALUES LESS THAN (733969),
+PARTITION pmax VALUES LESS THAN MAXVALUE);
+SELECT * FROM t1;
+a	b
+2007-07-30 17:35:48	p1
+2009-07-14 17:35:55	pmax
+2009-09-21 17:31:42	pmax
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `b` varchar(10) DEFAULT NULL,
+  PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50100 PARTITION BY RANGE (to_days(a))
+(PARTITION p1 VALUES LESS THAN (733407) ENGINE = MyISAM,
+ PARTITION p3 VALUES LESS THAN (733969) ENGINE = MyISAM,
+ PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
+DROP TABLE t1;
 CREATE TABLE t1 (a INT, FOREIGN KEY (a) REFERENCES t0 (a))
 ENGINE=MyISAM
 PARTITION BY HASH (a);

=== modified file 'mysql-test/t/partition.test'
--- a/mysql-test/t/partition.test	2009-07-31 23:39:26 +0000
+++ b/mysql-test/t/partition.test	2009-08-06 12:28:39 +0000
@@ -15,6 +15,31 @@ drop table if exists t1, t2;
 --enable_warnings
 
 #
+# Bug#46478: timestamp field incorrectly defaulted when partition is reorganized
+#
+CREATE TABLE t1 (
+  a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  b varchar(10),
+  PRIMARY KEY (a)
+)
+PARTITION BY RANGE (to_days(a)) (
+ PARTITION p1 VALUES LESS THAN (733407),
+ PARTITION pmax VALUES LESS THAN MAXVALUE
+);
+
+INSERT INTO t1 VALUES ('2007-07-30 17:35:48', 'p1');
+INSERT INTO t1 VALUES ('2009-07-14 17:35:55', 'pmax');
+INSERT INTO t1 VALUES ('2009-09-21 17:31:42', 'pmax');
+
+SELECT * FROM t1;
+ALTER TABLE t1 REORGANIZE PARTITION pmax INTO (
+ PARTITION p3 VALUES LESS THAN (733969),
+ PARTITION pmax VALUES LESS THAN MAXVALUE);
+SELECT * FROM t1;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+#
 # Bug#36001: Partitions: spelling and using some error messages
 #
 --error ER_FOREIGN_KEY_ON_PARTITIONED

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2009-07-31 12:38:18 +0000
+++ b/sql/sql_partition.cc	2009-08-06 12:28:39 +0000
@@ -6077,6 +6077,9 @@ uint fast_alter_partition_table(THD *thd
   lpt->pack_frm_len= 0;
   thd->work_part_info= part_info;
 
+  /* Never update timestamp columns when alter */
+  table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+
   if (fast_alter_partition & HA_PARTITION_ONE_PHASE)
   {
     /*


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3057)Bug#46478Mattias Jonsson6 Aug