aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Guzenko <ihor.huzenko.igs@gmail.com>2018-10-22 14:33:49 +0300
committerAman Sinha <asinha@maprtech.com>2019-02-01 16:18:01 -0800
commit3bec197bce73ed7aa2ae3fabf457c408aa7aff87 (patch)
tree2faf657f38ed91dda5b79b57fef5f432fb1c2cd7
parent35b42ebdfd645b92330ad5dcac363aa0036696a7 (diff)
DRILL-6862: Update Calcite to 1.18.0
1. Moved Calcite dependency from profile hadoop-default to general dependency managment 2. Updated Calcite version to 1.18.0-drill-r0 and Avatica version to 1.13.0 3. Hook.REL_BUILDER_SIMPLIFY moved to static block, cause now it can't be removed (fixes DRILL-6830) 4. Removed WrappedAccessor, since it was workaround fixed in CALCITE-1408 5. Fixed setting of multiple options in TestBuilder 6. Timstampadd type inference aligned with CALCITE-2699 7. Dependency update caused 417 kB increase of jdb-all jar size, so the maxsize limit was increased from 39.5 to 40 MB 8. Added test into TestDrillParquetReader to ensure that DRILL-6856 was fixed by Calcite update close apache/drill#1631
-rw-r--r--exec/java-exec/src/main/codegen/data/Parser.tdd763
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/DrillRelBuilder.java10
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java15
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java6
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/TestCTASJson.java16
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestNestedDateTimeTimestamp.java12
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet2/TestDrillParquetReader.java13
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/test/TestBuilder.java11
-rw-r--r--exec/jdbc-all/pom.xml2
-rw-r--r--exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/AvaticaDrillSqlAccessor.java6
-rw-r--r--exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java12
-rw-r--r--exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/WrappedAccessor.java447
-rw-r--r--pom.xml84
13 files changed, 867 insertions, 530 deletions
diff --git a/exec/java-exec/src/main/codegen/data/Parser.tdd b/exec/java-exec/src/main/codegen/data/Parser.tdd
index 9da80af2b..820ecb5b5 100644
--- a/exec/java-exec/src/main/codegen/data/Parser.tdd
+++ b/exec/java-exec/src/main/codegen/data/Parser.tdd
@@ -88,8 +88,767 @@
]
# List of keywords from "keywords" section that are not reserved.
- nonReservedKeywords: [
- ]
+ # Copied from calcite-core config.fmpp
+ # For details please see comment under CALCITE-2405.
+ nonReservedKeywords: [
+ "A"
+ "ABSOLUTE"
+ "ACTION"
+ "ADA"
+ "ADD"
+ "ADMIN"
+ "AFTER"
+ "ALWAYS"
+ "APPLY"
+ "ASC"
+ "ASSERTION"
+ "ASSIGNMENT"
+ "ATTRIBUTE"
+ "ATTRIBUTES"
+ "BEFORE"
+ "BERNOULLI"
+ "BREADTH"
+ "C"
+ "CASCADE"
+ "CATALOG"
+ "CATALOG_NAME"
+ "CENTURY"
+ "CHAIN"
+ "CHARACTER_SET_CATALOG"
+ "CHARACTER_SET_NAME"
+ "CHARACTER_SET_SCHEMA"
+ "CHARACTERISTICS"
+ "CHARACTERS"
+ "CLASS_ORIGIN"
+ "COBOL"
+ "COLLATION"
+ "COLLATION_CATALOG"
+ "COLLATION_NAME"
+ "COLLATION_SCHEMA"
+ "COLUMN_NAME"
+ "COMMAND_FUNCTION"
+ "COMMAND_FUNCTION_CODE"
+ "COMMITTED"
+ "CONDITION_NUMBER"
+ "CONNECTION"
+ "CONNECTION_NAME"
+ "CONSTRAINT_CATALOG"
+ "CONSTRAINT_NAME"
+ "CONSTRAINT_SCHEMA"
+ "CONSTRAINTS"
+ "CONSTRUCTOR"
+ "CONTINUE"
+ "CURSOR_NAME"
+ "DATA"
+ "DATABASE"
+ "DATETIME_INTERVAL_CODE"
+ "DATETIME_INTERVAL_PRECISION"
+ "DECADE"
+ "DEFAULTS"
+ "DEFERRABLE"
+ "DEFERRED"
+ "DEFINED"
+ "DEFINER"
+ "DEGREE"
+ "DEPTH"
+ "DERIVED"
+ "DESC"
+ "DESCRIPTION"
+ "DESCRIPTOR"
+ "DIAGNOSTICS"
+ "DISPATCH"
+ "DOMAIN"
+ "DOW"
+ "DOY"
+ "DYNAMIC_FUNCTION"
+ "DYNAMIC_FUNCTION_CODE"
+ "EPOCH"
+ "EXCEPTION"
+ "EXCLUDE"
+ "EXCLUDING"
+ "FINAL"
+ "FIRST"
+ "FOLLOWING"
+ "FORTRAN"
+ "FOUND"
+ "FRAC_SECOND"
+ "G"
+ "GENERAL"
+ "GENERATED"
+ "GEOMETRY"
+ "GO"
+ "GOTO"
+ "GRANTED"
+ "HIERARCHY"
+ "IMMEDIATE"
+ "IMMEDIATELY"
+ "IMPLEMENTATION"
+ "INCLUDING"
+ "INCREMENT"
+ "INITIALLY"
+ "INPUT"
+ "INSTANCE"
+ "INSTANTIABLE"
+ "INVOKER"
+ "ISODOW"
+ "ISOYEAR"
+ "ISOLATION"
+ "JAVA"
+ "JSON"
+ "K"
+ "KEY"
+ "KEY_MEMBER"
+ "KEY_TYPE"
+ "LABEL"
+ "LAST"
+ "LENGTH"
+ "LEVEL"
+ "LIBRARY"
+ "LOCATOR"
+ "M"
+ "MAP"
+ "MATCHED"
+ "MAXVALUE"
+ "MICROSECOND"
+ "MESSAGE_LENGTH"
+ "MESSAGE_OCTET_LENGTH"
+ "MESSAGE_TEXT"
+ "MILLISECOND"
+ "MILLENNIUM"
+ "MINVALUE"
+ "MORE_"
+ "MUMPS"
+ "NAME"
+ "NAMES"
+ "NANOSECOND"
+ "NESTING"
+ "NORMALIZED"
+ "NULLABLE"
+ "NULLS"
+ "NUMBER"
+ "OBJECT"
+ "OCTETS"
+ "OPTION"
+ "OPTIONS"
+ "ORDERING"
+ "ORDINALITY"
+ "OTHERS"
+ "OUTPUT"
+ "OVERRIDING"
+ "PAD"
+ "PARAMETER_MODE"
+ "PARAMETER_NAME"
+ "PARAMETER_ORDINAL_POSITION"
+ "PARAMETER_SPECIFIC_CATALOG"
+ "PARAMETER_SPECIFIC_NAME"
+ "PARAMETER_SPECIFIC_SCHEMA"
+ "PARTIAL"
+ "PASCAL"
+ "PASSTHROUGH"
+ "PAST"
+ "PATH"
+ "PLACING"
+ "PLAN"
+ "PLI"
+ "PRECEDING"
+ "PRESERVE"
+ "PRIOR"
+ "PRIVILEGES"
+ "PUBLIC"
+ "QUARTER"
+ "READ"
+ "RELATIVE"
+ "REPEATABLE"
+ "REPLACE"
+ "RESTART"
+ "RESTRICT"
+ "RETURNED_CARDINALITY"
+ "RETURNED_LENGTH"
+ "RETURNED_OCTET_LENGTH"
+ "RETURNED_SQLSTATE"
+ "ROLE"
+ "ROUTINE"
+ "ROUTINE_CATALOG"
+ "ROUTINE_NAME"
+ "ROUTINE_SCHEMA"
+ "ROW_COUNT"
+ "SCALE"
+ "SCHEMA"
+ "SCHEMA_NAME"
+ "SCOPE_CATALOGS"
+ "SCOPE_NAME"
+ "SCOPE_SCHEMA"
+ "SECTION"
+ "SECURITY"
+ "SELF"
+ "SEQUENCE"
+ "SERIALIZABLE"
+ "SERVER"
+ "SERVER_NAME"
+ "SESSION"
+ "SETS"
+ "SIMPLE"
+ "SIZE"
+ "SOURCE"
+ "SPACE"
+ "SPECIFIC_NAME"
+ "SQL_BIGINT"
+ "SQL_BINARY"
+ "SQL_BIT"
+ "SQL_BLOB"
+ "SQL_BOOLEAN"
+ "SQL_CHAR"
+ "SQL_CLOB"
+ "SQL_DATE"
+ "SQL_DECIMAL"
+ "SQL_DOUBLE"
+ "SQL_FLOAT"
+ "SQL_INTEGER"
+ "SQL_INTERVAL_DAY"
+ "SQL_INTERVAL_DAY_TO_HOUR"
+ "SQL_INTERVAL_DAY_TO_MINUTE"
+ "SQL_INTERVAL_DAY_TO_SECOND"
+ "SQL_INTERVAL_HOUR"
+ "SQL_INTERVAL_HOUR_TO_MINUTE"
+ "SQL_INTERVAL_HOUR_TO_SECOND"
+ "SQL_INTERVAL_MINUTE"
+ "SQL_INTERVAL_MINUTE_TO_SECOND"
+ "SQL_INTERVAL_MONTH"
+ "SQL_INTERVAL_SECOND"
+ "SQL_INTERVAL_YEAR"
+ "SQL_INTERVAL_YEAR_TO_MONTH"
+ "SQL_LONGVARBINARY"
+ "SQL_LONGVARNCHAR"
+ "SQL_LONGVARCHAR"
+ "SQL_NCHAR"
+ "SQL_NCLOB"
+ "SQL_NUMERIC"
+ "SQL_NVARCHAR"
+ "SQL_REAL"
+ "SQL_SMALLINT"
+ "SQL_TIME"
+ "SQL_TIMESTAMP"
+ "SQL_TINYINT"
+ "SQL_TSI_DAY"
+ "SQL_TSI_FRAC_SECOND"
+ "SQL_TSI_HOUR"
+ "SQL_TSI_MICROSECOND"
+ "SQL_TSI_MINUTE"
+ "SQL_TSI_MONTH"
+ "SQL_TSI_QUARTER"
+ "SQL_TSI_SECOND"
+ "SQL_TSI_WEEK"
+ "SQL_TSI_YEAR"
+ "SQL_VARBINARY"
+ "SQL_VARCHAR"
+ "STATE"
+ "STATEMENT"
+ "STRUCTURE"
+ "STYLE"
+ "SUBCLASS_ORIGIN"
+ "SUBSTITUTE"
+ "TABLE_NAME"
+ "TEMPORARY"
+ "TIES"
+ "TIMESTAMPADD"
+ "TIMESTAMPDIFF"
+ "TOP_LEVEL_COUNT"
+ "TRANSACTION"
+ "TRANSACTIONS_ACTIVE"
+ "TRANSACTIONS_COMMITTED"
+ "TRANSACTIONS_ROLLED_BACK"
+ "TRANSFORM"
+ "TRANSFORMS"
+ "TRIGGER_CATALOG"
+ "TRIGGER_NAME"
+ "TRIGGER_SCHEMA"
+ "TYPE"
+ "UNBOUNDED"
+ "UNCOMMITTED"
+ "UNDER"
+ "UNNAMED"
+ "USAGE"
+ "USER_DEFINED_TYPE_CATALOG"
+ "USER_DEFINED_TYPE_CODE"
+ "USER_DEFINED_TYPE_NAME"
+ "USER_DEFINED_TYPE_SCHEMA"
+ "VERSION"
+ "VIEW"
+ "WEEK"
+ "WRAPPER"
+ "WORK"
+ "WRITE"
+ "XML"
+ "ZONE"
+
+ # The following keywords are reserved in core Calcite,
+ # are reserved in some version of SQL,
+ # but are not reserved in Babel.
+ #
+ # Words that are commented out (e.g. "AND") are still reserved.
+ # These are the most important reserved words, and SQL cannot be
+ # unambiguously parsed if they are not reserved. For example, if
+ # "INNER" is not reserved then in the query
+ #
+ # select * from emp inner join dept using (deptno)"
+ #
+ # "inner" could be a table alias for "emp".
+ #
+ "ABS",
+ "ABSOLUTE",
+ "ACTION",
+ "ADD",
+ "AFTER",
+ "ALL",
+ "ALLOCATE",
+ "ALLOW",
+ "ALTER",
+ "AND",
+# "ANY",
+ "ARE",
+ "ARRAY",
+# # "ARRAY_AGG", # not a keyword in Calcite
+ "ARRAY_MAX_CARDINALITY",
+ "AS",
+ "ASC",
+ "ASENSITIVE",
+ "ASSERTION",
+ "ASYMMETRIC",
+ "AT",
+ "ATOMIC",
+ "AUTHORIZATION",
+ "AVG",
+ "BEFORE",
+ "BEGIN",
+ "BEGIN_FRAME",
+ "BEGIN_PARTITION",
+ "BETWEEN",
+ "BIGINT",
+ "BINARY",
+ "BIT",
+# # "BIT_LENGTH", # not a keyword in Calcite
+ "BLOB",
+ "BOOLEAN",
+ "BOTH",
+ "BREADTH",
+ "BY",
+# "CALL",
+ "CALLED",
+ "CARDINALITY",
+ "CASCADE",
+ "CASCADED",
+# "CASE",
+ "CAST",
+ "CATALOG",
+ "CEIL",
+ "CEILING",
+ "CHAR",
+ "CHARACTER",
+ "CHARACTER_LENGTH",
+ "CHAR_LENGTH",
+ "CHECK",
+ "CLASSIFIER",
+ "CLOB",
+ "CLOSE",
+ "COALESCE",
+ "COLLATE",
+ "COLLATION",
+ "COLLECT",
+ "COLUMN",
+ "COMMIT",
+ "CONDITION",
+ "CONNECT",
+ "CONNECTION",
+ "CONSTRAINT",
+ "CONSTRAINTS",
+ "CONSTRUCTOR",
+ "CONTAINS",
+ "CONTINUE",
+ "CONVERT",
+ "CORR",
+ "CORRESPONDING",
+ "COUNT",
+ "COVAR_POP",
+ "COVAR_SAMP",
+# "CREATE",
+# "CROSS",
+ "CUBE",
+ "CUME_DIST",
+# "CURRENT",
+ "CURRENT_CATALOG",
+ "CURRENT_DATE",
+ "CURRENT_DEFAULT_TRANSFORM_GROUP",
+ "CURRENT_PATH",
+ "CURRENT_ROLE",
+ "CURRENT_ROW",
+ "CURRENT_SCHEMA",
+ "CURRENT_TIME",
+ "CURRENT_TIMESTAMP",
+ "CURRENT_TRANSFORM_GROUP_FOR_TYPE",
+ "CURRENT_USER",
+# "CURSOR",
+ "CYCLE",
+ "DATA",
+# "DATE",
+ "DAY",
+# # "DAYS", # not a keyword in Calcite
+ "DEALLOCATE",
+ "DEC",
+ "DECIMAL",
+ "DECLARE",
+# # "DEFAULT",
+ "DEFERRABLE",
+ "DEFERRED",
+# "DEFINE",
+# "DELETE",
+ "DENSE_RANK",
+ "DEPTH",
+ "DEREF",
+ "DESC",
+# "DESCRIBE", # must be reserved
+ "DESCRIPTOR",
+ "DETERMINISTIC",
+ "DIAGNOSTICS",
+ "DISALLOW",
+ "DISCONNECT",
+# "DISTINCT",
+# # "DO", # not a keyword in Calcite
+ "DOMAIN",
+ "DOUBLE",
+# "DROP", # probably must be reserved
+ "DYNAMIC",
+ "EACH",
+ "ELEMENT",
+ "ELSE",
+# # "ELSEIF", # not a keyword in Calcite
+ "EMPTY",
+ "END",
+# # "END-EXEC", # not a keyword in Calcite, and contains '-'
+ "END_FRAME",
+ "END_PARTITION",
+ "EQUALS",
+ "ESCAPE",
+ "EVERY",
+# "EXCEPT", # must be reserved
+ "EXCEPTION",
+ "EXEC",
+ "EXECUTE",
+ "EXISTS",
+# # "EXIT", # not a keyword in Calcite
+ "EXP",
+# "EXPLAIN", # must be reserved
+ "EXTEND",
+ "EXTERNAL",
+ "EXTRACT",
+ "FALSE",
+# "FETCH",
+ "FILTER",
+ "FIRST",
+ "FIRST_VALUE",
+ "FLOAT",
+ "FLOOR",
+ "FOR",
+ "FOREIGN",
+# # "FOREVER", # not a keyword in Calcite
+ "FOUND",
+ "FRAME_ROW",
+ "FREE",
+# "FROM", # must be reserved
+# "FULL", # must be reserved
+ "FUNCTION",
+ "FUSION",
+ "GENERAL",
+ "GET",
+ "GLOBAL",
+ "GO",
+ "GOTO",
+# "GRANT",
+# "GROUP",
+# "GROUPING",
+ "GROUPS",
+# # "HANDLER", # not a keyword in Calcite
+# "HAVING",
+ "HOLD",
+ "HOUR",
+# # "HOURS", # not a keyword in Calcite
+ "IDENTITY",
+# # "IF", # not a keyword in Calcite
+ "IMMEDIATE",
+ "IMMEDIATELY",
+ "IMPORT",
+# "IN",
+ "INDICATOR",
+ "INITIAL",
+ "INITIALLY",
+# "INNER",
+ "INOUT",
+ "INPUT",
+ "INSENSITIVE",
+# "INSERT",
+ "INT",
+ "INTEGER",
+# "INTERSECT",
+ "INTERSECTION",
+# "INTERVAL",
+# "INTO",
+ "IS",
+ "ISOLATION",
+# # "ITERATE", # not a keyword in Calcite
+# "JOIN",
+# # "KEEP", # not a keyword in Calcite
+ "KEY",
+ "LAG",
+ "LANGUAGE",
+ "LARGE",
+ "LAST",
+ "LAST_VALUE",
+# "LATERAL",
+ "LEAD",
+ "LEADING",
+# # "LEAVE", # not a keyword in Calcite
+# "LEFT",
+ "LEVEL",
+ "LIKE",
+ "LIKE_REGEX",
+# "LIMIT",
+ "LN",
+ "LOCAL",
+ "LOCALTIME",
+ "LOCALTIMESTAMP",
+ "LOCATOR",
+# # "LOOP", # not a keyword in Calcite
+ "LOWER",
+ "MAP",
+ "MATCH",
+ "MATCHES",
+ "MATCH_NUMBER",
+# "MATCH_RECOGNIZE",
+ "MAX",
+# # "MAX_CARDINALITY", # not a keyword in Calcite
+ "MEASURES",
+ "MEMBER",
+# "MERGE",
+ "METHOD",
+ "MIN",
+# "MINUS",
+ "MINUTE",
+# # "MINUTES", # not a keyword in Calcite
+ "MOD",
+ "MODIFIES",
+ "MODULE",
+ "MONTH",
+ "MULTISET",
+ "NAMES",
+ "NATIONAL",
+# "NATURAL",
+ "NCHAR",
+ "NCLOB",
+# "NEW",
+# "NEXT",
+ "NO",
+ "NONE",
+ "NORMALIZE",
+ "NOT",
+ "NTH_VALUE",
+ "NTILE",
+# "NULL",
+ "NULLIF",
+ "NUMERIC",
+ "OBJECT",
+ "OCCURRENCES_REGEX",
+ "OCTET_LENGTH",
+ "OF",
+# "OFFSET",
+ "OLD",
+ "OMIT",
+# "ON",
+ "ONE",
+ "ONLY",
+ "OPEN",
+ "OPTION",
+ "OR",
+# "ORDER",
+ "ORDINALITY",
+ "OUT",
+# "OUTER",
+ "OUTPUT",
+# "OVER",
+ "OVERLAPS",
+ "OVERLAY",
+ "PAD",
+ "PARAMETER",
+ "PARTIAL",
+# "PARTITION",
+ "PATH",
+# "PATTERN",
+ "PER",
+ "PERCENT",
+ "PERCENTILE_CONT",
+ "PERCENTILE_DISC",
+ "PERCENT_RANK",
+ "PERIOD",
+ "PERMUTE",
+ "PORTION",
+ "POSITION",
+ "POSITION_REGEX",
+ "POWER",
+ "PRECEDES",
+ "PRECISION",
+ "PREPARE",
+ "PRESERVE",
+ "PREV",
+ "PRIMARY",
+ "PRIOR",
+ "PRIVILEGES",
+ "PROCEDURE",
+ "PUBLIC",
+# "RANGE",
+ "RANK",
+ "READ",
+ "READS",
+ "REAL",
+ "RECURSIVE",
+ "REF",
+ "REFERENCES",
+ "REFERENCING",
+ "REGR_AVGX",
+ "REGR_AVGY",
+ "REGR_COUNT",
+ "REGR_INTERCEPT",
+ "REGR_R2",
+ "REGR_SLOPE",
+ "REGR_SXX",
+ "REGR_SXY",
+ "REGR_SYY",
+ "RELATIVE",
+ "RELEASE",
+# # "REPEAT", # not a keyword in Calcite
+ "RESET",
+# # "RESIGNAL", # not a keyword in Calcite
+ "RESTRICT",
+ "RESULT",
+ "RETURN",
+ "RETURNS",
+ "REVOKE",
+# "RIGHT",
+ "ROLE",
+ "ROLLBACK",
+# "ROLLUP",
+ "ROUTINE",
+# "ROW",
+# "ROWS",
+ "ROW_NUMBER",
+ "RUNNING",
+ "SAVEPOINT",
+ "SCHEMA",
+ "SCOPE",
+ "SCROLL",
+ "SEARCH",
+ "SECOND",
+# # "SECONDS", # not a keyword in Calcite
+ "SECTION",
+ "SEEK",
+# "SELECT",
+ "SENSITIVE",
+ "SESSION",
+ "SESSION_USER",
+# "SET",
+# "SETS",
+ "SHOW",
+# # "SIGNAL", # not a keyword in Calcite
+ "SIMILAR",
+ "SIZE",
+# # "SKIP", # messes with JavaCC's <SKIP> token
+ "SMALLINT",
+# "SOME",
+ "SPACE",
+ "SPECIFIC",
+ "SPECIFICTYPE",
+ "SQL",
+# # "SQLCODE", # not a keyword in Calcite
+# # "SQLERROR", # not a keyword in Calcite
+ "SQLEXCEPTION",
+ "SQLSTATE",
+ "SQLWARNING",
+ "SQRT",
+ "START",
+ "STATE",
+ "STATIC",
+ "STDDEV_POP",
+ "STDDEV_SAMP",
+# "STREAM",
+ "SUBMULTISET",
+ "SUBSET",
+ "SUBSTRING",
+ "SUBSTRING_REGEX",
+ "SUCCEEDS",
+ "SUM",
+ "SYMMETRIC",
+ "SYSTEM",
+ "SYSTEM_TIME",
+ "SYSTEM_USER",
+# "TABLE",
+# "TABLESAMPLE",
+ "TEMPORARY",
+# "THEN",
+# "TIME",
+# "TIMESTAMP",
+ "TIMEZONE_HOUR",
+ "TIMEZONE_MINUTE",
+ "TINYINT",
+ "TO",
+ "TRAILING",
+ "TRANSACTION",
+ "TRANSLATE",
+ "TRANSLATE_REGEX",
+ "TRANSLATION",
+ "TREAT",
+ "TRIGGER",
+ "TRIM",
+ "TRIM_ARRAY",
+ "TRUE",
+ "TRUNCATE",
+ "UESCAPE",
+ "UNDER",
+# # "UNDO", # not a keyword in Calcite
+# "UNION",
+ "UNIQUE",
+ "UNKNOWN",
+# "UNNEST",
+# # "UNTIL", # not a keyword in Calcite
+# "UPDATE",
+ "UPPER",
+ "UPSERT",
+ "USAGE",
+ "USER",
+# "USING",
+ "VALUE",
+# "VALUES",
+ "VALUE_OF",
+ "VARBINARY",
+ "VARCHAR",
+ "VARYING",
+ "VAR_POP",
+ "VAR_SAMP",
+ "VERSION",
+ "VERSIONING",
+# # "VERSIONS", # not a keyword in Calcite
+ "VIEW",
+# "WHEN",
+ "WHENEVER",
+# "WHERE",
+# # "WHILE", # not a keyword in Calcite
+ "WIDTH_BUCKET",
+# "WINDOW",
+# "WITH",
+ "WITHIN",
+ "WITHOUT",
+ "WORK",
+ "WRITE",
+ "YEAR",
+ # "YEARS", # not a keyword in Calcite
+ "ZONE",
+ ]
# List of additional join types. Each is a method with no arguments.
# Example: LeftSemiJoin()
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/DrillRelBuilder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/DrillRelBuilder.java
index 1ec300daf..22597dc51 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/DrillRelBuilder.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/DrillRelBuilder.java
@@ -67,4 +67,14 @@ public class DrillRelBuilder extends RelBuilder {
public static RelBuilderFactory proto(Object... factories) {
return proto(Contexts.of(factories));
}
+
+ /**
+ * Disables combining of consecutive {@link org.apache.calcite.rel.core.Project} nodes.
+ * See comments under CALCITE-2470 for details.
+ * @return false
+ */
+ @Override
+ protected boolean shouldMergeProject() {
+ return false;
+ }
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java
index 154bf8cbb..62d6f325d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java
@@ -119,6 +119,14 @@ public class SqlConverter {
private VolcanoPlanner planner;
private boolean useRootSchema = false;
+ static {
+ /*
+ * Sets value to false to avoid simplifying project expressions
+ * during creating new projects since it may cause changing data mode
+ * which causes to assertion errors during type validation
+ */
+ Hook.REL_BUILDER_SIMPLIFY.add(Hook.propertyJ(false));
+ }
public SqlConverter(QueryContext context) {
this.settings = context.getPlannerSettings();
@@ -373,13 +381,6 @@ public class SqlConverter {
new SqlToRelConverter(new Expander(), validator, catalog, cluster, DrillConvertletTable.INSTANCE,
sqlToRelConverterConfig);
- /*
- * Sets value to false to avoid simplifying project expressions
- * during creating new projects since it may cause changing data mode
- * which causes to assertion errors during type validation
- */
- Hook.REL_BUILDER_SIMPLIFY.add(Hook.propertyJ(false));
-
//To avoid unexpected column errors set a value of top to false
final RelRoot rel = sqlToRelConverter.convertQuery(validatedNode, false, false);
return rel.withRel(sqlToRelConverter.flattenTypes(rel.rel, true));
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java
index 3319104dc..9b0142405 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java
@@ -593,7 +593,11 @@ public class TypeInferenceUtils {
case SECOND:
case MINUTE:
case HOUR:
- sqlTypeName = SqlTypeName.TIMESTAMP;
+ if (inputTypeName == SqlTypeName.TIME) {
+ sqlTypeName = SqlTypeName.TIME;
+ } else {
+ sqlTypeName = SqlTypeName.TIMESTAMP;
+ }
break;
default:
sqlTypeName = SqlTypeName.ANY;
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestCTASJson.java b/exec/java-exec/src/test/java/org/apache/drill/TestCTASJson.java
index 332de099d..bbcd00b0a 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestCTASJson.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestCTASJson.java
@@ -39,13 +39,13 @@ public class TestCTASJson extends PlanTestBase {
.sqlQuery(query)
.ordered()
.jsonBaselineFile("json/" + testName + ".json")
- .optionSettingQueriesForTestQuery("alter session set store.format = 'json' ")
+ .optionSettingQueriesForTestQuery("alter session set `store.format` = 'json' ")
.optionSettingQueriesForTestQuery("alter session set store.json.writer.skip_null_fields = true") // DEFAULT
.build()
.run();
} finally {
test("drop table " + testName + "_json");
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.writer.skip_null_fields ");
}
}
@@ -67,13 +67,13 @@ public class TestCTASJson extends PlanTestBase {
.sqlQuery(query)
.ordered()
.jsonBaselineFile("json/" + testName + "_out.json")
- .optionSettingQueriesForTestQuery("alter session set store.format = 'json' ")
+ .optionSettingQueriesForTestQuery("alter session set `store.format` = 'json' ")
.optionSettingQueriesForTestQuery("alter session set store.json.writer.skip_null_fields = false") // change from DEFAULT
.build()
.run();
} finally{
test("drop table " + testName + "_json" );
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.writer.skip_null_fields ");
}
@@ -96,14 +96,14 @@ public class TestCTASJson extends PlanTestBase {
.sqlQuery(query)
.ordered()
.jsonBaselineFile("json/" + testName + ".json")
- .optionSettingQueriesForTestQuery("alter session set store.format = 'json' ")
+ .optionSettingQueriesForTestQuery("alter session set `store.format` = 'json' ")
.optionSettingQueriesForTestQuery(
"alter session set store.json.writer.skip_null_fields = true") // DEFAULT
.build()
.run();
}finally{
test("drop table " + testName + "_json" );
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.writer.skip_null_fields ");
}
@@ -126,14 +126,14 @@ public class TestCTASJson extends PlanTestBase {
.sqlQuery(query)
.ordered()
.jsonBaselineFile("json/" + testName + "_out.json")
- .optionSettingQueriesForTestQuery("alter session set store.format = 'json' ")
+ .optionSettingQueriesForTestQuery("alter session set `store.format` = 'json' ")
.optionSettingQueriesForTestQuery(
"alter session set store.json.writer.skip_null_fields = false") // change from DEFAULT
.build()
.run();
} finally {
test("drop table " + testName + "_json" );
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.writer.skip_null_fields ");
}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestNestedDateTimeTimestamp.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestNestedDateTimeTimestamp.java
index 6a0aa78fc..321dd538f 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestNestedDateTimeTimestamp.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestNestedDateTimeTimestamp.java
@@ -119,7 +119,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
String query = String.format("select * from %s limit 1", DATAFILE);
String testName = "ctas_nested_datetime";
try {
- test("alter session set store.format = 'json'");
+ test("alter session set `store.format` = 'json'");
test("alter session set store.json.extended_types = false");
test("use dfs.tmp");
test("create table " + testName + "_json as " + query);
@@ -129,7 +129,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
testBuilder().sqlQuery(readQuery).ordered().jsonBaselineFile("baseline_nested_datetime.json").build().run();
} finally {
test("drop table " + testName + "_json");
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.extended_types ");
}
}
@@ -142,7 +142,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
String query = String.format("select * from %s limit 1", DATAFILE);
String testName = "ctas_nested_datetime_extended";
try {
- test("alter session set store.format = 'json'");
+ test("alter session set `store.format` = 'json'");
test("alter session set store.json.extended_types = true");
test("use dfs.tmp");
test("create table " + testName + "_json as " + query);
@@ -152,7 +152,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
testBuilder().sqlQuery(readQuery).ordered().jsonBaselineFile("datetime.parquet").build().run();
} finally {
test("drop table " + testName + "_json");
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
test("alter session reset store.json.extended_types ");
}
}
@@ -165,7 +165,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
String query = String.format("select * from %s limit 1", DATAFILE);
String testName = "ctas_nested_datetime_extended";
try {
- test("alter session set store.format = 'parquet'");
+ test("alter session set `store.format` = 'parquet'");
test("use dfs.tmp");
test("create table " + testName + "_parquet as " + query);
@@ -174,7 +174,7 @@ public class TestNestedDateTimeTimestamp extends BaseTestQuery {
testBuilder().sqlQuery(readQuery).ordered().jsonBaselineFile("datetime.parquet").build().run();
} finally {
test("drop table " + testName + "_parquet");
- test("alter session reset store.format ");
+ test("alter session reset `store.format` ");
}
}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet2/TestDrillParquetReader.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet2/TestDrillParquetReader.java
index 80fb495ba..4b5ed7ae0 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet2/TestDrillParquetReader.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet2/TestDrillParquetReader.java
@@ -434,4 +434,17 @@ public class TestDrillParquetReader extends BaseTestQuery {
.build().run();
}
+ @Test // DRILL-6856
+ public void testIsTrueOrNullCondition() throws Exception {
+ testBuilder()
+ .sqlQuery("SELECT col_bln " +
+ "FROM cp.`parquetFilterPush/blnTbl/0_0_2.parquet` " +
+ "WHERE col_bln IS true OR col_bln IS null " +
+ "ORDER BY col_bln")
+ .ordered()
+ .baselineColumns("col_bln")
+ .baselineValuesForSingleColumn(true, null)
+ .go();
+ }
+
}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/test/TestBuilder.java b/exec/java-exec/src/test/java/org/apache/drill/test/TestBuilder.java
index 37e05cd7c..6c4cdadb4 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/test/TestBuilder.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/test/TestBuilder.java
@@ -30,6 +30,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.drill.common.expression.LogicalExpression;
import org.apache.drill.common.expression.SchemaPath;
@@ -70,7 +71,7 @@ public class TestBuilder {
protected Map<SchemaPath, TypeProtos.MajorType> baselineTypeMap;
// queries to run before the baseline or test queries, can be used to set options
private String baselineOptionSettingQueries;
- private String testOptionSettingQueries;
+ private String testOptionSettingQueries = "";
// two different methods are available for comparing ordered results, the default reads all of the records
// into giant lists of objects, like one giant on-heap batch of 'vectors'
// this flag enables the other approach which iterates through a hyper batch for the test query results and baseline
@@ -110,7 +111,9 @@ public class TestBuilder {
this.approximateEquality = approximateEquality;
this.baselineTypeMap = baselineTypeMap;
this.baselineOptionSettingQueries = baselineOptionSettingQueries;
- this.testOptionSettingQueries = testOptionSettingQueries;
+ this.testOptionSettingQueries = StringUtils.isNotEmpty(testOptionSettingQueries)
+ ? testOptionSettingQueries.concat(" ; ")
+ : testOptionSettingQueries;
this.highPerformanceComparison = highPerformanceComparison;
this.expectedNumBatches = expectedNumBatches;
}
@@ -205,12 +208,12 @@ public class TestBuilder {
*/
public TestBuilder optionSettingQueriesForTestQuery(String queries) {
- testOptionSettingQueries = queries;
+ testOptionSettingQueries += queries.concat(" ; ");
return this;
}
public TestBuilder optionSettingQueriesForTestQuery(String query, Object... args) throws Exception {
- testOptionSettingQueries = String.format(query, args);
+ testOptionSettingQueries += String.format(query, args).concat(" ; ");
return this;
}
diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml
index d19003f04..67a3bb8af 100644
--- a/exec/jdbc-all/pom.xml
+++ b/exec/jdbc-all/pom.xml
@@ -512,7 +512,7 @@
This is likely due to you adding new dependencies to a java-exec and not updating the excludes in this module. This is important as it minimizes the size of the dependency of Drill application users.
</message>
- <maxsize>39500000</maxsize>
+ <maxsize>40000000</maxsize>
<minsize>15000000</minsize>
<files>
<file>${project.build.directory}/drill-jdbc-all-${project.version}.jar</file>
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/AvaticaDrillSqlAccessor.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/AvaticaDrillSqlAccessor.java
index a4d9e96fe..7b279aaa6 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/AvaticaDrillSqlAccessor.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/AvaticaDrillSqlAccessor.java
@@ -30,6 +30,7 @@ import java.sql.Ref;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.SQLXML;
+import java.sql.Struct;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
@@ -208,6 +209,11 @@ public class AvaticaDrillSqlAccessor implements Accessor {
}
@Override
+ public Struct getStruct() throws SQLException {
+ throw new SQLFeatureNotSupportedException();
+ }
+
+ @Override
public Date getDate(Calendar calendar) throws SQLException {
return underlyingAccessor.getDate(getCurrentRecordNumber());
}
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
index e3cf4bb16..59483937e 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
@@ -35,8 +35,6 @@ import java.sql.SQLXML;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
-import java.util.ArrayList;
-import java.util.List;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
@@ -47,7 +45,6 @@ import org.apache.calcite.avatica.ColumnMetaData;
import org.apache.calcite.avatica.Meta;
import org.apache.calcite.avatica.QueryState;
import org.apache.calcite.avatica.util.Cursor;
-import org.apache.calcite.avatica.util.Cursor.Accessor;
import org.apache.drill.jdbc.AlreadyClosedSqlException;
import org.apache.drill.jdbc.DrillResultSet;
import org.apache.drill.jdbc.ExecutionCanceledSqlException;
@@ -1267,15 +1264,8 @@ public class DrillResultSetImpl extends AvaticaResultSet implements DrillResultS
connection.getDriver().handler.onStatementExecute(statement, null);
if (signature.cursorFactory != null) {
- // Avatica accessors have to be wrapped to match Drill behaviour regarding exception thrown
super.execute();
- List<Accessor> wrappedAccessorList = new ArrayList<>(accessorList.size());
- for(Accessor accessor: accessorList) {
- wrappedAccessorList.add(new WrappedAccessor(accessor));
- }
- this.accessorList = wrappedAccessorList;
- }
- else {
+ } else {
DrillCursor drillCursor = new DrillCursor(connection, statement, signature);
//Getting handle to elapsed timer for timeout purposes
this.elapsedTimer = drillCursor.getElapsedTimer();
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/WrappedAccessor.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/WrappedAccessor.java
deleted file mode 100644
index 22c2b961b..000000000
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/WrappedAccessor.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.drill.jdbc.impl;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.net.URL;
-import java.sql.Array;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.Date;
-import java.sql.NClob;
-import java.sql.Ref;
-import java.sql.SQLException;
-import java.sql.SQLXML;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.Calendar;
-import java.util.Map;
-
-import org.apache.calcite.avatica.util.Cursor.Accessor;
-
-/**
- * Wraps Avatica {@code Accessor} instances to catch convertion exception
- * which are thrown as {@code RuntimeException} and throws {@code SQLException}
- * instead
- *
- */
-public class WrappedAccessor implements Accessor {
- private final Accessor delegate;
-
- public WrappedAccessor(Accessor delegate) {
- this.delegate = delegate;
- }
-
- @Override
- public boolean wasNull() throws SQLException {
- return delegate.wasNull();
- }
-
- @Override
- public String getString() throws SQLException {
- try {
- return delegate.getString();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public boolean getBoolean() throws SQLException {
- try {
- return delegate.getBoolean();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public byte getByte() throws SQLException {
- try {
- return delegate.getByte();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public short getShort() throws SQLException {
- try {
- return delegate.getShort();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public int getInt() throws SQLException {
- try {
- return delegate.getInt();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public long getLong() throws SQLException {
- try {
- return delegate.getLong();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public float getFloat() throws SQLException {
- try {
- return delegate.getFloat();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public double getDouble() throws SQLException {
- try {
- return delegate.getDouble();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public BigDecimal getBigDecimal() throws SQLException {
- try {
- return delegate.getBigDecimal();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public BigDecimal getBigDecimal(int scale) throws SQLException {
- try {
- return delegate.getBigDecimal(scale);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public byte[] getBytes() throws SQLException {
- try {
- return delegate.getBytes();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public InputStream getAsciiStream() throws SQLException {
- try {
- return delegate.getAsciiStream();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public InputStream getUnicodeStream() throws SQLException {
- try {
- return delegate.getUnicodeStream();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public InputStream getBinaryStream() throws SQLException {
- try {
- return delegate.getBinaryStream();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Object getObject() throws SQLException {
- try {
- return delegate.getObject();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Reader getCharacterStream() throws SQLException {
- try {
- return delegate.getCharacterStream();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Object getObject(Map<String, Class<?>> map) throws SQLException {
- try {
- return delegate.getObject(map);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Ref getRef() throws SQLException {
- try {
- return delegate.getRef();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Blob getBlob() throws SQLException {
- try {
- return delegate.getBlob();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Clob getClob() throws SQLException {
- try {
- return delegate.getClob();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Array getArray() throws SQLException {
- try {
- return delegate.getArray();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Date getDate(Calendar calendar) throws SQLException {
- try {
- return delegate.getDate(calendar);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Time getTime(Calendar calendar) throws SQLException {
- try {
- return delegate.getTime(calendar);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Timestamp getTimestamp(Calendar calendar) throws SQLException {
- try {
- return delegate.getTimestamp(calendar);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public URL getURL() throws SQLException {
- try {
- return delegate.getURL();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public NClob getNClob() throws SQLException {
- try {
- return delegate.getNClob();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public SQLXML getSQLXML() throws SQLException {
- try {
- return delegate.getSQLXML();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public String getNString() throws SQLException {
- try {
- return delegate.getNString();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public Reader getNCharacterStream() throws SQLException {
- try {
- return delegate.getNCharacterStream();
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
- @Override
- public <T> T getObject(Class<T> type) throws SQLException {
- try {
- return delegate.getObject(type);
- } catch(RuntimeException e) {
- String message = e.getMessage();
- if (message != null && message.startsWith("cannot convert to")) {
- throw new SQLException(e.getMessage(), e);
- }
- throw e;
- }
- }
-
-}
diff --git a/pom.xml b/pom.xml
index 530d3de2f..b9f17dab6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,8 +50,8 @@
<guava.version>19.0</guava.version>
<forkCount>2</forkCount>
<parquet.version>1.10.0</parquet.version>
- <calcite.version>1.17.0-drill-r2</calcite.version>
- <avatica.version>1.12.0</avatica.version>
+ <calcite.version>1.18.0-drill-r0</calcite.version>
+ <avatica.version>1.13.0</avatica.version>
<janino.version>3.0.11</janino.version>
<sqlline.version>1.6.0</sqlline.version>
<jackson.version>2.9.5</jackson.version>
@@ -1050,14 +1050,35 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>org.apache.drill</groupId>
- <artifactId>drill-shaded-guava</artifactId>
- <version>${shaded.guava.version}</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>${guava.version}</version>
+ <groupId>org.apache.calcite</groupId>
+ <artifactId>calcite-core</artifactId>
+ <version>${calcite.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.calcite.avatica</groupId>
+ <artifactId>avatica-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jgrapht</groupId>
+ <artifactId>jgrapht-jdk1.5</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.apache.calcite.avatica</groupId>
@@ -1079,6 +1100,16 @@
</exclusions>
</dependency>
<dependency>
+ <groupId>org.apache.drill</groupId>
+ <artifactId>drill-shaded-guava</artifactId>
+ <version>${shaded.guava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${guava.version}</version>
+ </dependency>
+ <dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack</artifactId>
<version>${msgpack.version}</version>
@@ -2379,39 +2410,6 @@
<artifactId>xalan</artifactId>
<version>2.7.1</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.calcite</groupId>
- <artifactId>calcite-core</artifactId>
- <version>${calcite.version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.apache.calcite.avatica</groupId>
- <artifactId>avatica-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.jgrapht</groupId>
- <artifactId>jgrapht-jdk1.5</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
<dependency>
<groupId>net.sf.jpam</groupId>
<artifactId>jpam</artifactId>