• evgen@moonbone.local's avatar
    Bug#23800: Outer fields in correlated subqueries is used in a temporary table · 9a233742
    evgen@moonbone.local authored
    created for sorting.
    
    Any outer reference in a subquery was represented by an Item_field object.
    If the outer select employs a temporary table all such fields should be
    replaced with fields from that temporary table in order to point to the 
    actual data. This replacement wasn't done and that resulted in a wrong
    subquery evaluation and a wrong result of the whole query.
    
    Now any outer field is represented by two objects - Item_field placed in the
    outer select and Item_outer_ref in the subquery. Item_field object is
    processed as a normal field and the reference to it is saved in the
    ref_pointer_array. Thus the Item_outer_ref is always references the correct
    field. The original field is substituted for a reference in the
    Item_field::fix_outer_field() function.
    
    New function called fix_inner_refs() is added to fix fields referenced from
    inner selects and to fix references (Item_ref objects) to these fields.
    
    The new Item_outer_ref class is a descendant of the Item_direct_ref class.
    It additionally stores a reference to the original field and designed to
    behave more like a field.
    9a233742
item.cc 178 KB