[ https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15761385#comment-15761385 ]
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_r91952814 --- 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. + * + * Temporary tables cache is used to find temporary table by its name and schema, + * to drop all existing temporary tables on session close + * or remove temporary table from cache on user demand. + */ + public static class TemporaryTablesCache { + + private final String uuid; + private final ConcurrentMap<String, ConcurrentMap<String, AbstractSchema>> temporaryTables; --- End diff -- Not applicable, now temporary tables will be stored in `Map<String, String>` where key is original table name, value is generated 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)