This is an automated email from the ASF dual-hosted git repository.
yiguolei 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 19cb5a9061d [enhancement](plsql) Support show procedure and show
create procedure (#31297) (#31763)
19cb5a9061d is described below
commit 19cb5a9061d47f3c729678bee04c63a90b6a65a1
Author: Vallish Pai <[email protected]>
AuthorDate: Fri Mar 8 07:30:45 2024 +0530
[enhancement](plsql) Support show procedure and show create procedure
(#31297) (#31763)
---
.../antlr4/org/apache/doris/nereids/DorisParser.g4 | 2 +
.../antlr4/org/apache/doris/nereids/PLParser.g4 | 9 +++
.../doris/nereids/parser/LogicalPlanBuilder.java | 16 +++++
.../apache/doris/nereids/trees/plans/PlanType.java | 4 +-
.../plans/commands/ShowCreateProcedureCommand.java | 78 ++++++++++++++++++++++
.../plans/commands/ShowProcedureStatusCommand.java | 76 +++++++++++++++++++++
.../trees/plans/visitor/CommandVisitor.java | 10 +++
.../plsql/functions/DorisFunctionRegistry.java | 46 ++++++++++++-
.../doris/plsql/functions/FunctionRegistry.java | 6 ++
.../plsql/functions/InMemoryFunctionRegistry.java | 20 ++++--
.../apache/doris/plsql/metastore/PlsqlManager.java | 4 ++
.../doris/plsql/metastore/PlsqlMetaClient.java | 20 ++++--
.../plsql/metastore/PlsqlStoredProcedure.java | 12 +++-
gensrc/thrift/FrontendService.thrift | 2 +
14 files changed, 290 insertions(+), 15 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 a70df9eec92..8492b812a8d 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
@@ -38,6 +38,8 @@ statement
| CALL name=multipartIdentifier LEFT_PAREN (expression (COMMA
expression)*)? RIGHT_PAREN #callProcedure
| (ALTER | CREATE (OR REPLACE)? | REPLACE) (PROCEDURE | PROC)
name=multipartIdentifier LEFT_PAREN .*? RIGHT_PAREN .*? #createProcedure
| DROP (PROCEDURE | PROC) (IF EXISTS)? name=multipartIdentifier
#dropProcedure
+ | SHOW PROCEDURE STATUS (LIKE pattern=valueExpression | whereClause)?
#showProcedureStatus
+ | SHOW CREATE PROCEDURE name=multipartIdentifier #showCreateProcedure
;
statementBase
diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/PLParser.g4
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/PLParser.g4
index b132f6537da..b052818c29e 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/PLParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/PLParser.g4
@@ -99,6 +99,8 @@ stmt :
| create_procedure_stmt
| declare_stmt
| drop_procedure_stmt
+ | show_procedure_stmt
+ | show_create_procedure_stmt
| exec_stmt
| exit_stmt
| fetch_stmt
@@ -333,6 +335,13 @@ create_procedure_stmt :
drop_procedure_stmt:
DROP (PROCEDURE | PROC) (IF EXISTS)? name=multipartIdentifier
;
+show_procedure_stmt:
+ SHOW PROCEDURE STATUS (LIKE pattern=valueExpression | whereClause)?
+ ;
+
+show_create_procedure_stmt:
+ SHOW CREATE PROCEDURE name=multipartIdentifier
+ ;
create_routine_params :
LEFT_PAREN RIGHT_PAREN
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 d1967d6d54d..31549714c69 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
@@ -161,6 +161,8 @@ import
org.apache.doris.nereids.DorisParser.SelectColumnClauseContext;
import org.apache.doris.nereids.DorisParser.SelectHintContext;
import org.apache.doris.nereids.DorisParser.SetOperationContext;
import org.apache.doris.nereids.DorisParser.ShowConstraintContext;
+import org.apache.doris.nereids.DorisParser.ShowCreateProcedureContext;
+import org.apache.doris.nereids.DorisParser.ShowProcedureStatusContext;
import org.apache.doris.nereids.DorisParser.SimpleColumnDefContext;
import org.apache.doris.nereids.DorisParser.SimpleColumnDefsContext;
import org.apache.doris.nereids.DorisParser.SingleStatementContext;
@@ -367,6 +369,8 @@ import
org.apache.doris.nereids.trees.plans.commands.PauseMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.RefreshMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ResumeMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConstraintsCommand;
+import
org.apache.doris.nereids.trees.plans.commands.ShowCreateProcedureCommand;
+import
org.apache.doris.nereids.trees.plans.commands.ShowProcedureStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.UpdateCommand;
import org.apache.doris.nereids.trees.plans.commands.info.AlterMTMVInfo;
import
org.apache.doris.nereids.trees.plans.commands.info.AlterMTMVPropertyInfo;
@@ -3376,4 +3380,16 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
FuncNameInfo procedureName = new FuncNameInfo(nameParts);
return ParserUtils.withOrigin(ctx, () -> new
DropProcedureCommand(procedureName, getOriginSql(ctx)));
}
+
+ @Override
+ public LogicalPlan visitShowProcedureStatus(ShowProcedureStatusContext
ctx) {
+ return ParserUtils.withOrigin(ctx, () -> new
ShowProcedureStatusCommand());
+ }
+
+ @Override
+ public LogicalPlan visitShowCreateProcedure(ShowCreateProcedureContext
ctx) {
+ List<String> nameParts = visitMultipartIdentifier(ctx.name);
+ FuncNameInfo procedureName = new FuncNameInfo(nameParts);
+ return ParserUtils.withOrigin(ctx, () -> new
ShowCreateProcedureCommand(procedureName));
+ }
}
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 d842ac31dd4..11a6a7b5683 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
@@ -144,5 +144,7 @@ public enum PlanType {
CANCEL_MTMV_TASK_COMMAND,
CALL_COMMAND,
CREATE_PROCEDURE_COMMAND,
- DROP_PROCEDURE_COMMAND
+ DROP_PROCEDURE_COMMAND,
+ SHOW_PROCEDURE_COMMAND,
+ SHOW_CREATE_PROCEDURE_COMMAND
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowCreateProcedureCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowCreateProcedureCommand.java
new file mode 100644
index 00000000000..85c97a2ba15
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowCreateProcedureCommand.java
@@ -0,0 +1,78 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.commands;
+
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo;
+import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.ShowResultSet;
+import org.apache.doris.qe.ShowResultSetMetaData;
+import org.apache.doris.qe.StmtExecutor;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * show create procedure command
+ */
+public class ShowCreateProcedureCommand extends Command implements NoForward {
+
+ public static final Logger LOG =
LogManager.getLogger(ShowCreateProcedureCommand.class);
+ public static final ImmutableList<String> TITLE_NAMES = new
ImmutableList.Builder<String>().add("Procedure")
+ .add("Create
Procedure").build();
+ private final FuncNameInfo procedureName;
+ /**
+ * constructor
+ */
+
+ public ShowCreateProcedureCommand(FuncNameInfo procedureName) {
+ super(PlanType.SHOW_PROCEDURE_COMMAND);
+ this.procedureName = procedureName;
+
+ }
+
+ public ShowResultSetMetaData getMetaData() {
+ ShowResultSetMetaData.Builder builder =
ShowResultSetMetaData.builder();
+ for (String title : TITLE_NAMES) {
+ builder.addColumn(new Column(title,
ScalarType.createStringType()));
+ }
+ return builder.build();
+ }
+
+ @Override
+ public void run(ConnectContext ctx, StmtExecutor executor) throws
Exception {
+ List<List<String>> results = new ArrayList<>();
+
ctx.getPlSqlOperation().getExec().functions.showCreateProcedure(this.procedureName,
results);
+ if (!results.isEmpty()) {
+ ShowResultSet commonResultSet = new ShowResultSet(getMetaData(),
results);
+ executor.sendResultSet(commonResultSet);
+ }
+ }
+
+ @Override
+ public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+ return visitor.visitShowCreateProcedureCommand(this, context);
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcedureStatusCommand.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcedureStatusCommand.java
new file mode 100644
index 00000000000..4ba6688d4f4
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowProcedureStatusCommand.java
@@ -0,0 +1,76 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.commands;
+
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.ShowResultSet;
+import org.apache.doris.qe.ShowResultSetMetaData;
+import org.apache.doris.qe.StmtExecutor;
+
+import com.google.common.collect.ImmutableList;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * show procedure status command
+ */
+public class ShowProcedureStatusCommand extends Command implements NoForward {
+
+ public static final Logger LOG =
LogManager.getLogger(ShowProcedureStatusCommand.class);
+ public static final ImmutableList<String> TITLE_NAMES = new
ImmutableList.Builder<String>().add("ProcedureName")
+
.add("CatalogId").add("DbId").add("PackageName")
+
.add("OwnerName").add("CreateTime").add("ModifyTime")
+ .build();
+
+ /**
+ * constructor
+ */
+ public ShowProcedureStatusCommand() {
+ super(PlanType.SHOW_PROCEDURE_COMMAND);
+ }
+
+ public ShowResultSetMetaData getMetaData() {
+ ShowResultSetMetaData.Builder builder =
ShowResultSetMetaData.builder();
+ for (String title : TITLE_NAMES) {
+ builder.addColumn(new Column(title,
ScalarType.createStringType()));
+ }
+ return builder.build();
+ }
+
+ @Override
+ public void run(ConnectContext ctx, StmtExecutor executor) throws
Exception {
+ List<List<String>> results = new ArrayList<>();
+ ctx.getPlSqlOperation().getExec().functions.showProcedure(results);
+ if (!results.isEmpty()) {
+ ShowResultSet commonResultSet = new ShowResultSet(getMetaData(),
results);
+ executor.sendResultSet(commonResultSet);
+ }
+ }
+
+ @Override
+ public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+ return visitor.visitShowProcedureStatusCommand(this, context);
+ }
+}
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 d7aae8a5ff4..6bcc41e39e4 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
@@ -38,6 +38,8 @@ import
org.apache.doris.nereids.trees.plans.commands.PauseMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.RefreshMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ResumeMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.ShowConstraintsCommand;
+import
org.apache.doris.nereids.trees.plans.commands.ShowCreateProcedureCommand;
+import
org.apache.doris.nereids.trees.plans.commands.ShowProcedureStatusCommand;
import org.apache.doris.nereids.trees.plans.commands.UpdateCommand;
import
org.apache.doris.nereids.trees.plans.commands.insert.BatchInsertIntoTableCommand;
import
org.apache.doris.nereids.trees.plans.commands.insert.InsertIntoTableCommand;
@@ -146,4 +148,12 @@ public interface CommandVisitor<R, C> {
default R visitDropProcedureCommand(DropProcedureCommand
dropProcedureCommand, C context) {
return visitCommand(dropProcedureCommand, context);
}
+
+ default R visitShowProcedureStatusCommand(ShowProcedureStatusCommand
showProcedureStatusCommand, C context) {
+ return visitCommand(showProcedureStatusCommand, context);
+ }
+
+ default R visitShowCreateProcedureCommand(ShowCreateProcedureCommand
showCreateProcedureCommand, C context) {
+ return visitCommand(showCreateProcedureCommand, context);
+ }
}
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 8316962a209..82283fc9ad5 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
@@ -32,6 +32,7 @@ import org.apache.doris.plsql.Exec;
import org.apache.doris.plsql.Scope;
import org.apache.doris.plsql.Var;
import org.apache.doris.plsql.metastore.PlsqlMetaClient;
+import org.apache.doris.plsql.metastore.PlsqlProcedureKey;
import org.apache.doris.plsql.metastore.PlsqlStoredProcedure;
import org.apache.doris.qe.ConnectContext;
@@ -39,8 +40,11 @@ import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.ParserRuleContext;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -85,6 +89,35 @@ public class DorisFunctionRegistry implements
FunctionRegistry {
return (ConnectContext.get().getDatabase() + "." + name).toUpperCase();
}
+ @Override
+ public void showProcedure(List<List<String>> columns) {
+ Map<PlsqlProcedureKey, PlsqlStoredProcedure> allProc =
client.getAllPlsqlStoredProcedures();
+ for (Map.Entry<PlsqlProcedureKey, PlsqlStoredProcedure> entry :
allProc.entrySet()) {
+ List<String> row = new ArrayList<>();
+ PlsqlStoredProcedure proc = entry.getValue();
+ row.add(proc.getName());
+ row.add(Long.toString(proc.getCatalogId()));
+ row.add(Long.toString(proc.getDbId()));
+ row.add(proc.getPackageName());
+ row.add(proc.getOwnerName());
+ row.add(proc.getCreateTime());
+ row.add(proc.getModifyTime());
+ row.add(proc.getSource());
+ columns.add(row);
+ }
+ }
+
+ @Override
+ public void showCreateProcedure(FuncNameInfo procedureName,
List<List<String>> columns) {
+ List<String> row = new ArrayList<>();
+ PlsqlStoredProcedure proc =
client.getPlsqlStoredProcedure(procedureName.getName(),
+
procedureName.getCtlId(), procedureName.getDbId());
+ if (proc != null) {
+ row.add(proc.getName());
+ row.add(proc.getSource());
+ columns.add(row);
+ }
+ }
@Override
public boolean exec(FuncNameInfo procedureName, Expr_func_paramsContext
ctx) {
@@ -196,10 +229,21 @@ public class DorisFunctionRegistry implements
FunctionRegistry {
@Override
public void save(FuncNameInfo procedureName, String source, boolean
isForce) {
try {
+ SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String createTime = f.format(Calendar.getInstance().getTime());
+ String modifyTime = createTime;
+ if (isForce) {
+ // need to get create time and use that.
+ PlsqlStoredProcedure oldProc =
client.getPlsqlStoredProcedure(procedureName.getName(),
+
procedureName.getCtlId(), procedureName.getDbId());
+ if (oldProc != null) {
+ createTime = oldProc.getCreateTime();
+ }
+ }
// TODO support packageName
client.addPlsqlStoredProcedure(procedureName.getName(),
procedureName.getCtlId(), procedureName.getDbId(),
"",
- ConnectContext.get().getQualifiedUser(), source, isForce);
+ ConnectContext.get().getQualifiedUser(), source,
createTime, modifyTime, isForce);
} catch (Exception e) {
throw new RuntimeException("failed to save procedure", e);
}
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 e9d07c31682..abd0e819d18 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
@@ -25,6 +25,8 @@ import
org.apache.doris.nereids.PLParser.Create_procedure_stmtContext;
import org.apache.doris.nereids.PLParser.Expr_func_paramsContext;
import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo;
+import java.util.List;
+
public interface FunctionRegistry {
boolean exec(FuncNameInfo procedureName, Expr_func_paramsContext ctx);
@@ -39,4 +41,8 @@ public interface FunctionRegistry {
void remove(FuncNameInfo procedureName);
void removeCached(String name);
+
+ void showProcedure(List<List<String>> columns);
+
+ void showCreateProcedure(FuncNameInfo procedureName, List<List<String>>
columns);
}
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 59143a57194..67e0eb7d097 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
@@ -37,6 +37,7 @@ import org.antlr.v4.runtime.ParserRuleContext;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -71,6 +72,14 @@ public class InMemoryFunctionRegistry implements
FunctionRegistry {
procMap.remove(procedureName.toString());
}
+ public void showProcedure(List<List<String>> columns) {
+
+ }
+
+ public void showCreateProcedure(FuncNameInfo procedureName,
List<List<String>> columns) {
+
+ }
+
@Override
public boolean exec(FuncNameInfo procedureName, Expr_func_paramsContext
ctx) {
if (builtinFunctions.exec(procedureName.toString(), ctx)) {
@@ -134,7 +143,7 @@ public class InMemoryFunctionRegistry implements
FunctionRegistry {
visit(procCtx.procedure_block());
exec.callStackPop();
exec.leaveScope();
- for (Map.Entry<String, Var> i : out.entrySet()) { // Set OUT
parameters, related to prepare statement.
+ for (Map.Entry<String, Var> i : out.entrySet()) { // Set OUT
parameters, related to prepare statement.
exec.setVariable(i.getKey(), i.getValue());
}
return true;
@@ -143,9 +152,8 @@ public class InMemoryFunctionRegistry implements
FunctionRegistry {
/**
* Set parameters for user-defined function call
*/
- public static void setCallParameters(String procName,
Expr_func_paramsContext actual,
- ArrayList<Var> actualValues, Create_routine_paramsContext formal,
HashMap<String, Var> out,
- Exec exec) {
+ public static void setCallParameters(String procName,
Expr_func_paramsContext actual, ArrayList<Var> actualValues,
+ Create_routine_paramsContext formal, HashMap<String, Var> out,
Exec exec) {
if (actual == null || actual.func_param() == null || actualValues ==
null) {
return;
}
@@ -169,8 +177,8 @@ public class InMemoryFunctionRegistry implements
FunctionRegistry {
}
Var var = setCallParameter(name, type, len, scale,
actualValues.get(i), exec);
exec.trace(actual, "SET PARAM " + name + " = " + var.toString());
- if (out != null && a.expr_atom() != null && a.expr_atom().qident()
!= null && (p.OUT() != null
- || p.INOUT() != null)) {
+ if (out != null && a.expr_atom() != null && a.expr_atom().qident()
!= null
+ && (p.OUT() != null || p.INOUT() != null)) {
String actualName = a.expr_atom().qident().getText();
if (actualName != null) {
out.put(actualName, var);
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 0057c9b7275..87cbd7b58a3 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
@@ -48,6 +48,10 @@ public class PlsqlManager implements Writable {
return nameToStoredProcedures.get(plsqlProcedureKey);
}
+ public Map<PlsqlProcedureKey, PlsqlStoredProcedure>
getAllPlsqlStoredProcedures() {
+ return nameToStoredProcedures;
+ }
+
public void addPlsqlStoredProcedure(PlsqlStoredProcedure procedure,
boolean isForce) {
PlsqlProcedureKey plsqlProcedureKey = new
PlsqlProcedureKey(procedure.getName(), procedure.getCatalogId(),
procedure.getDbId());
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 15974511b78..cef95e826c3 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
@@ -35,6 +35,7 @@ import org.apache.doris.thrift.TStatusCode;
import org.apache.thrift.TException;
+import java.util.Map;
import java.util.Objects;
public class PlsqlMetaClient {
@@ -42,16 +43,18 @@ public class PlsqlMetaClient {
}
public void addPlsqlStoredProcedure(String name, long catalogId, long
dbId, String packageName,
- String ownerName, String source,
+ String ownerName, String source, String createTime, String
modifyTime,
boolean isForce) {
checkPriv();
if (Env.getCurrentEnv().isMaster()) {
Env.getCurrentEnv().getPlsqlManager()
.addPlsqlStoredProcedure(
- new PlsqlStoredProcedure(name, catalogId, dbId,
packageName, ownerName, source),
+ new PlsqlStoredProcedure(name, catalogId, dbId,
packageName, ownerName, source,
+ createTime, modifyTime),
isForce);
} else {
- addPlsqlStoredProcedureThrift(name, catalogId, dbId, packageName,
ownerName, source, isForce);
+ addPlsqlStoredProcedureThrift(name, catalogId, dbId, packageName,
ownerName, source,
+ createTime, modifyTime, isForce);
}
}
@@ -70,6 +73,11 @@ public class PlsqlMetaClient {
.getPlsqlStoredProcedure(new PlsqlProcedureKey(name,
catalogId, dbId));
}
+ public Map<PlsqlProcedureKey, PlsqlStoredProcedure>
getAllPlsqlStoredProcedures() {
+ return Env.getCurrentEnv().getPlsqlManager()
+ .getAllPlsqlStoredProcedures();
+ }
+
public void addPlsqlPackage(String name, long catalogId, long dbId, String
ownerName, String header,
String body) {
checkPriv();
@@ -97,10 +105,12 @@ public class PlsqlMetaClient {
protected void addPlsqlStoredProcedureThrift(String name, long catalogId,
long dbId, String packageName,
String ownerName,
- String source, boolean isForce) {
+ String source, String createTime, String modifyTime, boolean
isForce) {
TPlsqlStoredProcedure tPlsqlStoredProcedure = new
TPlsqlStoredProcedure().setName(name)
.setCatalogId(catalogId).setDbId(dbId)
-
.setPackageName(packageName).setOwnerName(ownerName).setSource(source);
+
.setPackageName(packageName).setOwnerName(ownerName).setSource(source)
+ .setCreateTime(createTime).setModifyTime(modifyTime);
+
TAddPlsqlStoredProcedureRequest tAddPlsqlStoredProcedureRequest = new
TAddPlsqlStoredProcedureRequest()
.setPlsqlStoredProcedure(tPlsqlStoredProcedure);
tAddPlsqlStoredProcedureRequest.setIsForce(isForce);
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 9325684cc47..c17b0b9105b 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
@@ -51,14 +51,22 @@ public class PlsqlStoredProcedure implements Writable {
@SerializedName(value = "source")
private String source;
+ @SerializedName(value = "createTime")
+ private String createTime;
+
+ @SerializedName(value = "modifyTime")
+ private String modifyTime;
+
public TPlsqlStoredProcedure toThrift() {
return new
TPlsqlStoredProcedure().setName(name).setCatalogId(catalogId).setDbId(dbId)
-
.setPackageName(packageName).setOwnerName(ownerName).setSource(source);
+
.setPackageName(packageName).setOwnerName(ownerName).setSource(source)
+ .setCreateTime(createTime).setModifyTime(modifyTime);
}
public static PlsqlStoredProcedure fromThrift(TPlsqlStoredProcedure
procedure) {
return new PlsqlStoredProcedure(procedure.getName(),
procedure.getCatalogId(), procedure.getDbId(),
- procedure.getPackageName(), procedure.getOwnerName(),
procedure.source);
+ procedure.getPackageName(), procedure.getOwnerName(),
procedure.source,
+ procedure.getCreateTime(), procedure.getModifyTime());
}
@Override
diff --git a/gensrc/thrift/FrontendService.thrift
b/gensrc/thrift/FrontendService.thrift
index 27976a8ecbd..a20d3668100 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -1165,6 +1165,8 @@ struct TPlsqlStoredProcedure {
4: optional string packageName
5: optional string ownerName
6: optional string source
+ 7: optional string createTime
+ 8: optional string modifyTime
}
struct TPlsqlPackage {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]