diff options
Diffstat (limited to 'sql/partition_info.cc')
-rw-r--r-- | sql/partition_info.cc | 86 |
1 files changed, 27 insertions, 59 deletions
diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 43ee92f6020..f09bde6a965 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -48,11 +48,9 @@ partition_info *partition_info::get_clone(THD *thd) List_iterator<partition_element> part_it(partitions); partition_element *part; partition_info *clone= new (mem_root) partition_info(*this); - if (!clone) - { - mem_alloc_error(sizeof(partition_info)); + if (unlikely(!clone)) DBUG_RETURN(NULL); - } + memset(&(clone->read_partitions), 0, sizeof(clone->read_partitions)); memset(&(clone->lock_partitions), 0, sizeof(clone->lock_partitions)); clone->bitmaps_are_initialized= FALSE; @@ -64,20 +62,16 @@ partition_info *partition_info::get_clone(THD *thd) partition_element *subpart; partition_element *part_clone= new (mem_root) partition_element(); if (!part_clone) - { - mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); - } + memcpy(part_clone, part, sizeof(partition_element)); part_clone->subpartitions.empty(); while ((subpart= (subpart_it++))) { partition_element *subpart_clone= new (mem_root) partition_element(); if (!subpart_clone) - { - mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); - } + memcpy(subpart_clone, subpart, sizeof(partition_element)); part_clone->subpartitions.push_back(subpart_clone, mem_root); } @@ -88,20 +82,15 @@ partition_info *partition_info::get_clone(THD *thd) (part_elem_value *)alloc_root(mem_root, sizeof(part_elem_value) * part->list_val_list.elements); if (!new_val_arr) - { - mem_alloc_error(sizeof(part_elem_value) * part->list_val_list.elements); DBUG_RETURN(NULL); - } + p_column_list_val *new_colval_arr= (p_column_list_val*)alloc_root(mem_root, sizeof(p_column_list_val) * num_columns * part->list_val_list.elements); if (!new_colval_arr) - { - mem_alloc_error(sizeof(p_column_list_val) * num_columns * - part->list_val_list.elements); DBUG_RETURN(NULL); - } + part_elem_value *val; while ((val= list_val_it++)) { @@ -394,10 +383,6 @@ char *partition_info::create_default_partition_names(THD *thd, uint part_no, move_ptr+= MAX_PART_NAME_SIZE; } while (++i < num_parts_arg); } - else - { - mem_alloc_error(num_parts_arg*MAX_PART_NAME_SIZE); - } DBUG_RETURN(ptr); } @@ -422,13 +407,8 @@ char *partition_info::create_default_subpartition_name(THD *thd, uint subpart_no DBUG_ENTER("create_default_subpartition_name"); if (likely(ptr != NULL)) - { my_snprintf(ptr, size_alloc, "%ssp%u", part_name, subpart_no); - } - else - { - mem_alloc_error(size_alloc); - } + DBUG_RETURN(ptr); } @@ -505,10 +485,7 @@ bool partition_info::set_up_default_partitions(THD *thd, handler *file, default_name+=MAX_PART_NAME_SIZE; } else - { - mem_alloc_error(sizeof(partition_element)); goto end; - } } while (++i < num_parts); result= FALSE; end: @@ -574,10 +551,7 @@ bool partition_info::set_up_default_subpartitions(THD *thd, handler *file, subpart_elem->partition_name= ptr; } else - { - mem_alloc_error(sizeof(partition_element)); goto end; - } } while (++j < num_subparts); } while (++i < num_parts); result= FALSE; @@ -885,7 +859,7 @@ void partition_info::vers_set_hist_part(THD *thd) if (vers_info->interval.is_set()) { - if (vers_info->hist_part->range_value > thd->systime()) + if (vers_info->hist_part->range_value > thd->query_start()) return; partition_element *next= NULL; @@ -896,7 +870,7 @@ void partition_info::vers_set_hist_part(THD *thd) while ((next= it++) != vers_info->now_part) { vers_info->hist_part= next; - if (next->range_value > thd->systime()) + if (next->range_value > thd->query_start()) return; } goto warn; @@ -1506,11 +1480,9 @@ bool partition_info::set_part_expr(THD *thd, char *start_token, Item *item_ptr, size_t expr_len= end_token - start_token; char *func_string= (char*) thd->memdup(start_token, expr_len); - if (!func_string) - { - mem_alloc_error(expr_len); + if (unlikely(!func_string)) return TRUE; - } + if (is_subpart) { list_of_subpart_fields= FALSE; @@ -1665,7 +1637,6 @@ bool partition_info::set_up_charset_field_preps(THD *thd) } DBUG_RETURN(FALSE); error: - mem_alloc_error(size); DBUG_RETURN(TRUE); } @@ -1698,17 +1669,19 @@ bool check_partition_dirs(partition_info *part_info) partition_element *subpart_elem; while ((subpart_elem= sub_it++)) { - if (error_if_data_home_dir(subpart_elem->data_file_name, - "DATA DIRECTORY") || - error_if_data_home_dir(subpart_elem->index_file_name, - "INDEX DIRECTORY")) + if (unlikely(error_if_data_home_dir(subpart_elem->data_file_name, + "DATA DIRECTORY")) || + unlikely(error_if_data_home_dir(subpart_elem->index_file_name, + "INDEX DIRECTORY"))) return 1; } } else { - if (error_if_data_home_dir(part_elem->data_file_name, "DATA DIRECTORY") || - error_if_data_home_dir(part_elem->index_file_name, "INDEX DIRECTORY")) + if (unlikely(error_if_data_home_dir(part_elem->data_file_name, + "DATA DIRECTORY")) || + unlikely(error_if_data_home_dir(part_elem->index_file_name, + "INDEX DIRECTORY"))) return 1; } } @@ -1827,9 +1800,11 @@ part_column_list_val *partition_info::add_column_value(THD *thd) into the structure used for 1 column. After this we call ourselves recursively which should always succeed. */ + num_columns= curr_list_object; if (!reorganize_into_single_field_col_val(thd)) { - DBUG_RETURN(add_column_value(thd)); + if (!init_column_part(thd)) + DBUG_RETURN(add_column_value(thd)); } DBUG_RETURN(NULL); } @@ -1970,10 +1945,8 @@ bool partition_info::init_column_part(THD *thd) if (!(list_val= (part_elem_value*) thd->calloc(sizeof(part_elem_value))) || p_elem->list_val_list.push_back(list_val, thd->mem_root)) - { - mem_alloc_error(sizeof(part_elem_value)); DBUG_RETURN(TRUE); - } + if (num_columns) loc_num_columns= num_columns; else @@ -1981,10 +1954,8 @@ bool partition_info::init_column_part(THD *thd) if (!(col_val_array= (part_column_list_val*) thd->calloc(loc_num_columns * sizeof(part_column_list_val)))) - { - mem_alloc_error(loc_num_columns * sizeof(part_elem_value)); DBUG_RETURN(TRUE); - } + list_val->col_val_array= col_val_array; list_val->added_items= 0; curr_list_val= list_val; @@ -2200,7 +2171,6 @@ bool partition_info::fix_column_value_functions(THD *thd, thd->variables.sql_mode= save_sql_mode; if (!(val_ptr= (uchar*) thd->memdup(field->ptr, len))) { - mem_alloc_error(len); result= TRUE; goto end; } @@ -2304,7 +2274,7 @@ bool partition_info::fix_parser_data(THD *thd) part_elem= it++; List_iterator<part_elem_value> list_val_it(part_elem->list_val_list); num_elements= part_elem->list_val_list.elements; - if (!num_elements && error_if_requires_values()) + if (unlikely(!num_elements && error_if_requires_values())) DBUG_RETURN(true); DBUG_ASSERT(part_type == RANGE_PARTITION ? num_elements == 1U : TRUE); @@ -2715,11 +2685,9 @@ bool partition_info::vers_init_info(THD * thd) column_list= TRUE; num_columns= 1; vers_info= new (thd->mem_root) Vers_part_info; - if (!vers_info) - { - mem_alloc_error(sizeof(Vers_part_info)); + if (unlikely(!vers_info)) return true; - } + return false; } |