**Use case**
For #15112

**Describe the solution you'd like**

SELECT ALL is identical to SELECT without DISTINCT.

If ALL is specified - ignore it.
If both ALL and DISTINCT are specified - syntax error or exception.

ALL can also be specified inside aggregate function:

SELECT sum(ALL x)

with the same effect (noop).
{
            
            
            
            if (limit_with_ties_occured)
                throw Exception("Can not use WITH TIES alongside LIMIT BY", ErrorCodes::LIMIT_BY_WITH_TIES_IS_NOT_SUPPORTED);
            limit_by_length = limit_length;
            limit_by_offset = limit_offset;
            limit_length = nullptr;
            limit_offset = nullptr;
            if (!exp_list.parse(pos, limit_by_expression_list, expected))
                return false;
        }
        if (top_length && limit_length)
            throw Exception("Can not use TOP and LIMIT together", ErrorCodes::TOP_AND_LIMIT_TOGETHER);
    }
    else if (s_offset.ignore(pos, expected))
    {
        
        bool offset_with_fetch_maybe = false;
        if (!exp_elem.parse(pos, limit_offset, expected))
            return false;
        if (s_row.ignore(pos, expected))
        {
            if (s_rows.ignore(pos, expected))
                throw Exception("Can not use ROW and ROWS together", ErrorCodes::ROW_AND_ROWS_TOGETHER);
            offset_with_fetch_maybe = true;
        }
        else if (s_rows.ignore(pos, expected))
        {