You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/02/28 05:09:13 UTC

(doris) 07/22: [opt](plsql) Fix procedure key compatibility (#31445)

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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit c0754583cbbca4d85fb799f5656aa07ceb80c5dd
Author: Xinyi Zou <zo...@gmail.com>
AuthorDate: Tue Feb 27 22:23:11 2024 +0800

    [opt](plsql) Fix procedure key compatibility (#31445)
    
    use dbId replace dbName, because dbName may be renamed by Alter.
    procedure key add package name (only reserved, currently no plans to support package)
    Optimize procedure create and exception
---
 .../doris/nereids/parser/LogicalPlanBuilder.java   |  2 +-
 .../plans/commands/CreateProcedureCommand.java     |  6 +-
 .../trees/plans/commands/info/FuncNameInfo.java    | 70 +++++++++++++++++-----
 .../src/main/java/org/apache/doris/plsql/Exec.java |  2 +-
 .../plsql/functions/DorisFunctionRegistry.java     | 32 +++++-----
 .../doris/plsql/functions/FunctionRegistry.java    |  2 +
 .../plsql/functions/InMemoryFunctionRegistry.java  |  5 ++
 .../apache/doris/plsql/metastore/PlsqlManager.java | 16 ++---
 .../doris/plsql/metastore/PlsqlMetaClient.java     | 59 +++++++++---------
 .../apache/doris/plsql/metastore/PlsqlPackage.java | 12 ++--
 .../doris/plsql/metastore/PlsqlProcedureKey.java   | 28 ++++-----
 .../plsql/metastore/PlsqlStoredProcedure.java      | 19 +++---
 .../doris/plsql/packages/DorisPackageRegistry.java | 12 ++--
 gensrc/thrift/FrontendService.thrift               | 17 +++---
 14 files changed, 167 insertions(+), 115 deletions(-)

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 99b8dde6c58..eee7c787c6e 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
@@ -3335,7 +3335,7 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
         List<Expression> arguments = ctx.expression().stream()
                 .<Expression>map(this::typedVisit)
                 .collect(ImmutableList.toImmutableList());
-        UnboundFunction unboundFunction = new UnboundFunction(procedureName.getDb(), procedureName.getName(),
+        UnboundFunction unboundFunction = new UnboundFunction(procedureName.getDbName(), procedureName.getName(),
                 true, arguments);
         return new CallCommand(unboundFunction, getOriginSql(ctx));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateProcedureCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateProcedureCommand.java
index 1a11512d96e..39a93831848 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateProcedureCommand.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateProcedureCommand.java
@@ -54,11 +54,7 @@ public class CreateProcedureCommand extends Command implements ForwardWithSync {
 
     @Override
     public void run(ConnectContext ctx, StmtExecutor executor) throws Exception {
-        // TODO, removeCached needs to be synchronized to all Observer FEs.
-        // Even if it is always executed on the Master FE, it still has to deal with Master switching.
-        ctx.getPlSqlOperation().getExec().functions.removeCached(procedureName.toString());
-        client.addPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(), procedureName.getDb(),
-                ctx.getQualifiedUser(), source, isForce);
+        ctx.getPlSqlOperation().getExec().functions.save(procedureName, source, isForce);
     }
 
     @Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/FuncNameInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/FuncNameInfo.java
index 7268a5804be..eb07f973918 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/FuncNameInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/FuncNameInfo.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.nereids.trees.plans.commands.info;
 
+import org.apache.doris.catalog.DatabaseIf;
+import org.apache.doris.common.FeConstants;
 import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.util.Utils;
@@ -28,15 +30,19 @@ import com.google.common.collect.Lists;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * procedure, function, package name info
  */
 public class FuncNameInfo {
     private final List<String> nameParts;
-    private String ctl;
-    private String db;
+    private String ctl = "";
+    private long ctlId = -1;
+    private String db = "";
+    private long dbId = -1;
     private final String name;
+    private boolean isAnalyzed = false;
 
     /**
      * FuncNameInfo
@@ -91,22 +97,32 @@ public class FuncNameInfo {
      * @param ctx ctx
      */
     public void analyze(ConnectContext ctx) {
-        if (Strings.isNullOrEmpty(ctl)) {
-            ctl = ctx.getDefaultCatalog();
+        if (isAnalyzed) {
+            return;
+        }
+        try {
             if (Strings.isNullOrEmpty(ctl)) {
-                ctl = InternalCatalog.INTERNAL_CATALOG_NAME;
+                ctl = ctx.getDefaultCatalog();
+                if (Strings.isNullOrEmpty(ctl)) {
+                    ctl = InternalCatalog.INTERNAL_CATALOG_NAME;
+                }
             }
-        }
-        if (Strings.isNullOrEmpty(db)) {
-            db = ctx.getDatabase();
+            ctlId = ctx.getCatalog(ctl).getId();
             if (Strings.isNullOrEmpty(db)) {
-                throw new AnalysisException("procedure/function/package name no database selected");
+                db = ctx.getDatabase();
+                if (Strings.isNullOrEmpty(db)) {
+                    db = FeConstants.INTERNAL_DB_NAME;
+                }
             }
+            Optional<DatabaseIf> dbInstance = ctx.getCatalog(ctl).getDb(db);
+            dbId = dbInstance.map(DatabaseIf::getId).orElse(-1L);
+            if (Strings.isNullOrEmpty(name)) {
+                throw new AnalysisException("procedure/function/package name is null");
+            }
+        } catch (Exception e) {
+            throw new AnalysisException("failed to analyze procedure name", e);
         }
-
-        if (Strings.isNullOrEmpty(name)) {
-            throw new AnalysisException("procedure/function/package name is null");
-        }
+        isAnalyzed = true;
     }
 
     /**
@@ -115,29 +131,51 @@ public class FuncNameInfo {
      * @return ctlName
      */
     public String getCtl() {
+        analyze(ConnectContext.get());
         return ctl == null ? "" : ctl;
     }
 
+    /**
+     * get catalog id
+     *
+     * @return ctlId
+     */
+    public long getCtlId() {
+        analyze(ConnectContext.get());
+        return ctlId;
+    }
+
     /**
      * get db name
      *
      * @return dbName
      */
-    public String getDb() {
+    public String getDbName() {
+        analyze(ConnectContext.get());
         return db == null ? "" : db;
     }
 
+    /**
+     * get db id
+     *
+     * @return dbId
+     */
+    public long getDbId() {
+        analyze(ConnectContext.get());
+        return dbId;
+    }
+
     /**
      * get table name
      *
      * @return tableName
      */
     public String getName() {
+        analyze(ConnectContext.get());
         return name == null ? "" : name;
     }
 
     public String toString() {
-        return nameParts.stream().map(Utils::quoteIfNeeded)
-                .reduce((left, right) -> left + "." + right).orElse("");
+        return nameParts.stream().map(Utils::quoteIfNeeded).reduce((left, right) -> left + "." + right).orElse("");
     }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/Exec.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/Exec.java
index 98ebebfd4ea..34e84ab4097 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/Exec.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/Exec.java
@@ -1625,7 +1625,7 @@ public class Exec extends org.apache.doris.nereids.PLParserBaseVisitor<Integer>
         FuncNameInfo procedureName = new FuncNameInfo(nameParts);
         Package packCallContext = exec.getPackageCallContext();
         boolean executed = false;
-        Package pack = findPackage(procedureName.getDb());
+        Package pack = findPackage(procedureName.getDbName());
         if (pack != null) {
             executed = pack.execFunc(procedureName.getName(), params);
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/DorisFunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/DorisFunctionRegistry.java
index d28ebaaa644..8316962a209 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/DorisFunctionRegistry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/DorisFunctionRegistry.java
@@ -66,10 +66,9 @@ public class DorisFunctionRegistry implements FunctionRegistry {
     @Override
     public void remove(FuncNameInfo procedureName) {
         try {
-            client.dropPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(),
-                    procedureName.getDb());
+            client.dropPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtlId(), procedureName.getDbId());
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            throw new RuntimeException("failed to remove procedure", e);
         }
     }
 
@@ -124,8 +123,8 @@ public class DorisFunctionRegistry implements FunctionRegistry {
         }
     }
 
-    private void callWithParameters(Expr_func_paramsContext ctx, ParserRuleContext procCtx,
-            HashMap<String, Var> out, ArrayList<Var> actualParams) {
+    private void callWithParameters(Expr_func_paramsContext ctx, ParserRuleContext procCtx, HashMap<String, Var> out,
+            ArrayList<Var> actualParams) {
         if (procCtx instanceof Create_function_stmtContext) {
             Create_function_stmtContext func = (Create_function_stmtContext) procCtx;
             InMemoryFunctionRegistry.setCallParameters(func.multipartIdentifier().getText(), ctx, actualParams,
@@ -152,9 +151,8 @@ public class DorisFunctionRegistry implements FunctionRegistry {
     }
 
     private Optional<PlsqlStoredProcedure> getProc(FuncNameInfo procedureName) {
-        return Optional.ofNullable(
-                client.getPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(),
-                        procedureName.getDb()));
+        return Optional.ofNullable(client.getPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtlId(),
+                procedureName.getDbId()));
     }
 
     private ArrayList<Var> getActualCallParameters(Expr_func_paramsContext actual) {
@@ -179,7 +177,7 @@ public class DorisFunctionRegistry implements FunctionRegistry {
         }
         trace(ctx, "CREATE FUNCTION " + procedureName.toString());
         saveInCache(procedureName.toString(), ctx);
-        saveStoredProc(procedureName, Exec.getFormattedText(ctx), ctx.REPLACE() != null);
+        save(procedureName, Exec.getFormattedText(ctx), ctx.REPLACE() != null);
     }
 
     @Override
@@ -192,13 +190,19 @@ public class DorisFunctionRegistry implements FunctionRegistry {
         }
         trace(ctx, "CREATE PROCEDURE " + procedureName.toString());
         saveInCache(procedureName.toString(), ctx);
-        saveStoredProc(procedureName, Exec.getFormattedText(ctx), ctx.REPLACE() != null);
+        save(procedureName, Exec.getFormattedText(ctx), ctx.REPLACE() != null);
     }
 
-    private void saveStoredProc(FuncNameInfo procedureName, String source, boolean isForce) {
-        client.addPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(),
-                procedureName.getDb(),
-                ConnectContext.get().getQualifiedUser(), source, isForce);
+    @Override
+    public void save(FuncNameInfo procedureName, String source, boolean isForce) {
+        try {
+            // TODO support packageName
+            client.addPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtlId(), procedureName.getDbId(),
+                    "",
+                    ConnectContext.get().getQualifiedUser(), source, isForce);
+        } catch (Exception e) {
+            throw new RuntimeException("failed to save procedure", e);
+        }
     }
 
     private void saveInCache(String name, ParserRuleContext procCtx) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/FunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/FunctionRegistry.java
index e45a5eff3e4..e9d07c31682 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/FunctionRegistry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/FunctionRegistry.java
@@ -32,6 +32,8 @@ public interface FunctionRegistry {
 
     void addUserProcedure(Create_procedure_stmtContext ctx);
 
+    void save(FuncNameInfo procedureName, String source, boolean isForce);
+
     boolean exists(FuncNameInfo procedureName);
 
     void remove(FuncNameInfo procedureName);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/InMemoryFunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/InMemoryFunctionRegistry.java
index ab39f617271..59143a57194 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/InMemoryFunctionRegistry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/functions/InMemoryFunctionRegistry.java
@@ -55,6 +55,11 @@ public class InMemoryFunctionRegistry implements FunctionRegistry {
         this.builtinFunctions = builtinFunctions;
     }
 
+    @Override
+    public void save(FuncNameInfo procedureName, String source, boolean isForce) {
+        throw new RuntimeException("InMemoryFunctionRegistry no support save");
+    }
+
     @Override
     public boolean exists(FuncNameInfo procedureName) {
         return funcMap.containsKey(procedureName.toString()) || procMap.containsKey(procedureName.toString());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlManager.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlManager.java
index b1ee73e544d..0057c9b7275 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlManager.java
@@ -49,8 +49,8 @@ public class PlsqlManager implements Writable {
     }
 
     public void addPlsqlStoredProcedure(PlsqlStoredProcedure procedure, boolean isForce) {
-        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(procedure.getName(), procedure.getCatalogName(),
-                procedure.getDbName());
+        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(procedure.getName(), procedure.getCatalogId(),
+                procedure.getDbId());
         if (isForce) {
             nameToStoredProcedures.put(plsqlProcedureKey, procedure);
         } else if (nameToStoredProcedures.putIfAbsent(plsqlProcedureKey, procedure) != null) {
@@ -61,8 +61,8 @@ public class PlsqlManager implements Writable {
     }
 
     public void replayAddPlsqlStoredProcedure(PlsqlStoredProcedure procedure) {
-        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(procedure.getName(), procedure.getCatalogName(),
-                procedure.getDbName());
+        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(procedure.getName(), procedure.getCatalogId(),
+                procedure.getDbId());
         nameToStoredProcedures.put(plsqlProcedureKey, procedure);
         LOG.info("Replay add stored procedure success: {}", plsqlProcedureKey);
     }
@@ -83,8 +83,8 @@ public class PlsqlManager implements Writable {
     }
 
     public void addPackage(PlsqlPackage pkg, boolean isForce) {
-        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(pkg.getName(), pkg.getCatalogName(),
-                pkg.getDbName());
+        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(pkg.getName(), pkg.getCatalogId(),
+                pkg.getDbId());
         nameToPackages.put(plsqlProcedureKey, pkg);
         if (isForce) {
             nameToPackages.put(plsqlProcedureKey, pkg);
@@ -96,8 +96,8 @@ public class PlsqlManager implements Writable {
     }
 
     public void replayAddPlsqlPackage(PlsqlPackage pkg) {
-        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(pkg.getName(), pkg.getCatalogName(),
-                pkg.getDbName());
+        PlsqlProcedureKey plsqlProcedureKey = new PlsqlProcedureKey(pkg.getName(), pkg.getCatalogId(),
+                pkg.getDbId());
         nameToPackages.put(plsqlProcedureKey, pkg);
         LOG.info("Replay add plsql package success: {}", plsqlProcedureKey);
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlMetaClient.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlMetaClient.java
index 86d4474ca76..15974511b78 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlMetaClient.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlMetaClient.java
@@ -41,63 +41,66 @@ public class PlsqlMetaClient {
     public PlsqlMetaClient() {
     }
 
-    public void addPlsqlStoredProcedure(String name, String catalogName, String dbName, String ownerName, String source,
+    public void addPlsqlStoredProcedure(String name, long catalogId, long dbId, String packageName,
+            String ownerName, String source,
             boolean isForce) {
         checkPriv();
         if (Env.getCurrentEnv().isMaster()) {
             Env.getCurrentEnv().getPlsqlManager()
-                    .addPlsqlStoredProcedure(new PlsqlStoredProcedure(name, catalogName, dbName, ownerName, source),
+                    .addPlsqlStoredProcedure(
+                            new PlsqlStoredProcedure(name, catalogId, dbId, packageName, ownerName, source),
                             isForce);
         } else {
-            addPlsqlStoredProcedureThrift(name, catalogName, dbName, ownerName, source, isForce);
+            addPlsqlStoredProcedureThrift(name, catalogId, dbId, packageName, ownerName, source, isForce);
         }
     }
 
-    public void dropPlsqlStoredProcedure(String name, String catalogName, String dbName) {
+    public void dropPlsqlStoredProcedure(String name, long catalogId, long dbId) {
         checkPriv();
         if (Env.getCurrentEnv().isMaster()) {
             Env.getCurrentEnv().getPlsqlManager()
-                    .dropPlsqlStoredProcedure(new PlsqlProcedureKey(name, catalogName, dbName));
+                    .dropPlsqlStoredProcedure(new PlsqlProcedureKey(name, catalogId, dbId));
         } else {
-            dropStoredProcedureThrift(name, catalogName, dbName);
+            dropStoredProcedureThrift(name, catalogId, dbId);
         }
     }
 
-    public PlsqlStoredProcedure getPlsqlStoredProcedure(String name, String catalogName, String dbName) {
+    public PlsqlStoredProcedure getPlsqlStoredProcedure(String name, long catalogId, long dbId) {
         return Env.getCurrentEnv().getPlsqlManager()
-                .getPlsqlStoredProcedure(new PlsqlProcedureKey(name, catalogName, dbName));
+                .getPlsqlStoredProcedure(new PlsqlProcedureKey(name, catalogId, dbId));
     }
 
-    public void addPlsqlPackage(String name, String catalogName, String dbName, String ownerName, String header,
+    public void addPlsqlPackage(String name, long catalogId, long dbId, String ownerName, String header,
             String body) {
         checkPriv();
         if (Env.getCurrentEnv().isMaster()) {
             Env.getCurrentEnv().getPlsqlManager()
-                    .addPackage(new PlsqlPackage(name, catalogName, dbName, ownerName, header, body),
+                    .addPackage(new PlsqlPackage(name, catalogId, dbId, ownerName, header, body),
                             false);
         } else {
-            addPlsqlPackageThrift(name, catalogName, dbName, ownerName, header, body);
+            addPlsqlPackageThrift(name, catalogId, dbId, ownerName, header, body);
         }
     }
 
-    public void dropPlsqlPackage(String name, String catalogName, String dbName) {
+    public void dropPlsqlPackage(String name, long catalogId, long dbId) {
         checkPriv();
         if (Env.getCurrentEnv().isMaster()) {
-            Env.getCurrentEnv().getPlsqlManager().dropPackage(new PlsqlProcedureKey(name, catalogName, dbName));
+            Env.getCurrentEnv().getPlsqlManager().dropPackage(new PlsqlProcedureKey(name, catalogId, dbId));
         } else {
-            dropPlsqlPackageThrift(name, catalogName, dbName);
+            dropPlsqlPackageThrift(name, catalogId, dbId);
         }
     }
 
-    public PlsqlPackage getPlsqlPackage(String name, String catalogName, String dbName) {
-        return Env.getCurrentEnv().getPlsqlManager().getPackage(new PlsqlProcedureKey(name, catalogName, dbName));
+    public PlsqlPackage getPlsqlPackage(String name, long catalogId, long dbId) {
+        return Env.getCurrentEnv().getPlsqlManager().getPackage(new PlsqlProcedureKey(name, catalogId, dbId));
     }
 
-    protected void addPlsqlStoredProcedureThrift(String name, String catalogName, String dbName, String ownerName,
+    protected void addPlsqlStoredProcedureThrift(String name, long catalogId, long dbId, String packageName,
+            String ownerName,
             String source, boolean isForce) {
         TPlsqlStoredProcedure tPlsqlStoredProcedure = new TPlsqlStoredProcedure().setName(name)
-                .setCatalogName(catalogName)
-                .setDbName(dbName).setOwnerName(ownerName).setSource(source);
+                .setCatalogId(catalogId).setDbId(dbId)
+                .setPackageName(packageName).setOwnerName(ownerName).setSource(source);
         TAddPlsqlStoredProcedureRequest tAddPlsqlStoredProcedureRequest = new TAddPlsqlStoredProcedureRequest()
                 .setPlsqlStoredProcedure(tPlsqlStoredProcedure);
         tAddPlsqlStoredProcedureRequest.setIsForce(isForce);
@@ -110,9 +113,9 @@ public class PlsqlMetaClient {
         }
     }
 
-    protected void dropStoredProcedureThrift(String name, String catalogName, String dbName) {
-        TPlsqlProcedureKey tPlsqlProcedureKey = new TPlsqlProcedureKey().setName(name).setCatalogName(catalogName)
-                .setDbName(dbName);
+    protected void dropStoredProcedureThrift(String name, long catalogId, long dbId) {
+        TPlsqlProcedureKey tPlsqlProcedureKey = new TPlsqlProcedureKey().setName(name).setCatalogId(catalogId)
+                .setDbId(dbId);
         TDropPlsqlStoredProcedureRequest tDropPlsqlStoredProcedureRequest
                 = new TDropPlsqlStoredProcedureRequest().setPlsqlProcedureKey(
                 tPlsqlProcedureKey);
@@ -125,10 +128,10 @@ public class PlsqlMetaClient {
         }
     }
 
-    protected void addPlsqlPackageThrift(String name, String catalogName, String dbName, String ownerName,
+    protected void addPlsqlPackageThrift(String name, long catalogId, long dbId, String ownerName,
             String header, String body) {
-        TPlsqlPackage tPlsqlPackage = new TPlsqlPackage().setName(name).setCatalogName(catalogName)
-                .setDbName(dbName).setOwnerName(ownerName).setHeader(header).setBody(body);
+        TPlsqlPackage tPlsqlPackage = new TPlsqlPackage().setName(name).setCatalogId(catalogId)
+                .setDbId(dbId).setOwnerName(ownerName).setHeader(header).setBody(body);
         TAddPlsqlPackageRequest tAddPlsqlPackageRequest = new TAddPlsqlPackageRequest()
                 .setPlsqlPackage(tPlsqlPackage);
 
@@ -140,9 +143,9 @@ public class PlsqlMetaClient {
         }
     }
 
-    protected void dropPlsqlPackageThrift(String name, String catalogName, String dbName) {
-        TPlsqlProcedureKey tPlsqlProcedureKey = new TPlsqlProcedureKey().setName(name).setCatalogName(catalogName)
-                .setDbName(dbName);
+    protected void dropPlsqlPackageThrift(String name, long catalogId, long dbId) {
+        TPlsqlProcedureKey tPlsqlProcedureKey = new TPlsqlProcedureKey().setName(name).setCatalogId(catalogId)
+                .setDbId(dbId);
         TDropPlsqlPackageRequest tDropPlsqlPackageRequest = new TDropPlsqlPackageRequest().setPlsqlProcedureKey(
                 tPlsqlProcedureKey);
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlPackage.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlPackage.java
index 41114890c58..2af6445fd1b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlPackage.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlPackage.java
@@ -36,11 +36,11 @@ public class PlsqlPackage implements Writable {
     @SerializedName(value = "name")
     private String name;
 
-    @SerializedName(value = "catalogName")
-    private String catalogName;
+    @SerializedName(value = "catalogId")
+    private long catalogId;
 
-    @SerializedName(value = "dbName")
-    private String dbName;
+    @SerializedName(value = "dbId")
+    private long dbId;
 
     @SerializedName(value = "ownerName")
     private String ownerName;
@@ -57,12 +57,12 @@ public class PlsqlPackage implements Writable {
     }
 
     public TPlsqlPackage toThrift() {
-        return new TPlsqlPackage().setName(name).setCatalogName(catalogName).setDbName(dbName).setOwnerName(ownerName)
+        return new TPlsqlPackage().setName(name).setCatalogId(catalogId).setDbId(dbId).setOwnerName(ownerName)
                 .setHeader(header).setBody(body);
     }
 
     public static PlsqlPackage fromThrift(TPlsqlPackage pkg) {
-        return new PlsqlPackage(pkg.getName(), pkg.getCatalogName(), pkg.getDbName(), pkg.getOwnerName(),
+        return new PlsqlPackage(pkg.getName(), pkg.getCatalogId(), pkg.getDbId(), pkg.getOwnerName(),
                 pkg.getHeader(), pkg.getBody());
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlProcedureKey.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlProcedureKey.java
index c2472c07382..fbcf77ecead 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlProcedureKey.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlProcedureKey.java
@@ -37,29 +37,29 @@ public class PlsqlProcedureKey implements Writable {
     @SerializedName(value = "name")
     private String name;
 
-    @SerializedName(value = "catalogName")
-    private String catalogName;
+    @SerializedName(value = "catalogId")
+    private long catalogId;
 
-    @SerializedName(value = "dbName")
-    private String dbName;
+    @SerializedName(value = "dbId")
+    private long dbId;
 
-    public PlsqlProcedureKey(String name, String catalogName, String dbName) {
+    public PlsqlProcedureKey(String name, long catalogId, long dbId) {
         this.name = name;
-        this.catalogName = catalogName;
-        this.dbName = dbName;
+        this.catalogId = catalogId;
+        this.dbId = dbId;
     }
 
     public TPlsqlProcedureKey toThrift() {
-        return new TPlsqlProcedureKey().setName(name).setCatalogName(catalogName).setDbName(dbName);
+        return new TPlsqlProcedureKey().setName(name).setCatalogId(catalogId).setDbId(dbId);
     }
 
     public static PlsqlProcedureKey fromThrift(TPlsqlProcedureKey key) {
-        return new PlsqlProcedureKey(key.getName(), key.getCatalogName(), key.getDbName());
+        return new PlsqlProcedureKey(key.getName(), key.getCatalogId(), key.getDbId());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(name, catalogName, dbName);
+        return Objects.hash(name, catalogId, dbId);
     }
 
     @Override
@@ -67,14 +67,14 @@ public class PlsqlProcedureKey implements Writable {
         if (!(obj instanceof PlsqlProcedureKey)) {
             return false;
         }
-        return Objects.equals(this.name, ((PlsqlProcedureKey) obj).name) && Objects.equals(this.catalogName,
-                ((PlsqlProcedureKey) obj).catalogName)
-                && Objects.equals(this.dbName, ((PlsqlProcedureKey) obj).dbName);
+        return Objects.equals(this.name, ((PlsqlProcedureKey) obj).name) && Objects.equals(this.catalogId,
+                ((PlsqlProcedureKey) obj).catalogId)
+                && Objects.equals(this.dbId, ((PlsqlProcedureKey) obj).dbId);
     }
 
     @Override
     public String toString() {
-        return "name:" + name + ", catalogName:" + catalogName + ", dbName:" + dbName;
+        return "name:" + name + ", catalogName:" + catalogId + ", dbId:" + dbId;
     }
 
     @Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlStoredProcedure.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlStoredProcedure.java
index b181b19473d..9325684cc47 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlStoredProcedure.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/metastore/PlsqlStoredProcedure.java
@@ -36,11 +36,14 @@ public class PlsqlStoredProcedure implements Writable {
     @SerializedName(value = "name")
     private String name;
 
-    @SerializedName(value = "catalogName")
-    private String catalogName;
+    @SerializedName(value = "catalogId")
+    private long catalogId;
 
-    @SerializedName(value = "dbName")
-    private String dbName;
+    @SerializedName(value = "dbId")
+    private long dbId;
+
+    @SerializedName(value = "packageName")
+    private String packageName;
 
     @SerializedName(value = "ownerName")
     private String ownerName;
@@ -49,13 +52,13 @@ public class PlsqlStoredProcedure implements Writable {
     private String source;
 
     public TPlsqlStoredProcedure toThrift() {
-        return new TPlsqlStoredProcedure().setName(name).setCatalogName(catalogName).setDbName(dbName)
-                .setOwnerName(ownerName).setSource(source);
+        return new TPlsqlStoredProcedure().setName(name).setCatalogId(catalogId).setDbId(dbId)
+                .setPackageName(packageName).setOwnerName(ownerName).setSource(source);
     }
 
     public static PlsqlStoredProcedure fromThrift(TPlsqlStoredProcedure procedure) {
-        return new PlsqlStoredProcedure(procedure.getName(), procedure.getCatalogName(), procedure.getDbName(),
-                procedure.getOwnerName(), procedure.source);
+        return new PlsqlStoredProcedure(procedure.getName(), procedure.getCatalogId(), procedure.getDbId(),
+                procedure.getPackageName(), procedure.getOwnerName(), procedure.source);
     }
 
     @Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/packages/DorisPackageRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/packages/DorisPackageRegistry.java
index ae0222cc405..3852c71d760 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/plsql/packages/DorisPackageRegistry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/packages/DorisPackageRegistry.java
@@ -78,18 +78,18 @@ public class DorisPackageRegistry implements PackageRegistry {
     }
 
     private PlsqlPackage findPackage(String name) throws TException {
-        return client.getPlsqlPackage(name.toUpperCase(), ConnectContext.get().getCurrentCatalog().getName(),
-                ConnectContext.get().getDatabase());
+        return client.getPlsqlPackage(name.toUpperCase(), ConnectContext.get().getCurrentCatalog().getId(),
+                ConnectContext.get().getCurrentDbId());
     }
 
     @Override
     public void dropPackage(String name) {
-        client.dropPlsqlPackage(name, ConnectContext.get().getCurrentCatalog().getName(),
-                ConnectContext.get().getDatabase());
+        client.dropPlsqlPackage(name, ConnectContext.get().getCurrentCatalog().getId(),
+                ConnectContext.get().getCurrentDbId());
     }
 
     private void savePackage(String name, String header, String body) {
-        client.addPlsqlPackage(name.toUpperCase(), ConnectContext.get().getCurrentCatalog().getName(),
-                ConnectContext.get().getDatabase(), ConnectContext.get().getQualifiedUser(), header, body);
+        client.addPlsqlPackage(name.toUpperCase(), ConnectContext.get().getCurrentCatalog().getId(),
+                ConnectContext.get().getCurrentDbId(), ConnectContext.get().getQualifiedUser(), header, body);
     }
 }
diff --git a/gensrc/thrift/FrontendService.thrift b/gensrc/thrift/FrontendService.thrift
index 1e433d42f5d..a7bf0893c46 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -1142,16 +1142,17 @@ struct TRestoreSnapshotResult {
 
 struct TPlsqlStoredProcedure {
     1: optional string name
-    2: optional string catalogName
-    3: optional string dbName
-    4: optional string ownerName
-    5: optional string source
+    2: optional i64 catalogId
+    3: optional i64 dbId
+    4: optional string packageName
+    5: optional string ownerName
+    6: optional string source
 }
 
 struct TPlsqlPackage {
     1: optional string name
-    2: optional string catalogName
-    3: optional string dbName
+    2: optional i64 catalogId
+    3: optional i64 dbId
     4: optional string ownerName
     5: optional string header
     6: optional string body
@@ -1159,8 +1160,8 @@ struct TPlsqlPackage {
 
 struct TPlsqlProcedureKey {
     1: optional string name
-    2: optional string catalogName
-    3: optional string dbName
+    2: optional i64 catalogId
+    3: optional i64 dbId
 }
 
 struct TAddPlsqlStoredProcedureRequest {


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