• unknown's avatar
    Fix bug #15706 find_field_in_tables() returns field from outer select · 9f1a3d10
    unknown authored
    If item->cached_table is set, find_field_in_tables() returns found field
    even if it doesn't belong to current select. Because Item_field::fix_fields
    doesn't expect such behaviour, reported bug occurs.
    
    Item_field::fix_fields() was modifed to detect when find_field_in_tables() 
    can return field from outer select and process such fields accordingly.
    In order to ease this code which was searching and processing outed fields was
    moved into separate function called Item_field::fix_outer_field().
    
    
    sql/item_subselect.h:
      Fixed bug #15706: find_field_in_tables() returns field from outer select
      Item_field::fix_outer_field() was marked as friend to Item_subselect class.
    sql/item.h:
      Fixed bug #15706: find_field_in_tables() returns field from outer select
      fix_outer_field() function is added to the Item_field class.
    sql/item.cc:
      Fixed bug #15706: find_field_in_tables() returns field from outer select
      
      Item_ref::fix_fields() and Item_field::fix_fields() were modifed to detect when
      find_field_in_tables() can return field from outer select and process such
      fields accordingly.
      In order to ease this, code Item_field::fix_fields() which was searching and
      processing outer fields was moved into separate function called
      Item_field::fix_outer_field().
      To the Item_field::fix_field() added a loop for finding context for found field.
    mysql-test/t/disabled.def:
      Fixed bug #15706: find_field_in_tables() returns field from outer select
      Enable subselect test
    9f1a3d10
disabled.def 497 Bytes