diff options
author | Georgi Kodinov <joro@sun.com> | 2009-05-20 14:14:33 +0300 |
---|---|---|
committer | Georgi Kodinov <joro@sun.com> | 2009-05-20 14:14:33 +0300 |
commit | 54d36955b2109d638d630366d91d88f37961ca6c (patch) | |
tree | a98013930010aebb231917e6f82895c485fb6ab7 /sql/item_cmpfunc.cc | |
parent | e5a9d41c583946d13e5464e516f007a6eefc4b57 (diff) | |
download | mariadb-git-54d36955b2109d638d630366d91d88f37961ca6c.tar.gz |
Revert of the fix for bug #44399 (joro@sun.com-20090512135917-kal1dvtqpqgnj3yc).
Diffstat (limited to 'sql/item_cmpfunc.cc')
-rw-r--r-- | sql/item_cmpfunc.cc | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 5017464f968..a9bfea1b806 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -189,7 +189,6 @@ enum_field_types agg_field_type(Item **items, uint nitems) collect_cmp_types() items Array of items to collect types from nitems Number of items in the array - with_sum_func a sum function is referenced DESCRIPTION This function collects different result types for comparison of the first @@ -200,7 +199,7 @@ enum_field_types agg_field_type(Item **items, uint nitems) Bitmap of collected types - otherwise */ -static uint collect_cmp_types(Item **items, uint nitems, my_bool with_sum_func) +static uint collect_cmp_types(Item **items, uint nitems) { uint i; uint found_types; @@ -216,16 +215,6 @@ static uint collect_cmp_types(Item **items, uint nitems, my_bool with_sum_func) found_types|= 1<< (uint)item_cmp_type(left_result, items[i]->result_type()); } - if (with_sum_func || current_thd->lex->current_select->group_list.elements) - { - /* - See TODO commentary in the setup_copy_fields function: - item in a group may be wrapped with an Item_copy_string item. - That item has a STRING_RESULT result type, so we need - to take this type into account. - */ - found_types |= (1 << item_cmp_type(left_result, STRING_RESULT)); - } return found_types; } @@ -2733,8 +2722,19 @@ void Item_func_case::fix_length_and_dec() for (nagg= 0; nagg < ncases/2 ; nagg++) agg[nagg+1]= args[nagg*2]; nagg++; - if (!(found_types= collect_cmp_types(agg, nagg, with_sum_func))) + if (!(found_types= collect_cmp_types(agg, nagg))) return; + if (with_sum_func || current_thd->lex->current_select->group_list.elements) + { + /* + See TODO commentary in the setup_copy_fields function: + item in a group may be wrapped with an Item_copy_string item. + That item has a STRING_RESULT result type, so we need + to take this type into account. + */ + found_types |= (1 << item_cmp_type(left_result_type, STRING_RESULT)); + } + for (i= 0; i <= (uint)DECIMAL_RESULT; i++) { if (found_types & (1 << i) && !cmp_items[i]) @@ -3525,7 +3525,7 @@ void Item_func_in::fix_length_and_dec() uint type_cnt= 0, i; Item_result cmp_type= STRING_RESULT; left_result_type= args[0]->result_type(); - if (!(found_types= collect_cmp_types(args, arg_count, with_sum_func))) + if (!(found_types= collect_cmp_types(args, arg_count))) return; for (arg= args + 1, arg_end= args + arg_count; arg != arg_end ; arg++) |