• unknown's avatar
    Fix LP BUG#778413 · 4a9c027a
    unknown authored
    Analysis:
    The subquery is evaluated first during ref-optimization of the outer
    query because the subquery is considered constant from the perspective
    of the outer query. Thus an attempt is made to evaluate the MAX subquery
    and use the new constant to drive an index nested loops join.
    During this evaluation the inner-most subquery replaces the JOIN_TAB
    with a new one that fetches the data from a temp table.
    The function select_describe crashes at the lines:
            TABLE_LIST *real_table= table->pos_in_table_list; 
    	item_list.push_back(new Item_string(real_table->alias,
    					    strlen(real_table->alias),
    					    cs));
    because 'table' is a temp table, and it has no corresponding table
    reference. This 'real_table' is NULL, and real_table->alias results
    in a crash.
    
    Solution:
    In the spirit of MWL#89 prevent the evaluation of expensive predicates
    during optimization. This patch prevents the evaluation of expensive
    predicates during ref optimization.
    
    
    sql/item_subselect.h:
      Remove unused class member. Not needed for the fix, but noticed now and removed.
    4a9c027a
subselect4.result 72.4 KB