diff --git a/contrib/storage-hive/hive-exec-shade/pom.xml b/contrib/storage-hive/hive-exec-shade/pom.xml
index 30472e5b7ab..de9e0551760 100644
--- a/contrib/storage-hive/hive-exec-shade/pom.xml
+++ b/contrib/storage-hive/hive-exec-shade/pom.xml
@@ -42,6 +42,10 @@
commons-codec
commons-codec
+
+ calcite-avatica
+ org.apache.calcite
+
@@ -71,7 +75,7 @@
com.twitter:parquet-encoding
com.twitter:parquet-generator
org.apache.calcite:calcite-core
- org.apache.calcite:calcite-avatica
+ org.apache.calcite.avatica:avatica-core
false
diff --git a/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcExpressionCheck.java b/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcExpressionCheck.java
index 2015a7754f2..e0b01b3889b 100644
--- a/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcExpressionCheck.java
+++ b/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcExpressionCheck.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -27,7 +27,10 @@
import org.apache.calcite.rex.RexLocalRef;
import org.apache.calcite.rex.RexNode;
import org.apache.calcite.rex.RexOver;
+import org.apache.calcite.rex.RexPatternFieldRef;
import org.apache.calcite.rex.RexRangeRef;
+import org.apache.calcite.rex.RexSubQuery;
+import org.apache.calcite.rex.RexTableInputRef;
import org.apache.calcite.rex.RexVisitor;
import org.apache.calcite.rex.RexWindow;
import org.apache.drill.exec.planner.sql.DrillSqlOperator;
@@ -116,4 +119,19 @@ public Boolean visitFieldAccess(RexFieldAccess paramRexFieldAccess) {
return paramRexFieldAccess.getReferenceExpr().accept(this);
}
+ @Override
+ public Boolean visitSubQuery(RexSubQuery subQuery) {
+ return null;
+ }
+
+ @Override
+ public Boolean visitTableInputRef(RexTableInputRef fieldRef) {
+ return false;
+ }
+
+ @Override
+ public Boolean visitPatternFieldRef(RexPatternFieldRef fieldRef) {
+ return false;
+ }
+
}
diff --git a/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcPrel.java b/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcPrel.java
index 58549db7625..e335c08138d 100644
--- a/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcPrel.java
+++ b/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcPrel.java
@@ -62,7 +62,7 @@ public JdbcPrel(RelOptCluster cluster, RelTraitSet traitSet, JdbcIntermediatePre
(JavaTypeFactory) getCluster().getTypeFactory());
final JdbcImplementor.Result result =
jdbcImplementor.visitChild(0, input.accept(new SubsetRemover()));
- sql = result.asQuery().toSqlString(dialect).getSql();
+ sql = result.asSelect().toSqlString(dialect).getSql();
rowType = input.getRowType();
}
diff --git a/exec/java-exec/pom.xml b/exec/java-exec/pom.xml
index 728477b1d3b..8e64224e502 100644
--- a/exec/java-exec/pom.xml
+++ b/exec/java-exec/pom.xml
@@ -211,6 +211,10 @@
org.apache.calcite
calcite-core
+
+ org.apache.calcite.avatica
+ avatica
+
net.sf.jpam
jpam
diff --git a/exec/java-exec/src/main/codegen/data/Parser.tdd b/exec/java-exec/src/main/codegen/data/Parser.tdd
index 6c23808fc3a..507d6924e38 100644
--- a/exec/java-exec/src/main/codegen/data/Parser.tdd
+++ b/exec/java-exec/src/main/codegen/data/Parser.tdd
@@ -29,15 +29,12 @@
# List of keywords.
keywords: [
"DATABASES",
- "REPLACE",
"SCHEMAS",
- "SHOW",
"TABLES",
"USE",
"FILES",
"REFRESH",
"METADATA",
- "DATABASE",
"IF",
"JAR"
]
@@ -75,6 +72,26 @@
implementationFiles: [
"parserImpls.ftl"
]
+
+ # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
+ # Each must accept arguments "(SqlParserPos pos, boolean replace)".
+ createStatementParserMethods: [
+ ]
+
+ # List of methods for parsing extensions to "ALTER " calls.
+ # Each must accept arguments "(SqlParserPos pos, String scope)".
+ alterStatementParserMethods: [
+ ]
+
+ # List of methods for parsing extensions to "DROP" calls.
+ # Each must accept arguments "(SqlParserPos pos)".
+ dropStatementParserMethods: [
+ ]
+
+ # List of keywords from "keywords" section that are not reserved.
+ nonReservedKeywords: [
+ ]
+
includeCompoundIdentifier: false,
includeBraces: true,
diff --git a/exec/java-exec/src/main/codegen/includes/parserImpls.ftl b/exec/java-exec/src/main/codegen/includes/parserImpls.ftl
index 67d15015efc..502c5b3e75e 100644
--- a/exec/java-exec/src/main/codegen/includes/parserImpls.ftl
+++ b/exec/java-exec/src/main/codegen/includes/parserImpls.ftl
@@ -118,7 +118,7 @@ SqlNode SqlDescribeTable() :
E()
)
{
- return new SqlDescribeTable(pos, table, column, columnPattern);
+ return new DrillSqlDescribeTable(pos, table, column, columnPattern);
}
}
@@ -158,7 +158,7 @@ SqlNodeList ParseRequiredFieldList(String relType) :
}
{
- fieldList = SimpleIdentifierCommaList()
+ fieldList = ParenthesizedCompoundIdentifierList()
{
for(SqlNode node : fieldList)
@@ -351,4 +351,23 @@ SqlNode SqlDropFunction() :
{
return new SqlDropFunction(pos, jar);
}
-}
\ No newline at end of file
+}
+
+<#if !parser.includeCompoundIdentifier >
+/**
+* Parses a comma-separated list of simple identifiers.
+*/
+SqlNodeList ParenthesizedCompoundIdentifierList() :
+{
+ List list = new ArrayList();
+ SqlIdentifier id;
+}
+{
+ id = SimpleIdentifier() {list.add(id);}
+ (
+ id = SimpleIdentifier() {list.add(id);}) *
+ {
+ return new SqlNodeList(list, getPos());
+ }
+}
+#if>
\ No newline at end of file
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/dotdrill/View.java b/exec/java-exec/src/main/java/org/apache/drill/exec/dotdrill/View.java
index 97be73d3c63..2b69f00083c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/dotdrill/View.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/dotdrill/View.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -106,8 +106,19 @@ public FieldType(String name, RelDataType dataType) {
p = dataType.getPrecision();
s = dataType.getScale();
break;
+ case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
- case INTERVAL_DAY_TIME:
+ case INTERVAL_MONTH:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND:
p = dataType.getIntervalQualifier().getStartPrecisionPreservingDefault();
default:
break;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
index a04f34d7025..49c9726e9d0 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -28,6 +28,7 @@
import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -259,7 +260,8 @@ private TableScan createNewTableScanFromSelection(EnumerableTableScan oldScan, L
new DynamicDrillTable(table.getPlugin(), table.getStorageEngineName(),
table.getUserName(),
newFormatSelection));
- final RelOptTableImpl newOptTableImpl = RelOptTableImpl.create(t.getRelOptSchema(), t.getRowType(), newTable);
+ final RelOptTableImpl newOptTableImpl = RelOptTableImpl.create(t.getRelOptSchema(), t.getRowType(), newTable,
+ ImmutableList.of());
// return an EnumerableTableScan with fileSelection being part of digest of TableScan node.
return DirPrunedEnumerableTableScan.create(oldScan.getCluster(), newOptTableImpl, newFileSelection.toString());
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillStoreRelBase.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillStoreRelBase.java
index d61f271f221..2781564bb64 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillStoreRelBase.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillStoreRelBase.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -26,6 +26,7 @@
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rex.RexNode;
/**
* Base class for logical and physical Store implemented in Drill
@@ -33,9 +34,9 @@
public abstract class DrillStoreRelBase extends TableModify implements DrillRelNode {
static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillStoreRelBase.class);
- protected DrillStoreRelBase(RelOptCluster cluster, RelTraitSet traits, RelOptTable table, CatalogReader catalogReader,
- RelNode child, Operation operation, List updateColumnList, boolean flattened) {
- super(cluster, traits, table, catalogReader, child, operation, updateColumnList, flattened);
+ protected DrillStoreRelBase(RelOptCluster cluster, RelTraitSet traits, RelOptTable table, CatalogReader catalogReader, RelNode child,
+ Operation operation, List updateColumnList, List sourceExpressionList, boolean flattened) {
+ super(cluster, traits, table, catalogReader, child, operation, updateColumnList, sourceExpressionList, flattened);
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillValuesRelBase.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillValuesRelBase.java
index 4d54fce85a3..a182d356cec 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillValuesRelBase.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillValuesRelBase.java
@@ -216,7 +216,9 @@ private static void writeLiteral(RexLiteral literal, JsonOutput out) throws IOEx
}
return;
+ case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
+ case INTERVAL_MONTH:
if (isLiteralNull(literal)) {
out.writeIntervalNull();
} else {
@@ -225,7 +227,16 @@ private static void writeLiteral(RexLiteral literal, JsonOutput out) throws IOEx
}
return;
- case INTERVAL_DAY_TIME:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND:
if (isLiteralNull(literal)) {
out.writeIntervalNull();
} else {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java
index 0ca4447a328..cbb5aee009a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,9 +17,6 @@
*/
package org.apache.drill.exec.planner.logical;
-import java.util.logging.Logger;
-
-import org.apache.calcite.rel.core.Aggregate;
import org.apache.calcite.rel.InvalidRelException;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.plan.Convention;
@@ -28,6 +25,7 @@
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.logical.LogicalAggregate;
import org.apache.calcite.util.trace.CalciteTrace;
+import org.slf4j.Logger;
/**
* Rule that converts an {@link LogicalAggregate} to a {@link DrillAggregateRel}, implemented by a Drill "segment" operation
@@ -43,7 +41,7 @@ private DrillAggregateRule() {
@Override
public void onMatch(RelOptRuleCall call) {
- final LogicalAggregate aggregate = (LogicalAggregate) call.rel(0);
+ final LogicalAggregate aggregate = call.rel(0);
final RelNode input = call.rel(1);
if (aggregate.containsDistinctCall()) {
@@ -57,7 +55,7 @@ public void onMatch(RelOptRuleCall call) {
call.transformTo(new DrillAggregateRel(aggregate.getCluster(), traits, convertedInput, aggregate.indicator,
aggregate.getGroupSet(), aggregate.getGroupSets(), aggregate.getAggCallList()));
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java
index f68007d044c..266ce64b356 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -24,6 +24,12 @@
public final class DrillConditions {
public static PushProjector.ExprCondition PRESERVE_ITEM = new PushProjector.ExprCondition() {
+
+ @Override
+ public boolean apply(RexNode rexNode) {
+ return false;
+ }
+
@Override
public boolean test(RexNode expr) {
if (expr instanceof RexCall) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
index 19c75240e09..cdba8b8bde2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
@@ -20,6 +20,10 @@
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import io.netty.buffer.DrillBuf;
+import org.apache.calcite.rex.RexExecutor;
+import org.apache.calcite.util.DateString;
+import org.apache.calcite.util.TimeString;
+import org.apache.calcite.util.TimestampString;
import org.apache.calcite.rel.RelNode;
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.common.expression.ErrorCollectorImpl;
@@ -79,7 +83,7 @@
import java.util.Calendar;
import java.util.List;
-public class DrillConstExecutor implements RelOptPlanner.Executor {
+public class DrillConstExecutor implements RexExecutor {
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillConstExecutor.class);
private final PlannerSettings plannerSettings;
@@ -203,7 +207,7 @@ public RexNode apply(ValueHolder output) {
Calendar value = (materializedExpr.getMajorType().getMode() == TypeProtos.DataMode.OPTIONAL) ?
new DateTime(((NullableDateHolder) output).value, DateTimeZone.UTC).toCalendar(null) :
new DateTime(((DateHolder) output).value, DateTimeZone.UTC).toCalendar(null);
- return rexBuilder.makeLiteral(value,
+ return rexBuilder.makeLiteral(DateString.fromCalendarFields(value),
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.DATE, newCall.getType().isNullable()), false);
}
case DECIMAL9: {
@@ -282,14 +286,14 @@ public RexNode apply(ValueHolder output) {
Calendar value = (materializedExpr.getMajorType().getMode() == TypeProtos.DataMode.OPTIONAL) ?
new DateTime(((NullableTimeHolder) output).value, DateTimeZone.UTC).toCalendar(null) :
new DateTime(((TimeHolder) output).value, DateTimeZone.UTC).toCalendar(null);
- return rexBuilder.makeLiteral(value,
+ return rexBuilder.makeLiteral(TimeString.fromCalendarFields(value),
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.TIME, newCall.getType().isNullable()), false);
}
case TIMESTAMP: {
Calendar value = (materializedExpr.getMajorType().getMode() == TypeProtos.DataMode.OPTIONAL) ?
new DateTime(((NullableTimeStampHolder) output).value, DateTimeZone.UTC).toCalendar(null) :
new DateTime(((TimeStampHolder) output).value, DateTimeZone.UTC).toCalendar(null);
- return rexBuilder.makeLiteral(value,
+ return rexBuilder.makeLiteral(TimestampString.fromCalendarFields(value),
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.TIMESTAMP, newCall.getType().isNullable()), false);
}
case INTERVALYEAR: {
@@ -313,7 +317,7 @@ public RexNode apply(ValueHolder output) {
}
return rexBuilder.makeLiteral(
new BigDecimal(days * DateUtility.daysToStandardMillis + milliseconds),
- TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.INTERVAL_DAY_TIME, newCall.getType().isNullable()),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory, SqlTypeName.INTERVAL_DAY, newCall.getType().isNullable()),
false);
}
// The list of known unsupported types is used to trigger this behavior of re-using the input expression
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java
index d41ae7218b2..deb8acef7e8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.logical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.calcite.rel.InvalidRelException;
import org.apache.calcite.rel.core.JoinRelType;
@@ -37,6 +36,7 @@
import org.apache.calcite.util.trace.CalciteTrace;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
/**
* Rule that converts a {@link org.apache.calcite.rel.logical.LogicalJoin} to a {@link DrillJoinRel}, which is implemented by Drill "join" operation.
@@ -53,7 +53,7 @@ private DrillJoinRule() {
@Override
public void onMatch(RelOptRuleCall call) {
- final LogicalJoin join = (LogicalJoin) call.rel(0);
+ final LogicalJoin join = call.rel(0);
final RelNode left = join.getLeft();
final RelNode right = join.getRight();
final RelTraitSet traits = join.getTraitSet().plus(DrillRel.DRILL_LOGICAL);
@@ -97,7 +97,7 @@ public void onMatch(RelOptRuleCall call) {
call.transformTo(new DrillFilterRel(join.getCluster(), traits, joinRel, remaining));
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
@@ -109,8 +109,8 @@ private RexNode buildJoinCondition(RelNode convertedLeft, RelNode convertedRight
List rightTypes = convertedRight.getRowType().getFieldList();
for (int i=0; i < leftKeys.size(); i++) {
- int leftKeyOrdinal = leftKeys.get(i).intValue();
- int rightKeyOrdinal = rightKeys.get(i).intValue();
+ int leftKeyOrdinal = leftKeys.get(i);
+ int rightKeyOrdinal = rightKeys.get(i);
equijoinList.add(builder.makeCall(
filterNulls.get(i) ? SqlStdOperatorTable.EQUALS : SqlStdOperatorTable.IS_NOT_DISTINCT_FROM,
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java
index 0d8efd56743..7dc205015ed 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java
@@ -226,6 +226,10 @@ public LogicalExpression visitCall(RexCall call) {
return doFunction(call, "+");
}
+ if (call.getOperator() == SqlStdOperatorTable.MINUS_DATE) {
+ return doFunction(call, "-");
+ }
+
// fall through
default:
throw new AssertionError("todo: implement syntax " + syntax + "(" + call + ")");
@@ -325,8 +329,19 @@ private LogicalExpression getDrillCastFunctionFromOptiq(RexCall call){
}
break;
- case "INTERVAL_YEAR_MONTH": castType = Types.required(MinorType.INTERVALYEAR); break;
- case "INTERVAL_DAY_TIME": castType = Types.required(MinorType.INTERVALDAY); break;
+ case "INTERVAL_YEAR":
+ case "INTERVAL_YEAR_MONTH":
+ case "INTERVAL_MONTH": castType = Types.required(MinorType.INTERVALYEAR); break;
+ case "INTERVAL_DAY":
+ case "INTERVAL_DAY_HOUR":
+ case "INTERVAL_DAY_MINUTE":
+ case "INTERVAL_DAY_SECOND":
+ case "INTERVAL_HOUR":
+ case "INTERVAL_HOUR_MINUTE":
+ case "INTERVAL_HOUR_SECOND":
+ case "INTERVAL_MINUTE":
+ case "INTERVAL_MINUTE_SECOND":
+ case "INTERVAL_SECOND": castType = Types.required(MinorType.INTERVALDAY); break;
case "BOOLEAN": castType = Types.required(MinorType.BIT); break;
case "BINARY": castType = Types.required(MinorType.VARBINARY); break;
case "ANY": return arg; // Type will be same as argument.
@@ -574,11 +589,22 @@ public LogicalExpression visitLiteral(RexLiteral literal) {
}
return (ValueExpressions.getTimeStamp((GregorianCalendar) literal.getValue()));
case INTERVAL_YEAR_MONTH:
+ case INTERVAL_YEAR:
+ case INTERVAL_MONTH:
if (isLiteralNull(literal)) {
return createNullExpr(MinorType.INTERVALYEAR);
}
return (ValueExpressions.getIntervalYear(((BigDecimal) (literal.getValue())).intValue()));
- case INTERVAL_DAY_TIME:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND:
if (isLiteralNull(literal)) {
return createNullExpr(MinorType.INTERVALDAY);
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectSetOpTransposeRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectSetOpTransposeRule.java
index bde82e7fe69..baff3b723d4 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectSetOpTransposeRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectSetOpTransposeRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -19,6 +19,7 @@
package org.apache.drill.exec.planner.logical;
import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.rules.ProjectSetOpTransposeRule;
import org.apache.calcite.rel.rules.PushProjector;
@@ -26,6 +27,6 @@ public class DrillProjectSetOpTransposeRule extends ProjectSetOpTransposeRule {
public final static RelOptRule INSTANCE = new DrillProjectSetOpTransposeRule(DrillConditions.PRESERVE_ITEM);
protected DrillProjectSetOpTransposeRule(PushProjector.ExprCondition preserveExprCondition) {
- super(preserveExprCondition);
+ super(preserveExprCondition, RelFactories.LOGICAL_BUILDER);
}
}
\ No newline at end of file
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastFilterRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastFilterRule.java
index 4f950d3d3ea..e5c40b91870 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastFilterRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastFilterRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,6 +17,9 @@
*/
package org.apache.drill.exec.planner.logical;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rel.logical.LogicalFilter;
+import org.apache.calcite.rel.logical.LogicalProject;
import org.apache.calcite.rel.rules.ProjectFilterTransposeRule;
import org.apache.calcite.rel.rules.PushProjector;
import org.apache.calcite.plan.RelOptRule;
@@ -26,7 +29,7 @@ public class DrillPushProjectPastFilterRule extends ProjectFilterTransposeRule {
public final static RelOptRule INSTANCE = new DrillPushProjectPastFilterRule(DrillConditions.PRESERVE_ITEM);
protected DrillPushProjectPastFilterRule(PushProjector.ExprCondition preserveExprCondition) {
- super(preserveExprCondition);
+ super(LogicalProject.class, LogicalFilter.class, RelFactories.LOGICAL_BUILDER, preserveExprCondition);
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastJoinRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastJoinRule.java
index e27360f4f19..269f6d51c87 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastJoinRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastJoinRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,6 +17,7 @@
*/
package org.apache.drill.exec.planner.logical;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.rules.ProjectJoinTransposeRule;
import org.apache.calcite.rel.rules.PushProjector;
import org.apache.calcite.plan.RelOptRule;
@@ -26,7 +27,7 @@ public class DrillPushProjectPastJoinRule extends ProjectJoinTransposeRule {
public static final RelOptRule INSTANCE = new DrillPushProjectPastJoinRule(DrillConditions.PRESERVE_ITEM);
protected DrillPushProjectPastJoinRule(PushProjector.ExprCondition preserveExprCondition) {
- super(preserveExprCondition);
+ super(preserveExprCondition, RelFactories.LOGICAL_BUILDER);
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceAggregatesRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceAggregatesRule.java
index 9f8d0623629..bb972d0602a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceAggregatesRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceAggregatesRule.java
@@ -25,7 +25,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.logging.Logger;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -66,6 +65,7 @@
import com.google.common.collect.ImmutableList;
import org.apache.drill.exec.planner.sql.TypeInferenceUtils;
import org.apache.drill.exec.planner.sql.parser.DrillCalciteWrapperUtility;
+import org.slf4j.Logger;
/**
* Rule to reduce aggregates to simpler forms. Currently only AVG(x) to
@@ -718,7 +718,7 @@ public void onMatch(RelOptRuleCall call) {
oldAggRel.getGroupSets(),
newAggregateCalls));
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
}
@@ -760,7 +760,8 @@ public void onMatch(RelOptRuleCall call) {
sumZeroAgg,
sumType,
rexWinAggCall.operands,
- rexWinAggCall.ordinal);
+ rexWinAggCall.ordinal,
+ rexWinAggCall.distinct);
aggCalls.add(sumZeroCall);
} else {
aggCalls.add(rexWinAggCall);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceExpressionsRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceExpressionsRule.java
index 2b658316cb1..96bcf026927 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceExpressionsRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceExpressionsRule.java
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*
* 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
@@ -14,17 +14,18 @@
* 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.exec.planner.logical;
+import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.RelCollations;
import org.apache.calcite.rel.core.Calc;
-import org.apache.calcite.rel.logical.LogicalCalc;
+import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.core.Filter;
-import org.apache.calcite.rel.RelCollationImpl;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.SingleRel;
-import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rel.logical.LogicalCalc;
+import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.rules.ReduceExpressionsRule;
@@ -38,10 +39,10 @@ public class DrillReduceExpressionsRule {
public static final DrillReduceCalcRule CALC_INSTANCE_DRILL =
new DrillReduceCalcRule();
- private static class DrillReduceFilterRule extends ReduceExpressionsRule.ReduceFilterRule {
+ private static class DrillReduceFilterRule extends ReduceExpressionsRule.FilterReduceExpressionsRule {
DrillReduceFilterRule() {
- super("DrillReduceExpressionsRule(Filter)");
+ super(DrillFilterRel.class, RelFactories.LOGICAL_BUILDER);
}
/**
@@ -51,16 +52,16 @@ private static class DrillReduceFilterRule extends ReduceExpressionsRule.ReduceF
* expose the planning time known schema. Instead we have to insert a limit 0.
*/
@Override
- protected RelNode createEmptyRelOrEquivalent(Filter filter) {
+ protected RelNode createEmptyRelOrEquivalent(RelOptRuleCall call, Filter filter) {
return createEmptyEmptyRelHelper(filter);
}
}
- private static class DrillReduceCalcRule extends ReduceExpressionsRule.ReduceCalcRule {
+ private static class DrillReduceCalcRule extends ReduceExpressionsRule.CalcReduceExpressionsRule {
DrillReduceCalcRule() {
- super("DrillReduceExpressionsRule(Calc)");
+ super(Calc.class, RelFactories.LOGICAL_BUILDER);
}
/**
@@ -70,8 +71,8 @@ private static class DrillReduceCalcRule extends ReduceExpressionsRule.ReduceCal
* expose the planning time known schema. Instead we have to insert a limit 0.
*/
@Override
- protected RelNode createEmptyRelOrEquivalent(Calc calc) {
- return createEmptyEmptyRelHelper(calc);
+ protected RelNode createEmptyRelOrEquivalent(RelOptRuleCall call, Calc input) {
+ return createEmptyEmptyRelHelper(input);
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRelFactories.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRelFactories.java
index 0348a5b3a09..487da4d6393 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRelFactories.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRelFactories.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -20,6 +20,7 @@
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.CorrelationId;
import org.apache.calcite.rel.core.JoinRelType;
import org.apache.calcite.rel.core.RelFactories;
import org.apache.calcite.rel.logical.LogicalFilter;
@@ -79,6 +80,14 @@ public RelNode createFilter(RelNode child, RexNode condition) {
* {@link org.apache.calcite.rel.logical.LogicalJoin}.
*/
private static class DrillJoinFactoryImpl implements RelFactories.JoinFactory {
+
+ @Override
+ public RelNode createJoin(RelNode left, RelNode right,
+ RexNode condition, Set variablesSet,
+ JoinRelType joinType, boolean semiJoinDone) {
+ return new DrillJoinRel(left.getCluster(), left.getTraitSet(), left, right, condition, joinType);
+ }
+
@Override
public RelNode createJoin(RelNode left, RelNode right,
RexNode condition, JoinRelType joinType,
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillStoreRel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillStoreRel.java
index 7c498f395d9..9872f950a8f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillStoreRel.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillStoreRel.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -21,6 +21,7 @@
import org.apache.calcite.prepare.Prepare.CatalogReader;
+import org.apache.calcite.rex.RexNode;
import org.apache.drill.common.logical.data.LogicalOperator;
import org.apache.drill.exec.planner.common.DrillStoreRelBase;
import org.apache.calcite.rel.RelNode;
@@ -31,9 +32,9 @@
public class DrillStoreRel extends DrillStoreRelBase implements DrillRel{
static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillStoreRel.class);
- protected DrillStoreRel(RelOptCluster cluster, RelTraitSet traits, RelOptTable table, CatalogReader catalogReader,
- RelNode child, Operation operation, List updateColumnList, boolean flattened) {
- super(cluster, traits, table, catalogReader, child, operation, updateColumnList, flattened);
+ protected DrillStoreRel(RelOptCluster cluster, RelTraitSet traits, RelOptTable table, CatalogReader catalogReader, RelNode child,
+ Operation operation, List updateColumnList, List sourceExpressionList, boolean flattened) {
+ super(cluster, traits, table, catalogReader, child, operation, updateColumnList, sourceExpressionList, flattened);
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
index 10c0118f8ba..a0749527c0f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -19,7 +19,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.drill.exec.planner.common.DrillUnionRelBase;
import org.apache.calcite.rel.InvalidRelException;
@@ -30,6 +29,7 @@
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.util.trace.CalciteTrace;
+import org.slf4j.Logger;
/**
* Rule that converts a {@link LogicalUnion} to a {@link DrillUnionRelBase}, implemented by a "union" operation.
@@ -44,7 +44,7 @@ private DrillUnionAllRule() {
@Override
public void onMatch(RelOptRuleCall call) {
- final LogicalUnion union = (LogicalUnion) call.rel(0);
+ final LogicalUnion union = call.rel(0);
// This rule applies to Union-All only
if(!union.all) {
@@ -61,7 +61,7 @@ public void onMatch(RelOptRuleCall call) {
call.transformTo(new DrillUnionRel(union.getCluster(), traits, convertedInputs, union.all,
true /* check compatibility */));
} catch (InvalidRelException e) {
- tracer.warning(e.toString()) ;
+ tracer.warn(e.toString()) ;
}
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillViewTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillViewTable.java
index d2e1ace93bb..0f0278edd63 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillViewTable.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillViewTable.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,8 +17,7 @@
*/
package org.apache.drill.exec.planner.logical;
-import java.util.List;
-
+import com.google.common.collect.ImmutableList;
import org.apache.calcite.schema.Schema.TableType;
import org.apache.calcite.schema.Statistic;
import org.apache.calcite.schema.Statistics;
@@ -65,9 +64,9 @@ public RelNode toRel(ToRelContext context, RelOptTable relOptTable) {
if (viewExpansionContext.isImpersonationEnabled()) {
token = viewExpansionContext.reserveViewExpansionToken(viewOwner);
- rel = context.expandView(rowType, view.getSql(), token.getSchemaTree(), view.getWorkspaceSchemaPath());
+ rel = context.expandView(rowType, view.getSql(), token.getSchemaTree(), view.getWorkspaceSchemaPath()).rel;
} else {
- rel = context.expandView(rowType, view.getSql(), view.getWorkspaceSchemaPath());
+ rel = context.expandView(rowType, view.getSql(), view.getWorkspaceSchemaPath(), ImmutableList.of()).rel;
}
// If the View's field list is not "*", create a cast.
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrel.java
index 09d33fd8a6b..b647279a3e8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrel.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrel.java
@@ -21,13 +21,8 @@
import java.util.List;
import org.apache.calcite.util.ImmutableBitSet;
-import org.apache.drill.common.logical.data.NamedExpression;
-import org.apache.drill.exec.ExecConstants;
-import org.apache.drill.exec.expr.holders.IntHolder;
import org.apache.drill.exec.physical.base.PhysicalOperator;
import org.apache.drill.exec.physical.config.HashAggregate;
-import org.apache.drill.exec.planner.cost.DrillCostBase;
-import org.apache.drill.exec.planner.cost.DrillCostBase.DrillCostFactory;
import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode;
import org.apache.calcite.rel.core.AggregateCall;
import org.apache.calcite.rel.core.Aggregate;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java
index e16593bae00..f4cdf6270e2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,8 +17,6 @@
*/
package org.apache.drill.exec.planner.physical;
-import java.util.logging.Logger;
-
import org.apache.drill.exec.planner.logical.DrillAggregateRel;
import org.apache.drill.exec.planner.logical.RelOptHelper;
import org.apache.drill.exec.planner.physical.AggPrelBase.OperatorPhase;
@@ -31,6 +29,7 @@
import org.apache.calcite.util.trace.CalciteTrace;
import com.google.common.collect.ImmutableList;
+import org.slf4j.Logger;
public class HashAggPrule extends AggPruleBase {
public static final RelOptRule INSTANCE = new HashAggPrule();
@@ -94,7 +93,7 @@ public void onMatch(RelOptRuleCall call) {
}
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrel.java
index 1795bf1857a..31b777296e2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrel.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrel.java
@@ -27,7 +27,6 @@
import org.apache.drill.exec.physical.config.HashJoinPOP;
import org.apache.drill.exec.physical.impl.join.JoinUtils;
import org.apache.drill.exec.physical.impl.join.JoinUtils.JoinCategory;
-import org.apache.drill.exec.planner.cost.DrillCostBase.DrillCostFactory;
import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode;
import org.apache.calcite.rel.InvalidRelException;
import org.apache.calcite.rel.core.JoinRelType;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrule.java
index 1fd0e51f842..d07cf51d3c1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -17,8 +17,6 @@
*/
package org.apache.drill.exec.planner.physical;
-import java.util.logging.Logger;
-
import org.apache.drill.exec.planner.logical.DrillJoinRel;
import org.apache.drill.exec.planner.logical.RelOptHelper;
import org.apache.calcite.rel.InvalidRelException;
@@ -27,6 +25,7 @@
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.plan.RelOptRuleOperand;
import org.apache.calcite.util.trace.CalciteTrace;
+import org.slf4j.Logger;
public class HashJoinPrule extends JoinPruleBase {
public static final RelOptRule DIST_INSTANCE = new HashJoinPrule("Prel.HashJoinDistPrule", RelOptHelper.any(DrillJoinRel.class), true);
@@ -53,7 +52,7 @@ public void onMatch(RelOptRuleCall call) {
return;
}
- final DrillJoinRel join = (DrillJoinRel) call.rel(0);
+ final DrillJoinRel join = call.rel(0);
final RelNode left = join.getLeft();
final RelNode right = join.getRight();
@@ -77,7 +76,7 @@ public void onMatch(RelOptRuleCall call) {
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/MergeJoinPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/MergeJoinPrule.java
index dd587b8750f..3f40720fe43 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/MergeJoinPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/MergeJoinPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.physical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.drill.exec.planner.logical.DrillJoinRel;
import org.apache.drill.exec.planner.logical.RelOptHelper;
@@ -33,6 +32,7 @@
import org.apache.calcite.util.trace.CalciteTrace;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
public class MergeJoinPrule extends JoinPruleBase {
public static final RelOptRule DIST_INSTANCE = new MergeJoinPrule("Prel.MergeJoinDistPrule", RelOptHelper.any(DrillJoinRel.class), true);
@@ -78,7 +78,7 @@ public void onMatch(RelOptRuleCall call) {
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java
index b98976b9138..26e1b73c8be 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.physical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.drill.exec.physical.impl.join.JoinUtils;
import org.apache.drill.exec.physical.impl.join.JoinUtils.JoinCategory;
@@ -33,6 +32,7 @@
import org.apache.calcite.util.trace.CalciteTrace;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
public class NestedLoopJoinPrule extends JoinPruleBase {
@@ -81,7 +81,7 @@ public void onMatch(RelOptRuleCall call) {
return;
}
- final DrillJoinRel join = (DrillJoinRel) call.rel(0);
+ final DrillJoinRel join = call.rel(0);
final RelNode left = join.getLeft();
final RelNode right = join.getRight();
@@ -97,7 +97,7 @@ public void onMatch(RelOptRuleCall call) {
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java
index ea7927ccbe4..a6a8f2883e3 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.physical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.calcite.util.BitSets;
@@ -37,6 +36,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
public class StreamAggPrule extends AggPruleBase {
public static final RelOptRule INSTANCE = new StreamAggPrule();
@@ -174,7 +174,7 @@ public RelNode convertChild(final DrillAggregateRel aggregate, final RelNode rel
}
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionAllPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionAllPrule.java
index 9d9322025d2..336ab3a96b1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionAllPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionAllPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.physical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
@@ -34,6 +33,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
public class UnionAllPrule extends Prule {
public static final RelOptRule INSTANCE = new UnionAllPrule();
@@ -46,20 +46,19 @@ private UnionAllPrule() {
@Override
public boolean matches(RelOptRuleCall call) {
- DrillUnionRel union = (DrillUnionRel) call.rel(0);
+ DrillUnionRel union = call.rel(0);
return (! union.isDistinct());
}
@Override
public void onMatch(RelOptRuleCall call) {
- final DrillUnionRel union = (DrillUnionRel) call.rel(0);
+ final DrillUnionRel union = call.rel(0);
final List inputs = union.getInputs();
List convertedInputList = Lists.newArrayList();
PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner());
boolean allHashDistributed = true;
- for (int i = 0; i < inputs.size(); i++) {
- RelNode child = inputs.get(i);
+ for (RelNode child : inputs) {
List childDistFields = Lists.newArrayList();
RelNode convertedChild;
@@ -110,7 +109,7 @@ public void onMatch(RelOptRuleCall call) {
call.transformTo(left);
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionDistinctPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionDistinctPrule.java
index 8b4d62dce7d..f353802b00f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionDistinctPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionDistinctPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -18,7 +18,6 @@
package org.apache.drill.exec.planner.physical;
import java.util.List;
-import java.util.logging.Logger;
import org.apache.drill.exec.planner.logical.DrillUnionRel;
import org.apache.drill.exec.planner.logical.RelOptHelper;
@@ -30,6 +29,7 @@
import org.apache.calcite.util.trace.CalciteTrace;
import com.google.common.collect.Lists;
+import org.slf4j.Logger;
public class UnionDistinctPrule extends Prule {
public static final RelOptRule INSTANCE = new UnionDistinctPrule();
@@ -42,20 +42,20 @@ private UnionDistinctPrule() {
@Override
public boolean matches(RelOptRuleCall call) {
- DrillUnionRel union = (DrillUnionRel) call.rel(0);
+ DrillUnionRel union = call.rel(0);
return (union.isDistinct() && union.isHomogeneous(false /* don't compare names */));
}
@Override
public void onMatch(RelOptRuleCall call) {
- final DrillUnionRel union = (DrillUnionRel) call.rel(0);
+ final DrillUnionRel union = call.rel(0);
final List inputs = union.getInputs();
List convertedInputList = Lists.newArrayList();
RelTraitSet traits = call.getPlanner().emptyTraitSet().plus(Prel.DRILL_PHYSICAL);
try {
- for (int i = 0; i < inputs.size(); i++) {
- RelNode convertedInput = convert(inputs.get(i), PrelUtil.fixTraits(call, traits));
+ for (RelNode input : inputs) {
+ RelNode convertedInput = convert(input, PrelUtil.fixTraits(call, traits));
convertedInputList.add(convertedInput);
}
@@ -67,7 +67,7 @@ public void onMatch(RelOptRuleCall call) {
call.transformTo(unionDistinct);
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
index 1980335607e..4fdb3b90776 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -154,15 +154,15 @@ public boolean apply(RelDataTypeField relDataTypeField) {
newOperandsOfWindowFunction.add(operand);
}
-
aggCall = new Window.RexWinAggCall(
(SqlAggFunction) aggCall.getOperator(),
aggCall.getType(),
newOperandsOfWindowFunction,
- aggCall.ordinal);
+ aggCall.ordinal,
+ aggCall.distinct);
newWinAggCalls.add(new Window.RexWinAggCall(
- (SqlAggFunction)aggCall.getOperator(), aggCall.getType(), aggCall.getOperands(), aggOrd.i)
+ (SqlAggFunction)aggCall.getOperator(), aggCall.getType(), aggCall.getOperands(), aggOrd.i, aggCall.distinct)
);
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/TopProjectVisitor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/TopProjectVisitor.java
index 08bd9e71998..6b81b70b3b4 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/TopProjectVisitor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/TopProjectVisitor.java
@@ -129,7 +129,7 @@ private Prel addTopProjectPrel(Prel prel, RelDataType validatedRowType) {
List fieldNames = SqlValidatorUtil.uniquify(
validatedRowType.getFieldNames(),
- SqlValidatorUtil.F_SUGGESTER2,
+ SqlValidatorUtil.EXPR_SUGGESTER,
prel.getCluster().getTypeFactory().getTypeSystem().isSchemaCaseSensitive());
RelDataType newRowType = RexUtil.createStructType(prel.getCluster().getTypeFactory(), projections, fieldNames, null);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlAggFunctionWrapper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlAggFunctionWrapper.java
index 3795dd4651b..a87247b9a33 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlAggFunctionWrapper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlAggFunctionWrapper.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -29,6 +29,7 @@
import org.apache.calcite.sql.validate.SqlValidator;
import org.apache.calcite.sql.validate.SqlValidatorScope;
+import org.apache.calcite.util.Litmus;
import org.apache.drill.exec.expr.fn.DrillFuncHolder;
import java.util.List;
@@ -84,7 +85,7 @@ public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlFunctionWrapper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlFunctionWrapper.java
index 1c61d085ff7..cf3b8662f4b 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlFunctionWrapper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlFunctionWrapper.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -29,6 +29,7 @@
import org.apache.calcite.sql.validate.SqlValidator;
import org.apache.calcite.sql.validate.SqlValidatorScope;
+import org.apache.calcite.util.Litmus;
import org.apache.drill.exec.expr.fn.DrillFuncHolder;
import java.util.List;
@@ -65,7 +66,7 @@ public SqlOperator getOperator() {
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlOperatorWrapper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlOperatorWrapper.java
index 825812059bc..2bf04b91e81 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlOperatorWrapper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlOperatorWrapper.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -28,6 +28,7 @@
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.sql.validate.SqlMonotonicity;
import org.apache.calcite.sql.validate.SqlValidator;
+import org.apache.calcite.util.Litmus;
import org.apache.drill.exec.expr.fn.DrillFuncHolder;
import java.util.List;
@@ -88,7 +89,7 @@ public boolean checkOperandTypes(
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillParserConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillParserConfig.java
index d8441aeaa97..1f67c5e1611 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillParserConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillParserConfig.java
@@ -21,6 +21,8 @@
import org.apache.calcite.avatica.util.Quoting;
import org.apache.calcite.sql.parser.SqlParser;
import org.apache.calcite.sql.parser.SqlParserImplFactory;
+import org.apache.calcite.sql.validate.SqlConformance;
+import org.apache.calcite.sql.validate.SqlConformanceEnum;
import org.apache.drill.exec.planner.physical.PlannerSettings;
import org.apache.drill.exec.planner.sql.parser.impl.DrillParserWithCompoundIdConverter;
@@ -59,6 +61,16 @@ public boolean caseSensitive() {
return false;
}
+ @Override
+ public SqlConformance conformance() {
+ return SqlConformanceEnum.DEFAULT;
+ }
+
+ @Override
+ public boolean allowBangEqual() {
+ return conformance().isBangEqualAllowed();
+ }
+
@Override
public SqlParserImplFactory parserFactory() {
return DrillParserWithCompoundIdConverter.FACTORY;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
index 3bc09229ede..345e4b72767 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
@@ -19,6 +19,8 @@
import java.io.IOException;
+import org.apache.calcite.sql.SqlDescribeSchema;
+import org.apache.calcite.sql.SqlDescribeTable;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParseException;
import org.apache.calcite.tools.RelConversionException;
@@ -28,10 +30,13 @@
import org.apache.drill.exec.physical.PhysicalPlan;
import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
import org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler;
+import org.apache.drill.exec.planner.sql.handlers.DescribeSchemaHandler;
+import org.apache.drill.exec.planner.sql.handlers.DescribeTableHandler;
import org.apache.drill.exec.planner.sql.handlers.ExplainHandler;
import org.apache.drill.exec.planner.sql.handlers.SetOptionHandler;
import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
import org.apache.drill.exec.planner.sql.parser.DrillSqlCall;
+import org.apache.drill.exec.planner.sql.parser.DrillSqlDescribeTable;
import org.apache.drill.exec.planner.sql.parser.SqlCreateTable;
import org.apache.drill.exec.testing.ControlsInjector;
import org.apache.drill.exec.testing.ControlsInjectorFactory;
@@ -112,6 +117,16 @@ private static PhysicalPlan getQueryPlan(QueryContext context, String sql, Point
case SET_OPTION:
handler = new SetOptionHandler(context);
break;
+ case DESCRIBE_TABLE:
+ if (sqlNode instanceof DrillSqlDescribeTable) {
+ handler = new DescribeTableHandler(config);
+ break;
+ }
+ case DESCRIBE_SCHEMA:
+ if (sqlNode instanceof SqlDescribeSchema) {
+ handler = new DescribeSchemaHandler(config);
+ break;
+ }
case OTHER:
if(sqlNode instanceof SqlCreateTable) {
handler = ((DrillSqlCall)sqlNode).getSqlHandler(config, textPlan);
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 dbe16bd5904..6f59fcf7e00 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
@@ -22,9 +22,12 @@
import java.util.Set;
import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import org.apache.calcite.adapter.java.JavaTypeFactory;
+import org.apache.calcite.avatica.util.Casing;
+import org.apache.calcite.avatica.util.Quoting;
import org.apache.calcite.jdbc.CalciteSchema;
-import org.apache.calcite.jdbc.CalciteSchemaImpl;
import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
import org.apache.calcite.plan.ConventionTraitDef;
import org.apache.calcite.plan.RelOptCluster;
@@ -32,9 +35,10 @@
import org.apache.calcite.plan.RelOptTable;
import org.apache.calcite.plan.volcano.VolcanoPlanner;
import org.apache.calcite.prepare.CalciteCatalogReader;
+import org.apache.calcite.prepare.Prepare;
import org.apache.calcite.prepare.RelOptTableImpl;
import org.apache.calcite.rel.RelCollationTraitDef;
-import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelRoot;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeSystemImpl;
@@ -45,10 +49,12 @@
import org.apache.calcite.sql.SqlOperatorTable;
import org.apache.calcite.sql.parser.SqlParseException;
import org.apache.calcite.sql.parser.SqlParser;
+import org.apache.calcite.sql.parser.SqlParserImplFactory;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.sql.util.ChainedSqlOperatorTable;
import org.apache.calcite.sql.validate.SqlConformance;
+import org.apache.calcite.sql.validate.SqlConformanceEnum;
import org.apache.calcite.sql.validate.SqlValidatorCatalogReader;
import org.apache.calcite.sql.validate.SqlValidatorImpl;
import org.apache.calcite.sql.validate.SqlValidatorScope;
@@ -67,11 +73,10 @@
import org.apache.drill.exec.planner.logical.DrillConstExecutor;
import org.apache.drill.exec.planner.physical.DrillDistributionTraitDef;
import org.apache.drill.exec.planner.physical.PlannerSettings;
+import org.apache.drill.exec.planner.sql.parser.impl.DrillParserWithCompoundIdConverter;
import org.apache.drill.exec.rpc.user.UserSession;
import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
/**
* Class responsible for managing parsing, validation and toRel conversion for sql statements.
@@ -119,7 +124,7 @@ public SqlConverter(QueryContext context) {
this.catalog = new DrillCalciteCatalogReader(
this.rootSchema,
parserConfig.caseSensitive(),
- CalciteSchemaImpl.from(defaultSchema).path(null),
+ CalciteSchema.from(defaultSchema).path(null),
typeFactory,
drillConfig,
session);
@@ -253,8 +258,7 @@ public boolean isSchemaCaseSensitive() {
}
}
- public RelNode toRel(
- final SqlNode validatedNode) {
+ public RelRoot toRel(final SqlNode validatedNode) {
final RexBuilder rexBuilder = new DrillRexBuilder(typeFactory);
if (planner == null) {
planner = new VolcanoPlanner(costFactory, settings);
@@ -269,9 +273,10 @@ public RelNode toRel(
final SqlToRelConverter sqlToRelConverter =
new SqlToRelConverter(new Expander(), validator, catalog, cluster, DrillConvertletTable.INSTANCE,
sqlToRelConverterConfig);
- final RelNode rel = sqlToRelConverter.convertQuery(validatedNode, false, !isInnerQuery);
- final RelNode rel2 = sqlToRelConverter.flattenTypes(rel, true);
- final RelNode rel3 = RelDecorrelator.decorrelateQuery(rel2);
+ //To avoid unexpected column errors set a value of top to false
+ final RelRoot rel = sqlToRelConverter.convertQuery(validatedNode, false, false);
+ final RelRoot rel2 = rel.withRel(sqlToRelConverter.flattenTypes(rel.rel, true));
+ final RelRoot rel3 = rel2.withRel(RelDecorrelator.decorrelateQuery(rel2.rel));
return rel3;
}
@@ -282,7 +287,7 @@ public Expander() {
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, List schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, List schemaPath, List viewPath) {
final DrillCalciteCatalogReader catalogReader = new DrillCalciteCatalogReader(
rootSchema,
parserConfig.caseSensitive(),
@@ -295,7 +300,7 @@ public RelNode expandView(RelDataType rowType, String queryString, List
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List schemaPath) {
final DrillCalciteCatalogReader catalogReader = new DrillCalciteCatalogReader(
rootSchema, // new root schema
parserConfig.caseSensitive(),
@@ -324,7 +329,7 @@ public RelNode expandView(RelDataType rowType, String queryString, SchemaPlus ro
return expandView(queryString, parser);
}
- private RelNode expandView(String queryString, SqlConverter converter) {
+ private RelRoot expandView(String queryString, SqlConverter converter) {
converter.disallowTemporaryTables();
final SqlNode parsedNode = converter.parse(queryString);
final SqlNode validatedNode = converter.validate(parsedNode);
@@ -368,7 +373,7 @@ public boolean isExpand() {
}
@Override
- public int getInSubqueryThreshold() {
+ public int getInSubQueryThreshold() {
return inSubqueryThreshold;
}
}
@@ -446,7 +451,7 @@ private class DrillCalciteCatalogReader extends CalciteCatalogReader {
JavaTypeFactory typeFactory,
DrillConfig drillConfig,
UserSession session) {
- super(CalciteSchemaImpl.from(rootSchema), caseSensitive, defaultSchema, typeFactory);
+ super(CalciteSchema.from(rootSchema), caseSensitive, defaultSchema, typeFactory);
this.drillConfig = drillConfig;
this.session = session;
this.allowTemporaryTables = true;
@@ -471,8 +476,8 @@ public void disallowTemporaryTables() {
* @throws UserException if temporary tables usage is disallowed
*/
@Override
- public RelOptTableImpl getTable(final List names) {
- RelOptTableImpl temporaryTable = null;
+ public Prepare.PreparingTable getTable(final List names) {
+ Prepare.PreparingTable temporaryTable = null;
if (mightBeTemporaryTable(names, session.getDefaultSchemaPath(), drillConfig)) {
String temporaryTableName = session.resolveTemporaryTableName(names.get(names.size() - 1));
@@ -491,7 +496,7 @@ public RelOptTableImpl getTable(final List names) {
.build(logger);
}
- RelOptTableImpl table = super.getTable(names);
+ Prepare.PreparingTable table = super.getTable(names);
// Check the schema and throw a valid SchemaNotFound exception instead of TableNotFound exception.
if (table == null) {
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 523b72196a5..ddf48ede8e4 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
@@ -35,6 +35,7 @@
import org.apache.calcite.sql.fun.SqlAvgAggFunction;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.sql.type.SqlReturnTypeInference;
+import org.apache.calcite.sql.type.SqlTypeFamily;
import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.drill.common.expression.ExpressionPosition;
@@ -73,7 +74,7 @@ public class TypeInferenceUtils {
.put(TypeProtos.MinorType.TIMESTAMP, SqlTypeName.TIMESTAMP)
.put(TypeProtos.MinorType.VARBINARY, SqlTypeName.VARBINARY)
.put(TypeProtos.MinorType.INTERVALYEAR, SqlTypeName.INTERVAL_YEAR_MONTH)
- .put(TypeProtos.MinorType.INTERVALDAY, SqlTypeName.INTERVAL_DAY_TIME)
+ .put(TypeProtos.MinorType.INTERVALDAY, SqlTypeName.INTERVAL_DAY)
.put(TypeProtos.MinorType.MAP, SqlTypeName.MAP)
.put(TypeProtos.MinorType.LIST, SqlTypeName.ARRAY)
.put(TypeProtos.MinorType.LATE, SqlTypeName.ANY)
@@ -97,8 +98,19 @@ public class TypeInferenceUtils {
.put(SqlTypeName.TIME, TypeProtos.MinorType.TIME)
.put(SqlTypeName.TIMESTAMP, TypeProtos.MinorType.TIMESTAMP)
.put(SqlTypeName.VARBINARY, TypeProtos.MinorType.VARBINARY)
+ .put(SqlTypeName.INTERVAL_YEAR, TypeProtos.MinorType.INTERVALYEAR)
.put(SqlTypeName.INTERVAL_YEAR_MONTH, TypeProtos.MinorType.INTERVALYEAR)
- .put(SqlTypeName.INTERVAL_DAY_TIME, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_MONTH, TypeProtos.MinorType.INTERVALYEAR)
+ .put(SqlTypeName.INTERVAL_DAY, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_DAY_HOUR, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_DAY_MINUTE, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_DAY_SECOND, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_HOUR, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_HOUR_MINUTE, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_HOUR_SECOND, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_MINUTE, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_MINUTE_SECOND, TypeProtos.MinorType.INTERVALDAY)
+ .put(SqlTypeName.INTERVAL_SECOND, TypeProtos.MinorType.INTERVALDAY)
// SqlTypeName.CHAR is the type for Literals in Calcite, Drill treats Literals as VARCHAR also
.put(SqlTypeName.CHAR, TypeProtos.MinorType.VARCHAR)
@@ -734,13 +746,13 @@ public static RelDataType createCalciteTypeWithNullability(RelDataTypeFactory ty
SqlTypeName sqlTypeName,
boolean isNullable) {
RelDataType type;
- if (sqlTypeName == SqlTypeName.INTERVAL_DAY_TIME) {
+ if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_DAY_TIME) {
type = typeFactory.createSqlIntervalType(
new SqlIntervalQualifier(
TimeUnit.DAY,
TimeUnit.MINUTE,
SqlParserPos.ZERO));
- } else if (sqlTypeName == SqlTypeName.INTERVAL_YEAR_MONTH) {
+ } else if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_YEAR_MONTH) {
type = typeFactory.createSqlIntervalType(
new SqlIntervalQualifier(
TimeUnit.YEAR,
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
index 9515b3b357b..93113cb8294 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
@@ -23,6 +23,10 @@
import java.util.List;
import java.util.concurrent.TimeUnit;
+import com.google.common.collect.ImmutableList;
+import org.apache.calcite.plan.RelOptCostImpl;
+import org.apache.calcite.plan.RelOptLattice;
+import org.apache.calcite.plan.RelOptMaterialization;
import org.apache.calcite.plan.RelOptPlanner;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptUtil;
@@ -37,6 +41,8 @@
import org.apache.calcite.rel.core.TableFunctionScan;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.logical.LogicalValues;
+import org.apache.calcite.rel.metadata.CachingRelMetadataProvider;
+import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
@@ -46,13 +52,13 @@
import org.apache.calcite.rex.RexUtil;
import org.apache.calcite.sql.SqlExplainLevel;
import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.TypedSqlNode;
import org.apache.calcite.sql.validate.SqlValidatorUtil;
import org.apache.calcite.tools.Program;
import org.apache.calcite.tools.Programs;
import org.apache.calcite.tools.RelConversionException;
import org.apache.calcite.tools.RuleSet;
import org.apache.calcite.tools.ValidationException;
+import org.apache.calcite.util.Pair;
import org.apache.drill.common.JSONOptions;
import org.apache.drill.common.logical.PlanProperties;
import org.apache.drill.common.logical.PlanProperties.Generator.ResultMode;
@@ -189,13 +195,13 @@ protected SqlNode rewrite(SqlNode node) throws RelConversionException, ForemanSe
protected ConvertedRelNode validateAndConvert(SqlNode sqlNode) throws ForemanSetupException, RelConversionException, ValidationException {
final SqlNode rewrittenSqlNode = rewrite(sqlNode);
- final TypedSqlNode validatedTypedSqlNode = validateNode(rewrittenSqlNode);
- final SqlNode validated = validatedTypedSqlNode.getSqlNode();
+ final Pair validatedTypedSqlNode = validateNode(rewrittenSqlNode);
+ final SqlNode validated = validatedTypedSqlNode.getKey();
RelNode rel = convertToRel(validated);
rel = preprocessNode(rel);
- return new ConvertedRelNode(rel, validatedTypedSqlNode.getType());
+ return new ConvertedRelNode(rel, validatedTypedSqlNode.getValue());
}
/**
@@ -375,7 +381,9 @@ protected RelNode transform(PlannerType plannerType, PlannerPhase phase, RelNode
hepPgmBldr.addRuleInstance(rule);
}
- final HepPlanner planner = new HepPlanner(hepPgmBldr.build(), context.getPlannerSettings());
+ // Set noDAG = true to avoid caching problems which lead to incorrect Drill work.
+ final HepPlanner planner = new HepPlanner(hepPgmBldr.build(), context.getPlannerSettings(), true, null,
+ RelOptCostImpl.FACTORY);
JaninoRelMetadataProvider relMetadataProvider = JaninoRelMetadataProvider.of(DrillDefaultRelMetadataProvider.INSTANCE);
RelMetadataQuery.THREAD_PROVIDERS.set(relMetadataProvider);
@@ -397,7 +405,8 @@ protected RelNode transform(PlannerType plannerType, PlannerPhase phase, RelNode
Preconditions.checkArgument(planner instanceof VolcanoPlanner,
"Cluster is expected to be constructed using VolcanoPlanner. Was actually of type %s.", planner.getClass()
.getName());
- output = program.run(planner, input, toTraits);
+ output = program.run(planner, input, toTraits,
+ ImmutableList.of(), ImmutableList.of());
break;
}
@@ -613,9 +622,9 @@ public Void visitOp(PhysicalOperator op, Collection collection
}
- private TypedSqlNode validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException {
+ private Pair validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException {
final SqlNode sqlNodeValidated = config.getConverter().validate(sqlNode);
- final TypedSqlNode typedSqlNode = new TypedSqlNode(sqlNodeValidated, config.getConverter().getOutputType(
+ final Pair typedSqlNode = new Pair<>(sqlNodeValidated, config.getConverter().getOutputType(
sqlNodeValidated));
// Check if the unsupported functionality is used
@@ -634,7 +643,7 @@ private TypedSqlNode validateNode(SqlNode sqlNode) throws ValidationException, R
}
private RelNode convertToRel(SqlNode node) throws RelConversionException {
- final RelNode convertedNode = config.getConverter().toRel(node);
+ final RelNode convertedNode = config.getConverter().toRel(node).rel;
log("INITIAL", convertedNode, logger, null);
return transform(PlannerType.HEP, PlannerPhase.WINDOW_REWRITE, convertedNode);
}
@@ -674,7 +683,7 @@ protected DrillRel addRenamedProject(DrillRel rel, RelDataType validatedRowType)
final List fieldNames2 = SqlValidatorUtil.uniquify(
validatedRowType.getFieldNames(),
- SqlValidatorUtil.F_SUGGESTER2,
+ SqlValidatorUtil.EXPR_SUGGESTER,
rel.getCluster().getTypeFactory().getTypeSystem().isSchemaCaseSensitive());
RelDataType newRowType = RexUtil.createStructType(rel.getCluster().getTypeFactory(), projections, fieldNames2);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
index 869829a98a2..b41f880acc1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
@@ -23,6 +23,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Joiner;
import org.apache.calcite.schema.SchemaPlus;
+import org.apache.calcite.sql.SqlDescribeSchema;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
import org.apache.drill.common.exceptions.DrillRuntimeException;
@@ -31,7 +32,6 @@
import org.apache.drill.exec.physical.PhysicalPlan;
import org.apache.drill.exec.planner.sql.DirectPlan;
import org.apache.drill.exec.planner.sql.SchemaUtilites;
-import org.apache.drill.exec.planner.sql.parser.SqlDescribeSchema;
import org.apache.drill.exec.store.StoragePlugin;
import org.apache.drill.exec.store.dfs.FileSystemPlugin;
import org.apache.drill.exec.store.dfs.FileSystemSchemaFactory;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
index 72b1aef2aee..0311dfc4083 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
@@ -29,6 +29,7 @@
import java.util.List;
import org.apache.calcite.schema.SchemaPlus;
+import org.apache.calcite.sql.SqlDescribeTable;
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
@@ -41,7 +42,7 @@
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.exec.planner.sql.SchemaUtilites;
import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
-import org.apache.drill.exec.planner.sql.parser.SqlDescribeTable;
+import org.apache.drill.exec.planner.sql.parser.DrillSqlDescribeTable;
import org.apache.drill.exec.work.foreman.ForemanSetupException;
import com.google.common.collect.ImmutableList;
@@ -54,7 +55,7 @@ public class DescribeTableHandler extends DefaultSqlHandler {
/** Rewrite the parse tree as SELECT ... FROM INFORMATION_SCHEMA.COLUMNS ... */
@Override
public SqlNode rewrite(SqlNode sqlNode) throws RelConversionException, ForemanSetupException {
- SqlDescribeTable node = unwrap(sqlNode, SqlDescribeTable.class);
+ DrillSqlDescribeTable node = unwrap(sqlNode, DrillSqlDescribeTable.class);
try {
List selectList =
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java
index d5216e735a5..166c350931c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java
@@ -49,6 +49,7 @@
import org.apache.drill.exec.store.AbstractRecordReader;
import org.apache.drill.exec.store.direct.DirectGroupScan;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -71,8 +72,11 @@ public class FindLimit0Visitor extends RelShuttleImpl {
ImmutableSet.builder()
.add(SqlTypeName.INTEGER, SqlTypeName.BIGINT, SqlTypeName.FLOAT, SqlTypeName.DOUBLE,
SqlTypeName.VARCHAR, SqlTypeName.BOOLEAN, SqlTypeName.DATE, SqlTypeName.TIME,
- SqlTypeName.TIMESTAMP, SqlTypeName.INTERVAL_YEAR_MONTH, SqlTypeName.INTERVAL_DAY_TIME,
- SqlTypeName.CHAR)
+ SqlTypeName.TIMESTAMP, SqlTypeName.INTERVAL_YEAR, SqlTypeName.INTERVAL_YEAR_MONTH,
+ SqlTypeName.INTERVAL_MONTH, SqlTypeName.INTERVAL_DAY, SqlTypeName.INTERVAL_DAY_HOUR,
+ SqlTypeName.INTERVAL_DAY_MINUTE, SqlTypeName.INTERVAL_DAY_SECOND, SqlTypeName.INTERVAL_HOUR,
+ SqlTypeName.INTERVAL_HOUR_MINUTE, SqlTypeName.INTERVAL_HOUR_SECOND, SqlTypeName.INTERVAL_MINUTE,
+ SqlTypeName.INTERVAL_MINUTE_SECOND, SqlTypeName.INTERVAL_SECOND, SqlTypeName.CHAR)
.build();
/**
@@ -231,5 +235,26 @@ public int next() {
@Override
public void close() throws Exception {
}
+
+ /**
+ * Represents RelDataTypeReader content as string, used in query plan json.
+ * Example: RelDataTypeReader{columnNames=[col1], columnTypes=[INTERVALYEAR-OPTIONAL]}
+ *
+ * @return string representation of RelDataTypeReader content
+ */
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("RelDataTypeReader{columnNames=");
+ builder.append(columnNames).append(", columnTypes=");
+ List columnTypesList = new ArrayList<>(columnTypes.size());
+ for (TypeProtos.MajorType columnType : columnTypes) {
+ columnTypesList.add(columnType.getMinorType().toString() + "-" + columnType.getMode().toString());
+ }
+ builder.append(columnTypesList);
+ builder.append("}");
+
+ return builder.toString();
+ }
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
index e9d0dca71eb..4d0f34c0892 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
@@ -163,7 +163,7 @@ RewriteType[] should be R(D, E, D, D).
rules.put(SqlSelect.class, R(D, E, D, E, E, E, E, E, D, D));
rules.put(SqlCreateTable.class, R(D, D, D, E, D, D));
rules.put(SqlCreateView.class, R(D, E, E, D));
- rules.put(SqlDescribeTable.class, R(D, D, E));
+ rules.put(DrillSqlDescribeTable.class, R(D, D, E));
rules.put(SqlDropView.class, R(D, D));
rules.put(SqlShowFiles.class, R(D));
rules.put(SqlShowSchemas.class, R(D, D));
@@ -173,7 +173,6 @@ RewriteType[] should be R(D, E, D, D).
rules.put(SqlDropTable.class, R(D, D));
rules.put(SqlRefreshMetadata.class, R(D));
rules.put(SqlSetOption.class, R(D, D, D));
- rules.put(SqlDescribeSchema.class, R(D));
rules.put(SqlCreateFunction.class, R(D));
rules.put(SqlDropFunction.class, R(D));
REWRITE_RULES = ImmutableMap.copyOf(rules);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java
new file mode 100644
index 00000000000..c97d8c31bd2
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java
@@ -0,0 +1,73 @@
+/*
+* 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.exec.planner.sql.parser;
+
+import org.apache.calcite.sql.SqlCall;
+import org.apache.calcite.sql.SqlDescribeTable;
+import org.apache.calcite.sql.SqlIdentifier;
+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.SqlSpecialOperator;
+import org.apache.calcite.sql.SqlWriter;
+import org.apache.calcite.sql.parser.SqlParserPos;
+import org.apache.calcite.util.ImmutableNullableList;
+
+import java.util.List;
+
+/**
+ * Sql parser tree node to represent statement:
+ * { DESCRIBE | DESC } tblname [col_name | wildcard ]
+ */
+public class DrillSqlDescribeTable extends SqlDescribeTable {
+
+ private final SqlNode columnQualifier;
+
+ public static final SqlSpecialOperator OPERATOR =
+ new SqlSpecialOperator("DESCRIBE_TABLE", SqlKind.DESCRIBE_TABLE) {
+ @Override
+ public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) {
+ return new DrillSqlDescribeTable(pos, (SqlIdentifier) operands[0], (SqlIdentifier) operands[1], operands[2]);
+ }
+ };
+
+ public DrillSqlDescribeTable(SqlParserPos pos, SqlIdentifier table, SqlIdentifier column, SqlNode columnQualifier) {
+ super(pos, table, column);
+ this.columnQualifier = columnQualifier;
+ }
+
+ @Override
+ public List getOperandList() {
+ return ImmutableNullableList.of(getTable(), getColumn(), columnQualifier);
+ }
+
+ @Override
+ public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
+ super.unparse(writer, leftPrec, rightPrec);
+ if (columnQualifier != null) {
+ columnQualifier.unparse(writer, leftPrec, rightPrec);
+ }
+ }
+
+ public SqlNode getColumnQualifier() { return columnQualifier; }
+
+ @Override public SqlOperator getOperator() {
+ return OPERATOR;
+ }
+
+}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java
deleted file mode 100644
index 7ea694057ae..00000000000
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java
+++ /dev/null
@@ -1,81 +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.exec.planner.sql.parser;
-
-import org.apache.calcite.sql.SqlCall;
-import org.apache.calcite.sql.SqlIdentifier;
-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.SqlSpecialOperator;
-import org.apache.calcite.sql.SqlWriter;
-import org.apache.calcite.sql.parser.SqlParserPos;
-import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
-import org.apache.drill.exec.planner.sql.handlers.DescribeSchemaHandler;
-import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Sql parse tree node to represent statement:
- * DESCRIBE {SCHEMA | DATABASE} schema_name
- */
-public class SqlDescribeSchema extends DrillSqlCall {
-
- private final SqlIdentifier schema;
-
- public static final SqlSpecialOperator OPERATOR =
- new SqlSpecialOperator("DESCRIBE_SCHEMA", SqlKind.OTHER) {
- @Override
- public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) {
- return new SqlDescribeSchema(pos, (SqlIdentifier) operands[0]);
- }
- };
-
- public SqlDescribeSchema(SqlParserPos pos, SqlIdentifier schema) {
- super(pos);
- this.schema = schema;
- }
-
- @Override
- public SqlOperator getOperator() {
- return OPERATOR;
- }
-
- @Override
- public List getOperandList() {
- return Collections.singletonList((SqlNode) schema);
- }
-
- @Override
- public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
- writer.keyword("DESCRIBE");
- writer.keyword("SCHEMA");
- schema.unparse(writer, leftPrec, rightPrec);
- }
-
- @Override
- public AbstractSqlHandler getSqlHandler(SqlHandlerConfig config) {
- return new DescribeSchemaHandler(config);
- }
-
- public SqlIdentifier getSchema() { return schema; }
-
-}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java
deleted file mode 100644
index 3a09aeaf525..00000000000
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java
+++ /dev/null
@@ -1,102 +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.exec.planner.sql.parser;
-
-import java.util.List;
-
-import org.apache.calcite.tools.Planner;
-
-import org.apache.drill.exec.ops.QueryContext;
-import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
-import org.apache.drill.exec.planner.sql.handlers.DescribeTableHandler;
-import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
-import org.apache.calcite.plan.hep.HepPlanner;
-import org.apache.calcite.sql.SqlCall;
-import org.apache.calcite.sql.SqlIdentifier;
-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.SqlSpecialOperator;
-import org.apache.calcite.sql.SqlWriter;
-import org.apache.calcite.sql.parser.SqlParserPos;
-
-import com.google.common.collect.Lists;
-
-/**
- * Sql parser tree node to represent statement:
- * { DESCRIBE | DESC } tblname [col_name | wildcard ]
- */
-public class SqlDescribeTable extends DrillSqlCall {
-
- private final SqlIdentifier table;
- private final SqlIdentifier column;
- private final SqlNode columnQualifier;
-
- public static final SqlSpecialOperator OPERATOR =
- new SqlSpecialOperator("DESCRIBE_TABLE", SqlKind.OTHER) {
- @Override
- public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) {
- return new SqlDescribeTable(pos, (SqlIdentifier) operands[0], (SqlIdentifier) operands[1], operands[2]);
- }
- };
-
- public SqlDescribeTable(SqlParserPos pos, SqlIdentifier table, SqlIdentifier column, SqlNode columnQualifier) {
- super(pos);
- this.table = table;
- this.column = column;
- this.columnQualifier = columnQualifier;
- }
-
- @Override
- public SqlOperator getOperator() {
- return OPERATOR;
- }
-
- @Override
- public List getOperandList() {
- List opList = Lists.newArrayList();
- opList.add(table);
- opList.add(column);
- opList.add(columnQualifier);
- return opList;
- }
-
- @Override
- public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
- writer.keyword("DESCRIBE");
- writer.keyword("TABLE");
- table.unparse(writer, leftPrec, rightPrec);
- if (column != null) {
- column.unparse(writer, leftPrec, rightPrec);
- }
- if (columnQualifier != null) {
- columnQualifier.unparse(writer, leftPrec, rightPrec);
- }
- }
-
- @Override
- public AbstractSqlHandler getSqlHandler(SqlHandlerConfig config) {
- return new DescribeTableHandler(config);
- }
-
- public SqlIdentifier getTable() { return table; }
- public SqlIdentifier getColumn() { return column; }
- public SqlNode getColumnQualifier() { return columnQualifier; }
-
-}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java
index a88f5237551..e4b966861e1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -22,6 +22,7 @@
import org.apache.calcite.prepare.Prepare;
+import org.apache.calcite.rel.RelRoot;
import org.apache.drill.common.expression.LogicalExpression;
import org.apache.drill.common.logical.LogicalPlan;
import org.apache.drill.common.logical.data.Filter;
@@ -111,12 +112,12 @@ public RelOptTable getTable(Scan scan){
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, List schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, List schemaPath, List viewPath) {
throw new UnsupportedOperationException();
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List schemaPath) {
throw new UnsupportedOperationException();
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java
index 04c35c14964..d3324345dbd 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java
@@ -20,21 +20,21 @@
import java.util.Collections;
import java.util.List;
+import org.apache.calcite.rel.type.DynamicRecordType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeFamily;
import org.apache.calcite.rel.type.RelDataTypeField;
-import org.apache.calcite.rel.type.RelDataTypeImpl;
import org.apache.calcite.rel.type.RelDataTypePrecedenceList;
import org.apache.calcite.sql.type.SqlTypeExplicitPrecedenceList;
import org.apache.calcite.sql.type.SqlTypeName;
-/* We use an instance of this class as the row type for
+/* We use an instance of this class as the dynamic row type for
* Drill table. Since we don't know the schema before hand
* whenever optiq requires us to validate that a field exists
* we always return true and indicate that the type of that
* field is 'ANY'
*/
-public class RelDataTypeDrillImpl extends RelDataTypeImpl {
+public class RelDataTypeDrillImpl extends DynamicRecordType {
private final RelDataTypeFactory typeFactory;
private final RelDataTypeHolder holder;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java
index 483b2776f98..aa3542cacfd 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java
@@ -19,12 +19,15 @@
import java.util.List;
+import org.apache.calcite.rel.type.DynamicRecordType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.rel.type.RelDataTypeFieldImpl;
import org.apache.calcite.sql.type.SqlTypeName;
import com.google.common.collect.Lists;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.Util;
public class RelDataTypeHolder {
static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(RelDataTypeHolder.class);
@@ -59,7 +62,14 @@ public RelDataTypeField getField(RelDataTypeFactory typeFactory, String fieldNam
}
/* This field does not exist in our field list add it */
- RelDataTypeField newField = new RelDataTypeFieldImpl(fieldName, fields.size(), typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.ANY), true));
+ final SqlTypeName typeName = DynamicRecordType.isDynamicStarColName(fieldName)
+ ? SqlTypeName.DYNAMIC_STAR : SqlTypeName.ANY;
+
+ // This field does not exist in our field list add it
+ RelDataTypeField newField = new RelDataTypeFieldImpl(
+ fieldName,
+ fields.size(),
+ typeFactory.createTypeWithNullability(typeFactory.createSqlType(typeName), true));
/* Add the name to our list of field names */
fields.add(newField);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java
index 7d6bfe35ef3..c4586ef3d19 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java
@@ -206,6 +206,11 @@ public void close() throws Exception {
// no-op: default implementation for most implementations.
}
+ @Override
+ public Schema snapshot(long now) {
+ return this;
+ }
+
public void dropTable(String tableName) {
throw UserException.unsupportedError()
.message("Dropping tables is not supported in schema [%s]", getSchemaPath())
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java
index 23441bd49d8..21ab39f4f2e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java
@@ -20,7 +20,7 @@
import java.io.IOException;
import java.util.List;
-import org.apache.calcite.jdbc.SimpleCalciteSchema;
+import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.schema.SchemaPlus;
import org.apache.drill.common.AutoCloseables;
import org.apache.drill.common.exceptions.UserException;
@@ -106,7 +106,7 @@ public SchemaPlus createRootSchema(final String userName, final SchemaConfigInfo
*/
public SchemaPlus createRootSchema(SchemaConfig schemaConfig) {
try {
- final SchemaPlus rootSchema = SimpleCalciteSchema.createRootSchema(false);
+ final SchemaPlus rootSchema = CalciteSchema.createRootSchema(false, false).plus();
dContext.getSchemaFactory().registerSchemas(schemaConfig, rootSchema);
schemaTreesToClose.add(rootSchema);
return rootSchema;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java
index 49d142379bd..81ac8b61095 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java
@@ -134,8 +134,19 @@ public Column(String catalog, String schemaName, String tableName, RelDataTypeFi
case CHAR: this.DATA_TYPE = "CHARACTER"; break;
case VARCHAR: this.DATA_TYPE = "CHARACTER VARYING"; break;
case VARBINARY: this.DATA_TYPE = "BINARY VARYING"; break;
- case INTERVAL_YEAR_MONTH: this.DATA_TYPE = "INTERVAL"; break;
- case INTERVAL_DAY_TIME: this.DATA_TYPE = "INTERVAL"; break;
+ case INTERVAL_YEAR:
+ case INTERVAL_YEAR_MONTH:
+ case INTERVAL_MONTH:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND: this.DATA_TYPE = "INTERVAL"; break;
// 3: SqlTypeName enumerators not yet seen and confirmed or handled.
default:
logger.warn( "Type not handled explicitly (code needs review): "
@@ -292,21 +303,43 @@ public Column(String catalog, String schemaName, String tableName, RelDataTypeFi
}
break;
+ case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
- case INTERVAL_DAY_TIME:
+ case INTERVAL_MONTH:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND:
this.CHARACTER_MAXIMUM_LENGTH = null;
this.CHARACTER_OCTET_LENGTH = null;
this.NUMERIC_PRECISION = null;
this.NUMERIC_PRECISION_RADIX = null;
this.NUMERIC_SCALE = null;
switch ( sqlTypeName ) {
+ case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
+ case INTERVAL_MONTH:
// NOTE: Apparently can't get use RelDataType, etc.; it seems to
// apply a default fractional seconds precision of 6 for SECOND,
// even though SECOND does not exist for this case.
this.DATETIME_PRECISION = 0;
break;
- case INTERVAL_DAY_TIME:
+ case INTERVAL_DAY:
+ case INTERVAL_DAY_HOUR:
+ case INTERVAL_DAY_MINUTE:
+ case INTERVAL_DAY_SECOND:
+ case INTERVAL_HOUR:
+ case INTERVAL_HOUR_MINUTE:
+ case INTERVAL_HOUR_SECOND:
+ case INTERVAL_MINUTE:
+ case INTERVAL_MINUTE_SECOND:
+ case INTERVAL_SECOND:
this.DATETIME_PRECISION =
relDataType
.getIntervalQualifier()
diff --git a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
index ca643f5da9d..8a8e8d23458 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
@@ -23,7 +23,7 @@
import mockit.Mocked;
import mockit.NonStrictExpectations;
-import org.apache.calcite.jdbc.SimpleCalciteSchema;
+import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.schema.SchemaPlus;
import org.apache.drill.common.config.DrillConfig;
import org.apache.drill.common.config.LogicalPlanPersistence;
@@ -111,7 +111,7 @@ protected void testSqlPlan(String sqlCommands) throws Exception {
registry.init();
final FunctionImplementationRegistry functionRegistry = new FunctionImplementationRegistry(config);
final DrillOperatorTable table = new DrillOperatorTable(functionRegistry, systemOptions);
- final SchemaPlus root = SimpleCalciteSchema.createRootSchema(false);
+ final SchemaPlus root = CalciteSchema.createRootSchema(false, false).plus();
registry.getSchemaFactory().registerSchemas(SchemaConfig.newBuilder("foo", context).build(), root);
new NonStrictExpectations() {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java
index e4496028044..57b74669145 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java
@@ -56,7 +56,7 @@ public void testUnsupportedRexNode() {
// create a dummy RexOver object.
RexNode window = rex.makeOver(anyType, SqlStdOperatorTable.AVG, emptyList, emptyList, e, null, null, true,
- false, false);
+ false, false, false);
DrillOptiq.toDrill(null, (RelNode) null, window);
} catch (UserException e) {
if (e.getMessage().contains(DrillOptiq.UNSUPPORTED_REX_NODE_ERROR)) {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java
index f94c40e5a5b..57ca0c1304f 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java
@@ -18,7 +18,7 @@
package org.apache.drill.exec.sql;
import org.apache.calcite.config.Lex;
-import org.apache.calcite.jdbc.SimpleCalciteSchema;
+import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.tools.FrameworkConfig;
import org.apache.calcite.tools.Frameworks;
import org.apache.calcite.tools.Planner;
@@ -46,7 +46,7 @@ public void checkComplexExpressionParsing() throws Exception{
.setIdentifierMaxLength(PlannerSettings.DEFAULT_IDENTIFIER_MAX_LENGTH)
.setParserFactory(DrillParserImpl.FACTORY)
.build()) //
- .defaultSchema(SimpleCalciteSchema.createRootSchema(false)) //
+ .defaultSchema(CalciteSchema.createRootSchema(false, false).plus()) //
.convertletTable(DrillConvertletTable.INSTANCE) //
.build();
Planner planner = Frameworks.getPlanner(config);
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java
index d7ccea43688..6dd2e66362d 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java
@@ -85,7 +85,7 @@ public void testWildCardEmptyNoCache() throws Exception {
runSQL("SELECT COUNT(*) AS `count` FROM dfs.tmp.`4376_3/604*`");
fail("Query should've failed!");
} catch (UserRemoteException uex) {
- final String expectedMsg = "Table 'dfs.tmp.4376_3/604*' not found";
+ final String expectedMsg = "Object '4376_3/604*' not found within 'dfs.tmp'";
assertTrue(String.format("Error message should contain \"%s\" but was instead \"%s\"", expectedMsg,
uex.getMessage()), uex.getMessage().contains(expectedMsg));
}
@@ -112,7 +112,7 @@ public void testSelectEmptyNoCache() throws Exception {
runSQL("SELECT COUNT(*) AS `count` FROM dfs.tmp.`4376_5/6041`");
fail("Query should've failed!");
} catch (UserRemoteException uex) {
- final String expectedMsg = "Table 'dfs.tmp.4376_5/6041' not found";
+ final String expectedMsg = "Object '4376_5/6041' not found within 'dfs.tmp'";
assertTrue(String.format("Error message should contain \"%s\" but was instead \"%s\"", expectedMsg,
uex.getMessage()), uex.getMessage().contains(expectedMsg));
}
diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml
index 9db9c581d69..f59780d5584 100644
--- a/exec/jdbc-all/pom.xml
+++ b/exec/jdbc-all/pom.xml
@@ -509,7 +509,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.
- 32000000
+ 35000000
15000000
${project.build.directory}/drill-jdbc-all-${project.version}.jar
@@ -569,7 +569,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.
- 29000000
+ 31000000
15000000
${project.build.directory}/drill-jdbc-all-${project.version}.jar
diff --git a/exec/jdbc/pom.xml b/exec/jdbc/pom.xml
index dfeaf827f33..d7087f402cf 100644
--- a/exec/jdbc/pom.xml
+++ b/exec/jdbc/pom.xml
@@ -21,9 +21,8 @@
- org.apache.calcite
- calcite-avatica
- ${calcite.version}
+ org.apache.calcite.avatica
+ avatica
jackson-core
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java
index a2b9211467e..689041c57f1 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -46,6 +46,8 @@
import org.apache.calcite.avatica.AvaticaStatement;
import org.apache.calcite.avatica.Meta.ExecuteResult;
import org.apache.calcite.avatica.Meta.MetaResultSet;
+import org.apache.calcite.avatica.NoSuchStatementException;
+import org.apache.calcite.avatica.QueryState;
import org.apache.calcite.avatica.UnregisteredDriver;
import org.apache.drill.common.config.DrillConfig;
import org.apache.drill.common.exceptions.DrillRuntimeException;
@@ -180,16 +182,16 @@ protected DrillConnectionImpl(DriverImpl driver, AvaticaFactory factory,
@Override
- protected ResultSet createResultSet(MetaResultSet metaResultSet) throws SQLException {
- return super.createResultSet(metaResultSet);
+ protected ResultSet createResultSet(MetaResultSet metaResultSet, QueryState state) throws SQLException {
+ return super.createResultSet(metaResultSet, state);
}
@Override
protected ExecuteResult prepareAndExecuteInternal(AvaticaStatement statement, String sql, long maxRowCount)
- throws SQLException {
+ throws SQLException, NoSuchStatementException {
try {
return super.prepareAndExecuteInternal(statement, sql, maxRowCount);
- } catch(RuntimeException e) {
+ } catch (RuntimeException e) {
Throwables.propagateIfInstanceOf(e.getCause(), SQLException.class);
throw e;
}
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java
index 629e47be336..38715e991da 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -34,6 +34,7 @@
import org.apache.calcite.avatica.Helper;
import org.apache.calcite.avatica.Meta;
import org.apache.calcite.avatica.Meta.StatementHandle;
+import org.apache.calcite.avatica.QueryState;
import org.apache.drill.exec.client.DrillClient;
import org.apache.drill.exec.client.ServerMethod;
import org.apache.drill.exec.proto.UserProtos.CreatePreparedStatementResp;
@@ -170,12 +171,13 @@ private DrillJdbc41PreparedStatement newServerPreparedStatement(DrillConnectionI
@Override
public DrillResultSetImpl newResultSet(AvaticaStatement statement,
+ QueryState state,
Meta.Signature signature,
TimeZone timeZone,
Meta.Frame firstFrame) {
final ResultSetMetaData metaData =
newResultSetMetaData(statement, signature);
- return new DrillResultSetImpl(statement, signature, metaData, timeZone, firstFrame);
+ return new DrillResultSetImpl(statement, state, signature, metaData, timeZone, firstFrame);
}
@Override
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java
index b78e93a5591..810ffef8cd8 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -38,6 +38,10 @@
import org.apache.calcite.avatica.ColumnMetaData.StructType;
import org.apache.calcite.avatica.Meta;
import org.apache.calcite.avatica.MetaImpl;
+import org.apache.calcite.avatica.MissingResultsException;
+import org.apache.calcite.avatica.NoSuchStatementException;
+import org.apache.calcite.avatica.QueryState;
+import org.apache.calcite.avatica.remote.TypedValue;
import org.apache.drill.common.exceptions.DrillRuntimeException;
import org.apache.drill.common.util.DrillStringUtils;
import org.apache.drill.exec.client.ServerMethod;
@@ -92,8 +96,8 @@ private static Signature newSignature(String sql) {
sql,
Collections. emptyList(),
Collections.emptyMap(),
- null // CursorFactory set to null, as SQL requests use DrillCursor
- );
+ null, // CursorFactory set to null, as SQL requests use DrillCursor
+ Meta.StatementType.SELECT);
}
private MetaResultSet s(String s) {
@@ -322,7 +326,7 @@ public Object apply(ResponseValue input) {
StructType fieldMetaData = drillFieldMetaData(clazz);
Meta.Signature signature = Meta.Signature.create(
fieldMetaData.columns, "",
- Collections.emptyList(), CursorFactory.record(clazz));
+ Collections.emptyList(), CursorFactory.record(clazz), Meta.StatementType.SELECT);
AvaticaStatement statement = connection.createStatement();
return MetaResultSet.create(connection.id, statement.getId(), true,
@@ -419,8 +423,11 @@ protected MetaImpl.MetaTable adapt(TableMetadata protoValue) {
* Implements {@link DatabaseMetaData#getTables}.
*/
@Override
- public MetaResultSet getTables(String catalog, final Pat schemaPattern, final Pat tableNamePattern,
- final List typeList) {
+ public MetaResultSet getTables(ConnectionHandle ch,
+ String catalog,
+ Pat schemaPattern,
+ Pat tableNamePattern,
+ List typeList) {
if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_TABLES)) {
return clientGetTables(catalog, schemaPattern, tableNamePattern, typeList);
}
@@ -962,8 +969,7 @@ protected MetaColumn adapt(ColumnMetadata value) {
* Implements {@link DatabaseMetaData#getColumns}.
*/
@Override
- public MetaResultSet getColumns(String catalog, Pat schemaPattern,
- Pat tableNamePattern, Pat columnNamePattern) {
+ public MetaResultSet getColumns(ConnectionHandle ch, String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) {
if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_COLUMNS)) {
return clientGetColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
}
@@ -1022,7 +1028,7 @@ private MetaResultSet clientGetSchemas(String catalog, Pat schemaPattern) {
* Implements {@link DatabaseMetaData#getSchemas}.
*/
@Override
- public MetaResultSet getSchemas(String catalog, Pat schemaPattern) {
+ public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) {
if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_SCHEMAS)) {
return clientGetSchemas(catalog, schemaPattern);
}
@@ -1069,7 +1075,7 @@ private MetaResultSet clientGetCatalogs() {
* Implements {@link DatabaseMetaData#getCatalogs}.
*/
@Override
- public MetaResultSet getCatalogs() {
+ public MetaResultSet getCatalogs(ConnectionHandle ch) {
if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_CATALOGS)) {
return clientGetCatalogs();
}
@@ -1105,8 +1111,55 @@ public ExecuteResult prepareAndExecute(StatementHandle h, String sql, long maxRo
}
}
+ @Override
+ public ExecuteResult prepareAndExecute(final StatementHandle handle, final String sql, final long maxRowCount,
+ int maxRowsInFirstFrame, final PrepareCallback callback) throws NoSuchStatementException {
+ return prepareAndExecute(handle, sql, maxRowCount, callback);
+ }
+
+ @Override
+ public ExecuteBatchResult prepareAndExecuteBatch(StatementHandle statementHandle, List list) throws NoSuchStatementException {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public ExecuteBatchResult executeBatch(StatementHandle statementHandle, List> list) throws NoSuchStatementException {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public Frame fetch(StatementHandle statementHandle, long l, int i) throws NoSuchStatementException, MissingResultsException {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public ExecuteResult execute(StatementHandle statementHandle, List list, long l) throws NoSuchStatementException {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public ExecuteResult execute(StatementHandle statementHandle, List list, int i) throws NoSuchStatementException {
+ return null;
+ }
+
@Override
public void closeStatement(StatementHandle h) {
// Nothing
}
+
+ @Override
+ public boolean syncResults(StatementHandle statementHandle, QueryState queryState, long l) throws NoSuchStatementException {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public void commit(ConnectionHandle connectionHandle) {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
+ @Override
+ public void rollback(ConnectionHandle connectionHandle) {
+ throw new UnsupportedOperationException(this.getClass().getSimpleName());
+ }
+
}
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java
index f1ba4c1acee..a45412f1c52 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -58,13 +58,9 @@ protected DrillPreparedStatementImpl(DrillConnectionImpl connection,
resultSetType, resultSetConcurrency, resultSetHoldability);
connection.openStatementsRegistry.addStatement(this);
this.preparedStatementHandle = preparedStatementHandle;
- if (preparedStatementHandle != null) {
- ((DrillColumnMetaDataList) signature.columns).updateColumnMetaData(preparedStatementHandle.getColumnsList());
- }
+ ((DrillColumnMetaDataList) signature.columns).updateColumnMetaData(preparedStatementHandle.getColumnsList());
}
-
-
/**
* Throws AlreadyClosedSqlException iff this PreparedStatement is closed.
*
@@ -333,13 +329,17 @@ public void addBatch(String sql) throws SQLException {
}
@Override
- public void clearBatch() throws SQLException {
- throwIfClosed();
+ public void clearBatch() throws RuntimeException {
+ try {
+ throwIfClosed();
+ } catch (AlreadyClosedSqlException e) {
+ throw new RuntimeException(e);
+ }
try {
super.clearBatch();
}
catch (UnsupportedOperationException e) {
- throw new SQLFeatureNotSupportedException(e.getMessage(), e);
+ throw new RuntimeException(new SQLFeatureNotSupportedException(e.getMessage(), e));
}
}
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 c8b4e3d5516..f4fc588c6ff 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
@@ -1,4 +1,4 @@
-/**
+/*
* 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
@@ -48,6 +48,7 @@
import org.apache.calcite.avatica.AvaticaStatement;
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;
@@ -66,10 +67,10 @@ class DrillResultSetImpl extends AvaticaResultSet implements DrillResultSet {
private final DrillConnectionImpl connection;
private volatile boolean hasPendingCancelationNotification = false;
- DrillResultSetImpl(AvaticaStatement statement, Meta.Signature signature,
+ DrillResultSetImpl(AvaticaStatement statement, QueryState state, Meta.Signature signature,
ResultSetMetaData resultSetMetaData, TimeZone timeZone,
Meta.Frame firstFrame) {
- super(statement, signature, resultSetMetaData, timeZone, firstFrame);
+ super(statement, state, signature, resultSetMetaData, timeZone, firstFrame);
connection = (DrillConnectionImpl) statement.getConnection();
}
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java
index ed95162258f..ac848441c2d 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java
@@ -128,7 +128,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase {
private static ResultSet mdrReqCHAR_5;
// No NCHAR, etc., in Drill (?).
private static ResultSet mdrOptVARBINARY_16;
- private static ResultSet mdrOptBINARY_1048576;
+ private static ResultSet mdrOptBINARY_65536;
private static ResultSet mdrReqDATE;
private static ResultSet mdrReqTIME;
@@ -256,7 +256,7 @@ protected static void setUpMetadataToCheck() throws Exception {
+ "\n CAST( NULL AS VARCHAR ) AS mdrOptVARCHAR, "
+ "\n CAST( '55' AS CHAR(5) ) AS mdrReqCHAR_5, "
+ "\n CAST( NULL AS VARBINARY(16) ) AS mdrOptVARBINARY_16, "
- + "\n CAST( NULL AS VARBINARY(1048576) ) AS mdrOptBINARY_1048576, "
+ + "\n CAST( NULL AS VARBINARY(65536) ) AS mdrOptBINARY_65536, "
+ "\n CAST( NULL AS BINARY(8) ) AS mdrOptBINARY_8, "
+ "\n "
+ "\n DATE '2015-01-01' AS mdrReqDATE, "
@@ -307,7 +307,7 @@ protected static void setUpMetadataToCheck() throws Exception {
mdrOptVARCHAR = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARCHAR" );
mdrReqCHAR_5 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqCHAR_5" );
mdrOptVARBINARY_16 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARBINARY_16" );
- mdrOptBINARY_1048576 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_1048576" );
+ mdrOptBINARY_65536 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_65536" );
mdrReqDATE = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqDATE" );
mdrReqTIME = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqTIME" );
@@ -671,7 +671,7 @@ public void test_DATA_TYPE_hasRightValue_mdrOptVARBINARY_16() throws SQLExceptio
@Test
public void test_DATA_TYPE_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "DATA_TYPE" ), equalTo( Types.VARBINARY ) );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "DATA_TYPE" ), equalTo( Types.VARBINARY ) );
}
@Test
@@ -849,7 +849,7 @@ public void test_TYPE_NAME_hasRightValue_mdrOptVARBINARY_16() throws SQLExceptio
@Test
public void test_TYPE_NAME_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( mdrOptBINARY_1048576.getString( "TYPE_NAME" ),
+ assertThat( mdrOptBINARY_65536.getString( "TYPE_NAME" ),
equalTo( "BINARY VARYING" ) );
}
@@ -1039,7 +1039,7 @@ public void test_COLUMN_SIZE_hasRightValue_mdrOptVARBINARY_16() throws SQLExcept
@Test
public void test_COLUMN_SIZE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "COLUMN_SIZE" ), equalTo( 1048576 ) );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "COLUMN_SIZE" ), equalTo( 65536 ) );
}
@Test
@@ -1109,13 +1109,16 @@ public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3D_Mi() throws SQLExce
equalTo( 12 ) ); // "P123DT12H12M"
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "COLUMN_SIZE" ),
equalTo( 20 ) ); // "P12DT12H12M12.12345S"
}
+ @Ignore( "Ignored after Calcite update" )
+ @Test
public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
getIntOrNull( mdrReqINTERVAL_2D_S5, "COLUMN_SIZE" ),
@@ -1134,13 +1137,15 @@ public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_4H_Mi() throws SQLExce
equalTo( 7 ) ); // "PT1H12M"
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3H_S1() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "COLUMN_SIZE" ),
equalTo( 14 ) ); // "PT123H12M12.1S"
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_3H_S1() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -1172,13 +1177,15 @@ public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3S() throws SQLExcepti
equalTo( 13 ) ); // "PT123.123456S"
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3S1() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_3S1, "COLUMN_SIZE" ),
equalTo( 8 ) ); // "PT123.1S"
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_3S1() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -1342,7 +1349,7 @@ public void test_DECIMAL_DIGITS_hasRightValue_mdrOptVARBINARY_16() throws SQLExc
@Test
public void test_DECIMAL_DIGITS_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "DECIMAL_DIGITS" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "DECIMAL_DIGITS" ), nullValue() );
}
@Test
@@ -1420,12 +1427,14 @@ public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_3D_Mi() throws SQLE
assertThat( getIntOrNull( mdrReqINTERVAL_3D_Mi, "DECIMAL_DIGITS" ), equalTo( 6 ) );
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "DECIMAL_DIGITS" ), equalTo( 5 ) );
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_DECIMAL_DIGITS_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -1450,12 +1459,14 @@ public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_1H_Mi() throws SQLE
assertThat( getIntOrNull( mdrReqINTERVAL_1H_Mi, "DECIMAL_DIGITS" ), equalTo( 6 ) );
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_3H_S1() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "DECIMAL_DIGITS" ), equalTo( 1 ) );
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_DECIMAL_DIGITS_hasINTERIMValue_mdrReqINTERVAL_3H_S1() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -1640,7 +1651,7 @@ public void test_NUM_PREC_RADIX_hasRightValue_mdrOptVARBINARY_16() throws SQLExc
@Test
public void test_NUM_PREC_RADIX_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUM_PREC_RADIX" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "NUM_PREC_RADIX" ), nullValue() );
}
@Test
@@ -1824,7 +1835,7 @@ public void test_NULLABLE_hasRightValue_mdrOptVARBINARY_16() throws SQLException
@Test
public void test_NULLABLE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
assertThat( "ResultSetMetaData.column...Null... nullability code:",
- getIntOrNull( mdrOptBINARY_1048576, "NULLABLE" ), equalTo( columnNullable ) );
+ getIntOrNull(mdrOptBINARY_65536, "NULLABLE" ), equalTo( columnNullable ) );
}
@Test
@@ -2186,7 +2197,7 @@ public void test_CHAR_OCTET_LENGTH_hasRightValue_mdrOptVARBINARY_16() throws SQL
@Test
public void test_CHAR_OCTET_LENGTH_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHAR_OCTET_LENGTH" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "CHAR_OCTET_LENGTH" ), nullValue() );
}
@Test
@@ -2443,7 +2454,7 @@ public void test_IS_NULLABLE_hasRightValue_mdrOptVARBINARY_16() throws SQLExcept
@Test
public void test_IS_NULLABLE_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException {
- assertThat( mdrOptBINARY_1048576.getString( "IS_NULLABLE" ), equalTo( "YES" ) );
+ assertThat( mdrOptBINARY_65536.getString( "IS_NULLABLE" ), equalTo( "YES" ) );
}
@Test
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java
index 7e0934c07bb..214b7caf9c2 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java
@@ -99,7 +99,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase {
private static ResultSet mdrReqCHAR_5;
// No NCHAR, etc., in Drill (?).
private static ResultSet mdrOptVARBINARY_16;
- private static ResultSet mdrOptBINARY_1048576;
+ private static ResultSet mdrOptBINARY_65536;
private static ResultSet mdrReqDATE;
private static ResultSet mdrReqTIME;
@@ -236,7 +236,7 @@ public static void setUpConnectionAndMetadataToCheck() throws Exception {
+ "\n CAST( NULL AS VARCHAR ) AS mdrOptVARCHAR, "
+ "\n CAST( '55' AS CHAR(5) ) AS mdrReqCHAR_5, "
+ "\n CAST( NULL AS VARBINARY(16) ) AS mdrOptVARBINARY_16, "
- + "\n CAST( NULL AS VARBINARY(1048576) ) AS mdrOptBINARY_1048576, "
+ + "\n CAST( NULL AS VARBINARY(65536) ) AS mdrOptBINARY_65536, "
+ "\n CAST( NULL AS BINARY(8) ) AS mdrOptBINARY_8, "
+ "\n "
+ "\n DATE '2015-01-01' AS mdrReqDATE, "
@@ -287,7 +287,7 @@ public static void setUpConnectionAndMetadataToCheck() throws Exception {
mdrOptVARCHAR = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARCHAR" );
mdrReqCHAR_5 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqCHAR_5" );
mdrOptVARBINARY_16 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARBINARY_16" );
- mdrOptBINARY_1048576 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_1048576" );
+ mdrOptBINARY_65536 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_65536" );
mdrReqDATE = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqDATE" );
mdrReqTIME = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqTIME" );
@@ -829,7 +829,7 @@ public void test_IS_NULLABLE_hasRightValue_mdrOptVARBINARY_16() throws SQLExcept
@Test
public void test_IS_NULLABLE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
assertThat( "ResultSetMetaData.column...Null... nullability code:",
- mdrOptBINARY_1048576.getString( "IS_NULLABLE" ), equalTo( "YES" ) );
+ mdrOptBINARY_65536.getString( "IS_NULLABLE" ), equalTo( "YES" ) );
}
@Test
@@ -1006,8 +1006,8 @@ public void test_DATA_TYPE_hasRightValue_mdrOptVARBINARY_16() throws SQLExceptio
@Ignore( "TODO(DRILL-3368): unignore when BINARY is implemented enough" )
@Test
public void test_DATA_TYPE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( mdrOptBINARY_1048576.getString( "DATA_TYPE" ), equalTo( "BINARY VARYING" ) ); // ?? current
- assertThat( mdrOptBINARY_1048576.getString( "DATA_TYPE" ), equalTo( "BINARY" ) ); // ?? should be
+ assertThat( mdrOptBINARY_65536.getString( "DATA_TYPE" ), equalTo( "BINARY VARYING" ) ); // ?? current
+ assertThat( mdrOptBINARY_65536.getString( "DATA_TYPE" ), equalTo( "BINARY" ) ); // ?? should be
}
@Test
@@ -1172,7 +1172,7 @@ public void test_CHARACTER_MAXIMUM_LENGTH_hasRightValue_mdrOptVARBINARY_16() thr
@Test
public void test_CHARACTER_MAXIMUM_LENGTH_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHARACTER_MAXIMUM_LENGTH" ), equalTo( 1048576 ) );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "CHARACTER_MAXIMUM_LENGTH" ), equalTo( 65536 ) );
}
@Test
@@ -1339,7 +1339,7 @@ public void test_CHARACTER_OCTET_LENGTH_hasRightValue_mdrOptVARBINARY_16() throw
@Test
public void test_CHARACTER_OCTET_LENGTH_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHARACTER_OCTET_LENGTH" ), equalTo( 1048576 ));
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "CHARACTER_OCTET_LENGTH" ), equalTo( 65536 ));
}
@Test
@@ -1499,7 +1499,7 @@ public void test_NUMERIC_PRECISION_hasRightValue_mdrOptVARBINARY_16() throws SQL
@Test
public void test_NUMERIC_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_PRECISION" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_PRECISION" ), nullValue() );
}
@Test
@@ -1659,7 +1659,7 @@ public void test_NUMERIC_PRECISION_RADIX_hasRightValue_mdrOptVARBINARY_16() thro
@Test
public void test_NUMERIC_PRECISION_RADIX_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_PRECISION_RADIX" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_PRECISION_RADIX" ), nullValue() );
}
@Test
@@ -1819,7 +1819,7 @@ public void test_NUMERIC_SCALE_hasRightValue_mdrOptVARBINARY_16() throws SQLExce
@Test
public void test_NUMERIC_SCALE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_SCALE" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_SCALE" ), nullValue() );
}
@Test
@@ -1979,7 +1979,7 @@ public void test_DATETIME_PRECISION_hasRightValue_mdrOptVARBINARY_16() throws SQ
@Test
public void test_DATETIME_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "DATETIME_PRECISION" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "DATETIME_PRECISION" ), nullValue() );
}
@Test
@@ -2050,12 +2050,14 @@ public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_3D_Mi() throws
assertThat( getIntOrNull( mdrReqINTERVAL_3D_Mi, "DATETIME_PRECISION" ), equalTo( 6 ) );
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "DATETIME_PRECISION" ), equalTo( 5 ) );
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -2080,12 +2082,14 @@ public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_1H_Mi() throws
assertThat( getIntOrNull( mdrReqINTERVAL_1H_Mi, "DATETIME_PRECISION" ), equalTo( 6 ) );
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_H_S3() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "DATETIME_PRECISION" ), equalTo( 1 ) );
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_H_S3() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -2119,12 +2123,14 @@ public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_3S() throws SQL
assertThat( getIntOrNull( mdrReqINTERVAL_3S, "DATETIME_PRECISION" ), equalTo( 6 ) );
}
- @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
+ //Fixed with Calcite update
+ //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" )
@Test
public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_3S1() throws SQLException {
assertThat( getIntOrNull( mdrReqINTERVAL_3S1, "DATETIME_PRECISION" ), equalTo( 1 ) );
}
+ @Ignore( "Ignored after Calcite update" )
@Test
public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_3S1() throws SQLException {
assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.",
@@ -2258,7 +2264,7 @@ public void test_INTERVAL_TYPE_hasRightValue_mdrOptVARBINARY_16() throws SQLExce
@Test
public void test_INTERVAL_TYPE_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( mdrOptBINARY_1048576.getString( "INTERVAL_TYPE" ), nullValue() );
+ assertThat( mdrOptBINARY_65536.getString( "INTERVAL_TYPE" ), nullValue() );
}
@Test
@@ -2491,7 +2497,7 @@ public void test_INTERVAL_PRECISION_hasRightValue_mdrOptVARBINARY_16() throws SQ
@Test
public void test_INTERVAL_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException {
- assertThat( getIntOrNull( mdrOptBINARY_1048576, "INTERVAL_PRECISION" ), nullValue() );
+ assertThat( getIntOrNull(mdrOptBINARY_65536, "INTERVAL_PRECISION" ), nullValue() );
}
@Test
diff --git a/pom.xml b/pom.xml
index 6189cf2f7f8..ce64591eb17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,8 @@
18.0
2
1.8.1-drill-r0
- 1.4.0-drill-r23
+ 1.13.0-drill-r0
+ 1.10.0
2.7.6
1.1.9-drill-r7
2.7.9
@@ -57,7 +58,7 @@
1.2.1
2.7.1
1.1.3
- 0.9.15
+ 1.0
2.3.26-incubating
3.16.1-GA
0.6.6
@@ -716,6 +717,25 @@
+
+ org.apache.calcite.avatica
+ avatica
+ ${avatica.version}
+
+
+ org.apache.calcite.avatica
+ avatica-core
+
+
+ commons-logging
+ commons-logging
+
+
+ protobuf-java
+ com.google.protobuf
+
+
+
org.msgpack
msgpack
@@ -1722,6 +1742,10 @@
calcite-core
${calcite.version}
+
+ org.apache.calcite.avatica
+ avatica-core
+
org.jgrapht
jgrapht-jdk1.5
diff --git a/tools/fmpp/pom.xml b/tools/fmpp/pom.xml
index 91e686c3602..4f4b7e9b146 100644
--- a/tools/fmpp/pom.xml
+++ b/tools/fmpp/pom.xml
@@ -45,9 +45,19 @@
3.3.3
- net.sourceforge.fmpp
- fmpp
+ com.googlecode.fmpp-maven-plugin
+ fmpp-maven-plugin
${fmpp.version}
+
+
+ log4j
+ log4j
+
+
+ commons-logging-api
+ commons-logging
+
+
org.freemarker