summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
authorevgen@moonbone.local <>2007-04-15 08:31:34 +0400
committerevgen@moonbone.local <>2007-04-15 08:31:34 +0400
commit3113ce6383afa38d8ee4e155bc4b9df9f9de7667 (patch)
treedb1a04d110b3d1a52904be6a4dc49835a46c7e4e /sql/sql_union.cc
parentce9cc47a731325f8c1e0fac4bfe955bb3dc00d68 (diff)
downloadmariadb-git-3113ce6383afa38d8ee4e155bc4b9df9f9de7667.tar.gz
Bug#27321: Wrong subquery result in a grouping select.
The Item_outer_ref class based on the Item_direct_ref class was always used to represent an outer field. But if the outer select is a grouping one and the outer field isn't under an aggregate function which is aggregated in that outer select an Item_ref object should be used to represent such a field. If the outer select in which the outer field is resolved isn't grouping then the Item_field class should be used to represent such a field. This logic also should be used for an outer field resolved through its alias name. Now the Item_field::fix_outer_field() uses Item_outer_field objects to represent aliased and non-aliased outer fields for grouping outer selects only. Now the fix_inner_refs() function chooses which class to use to access outer field - the Item_ref or the Item_direct_ref. An object of the chosen class substitutes the original field in the Item_outer_ref object. The direct_ref and the found_in_select_list fields were added to the Item_outer_ref class.
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 1ec724a6338..7fb75732012 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -743,6 +743,7 @@ bool st_select_lex::cleanup()
error= (bool) ((uint) error | (uint) lex_unit->cleanup());
}
non_agg_fields.empty();
+ inner_refs_list.empty();
DBUG_RETURN(error);
}