List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:January 26 2011 8:15pm
Subject:bzr push into mysql-5.1 branch (mattias.jonsson:3568 to 3570)
View as plain text  
 3570 Mattias Jonsson	2011-01-26 [merge]
      merge

    modified:
      mysql-test/r/partition_error.result
      mysql-test/suite/ndb/r/ndb_basic.result
      mysql-test/suite/ndb/t/ndb_basic.test
      mysql-test/t/partition_error.test
      sql/sql_partition.cc
 3569 Mattias Jonsson	2011-01-26 [merge]
      merge

    modified:
      client/mysqltest.cc
 3568 Ramil Kalimullin	2011-01-26 [merge]
      Auto-merge

    modified:
      mysql-test/suite/rpl/t/disabled.def
=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc	2011-01-18 10:03:44 +0000
+++ b/client/mysqltest.cc	2011-01-26 15:34:34 +0000
@@ -7255,8 +7255,12 @@ void run_query_stmt(MYSQL *mysql, struct
 
       mysql_free_result(res);     /* Free normal result set with meta data */
 
-      /* Clear prepare warnings */
-      dynstr_set(&ds_prepare_warnings, NULL);
+      /*
+        Clear prepare warnings if there are execute warnings,
+        since they are probably duplicated.
+      */
+      if (ds_execute_warnings.length || mysql->warning_count)
+        dynstr_set(&ds_prepare_warnings, NULL);
     }
     else
     {

=== modified file 'mysql-test/r/partition_error.result'
--- a/mysql-test/r/partition_error.result	2010-12-22 09:50:36 +0000
+++ b/mysql-test/r/partition_error.result	2011-01-26 15:50:21 +0000
@@ -1,5 +1,18 @@
 drop table if exists t1;
 #
+# Bug#57924: crash when creating partitioned table with
+#            multiple columns in the partition key
+#
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(a, b, a);
+ERROR HY000: Field in list of fields for partition function not found in table
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(A, b);
+DROP TABLE t1;
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(a, b, A);
+ERROR HY000: Field in list of fields for partition function not found in table
+#
 # Bug#54483: valgrind errors when making warnings for multiline inserts
 #            into partition
 #

=== modified file 'mysql-test/suite/ndb/r/ndb_basic.result'
--- a/mysql-test/suite/ndb/r/ndb_basic.result	2007-10-26 07:06:18 +0000
+++ b/mysql-test/suite/ndb/r/ndb_basic.result	2011-01-10 15:20:28 +0000
@@ -585,6 +585,8 @@ c127 int,
 c128 int,
 primary key using hash(c1)) engine=ndb partition by key(c1);
 drop table t1;
+create table `t1` (`a` int, b int, primary key (a,b)) engine=ndb partition by key(`a`,`b`,`a`);
+ERROR HY000: Field in list of fields for partition function not found in table
 create table t1 (
 a1234567890123456789012345678901234567890 int primary key,
 a12345678901234567890123456789a1234567890 int,

=== modified file 'mysql-test/suite/ndb/t/ndb_basic.test'
--- a/mysql-test/suite/ndb/t/ndb_basic.test	2007-10-26 06:57:10 +0000
+++ b/mysql-test/suite/ndb/t/ndb_basic.test	2011-01-10 15:20:28 +0000
@@ -548,6 +548,13 @@ primary key using hash(c1)) engine=ndb p
 drop table t1;
 
 #
+# test bug#53354 - crash when creating partitioned table with multiple columns in the partition key
+#
+
+--error ER_FIELD_NOT_FOUND_PART_ERROR
+create table `t1` (`a` int, b int, primary key (a,b)) engine=ndb partition by key(`a`,`b`,`a`);
+
+#
 # test max size of attribute name and truncation
 #
 

=== modified file 'mysql-test/t/partition_error.test'
--- a/mysql-test/t/partition_error.test	2010-12-22 09:50:36 +0000
+++ b/mysql-test/t/partition_error.test	2011-01-26 15:50:21 +0000
@@ -11,6 +11,21 @@ drop table if exists t1;
 let $MYSQLD_DATADIR= `SELECT @@datadir`;
 
 --echo #
+--echo # Bug#57924: crash when creating partitioned table with
+--echo #            multiple columns in the partition key
+--echo #
+--error ER_FIELD_NOT_FOUND_PART_ERROR
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(a, b, a);
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(A, b);
+DROP TABLE t1;
+--error ER_FIELD_NOT_FOUND_PART_ERROR
+CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
+PARTITION BY KEY(a, b, A);
+
+
+--echo #
 --echo # Bug#54483: valgrind errors when making warnings for multiline inserts
 --echo #            into partition
 --echo #
@@ -673,7 +688,6 @@ PARTITION BY HASH (TIME_TO_SEC(a));
 CREATE TABLE t1 (a INT)
 PARTITION BY HASH (TIME_TO_SEC(a));
 
-
 --echo #
 --echo # Bug#49161: Out of memory; restart server and try again (needed 2 bytes)
 --echo #

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2010-12-22 14:45:17 +0000
+++ b/sql/sql_partition.cc	2011-01-26 15:50:21 +0000
@@ -761,6 +761,9 @@ static bool handle_list_of_fields(List_i
   bool result;
   char *field_name;
   bool is_list_empty= TRUE;
+  int fields_handled = 0;
+  char* field_name_array[MAX_KEY];
+
   DBUG_ENTER("handle_list_of_fields");
 
   while ((field_name= it++))
@@ -776,6 +779,25 @@ static bool handle_list_of_fields(List_i
       result= TRUE;
       goto end;
     }
+
+    /*
+      Check for duplicate fields in the list.
+      Assuming that there are not many fields in the partition key list.
+      If there were, it would be better to replace the for-loop
+      with a more efficient algorithm.
+    */
+
+    field_name_array[fields_handled] = field_name;
+    for (int i = 0; i < fields_handled; ++i)
+    {
+      if (my_strcasecmp(system_charset_info,
+                        field_name_array[i], field_name) == 0)
+      {
+        my_error(ER_FIELD_NOT_FOUND_PART_ERROR, MYF(0));
+        DBUG_RETURN(TRUE);
+      }
+    }
+    fields_handled++;
   }
   if (is_list_empty)
   {

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1 branch (mattias.jonsson:3568 to 3570) Mattias Jonsson26 Jan