• evgen@moonbone.local's avatar
    Fixed bug#18739: non-standard HAVING extension was allowed in strict ANSI sql mode. · 663fee9c
    evgen@moonbone.local authored
    The SQL standard doesn't allow to use in HAVING clause fields that are not 
    present in GROUP BY clause and not under any aggregate function in the HAVING
    clause. However, mysql allows using such fields. This extension assume that 
    the non-grouping fields will have the same group-wise values. Otherwise, the 
    result will be unpredictable. This extension allowed in strict 
    MODE_ONLY_FULL_GROUP_BY sql mode results in misunderstanding of HAVING 
    capabilities.
    
    The new error message ER_NON_GROUPING_FIELD_USED message is added. It says
    "non-grouping field '%-.64s' is used in %-.64s clause". This message is
    supposed to be used for reporting errors when some field is not found in the
    GROUP BY clause but have to be present there. Use cases for this message are 
    this bug and when a field is present in a SELECT item list not under any 
    aggregate function and there is GROUP BY clause present which doesn't mention 
    that field. It renders the ER_WRONG_FIELD_WITH_GROUP error message obsolete as
    being more descriptive.
    The resolve_ref_in_select_and_group() function now reports the 
    ER_NON_GROUPING_FIELD_FOUND error if the strict mode is set and the field for 
    HAVING clause is found in the SELECT item list only.
    663fee9c
errmsg.txt 335 KB