[
https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15826212#comment-15826212
]
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_r96142713
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableHandler.java
---
@@ -55,35 +58,79 @@ public DropTableHandler(SqlHandlerConfig config) {
*/
@Override
public PhysicalPlan getPlan(SqlNode sqlNode) throws ValidationException,
RelConversionException, IOException {
-
SqlDropTable dropTableNode = ((SqlDropTable) sqlNode);
- SqlIdentifier tableIdentifier = dropTableNode.getTableIdentifier();
-
+ String originalTableName = dropTableNode.getName();
SchemaPlus defaultSchema = config.getConverter().getDefaultSchema();
- AbstractSchema drillSchema = null;
+ List<String> tableSchema = dropTableNode.getSchema();
+
+ boolean removedTemporaryTable = removeTemporaryTable(defaultSchema,
tableSchema, originalTableName);
+ // if table to be dropped is not temporary table, we need to check
among persistent tables or views
+ if (!removedTemporaryTable) {
+ AbstractSchema drillSchema =
SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, tableSchema);
+ Table tableToDrop = SqlHandlerUtil.getTableFromSchema(drillSchema,
originalTableName);
+ if (tableToDrop == null || tableToDrop.getJdbcTableType() !=
Schema.TableType.TABLE) {
+ if (dropTableNode.checkTableExistence()) {
+ return DirectPlan.createDirectPlan(context, false,
String.format("Table [%s] not found", originalTableName));
+ } else {
+ throw UserException.validationError().message("Table [%s] not
found", originalTableName).build(logger);
+ }
+ }
- if (tableIdentifier != null) {
- drillSchema =
SchemaUtilites.resolveToMutableDrillSchema(defaultSchema,
dropTableNode.getSchema());
+ try {
+ drillSchema.dropTable(originalTableName);
+ } catch (Exception e) {
+ // concurrency check: we might have failed because somebody has
already dropped the table
+ if (SqlHandlerUtil.getTableFromSchema(drillSchema,
originalTableName) != null) {
+ throw e;
+ }
+ }
}
- String tableName = dropTableNode.getName();
- if (drillSchema == null) {
- throw UserException.validationError()
- .message("Invalid table_name [%s]", tableName)
- .build(logger);
+ String message = String.format("%s [%s] dropped",
+ removedTemporaryTable ? "Temporary table" : "Table",
originalTableName);
+ logger.info(message);
+ return DirectPlan.createDirectPlan(context, true, message);
+ }
+
+ /**
+ * If used workspace is default temporary workspace and temporary table
is found,
+ * drops the table and removes it from session temporary tables list.
+ *
+ * @param defaultSchema default schema
+ * @param tableSchema table schema indicated in drop statement
+ * @param tableName table name to drop
+ * @return true if temporary table existed and was dropped, false
otherwise
+ */
+ private boolean removeTemporaryTable(SchemaPlus defaultSchema,
List<String> tableSchema, String tableName) {
+ String temporaryWorkspace =
context.getConfig().getString(ExecConstants.DEFAULT_TEMPORARY_WORKSPACE);
+
+ // look for temporary table only if default temporary workspace is used
+ if (!(tableSchema.isEmpty() ||
SchemaUtilites.getSchemaPath(tableSchema).equals(temporaryWorkspace))) {
+ return false;
}
- if (dropTableNode.checkTableExistence()) {
- final Table tableToDrop =
SqlHandlerUtil.getTableFromSchema(drillSchema, tableName);
- if (tableToDrop == null || tableToDrop.getJdbcTableType() !=
Schema.TableType.TABLE) {
- return DirectPlan.createDirectPlan(context, true,
- String.format("Table [%s] not found", tableName));
- }
+ String temporaryTable =
context.getSession().findTemporaryTable(tableName);
+ if (temporaryTable == null) {
+ return false;
--- 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)