org.apache.calcite.sql.fun.SqlSingleValueAggFunction Java Examples
The following examples show how to use
org.apache.calcite.sql.fun.SqlSingleValueAggFunction.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MycatImplementor.java From Mycat2 with GNU General Public License v3.0 | 6 votes |
@Override protected Result buildAggregate(Aggregate e, Builder builder, List<SqlNode> selectList, List<SqlNode> groupByList) { for (AggregateCall aggCall : e.getAggCallList()) { RelDataType type = aggCall.type; SqlNode aggCallSqlNode = builder.context.toSql(aggCall); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = dialect.rewriteSingleValueExpr(aggCallSqlNode); aggCallSqlNode = SqlStdOperatorTable.CAST.createCall(POS, aggCallSqlNode, dialect.getCastSpec(type)); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } return builder.result(); }
Example #2
Source File: DremioRelToSqlConverter.java From dremio-oss with Apache License 2.0 | 6 votes |
protected void generateGroupBy(DremioRelToSqlConverter.Builder builder, Aggregate e) { List<SqlNode> groupByList = Expressions.list(); final List<SqlNode> selectList = new ArrayList<>(); for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); addGroupBy(groupByList, field); } for (AggregateCall aggCall : e.getAggCallList()) { SqlNode aggCallSqlNode = ((DremioContext) builder.context).toSql(aggCall, e); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = dialect. rewriteSingleValueExpr(aggCallSqlNode); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } }
Example #3
Source File: RelToSqlConverter.java From calcite with Apache License 2.0 | 6 votes |
/** * Builds an aggregate query. * * @param e The Aggregate node * @param builder The SQL builder * @param selectList The precomputed group list * @param groupByList The precomputed select list * @return The aggregate query result */ protected Result buildAggregate(Aggregate e, Builder builder, List<SqlNode> selectList, List<SqlNode> groupByList) { for (AggregateCall aggCall : e.getAggCallList()) { SqlNode aggCallSqlNode = builder.context.toSql(aggCall); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = dialect.rewriteSingleValueExpr(aggCallSqlNode); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } return builder.result(); }
Example #4
Source File: RelToSqlConverter.java From Bats with Apache License 2.0 | 5 votes |
/** @see #dispatch */ public Result visit(Aggregate e) { // "select a, b, sum(x) from ( ... ) group by a, b" final Result x = visitChild(0, e.getInput()); final Builder builder; if (e.getInput() instanceof Project) { builder = x.builder(e); builder.clauses.add(Clause.GROUP_BY); } else { builder = x.builder(e, Clause.GROUP_BY); } List<SqlNode> groupByList = FluentListUtils.list(); final List<SqlNode> selectList = new ArrayList<>(); for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); groupByList.add(field); } for (AggregateCall aggCall : e.getAggCallList()) { SqlNode aggCallSqlNode = builder.context.toSql(aggCall); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = dialect. rewriteSingleValueExpr(aggCallSqlNode); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } return builder.result(); }
Example #5
Source File: RelDecorrelator.java From Bats with Apache License 2.0 | 5 votes |
@Override public void onMatch(RelOptRuleCall call) { LogicalAggregate singleAggregate = call.rel(0); LogicalProject project = call.rel(1); LogicalAggregate aggregate = call.rel(2); // check singleAggRel is single_value agg if ((!singleAggregate.getGroupSet().isEmpty()) || (singleAggregate.getAggCallList().size() != 1) || !(singleAggregate.getAggCallList().get(0) .getAggregation() instanceof SqlSingleValueAggFunction)) { return; } // check projRel only projects one expression // check this project only projects one expression, i.e. scalar // sub-queries. List<RexNode> projExprs = project.getProjects(); if (projExprs.size() != 1) { return; } // check the input to project is an aggregate on the entire input if (!aggregate.getGroupSet().isEmpty()) { return; } // singleAggRel produces a nullable type, so create the new // projection that casts proj expr to a nullable type. final RelBuilder relBuilder = call.builder(); final RelDataType type = relBuilder.getTypeFactory().createTypeWithNullability(projExprs.get(0).getType(), true); final RexNode cast = relBuilder.getRexBuilder().makeCast(type, projExprs.get(0)); relBuilder.push(aggregate).project(cast); call.transformTo(relBuilder.build()); }
Example #6
Source File: RelDecorrelator.java From flink with Apache License 2.0 | 5 votes |
public void onMatch(RelOptRuleCall call) { LogicalAggregate singleAggregate = call.rel(0); LogicalProject project = call.rel(1); LogicalAggregate aggregate = call.rel(2); // check singleAggRel is single_value agg if ((!singleAggregate.getGroupSet().isEmpty()) || (singleAggregate.getAggCallList().size() != 1) || !(singleAggregate.getAggCallList().get(0).getAggregation() instanceof SqlSingleValueAggFunction)) { return; } // check projRel only projects one expression // check this project only projects one expression, i.e. scalar // sub-queries. List<RexNode> projExprs = project.getProjects(); if (projExprs.size() != 1) { return; } // check the input to project is an aggregate on the entire input if (!aggregate.getGroupSet().isEmpty()) { return; } // singleAggRel produces a nullable type, so create the new // projection that casts proj expr to a nullable type. final RelBuilder relBuilder = call.builder(); final RelDataType type = relBuilder.getTypeFactory() .createTypeWithNullability(projExprs.get(0).getType(), true); final RexNode cast = relBuilder.getRexBuilder().makeCast(type, projExprs.get(0)); relBuilder.push(aggregate) .project(cast); call.transformTo(relBuilder.build()); }
Example #7
Source File: RelDecorrelator.java From flink with Apache License 2.0 | 5 votes |
public void onMatch(RelOptRuleCall call) { LogicalAggregate singleAggregate = call.rel(0); LogicalProject project = call.rel(1); LogicalAggregate aggregate = call.rel(2); // check singleAggRel is single_value agg if ((!singleAggregate.getGroupSet().isEmpty()) || (singleAggregate.getAggCallList().size() != 1) || !(singleAggregate.getAggCallList().get(0).getAggregation() instanceof SqlSingleValueAggFunction)) { return; } // check projRel only projects one expression // check this project only projects one expression, i.e. scalar // sub-queries. List<RexNode> projExprs = project.getProjects(); if (projExprs.size() != 1) { return; } // check the input to project is an aggregate on the entire input if (!aggregate.getGroupSet().isEmpty()) { return; } // singleAggRel produces a nullable type, so create the new // projection that casts proj expr to a nullable type. final RelBuilder relBuilder = call.builder(); final RelDataType type = relBuilder.getTypeFactory() .createTypeWithNullability(projExprs.get(0).getType(), true); final RexNode cast = relBuilder.getRexBuilder().makeCast(type, projExprs.get(0)); relBuilder.push(aggregate) .project(cast); call.transformTo(relBuilder.build()); }
Example #8
Source File: PreProcessRel.java From dremio-oss with Apache License 2.0 | 5 votes |
@Override public RelNode visit(LogicalAggregate aggregate) { for(AggregateCall aggregateCall : aggregate.getAggCallList()) { if(aggregateCall.getAggregation() instanceof SqlSingleValueAggFunction) { // see DRILL-1937 unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.FUNCTION, "Dremio doesn't currently support non-scalar sub-queries used in an expression"); throw new UnsupportedOperationException(); } } return visitChild(aggregate, 0, aggregate.getInput()); }
Example #9
Source File: RelToSqlConverter.java From dremio-oss with Apache License 2.0 | 5 votes |
/** * @see #dispatch */ public Result visit(Aggregate e) { // "select a, b, sum(x) from ( ... ) group by a, b" final Result x = visitChild(0, e.getInput()); final Builder builder; if (e.getInput() instanceof Project) { builder = x.builder(e); builder.clauses.add(Clause.GROUP_BY); } else { builder = x.builder(e, Clause.GROUP_BY); } List<SqlNode> groupByList = Expressions.list(); final List<SqlNode> selectList = new ArrayList<>(); for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); groupByList.add(field); } for (AggregateCall aggCall : e.getAggCallList()) { SqlNode aggCallSqlNode = builder.context.toSql(aggCall); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = dialect. rewriteSingleValueExpr(aggCallSqlNode); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } return builder.result(); }
Example #10
Source File: RelToSqlConverter.java From quark with Apache License 2.0 | 5 votes |
public Result visitAggregate(Aggregate e) { // "select a, b, sum(x) from ( ... ) group by a, b" final Result x = visitChild(0, e.getInput()); final Builder builder = x.builder(e, Clause.GROUP_BY); List<SqlNode> groupByList = Expressions.list(); final List<SqlNode> selectList = new ArrayList<>(); for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); groupByList.add(field); } for (AggregateCall aggCall : e.getAggCallList()) { SqlNode aggCallSqlNode = builder.context.toSql(aggCall); if (aggCall.getAggregation() instanceof SqlSingleValueAggFunction) { aggCallSqlNode = rewriteSingleValueExpr(aggCallSqlNode, dialect); } addSelect(selectList, aggCallSqlNode, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); if (!groupByList.isEmpty() || e.getAggCallList().isEmpty()) { // Some databases don't support "GROUP BY ()". We can omit it as long // as there is at least one aggregate function. builder.setGroupBy(new SqlNodeList(groupByList, POS)); } return builder.result(); }
Example #11
Source File: RelDecorrelator.java From calcite with Apache License 2.0 | 5 votes |
public void onMatch(RelOptRuleCall call) { Aggregate singleAggregate = call.rel(0); Project project = call.rel(1); Aggregate aggregate = call.rel(2); // check singleAggRel is single_value agg if ((!singleAggregate.getGroupSet().isEmpty()) || (singleAggregate.getAggCallList().size() != 1) || !(singleAggregate.getAggCallList().get(0).getAggregation() instanceof SqlSingleValueAggFunction)) { return; } // check projRel only projects one expression // check this project only projects one expression, i.e. scalar // sub-queries. List<RexNode> projExprs = project.getProjects(); if (projExprs.size() != 1) { return; } // check the input to project is an aggregate on the entire input if (!aggregate.getGroupSet().isEmpty()) { return; } // singleAggRel produces a nullable type, so create the new // projection that casts proj expr to a nullable type. final RelBuilder relBuilder = call.builder(); final RelDataType type = relBuilder.getTypeFactory() .createTypeWithNullability(projExprs.get(0).getType(), true); final RexNode cast = relBuilder.getRexBuilder().makeCast(type, projExprs.get(0)); relBuilder.push(aggregate) .project(cast); call.transformTo(relBuilder.build()); }