You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/09/04 09:35:05 UTC

[07/10] incubator-calcite git commit: Add LogicalWindow.create()

Add LogicalWindow.create()


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/0a4fa379
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/0a4fa379
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/0a4fa379

Branch: refs/heads/master
Commit: 0a4fa379f189be4b8b7cdcb810694af939d2e5cf
Parents: f73c730
Author: Julian Hyde <jh...@apache.org>
Authored: Thu Sep 3 18:02:47 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri Sep 4 00:33:53 2015 -0700

----------------------------------------------------------------------
 .../org/apache/calcite/rel/core/Window.java     | 10 ++--
 .../calcite/rel/logical/LogicalWindow.java      | 55 ++++++++++++--------
 2 files changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0a4fa379/core/src/main/java/org/apache/calcite/rel/core/Window.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Window.java b/core/src/main/java/org/apache/calcite/rel/core/Window.java
index 103b24f..8db59cb 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Window.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Window.java
@@ -63,21 +63,21 @@ import java.util.List;
  */
 public abstract class Window extends SingleRel {
   public final ImmutableList<Group> groups;
-  public final List<RexLiteral> constants;
+  public final ImmutableList<RexLiteral> constants;
 
   /**
    * Creates a window relational expression.
    *
    * @param cluster Cluster
-   * @param child   Input relational expression
+   * @param traitSet Trait set
+   * @param input   Input relational expression
    * @param constants List of constants that are additional inputs
    * @param rowType Output row type
    * @param groups Windows
    */
-  public Window(
-      RelOptCluster cluster, RelTraitSet traits, RelNode child,
+  public Window(RelOptCluster cluster, RelTraitSet traitSet, RelNode input,
       List<RexLiteral> constants, RelDataType rowType, List<Group> groups) {
-    super(cluster, traits, child);
+    super(cluster, traitSet, input);
     this.constants = ImmutableList.copyOf(constants);
     assert rowType != null;
     this.rowType = rowType;

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0a4fa379/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
index 2e65115..ea9e3c1 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
@@ -60,16 +60,19 @@ public final class LogicalWindow extends Window {
   /**
    * Creates a LogicalWindow.
    *
+   * <p>Use {@link #create} unless you know what you're doing.
+   *
    * @param cluster Cluster
-   * @param child   Input relational expression
+   * @param traitSet Trait set
+   * @param input   Input relational expression
    * @param constants List of constants that are additional inputs
    * @param rowType Output row type
-   * @param groups Windows
+   * @param groups Window groups
    */
-  public LogicalWindow(
-      RelOptCluster cluster, RelTraitSet traits, RelNode child,
-      List<RexLiteral> constants, RelDataType rowType, List<Group> groups) {
-    super(cluster, traits, child, constants, rowType, groups);
+  public LogicalWindow(RelOptCluster cluster, RelTraitSet traitSet,
+      RelNode input, List<RexLiteral> constants, RelDataType rowType,
+      List<Group> groups) {
+    super(cluster, traitSet, input, constants, rowType, groups);
   }
 
   @Override public LogicalWindow copy(RelTraitSet traitSet,
@@ -80,6 +83,21 @@ public final class LogicalWindow extends Window {
 
   /**
    * Creates a LogicalWindow.
+   *
+   * @param input   Input relational expression
+   * @param traitSet Trait set
+   * @param constants List of constants that are additional inputs
+   * @param rowType Output row type
+   * @param groups Window groups
+   */
+  public static LogicalWindow create(RelTraitSet traitSet, RelNode input,
+      List<RexLiteral> constants, RelDataType rowType, List<Group> groups) {
+    return new LogicalWindow(input.getCluster(), traitSet, input, constants,
+        rowType, groups);
+  }
+
+  /**
+   * Creates a LogicalWindow by parsing a {@link RexProgram}.
    */
   public static RelNode create(
       RelOptCluster cluster,
@@ -94,9 +112,8 @@ public final class LogicalWindow extends Window {
 
     final int inputFieldCount = child.getRowType().getFieldCount();
 
-    final Map<RexLiteral, RexInputRef> constantPool =
-        new HashMap<RexLiteral, RexInputRef>();
-    final List<RexLiteral> constants = new ArrayList<RexLiteral>();
+    final Map<RexLiteral, RexInputRef> constantPool = new HashMap<>();
+    final List<RexLiteral> constants = new ArrayList<>();
 
     // Identify constants in the expression tree and replace them with
     // references to newly generated constant pool.
@@ -127,14 +144,12 @@ public final class LogicalWindow extends Window {
       }
     }
 
-    final Map<RexOver, Window.RexWinAggCall> aggMap =
-        new HashMap<RexOver, Window.RexWinAggCall>();
-    List<Group> groups = new ArrayList<Group>();
+    final Map<RexOver, Window.RexWinAggCall> aggMap = new HashMap<>();
+    List<Group> groups = new ArrayList<>();
     for (Map.Entry<WindowKey, Collection<RexOver>> entry
         : windowMap.asMap().entrySet()) {
       final WindowKey windowKey = entry.getKey();
-      final List<RexWinAggCall> aggCalls =
-          new ArrayList<RexWinAggCall>();
+      final List<RexWinAggCall> aggCalls = new ArrayList<>();
       for (RexOver over : entry.getValue()) {
         final RexWinAggCall aggCall =
             new RexWinAggCall(
@@ -163,15 +178,14 @@ public final class LogicalWindow extends Window {
     // Figure out the type of the inputs to the output program.
     // They are: the inputs to this rel, followed by the outputs of
     // each window.
-    final List<Window.RexWinAggCall> flattenedAggCallList =
-        new ArrayList<Window.RexWinAggCall>();
-    List<Map.Entry<String, RelDataType>> fieldList =
+    final List<Window.RexWinAggCall> flattenedAggCallList = new ArrayList<>();
+    final List<Map.Entry<String, RelDataType>> fieldList =
         new ArrayList<Map.Entry<String, RelDataType>>(
             child.getRowType().getFieldList());
     final int offset = fieldList.size();
 
     // Use better field names for agg calls that are projected.
-    Map<Integer, String> fieldNames = new HashMap<Integer, String>();
+    final Map<Integer, String> fieldNames = new HashMap<>();
     for (Ord<RexLocalRef> ref : Ord.zip(program.getProjectList())) {
       final int index = ref.e.getIndex();
       if (index >= offset) {
@@ -242,9 +256,8 @@ public final class LogicalWindow extends Window {
           }
         };
 
-    LogicalWindow window =
-        new LogicalWindow(
-            cluster, traitSet, child, constants, intermediateRowType,
+    final LogicalWindow window =
+        LogicalWindow.create(traitSet, child, constants, intermediateRowType,
             groups);
 
     // The order that the "over" calls occur in the groups and