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; }
