• Jorgen Loland's avatar
    Bug#47280 - strange results from count(*) with order by multiple · bf0aa2bd
    Jorgen Loland authored
                columns without where/group
                         
    Simple SELECT with implicit grouping used to return many rows if
    the query was ordered by the aggregated column in the SELECT
    list. This was incorrect because queries with implicit grouping
    should only return a single record.
                                  
    The problem was that when JOIN:exec() decided if execution needed
    to handle grouping, it was assumed that sum_func_count==0 meant
    that there were no aggregate functions in the query. This
    assumption was not correct in JOIN::exec() because the aggregate
    functions might have been optimized away during JOIN::optimize().
                      
    The reason why queries without ordering behaved correctly was
    that sum_func_count is only recalculated if the optimizer chooses
    to use temporary tables (which it does in the ordered case).
    Hence, non-ordered queries were correctly treated as grouped.
                      
    The fix for this bug was to remove the assumption that
    sum_func_count==0 means that there is no need for grouping. This
    was done by introducing variable "bool implicit_grouping" in the
    JOIN object.
    bf0aa2bd
opt_sum.cc 32.6 KB