From: Mattias Jonsson Date: January 10 2011 3:21pm Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3512) Bug#57924 List-Archive: http://lists.mysql.com/commits/128325 X-Bug: 57924 Message-Id: <201101101522.p0AFM6lG016582@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2403766386769542793==" --===============2403766386769542793== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/b57924-51-bt/ based on revid:mats.kindahl@stripped 3512 Mattias Jonsson 2011-01-10 Bug#57924: crash when creating partitioned table with multiple columns in the partition key ndb crash if duplicate columns in the partitioning key. Backport from mysql-5.1-telco-7.0, see bug#53354. Changed from case sensitive field name comparision to non case sensitive too. @ mysql-test/r/partition_error.result updated result @ mysql-test/t/partition_error.test Added test for the error in non-ndb partitioned table. @ sql/sql_partition.cc Added check for duplicated field names in the partitioning key. 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 === modified file 'mysql-test/r/partition_error.result' --- a/mysql-test/r/partition_error.result 2010-09-22 19:33:18 +0000 +++ b/mysql-test/r/partition_error.result 2011-01-10 15:20:28 +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#49161: Out of memory; restart server and try again (needed 2 bytes) # CREATE TABLE t1 (a INT) PARTITION BY HASH (a); === 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-09-22 19:33:18 +0000 +++ b/mysql-test/t/partition_error.test 2011-01-10 15:20:28 +0000 @@ -11,6 +11,20 @@ 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#49161: Out of memory; restart server and try again (needed 2 bytes) --echo # CREATE TABLE t1 (a INT) PARTITION BY HASH (a); === modified file 'sql/sql_partition.cc' --- a/sql/sql_partition.cc 2010-11-10 21:14:47 +0000 +++ b/sql/sql_partition.cc 2011-01-10 15:20:28 +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) { --===============2403766386769542793== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # 9wrfvpgyr6bwqfu1 # target_branch: file:///Users/mattiasj/mysql-bzr/b57924-51-bt/ # testament_sha1: a8c3aa8e1f226e7ed494dec19890678b3a24736f # timestamp: 2011-01-10 16:21:31 +0100 # source_branch: file:///Users/mattiasj/mysql-bzr/mysql-5.1-telco-7.0/ # base_revision_id: mats.kindahl@stripped\ # 7udci9op4lc6jvtb # # Begin bundle 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 --===============2403766386769542793==--