diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 970e5234ca860c762392154f15971e7786c32739..2e293df50e2e21ab7234a5aa5de6a097d81ef953 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -718,6 +718,16 @@ CALL test.p1(13); Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back drop table t1; +CREATE TABLE t1 (a int not null) +partition by key(a) +(partition p0 COMMENT='first partition'); +drop table t1; +CREATE TABLE t1 (`a b` int not null) +partition by key(`a b`); +drop table t1; +CREATE TABLE t1 (`a b` int not null) +partition by hash(`a b`); +drop table t1; create table t1 (f1 integer) partition by range(f1) (partition p1 values less than (0), partition p2 values less than (10)); insert into t1 set f1 = null; diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index b3a6319643d3f37659ac5a6c1bea42458ab5b6ee..a3aa3f6f02542e016f6b7b25372922c45f9e1567 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -849,6 +849,25 @@ CALL test.p1(12); CALL test.p1(13); drop table t1; +# +# Bug 13520: Problem with delimiters in COMMENT DATA DIRECTORY .. +# +CREATE TABLE t1 (a int not null) +partition by key(a) +(partition p0 COMMENT='first partition'); +drop table t1; + +# +# Bug 13433: Problem with delimited identifiers +# +CREATE TABLE t1 (`a b` int not null) +partition by key(`a b`); +drop table t1; + +CREATE TABLE t1 (`a b` int not null) +partition by hash(`a b`); +drop table t1; + # # Bug#18053 Partitions: crash if null # Bug#18070 Partitions: wrong result on WHERE ... IS NULL diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 1186afc425d26a2127416c2ad4c2dd32363a7f5e..c13c8c9010375762ea0809d35ba58d49209d72e2 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -1508,6 +1508,11 @@ static int add_write(File fptr, const char *buf, uint len) return 1; } +static int add_string_object(File fptr, String *string) +{ + return add_write(fptr, string->ptr(), string->length()); +} + static int add_string(File fptr, const char *string) { return add_write(fptr, string, strlen(string)); @@ -1594,7 +1599,14 @@ static int add_key_partition(File fptr, List<char> field_list) while (i < no_fields) { const char *field_str= part_it++; - err+= add_string(fptr, field_str); + String field_string("", 0, system_charset_info); + THD *thd= current_thd; + ulonglong save_options= thd->options; + thd->options= 0; + append_identifier(thd, &field_string, field_str, + strlen(field_str)); + thd->options= save_options; + err+= add_string_object(fptr, &field_string); if (i != (no_fields-1)) err+= add_comma(fptr); i++; @@ -1664,7 +1676,7 @@ static int add_partition_options(File fptr, partition_element *p_elem) err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE, p_elem->index_file_name); if (p_elem->part_comment) - err+= add_keyword_string(fptr, "COMMENT", FALSE, p_elem->part_comment); + err+= add_keyword_string(fptr, "COMMENT", TRUE, p_elem->part_comment); return err + add_engine(fptr,p_elem->engine_type); }