**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).
std::vector<std::pair<String, ASTPtr>> group_by_aggregations;
    if (mode == TTLMode::MOVE)
    {
        ASTPtr ast_space_name;
        if (!parser_string_literal.parse(pos, ast_space_name, expected))
            return false;
        destination_name = ast_space_name->as<ASTLiteral &>().value.get<const String &>();
    }
    else if (mode == TTLMode::GROUP_BY)
    {
        if (!parser_expression_list.parse(pos, ast_group_by_key, expected))
            return false;
        if (s_set.ignore(pos))
        {
            while (true)
            {
                if (!group_by_aggregations.empty() && !s_comma.ignore(pos))
                    break;
                ASTPtr name;
                ASTPtr value;
                if (!parser_identifier.parse(pos, name, expected))
                    return false;
                if (!s_eq.ignore(pos))
                    return false;
                if (!parser_exp.parse(pos, value, expected))
                    return false;
                String name_str;
                if (!tryGetIdentifierNameInto(name, name_str))
                    return false;
                group_by_aggregations.emplace_back(name_str, std::move(value));