• unknown's avatar
    Bug#27321: Wrong subquery result in a grouping select. · 1cf3b965
    unknown authored
    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.
    
    
    mysql-test/t/subselect3.test:
      Some test cases were corrected after the fix for the bug#27321.
    mysql-test/r/subselect3.result:
      Some test cases were corrected after the fix for the bug#27321.
    mysql-test/t/subselect.test:
      Added a test case for the bug#27321: Wrong subquery result in a grouping select.
    mysql-test/r/subselect.result:
      Added a test case for the bug#27321: Wrong subquery result in a grouping select.
      Some test cases were corrected after this fix.
    sql/sql_union.cc:
      Bug#27321: Wrong subquery result in a grouping select.
      Cleanup of the inner_refs_list.
    sql/sql_select.cc:
      Bug#27321: Wrong subquery result in a grouping select.
      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.
      A comment is corrected.
    sql/item.cc:
      Bug#27321: Wrong subquery result in a grouping select.
      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.
    sql/item.h:
      Bug#27321: Wrong subquery result in a grouping select.
      The direct_ref and the found_in_select_list fields were added to the
      Item_outer_ref class.
    1cf3b965
sql_select.cc 485 KB