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

ASF GitHub Bot commented on DRILL-4673:
---------------------------------------

Github user vdiravka commented on a diff in the pull request:

    https://github.com/apache/drill/pull/541#discussion_r71583345
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableIfExistsHandler.java
 ---
    @@ -28,47 +30,57 @@
     import org.apache.drill.exec.physical.PhysicalPlan;
     import org.apache.drill.exec.planner.sql.DirectPlan;
     import org.apache.drill.exec.planner.sql.SchemaUtilites;
    -import org.apache.drill.exec.planner.sql.parser.SqlDropTable;
    +import org.apache.drill.exec.planner.sql.parser.SqlDropTableIfExists;
     import org.apache.drill.exec.store.AbstractSchema;
     
     // SqlHandler for dropping a table.
    -public class DropTableHandler extends DefaultSqlHandler {
    +public class DropTableIfExistsHandler extends DefaultSqlHandler {
     
    -  private static org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(DropTableHandler.class);
    +  private static org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(DropTableIfExistsHandler.class);
     
    -  public DropTableHandler(SqlHandlerConfig config) {
    +  public DropTableIfExistsHandler(SqlHandlerConfig config) {
         super(config);
       }
     
       /**
    -   * Function resolves the schema and invokes the drop method. Raises an 
exception if the schema is
    -   * immutable.
    -   * @param sqlNode - Table name identifier
    -   * @return - Single row indicating drop succeeded, raise exception 
otherwise
    +   * Function resolves the schema and invokes the drop method
    +   * (while IF EXISTS statement is used function invokes the drop method 
only if table exists).
    +   * Raises an exception if the schema is immutable.
    +   * @param sqlNode - SqlDropTableIfExists (SQL parse tree of drop table 
[if exists] query)
    +   * @return - Single row indicating drop succeeded or table is not found 
while IF EXISTS statement is used,
    +   * raise exception otherwise
        * @throws ValidationException
        * @throws RelConversionException
        * @throws IOException
        */
       @Override
       public PhysicalPlan getPlan(SqlNode sqlNode) throws ValidationException, 
RelConversionException, IOException {
     
    -    SqlDropTable dropTableNode = ((SqlDropTable) sqlNode);
    -    SqlIdentifier tableIdentifier = dropTableNode.getTableIdentifier();
    +    SqlDropTableIfExists dropTableIfExistsNode = ((SqlDropTableIfExists) 
sqlNode);
    +    SqlIdentifier tableIdentifier = 
dropTableIfExistsNode.getTableIdentifier();
     
         SchemaPlus defaultSchema = config.getConverter().getDefaultSchema();
         AbstractSchema drillSchema = null;
     
         if (tableIdentifier != null) {
    -      drillSchema = 
SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, 
dropTableNode.getSchema());
    +      drillSchema = 
SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, 
dropTableIfExistsNode.getSchema());
         }
     
    -    String tableName = ((SqlDropTable) sqlNode).getName();
    +    String tableName = dropTableIfExistsNode.getName();
         if (drillSchema == null) {
           throw UserException.validationError()
               .message("Invalid table_name [%s]", tableName)
               .build(logger);
         }
     
    +    if (dropTableIfExistsNode.checkTableExistence()) {
    +      final Table tableToDrop = 
SqlHandlerUtil.getTableFromSchema(drillSchema, tableName);
    +      if (tableToDrop == null || tableToDrop.getJdbcTableType() != 
Schema.TableType.TABLE) {
    --- End diff --
    
    I checked every `schema#getTable` and found that every method can throw 
exception only if something go wrong (permissionError, dataReadError, 
IOException etc). 
    `getTableFromSchema `can not throw any exception, because in this method 
`catch (Exception e)` is used.


> Implement "DROP TABLE IF EXISTS" for drill to prevent FAILED status on 
> command return
> -------------------------------------------------------------------------------------
>
>                 Key: DRILL-4673
>                 URL: https://issues.apache.org/jira/browse/DRILL-4673
>             Project: Apache Drill
>          Issue Type: New Feature
>          Components: Functions - Drill
>            Reporter: Vitalii Diravka
>            Assignee: Vitalii Diravka
>            Priority: Minor
>              Labels: drill
>
> Implement "DROP TABLE IF EXISTS" for drill to prevent FAILED status on 
> command "DROP TABLE" return if table doesn't exist.
> The same for "DROP VIEW IF EXISTS"



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to