From c0754583cbbca4d85fb799f5656aa07ceb80c5dd Mon Sep 17 00:00:00 2001 From: Xinyi Zou Date: Tue, 27 Feb 2024 22:23:11 +0800 Subject: [PATCH] [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 --- .../nereids/parser/LogicalPlanBuilder.java | 2 +- .../commands/CreateProcedureCommand.java | 6 +- .../plans/commands/info/FuncNameInfo.java | 70 ++++++++++++++----- .../java/org/apache/doris/plsql/Exec.java | 2 +- .../functions/DorisFunctionRegistry.java | 32 +++++---- .../plsql/functions/FunctionRegistry.java | 2 + .../functions/InMemoryFunctionRegistry.java | 5 ++ .../doris/plsql/metastore/PlsqlManager.java | 16 ++--- .../plsql/metastore/PlsqlMetaClient.java | 59 ++++++++-------- .../doris/plsql/metastore/PlsqlPackage.java | 12 ++-- .../plsql/metastore/PlsqlProcedureKey.java | 28 ++++---- .../plsql/metastore/PlsqlStoredProcedure.java | 19 ++--- .../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 99b8dde6c5..eee7c787c6 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 { List arguments = ctx.expression().stream() .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 1a11512d96..39a9383184 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 7268a5804b..eb07f97391 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 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 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 98ebebfd4e..34e84ab409 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 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 d28ebaaa64..8316962a20 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 out, ArrayList actualParams) { + private void callWithParameters(Expr_func_paramsContext ctx, ParserRuleContext procCtx, HashMap out, + ArrayList 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 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 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 e45a5eff3e..e9d07c3168 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 ab39f61727..59143a5719 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 b1ee73e544..0057c9b727 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 86d4474ca7..15974511b7 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 41114890c5..2af6445fd1 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 c2472c0738..fbcf77ecea 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 b181b19473..9325684cc4 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 ae0222cc40..3852c71d76 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 1e433d42f5..a7bf0893c4 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 {