• unknown's avatar
    Fix for BUG#13127. · 5f81fbb3
    unknown authored
    The problem was in the way table references are pre-filtered when
    resolving a qualified field. When resolving qualified table references
    we search recursively in the operands of the join. If there is
    natural/using join with a merge view, the first call to find_field_in_table_ref
    makes a recursive call to itself with the view as the new table reference
    to search for the column. However the view has both nested_join and
    join_columns != NULL so it skipped the test whether the view name matches
    the field qualifier. As a result the field was found in the view since the
    view already has a field with the same name. Thus the field was incorrectly
    resolved as the view field.
    
    
    mysql-test/r/select.result:
      Test for BUG#13127.
    mysql-test/t/select.test:
      Test for BUG#13127.
    sql/sql_base.cc:
      The patch contains two independent changes:
      
      - When searching for qualified fields, include merge views and information schema tables
      used with SHOW (both using TABLE_LIST::field_translation to represent result fields) in
      the test that compares the qualifying table with the name of the table reference being
      searched. This change fixes the bug.
      
      - Do not search the materialized list of columns of a NATURAL/USING join if 'table_list'
      is a stored table or merge view. Instead search directly in the table or view as if it
      is not under a natural join. This is a performance improvement since if 'table_list'
      is a stored table, then the search can utilize the name hash for table names.
    5f81fbb3
select.result 77.8 KB