You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by am...@apache.org on 2018/01/18 23:17:37 UTC
[13/18] drill git commit: DRILL-3993: Changes to support Calcite 1.13
DRILL-3993: Changes to support Calcite 1.13
- fixed all compiling errors (main changes were: Maven changes, chenges RelNode -> RelRoot, implementing some new methods from updated interfaces, chenges some literals, logger changes);
- fixed unexpected column errors, validation errors and assertion errors after Calcite update;
- fixed describe table/schema statement according to updated logic;
- added fixes with time-intervals;
- changed precision of BINARY to 65536 (was 1048576) according to updated logic (Calcite overrides bigger precision to own maxPrecision);
- ignored some incorrect tests with DRILL-3244;
- changed "Table not found" message to "Object not found within" according to new Calcite changes.
Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/9fabb612
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/9fabb612
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/9fabb612
Branch: refs/heads/master
Commit: 9fabb612f16f6f541b3bde68ad7d734cad26df33
Parents: 450e670
Author: Roman Kulyk <ro...@gmail.com>
Authored: Tue Aug 29 14:10:24 2017 +0000
Committer: Volodymyr Vysotskyi <vv...@gmail.com>
Committed: Tue Jan 16 12:10:13 2018 +0200
----------------------------------------------------------------------
contrib/storage-hive/hive-exec-shade/pom.xml | 6 +-
.../exec/store/jdbc/JdbcExpressionCheck.java | 20 +++-
.../apache/drill/exec/store/jdbc/JdbcPrel.java | 2 +-
exec/java-exec/pom.xml | 4 +
exec/java-exec/src/main/codegen/data/Parser.tdd | 23 ++++-
.../src/main/codegen/includes/parserImpls.ftl | 25 ++++-
.../org/apache/drill/exec/dotdrill/View.java | 15 ++-
.../planner/FileSystemPartitionDescriptor.java | 6 +-
.../exec/planner/common/DrillStoreRelBase.java | 9 +-
.../exec/planner/common/DrillValuesRelBase.java | 13 ++-
.../planner/logical/DrillAggregateRule.java | 10 +-
.../exec/planner/logical/DrillConditions.java | 8 +-
.../planner/logical/DrillConstExecutor.java | 14 ++-
.../exec/planner/logical/DrillJoinRule.java | 12 +--
.../drill/exec/planner/logical/DrillOptiq.java | 32 +++++-
.../logical/DrillProjectSetOpTransposeRule.java | 5 +-
.../logical/DrillPushProjectPastFilterRule.java | 7 +-
.../logical/DrillPushProjectPastJoinRule.java | 5 +-
.../logical/DrillReduceAggregatesRule.java | 7 +-
.../logical/DrillReduceExpressionsRule.java | 25 ++---
.../exec/planner/logical/DrillRelFactories.java | 11 +-
.../exec/planner/logical/DrillStoreRel.java | 9 +-
.../exec/planner/logical/DrillUnionAllRule.java | 8 +-
.../exec/planner/logical/DrillViewTable.java | 9 +-
.../exec/planner/physical/HashAggPrel.java | 5 -
.../exec/planner/physical/HashAggPrule.java | 7 +-
.../exec/planner/physical/HashJoinPrel.java | 1 -
.../exec/planner/physical/HashJoinPrule.java | 9 +-
.../exec/planner/physical/MergeJoinPrule.java | 6 +-
.../planner/physical/NestedLoopJoinPrule.java | 6 +-
.../exec/planner/physical/StreamAggPrule.java | 6 +-
.../exec/planner/physical/UnionAllPrule.java | 13 ++-
.../planner/physical/UnionDistinctPrule.java | 14 +--
.../exec/planner/physical/WindowPrule.java | 8 +-
.../physical/visitor/TopProjectVisitor.java | 2 +-
.../sql/DrillCalciteSqlAggFunctionWrapper.java | 5 +-
.../sql/DrillCalciteSqlFunctionWrapper.java | 5 +-
.../sql/DrillCalciteSqlOperatorWrapper.java | 5 +-
.../exec/planner/sql/DrillParserConfig.java | 12 +++
.../drill/exec/planner/sql/DrillSqlWorker.java | 15 +++
.../drill/exec/planner/sql/SqlConverter.java | 41 ++++----
.../exec/planner/sql/TypeInferenceUtils.java | 20 +++-
.../planner/sql/handlers/DefaultSqlHandler.java | 29 ++++--
.../sql/handlers/DescribeSchemaHandler.java | 2 +-
.../sql/handlers/DescribeTableHandler.java | 5 +-
.../planner/sql/handlers/FindLimit0Visitor.java | 29 +++++-
.../sql/parser/CompoundIdentifierConverter.java | 3 +-
.../sql/parser/DrillSqlDescribeTable.java | 73 +++++++++++++
.../planner/sql/parser/SqlDescribeSchema.java | 81 ---------------
.../planner/sql/parser/SqlDescribeTable.java | 102 -------------------
.../exec/planner/torel/ConversionContext.java | 7 +-
.../planner/types/RelDataTypeDrillImpl.java | 6 +-
.../exec/planner/types/RelDataTypeHolder.java | 12 ++-
.../apache/drill/exec/store/AbstractSchema.java | 5 +
.../drill/exec/store/SchemaTreeProvider.java | 4 +-
.../drill/exec/store/ischema/Records.java | 41 +++++++-
.../java/org/apache/drill/PlanningBase.java | 4 +-
.../exec/planner/logical/DrillOptiqTest.java | 2 +-
.../exec/sql/TestSqlBracketlessSyntax.java | 4 +-
.../store/parquet/TestParquetGroupScan.java | 4 +-
exec/jdbc-all/pom.xml | 4 +-
exec/jdbc/pom.xml | 5 +-
.../drill/jdbc/impl/DrillConnectionImpl.java | 12 ++-
.../drill/jdbc/impl/DrillJdbc41Factory.java | 6 +-
.../apache/drill/jdbc/impl/DrillMetaImpl.java | 73 +++++++++++--
.../jdbc/impl/DrillPreparedStatementImpl.java | 18 ++--
.../drill/jdbc/impl/DrillResultSetImpl.java | 7 +-
.../jdbc/DatabaseMetaDataGetColumnsTest.java | 43 +++++---
.../jdbc/test/TestInformationSchemaColumns.java | 40 ++++----
pom.xml | 28 ++++-
tools/fmpp/pom.xml | 14 ++-
71 files changed, 692 insertions(+), 436 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/contrib/storage-hive/hive-exec-shade/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/storage-hive/hive-exec-shade/pom.xml b/contrib/storage-hive/hive-exec-shade/pom.xml
index 30472e5..de9e055 100644
--- a/contrib/storage-hive/hive-exec-shade/pom.xml
+++ b/contrib/storage-hive/hive-exec-shade/pom.xml
@@ -42,6 +42,10 @@
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
+ <exclusion>
+ <artifactId>calcite-avatica</artifactId>
+ <groupId>org.apache.calcite</groupId>
+ </exclusion>
</exclusions>
</dependency>
</dependencies>
@@ -71,7 +75,7 @@
<include>com.twitter:parquet-encoding</include>
<include>com.twitter:parquet-generator</include>
<include>org.apache.calcite:calcite-core</include>
- <include>org.apache.calcite:calcite-avatica</include>
+ <include>org.apache.calcite.avatica:avatica-core</include>
</includes>
</artifactSet>
<createDependencyReducedPom>false</createDependencyReducedPom>
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcExpressionCheck.java
----------------------------------------------------------------------
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 2015a77..e0b01b3 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.RexLiteral;
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 @@ class JdbcExpressionCheck implements RexVisitor<Boolean> {
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;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/contrib/storage-jdbc/src/main/java/org/apache/drill/exec/store/jdbc/JdbcPrel.java
----------------------------------------------------------------------
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 58549db..e335c08 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 class JdbcPrel extends AbstractRelNode implements Prel {
(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();
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/pom.xml
----------------------------------------------------------------------
diff --git a/exec/java-exec/pom.xml b/exec/java-exec/pom.xml
index 728477b..8e64224 100644
--- a/exec/java-exec/pom.xml
+++ b/exec/java-exec/pom.xml
@@ -212,6 +212,10 @@
<artifactId>calcite-core</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.calcite.avatica</groupId>
+ <artifactId>avatica</artifactId>
+ </dependency>
+ <dependency>
<groupId>net.sf.jpam</groupId>
<artifactId>jpam</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/codegen/data/Parser.tdd
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/data/Parser.tdd b/exec/java-exec/src/main/codegen/data/Parser.tdd
index 6c23808..507d692 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 <scope>" 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,
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/codegen/includes/parserImpls.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/includes/parserImpls.ftl b/exec/java-exec/src/main/codegen/includes/parserImpls.ftl
index 67d1501..502c5b3 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) :
}
{
<LPAREN>
- fieldList = SimpleIdentifierCommaList()
+ fieldList = ParenthesizedCompoundIdentifierList()
<RPAREN>
{
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<SqlIdentifier> list = new ArrayList<SqlIdentifier>();
+ SqlIdentifier id;
+}
+{
+ id = SimpleIdentifier() {list.add(id);}
+ (
+ <COMMA> id = SimpleIdentifier() {list.add(id);}) *
+ {
+ return new SqlNodeList(list, getPos());
+ }
+}
+</#if>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/dotdrill/View.java
----------------------------------------------------------------------
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 97be73d..2b69f00 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 class View {
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;
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/FileSystemPartitionDescriptor.java
----------------------------------------------------------------------
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 a04f34d..49c9726 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 java.util.Map;
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 @@ public class FileSystemPartitionDescriptor extends AbstractPartitionDescriptor {
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.<String>of());
// return an EnumerableTableScan with fileSelection being part of digest of TableScan node.
return DirPrunedEnumerableTableScan.create(oldScan.getCluster(), newOptTableImpl, newFileSelection.toString());
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillStoreRelBase.java
----------------------------------------------------------------------
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 d61f271..2781564 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.rel.core.TableModify;
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 @@ import org.apache.calcite.plan.RelTraitSet;
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<String> 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<String> updateColumnList, List<RexNode> sourceExpressionList, boolean flattened) {
+ super(cluster, traits, table, catalogReader, child, operation, updateColumnList, sourceExpressionList, flattened);
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/common/DrillValuesRelBase.java
----------------------------------------------------------------------
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 4d54fce..a182d35 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 @@ public abstract class DrillValuesRelBase extends Values implements DrillRelNode
}
return;
+ case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
+ case INTERVAL_MONTH:
if (isLiteralNull(literal)) {
out.writeIntervalNull();
} else {
@@ -225,7 +227,16 @@ public abstract class DrillValuesRelBase extends Values implements DrillRelNode
}
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 {
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillAggregateRule.java
----------------------------------------------------------------------
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 0ca4447..cbb5aee 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.RelOptRuleCall;
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 @@ public class DrillAggregateRule extends RelOptRule {
@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 class DrillAggregateRule extends RelOptRule {
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());
}
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConditions.java
----------------------------------------------------------------------
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 f68007d..266ce64 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 @@ import org.apache.calcite.rex.RexNode;
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) {
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
----------------------------------------------------------------------
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 19c7524..cdba8b8 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 @@ package org.apache.drill.exec.planner.logical;
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.math.BigInteger;
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 class DrillConstExecutor implements RelOptPlanner.Executor {
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 class DrillConstExecutor implements RelOptPlanner.Executor {
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 class DrillConstExecutor implements RelOptPlanner.Executor {
}
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
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillJoinRule.java
----------------------------------------------------------------------
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 d41ae72..deb8ace 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.sql.fun.SqlStdOperatorTable;
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 @@ public class DrillJoinRule extends RelOptRule {
@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 class DrillJoinRule extends RelOptRule {
call.transformTo(new DrillFilterRel(join.getCluster(), traits, joinRel, remaining));
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
@@ -109,8 +109,8 @@ public class DrillJoinRule extends RelOptRule {
List<RelDataTypeField> 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,
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java
----------------------------------------------------------------------
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 0d8efd5..7dc2050 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 class DrillOptiq {
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 @@ public class DrillOptiq {
}
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 class DrillOptiq {
}
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);
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillProjectSetOpTransposeRule.java
----------------------------------------------------------------------
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 bde82e7..baff3b7 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
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastFilterRule.java
----------------------------------------------------------------------
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 4f950d3..e5c40b9 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);
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushProjectPastJoinRule.java
----------------------------------------------------------------------
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 e27360f..269f6d5 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);
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceAggregatesRule.java
----------------------------------------------------------------------
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 9f8d062..bb972d0 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.Collections;
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 org.apache.calcite.util.Util;
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 class DrillReduceAggregatesRule extends RelOptRule {
oldAggRel.getGroupSets(),
newAggregateCalls));
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
}
@@ -760,7 +760,8 @@ public class DrillReduceAggregatesRule extends RelOptRule {
sumZeroAgg,
sumType,
rexWinAggCall.operands,
- rexWinAggCall.ordinal);
+ rexWinAggCall.ordinal,
+ rexWinAggCall.distinct);
aggCalls.add(sumZeroCall);
} else {
aggCalls.add(rexWinAggCall);
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillReduceExpressionsRule.java
----------------------------------------------------------------------
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 2b65831..96bcf02 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 @@ public class DrillReduceExpressionsRule {
* 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 @@ public class DrillReduceExpressionsRule {
* 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);
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRelFactories.java
----------------------------------------------------------------------
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 0348a5b..487da4d 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 @@ package org.apache.drill.exec.planner.logical;
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 class DrillRelFactories {
* {@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<CorrelationId> 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,
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillStoreRel.java
----------------------------------------------------------------------
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 7c498f3..9872f95 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 java.util.List;
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 @@ import org.apache.calcite.plan.RelTraitSet;
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<String> 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<String> updateColumnList, List<RexNode> sourceExpressionList, boolean flattened) {
+ super(cluster, traits, table, catalogReader, child, operation, updateColumnList, sourceExpressionList, flattened);
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
----------------------------------------------------------------------
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 10c0118..a074952 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 @@ package org.apache.drill.exec.planner.logical;
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.RelOptRule;
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 @@ public class DrillUnionAllRule extends RelOptRule {
@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 class DrillUnionAllRule extends RelOptRule {
call.transformTo(new DrillUnionRel(union.getCluster(), traits, convertedInputs, union.all,
true /* check compatibility */));
} catch (InvalidRelException e) {
- tracer.warning(e.toString()) ;
+ tracer.warn(e.toString()) ;
}
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillViewTable.java
----------------------------------------------------------------------
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 d2e1ace..0f0278e 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 class DrillViewTable implements TranslatableTable, DrillViewInfoProvider
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.<String>of()).rel;
}
// If the View's field list is not "*", create a cast.
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrel.java
----------------------------------------------------------------------
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 09d33fd..b647279 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.io.IOException;
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;
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashAggPrule.java
----------------------------------------------------------------------
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 e16593b..f4cdf62 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.plan.RelTraitSet;
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 class HashAggPrule extends AggPruleBase {
}
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrel.java
----------------------------------------------------------------------
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 1795bf1..31b7772 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.base.PhysicalOperator;
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;
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashJoinPrule.java
----------------------------------------------------------------------
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 1fd0e51..d07cf51 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.RelOptRule;
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 class HashJoinPrule extends JoinPruleBase {
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 class HashJoinPrule extends JoinPruleBase {
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/MergeJoinPrule.java
----------------------------------------------------------------------
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 dd587b8..3f40720 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.plan.RelOptRuleOperand;
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 class MergeJoinPrule extends JoinPruleBase {
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/NestedLoopJoinPrule.java
----------------------------------------------------------------------
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 b98976b..26e1b73 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.plan.RelOptRuleOperand;
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 class NestedLoopJoinPrule extends JoinPruleBase {
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 class NestedLoopJoinPrule extends JoinPruleBase {
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/StreamAggPrule.java
----------------------------------------------------------------------
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 ea7927c..a6a8f28 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 org.apache.calcite.util.trace.CalciteTrace;
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 class StreamAggPrule extends AggPruleBase {
}
}
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionAllPrule.java
----------------------------------------------------------------------
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 9d93220..336ab3a 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 org.apache.drill.exec.planner.physical.DrillDistributionTrait.Distributio
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 @@ public class UnionAllPrule extends Prule {
@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<RelNode> inputs = union.getInputs();
List<RelNode> 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<DistributionField> childDistFields = Lists.newArrayList();
RelNode convertedChild;
@@ -110,7 +109,7 @@ public class UnionAllPrule extends Prule {
call.transformTo(left);
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionDistinctPrule.java
----------------------------------------------------------------------
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 8b4d62d..f353802 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.plan.RelTraitSet;
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 @@ public class UnionDistinctPrule extends Prule {
@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<RelNode> inputs = union.getInputs();
List<RelNode> 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 class UnionDistinctPrule extends Prule {
call.transformTo(unionDistinct);
} catch (InvalidRelException e) {
- tracer.warning(e.toString());
+ tracer.warn(e.toString());
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
----------------------------------------------------------------------
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 1980335..4fdb3b9 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 class WindowPrule extends Prule {
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)
);
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/TopProjectVisitor.java
----------------------------------------------------------------------
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 08bd9e7..6b81b70 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 @@ public class TopProjectVisitor extends BasePrelVisitor<Prel, Void, RuntimeExcept
List<String> 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);
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlAggFunctionWrapper.java
----------------------------------------------------------------------
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 3795dd4..a87247b 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.SqlMonotonicity;
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 class DrillCalciteSqlAggFunctionWrapper extends SqlAggFunction implements
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlFunctionWrapper.java
----------------------------------------------------------------------
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 1c61d08..cf3b866 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.SqlMonotonicity;
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 class DrillCalciteSqlFunctionWrapper extends SqlFunction implements Drill
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillCalciteSqlOperatorWrapper.java
----------------------------------------------------------------------
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 8258120..2bf04b9 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.SqlWriter;
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 class DrillCalciteSqlOperatorWrapper extends SqlOperator implements Drill
}
@Override
- public boolean validRexOperands(int count, boolean fail) {
+ public boolean validRexOperands(int count, Litmus litmus) {
return true;
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillParserConfig.java
----------------------------------------------------------------------
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 d8441ae..1f67c5e 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.Casing;
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;
@@ -60,6 +62,16 @@ public class DrillParserConfig implements SqlParser.Config {
}
@Override
+ public SqlConformance conformance() {
+ return SqlConformanceEnum.DEFAULT;
+ }
+
+ @Override
+ public boolean allowBangEqual() {
+ return conformance().isBangEqualAllowed();
+ }
+
+ @Override
public SqlParserImplFactory parserFactory() {
return DrillParserWithCompoundIdConverter.FACTORY;
}
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
----------------------------------------------------------------------
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 3bc0922..345e4b7 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 @@ package org.apache.drill.exec.planner.sql;
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.ops.QueryContext;
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 @@ public class DrillSqlWorker {
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);
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java
----------------------------------------------------------------------
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 dbe16bd..6f59fcf 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.List;
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.RelOptCostFactory;
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.SqlNode;
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.cost.DrillCostBase;
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 class SqlConverter {
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 class SqlConverter {
}
}
- 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 class SqlConverter {
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 class SqlConverter {
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, List<String> schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, List<String> schemaPath, List<String> viewPath) {
final DrillCalciteCatalogReader catalogReader = new DrillCalciteCatalogReader(
rootSchema,
parserConfig.caseSensitive(),
@@ -295,7 +300,7 @@ public class SqlConverter {
}
@Override
- public RelNode expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List<String> schemaPath) {
+ public RelRoot expandView(RelDataType rowType, String queryString, SchemaPlus rootSchema, List<String> schemaPath) {
final DrillCalciteCatalogReader catalogReader = new DrillCalciteCatalogReader(
rootSchema, // new root schema
parserConfig.caseSensitive(),
@@ -324,7 +329,7 @@ public class SqlConverter {
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 class SqlConverter {
}
@Override
- public int getInSubqueryThreshold() {
+ public int getInSubQueryThreshold() {
return inSubqueryThreshold;
}
}
@@ -446,7 +451,7 @@ public class SqlConverter {
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 class SqlConverter {
* @throws UserException if temporary tables usage is disallowed
*/
@Override
- public RelOptTableImpl getTable(final List<String> names) {
- RelOptTableImpl temporaryTable = null;
+ public Prepare.PreparingTable getTable(final List<String> 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 class SqlConverter {
.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) {