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 <rom.ku...@gmail.com> Authored: Tue Aug 29 14:10:24 2017 +0000 Committer: Volodymyr Vysotskyi <vvo...@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) {