• evgen@moonbone.local's avatar
    Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode. · 19ee0a94
    evgen@moonbone.local authored
    Currently in the ONLY_FULL_GROUP_BY mode no hidden fields are allowed in the
    select list. To ensure this each expression in the select list is checked
    to be a constant, an aggregate function or to occur in the GROUP BY list.
    The last two requirements are wrong and doesn't allow valid expressions like
    "MAX(b) - MIN(b)" or "a + 1" in a query with grouping by a.
    
    The correct check implemented by the patch will ensure that:
    any field reference in the [sub]expressions of the select list 
      is under an aggregate function or
      is mentioned as member of the group list or
      is an outer reference or
      is part of the select list element that coincide with a grouping element.
    
    The Item_field objects now can contain the position of the select list
    expression which they belong to. The position is saved during the
    field's Item_field::fix_fields() call.
    
    The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
    class. The SELECT_LEX::cur_pos_in_select_list now contains the position in the
    select list of the expression being currently fixed.
    19ee0a94
sql_union.cc 19.6 KB