[
https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15800061#comment-15800061
]
ASF GitHub Bot commented on DRILL-4956:
---------------------------------------
Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/666#discussion_r94689164
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java
---
@@ -67,43 +71,64 @@ public CreateTableHandler(SqlHandlerConfig config,
Pointer<String> textPlan) {
@Override
public PhysicalPlan getPlan(SqlNode sqlNode) throws ValidationException,
RelConversionException, IOException, ForemanSetupException {
SqlCreateTable sqlCreateTable = unwrap(sqlNode, SqlCreateTable.class);
- final String newTblName = sqlCreateTable.getName();
+ String originalTableName = sqlCreateTable.getName();
final ConvertedRelNode convertedRelNode =
validateAndConvert(sqlCreateTable.getQuery());
final RelDataType validatedRowType =
convertedRelNode.getValidatedRowType();
final RelNode queryRelNode = convertedRelNode.getConvertedNode();
-
final RelNode newTblRelNode =
SqlHandlerUtil.resolveNewTableRel(false,
sqlCreateTable.getFieldNames(), validatedRowType, queryRelNode);
+ final String temporaryWorkspace =
context.getConfig().getString(ExecConstants.DEFAULT_TEMPORARY_WORKSPACE);
+
final AbstractSchema drillSchema =
SchemaUtilites.resolveToMutableDrillSchema(config.getConverter().getDefaultSchema(),
- sqlCreateTable.getSchemaPath());
- final String schemaPath = drillSchema.getFullSchemaName();
+ getSchemaPath(sqlCreateTable, temporaryWorkspace));
+
+ boolean isTemporaryWorkspace =
drillSchema.getFullSchemaName().equals(temporaryWorkspace);
- if (SqlHandlerUtil.getTableFromSchema(drillSchema, newTblName) !=
null) {
- throw UserException.validationError()
- .message("A table or view with given name [%s] already exists in
schema [%s]", newTblName, schemaPath)
+ if (sqlCreateTable.isTemporary() && !isTemporaryWorkspace) {
+ throw UserException
+ .validationError()
+ .message(String.format("Temporary tables are not allowed to be
created " +
+ "outside of default temporary workspace [%s] defined by [%s]
" +
+ "configuration parameter", temporaryWorkspace,
ExecConstants.DEFAULT_TEMPORARY_WORKSPACE))
.build(logger);
}
- final RelNode newTblRelNodeWithPCol =
SqlHandlerUtil.qualifyPartitionCol(newTblRelNode,
sqlCreateTable.getPartitionColumns());
+ checkDuplicatedObjectExistence(drillSchema, originalTableName,
isTemporaryWorkspace, context.getSession());
- log("Calcite", newTblRelNodeWithPCol, logger, null);
+ final RelNode newTblRelNodeWithPCol =
SqlHandlerUtil.qualifyPartitionCol(newTblRelNode,
+ sqlCreateTable.getPartitionColumns());
+ log("Calcite", newTblRelNodeWithPCol, logger, null);
// Convert the query to Drill Logical plan and insert a writer
operator on top.
- DrillRel drel = convertToDrel(newTblRelNodeWithPCol, drillSchema,
newTblName, sqlCreateTable.getPartitionColumns(), newTblRelNode.getRowType());
+ StorageStrategy storageStrategy = sqlCreateTable.isTemporary() ?
+ StorageStrategy.TEMPORARY : StorageStrategy.PERSISTENT;
+ String newTableName = sqlCreateTable.isTemporary() ?
--- End diff --
Perhaps a comment to explain how the new table name differs from the
original table name. Reason: can the new name conflict with other table names
in the query? If I had A, B and A is a temp table, can the new name turn out to
be B which collides with the existing B?
> Temporary tables support
> ------------------------
>
> Key: DRILL-4956
> URL: https://issues.apache.org/jira/browse/DRILL-4956
> Project: Apache Drill
> Issue Type: Improvement
> Affects Versions: 1.8.0
> Reporter: Arina Ielchiieva
> Assignee: Arina Ielchiieva
> Labels: doc-impacting
> Fix For: Future
>
>
> Link to design doc -
> https://docs.google.com/document/d/1gSRo_w6q2WR5fPx7SsQ5IaVmJXJ6xCOJfYGyqpVOC-g/edit
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)