[ 
https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15761374#comment-15761374
 ] 

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_r91708832
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java ---
    @@ -207,25 +239,165 @@ public SchemaPlus getDefaultSchema(SchemaPlus 
rootSchema) {
           return null;
         }
     
    -    final SchemaPlus defaultSchema = SchemaUtilites.findSchema(rootSchema, 
defaultSchemaPath);
    -
    -    if (defaultSchema == null) {
    -      // If the current schema resolves to null, return root schema as the 
current default schema.
    -      return defaultSchema;
    -    }
    -
    -    return defaultSchema;
    +    return SchemaUtilites.findSchema(rootSchema, defaultSchemaPath);
       }
     
       public boolean setSessionOption(String name, String value) {
         return true;
       }
     
    +  /**
    +   * @return unique session identifier
    +   */
    +  public String getUuid() { return uuid; }
    +
    +  /**
    +   * Adds temporary table to temporary tables cache.
    +   *
    +   * @param schema table schema
    +   * @param tableName original table name
    +   * @return generated temporary table name
    +   */
    +  public String registerTemporaryTable(AbstractSchema schema, String 
tableName) {
    +    return temporaryTablesCache.add(schema, tableName);
    +  }
    +
    +  /**
    +   * Looks for temporary table in temporary tables cache by its name in 
specified schema.
    +   *
    +   * @param fullSchemaName table full schema name (example, dfs.tmp)
    +   * @param tableName original table name
    +   * @return temporary table name if found, null otherwise
    +   */
    +  public String findTemporaryTable(String fullSchemaName, String 
tableName) {
    +    return temporaryTablesCache.find(fullSchemaName, tableName);
    +  }
    +
    +  /**
    +   * Before removing temporary table from temporary tables cache,
    +   * checks if table exists physically on disk, if yes, removes it.
    +   *
    +   * @param fullSchemaName full table schema name (example, dfs.tmp)
    +   * @param tableName original table name
    +   * @return true if table was physically removed, false otherwise
    +   */
    +  public boolean removeTemporaryTable(String fullSchemaName, String 
tableName) {
    +    final AtomicBoolean result = new AtomicBoolean();
    +    temporaryTablesCache.remove(fullSchemaName, tableName, new 
BiConsumer<AbstractSchema, String>() {
    +      @Override
    +      public void accept(AbstractSchema schema, String temporaryTableName) 
{
    +        if (schema.getTable(temporaryTableName) != null) {
    +          schema.dropTable(temporaryTableName);
    +          result.set(true);
    +        }
    +      }
    +    });
    +    return result.get();
    +  }
    +
       private String getProp(String key) {
         return properties.get(key) != null ? properties.get(key) : "";
       }
     
       private void setProp(String key, String value) {
         properties.put(key, value);
       }
    +
    +  /**
    +   * Temporary tables cache stores data by full schema name (schema and 
workspace separated by dot
    +   * (example: dfs.tmp)) as key, and map of generated temporary tables 
names
    +   * and its schemas represented by {@link AbstractSchema} as values.
    +   * Schemas represented by {@link AbstractSchema} are used to drop 
temporary tables.
    +   * Generated temporary tables consists of original table name and unique 
session id.
    +   * Cache is represented by {@link ConcurrentMap} so if is thread-safe 
and can be used
    +   * in multi-threaded environment.
    --- End diff --
    
    Done.


> 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