Commit 46c69084 authored by unknown's avatar unknown
Browse files

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

into  mysql.com:/home/jimw/my/mysql-5.1-clean


sql/sql_table.cc:
  Auto merged
parents 96daffbb 0deff29c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -312,4 +312,7 @@ partition by hash(f_int1) partitions 2;
insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2);
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
+7 −0
Original line number Diff line number Diff line
@@ -401,4 +401,11 @@ insert into t1 values (1,1),(2,2);
replace into t1 values (1,1),(2,2);
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
+9 −14
Original line number Diff line number Diff line
@@ -50,11 +50,6 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
                               handler *file, KEY **key_info_buffer,
                               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_LENGTH  9

@@ -164,7 +159,6 @@ uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen)
*/

static int mysql_copy_create_list(List<create_field> *orig_create_list,

                                  List<create_field> *new_create_list)
{
  List_iterator<create_field> prep_field_it(*orig_create_list);
@@ -205,7 +199,7 @@ static int mysql_copy_key_list(List<Key> *orig_key,
{
  List_iterator<Key> prep_key_it(*orig_key);
  Key *prep_key;
  DBUG_ENTER("mysql_copy_create_lists");
  DBUG_ENTER("mysql_copy_key_list");

  while ((prep_key= prep_key_it++))
  {
@@ -217,7 +211,8 @@ static int mysql_copy_key_list(List<Key> *orig_key,
    while ((prep_col= prep_col_it++))
    {
      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));
        DBUG_RETURN(TRUE);
@@ -228,7 +223,7 @@ static int mysql_copy_key_list(List<Key> *orig_key,
        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->generated,
                            prep_columns,