~maria-captains/maria/5.3

Viewing all changes in revision 3543.

  • Committer: timour at askmonty
  • Date: 2012-06-14 14:03:09 UTC
  • Revision ID: timour@askmonty.org-20120614140309-7iv5ccoh6sdst209
Fix bug lp:1008773

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.

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: