This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit 4fdf241dfb8cc555ab28c6cba7a152e4cc4ec169
Author: Julian Hyde <[email protected]>
AuthorDate: Tue Jan 22 12:30:47 2019 -0800

    In RelFieldCollation, add a "withX" copy method for each attribute "X", and 
deprecate "copy"
    
    Annotate SqlNode.getKind() and SqlCall.getOperandList() as Nonnull.
---
 .../java/org/apache/calcite/rel/RelCollations.java |  4 ++--
 .../org/apache/calcite/rel/RelFieldCollation.java  | 26 +++++++++++++++++-----
 .../calcite/rel/metadata/RelMdCollation.java       |  2 +-
 .../rel/rules/ProjectWindowTransposeRule.java      |  2 +-
 .../java/org/apache/calcite/rex/RexProgram.java    |  3 +--
 .../main/java/org/apache/calcite/rex/RexUtil.java  |  2 +-
 .../main/java/org/apache/calcite/sql/SqlCall.java  |  5 +++--
 .../main/java/org/apache/calcite/sql/SqlNode.java  |  3 ++-
 8 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/RelCollations.java 
b/core/src/main/java/org/apache/calcite/rel/RelCollations.java
index 5d7c7bb..97bd2f9 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelCollations.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelCollations.java
@@ -195,7 +195,7 @@ public class RelCollations {
       Map<Integer, Integer> mapping) {
     return of(
         Util.transform(collation.getFieldCollations(),
-            fc -> fc.copy(mapping.get(fc.getFieldIndex()))));
+            fc -> fc.withFieldIndex(mapping.get(fc.getFieldIndex()))));
   }
 
   /** Creates a copy of this collation that changes the ordinals of input
@@ -204,7 +204,7 @@ public class RelCollations {
       Mappings.TargetMapping mapping) {
     return of(
         Util.transform(collation.getFieldCollations(),
-            fc -> fc.copy(mapping.getTarget(fc.getFieldIndex()))));
+            fc -> fc.withFieldIndex(mapping.getTarget(fc.getFieldIndex()))));
   }
 }
 
diff --git a/core/src/main/java/org/apache/calcite/rel/RelFieldCollation.java 
b/core/src/main/java/org/apache/calcite/rel/RelFieldCollation.java
index 64f3484..f837474 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelFieldCollation.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelFieldCollation.java
@@ -216,11 +216,27 @@ public class RelFieldCollation {
   /**
    * Creates a copy of this RelFieldCollation against a different field.
    */
+  public RelFieldCollation withFieldIndex(int fieldIndex) {
+    return this.fieldIndex == fieldIndex ? this
+        : new RelFieldCollation(fieldIndex, direction, nullDirection);
+  }
+
+  @Deprecated // to be removed before 2.0
   public RelFieldCollation copy(int target) {
-    if (target == fieldIndex) {
-      return this;
-    }
-    return new RelFieldCollation(target, direction, nullDirection);
+    return withFieldIndex(target);
+  }
+
+  /** Creates a copy of this RelFieldCollation with a different direction. */
+  public RelFieldCollation withDirection(Direction direction) {
+    return this.direction == direction ? this
+        : new RelFieldCollation(fieldIndex, direction, nullDirection);
+  }
+
+  /** Creates a copy of this RelFieldCollation with a different null
+   * direction. */
+  public RelFieldCollation withNullDirection(NullDirection nullDirection) {
+    return this.nullDirection == nullDirection ? this
+        : new RelFieldCollation(fieldIndex, direction, nullDirection);
   }
 
   /**
@@ -228,7 +244,7 @@ public class RelFieldCollation {
    * {@code offset} to the right.
    */
   public RelFieldCollation shift(int offset) {
-    return copy(fieldIndex + offset);
+    return withFieldIndex(fieldIndex + offset);
   }
 
   @Override public boolean equals(Object o) {
diff --git 
a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdCollation.java 
b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdCollation.java
index 529a405..b5f5751 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdCollation.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdCollation.java
@@ -276,7 +276,7 @@ public class RelMdCollation
         if (integers.isEmpty()) {
           continue loop; // cannot do this collation
         }
-        fieldCollations.add(ifc.copy(integers.iterator().next()));
+        fieldCollations.add(ifc.withFieldIndex(integers.iterator().next()));
       }
       assert !fieldCollations.isEmpty();
       collations.add(RelCollations.of(fieldCollations));
diff --git 
a/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
 
b/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
index 10afd40..b7cc9f6 100644
--- 
a/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
+++ 
b/core/src/main/java/org/apache/calcite/rel/rules/ProjectWindowTransposeRule.java
@@ -148,7 +148,7 @@ public class ProjectWindowTransposeRule extends RelOptRule {
       for (RelFieldCollation relFieldCollation : 
group.orderKeys.getFieldCollations()) {
         final int index = relFieldCollation.getFieldIndex();
         orderKeys.add(
-            relFieldCollation.copy(
+            relFieldCollation.withFieldIndex(
                 getAdjustedIndex(index, beReferred, windowInputColumn)));
       }
 
diff --git a/core/src/main/java/org/apache/calcite/rex/RexProgram.java 
b/core/src/main/java/org/apache/calcite/rex/RexProgram.java
index 9003e06..fd2e95b 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexProgram.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexProgram.java
@@ -565,8 +565,7 @@ public class RexProgram {
         if (target < 0) {
           continue loop;
         }
-        fieldCollations.add(
-            fieldCollation.copy(target));
+        fieldCollations.add(fieldCollation.withFieldIndex(target));
       }
 
       // Success -- all of the source fields of this key are mapped
diff --git a/core/src/main/java/org/apache/calcite/rex/RexUtil.java 
b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
index 322120d..bea5790 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexUtil.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
@@ -1220,7 +1220,7 @@ public class RexUtil {
     if (target < 0) {
       return null;
     }
-    return fieldCollation.copy(target);
+    return fieldCollation.withFieldIndex(target);
   }
 
   /**
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlCall.java 
b/core/src/main/java/org/apache/calcite/sql/SqlCall.java
index aeddb6f..b44a3e0 100755
--- a/core/src/main/java/org/apache/calcite/sql/SqlCall.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlCall.java
@@ -29,6 +29,7 @@ import org.apache.calcite.util.Litmus;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import javax.annotation.Nonnull;
 
 /**
  * A <code>SqlCall</code> is a call to an {@link SqlOperator operator}.
@@ -68,9 +69,9 @@ public abstract class SqlCall extends SqlNode {
     return getOperator().getKind();
   }
 
-  public abstract SqlOperator getOperator();
+  public abstract @Nonnull SqlOperator getOperator();
 
-  public abstract List<SqlNode> getOperandList();
+  public abstract @Nonnull List<SqlNode> getOperandList();
 
   @SuppressWarnings("unchecked")
   public <S extends SqlNode> S operand(int i) {
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlNode.java 
b/core/src/main/java/org/apache/calcite/sql/SqlNode.java
index 1a5a9f9..8005ec0 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlNode.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlNode.java
@@ -32,6 +32,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import javax.annotation.Nonnull;
 
 /**
  * A <code>SqlNode</code> is a SQL parse tree.
@@ -88,7 +89,7 @@ public abstract class SqlNode implements Cloneable {
    * @return a {@link SqlKind} value, never null
    * @see #isA
    */
-  public SqlKind getKind() {
+  public @Nonnull SqlKind getKind() {
     return SqlKind.OTHER;
   }
 

Reply via email to