List:Commits« Previous MessageNext Message »
From:Mikael Ronstrom Date:December 17 2009 5:39pm
Subject:bzr commit into mysql-5.5-trunk-bugfixing branch (mikael:2923) Bug#49591
View as plain text  
#At file:///home/mikael/mysql_clones/mysql-trunk-bugfixing-bug49591/ based on revid:jperkin@stripped-r2v48umkl77ky05f

 2923 Mikael Ronstrom	2009-12-17
      BUG#49591, Fixed version string in SHOW CREATE TABLE to accomodate for column list partitioning and new function to_seconds

    modified:
      mysql-test/r/partition_column.result
      mysql-test/r/partition_range.result
      mysql-test/r/partition_utf8.result
      mysql-test/t/partition_range.test
      sql/item.h
      sql/item_timefunc.h
      sql/partition_info.cc
      sql/partition_info.h
      sql/sql_show.cc
=== modified file 'mysql-test/r/partition_column.result'
--- a/mysql-test/r/partition_column.result	2009-12-02 07:14:22 +0000
+++ b/mysql-test/r/partition_column.result	2009-12-17 17:39:10 +0000
@@ -69,7 +69,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` varchar(5) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN ('''') ENGINE = MyISAM,
  PARTITION p1 VALUES IN ('\\') ENGINE = MyISAM,
  PARTITION p2 VALUES IN ('\0') ENGINE = MyISAM) */
@@ -128,7 +128,7 @@ t1	CREATE TABLE `t1` (
   `c` varchar(25) DEFAULT NULL,
   `d` datetime DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY RANGE  COLUMNS(a,b,c,d)
+/*!50500 PARTITION BY RANGE  COLUMNS(a,b,c,d)
 SUBPARTITION BY HASH (to_seconds(d))
 SUBPARTITIONS 4
 (PARTITION p0 VALUES LESS THAN (1,'0',MAXVALUE,'1900-01-01') ENGINE = MyISAM,
@@ -211,7 +211,7 @@ t1	CREATE TABLE `t1` (
   `a` int(11) DEFAULT NULL,
   `b` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a,b)
+/*!50500 PARTITION BY LIST  COLUMNS(a,b)
 (PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
  PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
  PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
@@ -245,7 +245,7 @@ t1	CREATE TABLE `t1` (
   `a` int(11) DEFAULT NULL,
   `b` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a,b)
+/*!50500 PARTITION BY LIST  COLUMNS(a,b)
 (PARTITION p0 VALUES IN ((1,NULL),(2,NULL),(NULL,NULL)) ENGINE = MyISAM,
  PARTITION p1 VALUES IN ((1,1),(2,2)) ENGINE = MyISAM,
  PARTITION p2 VALUES IN ((3,NULL),(NULL,1)) ENGINE = MyISAM) */
@@ -299,7 +299,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
  PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
 insert into t1 values (1);
@@ -314,7 +314,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN (2,1) ENGINE = MyISAM,
  PARTITION p1 VALUES IN (4,NULL,3) ENGINE = MyISAM) */
 drop table t1;
@@ -349,7 +349,7 @@ t1	CREATE TABLE `t1` (
   `c` varchar(5) DEFAULT NULL,
   `d` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY RANGE  COLUMNS(a,b,c)
+/*!50500 PARTITION BY RANGE  COLUMNS(a,b,c)
 SUBPARTITION BY KEY (c,d)
 SUBPARTITIONS 3
 (PARTITION p0 VALUES LESS THAN (1,'abc','abc') ENGINE = MyISAM,
@@ -382,7 +382,7 @@ t1	CREATE TABLE `t1` (
   `b` varchar(2) DEFAULT NULL,
   `c` int(11) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY RANGE  COLUMNS(a,b,c)
+/*!50500 PARTITION BY RANGE  COLUMNS(a,b,c)
 (PARTITION p0 VALUES LESS THAN (1,'A',1) ENGINE = MyISAM,
  PARTITION p1 VALUES LESS THAN (1,'B',1) ENGINE = MyISAM) */
 insert into t1 values (1, 'A', 1);

=== modified file 'mysql-test/r/partition_range.result'
--- a/mysql-test/r/partition_range.result	2009-10-29 17:04:23 +0000
+++ b/mysql-test/r/partition_range.result	2009-12-17 17:39:10 +0000
@@ -1,6 +1,19 @@
 drop table if exists t1, t2;
 create table t1 (a int)
 partition by range (a)
+subpartition by hash(to_seconds(a))
+(partition p0 values less than (1));
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50500 PARTITION BY RANGE (a)
+SUBPARTITION BY HASH (to_seconds(a))
+(PARTITION p0 VALUES LESS THAN (1) ENGINE = MyISAM) */
+drop table t1;
+create table t1 (a int)
+partition by range (a)
 ( partition p0 values less than (NULL),
 partition p1 values less than (MAXVALUE));
 ERROR HY000: Not allowed to use NULL value in VALUES LESS THAN
@@ -30,6 +43,14 @@ id	select_type	table	partitions	type	pos
 explain partitions select * from t1 where a < '2007-03-07 23:59:59';
 id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	p0	ALL	NULL	NULL	NULL	NULL	4	Using where
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` datetime NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50500 PARTITION BY RANGE (TO_SECONDS(a))
+(PARTITION p0 VALUES LESS THAN (63340531200) ENGINE = MyISAM,
+ PARTITION p1 VALUES LESS THAN (63342604800) ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a date)
 partition by range(to_seconds(a))
@@ -53,6 +74,14 @@ select * from t1 where a <= '2005-01-01'
 a
 2003-12-30
 2004-12-31
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` date DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50500 PARTITION BY RANGE (to_seconds(a))
+(PARTITION p0 VALUES LESS THAN (63240134400) ENGINE = MyISAM,
+ PARTITION p1 VALUES LESS THAN (63271756800) ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a datetime)
 partition by range(to_seconds(a))
@@ -75,6 +104,14 @@ id	select_type	table	partitions	type	pos
 select * from t1 where a <= '2005-01-01';
 a
 2004-01-01 11:59:29
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` datetime DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50500 PARTITION BY RANGE (to_seconds(a))
+(PARTITION p0 VALUES LESS THAN (63240177600) ENGINE = MyISAM,
+ PARTITION p1 VALUES LESS THAN (63271800000) ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a int, b char(20))
 partition by range columns(a,b)

=== modified file 'mysql-test/r/partition_utf8.result'
--- a/mysql-test/r/partition_utf8.result	2009-11-02 13:49:26 +0000
+++ b/mysql-test/r/partition_utf8.result	2009-12-17 17:39:10 +0000
@@ -7,7 +7,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN (_cp1250 0x81) ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a varchar(2) character set cp1250)
@@ -18,7 +18,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` varchar(2) CHARACTER SET cp1250 DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN ('€') ENGINE = MyISAM) */
 drop table t1;
 create table t1 (a varchar(1500), b varchar(1570))
@@ -45,7 +45,7 @@ Table	Create Table
 t1	CREATE TABLE `t1` (
   `a` varchar(2) CHARACTER SET ucs2 DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
-/*!50100 PARTITION BY LIST  COLUMNS(a)
+/*!50500 PARTITION BY LIST  COLUMNS(a)
 (PARTITION p0 VALUES IN ('†') ENGINE = MyISAM,
  PARTITION p1 VALUES IN ('') ENGINE = MyISAM) */
 insert into t1 values ('');

=== modified file 'mysql-test/t/partition_range.test'
--- a/mysql-test/t/partition_range.test	2009-10-29 17:04:23 +0000
+++ b/mysql-test/t/partition_range.test	2009-12-17 17:39:10 +0000
@@ -9,6 +9,16 @@
 drop table if exists t1, t2;
 --enable_warnings
 
+#
+#BUG#49591, Add proper version number to SHOW CREATE TABLE
+#
+create table t1 (a int)
+partition by range (a)
+subpartition by hash(to_seconds(a))
+(partition p0 values less than (1));
+show create table t1;
+drop table t1;
+
 --error ER_NULL_IN_VALUES_LESS_THAN
 create table t1 (a int)
 partition by range (a)
@@ -30,6 +40,7 @@ explain partitions select * from t1 wher
 explain partitions select * from t1 where a <= '2007-03-08 00:00:00';
 explain partitions select * from t1 where a <= '2007-03-07 23:59:59';
 explain partitions select * from t1 where a < '2007-03-07 23:59:59';
+show create table t1;
 drop table t1;
 #
 # New test cases for new function to_seconds
@@ -44,6 +55,7 @@ explain partitions select * from t1 wher
 select * from t1 where a <= '2003-12-31';
 explain partitions select * from t1 where a <= '2005-01-01';
 select * from t1 where a <= '2005-01-01';
+show create table t1;
 drop table t1;
 
 create table t1 (a datetime)
@@ -56,6 +68,7 @@ explain partitions select * from t1 wher
 select * from t1 where a <= '2004-01-01 11:59:59';
 explain partitions select * from t1 where a <= '2005-01-01';
 select * from t1 where a <= '2005-01-01';
+show create table t1;
 drop table t1;
 
 #

=== modified file 'sql/item.h'
--- a/sql/item.h	2009-12-11 09:39:38 +0000
+++ b/sql/item.h	2009-12-17 17:39:10 +0000
@@ -894,6 +894,15 @@ public:
      (*traverser)(this, arg);
    }
 
+  /*
+    This is used to get the most recent version of any function in
+    an item tree. The version is the version where a MySQL function
+    was introduced in. So any function which is added should use
+    this function and set the int_arg to maximum of the input data
+    and their own version info.
+  */
+  virtual bool intro_version(uchar *int_arg) { return 0; }
+
   virtual bool remove_dependence_processor(uchar * arg) { return 0; }
   virtual bool remove_fixed(uchar * arg) { fixed= 0; return 0; }
   virtual bool cleanup_processor(uchar *arg);

=== modified file 'sql/item_timefunc.h'
--- a/sql/item_timefunc.h	2009-11-02 10:09:15 +0000
+++ b/sql/item_timefunc.h	2009-12-17 17:39:10 +0000
@@ -91,6 +91,15 @@ public:
   enum_monotonicity_info get_monotonicity_info() const;
   longlong val_int_endpoint(bool left_endp, bool *incl_endp);
   bool check_partition_func_processor(uchar *bool_arg) { return FALSE;}
+
+  bool intro_version(uchar *int_arg)
+  {
+    int *input_version= (int*)int_arg;
+    /* This function was introduced in 5.5 */
+    int output_version= (*input_version, 50500);
+    *input_version= output_version;
+    return 0;
+  }
 };
 
 

=== modified file 'sql/partition_info.cc'
--- a/sql/partition_info.cc	2009-12-02 07:14:22 +0000
+++ b/sql/partition_info.cc	2009-12-17 17:39:10 +0000
@@ -116,6 +116,42 @@ char *partition_info::create_default_par
 
 
 /*
+  Generate a version string for partition expression
+  This function must be updated every time there is a possibility for
+  a new function of a higher version number than 5.5.0.
+
+  SYNOPSIS
+    set_show_version_string()
+  RETURN VALUES
+    None
+*/
+void partition_info::set_show_version_string(String *packet)
+{
+  int version= 0;
+  if (column_list)
+    packet->append(STRING_WITH_LEN("\n/*!50500"));
+  else
+  {
+    if (part_expr)
+      part_expr->walk(&Item::intro_version, 0, (uchar*)&version);
+    if (subpart_expr)
+      subpart_expr->walk(&Item::intro_version, 0, (uchar*)&version);
+    if (version == 0)
+    {
+      /* No new functions in partition function */
+      packet->append(STRING_WITH_LEN("\n/*!50100"));
+    }
+    else
+    {
+      char buf[65];
+      char *buf_ptr= longlong10_to_str((longlong)version, buf, 10);
+      packet->append(STRING_WITH_LEN("\n/*!"));
+      packet->append(buf, (size_t)(buf_ptr - buf));
+    }
+  }
+}
+
+/*
   Create a unique name for the subpartition as part_name'sp''subpart_no'
   SYNOPSIS
     create_subpartition_name()

=== modified file 'sql/partition_info.h'
--- a/sql/partition_info.h	2009-10-28 17:22:36 +0000
+++ b/sql/partition_info.h	2009-12-17 17:39:10 +0000
@@ -302,6 +302,7 @@ public:
   bool check_partition_field_length();
   bool init_column_part();
   bool add_column_list_value(THD *thd, Item *item);
+  void set_show_version_string(String *packet);
 private:
   static int list_part_cmp(const void* a, const void* b);
   bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info,

=== modified file 'sql/sql_show.cc'
--- a/sql/sql_show.cc	2009-11-10 09:32:29 +0000
+++ b/sql/sql_show.cc	2009-12-17 17:39:10 +0000
@@ -1497,7 +1497,7 @@ int store_create_info(THD *thd, TABLE_LI
                                                   show_table_options,
                                                   NULL, NULL))))
     {
-       packet->append(STRING_WITH_LEN("\n/*!50100"));
+       table->part_info->set_show_version_string(packet);
        packet->append(part_syntax, part_syntax_len);
        packet->append(STRING_WITH_LEN(" */"));
        my_free(part_syntax, MYF(0));

Attachment: [text/bzr-bundle] bzr/mikael@mysql.com-20091217173910-ecubxjy07if7gc05.bundle
Thread
bzr commit into mysql-5.5-trunk-bugfixing branch (mikael:2923) Bug#49591Mikael Ronstrom17 Dec