Repository: calcite
Updated Branches:
  refs/heads/master a547222bd -> 4ac82a30b


Deprecate SqlLiteral.SqlSymbol; SqlSymbol can now wrap any Enum


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

Branch: refs/heads/master
Commit: 9c62adac2a218b428e322e8467263cec0ed9874b
Parents: a547222
Author: Julian Hyde <[email protected]>
Authored: Fri Mar 4 13:51:02 2016 -0800
Committer: Julian Hyde <[email protected]>
Committed: Mon Mar 7 21:20:51 2016 -0800

----------------------------------------------------------------------
 .../calcite/rel/rel2sql/SqlImplementor.java     |  3 +--
 .../apache/calcite/sql/JoinConditionType.java   |  2 +-
 .../java/org/apache/calcite/sql/JoinType.java   |  2 +-
 .../org/apache/calcite/sql/SemiJoinType.java    |  2 +-
 .../java/org/apache/calcite/sql/SqlExplain.java |  6 ++---
 .../org/apache/calcite/sql/SqlExplainLevel.java |  2 +-
 .../java/org/apache/calcite/sql/SqlInsert.java  |  6 +++--
 .../apache/calcite/sql/SqlInsertKeyword.java    |  2 +-
 .../java/org/apache/calcite/sql/SqlJoin.java    | 10 ++++----
 .../java/org/apache/calcite/sql/SqlLiteral.java | 27 +++++++++++---------
 .../java/org/apache/calcite/sql/SqlSelect.java  |  3 ++-
 .../apache/calcite/sql/SqlSelectKeyword.java    |  2 +-
 .../java/org/apache/calcite/sql/SqlWindow.java  |  8 +++---
 .../calcite/sql/fun/SqlBetweenOperator.java     |  3 +--
 .../apache/calcite/sql/fun/SqlTrimFunction.java |  2 +-
 15 files changed, 42 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java 
b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index 03cc708..1f116b2 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -452,8 +452,7 @@ public abstract class SqlImplementor {
       case LITERAL:
         final RexLiteral literal = (RexLiteral) rex;
         if (literal.getTypeName() == SqlTypeName.SYMBOL) {
-          final SqlLiteral.SqlSymbol symbol =
-              (SqlLiteral.SqlSymbol) literal.getValue();
+          final Enum symbol = (Enum) literal.getValue();
           return SqlLiteral.createSymbol(symbol, POS);
         }
         switch (literal.getTypeName().getFamily()) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/JoinConditionType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/JoinConditionType.java 
b/core/src/main/java/org/apache/calcite/sql/JoinConditionType.java
index 6521944..3b449b0 100644
--- a/core/src/main/java/org/apache/calcite/sql/JoinConditionType.java
+++ b/core/src/main/java/org/apache/calcite/sql/JoinConditionType.java
@@ -21,7 +21,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
 /**
  * Enumerates the types of condition in a join expression.
  */
-public enum JoinConditionType implements SqlLiteral.SqlSymbol {
+public enum JoinConditionType {
   /**
    * Join clause has no condition, for example "FROM EMP, DEPT"
    */

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/JoinType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/JoinType.java 
b/core/src/main/java/org/apache/calcite/sql/JoinType.java
index 993c279..0e4cc05 100644
--- a/core/src/main/java/org/apache/calcite/sql/JoinType.java
+++ b/core/src/main/java/org/apache/calcite/sql/JoinType.java
@@ -21,7 +21,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
 /**
  * Enumerates the types of join.
  */
-public enum JoinType implements SqlLiteral.SqlSymbol {
+public enum JoinType {
   /**
    * Inner join.
    */

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SemiJoinType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SemiJoinType.java 
b/core/src/main/java/org/apache/calcite/sql/SemiJoinType.java
index 50b3659..38cabba 100644
--- a/core/src/main/java/org/apache/calcite/sql/SemiJoinType.java
+++ b/core/src/main/java/org/apache/calcite/sql/SemiJoinType.java
@@ -24,7 +24,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
  * Enumeration representing different join types used in correlation
  * relations.
  */
-public enum SemiJoinType implements SqlLiteral.SqlSymbol {
+public enum SemiJoinType {
   /**
    * Inner join
    */

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlExplain.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlExplain.java 
b/core/src/main/java/org/apache/calcite/sql/SqlExplain.java
index 7004caf..fc0e710 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlExplain.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlExplain.java
@@ -40,7 +40,7 @@ public class SqlExplain extends SqlCall {
   /**
    * The level of abstraction with which to display the plan.
    */
-  public static enum Depth implements SqlLiteral.SqlSymbol {
+  public enum Depth {
     TYPE, LOGICAL, PHYSICAL;
 
     /**
@@ -120,14 +120,14 @@ public class SqlExplain extends SqlCall {
    * @return detail level to be generated
    */
   public SqlExplainLevel getDetailLevel() {
-    return detailLevel.symbolValue();
+    return detailLevel.symbolValue(SqlExplainLevel.class);
   }
 
   /**
    * Returns the level of abstraction at which this plan should be displayed.
    */
   public Depth getDepth() {
-    return depth.symbolValue();
+    return depth.symbolValue(Depth.class);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlExplainLevel.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlExplainLevel.java 
b/core/src/main/java/org/apache/calcite/sql/SqlExplainLevel.java
index 4186393..0f3464f 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlExplainLevel.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlExplainLevel.java
@@ -21,7 +21,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
 /**
  * SqlExplainLevel defines detail levels for EXPLAIN PLAN.
  */
-public enum SqlExplainLevel implements SqlLiteral.SqlSymbol {
+public enum SqlExplainLevel {
   /**
    * Suppress all attributes.
    */

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlInsert.java 
b/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
index 7b58c8f..19472a7 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
@@ -80,7 +80,8 @@ public class SqlInsert extends SqlCall {
       keywords = (SqlNodeList) operand;
       break;
     case 1:
-      targetTable = (SqlIdentifier) operand;
+      assert operand instanceof SqlIdentifier;
+      targetTable = operand;
       break;
     case 2:
       source = operand;
@@ -121,7 +122,8 @@ public class SqlInsert extends SqlCall {
 
   public final SqlNode getModifierNode(SqlInsertKeyword modifier) {
     for (SqlNode keyword : keywords) {
-      SqlInsertKeyword keyword2 = ((SqlLiteral) keyword).symbolValue();
+      SqlInsertKeyword keyword2 =
+          ((SqlLiteral) keyword).symbolValue(SqlInsertKeyword.class);
       if (keyword2 == modifier) {
         return keyword;
       }

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlInsertKeyword.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlInsertKeyword.java 
b/core/src/main/java/org/apache/calcite/sql/SqlInsertKeyword.java
index e4704c7..68b3629 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlInsertKeyword.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlInsertKeyword.java
@@ -23,7 +23,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
  *
  * <p>Standard SQL has no such keywords, but extension projects may define 
them.
  */
-public enum SqlInsertKeyword implements SqlLiteral.SqlSymbol {
+public enum SqlInsertKeyword {
   UPSERT;
 
   /**

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlJoin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlJoin.java 
b/core/src/main/java/org/apache/calcite/sql/SqlJoin.java
index 12b1fb0..104d315 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlJoin.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlJoin.java
@@ -66,9 +66,9 @@ public class SqlJoin extends SqlCall {
     this.conditionType = Preconditions.checkNotNull(conditionType);
     this.condition = condition;
 
-    assert natural.getTypeName() == SqlTypeName.BOOLEAN;
-    assert conditionType.symbolValue() instanceof JoinConditionType;
-    assert joinType.symbolValue() instanceof JoinType;
+    Preconditions.checkArgument(natural.getTypeName() == SqlTypeName.BOOLEAN);
+    
Preconditions.checkNotNull(conditionType.symbolValue(JoinConditionType.class));
+    Preconditions.checkNotNull(joinType.symbolValue(JoinType.class));
   }
 
   //~ Methods ----------------------------------------------------------------
@@ -117,7 +117,7 @@ public class SqlJoin extends SqlCall {
 
   /** Returns a {@link JoinConditionType}, never null. */
   public final JoinConditionType getConditionType() {
-    return conditionType.symbolValue();
+    return conditionType.symbolValue(JoinConditionType.class);
   }
 
   public SqlLiteral getConditionTypeNode() {
@@ -126,7 +126,7 @@ public class SqlJoin extends SqlCall {
 
   /** Returns a {@link JoinType}, never null. */
   public final JoinType getJoinType() {
-    return joinType.symbolValue();
+    return joinType.symbolValue(JoinType.class);
   }
 
   public SqlLiteral getJoinTypeNode() {

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java 
b/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
index f535c53..347ea1a 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlLiteral.java
@@ -126,7 +126,7 @@ import static org.apache.calcite.util.Static.RESOURCE;
  * the SQL standard, and is not exposed to end-users. It is used to hold a
  * symbol, such as the LEADING flag in a call to the function <code>
  * TRIM([LEADING|TRAILING|BOTH] chars FROM string)</code>.</td>
- * <td>A class which implements the {@link SqlSymbol} interface</td>
+ * <td>An {@link Enum}</td>
  * </tr>
  * <tr>
  * <td>{@link SqlTypeName#INTERVAL_DAY_TIME}</td>
@@ -205,9 +205,8 @@ public class SqlLiteral extends SqlNode {
     case CHAR:
       return value instanceof NlsString;
     case SYMBOL:
-      return (value instanceof SqlSymbol)
-          || (value instanceof SqlSampleSpec)
-          || (value instanceof TimeUnitRange);
+      return (value instanceof Enum)
+          || (value instanceof SqlSampleSpec);
     case MULTISET:
       return true;
     case INTEGER: // not allowed -- use Decimal
@@ -234,18 +233,24 @@ public class SqlLiteral extends SqlNode {
    * do.
    *
    * @see #booleanValue()
-   * @see #symbolValue()
+   * @see #symbolValue(Class)
    */
   public Object getValue() {
     return value;
   }
 
   /** Returns the value as a symbol. */
-  public <E extends SqlSymbol> E symbolValue() {
+  @Deprecated // to be removed before 2.0
+  public <E extends Enum<E>> E symbolValue_() {
     //noinspection unchecked
     return (E) value;
   }
 
+  /** Returns the value as a symbol. */
+  public <E extends Enum<E>> E symbolValue(Class<E> class_) {
+    return class_.cast(value);
+  }
+
   /** Returns the value as a boolean. */
   public boolean booleanValue() {
     return (Boolean) value;
@@ -255,7 +260,7 @@ public class SqlLiteral extends SqlNode {
    * Extracts the {@link SqlSampleSpec} value from a symbol literal.
    *
    * @throws ClassCastException if the value is not a symbol literal
-   * @see #createSymbol(SqlSymbol, SqlParserPos)
+   * @see #createSymbol(Enum, SqlParserPos)
    */
   public static SqlSampleSpec sampleValue(SqlNode node) {
     return (SqlSampleSpec) ((SqlLiteral) node).value;
@@ -450,11 +455,9 @@ public class SqlLiteral extends SqlNode {
    * <code>TRAILING</code> keyword in the call <code>Trim(TRAILING 'x' FROM
    * 'Hello world!')</code>.
    *
-   * @see #symbolValue()
+   * @see #symbolValue(Class)
    */
-  public static SqlLiteral createSymbol(
-      SqlLiteral.SqlSymbol o,
-      SqlParserPos pos) {
+  public static SqlLiteral createSymbol(Enum<?> o, SqlParserPos pos) {
     return new SqlLiteral(o, SqlTypeName.SYMBOL, pos);
   }
 
@@ -580,7 +583,6 @@ public class SqlLiteral extends SqlNode {
     case DECIMAL:
     case DOUBLE:
     case BINARY:
-
       // should be handled in subtype
       throw Util.unexpected(typeName);
 
@@ -876,6 +878,7 @@ public class SqlLiteral extends SqlNode {
    * unparsed, which is sometimes not the same as the enumerated value's name
    * (e.g. "UNBOUNDED PRECEDING" versus "UnboundedPreceeding").
    */
+  @Deprecated // to be removed before 2.0
   public interface SqlSymbol {
     String name();
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlSelect.java 
b/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
index 2fa09e5..d1cb249 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlSelect.java
@@ -131,7 +131,8 @@ public class SqlSelect extends SqlCall {
 
   public final SqlNode getModifierNode(SqlSelectKeyword modifier) {
     for (SqlNode keyword : keywordList) {
-      SqlSelectKeyword keyword2 = ((SqlLiteral) keyword).symbolValue();
+      SqlSelectKeyword keyword2 =
+          ((SqlLiteral) keyword).symbolValue(SqlSelectKeyword.class);
       if (keyword2 == modifier) {
         return keyword;
       }

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlSelectKeyword.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlSelectKeyword.java 
b/core/src/main/java/org/apache/calcite/sql/SqlSelectKeyword.java
index 1ca4158..b83c832 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlSelectKeyword.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlSelectKeyword.java
@@ -21,7 +21,7 @@ import org.apache.calcite.sql.parser.SqlParserPos;
 /**
  * Defines the keywords which can occur immediately after the "SELECT" keyword.
  */
-public enum SqlSelectKeyword implements SqlLiteral.SqlSymbol {
+public enum SqlSelectKeyword {
   DISTINCT,
   ALL,
   STREAM;

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/SqlWindow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlWindow.java 
b/core/src/main/java/org/apache/calcite/sql/SqlWindow.java
index a4150c4..86adcc6 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlWindow.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlWindow.java
@@ -362,7 +362,7 @@ public class SqlWindow extends SqlCall {
    */
   public static boolean isCurrentRow(SqlNode node) {
     return (node instanceof SqlLiteral)
-        && ((SqlLiteral) node).symbolValue() == Bound.CURRENT_ROW;
+        && ((SqlLiteral) node).symbolValue(Bound.class) == Bound.CURRENT_ROW;
   }
 
   /**
@@ -370,7 +370,7 @@ public class SqlWindow extends SqlCall {
    */
   public static boolean isUnboundedPreceding(SqlNode node) {
     return (node instanceof SqlLiteral)
-        && ((SqlLiteral) node).symbolValue() == Bound.UNBOUNDED_PRECEDING;
+        && ((SqlLiteral) node).symbolValue(Bound.class) == 
Bound.UNBOUNDED_PRECEDING;
   }
 
   /**
@@ -378,7 +378,7 @@ public class SqlWindow extends SqlCall {
    */
   public static boolean isUnboundedFollowing(SqlNode node) {
     return (node instanceof SqlLiteral)
-        && ((SqlLiteral) node).symbolValue() == Bound.UNBOUNDED_FOLLOWING;
+        && ((SqlLiteral) node).symbolValue(Bound.class) == 
Bound.UNBOUNDED_FOLLOWING;
   }
 
   /**
@@ -772,7 +772,7 @@ public class SqlWindow extends SqlCall {
    * An enumeration of types of bounds in a window: <code>CURRENT ROW</code>,
    * <code>UNBOUNDED PRECEDING</code>, and <code>UNBOUNDED FOLLOWING</code>.
    */
-  enum Bound implements SqlLiteral.SqlSymbol {
+  enum Bound {
     CURRENT_ROW("CURRENT ROW"),
     UNBOUNDED_PRECEDING("UNBOUNDED PRECEDING"),
     UNBOUNDED_FOLLOWING("UNBOUNDED FOLLOWING");

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/fun/SqlBetweenOperator.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/calcite/sql/fun/SqlBetweenOperator.java 
b/core/src/main/java/org/apache/calcite/sql/fun/SqlBetweenOperator.java
index 4dff351..c4358d1 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlBetweenOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlBetweenOperator.java
@@ -23,7 +23,6 @@ import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlCallBinding;
 import org.apache.calcite.sql.SqlInfixOperator;
 import org.apache.calcite.sql.SqlKind;
-import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.SqlOperatorBinding;
@@ -93,7 +92,7 @@ public class SqlBetweenOperator extends SqlInfixOperator {
   /**
    * Defines the "SYMMETRIC" and "ASYMMETRIC" keywords.
    */
-  public enum Flag implements SqlLiteral.SqlSymbol {
+  public enum Flag {
     ASYMMETRIC, SYMMETRIC
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/9c62adac/core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java 
b/core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
index 606c21e..629d954 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
@@ -63,7 +63,7 @@ public class SqlTrimFunction extends SqlFunction {
   /**
    * Defines the enumerated values "LEADING", "TRAILING", "BOTH".
    */
-  public enum Flag implements SqlLiteral.SqlSymbol {
+  public enum Flag {
     BOTH(1, 1), LEADING(1, 0), TRAILING(0, 1);
 
     private final int left;

Reply via email to