[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
This commit is contained in:
Xinyi Zou
2024-02-27 22:23:11 +08:00
committed by yiguolei
parent 9ffcf48cce
commit c0754583cb
14 changed files with 167 additions and 115 deletions

View File

@ -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));
}

View File

@ -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

View File

@ -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("");
}
}

View File

@ -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);
}

View File

@ -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) {

View File

@ -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);

View File

@ -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());

View File

@ -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);
}

View File

@ -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);

View File

@ -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());
}

View File

@ -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

View File

@ -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

View File

@ -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);
}
}

View File

@ -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 {