Commit 10b96ec4 authored by jimw@mysql.com's avatar jimw@mysql.com

Merge mysql.com:/home/jimw/my/mysql-5.1-17169

into  mysql.com:/home/jimw/my/mysql-5.1-clean
parents b2a13dd7 d30dbf6e
...@@ -312,4 +312,7 @@ partition by hash(f_int1) partitions 2; ...@@ -312,4 +312,7 @@ partition by hash(f_int1) partitions 2;
insert into t1 values (1,1),(2,2); insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2); replace into t1 values (1,1),(2,2);
drop table t1; drop table t1;
create table t1 (s1 int, unique (s1)) partition by list (s1) (partition x1 VALUES in (10), partition x2 values in (20));
alter table t1 add partition (partition x3 values in (30));
drop table t1;
End of 5.1 tests End of 5.1 tests
...@@ -401,4 +401,11 @@ insert into t1 values (1,1),(2,2); ...@@ -401,4 +401,11 @@ insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2); replace into t1 values (1,1),(2,2);
drop table t1; drop table t1;
#
# Bug #17169: Partitions: out of memory if add partition and unique
#
create table t1 (s1 int, unique (s1)) partition by list (s1) (partition x1 VALUES in (10), partition x2 values in (20));
alter table t1 add partition (partition x3 values in (30));
drop table t1;
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -50,11 +50,6 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -50,11 +50,6 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
handler *file, KEY **key_info_buffer, handler *file, KEY **key_info_buffer,
uint *key_count, int select_field_count); uint *key_count, int select_field_count);
static int mysql_copy_create_lists(List<create_field> *orig_create_list,
List<Key> *orig_key,
List<create_field> *new_create_list,
List<Key> *new_key);
#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#" #define MYSQL50_TABLE_NAME_PREFIX "#mysql50#"
#define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9 #define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9
...@@ -164,8 +159,7 @@ uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen) ...@@ -164,8 +159,7 @@ uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen)
*/ */
static int mysql_copy_create_list(List<create_field> *orig_create_list, static int mysql_copy_create_list(List<create_field> *orig_create_list,
List<create_field> *new_create_list)
List<create_field> *new_create_list)
{ {
List_iterator<create_field> prep_field_it(*orig_create_list); List_iterator<create_field> prep_field_it(*orig_create_list);
create_field *prep_field; create_field *prep_field;
...@@ -205,7 +199,7 @@ static int mysql_copy_key_list(List<Key> *orig_key, ...@@ -205,7 +199,7 @@ static int mysql_copy_key_list(List<Key> *orig_key,
{ {
List_iterator<Key> prep_key_it(*orig_key); List_iterator<Key> prep_key_it(*orig_key);
Key *prep_key; Key *prep_key;
DBUG_ENTER("mysql_copy_create_lists"); DBUG_ENTER("mysql_copy_key_list");
while ((prep_key= prep_key_it++)) while ((prep_key= prep_key_it++))
{ {
...@@ -217,7 +211,8 @@ static int mysql_copy_key_list(List<Key> *orig_key, ...@@ -217,7 +211,8 @@ static int mysql_copy_key_list(List<Key> *orig_key,
while ((prep_col= prep_col_it++)) while ((prep_col= prep_col_it++))
{ {
key_part_spec *prep_key_part; key_part_spec *prep_key_part;
if (prep_key_part= new key_part_spec(*prep_col))
if (!(prep_key_part= new key_part_spec(*prep_col)))
{ {
mem_alloc_error(sizeof(key_part_spec)); mem_alloc_error(sizeof(key_part_spec));
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
...@@ -228,11 +223,11 @@ static int mysql_copy_key_list(List<Key> *orig_key, ...@@ -228,11 +223,11 @@ static int mysql_copy_key_list(List<Key> *orig_key,
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
} }
if ((temp_key= new Key(prep_key->type, prep_key->name, if (!(temp_key= new Key(prep_key->type, prep_key->name,
prep_key->algorithm, prep_key->algorithm,
prep_key->generated, prep_key->generated,
prep_columns, prep_columns,
prep_key->parser_name))) prep_key->parser_name)))
{ {
mem_alloc_error(sizeof(Key)); mem_alloc_error(sizeof(Key));
DBUG_RETURN(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