From 5771a711f070d94e315641a6bcbe770ac8791c15 Mon Sep 17 00:00:00 2001 From: "mikael@dator5.(none)" <> Date: Fri, 23 Jun 2006 01:21:26 -0400 Subject: BUG#18198: Less flexibility in defining partition functions Changed test for functions if they are supported. 3 categories: 1) Fully supported 2) Supported for single character collations 3) Supported for binary collations --- sql/partition_info.cc | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'sql/partition_info.cc') diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 39c8d976732..502a0fb4eef 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -694,6 +694,7 @@ end: file A reference to a handler of the table max_rows Maximum number of rows stored in the table engine_type Return value for used engine in partitions + check_partition_function Should we check the partition function RETURN VALUE TRUE Error, something went wrong @@ -708,26 +709,42 @@ end: */ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type, - handler *file, ulonglong max_rows) + handler *file, ulonglong max_rows, + bool check_partition_function) { handlerton **engine_array= NULL; uint part_count= 0; uint i, tot_partitions; bool result= TRUE; char *same_name; - bool part_expression_ok= TRUE; + int part_expression_ok= PF_SAFE; DBUG_ENTER("partition_info::check_partition_info"); - if (part_type != HASH_PARTITION || !list_of_part_fields) - part_expr->walk(&Item::check_partition_func_processor, 0, - (byte*)(&part_expression_ok)); - if (is_sub_partitioned() && !list_of_subpart_fields) - subpart_expr->walk(&Item::check_partition_func_processor, 0, - (byte*)(&part_expression_ok)); - if (!part_expression_ok) + pf_collation_allowed= PF_SAFE; + spf_collation_allowed= PF_SAFE; + if (check_partition_function) { - my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); - goto end; + if (part_type != HASH_PARTITION || !list_of_part_fields) + { + part_expr->walk(&Item::check_partition_func_processor, 0, + (byte*)(&part_expression_ok)); + pf_collation_allowed= (char)part_expression_ok; + part_expression_ok= PF_SAFE; + if (is_sub_partitioned() && !list_of_subpart_fields) + { + subpart_expr->walk(&Item::check_partition_func_processor, 0, + (byte*)(&part_expression_ok)); + } + spf_collation_allowed= (char)part_expression_ok; + } + else + multi_char_collation_allowed= TRUE; + if (!pf_collation_allowed || + !spf_collation_allowed) + { + my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0)); + goto end; + } } if (unlikely(!is_sub_partitioned() && !(use_default_subpartitions && use_default_no_subpartitions))) -- cgit v1.2.1 From d6d6783b6a0e1131ab3c66513cc9dd56ba7f8b68 Mon Sep 17 00:00:00 2001 From: "mikael/pappa@dator5.(none)" <> Date: Wed, 12 Jul 2006 11:22:13 -0400 Subject: BUG#18198: Fix --- sql/partition_info.cc | 2 -- 1 file changed, 2 deletions(-) (limited to 'sql/partition_info.cc') diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 502a0fb4eef..7c9f71e254f 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -737,8 +737,6 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type, } spf_collation_allowed= (char)part_expression_ok; } - else - multi_char_collation_allowed= TRUE; if (!pf_collation_allowed || !spf_collation_allowed) { -- cgit v1.2.1