diff --git a/mysql-test/r/ndb_partition_key.result b/mysql-test/r/ndb_partition_key.result index e3522106f98..9cc7147bd77 100644 --- a/mysql-test/r/ndb_partition_key.result +++ b/mysql-test/r/ndb_partition_key.result @@ -68,4 +68,13 @@ PRIMARY KEY(a, b, c) - UniqueHashIndex NDBT_ProgramExit: 0 - OK +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL default '0', + `b` char(10) character set latin1 collate latin1_bin NOT NULL default '', + `c` int(11) NOT NULL default '0', + `d` int(11) default NULL, + PRIMARY KEY USING HASH (`a`,`b`,`c`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY (b) DROP TABLE t1; diff --git a/mysql-test/r/ndb_partition_range.result b/mysql-test/r/ndb_partition_range.result index 63bd89e1d1c..e66152851c0 100644 --- a/mysql-test/r/ndb_partition_range.result +++ b/mysql-test/r/ndb_partition_range.result @@ -102,4 +102,13 @@ a b c 1 1 1 DELETE from t1 WHERE b = 6; DELETE from t1 WHERE a = 6; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `b` int(11) NOT NULL, + `c` int(11) NOT NULL, + PRIMARY KEY (`b`), + UNIQUE KEY `a` (`a`) +) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (b) (PARTITION x1 VALUES LESS THAN (5) ENGINE = NDBCLUSTER, PARTITION x2 VALUES LESS THAN (10) ENGINE = NDBCLUSTER, PARTITION x3 VALUES LESS THAN (20) ENGINE = NDBCLUSTER) drop table t1; diff --git a/mysql-test/t/ndb_partition_key.test b/mysql-test/t/ndb_partition_key.test index a0a4f079d6f..76c36924618 100644 --- a/mysql-test/t/ndb_partition_key.test +++ b/mysql-test/t/ndb_partition_key.test @@ -55,4 +55,11 @@ insert into t1 values (1,"a",1,1),(2,"a",1,1),(3,"a",1,1); # should show only one attribute with DISTRIBUTION KEY --exec $NDB_TOOLS_DIR/ndb_desc --no-defaults -d test t1 | sed 's/Version: [0-9]*//' | sed 's/\(Length of frm data: \)[0-9]*/\1#/' +# +# Test that explicit partition info is not shown in show create table +# result should not contain (PARTITION P0 ... etc) since this is what shows up in +# mysqldump, and we don't want that info there +# +show create table t1; + DROP TABLE t1; diff --git a/mysql-test/t/ndb_partition_range.test b/mysql-test/t/ndb_partition_range.test index 35d2d33a722..fb62fac044f 100644 --- a/mysql-test/t/ndb_partition_range.test +++ b/mysql-test/t/ndb_partition_range.test @@ -82,5 +82,11 @@ select * from t1 where a=1 and b in (1,6,10,21) order by b; DELETE from t1 WHERE b = 6; DELETE from t1 WHERE a = 6; +# +# Test that explicit partition info _is_ shown in show create table +# result _should_ contain (PARTITION x1 ... etc) +# +show create table t1; + drop table t1; diff --git a/sql/handler.h b/sql/handler.h index 53b53d08f26..86d96ede4dd 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -675,7 +675,8 @@ bool check_partition_info(partition_info *part_info,enum db_type eng_type, handler *file, ulonglong max_rows); bool fix_partition_func(THD *thd, const char *name, TABLE *table); char *generate_partition_syntax(partition_info *part_info, - uint *buf_length, bool use_sql_alloc); + uint *buf_length, bool use_sql_alloc, + bool add_default_info); bool partition_key_modified(TABLE *table, List &fields); void get_partition_set(const TABLE *table, byte *buf, const uint index, const key_range *key_spec, diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 1f24806dc5e..b2efada1a49 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -1961,6 +1961,7 @@ static int add_partition_values(File fptr, partition_info *part_info, buf_length A pointer to the returned buffer length use_sql_alloc Allocate buffer from sql_alloc if true otherwise use my_malloc + add_default_info Add info generated by default RETURN VALUES NULL error buf, buf_length Buffer and its length @@ -1986,7 +1987,8 @@ static int add_partition_values(File fptr, partition_info *part_info, char *generate_partition_syntax(partition_info *part_info, uint *buf_length, - bool use_sql_alloc) + bool use_sql_alloc, + bool add_default_info) { uint i,j, no_parts, no_subparts; partition_element *part_elem; @@ -2013,9 +2015,11 @@ char *generate_partition_syntax(partition_info *part_info, switch (part_info->part_type) { case RANGE_PARTITION: + add_default_info= TRUE; err+= add_part_key_word(fptr, range_str); break; case LIST_PARTITION: + add_default_info= TRUE; err+= add_part_key_word(fptr, list_str); break; case HASH_PARTITION: @@ -2051,6 +2055,8 @@ char *generate_partition_syntax(partition_info *part_info, err+= add_end_parenthesis(fptr); err+= add_space(fptr); } + if (add_default_info) + { err+= add_begin_parenthesis(fptr); List_iterator part_it(part_info->partitions); no_parts= part_info->no_parts; @@ -2095,6 +2101,7 @@ char *generate_partition_syntax(partition_info *part_info, else err+= add_end_parenthesis(fptr); } while (++i < no_parts); + } if (err) goto close_file; buffer_length= my_seek(fptr, 0L,MY_SEEK_END,MYF(0)); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8399f2135fa..f5c82fe00e1 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -961,7 +961,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet) packet->append("\n)", 2); if (!(thd->variables.sql_mode & MODE_NO_TABLE_OPTIONS) && !foreign_db_mode) { -#ifdef HAVE_PARTITION_DB +#if 0 //def HAVE_PARTITION_DB if (!table->s->part_info) #endif { @@ -1047,7 +1047,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet) if (table->s->part_info && ((part_syntax= generate_partition_syntax(table->s->part_info, &part_syntax_len, - FALSE)))) + FALSE,FALSE)))) { packet->append(part_syntax, part_syntax_len); my_free(part_syntax, MYF(0)); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 50b00fe2716..bd0683ff5af 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1629,7 +1629,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, */ if (!(part_syntax_buf= generate_partition_syntax(part_info, &syntax_len, - TRUE))) + TRUE,TRUE))) DBUG_RETURN(TRUE); part_info->part_info_string= part_syntax_buf; part_info->part_info_len= syntax_len; @@ -4274,7 +4274,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, /*select_field_count*/ 0); if (!(part_syntax_buf= generate_partition_syntax(part_info, &syntax_len, - TRUE))) + TRUE,TRUE))) { DBUG_RETURN(TRUE); } @@ -4310,7 +4310,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } if (!(part_syntax_buf= generate_partition_syntax(part_info, &syntax_len, - TRUE))) + TRUE,TRUE))) { DBUG_RETURN(TRUE); }