This is an automated email from the ASF dual-hosted git repository.

starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 0b718e863c8 [Enhancement] (nereids)implement DropRepositoryCommand in 
nereids (#45004)
0b718e863c8 is described below

commit 0b718e863c8ec07d7d2351ea22e7a983947dded6
Author: Vallish Pai <vallish...@gmail.com>
AuthorDate: Fri Dec 6 12:52:42 2024 +0530

    [Enhancement] (nereids)implement DropRepositoryCommand in nereids (#45004)
    
    Issue Number: close #42617
---
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 |  3 +-
 .../org/apache/doris/backup/BackupHandler.java     |  7 ++++-
 .../doris/nereids/parser/LogicalPlanBuilder.java   |  7 +++++
 .../apache/doris/nereids/trees/plans/PlanType.java |  1 +
 .../trees/plans/commands/AlterRoleCommand.java     |  3 --
 ...RoleCommand.java => DropRepositoryCommand.java} | 36 ++++++++++++----------
 .../trees/plans/commands/ShowGrantsCommand.java    |  3 --
 .../plans/commands/ShowPartitionIdCommand.java     |  3 --
 .../trees/plans/commands/ShowProcCommand.java      |  4 ---
 .../trees/plans/commands/ShowRolesCommand.java     |  4 ---
 .../trees/plans/commands/ShowTableIdCommand.java   |  3 --
 .../trees/plans/visitor/CommandVisitor.java        | 13 +++++---
 .../repository/show_repositories_command.groovy    |  2 +-
 13 files changed, 45 insertions(+), 44 deletions(-)

diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
index fd40e2c1400..f229a1b2f4a 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
@@ -216,6 +216,8 @@ supportedDropStatement
     | DROP FILE name=STRING_LITERAL
         ((FROM | IN) database=identifier)? properties=propertyClause           
 #dropFile
     | DROP WORKLOAD POLICY (IF EXISTS)? name=identifierOrText                  
 #dropWorkloadPolicy
+    | DROP REPOSITORY name=identifier                                          
 #dropRepository
+
     ;
 
 supportedShowStatement
@@ -684,7 +686,6 @@ unsupportedDropStatement
         functionIdentifier LEFT_PAREN functionArguments? RIGHT_PAREN           
 #dropFunction
     | DROP TABLE (IF EXISTS)? name=multipartIdentifier FORCE?                  
 #dropTable
     | DROP VIEW (IF EXISTS)? name=multipartIdentifier                          
 #dropView
-    | DROP REPOSITORY name=identifier                                          
 #dropRepository
     | DROP INDEX (IF EXISTS)? name=identifier ON tableName=multipartIdentifier 
 #dropIndex
     | DROP RESOURCE (IF EXISTS)? name=identifierOrText                         
 #dropResource
     | DROP ROW POLICY (IF EXISTS)? policyName=identifier
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
index d70544add98..6a12eee3a78 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
@@ -281,9 +281,14 @@ public class BackupHandler extends MasterDaemon implements 
Writable {
 
     // handle drop repository stmt
     public void dropRepository(DropRepositoryStmt stmt) throws DdlException {
+        dropRepository(stmt.getRepoName());
+    }
+
+    // handle drop repository stmt
+    public void dropRepository(String repoName) throws DdlException {
         tryLock();
         try {
-            Repository repo = repoMgr.getRepo(stmt.getRepoName());
+            Repository repo = repoMgr.getRepo(repoName);
             if (repo == null) {
                 ErrorReport.reportDdlException(ErrorCode.ERR_COMMON_ERROR, 
"Repository does not exist");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 9ed352b65e5..71ea972c4ab 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -118,6 +118,7 @@ import 
org.apache.doris.nereids.DorisParser.DropEncryptkeyContext;
 import org.apache.doris.nereids.DorisParser.DropFileContext;
 import org.apache.doris.nereids.DorisParser.DropMTMVContext;
 import org.apache.doris.nereids.DorisParser.DropProcedureContext;
+import org.apache.doris.nereids.DorisParser.DropRepositoryContext;
 import org.apache.doris.nereids.DorisParser.DropRoleContext;
 import org.apache.doris.nereids.DorisParser.DropSqlBlockRuleContext;
 import org.apache.doris.nereids.DorisParser.DropUserContext;
@@ -508,6 +509,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.DropFileCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropJobCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropProcedureCommand;
+import org.apache.doris.nereids.trees.plans.commands.DropRepositoryCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropRoleCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropSqlBlockRuleCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropUserCommand;
@@ -4867,6 +4869,11 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         return new DropFileCommand(stripQuotes(ctx.name.getText()), dbName, 
properties);
     }
 
+    @Override
+    public LogicalPlan visitDropRepository(DropRepositoryContext ctx) {
+        return new DropRepositoryCommand(stripQuotes(ctx.name.getText()));
+    }
+
     @Override
     public LogicalPlan visitDropSqlBlockRule(DropSqlBlockRuleContext ctx) {
         return new 
DropSqlBlockRuleCommand(visitIdentifierSeq(ctx.identifierSeq()), ctx.EXISTS() 
!= null);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
index aaa93d70c35..bc8ccf83093 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
@@ -168,6 +168,7 @@ public enum PlanType {
     CREATE_PROCEDURE_COMMAND,
     DROP_PROCEDURE_COMMAND,
     DROP_ROLE_COMMAND,
+    DROP_REPOSITOORY_COMMAND,
     SHOW_PROCEDURE_COMMAND,
     SHOW_CREATE_PROCEDURE_COMMAND,
     CREATE_VIEW_COMMAND,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
index fe8d0fd5db9..9f2d4ba2274 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
@@ -27,14 +27,11 @@ import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.StmtExecutor;
 
 import com.google.common.base.Strings;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 /**
  * alter role command
  */
 public class AlterRoleCommand extends AlterCommand {
-    public static final Logger LOG = 
LogManager.getLogger(AlterRoleCommand.class);
     private final String role;
     private final String comment;
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropRepositoryCommand.java
similarity index 66%
copy from 
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
copy to 
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropRepositoryCommand.java
index fe8d0fd5db9..4fef49c3993 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterRoleCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropRepositoryCommand.java
@@ -18,6 +18,7 @@
 package org.apache.doris.nereids.trees.plans.commands;
 
 import org.apache.doris.catalog.Env;
+import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.mysql.privilege.PrivPredicate;
@@ -26,40 +27,41 @@ import 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.StmtExecutor;
 
-import com.google.common.base.Strings;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 /**
- * alter role command
+ * drop repository command
  */
-public class AlterRoleCommand extends AlterCommand {
-    public static final Logger LOG = 
LogManager.getLogger(AlterRoleCommand.class);
-    private final String role;
-    private final String comment;
+public class DropRepositoryCommand extends DropCommand {
+    public static final Logger LOG = 
LogManager.getLogger(DropRepositoryCommand.class);
+    private final String repoName;
 
     /**
      * constructor
      */
-
-    public AlterRoleCommand(String role, String comment) {
-        super(PlanType.ALTER_ROLE_COMMAND);
-        this.role = role;
-        this.comment = Strings.nullToEmpty(comment);
-
+    public DropRepositoryCommand(String repoName) {
+        super(PlanType.DROP_REPOSITOORY_COMMAND);
+        this.repoName = repoName;
     }
 
     @Override
     public void doRun(ConnectContext ctx, StmtExecutor executor) throws 
Exception {
-        // check if current user has GRANT priv on GLOBAL level.
-        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.GRANT)) {
-            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ALTER ROLE");
+        // check auth
+        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)) {
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN");
         }
-        Env.getCurrentEnv().getAuth().alterRole(role, comment);
+        Env.getCurrentEnv().getBackupHandler().dropRepository(repoName);
     }
 
     @Override
     public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
-        return visitor.visitAlterRoleCommand(this, context);
+        return visitor.visitDropRepositoryCommand(this, context);
+    }
+
+    @Override
+    protected void checkSupportedInCloudMode(ConnectContext ctx) throws 
DdlException {
+        LOG.info("DropRepositoryCommand not supported in cloud mode");
+        throw new DdlException("Unsupported operation");
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java
index f877f42b835..6d52d374fa7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java
@@ -34,8 +34,6 @@ import org.apache.doris.qe.ShowResultSetMetaData;
 import org.apache.doris.qe.StmtExecutor;
 
 import com.google.common.base.Preconditions;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 import java.util.List;
 
@@ -43,7 +41,6 @@ import java.util.List;
  * show grants command
  */
 public class ShowGrantsCommand extends ShowCommand {
-    public static final Logger LOG = 
LogManager.getLogger(ShowGrantsCommand.class);
     private static final ShowResultSetMetaData META_DATA;
     private final boolean isAll;
     private UserIdentity userIdent; // if not given will update with self.
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowPartitionIdCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowPartitionIdCommand.java
index fb7e5cdf968..47977a8e896 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowPartitionIdCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowPartitionIdCommand.java
@@ -35,8 +35,6 @@ import org.apache.doris.qe.ShowResultSetMetaData;
 import org.apache.doris.qe.StmtExecutor;
 
 import com.google.common.collect.Lists;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -45,7 +43,6 @@ import java.util.List;
  * show partition command
  */
 public class ShowPartitionIdCommand extends ShowCommand {
-    public static final Logger LOG = 
LogManager.getLogger(ShowPartitionIdCommand.class);
     private final long partitionId;
 
     /**
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcCommand.java
index da2fb38c4d8..fc865a07457 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcCommand.java
@@ -35,16 +35,12 @@ import org.apache.doris.qe.ShowResultSet;
 import org.apache.doris.qe.ShowResultSetMetaData;
 import org.apache.doris.qe.StmtExecutor;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.List;
 
 /**
  * show proc command
  */
 public class ShowProcCommand extends ShowCommand {
-    public static final Logger LOG = 
LogManager.getLogger(ShowProcCommand.class);
     private final String path;
 
     /**
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowRolesCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowRolesCommand.java
index 7cbb5f934ca..4ca4c051cdb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowRolesCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowRolesCommand.java
@@ -30,16 +30,12 @@ import org.apache.doris.qe.ShowResultSet;
 import org.apache.doris.qe.ShowResultSetMetaData;
 import org.apache.doris.qe.StmtExecutor;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.List;
 
 /**
  * show roles command
  */
 public class ShowRolesCommand extends ShowCommand {
-    public static final Logger LOG = 
LogManager.getLogger(ShowRolesCommand.class);
     private static final ShowResultSetMetaData META_DATA;
 
     static {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowTableIdCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowTableIdCommand.java
index 3acd6c7992c..59e1834215a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowTableIdCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowTableIdCommand.java
@@ -33,8 +33,6 @@ import org.apache.doris.qe.ShowResultSetMetaData;
 import org.apache.doris.qe.StmtExecutor;
 
 import com.google.common.collect.Lists;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,7 +41,6 @@ import java.util.List;
  * show table id command
  */
 public class ShowTableIdCommand extends ShowCommand {
-    public static final Logger LOG = 
LogManager.getLogger(ShowTableIdCommand.class);
     private final long tableId;
 
     /**
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
index 339bb4e4c6a..77846ff3ad5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
@@ -55,6 +55,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.DropFileCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropJobCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropProcedureCommand;
+import org.apache.doris.nereids.trees.plans.commands.DropRepositoryCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropRoleCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropSqlBlockRuleCommand;
 import org.apache.doris.nereids.trees.plans.commands.DropUserCommand;
@@ -506,12 +507,16 @@ public interface CommandVisitor<R, C> {
         return visitCommand(showLoadProfileCommand, context);
     }
 
-    default R visitAlterSqlBlockRuleCommand(AlterSqlBlockRuleCommand 
dropRoleCommand, C context) {
-        return visitCommand(dropRoleCommand, context);
+    default R visitAlterSqlBlockRuleCommand(AlterSqlBlockRuleCommand cmd, C 
context) {
+        return visitCommand(cmd, context);
     }
 
-    default R visitCreateSqlBlockRuleCommand(CreateSqlBlockRuleCommand 
dropRoleCommand, C context) {
-        return visitCommand(dropRoleCommand, context);
+    default R visitCreateSqlBlockRuleCommand(CreateSqlBlockRuleCommand cmd, C 
context) {
+        return visitCommand(cmd, context);
+    }
+
+    default R visitDropRepositoryCommand(DropRepositoryCommand cmd, C context) 
{
+        return visitCommand(cmd, context);
     }
 
     default R visitCreateRoleCommand(CreateRoleCommand createRoleCommand, C 
context) {
diff --git 
a/regression-test/suites/nereids_p0/ddl/repository/show_repositories_command.groovy
 
b/regression-test/suites/nereids_p0/ddl/repository/show_repositories_command.groovy
index 43fadf3b1a8..5d352010900 100644
--- 
a/regression-test/suites/nereids_p0/ddl/repository/show_repositories_command.groovy
+++ 
b/regression-test/suites/nereids_p0/ddl/repository/show_repositories_command.groovy
@@ -47,7 +47,7 @@ suite("show_repositories_command") {
     def show_repo = checkNereidsExecuteWithResult("""SHOW 
REPOSITORIES;""").toString();
     assertTrue(show_repo.contains("${repoName}"))
 
-    sql """DROP REPOSITORY `${repoName}`;"""
+    checkNereidsExecute("DROP REPOSITORY `${repoName}`;")
 
     def show_repo_after_drop = checkNereidsExecuteWithResult("""SHOW 
REPOSITORIES;""").toString();
     assertFalse(show_repo_after_drop.contains("${repoName}"))


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to