Bug #13179 partition info in mysqldump makes it hard to use dump in different sized cluster

parent cde15356
......@@ -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;
......@@ -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;
......@@ -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;
......@@ -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;
......@@ -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<Item> &fields);
void get_partition_set(const TABLE *table, byte *buf, const uint index,
const key_range *key_spec,
......
......@@ -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<partition_element> 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));
......
......@@ -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));
......
......@@ -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);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment