You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by sh...@apache.org on 2018/04/09 18:10:43 UTC

calcite git commit: [CALCITE-2216] Improve extensibility of AggregateReduceFunctionsRule (Fabian Hueske)

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 <fh...@apache.org>
Authored: Fri Mar 16 16:11:15 2018 +0100
Committer: Shuyi Chen <sh...@uber.com>
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);


Re: calcite git commit: [CALCITE-2216] Improve extensibility of AggregateReduceFunctionsRule (Fabian Hueske)

Posted by Julian Hyde <jh...@apache.org>.
Thanks Shuyi for taking on some of the load of reviewing/committing. Much appreciated!

> On Apr 9, 2018, at 11:10 AM, shuyichen@apache.org 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 <fh...@apache.org>
> Authored: Fri Mar 16 16:11:15 2018 +0100
> Committer: Shuyi Chen <sh...@uber.com>
> 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);
>