Java 类com.facebook.presto.sql.tree.GroupingElement 实例源码

项目:presto-query-formatter    文件:ExpressionFormatter.java   
static String formatGroupBy(List<GroupingElement> groupingElements, Optional<List<Expression>> parameters, int indent)
{
    ImmutableList.Builder<String> resultStrings = ImmutableList.builder();

    for (GroupingElement groupingElement : groupingElements) {
        String result = "";
        if (groupingElement instanceof SimpleGroupBy) {
            Set<Expression> columns = ImmutableSet.copyOf(((SimpleGroupBy) groupingElement).getColumnExpressions());
            if (columns.size() == 1) {
                result = formatExpression(getOnlyElement(columns), parameters, indent);
            }
            else {
                result = formatGroupingSet(columns, parameters, indent);
            }
        }
        else if (groupingElement instanceof GroupingSets) {
            result = format("GROUPING SETS (%s)", Joiner.on(", ").join(
                    ((GroupingSets) groupingElement).getSets().stream()
                            .map(ExpressionFormatter::formatGroupingSet)
                            .iterator()));
        }
        else if (groupingElement instanceof Cube) {
            result = format("CUBE %s", formatGroupingSet(((Cube) groupingElement).getColumns()));
        }
        else if (groupingElement instanceof Rollup) {
            result = format("ROLLUP %s", formatGroupingSet(((Rollup) groupingElement).getColumns()));
        }
        resultStrings.add(result);
    }
    return Joiner.on(", ").join(resultStrings.build());
}
项目:sql4es    文件:GroupParser.java   
public TermsBuilder parse(List<GroupingElement> elements, QueryState state){
    List<Column> groups = new ArrayList<Column>();
    for(GroupingElement grouping : elements){
        for(Set<Expression> expressions : grouping.enumerateGroupingSets()){
            for(Expression e : expressions) groups.add((Column) e.accept(this, state) );
        }
    }

    // to find case sensitive group by definitions which ES needs
    for(Column groupby : groups){
        if(groupby.getOp() != Operation.NONE){
            state.addException("Can not use function '"+groupby.getAggName()+"' as GROUP BY, please use an alias to group by a function");
            return null;
        }
    }
    Heading.fixColumnReferences(state.originalSql()+";", "group by.+", "\\W", groups);

    for(Column g : groups){
        Column s = state.getHeading().getColumnByLabel(g.getAggName());
        if(s == null ){
            state.addException("Group by '"+g.getColumn()+"' not defined in SELECT");
        }else{
            // add column from select to this group (when referenced through an alias)
            g.setColumn(s.getColumn());
        }
    }
    return buildAggregationQuery(groups, 0, state);
}
项目:presto    文件:StatementAnalyzer.java   
private List<List<FieldOrExpression>> analyzeGroupBy(QuerySpecification node, RelationType tupleDescriptor, AnalysisContext context, List<FieldOrExpression> outputExpressions)
{
    List<Set<Set<Expression>>> enumeratedGroupingSets = node.getGroupBy().stream()
            .map(GroupingElement::enumerateGroupingSets)
            .distinct()
            .collect(toImmutableList());

    // compute cross product of enumerated grouping sets, if there are any
    List<List<Expression>> computedGroupingSets = ImmutableList.of();
    if (!enumeratedGroupingSets.isEmpty()) {
        computedGroupingSets = Sets.cartesianProduct(enumeratedGroupingSets).stream()
                .map(groupingSetList -> groupingSetList.stream()
                        .flatMap(Collection::stream)
                        .distinct()
                        .collect(toImmutableList()))
                .distinct()
                .collect(toImmutableList());
    }

    // if there are aggregates, but no grouping columns, create a grand total grouping set
    if (computedGroupingSets.isEmpty() && !extractAggregates(node).isEmpty()) {
        computedGroupingSets = ImmutableList.of(ImmutableList.of());
    }

    if (computedGroupingSets.size() > 1) {
        throw new SemanticException(NOT_SUPPORTED, node, "Grouping by multiple sets of columns is not yet supported");
    }

    List<List<FieldOrExpression>> analyzedGroupingSets = computedGroupingSets.stream()
            .map(groupingSet -> analyzeGroupingColumns(groupingSet, node, tupleDescriptor, context, outputExpressions))
            .collect(toImmutableList());

    analysis.setGroupingSets(node, analyzedGroupingSets);
    return analyzedGroupingSets;
}
项目:presto    文件:ExpressionFormatter.java   
static String formatGroupBy(List<GroupingElement> groupingElements)
{
    ImmutableList.Builder<String> resultStrings = ImmutableList.builder();

    for (GroupingElement groupingElement : groupingElements) {
        String result = "";
        if (groupingElement instanceof SimpleGroupBy) {
            Set<Expression> columns = ImmutableSet.copyOf(((SimpleGroupBy) groupingElement).getColumnExpressions());
            if (columns.size() == 1) {
                result = formatExpression(getOnlyElement(columns));
            }
            else {
                result = formatGroupingSet(columns);
            }
        }
        else if (groupingElement instanceof GroupingSets) {
            result = format("GROUPING SETS (%s)", Joiner.on(", ").join(
                    groupingElement.enumerateGroupingSets().stream()
                            .map(ExpressionFormatter::formatGroupingSet)
                            .iterator()));
        }
        else if (groupingElement instanceof Cube) {
            result = format("CUBE %s", formatGroupingSet(((Cube) groupingElement).getColumns()));
        }
        else if (groupingElement instanceof Rollup) {
            result = format("ROLLUP %s", formatGroupingSet(((Rollup) groupingElement).getColumns()));
        }
        resultStrings.add(result);
    }
    return Joiner.on(", ").join(resultStrings.build());
}
项目:presto    文件:QueryUtil.java   
public static Query simpleQuery(Select select, Relation from, Optional<Expression> where, List<GroupingElement> groupBy, Optional<Expression> having, List<SortItem> ordering, Optional<String> limit)
{
    return query(new QuerySpecification(
            select,
            Optional.of(from),
            where,
            groupBy,
            having,
            ordering,
            limit));
}
项目:EchoQuery    文件:ExpressionFormatter.java   
static String formatGroupBy(List<GroupingElement> groupingElements)
{
    ImmutableList.Builder<String> resultStrings = ImmutableList.builder();

    for (GroupingElement groupingElement : groupingElements) {
        String result = "";
        if (groupingElement instanceof SimpleGroupBy) {
            Set<Expression> columns = ImmutableSet.copyOf(((SimpleGroupBy) groupingElement).getColumnExpressions());
            if (columns.size() == 1) {
                result = formatExpression(getOnlyElement(columns));
            }
            else {
                result = formatGroupingSet(columns);
            }
        }
        else if (groupingElement instanceof GroupingSets) {
            result = format("GROUPING SETS (%s)", Joiner.on(", ").join(
                    groupingElement.enumerateGroupingSets().stream()
                            .map(ExpressionFormatter::formatGroupingSet)
                            .iterator()));
        }
        else if (groupingElement instanceof Cube) {
            result = format("CUBE %s", formatGroupingSet(((Cube) groupingElement).getColumns()));
        }
        else if (groupingElement instanceof Rollup) {
            result = format("ROLLUP %s", formatGroupingSet(((Rollup) groupingElement).getColumns()));
        }
        resultStrings.add(result);
    }
    return Joiner.on(", ").join(resultStrings.build());
}
项目:presto-query-formatter    文件:ExpressionFormatter.java   
static String formatGroupBy(List<GroupingElement> groupingElements, int indent)
{
    return formatGroupBy(groupingElements, Optional.empty(), indent);
}