[ https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15826224#comment-15826224 ]
ASF GitHub Bot commented on DRILL-4956: --------------------------------------- Github user arina-ielchiieva commented on a diff in the pull request: https://github.com/apache/drill/pull/666#discussion_r94759119 --- 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 -- Added explanation comment. New table name can not conflict with existing table names, `UUID.randomUUID()` is used for generated temp table name. > 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)