http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java index 523b721..ddf48ed 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/TypeInferenceUtils.java @@ -35,6 +35,7 @@ import org.apache.calcite.sql.SqlOperatorBinding; import org.apache.calcite.sql.fun.SqlAvgAggFunction; import org.apache.calcite.sql.parser.SqlParserPos; import org.apache.calcite.sql.type.SqlReturnTypeInference; +import org.apache.calcite.sql.type.SqlTypeFamily; import org.apache.calcite.sql.type.SqlTypeName; import org.apache.drill.common.expression.ExpressionPosition; @@ -73,7 +74,7 @@ public class TypeInferenceUtils { .put(TypeProtos.MinorType.TIMESTAMP, SqlTypeName.TIMESTAMP) .put(TypeProtos.MinorType.VARBINARY, SqlTypeName.VARBINARY) .put(TypeProtos.MinorType.INTERVALYEAR, SqlTypeName.INTERVAL_YEAR_MONTH) - .put(TypeProtos.MinorType.INTERVALDAY, SqlTypeName.INTERVAL_DAY_TIME) + .put(TypeProtos.MinorType.INTERVALDAY, SqlTypeName.INTERVAL_DAY) .put(TypeProtos.MinorType.MAP, SqlTypeName.MAP) .put(TypeProtos.MinorType.LIST, SqlTypeName.ARRAY) .put(TypeProtos.MinorType.LATE, SqlTypeName.ANY) @@ -97,8 +98,19 @@ public class TypeInferenceUtils { .put(SqlTypeName.TIME, TypeProtos.MinorType.TIME) .put(SqlTypeName.TIMESTAMP, TypeProtos.MinorType.TIMESTAMP) .put(SqlTypeName.VARBINARY, TypeProtos.MinorType.VARBINARY) + .put(SqlTypeName.INTERVAL_YEAR, TypeProtos.MinorType.INTERVALYEAR) .put(SqlTypeName.INTERVAL_YEAR_MONTH, TypeProtos.MinorType.INTERVALYEAR) - .put(SqlTypeName.INTERVAL_DAY_TIME, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_MONTH, TypeProtos.MinorType.INTERVALYEAR) + .put(SqlTypeName.INTERVAL_DAY, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_DAY_HOUR, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_DAY_MINUTE, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_DAY_SECOND, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_HOUR, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_HOUR_MINUTE, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_HOUR_SECOND, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_MINUTE, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_MINUTE_SECOND, TypeProtos.MinorType.INTERVALDAY) + .put(SqlTypeName.INTERVAL_SECOND, TypeProtos.MinorType.INTERVALDAY) // SqlTypeName.CHAR is the type for Literals in Calcite, Drill treats Literals as VARCHAR also .put(SqlTypeName.CHAR, TypeProtos.MinorType.VARCHAR) @@ -734,13 +746,13 @@ public class TypeInferenceUtils { SqlTypeName sqlTypeName, boolean isNullable) { RelDataType type; - if (sqlTypeName == SqlTypeName.INTERVAL_DAY_TIME) { + if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_DAY_TIME) { type = typeFactory.createSqlIntervalType( new SqlIntervalQualifier( TimeUnit.DAY, TimeUnit.MINUTE, SqlParserPos.ZERO)); - } else if (sqlTypeName == SqlTypeName.INTERVAL_YEAR_MONTH) { + } else if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_YEAR_MONTH) { type = typeFactory.createSqlIntervalType( new SqlIntervalQualifier( TimeUnit.YEAR,
http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java index 9515b3b..93113cb 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java @@ -23,6 +23,10 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.TimeUnit; +import com.google.common.collect.ImmutableList; +import org.apache.calcite.plan.RelOptCostImpl; +import org.apache.calcite.plan.RelOptLattice; +import org.apache.calcite.plan.RelOptMaterialization; import org.apache.calcite.plan.RelOptPlanner; import org.apache.calcite.plan.RelOptRule; import org.apache.calcite.plan.RelOptUtil; @@ -37,6 +41,8 @@ import org.apache.calcite.rel.core.Project; import org.apache.calcite.rel.core.TableFunctionScan; import org.apache.calcite.rel.core.TableScan; import org.apache.calcite.rel.logical.LogicalValues; +import org.apache.calcite.rel.metadata.CachingRelMetadataProvider; +import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider; import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider; import org.apache.calcite.rel.metadata.RelMetadataProvider; import org.apache.calcite.rel.metadata.RelMetadataQuery; @@ -46,13 +52,13 @@ import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexUtil; import org.apache.calcite.sql.SqlExplainLevel; import org.apache.calcite.sql.SqlNode; -import org.apache.calcite.sql.TypedSqlNode; import org.apache.calcite.sql.validate.SqlValidatorUtil; import org.apache.calcite.tools.Program; import org.apache.calcite.tools.Programs; import org.apache.calcite.tools.RelConversionException; import org.apache.calcite.tools.RuleSet; import org.apache.calcite.tools.ValidationException; +import org.apache.calcite.util.Pair; import org.apache.drill.common.JSONOptions; import org.apache.drill.common.logical.PlanProperties; import org.apache.drill.common.logical.PlanProperties.Generator.ResultMode; @@ -189,13 +195,13 @@ public class DefaultSqlHandler extends AbstractSqlHandler { protected ConvertedRelNode validateAndConvert(SqlNode sqlNode) throws ForemanSetupException, RelConversionException, ValidationException { final SqlNode rewrittenSqlNode = rewrite(sqlNode); - final TypedSqlNode validatedTypedSqlNode = validateNode(rewrittenSqlNode); - final SqlNode validated = validatedTypedSqlNode.getSqlNode(); + final Pair<SqlNode, RelDataType> validatedTypedSqlNode = validateNode(rewrittenSqlNode); + final SqlNode validated = validatedTypedSqlNode.getKey(); RelNode rel = convertToRel(validated); rel = preprocessNode(rel); - return new ConvertedRelNode(rel, validatedTypedSqlNode.getType()); + return new ConvertedRelNode(rel, validatedTypedSqlNode.getValue()); } /** @@ -375,7 +381,9 @@ public class DefaultSqlHandler extends AbstractSqlHandler { hepPgmBldr.addRuleInstance(rule); } - final HepPlanner planner = new HepPlanner(hepPgmBldr.build(), context.getPlannerSettings()); + // Set noDAG = true to avoid caching problems which lead to incorrect Drill work. + final HepPlanner planner = new HepPlanner(hepPgmBldr.build(), context.getPlannerSettings(), true, null, + RelOptCostImpl.FACTORY); JaninoRelMetadataProvider relMetadataProvider = JaninoRelMetadataProvider.of(DrillDefaultRelMetadataProvider.INSTANCE); RelMetadataQuery.THREAD_PROVIDERS.set(relMetadataProvider); @@ -397,7 +405,8 @@ public class DefaultSqlHandler extends AbstractSqlHandler { Preconditions.checkArgument(planner instanceof VolcanoPlanner, "Cluster is expected to be constructed using VolcanoPlanner. Was actually of type %s.", planner.getClass() .getName()); - output = program.run(planner, input, toTraits); + output = program.run(planner, input, toTraits, + ImmutableList.<RelOptMaterialization>of(), ImmutableList.<RelOptLattice>of()); break; } @@ -613,9 +622,9 @@ public class DefaultSqlHandler extends AbstractSqlHandler { } - private TypedSqlNode validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException { + private Pair<SqlNode, RelDataType> validateNode(SqlNode sqlNode) throws ValidationException, RelConversionException, ForemanSetupException { final SqlNode sqlNodeValidated = config.getConverter().validate(sqlNode); - final TypedSqlNode typedSqlNode = new TypedSqlNode(sqlNodeValidated, config.getConverter().getOutputType( + final Pair<SqlNode, RelDataType> typedSqlNode = new Pair<>(sqlNodeValidated, config.getConverter().getOutputType( sqlNodeValidated)); // Check if the unsupported functionality is used @@ -634,7 +643,7 @@ public class DefaultSqlHandler extends AbstractSqlHandler { } private RelNode convertToRel(SqlNode node) throws RelConversionException { - final RelNode convertedNode = config.getConverter().toRel(node); + final RelNode convertedNode = config.getConverter().toRel(node).rel; log("INITIAL", convertedNode, logger, null); return transform(PlannerType.HEP, PlannerPhase.WINDOW_REWRITE, convertedNode); } @@ -674,7 +683,7 @@ public class DefaultSqlHandler extends AbstractSqlHandler { final List<String> fieldNames2 = SqlValidatorUtil.uniquify( validatedRowType.getFieldNames(), - SqlValidatorUtil.F_SUGGESTER2, + SqlValidatorUtil.EXPR_SUGGESTER, rel.getCluster().getTypeFactory().getTypeSystem().isSchemaCaseSensitive()); RelDataType newRowType = RexUtil.createStructType(rel.getCluster().getTypeFactory(), projections, fieldNames2); http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java index 869829a..b41f880 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.core.io.CharacterEscapes; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; import org.apache.calcite.schema.SchemaPlus; +import org.apache.calcite.sql.SqlDescribeSchema; import org.apache.calcite.sql.SqlIdentifier; import org.apache.calcite.sql.SqlNode; import org.apache.drill.common.exceptions.DrillRuntimeException; @@ -31,7 +32,6 @@ import org.apache.drill.common.exceptions.UserException; import org.apache.drill.exec.physical.PhysicalPlan; import org.apache.drill.exec.planner.sql.DirectPlan; import org.apache.drill.exec.planner.sql.SchemaUtilites; -import org.apache.drill.exec.planner.sql.parser.SqlDescribeSchema; import org.apache.drill.exec.store.StoragePlugin; import org.apache.drill.exec.store.dfs.FileSystemPlugin; import org.apache.drill.exec.store.dfs.FileSystemSchemaFactory; http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java index 72b1aef..0311dfc 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java @@ -29,6 +29,7 @@ import static org.apache.drill.exec.store.ischema.InfoSchemaConstants.TAB_COLUMN import java.util.List; import org.apache.calcite.schema.SchemaPlus; +import org.apache.calcite.sql.SqlDescribeTable; import org.apache.calcite.sql.SqlIdentifier; import org.apache.calcite.sql.SqlLiteral; import org.apache.calcite.sql.SqlNode; @@ -41,7 +42,7 @@ import org.apache.calcite.util.Util; import org.apache.drill.common.exceptions.UserException; import org.apache.drill.exec.planner.sql.SchemaUtilites; import org.apache.drill.exec.planner.sql.parser.DrillParserUtil; -import org.apache.drill.exec.planner.sql.parser.SqlDescribeTable; +import org.apache.drill.exec.planner.sql.parser.DrillSqlDescribeTable; import org.apache.drill.exec.work.foreman.ForemanSetupException; import com.google.common.collect.ImmutableList; @@ -54,7 +55,7 @@ public class DescribeTableHandler extends DefaultSqlHandler { /** Rewrite the parse tree as SELECT ... FROM INFORMATION_SCHEMA.COLUMNS ... */ @Override public SqlNode rewrite(SqlNode sqlNode) throws RelConversionException, ForemanSetupException { - SqlDescribeTable node = unwrap(sqlNode, SqlDescribeTable.class); + DrillSqlDescribeTable node = unwrap(sqlNode, DrillSqlDescribeTable.class); try { List<SqlNode> selectList = http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java index d5216e7..166c350 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/FindLimit0Visitor.java @@ -49,6 +49,7 @@ import org.apache.drill.exec.record.MaterializedField; import org.apache.drill.exec.store.AbstractRecordReader; import org.apache.drill.exec.store.direct.DirectGroupScan; +import java.util.ArrayList; import java.util.List; /** @@ -71,8 +72,11 @@ public class FindLimit0Visitor extends RelShuttleImpl { ImmutableSet.<SqlTypeName>builder() .add(SqlTypeName.INTEGER, SqlTypeName.BIGINT, SqlTypeName.FLOAT, SqlTypeName.DOUBLE, SqlTypeName.VARCHAR, SqlTypeName.BOOLEAN, SqlTypeName.DATE, SqlTypeName.TIME, - SqlTypeName.TIMESTAMP, SqlTypeName.INTERVAL_YEAR_MONTH, SqlTypeName.INTERVAL_DAY_TIME, - SqlTypeName.CHAR) + SqlTypeName.TIMESTAMP, SqlTypeName.INTERVAL_YEAR, SqlTypeName.INTERVAL_YEAR_MONTH, + SqlTypeName.INTERVAL_MONTH, SqlTypeName.INTERVAL_DAY, SqlTypeName.INTERVAL_DAY_HOUR, + SqlTypeName.INTERVAL_DAY_MINUTE, SqlTypeName.INTERVAL_DAY_SECOND, SqlTypeName.INTERVAL_HOUR, + SqlTypeName.INTERVAL_HOUR_MINUTE, SqlTypeName.INTERVAL_HOUR_SECOND, SqlTypeName.INTERVAL_MINUTE, + SqlTypeName.INTERVAL_MINUTE_SECOND, SqlTypeName.INTERVAL_SECOND, SqlTypeName.CHAR) .build(); /** @@ -231,5 +235,26 @@ public class FindLimit0Visitor extends RelShuttleImpl { @Override public void close() throws Exception { } + + /** + * Represents RelDataTypeReader content as string, used in query plan json. + * Example: RelDataTypeReader{columnNames=[col1], columnTypes=[INTERVALYEAR-OPTIONAL]} + * + * @return string representation of RelDataTypeReader content + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("RelDataTypeReader{columnNames="); + builder.append(columnNames).append(", columnTypes="); + List<String> columnTypesList = new ArrayList<>(columnTypes.size()); + for (TypeProtos.MajorType columnType : columnTypes) { + columnTypesList.add(columnType.getMinorType().toString() + "-" + columnType.getMode().toString()); + } + builder.append(columnTypesList); + builder.append("}"); + + return builder.toString(); + } } } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java index e9d0dca..4d0f34c 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java @@ -163,7 +163,7 @@ public class CompoundIdentifierConverter extends SqlShuttle { rules.put(SqlSelect.class, R(D, E, D, E, E, E, E, E, D, D)); rules.put(SqlCreateTable.class, R(D, D, D, E, D, D)); rules.put(SqlCreateView.class, R(D, E, E, D)); - rules.put(SqlDescribeTable.class, R(D, D, E)); + rules.put(DrillSqlDescribeTable.class, R(D, D, E)); rules.put(SqlDropView.class, R(D, D)); rules.put(SqlShowFiles.class, R(D)); rules.put(SqlShowSchemas.class, R(D, D)); @@ -173,7 +173,6 @@ public class CompoundIdentifierConverter extends SqlShuttle { rules.put(SqlDropTable.class, R(D, D)); rules.put(SqlRefreshMetadata.class, R(D)); rules.put(SqlSetOption.class, R(D, D, D)); - rules.put(SqlDescribeSchema.class, R(D)); rules.put(SqlCreateFunction.class, R(D)); rules.put(SqlDropFunction.class, R(D)); REWRITE_RULES = ImmutableMap.copyOf(rules); http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java new file mode 100644 index 0000000..c97d8c3 --- /dev/null +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/DrillSqlDescribeTable.java @@ -0,0 +1,73 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to you under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package org.apache.drill.exec.planner.sql.parser; + +import org.apache.calcite.sql.SqlCall; +import org.apache.calcite.sql.SqlDescribeTable; +import org.apache.calcite.sql.SqlIdentifier; +import org.apache.calcite.sql.SqlKind; +import org.apache.calcite.sql.SqlLiteral; +import org.apache.calcite.sql.SqlNode; +import org.apache.calcite.sql.SqlOperator; +import org.apache.calcite.sql.SqlSpecialOperator; +import org.apache.calcite.sql.SqlWriter; +import org.apache.calcite.sql.parser.SqlParserPos; +import org.apache.calcite.util.ImmutableNullableList; + +import java.util.List; + +/** + * Sql parser tree node to represent statement: + * { DESCRIBE | DESC } tblname [col_name | wildcard ] + */ +public class DrillSqlDescribeTable extends SqlDescribeTable { + + private final SqlNode columnQualifier; + + public static final SqlSpecialOperator OPERATOR = + new SqlSpecialOperator("DESCRIBE_TABLE", SqlKind.DESCRIBE_TABLE) { + @Override + public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) { + return new DrillSqlDescribeTable(pos, (SqlIdentifier) operands[0], (SqlIdentifier) operands[1], operands[2]); + } + }; + + public DrillSqlDescribeTable(SqlParserPos pos, SqlIdentifier table, SqlIdentifier column, SqlNode columnQualifier) { + super(pos, table, column); + this.columnQualifier = columnQualifier; + } + + @Override + public List<SqlNode> getOperandList() { + return ImmutableNullableList.<SqlNode>of(getTable(), getColumn(), columnQualifier); + } + + @Override + public void unparse(SqlWriter writer, int leftPrec, int rightPrec) { + super.unparse(writer, leftPrec, rightPrec); + if (columnQualifier != null) { + columnQualifier.unparse(writer, leftPrec, rightPrec); + } + } + + public SqlNode getColumnQualifier() { return columnQualifier; } + + @Override public SqlOperator getOperator() { + return OPERATOR; + } + +} http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java deleted file mode 100644 index 7ea6940..0000000 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeSchema.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * <p/> - * http://www.apache.org/licenses/LICENSE-2.0 - * <p/> - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.drill.exec.planner.sql.parser; - -import org.apache.calcite.sql.SqlCall; -import org.apache.calcite.sql.SqlIdentifier; -import org.apache.calcite.sql.SqlKind; -import org.apache.calcite.sql.SqlLiteral; -import org.apache.calcite.sql.SqlNode; -import org.apache.calcite.sql.SqlOperator; -import org.apache.calcite.sql.SqlSpecialOperator; -import org.apache.calcite.sql.SqlWriter; -import org.apache.calcite.sql.parser.SqlParserPos; -import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler; -import org.apache.drill.exec.planner.sql.handlers.DescribeSchemaHandler; -import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig; - -import java.util.Collections; -import java.util.List; - -/** - * Sql parse tree node to represent statement: - * DESCRIBE {SCHEMA | DATABASE} schema_name - */ -public class SqlDescribeSchema extends DrillSqlCall { - - private final SqlIdentifier schema; - - public static final SqlSpecialOperator OPERATOR = - new SqlSpecialOperator("DESCRIBE_SCHEMA", SqlKind.OTHER) { - @Override - public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) { - return new SqlDescribeSchema(pos, (SqlIdentifier) operands[0]); - } - }; - - public SqlDescribeSchema(SqlParserPos pos, SqlIdentifier schema) { - super(pos); - this.schema = schema; - } - - @Override - public SqlOperator getOperator() { - return OPERATOR; - } - - @Override - public List<SqlNode> getOperandList() { - return Collections.singletonList((SqlNode) schema); - } - - @Override - public void unparse(SqlWriter writer, int leftPrec, int rightPrec) { - writer.keyword("DESCRIBE"); - writer.keyword("SCHEMA"); - schema.unparse(writer, leftPrec, rightPrec); - } - - @Override - public AbstractSqlHandler getSqlHandler(SqlHandlerConfig config) { - return new DescribeSchemaHandler(config); - } - - public SqlIdentifier getSchema() { return schema; } - -} http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java deleted file mode 100644 index 3a09aea..0000000 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDescribeTable.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.drill.exec.planner.sql.parser; - -import java.util.List; - -import org.apache.calcite.tools.Planner; - -import org.apache.drill.exec.ops.QueryContext; -import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler; -import org.apache.drill.exec.planner.sql.handlers.DescribeTableHandler; -import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig; -import org.apache.calcite.plan.hep.HepPlanner; -import org.apache.calcite.sql.SqlCall; -import org.apache.calcite.sql.SqlIdentifier; -import org.apache.calcite.sql.SqlKind; -import org.apache.calcite.sql.SqlLiteral; -import org.apache.calcite.sql.SqlNode; -import org.apache.calcite.sql.SqlOperator; -import org.apache.calcite.sql.SqlSpecialOperator; -import org.apache.calcite.sql.SqlWriter; -import org.apache.calcite.sql.parser.SqlParserPos; - -import com.google.common.collect.Lists; - -/** - * Sql parser tree node to represent statement: - * { DESCRIBE | DESC } tblname [col_name | wildcard ] - */ -public class SqlDescribeTable extends DrillSqlCall { - - private final SqlIdentifier table; - private final SqlIdentifier column; - private final SqlNode columnQualifier; - - public static final SqlSpecialOperator OPERATOR = - new SqlSpecialOperator("DESCRIBE_TABLE", SqlKind.OTHER) { - @Override - public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos, SqlNode... operands) { - return new SqlDescribeTable(pos, (SqlIdentifier) operands[0], (SqlIdentifier) operands[1], operands[2]); - } - }; - - public SqlDescribeTable(SqlParserPos pos, SqlIdentifier table, SqlIdentifier column, SqlNode columnQualifier) { - super(pos); - this.table = table; - this.column = column; - this.columnQualifier = columnQualifier; - } - - @Override - public SqlOperator getOperator() { - return OPERATOR; - } - - @Override - public List<SqlNode> getOperandList() { - List<SqlNode> opList = Lists.newArrayList(); - opList.add(table); - opList.add(column); - opList.add(columnQualifier); - return opList; - } - - @Override - public void unparse(SqlWriter writer, int leftPrec, int rightPrec) { - writer.keyword("DESCRIBE"); - writer.keyword("TABLE"); - table.unparse(writer, leftPrec, rightPrec); - if (column != null) { - column.unparse(writer, leftPrec, rightPrec); - } - if (columnQualifier != null) { - columnQualifier.unparse(writer, leftPrec, rightPrec); - } - } - - @Override - public AbstractSqlHandler getSqlHandler(SqlHandlerConfig config) { - return new DescribeTableHandler(config); - } - - public SqlIdentifier getTable() { return table; } - public SqlIdentifier getColumn() { return column; } - public SqlNode getColumnQualifier() { return columnQualifier; } - -} http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java index a88f523..e4b9668 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/torel/ConversionContext.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.calcite.prepare.Prepare; +import org.apache.calcite.rel.RelRoot; import org.apache.drill.common.expression.LogicalExpression; import org.apache.drill.common.logical.LogicalPlan; import org.apache.drill.common.logical.data.Filter; @@ -111,12 +112,12 @@ public class ConversionContext implements ToRelContext { } @Override - public RelNode expandView(RelDataType rowType, String queryString, List<String> schemaPath) { + public RelRoot expandView(RelDataType rowType, String queryString, List<String> schemaPath, List<String> viewPath) { throw new UnsupportedOperationException(); } @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) { throw new UnsupportedOperationException(); } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java index 04c35c1..d332434 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeDrillImpl.java @@ -20,21 +20,21 @@ package org.apache.drill.exec.planner.types; import java.util.Collections; import java.util.List; +import org.apache.calcite.rel.type.DynamicRecordType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rel.type.RelDataTypeFamily; import org.apache.calcite.rel.type.RelDataTypeField; -import org.apache.calcite.rel.type.RelDataTypeImpl; import org.apache.calcite.rel.type.RelDataTypePrecedenceList; import org.apache.calcite.sql.type.SqlTypeExplicitPrecedenceList; import org.apache.calcite.sql.type.SqlTypeName; -/* We use an instance of this class as the row type for +/* We use an instance of this class as the dynamic row type for * Drill table. Since we don't know the schema before hand * whenever optiq requires us to validate that a field exists * we always return true and indicate that the type of that * field is 'ANY' */ -public class RelDataTypeDrillImpl extends RelDataTypeImpl { +public class RelDataTypeDrillImpl extends DynamicRecordType { private final RelDataTypeFactory typeFactory; private final RelDataTypeHolder holder; http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java index 483b277..aa3542c 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/types/RelDataTypeHolder.java @@ -19,12 +19,15 @@ package org.apache.drill.exec.planner.types; import java.util.List; +import org.apache.calcite.rel.type.DynamicRecordType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rel.type.RelDataTypeField; import org.apache.calcite.rel.type.RelDataTypeFieldImpl; import org.apache.calcite.sql.type.SqlTypeName; import com.google.common.collect.Lists; +import org.apache.calcite.util.Pair; +import org.apache.calcite.util.Util; public class RelDataTypeHolder { static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(RelDataTypeHolder.class); @@ -59,7 +62,14 @@ public class RelDataTypeHolder { } /* This field does not exist in our field list add it */ - RelDataTypeField newField = new RelDataTypeFieldImpl(fieldName, fields.size(), typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.ANY), true)); + final SqlTypeName typeName = DynamicRecordType.isDynamicStarColName(fieldName) + ? SqlTypeName.DYNAMIC_STAR : SqlTypeName.ANY; + + // This field does not exist in our field list add it + RelDataTypeField newField = new RelDataTypeFieldImpl( + fieldName, + fields.size(), + typeFactory.createTypeWithNullability(typeFactory.createSqlType(typeName), true)); /* Add the name to our list of field names */ fields.add(newField); http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java index 7d6bfe3..c4586ef 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/AbstractSchema.java @@ -206,6 +206,11 @@ public abstract class AbstractSchema implements Schema, SchemaPartitionExplorer, // no-op: default implementation for most implementations. } + @Override + public Schema snapshot(long now) { + return this; + } + public void dropTable(String tableName) { throw UserException.unsupportedError() .message("Dropping tables is not supported in schema [%s]", getSchemaPath()) http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java index 23441bd..21ab39f 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java @@ -20,7 +20,7 @@ package org.apache.drill.exec.store; import java.io.IOException; import java.util.List; -import org.apache.calcite.jdbc.SimpleCalciteSchema; +import org.apache.calcite.jdbc.CalciteSchema; import org.apache.calcite.schema.SchemaPlus; import org.apache.drill.common.AutoCloseables; import org.apache.drill.common.exceptions.UserException; @@ -106,7 +106,7 @@ public class SchemaTreeProvider implements AutoCloseable { */ public SchemaPlus createRootSchema(SchemaConfig schemaConfig) { try { - final SchemaPlus rootSchema = SimpleCalciteSchema.createRootSchema(false); + final SchemaPlus rootSchema = CalciteSchema.createRootSchema(false, false).plus(); dContext.getSchemaFactory().registerSchemas(schemaConfig, rootSchema); schemaTreesToClose.add(rootSchema); return rootSchema; http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java index 49d1423..81ac8b6 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/Records.java @@ -134,8 +134,19 @@ public class Records { case CHAR: this.DATA_TYPE = "CHARACTER"; break; case VARCHAR: this.DATA_TYPE = "CHARACTER VARYING"; break; case VARBINARY: this.DATA_TYPE = "BINARY VARYING"; break; - case INTERVAL_YEAR_MONTH: this.DATA_TYPE = "INTERVAL"; break; - case INTERVAL_DAY_TIME: this.DATA_TYPE = "INTERVAL"; break; + case INTERVAL_YEAR: + case INTERVAL_YEAR_MONTH: + case INTERVAL_MONTH: + case INTERVAL_DAY: + case INTERVAL_DAY_HOUR: + case INTERVAL_DAY_MINUTE: + case INTERVAL_DAY_SECOND: + case INTERVAL_HOUR: + case INTERVAL_HOUR_MINUTE: + case INTERVAL_HOUR_SECOND: + case INTERVAL_MINUTE: + case INTERVAL_MINUTE_SECOND: + case INTERVAL_SECOND: this.DATA_TYPE = "INTERVAL"; break; // 3: SqlTypeName enumerators not yet seen and confirmed or handled. default: logger.warn( "Type not handled explicitly (code needs review): " @@ -292,21 +303,43 @@ public class Records { } break; + case INTERVAL_YEAR: case INTERVAL_YEAR_MONTH: - case INTERVAL_DAY_TIME: + case INTERVAL_MONTH: + case INTERVAL_DAY: + case INTERVAL_DAY_HOUR: + case INTERVAL_DAY_MINUTE: + case INTERVAL_DAY_SECOND: + case INTERVAL_HOUR: + case INTERVAL_HOUR_MINUTE: + case INTERVAL_HOUR_SECOND: + case INTERVAL_MINUTE: + case INTERVAL_MINUTE_SECOND: + case INTERVAL_SECOND: this.CHARACTER_MAXIMUM_LENGTH = null; this.CHARACTER_OCTET_LENGTH = null; this.NUMERIC_PRECISION = null; this.NUMERIC_PRECISION_RADIX = null; this.NUMERIC_SCALE = null; switch ( sqlTypeName ) { + case INTERVAL_YEAR: case INTERVAL_YEAR_MONTH: + case INTERVAL_MONTH: // NOTE: Apparently can't get use RelDataType, etc.; it seems to // apply a default fractional seconds precision of 6 for SECOND, // even though SECOND does not exist for this case. this.DATETIME_PRECISION = 0; break; - case INTERVAL_DAY_TIME: + case INTERVAL_DAY: + case INTERVAL_DAY_HOUR: + case INTERVAL_DAY_MINUTE: + case INTERVAL_DAY_SECOND: + case INTERVAL_HOUR: + case INTERVAL_HOUR_MINUTE: + case INTERVAL_HOUR_SECOND: + case INTERVAL_MINUTE: + case INTERVAL_MINUTE_SECOND: + case INTERVAL_SECOND: this.DATETIME_PRECISION = relDataType .getIntervalQualifier() http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java index ca643f5..8a8e8d2 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java +++ b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java @@ -23,7 +23,7 @@ import java.net.URL; import mockit.Mocked; import mockit.NonStrictExpectations; -import org.apache.calcite.jdbc.SimpleCalciteSchema; +import org.apache.calcite.jdbc.CalciteSchema; import org.apache.calcite.schema.SchemaPlus; import org.apache.drill.common.config.DrillConfig; import org.apache.drill.common.config.LogicalPlanPersistence; @@ -111,7 +111,7 @@ public class PlanningBase extends ExecTest{ registry.init(); final FunctionImplementationRegistry functionRegistry = new FunctionImplementationRegistry(config); final DrillOperatorTable table = new DrillOperatorTable(functionRegistry, systemOptions); - final SchemaPlus root = SimpleCalciteSchema.createRootSchema(false); + final SchemaPlus root = CalciteSchema.createRootSchema(false, false).plus(); registry.getSchemaFactory().registerSchemas(SchemaConfig.newBuilder("foo", context).build(), root); new NonStrictExpectations() { http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java index e449602..57b7466 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/logical/DrillOptiqTest.java @@ -56,7 +56,7 @@ public class DrillOptiqTest { // create a dummy RexOver object. RexNode window = rex.makeOver(anyType, SqlStdOperatorTable.AVG, emptyList, emptyList, e, null, null, true, - false, false); + false, false, false); DrillOptiq.toDrill(null, (RelNode) null, window); } catch (UserException e) { if (e.getMessage().contains(DrillOptiq.UNSUPPORTED_REX_NODE_ERROR)) { http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java index f94c40e..57ca0c1 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestSqlBracketlessSyntax.java @@ -18,7 +18,7 @@ package org.apache.drill.exec.sql; import org.apache.calcite.config.Lex; -import org.apache.calcite.jdbc.SimpleCalciteSchema; +import org.apache.calcite.jdbc.CalciteSchema; import org.apache.calcite.tools.FrameworkConfig; import org.apache.calcite.tools.Frameworks; import org.apache.calcite.tools.Planner; @@ -46,7 +46,7 @@ public class TestSqlBracketlessSyntax { .setIdentifierMaxLength(PlannerSettings.DEFAULT_IDENTIFIER_MAX_LENGTH) .setParserFactory(DrillParserImpl.FACTORY) .build()) // - .defaultSchema(SimpleCalciteSchema.createRootSchema(false)) // + .defaultSchema(CalciteSchema.createRootSchema(false, false).plus()) // .convertletTable(DrillConvertletTable.INSTANCE) // .build(); Planner planner = Frameworks.getPlanner(config); http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java index d7ccea4..6dd2e66 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetGroupScan.java @@ -85,7 +85,7 @@ public class TestParquetGroupScan extends BaseTestQuery { runSQL("SELECT COUNT(*) AS `count` FROM dfs.tmp.`4376_3/604*`"); fail("Query should've failed!"); } catch (UserRemoteException uex) { - final String expectedMsg = "Table 'dfs.tmp.4376_3/604*' not found"; + final String expectedMsg = "Object '4376_3/604*' not found within 'dfs.tmp'"; assertTrue(String.format("Error message should contain \"%s\" but was instead \"%s\"", expectedMsg, uex.getMessage()), uex.getMessage().contains(expectedMsg)); } @@ -112,7 +112,7 @@ public class TestParquetGroupScan extends BaseTestQuery { runSQL("SELECT COUNT(*) AS `count` FROM dfs.tmp.`4376_5/6041`"); fail("Query should've failed!"); } catch (UserRemoteException uex) { - final String expectedMsg = "Table 'dfs.tmp.4376_5/6041' not found"; + final String expectedMsg = "Object '4376_5/6041' not found within 'dfs.tmp'"; assertTrue(String.format("Error message should contain \"%s\" but was instead \"%s\"", expectedMsg, uex.getMessage()), uex.getMessage().contains(expectedMsg)); } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc-all/pom.xml ---------------------------------------------------------------------- diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml index 9db9c58..f59780d 100644 --- a/exec/jdbc-all/pom.xml +++ b/exec/jdbc-all/pom.xml @@ -509,7 +509,7 @@ This is likely due to you adding new dependencies to a java-exec and not updating the excludes in this module. This is important as it minimizes the size of the dependency of Drill application users. </message> - <maxsize>32000000</maxsize> + <maxsize>35000000</maxsize> <minsize>15000000</minsize> <files> <file>${project.build.directory}/drill-jdbc-all-${project.version}.jar</file> @@ -569,7 +569,7 @@ This is likely due to you adding new dependencies to a java-exec and not updating the excludes in this module. This is important as it minimizes the size of the dependency of Drill application users. </message> - <maxsize>29000000</maxsize> + <maxsize>31000000</maxsize> <minsize>15000000</minsize> <files> <file>${project.build.directory}/drill-jdbc-all-${project.version}.jar</file> http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/pom.xml ---------------------------------------------------------------------- diff --git a/exec/jdbc/pom.xml b/exec/jdbc/pom.xml index dfeaf82..d7087f4 100644 --- a/exec/jdbc/pom.xml +++ b/exec/jdbc/pom.xml @@ -21,9 +21,8 @@ <dependencies> <dependency> - <groupId>org.apache.calcite</groupId> - <artifactId>calcite-avatica</artifactId> - <version>${calcite.version}</version> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>avatica</artifactId> <exclusions> <exclusion> <artifactId>jackson-core</artifactId> http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java index a2b9211..689041c 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -46,6 +46,8 @@ import org.apache.calcite.avatica.AvaticaFactory; import org.apache.calcite.avatica.AvaticaStatement; import org.apache.calcite.avatica.Meta.ExecuteResult; import org.apache.calcite.avatica.Meta.MetaResultSet; +import org.apache.calcite.avatica.NoSuchStatementException; +import org.apache.calcite.avatica.QueryState; import org.apache.calcite.avatica.UnregisteredDriver; import org.apache.drill.common.config.DrillConfig; import org.apache.drill.common.exceptions.DrillRuntimeException; @@ -180,16 +182,16 @@ class DrillConnectionImpl extends AvaticaConnection @Override - protected ResultSet createResultSet(MetaResultSet metaResultSet) throws SQLException { - return super.createResultSet(metaResultSet); + protected ResultSet createResultSet(MetaResultSet metaResultSet, QueryState state) throws SQLException { + return super.createResultSet(metaResultSet, state); } @Override protected ExecuteResult prepareAndExecuteInternal(AvaticaStatement statement, String sql, long maxRowCount) - throws SQLException { + throws SQLException, NoSuchStatementException { try { return super.prepareAndExecuteInternal(statement, sql, maxRowCount); - } catch(RuntimeException e) { + } catch (RuntimeException e) { Throwables.propagateIfInstanceOf(e.getCause(), SQLException.class); throw e; } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java index 629e47b..38715e9 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillJdbc41Factory.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -34,6 +34,7 @@ import org.apache.calcite.avatica.AvaticaStatement; import org.apache.calcite.avatica.Helper; import org.apache.calcite.avatica.Meta; import org.apache.calcite.avatica.Meta.StatementHandle; +import org.apache.calcite.avatica.QueryState; import org.apache.drill.exec.client.DrillClient; import org.apache.drill.exec.client.ServerMethod; import org.apache.drill.exec.proto.UserProtos.CreatePreparedStatementResp; @@ -170,12 +171,13 @@ public class DrillJdbc41Factory extends DrillFactory { @Override public DrillResultSetImpl newResultSet(AvaticaStatement statement, + QueryState state, Meta.Signature signature, TimeZone timeZone, Meta.Frame firstFrame) { final ResultSetMetaData metaData = newResultSetMetaData(statement, signature); - return new DrillResultSetImpl(statement, signature, metaData, timeZone, firstFrame); + return new DrillResultSetImpl(statement, state, signature, metaData, timeZone, firstFrame); } @Override http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java index b78e93a..810ffef 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillMetaImpl.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -38,6 +38,10 @@ import org.apache.calcite.avatica.ColumnMetaData; import org.apache.calcite.avatica.ColumnMetaData.StructType; import org.apache.calcite.avatica.Meta; import org.apache.calcite.avatica.MetaImpl; +import org.apache.calcite.avatica.MissingResultsException; +import org.apache.calcite.avatica.NoSuchStatementException; +import org.apache.calcite.avatica.QueryState; +import org.apache.calcite.avatica.remote.TypedValue; import org.apache.drill.common.exceptions.DrillRuntimeException; import org.apache.drill.common.util.DrillStringUtils; import org.apache.drill.exec.client.ServerMethod; @@ -92,8 +96,8 @@ class DrillMetaImpl extends MetaImpl { sql, Collections.<AvaticaParameter> emptyList(), Collections.<String, Object>emptyMap(), - null // CursorFactory set to null, as SQL requests use DrillCursor - ); + null, // CursorFactory set to null, as SQL requests use DrillCursor + Meta.StatementType.SELECT); } private MetaResultSet s(String s) { @@ -322,7 +326,7 @@ class DrillMetaImpl extends MetaImpl { StructType fieldMetaData = drillFieldMetaData(clazz); Meta.Signature signature = Meta.Signature.create( fieldMetaData.columns, "", - Collections.<AvaticaParameter>emptyList(), CursorFactory.record(clazz)); + Collections.<AvaticaParameter>emptyList(), CursorFactory.record(clazz), Meta.StatementType.SELECT); AvaticaStatement statement = connection.createStatement(); return MetaResultSet.create(connection.id, statement.getId(), true, @@ -419,8 +423,11 @@ class DrillMetaImpl extends MetaImpl { * Implements {@link DatabaseMetaData#getTables}. */ @Override - public MetaResultSet getTables(String catalog, final Pat schemaPattern, final Pat tableNamePattern, - final List<String> typeList) { + public MetaResultSet getTables(ConnectionHandle ch, + String catalog, + Pat schemaPattern, + Pat tableNamePattern, + List<String> typeList) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_TABLES)) { return clientGetTables(catalog, schemaPattern, tableNamePattern, typeList); } @@ -962,8 +969,7 @@ class DrillMetaImpl extends MetaImpl { * Implements {@link DatabaseMetaData#getColumns}. */ @Override - public MetaResultSet getColumns(String catalog, Pat schemaPattern, - Pat tableNamePattern, Pat columnNamePattern) { + public MetaResultSet getColumns(ConnectionHandle ch, String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_COLUMNS)) { return clientGetColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern); } @@ -1022,7 +1028,7 @@ class DrillMetaImpl extends MetaImpl { * Implements {@link DatabaseMetaData#getSchemas}. */ @Override - public MetaResultSet getSchemas(String catalog, Pat schemaPattern) { + public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_SCHEMAS)) { return clientGetSchemas(catalog, schemaPattern); } @@ -1069,7 +1075,7 @@ class DrillMetaImpl extends MetaImpl { * Implements {@link DatabaseMetaData#getCatalogs}. */ @Override - public MetaResultSet getCatalogs() { + public MetaResultSet getCatalogs(ConnectionHandle ch) { if (connection.getConfig().isServerMetadataDisabled() || ! connection.getClient().getSupportedMethods().contains(ServerMethod.GET_CATALOGS)) { return clientGetCatalogs(); } @@ -1106,7 +1112,54 @@ class DrillMetaImpl extends MetaImpl { } @Override + public ExecuteResult prepareAndExecute(final StatementHandle handle, final String sql, final long maxRowCount, + int maxRowsInFirstFrame, final PrepareCallback callback) throws NoSuchStatementException { + return prepareAndExecute(handle, sql, maxRowCount, callback); + } + + @Override + public ExecuteBatchResult prepareAndExecuteBatch(StatementHandle statementHandle, List<String> list) throws NoSuchStatementException { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public ExecuteBatchResult executeBatch(StatementHandle statementHandle, List<List<TypedValue>> list) throws NoSuchStatementException { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public Frame fetch(StatementHandle statementHandle, long l, int i) throws NoSuchStatementException, MissingResultsException { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public ExecuteResult execute(StatementHandle statementHandle, List<TypedValue> list, long l) throws NoSuchStatementException { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public ExecuteResult execute(StatementHandle statementHandle, List<TypedValue> list, int i) throws NoSuchStatementException { + return null; + } + + @Override public void closeStatement(StatementHandle h) { // Nothing } + + @Override + public boolean syncResults(StatementHandle statementHandle, QueryState queryState, long l) throws NoSuchStatementException { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public void commit(ConnectionHandle connectionHandle) { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + + @Override + public void rollback(ConnectionHandle connectionHandle) { + throw new UnsupportedOperationException(this.getClass().getSimpleName()); + } + } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java index f1ba4c1..a45412f 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillPreparedStatementImpl.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -58,13 +58,9 @@ abstract class DrillPreparedStatementImpl extends AvaticaPreparedStatement resultSetType, resultSetConcurrency, resultSetHoldability); connection.openStatementsRegistry.addStatement(this); this.preparedStatementHandle = preparedStatementHandle; - if (preparedStatementHandle != null) { - ((DrillColumnMetaDataList) signature.columns).updateColumnMetaData(preparedStatementHandle.getColumnsList()); - } + ((DrillColumnMetaDataList) signature.columns).updateColumnMetaData(preparedStatementHandle.getColumnsList()); } - - /** * Throws AlreadyClosedSqlException <i>iff</i> this PreparedStatement is closed. * @@ -333,13 +329,17 @@ abstract class DrillPreparedStatementImpl extends AvaticaPreparedStatement } @Override - public void clearBatch() throws SQLException { - throwIfClosed(); + public void clearBatch() throws RuntimeException { + try { + throwIfClosed(); + } catch (AlreadyClosedSqlException e) { + throw new RuntimeException(e); + } try { super.clearBatch(); } catch (UnsupportedOperationException e) { - throw new SQLFeatureNotSupportedException(e.getMessage(), e); + throw new RuntimeException(new SQLFeatureNotSupportedException(e.getMessage(), e)); } } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java index c8b4e3d..f4fc588 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -48,6 +48,7 @@ import org.apache.calcite.avatica.AvaticaSite; import org.apache.calcite.avatica.AvaticaStatement; import org.apache.calcite.avatica.ColumnMetaData; import org.apache.calcite.avatica.Meta; +import org.apache.calcite.avatica.QueryState; import org.apache.calcite.avatica.util.Cursor; import org.apache.calcite.avatica.util.Cursor.Accessor; import org.apache.drill.jdbc.AlreadyClosedSqlException; @@ -66,10 +67,10 @@ class DrillResultSetImpl extends AvaticaResultSet implements DrillResultSet { private final DrillConnectionImpl connection; private volatile boolean hasPendingCancelationNotification = false; - DrillResultSetImpl(AvaticaStatement statement, Meta.Signature signature, + DrillResultSetImpl(AvaticaStatement statement, QueryState state, Meta.Signature signature, ResultSetMetaData resultSetMetaData, TimeZone timeZone, Meta.Frame firstFrame) { - super(statement, signature, resultSetMetaData, timeZone, firstFrame); + super(statement, state, signature, resultSetMetaData, timeZone, firstFrame); connection = (DrillConnectionImpl) statement.getConnection(); } http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java index ed95162..ac84844 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DatabaseMetaDataGetColumnsTest.java @@ -128,7 +128,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { private static ResultSet mdrReqCHAR_5; // No NCHAR, etc., in Drill (?). private static ResultSet mdrOptVARBINARY_16; - private static ResultSet mdrOptBINARY_1048576; + private static ResultSet mdrOptBINARY_65536; private static ResultSet mdrReqDATE; private static ResultSet mdrReqTIME; @@ -256,7 +256,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { + "\n CAST( NULL AS VARCHAR ) AS mdrOptVARCHAR, " + "\n CAST( '55' AS CHAR(5) ) AS mdrReqCHAR_5, " + "\n CAST( NULL AS VARBINARY(16) ) AS mdrOptVARBINARY_16, " - + "\n CAST( NULL AS VARBINARY(1048576) ) AS mdrOptBINARY_1048576, " + + "\n CAST( NULL AS VARBINARY(65536) ) AS mdrOptBINARY_65536, " + "\n CAST( NULL AS BINARY(8) ) AS mdrOptBINARY_8, " + "\n " + "\n DATE '2015-01-01' AS mdrReqDATE, " @@ -307,7 +307,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { mdrOptVARCHAR = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARCHAR" ); mdrReqCHAR_5 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqCHAR_5" ); mdrOptVARBINARY_16 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARBINARY_16" ); - mdrOptBINARY_1048576 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_1048576" ); + mdrOptBINARY_65536 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_65536" ); mdrReqDATE = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqDATE" ); mdrReqTIME = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqTIME" ); @@ -671,7 +671,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_DATA_TYPE_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "DATA_TYPE" ), equalTo( Types.VARBINARY ) ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "DATA_TYPE" ), equalTo( Types.VARBINARY ) ); } @Test @@ -849,7 +849,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_TYPE_NAME_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( mdrOptBINARY_1048576.getString( "TYPE_NAME" ), + assertThat( mdrOptBINARY_65536.getString( "TYPE_NAME" ), equalTo( "BINARY VARYING" ) ); } @@ -1039,7 +1039,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_COLUMN_SIZE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "COLUMN_SIZE" ), equalTo( 1048576 ) ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "COLUMN_SIZE" ), equalTo( 65536 ) ); } @Test @@ -1109,13 +1109,16 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { equalTo( 12 ) ); // "P123DT12H12M" } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "COLUMN_SIZE" ), equalTo( 20 ) ); // "P12DT12H12M12.12345S" } + @Ignore( "Ignored after Calcite update" ) + @Test public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", getIntOrNull( mdrReqINTERVAL_2D_S5, "COLUMN_SIZE" ), @@ -1134,13 +1137,15 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { equalTo( 7 ) ); // "PT1H12M" } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3H_S1() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "COLUMN_SIZE" ), equalTo( 14 ) ); // "PT123H12M12.1S" } + @Ignore( "Ignored after Calcite update" ) @Test public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_3H_S1() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -1172,13 +1177,15 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { equalTo( 13 ) ); // "PT123.123456S" } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_COLUMN_SIZE_hasRightValue_mdrReqINTERVAL_3S1() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_3S1, "COLUMN_SIZE" ), equalTo( 8 ) ); // "PT123.1S" } + @Ignore( "Ignored after Calcite update" ) @Test public void test_COLUMN_SIZE_hasINTERIMValue_mdrReqINTERVAL_3S1() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -1342,7 +1349,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_DECIMAL_DIGITS_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "DECIMAL_DIGITS" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "DECIMAL_DIGITS" ), nullValue() ); } @Test @@ -1420,12 +1427,14 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { assertThat( getIntOrNull( mdrReqINTERVAL_3D_Mi, "DECIMAL_DIGITS" ), equalTo( 6 ) ); } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "DECIMAL_DIGITS" ), equalTo( 5 ) ); } + @Ignore( "Ignored after Calcite update" ) @Test public void test_DECIMAL_DIGITS_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -1450,12 +1459,14 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { assertThat( getIntOrNull( mdrReqINTERVAL_1H_Mi, "DECIMAL_DIGITS" ), equalTo( 6 ) ); } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_DECIMAL_DIGITS_hasRightValue_mdrReqINTERVAL_3H_S1() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "DECIMAL_DIGITS" ), equalTo( 1 ) ); } + @Ignore( "Ignored after Calcite update" ) @Test public void test_DECIMAL_DIGITS_hasINTERIMValue_mdrReqINTERVAL_3H_S1() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -1640,7 +1651,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_NUM_PREC_RADIX_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUM_PREC_RADIX" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "NUM_PREC_RADIX" ), nullValue() ); } @Test @@ -1824,7 +1835,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_NULLABLE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { assertThat( "ResultSetMetaData.column...Null... nullability code:", - getIntOrNull( mdrOptBINARY_1048576, "NULLABLE" ), equalTo( columnNullable ) ); + getIntOrNull(mdrOptBINARY_65536, "NULLABLE" ), equalTo( columnNullable ) ); } @Test @@ -2186,7 +2197,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_CHAR_OCTET_LENGTH_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHAR_OCTET_LENGTH" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "CHAR_OCTET_LENGTH" ), nullValue() ); } @Test @@ -2443,7 +2454,7 @@ public class DatabaseMetaDataGetColumnsTest extends JdbcTestBase { @Test public void test_IS_NULLABLE_hasRightValue_mdrOptBINARY_1048576CHECK() throws SQLException { - assertThat( mdrOptBINARY_1048576.getString( "IS_NULLABLE" ), equalTo( "YES" ) ); + assertThat( mdrOptBINARY_65536.getString( "IS_NULLABLE" ), equalTo( "YES" ) ); } @Test http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java ---------------------------------------------------------------------- diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java index 7e0934c..214b7ca 100644 --- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java +++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestInformationSchemaColumns.java @@ -99,7 +99,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { private static ResultSet mdrReqCHAR_5; // No NCHAR, etc., in Drill (?). private static ResultSet mdrOptVARBINARY_16; - private static ResultSet mdrOptBINARY_1048576; + private static ResultSet mdrOptBINARY_65536; private static ResultSet mdrReqDATE; private static ResultSet mdrReqTIME; @@ -236,7 +236,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { + "\n CAST( NULL AS VARCHAR ) AS mdrOptVARCHAR, " + "\n CAST( '55' AS CHAR(5) ) AS mdrReqCHAR_5, " + "\n CAST( NULL AS VARBINARY(16) ) AS mdrOptVARBINARY_16, " - + "\n CAST( NULL AS VARBINARY(1048576) ) AS mdrOptBINARY_1048576, " + + "\n CAST( NULL AS VARBINARY(65536) ) AS mdrOptBINARY_65536, " + "\n CAST( NULL AS BINARY(8) ) AS mdrOptBINARY_8, " + "\n " + "\n DATE '2015-01-01' AS mdrReqDATE, " @@ -287,7 +287,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { mdrOptVARCHAR = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARCHAR" ); mdrReqCHAR_5 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqCHAR_5" ); mdrOptVARBINARY_16 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptVARBINARY_16" ); - mdrOptBINARY_1048576 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_1048576" ); + mdrOptBINARY_65536 = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrOptBINARY_65536" ); mdrReqDATE = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqDATE" ); mdrReqTIME = setUpRow( DFS_TMP_SCHEMA, VIEW_NAME, "mdrReqTIME" ); @@ -829,7 +829,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_IS_NULLABLE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { assertThat( "ResultSetMetaData.column...Null... nullability code:", - mdrOptBINARY_1048576.getString( "IS_NULLABLE" ), equalTo( "YES" ) ); + mdrOptBINARY_65536.getString( "IS_NULLABLE" ), equalTo( "YES" ) ); } @Test @@ -1006,8 +1006,8 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Ignore( "TODO(DRILL-3368): unignore when BINARY is implemented enough" ) @Test public void test_DATA_TYPE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( mdrOptBINARY_1048576.getString( "DATA_TYPE" ), equalTo( "BINARY VARYING" ) ); // ?? current - assertThat( mdrOptBINARY_1048576.getString( "DATA_TYPE" ), equalTo( "BINARY" ) ); // ?? should be + assertThat( mdrOptBINARY_65536.getString( "DATA_TYPE" ), equalTo( "BINARY VARYING" ) ); // ?? current + assertThat( mdrOptBINARY_65536.getString( "DATA_TYPE" ), equalTo( "BINARY" ) ); // ?? should be } @Test @@ -1172,7 +1172,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_CHARACTER_MAXIMUM_LENGTH_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHARACTER_MAXIMUM_LENGTH" ), equalTo( 1048576 ) ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "CHARACTER_MAXIMUM_LENGTH" ), equalTo( 65536 ) ); } @Test @@ -1339,7 +1339,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_CHARACTER_OCTET_LENGTH_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "CHARACTER_OCTET_LENGTH" ), equalTo( 1048576 )); + assertThat( getIntOrNull(mdrOptBINARY_65536, "CHARACTER_OCTET_LENGTH" ), equalTo( 65536 )); } @Test @@ -1499,7 +1499,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_NUMERIC_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_PRECISION" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_PRECISION" ), nullValue() ); } @Test @@ -1659,7 +1659,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_NUMERIC_PRECISION_RADIX_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_PRECISION_RADIX" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_PRECISION_RADIX" ), nullValue() ); } @Test @@ -1819,7 +1819,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_NUMERIC_SCALE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "NUMERIC_SCALE" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "NUMERIC_SCALE" ), nullValue() ); } @Test @@ -1979,7 +1979,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_DATETIME_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "DATETIME_PRECISION" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "DATETIME_PRECISION" ), nullValue() ); } @Test @@ -2050,12 +2050,14 @@ public class TestInformationSchemaColumns extends JdbcTestBase { assertThat( getIntOrNull( mdrReqINTERVAL_3D_Mi, "DATETIME_PRECISION" ), equalTo( 6 ) ); } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_2D_S5, "DATETIME_PRECISION" ), equalTo( 5 ) ); } + @Ignore( "Ignored after Calcite update" ) @Test public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_2D_S5() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -2080,12 +2082,14 @@ public class TestInformationSchemaColumns extends JdbcTestBase { assertThat( getIntOrNull( mdrReqINTERVAL_1H_Mi, "DATETIME_PRECISION" ), equalTo( 6 ) ); } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_H_S3() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_3H_S1, "DATETIME_PRECISION" ), equalTo( 1 ) ); } + @Ignore( "Ignored after Calcite update" ) @Test public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_H_S3() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -2119,12 +2123,14 @@ public class TestInformationSchemaColumns extends JdbcTestBase { assertThat( getIntOrNull( mdrReqINTERVAL_3S, "DATETIME_PRECISION" ), equalTo( 6 ) ); } - @Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) + //Fixed with Calcite update + //@Ignore( "TODO(DRILL-3244): unignore when fractional secs. prec. is right" ) @Test public void test_DATETIME_PRECISION_hasRightValue_mdrReqINTERVAL_3S1() throws SQLException { assertThat( getIntOrNull( mdrReqINTERVAL_3S1, "DATETIME_PRECISION" ), equalTo( 1 ) ); } + @Ignore( "Ignored after Calcite update" ) @Test public void test_DATETIME_PRECISION_hasINTERIMValue_mdrReqINTERVAL_3S1() throws SQLException { assertThat( "When DRILL-3244 fixed, un-ignore above method and purge this.", @@ -2258,7 +2264,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_INTERVAL_TYPE_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( mdrOptBINARY_1048576.getString( "INTERVAL_TYPE" ), nullValue() ); + assertThat( mdrOptBINARY_65536.getString( "INTERVAL_TYPE" ), nullValue() ); } @Test @@ -2491,7 +2497,7 @@ public class TestInformationSchemaColumns extends JdbcTestBase { @Test public void test_INTERVAL_PRECISION_hasRightValue_mdrOptBINARY_1048576() throws SQLException { - assertThat( getIntOrNull( mdrOptBINARY_1048576, "INTERVAL_PRECISION" ), nullValue() ); + assertThat( getIntOrNull(mdrOptBINARY_65536, "INTERVAL_PRECISION" ), nullValue() ); } @Test http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 6189cf2..ce64591 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,8 @@ <dep.guava.version>18.0</dep.guava.version> <forkCount>2</forkCount> <parquet.version>1.8.1-drill-r0</parquet.version> - <calcite.version>1.4.0-drill-r23</calcite.version> + <calcite.version>1.13.0-drill-r0</calcite.version> + <avatica.version>1.10.0</avatica.version> <janino.version>2.7.6</janino.version> <sqlline.version>1.1.9-drill-r7</sqlline.version> <jackson.version>2.7.9</jackson.version> @@ -57,7 +58,7 @@ <hive.version>1.2.1</hive.version> <hadoop.version>2.7.1</hadoop.version> <hbase.version>1.1.3</hbase.version> - <fmpp.version>0.9.15</fmpp.version> + <fmpp.version>1.0</fmpp.version> <freemarker.version>2.3.26-incubating</freemarker.version> <javassist.version>3.16.1-GA</javassist.version> <msgpack.version>0.6.6</msgpack.version> @@ -717,6 +718,25 @@ <dependencyManagement> <dependencies> <dependency> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>avatica</artifactId> + <version>${avatica.version}</version> + <exclusions> + <exclusion> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>avatica-core</artifactId> + </exclusion> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + <exclusion> + <artifactId>protobuf-java</artifactId> + <groupId>com.google.protobuf</groupId> + </exclusion> + </exclusions> + </dependency> + <dependency> <groupId>org.msgpack</groupId> <artifactId>msgpack</artifactId> <version>${msgpack.version}</version> @@ -1723,6 +1743,10 @@ <version>${calcite.version}</version> <exclusions> <exclusion> + <groupId>org.apache.calcite.avatica</groupId> + <artifactId>avatica-core</artifactId> + </exclusion> + <exclusion> <groupId>org.jgrapht</groupId> <artifactId>jgrapht-jdk1.5</artifactId> </exclusion> http://git-wip-us.apache.org/repos/asf/drill/blob/9fabb612/tools/fmpp/pom.xml ---------------------------------------------------------------------- diff --git a/tools/fmpp/pom.xml b/tools/fmpp/pom.xml index 91e686c..4f4b7e9 100644 --- a/tools/fmpp/pom.xml +++ b/tools/fmpp/pom.xml @@ -45,9 +45,19 @@ <version>3.3.3</version> </dependency> <dependency> - <groupId>net.sourceforge.fmpp</groupId> - <artifactId>fmpp</artifactId> + <groupId>com.googlecode.fmpp-maven-plugin</groupId> + <artifactId>fmpp-maven-plugin</artifactId> <version>${fmpp.version}</version> + <exclusions> + <exclusion> + <artifactId>log4j</artifactId> + <groupId>log4j</groupId> + </exclusion> + <exclusion> + <artifactId>commons-logging-api</artifactId> + <groupId>commons-logging</groupId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.freemarker</groupId>