Thanks Shuyi for taking on some of the load of reviewing/committing. Much appreciated!
> On Apr 9, 2018, at 11:10 AM, [email protected] wrote: > > Repository: calcite > Updated Branches: > refs/heads/master 5331bd2f8 -> 06080ff07 > > > [CALCITE-2216] Improve extensibility of AggregateReduceFunctionsRule (Fabian > Hueske) > > Close apache/calcite#650 > > > Project: http://git-wip-us.apache.org/repos/asf/calcite/repo > Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/06080ff0 > Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/06080ff0 > Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/06080ff0 > > Branch: refs/heads/master > Commit: 06080ff072dfd72a884423bde3a3befa2c465842 > Parents: 5331bd2 > Author: Fabian Hueske <[email protected]> > Authored: Fri Mar 16 16:11:15 2018 +0100 > Committer: Shuyi Chen <[email protected]> > Committed: Mon Apr 9 11:10:05 2018 -0700 > > ---------------------------------------------------------------------- > .../rel/rules/AggregateReduceFunctionsRule.java | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/calcite/blob/06080ff0/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java > ---------------------------------------------------------------------- > diff --git > a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java > > b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java > index 957af1e..e65b6a1 100644 > --- > a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java > +++ > b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java > @@ -190,7 +190,7 @@ public class AggregateReduceFunctionsRule extends > RelOptRule { > Collections.<String>nCopies(extraArgCount, null))); > } > newAggregateRel(relBuilder, oldAggRel, newCalls); > - relBuilder.project(projList, oldAggRel.getRowType().getFieldNames()); > + newCalcRel(relBuilder, oldAggRel.getRowType(), projList); > ruleCall.transformTo(relBuilder.build()); > } > > @@ -567,6 +567,21 @@ public class AggregateReduceFunctionsRule extends > RelOptRule { > newCalls); > } > > + /** > + * Add a calc with the expressions to compute the original agg calls from > the > + * decomposed ones. > + * > + * @param relBuilder Builder of relational expressions; at the top of its > + * stack is its input > + * @param rowType The output row type of the original aggregate. > + * @param exprs The expressions to compute the original agg calls. > + */ > + protected void newCalcRel(RelBuilder relBuilder, > + RelDataType rowType, > + List<RexNode> exprs) { > + relBuilder.project(exprs, rowType.getFieldNames()); > + } > + > private RelDataType getFieldType(RelNode relNode, int i) { > final RelDataTypeField inputField = > relNode.getRowType().getFieldList().get(i); >
