diff options
Diffstat (limited to 'sql/partition_info.cc')
-rw-r--r-- | sql/partition_info.cc | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 475ecef88d2..e5f8cd7ffac 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -21,9 +21,10 @@ #endif #include "mysql_priv.h" -#include "ha_partition.h" #ifdef WITH_PARTITION_STORAGE_ENGINE +#include "ha_partition.h" + partition_info *partition_info::get_clone() { @@ -431,18 +432,22 @@ char *partition_info::has_unique_names() bool partition_info::check_engine_mix(handlerton **engine_array, uint no_parts) { uint i= 0; - bool result= FALSE; DBUG_ENTER("partition_info::check_engine_mix"); do { if (engine_array[i] != engine_array[0]) { - result= TRUE; - break; + my_error(ER_MIX_HANDLER_ERROR, MYF(0)); + DBUG_RETURN(TRUE); } } while (++i < no_parts); - DBUG_RETURN(result); + if (engine_array[0] == &myisammrg_hton) + { + my_error(ER_PARTITION_MERGE_ERROR, MYF(0)); + DBUG_RETURN(TRUE); + } + DBUG_RETURN(FALSE); } @@ -680,8 +685,20 @@ bool partition_info::check_partition_info(handlerton **eng_type, uint i, tot_partitions; bool result= TRUE; char *same_name; + bool part_expression_ok= TRUE; DBUG_ENTER("partition_info::check_partition_info"); + if (part_type != HASH_PARTITION || !list_of_part_fields) + part_expr->walk(&Item::check_partition_func_processor, + (byte*)(&part_expression_ok)); + if (is_sub_partitioned() && !list_of_subpart_fields) + subpart_expr->walk(&Item::check_partition_func_processor, + (byte*)(&part_expression_ok)); + if (!part_expression_ok) + { + my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); + goto end; + } if (unlikely(!is_sub_partitioned() && !(use_default_subpartitions && use_default_no_subpartitions))) { @@ -756,10 +773,7 @@ bool partition_info::check_partition_info(handlerton **eng_type, } while (++i < no_parts); } if (unlikely(partition_info::check_engine_mix(engine_array, part_count))) - { - my_error(ER_MIX_HANDLER_ERROR, MYF(0)); goto end; - } if (eng_type) *eng_type= (handlerton*)engine_array[0]; |