diff options
author | unknown <mikael@c-4908e253.1238-1-64736c10.cust.bredbandsbolaget.se> | 2006-04-11 23:35:48 -0400 |
---|---|---|
committer | unknown <mikael@c-4908e253.1238-1-64736c10.cust.bredbandsbolaget.se> | 2006-04-11 23:35:48 -0400 |
commit | 3378a31c6be42ac0355d8db9b9a000e9fe1f2b81 (patch) | |
tree | e2977465c20bb63fea893843ace9f465aa6aaa45 /sql | |
parent | a514095a5d306fead8d22d03a39c83db18d98ef8 (diff) | |
download | mariadb-git-3378a31c6be42ac0355d8db9b9a000e9fe1f2b81.tar.gz |
BUG#18962: DROP PARTITION fails when partitions dropped for subpartitions with default naming procedure
Fixed naming procedures for default partitioning and default subpartitioning
mysql-test/r/partition_pruning.result:
Fixed test cases for new naming of default subpartitions
mysql-test/r/partition_range.result:
New test case
mysql-test/t/partition_range.test:
New test case
sql/partition_info.cc:
Fixed naming procedures for default partitioning and default subpartitioning
sql/partition_info.h:
Fixed naming procedures for default partitioning and default subpartitioning
Diffstat (limited to 'sql')
-rw-r--r-- | sql/partition_info.cc | 48 | ||||
-rw-r--r-- | sql/partition_info.h | 2 |
2 files changed, 37 insertions, 13 deletions
diff --git a/sql/partition_info.cc b/sql/partition_info.cc index ad0aa053ae2..8e0c50b9ffe 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -91,7 +91,7 @@ partition_info *partition_info::get_clone() #define MAX_PART_NAME_SIZE 16 char *partition_info::create_default_partition_names(uint part_no, uint no_parts, - uint start_no, bool is_subpart) + uint start_no) { char *ptr= sql_calloc(no_parts*MAX_PART_NAME_SIZE); char *move_ptr= ptr; @@ -102,10 +102,7 @@ char *partition_info::create_default_partition_names(uint part_no, uint no_parts { do { - if (is_subpart) - my_sprintf(move_ptr, (move_ptr,"p%usp%u", part_no, (start_no + i))); - else - my_sprintf(move_ptr, (move_ptr,"p%u", (start_no + i))); + my_sprintf(move_ptr, (move_ptr,"p%u", (start_no + i))); move_ptr+=MAX_PART_NAME_SIZE; } while (++i < no_parts); } @@ -118,6 +115,35 @@ char *partition_info::create_default_partition_names(uint part_no, uint no_parts /* + Create a unique name for the subpartition as part_name'sp''subpart_no' + SYNOPSIS + create_subpartition_name() + subpart_no Number of subpartition + part_name Name of partition + RETURN VALUES + >0 A reference to the created name string + 0 Memory allocation error +*/ + +char *create_subpartition_name(uint subpart_no, const char *part_name) +{ + uint size_alloc= strlen(part_name) + MAX_PART_NAME_SIZE; + char *ptr= sql_calloc(size_alloc); + DBUG_ENTER("create_subpartition_name"); + + if (likely(ptr != NULL)) + { + my_sprintf(ptr, (ptr, "%ssp%u", part_name, subpart_no)); + } + else + { + mem_alloc_error(size_alloc); + } + DBUG_RETURN(ptr); +} + + +/* Set up all the default partitions not set-up by the user in the SQL statement. Also perform a number of checks that the user hasn't tried to use default values where no defaults exists. @@ -167,8 +193,7 @@ bool partition_info::set_up_default_partitions(handler *file, ulonglong max_rows goto end; } if (unlikely((!(default_name= create_default_partition_names(0, no_parts, - start_no, - FALSE))))) + start_no))))) goto end; i= 0; do @@ -238,18 +263,17 @@ bool partition_info::set_up_default_subpartitions(handler *file, { part_elem= part_it++; j= 0; - name_ptr= create_default_partition_names(i, no_subparts, (uint)0, TRUE); - if (unlikely(!name_ptr)) - goto end; do { partition_element *subpart_elem= new partition_element(); if (likely(subpart_elem != 0 && (!part_elem->subpartitions.push_back(subpart_elem)))) { + char *ptr= create_subpartition_name(j, part_elem->partition_name); + if (!ptr) + goto end; subpart_elem->engine_type= default_engine_type; - subpart_elem->partition_name= name_ptr; - name_ptr+= MAX_PART_NAME_SIZE; + subpart_elem->partition_name= ptr; } else { diff --git a/sql/partition_info.h b/sql/partition_info.h index 664c8834b0b..ecba048c486 100644 --- a/sql/partition_info.h +++ b/sql/partition_info.h @@ -256,7 +256,7 @@ private: uint start_no); bool set_up_default_subpartitions(handler *file, ulonglong max_rows); char *create_default_partition_names(uint part_no, uint no_parts, - uint start_no, bool is_subpart); + uint start_no); bool has_unique_name(partition_element *element); }; |