-
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