• unknown's avatar
    Fixed bug#16302: Quantified subquery without any tables gives wrong results · b25d6158
    unknown authored
    The ALL/ANY subqueries are the subject of MIN/MAX optimization. The matter
    of this optimization is to embed MIN() or MAX() function into the subquery
    in order to get only one row by which we can tell whether the expression
    with ALL/ANY subquery is true or false.
    But when it is applied to a subquery like 'select a_constant' the reported bug
    occurs. As no tables are specified in the subquery the do_select() function 
    isn't called for the optimized subquery and thus no values have been added 
    to a MIN()/MAX() function and it returns NULL instead of a_constant.
    This leads to a wrong query result.
    
    For the subquery like 'select a_constant' there is no reason to apply
    MIN/MAX optimization because the subquery anyway will return at most one row.
    Thus the Item_maxmin_subselect class is more appropriate for handling such
    subqueries.
    
    The Item_in_subselect::single_value_transformer() function now checks
    whether tables are specified for the subquery. If no then this subselect is
    handled like a UNION using an Item_maxmin_subselect object.
    
    
    mysql-test/t/subselect.test:
      Added test case for bug#16302: Quantified subquery without any tables gives wrong results
    mysql-test/r/subselect.result:
      Added test case for bug#16302: Quantified subquery without any tables gives wrong results
    sql/item_subselect.cc:
      Fixed bug#16302: Quantified subquery without any tables gives wrong results
       
      The Item_in_subselect::single_value_transformer() function now checks
      whether tables are specified for the subquery. If no then this subselect is
      handled like a UNION using an Item_maxmin_subselect object.
    b25d6158
item_subselect.cc 46 KB