• unknown's avatar
    Bug#27333: subquery grouped for aggregate of outer · c2e961cf
    unknown authored
    query / no aggregate of subquery
     The optimizer counts the aggregate functions that 
     appear as top level expressions (in all_fields) in 
     the current subquery. Later it makes a list of these
     that it uses to actually execute the aggregates in
     end_send_group().
     That count is used in several places as a flag whether
     there are aggregates functions.
     While collecting the above info it must not consider
     aggregates that are not aggregated in the current 
     context. It must treat them as normal expressions 
     instead. Not doing that leads to incorrect data about
     the query, e.g. running a query that actually has no
     aggregate functions as if it has some (and hence is
     expected to return only one row).
     Fixed by ignoring the aggregates that are not aggregated
     in the current context. 
     One other smaller omission discovered and fixed in the 
     process : the place of aggregation was not calculated for
     user defined functions. Fixed by calling 
     Item_sum::init_sum_func_check() and 
     Item_sum::check_sum_func() as it's done for the rest of 
     the aggregate functions.
    
    
    mysql-test/r/subselect.result:
      Bug #27333: test case
    mysql-test/t/subselect.test:
      Bug #27333: test case
    sql/item_subselect.cc:
      Bug#27333: need select_lex to filter out
       aggregates that are not aggregated in
       the current select.
    sql/item_sum.cc:
      Bug#27333: need select_lex to filter out
       aggregates that are not aggregated in
       the current select.
    sql/item_sum.h:
      Bug#27333: calculate the place of 
       aggregation for user defined functions.
    sql/sql_select.cc:
      Bug#27333: When counting the aggregated functions
       and collecting a list of them we must not consider
       the aggregates that are not aggregated in the local
       context as "local" : i.e. we must treat them as 
       normal functions and not add them to the aggregate
       functions list.
    sql/sql_select.h:
      Bug#27333: need select_lex to filter out
       aggregates that are not aggregated in
       the current select.
    c2e961cf
sql_select.cc 489 KB