[ 
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)

Reply via email to