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;
