• unknown's avatar
    Fix bug lp:1008773 · b35231b0
    unknown authored
    Analysis:
    Queries with implicit grouping (there is aggregate, but no group by)
    follow some non-obvious semantics in the case of empty result set.
    Aggregate functions produce some special "natural" value depending on
    the function. For instance MIN/MAX return NULL, COUNT returns 0.
    
    The complexity comes from non-aggregate expressions in the select list.
    If the non-aggregate expression is a constant, it can be computed, so
    we should return its value, however if the expression is non-constant,
    and depends on columns from the empty result set, then the only meaningful
    value is NULL.
    
    The cause of the wrong result was that for subqueries the optimizer didn't
    make a difference between constant and non-constant ones in the case of
    empty result for implicit grouping.
    
    Solution:
    In all implementations of Item_subselect::no_rows_in_result() check if the
    subquery predicate is constant. If it is constant, do not set it to the
    default value for implicit grouping, instead let it be evaluated.
    b35231b0
item_subselect.cc 170 KB