From 92a81ad4ab256205efdfff60604ed290352cb08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVallish=E2=80=9D?= Date: Thu, 8 Feb 2024 19:49:40 +0530 Subject: [PATCH 1/6] [Enhancement] [plsql] support drop store procedure (#30966) --- .../org/apache/doris/nereids/DorisParser.g4 | 1 + .../org/apache/doris/nereids/PLParser.g4 | 5 ++ .../nereids/parser/LogicalPlanBuilder.java | 13 ++++ .../doris/nereids/trees/plans/PlanType.java | 3 +- .../plans/commands/DropProcedureCommand.java | 65 +++++++++++++++++++ .../trees/plans/visitor/CommandVisitor.java | 5 ++ .../java/org/apache/doris/plsql/Exec.java | 24 +++++++ .../functions/DorisFunctionRegistry.java | 18 +++++ .../plsql/functions/FunctionRegistry.java | 3 + .../functions/InMemoryFunctionRegistry.java | 15 +++++ .../plsql_p0/test_plsql_loop_cursor.groovy | 4 ++ 11 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java 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 0389ac5e09019d..a1c368949ff952 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 @@ -37,6 +37,7 @@ statement : statementBase # statementBaseAlias | 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) name=multipartIdentifier #dropProcedure ; 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 e2975f65d00d60..e7cf5d166df748 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 @@ -98,6 +98,7 @@ stmt : | create_package_body_stmt | create_procedure_stmt | declare_stmt + | drop_procedure_stmt | exec_stmt | exit_stmt | fetch_stmt @@ -324,11 +325,15 @@ package_body_item : declare_stmt_item | create_function_stmt | create_procedure_stmt + | drop_procedure_stmt ; create_procedure_stmt : (ALTER | CREATE (OR REPLACE)? | REPLACE) (PROCEDURE | PROC) multipartIdentifier create_routine_params? create_routine_options? (AS | IS)? declare_block_inplace? label_stmt? procedure_block (ident_pl SEMICOLON)? ; +drop_procedure_stmt: + (DROP (PROCEDURE | PROC) multipartIdentifier create_routine_params? create_routine_options?) + ; 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 d408e446b1f337..1ea3761e2cf8b3 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 @@ -83,6 +83,7 @@ import org.apache.doris.nereids.DorisParser.DereferenceContext; import org.apache.doris.nereids.DorisParser.DropConstraintContext; import org.apache.doris.nereids.DorisParser.DropMTMVContext; +import org.apache.doris.nereids.DorisParser.DropProcedureContext; import org.apache.doris.nereids.DorisParser.ElementAtContext; import org.apache.doris.nereids.DorisParser.ExistContext; import org.apache.doris.nereids.DorisParser.ExplainContext; @@ -348,6 +349,7 @@ import org.apache.doris.nereids.trees.plans.commands.DeleteFromUsingCommand; import org.apache.doris.nereids.trees.plans.commands.DropConstraintCommand; import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand; +import org.apache.doris.nereids.trees.plans.commands.DropProcedureCommand; import org.apache.doris.nereids.trees.plans.commands.ExplainCommand; import org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel; import org.apache.doris.nereids.trees.plans.commands.ExportCommand; @@ -3286,4 +3288,15 @@ public LogicalPlan visitCreateProcedure(CreateProcedureContext ctx) { return createProcedurePlan; }); } + + @Override + public LogicalPlan visitDropProcedure(DropProcedureContext ctx) { + List nameParts = visitMultipartIdentifier(ctx.name); + FuncNameInfo procedureName = new FuncNameInfo(nameParts); + return ParserUtils.withOrigin(ctx, () -> { + LogicalPlan dropProcedurePlan; + dropProcedurePlan = new DropProcedureCommand(procedureName, getOriginSql(ctx)); + return dropProcedurePlan; + }); + } } 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 e338bb03ffb0cf..e09d8af389deea 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 @@ -140,5 +140,6 @@ public enum PlanType { RESUME_MTMV_COMMAND, CANCEL_MTMV_TASK_COMMAND, CALL_COMMAND, - CREATE_PROCEDURE_COMMAND + CREATE_PROCEDURE_COMMAND, + DROP_PROCEDURE_COMMAND } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java new file mode 100644 index 00000000000000..cd52704092b0bd --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java @@ -0,0 +1,65 @@ +// 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.nereids.annotation.Developing; +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.plsql.metastore.PlsqlMetaClient; +import org.apache.doris.qe.ConnectContext; +import org.apache.doris.qe.StmtExecutor; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.Objects; + +/** + * Drop table procedure + */ +@Developing +public class DropProcedureCommand extends Command implements ForwardWithSync { + public static final Logger LOG = LogManager.getLogger(DropProcedureCommand.class); + private final FuncNameInfo procedureName; + private final String source; // Original SQL, from LogicalPlanBuilder.getOriginSql() + private final PlsqlMetaClient client; + + /** + * constructor + */ + public DropProcedureCommand(FuncNameInfo procedureName, String source) { + super(PlanType.DROP_PROCEDURE_COMMAND); + this.client = new PlsqlMetaClient(); + this.procedureName = Objects.requireNonNull(procedureName, "procedureName is null"); + this.source = Objects.requireNonNull(source, "source is null"); + } + + @Override + public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { + client.dropPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(), procedureName.getDb()); + // 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()); + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visitDropProcedureCommand(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 107cfd0a1a28d5..07e9020f1ff757 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 @@ -31,6 +31,7 @@ import org.apache.doris.nereids.trees.plans.commands.DeleteFromUsingCommand; import org.apache.doris.nereids.trees.plans.commands.DropConstraintCommand; import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand; +import org.apache.doris.nereids.trees.plans.commands.DropProcedureCommand; import org.apache.doris.nereids.trees.plans.commands.ExplainCommand; import org.apache.doris.nereids.trees.plans.commands.ExportCommand; import org.apache.doris.nereids.trees.plans.commands.InsertIntoTableCommand; @@ -141,4 +142,8 @@ default R visitCallCommand(CallCommand callCommand, C context) { default R visitCreateProcedureCommand(CreateProcedureCommand createProcedureCommand, C context) { return visitCommand(createProcedureCommand, context); } + + default R visitDropProcedureCommand(DropProcedureCommand dropProcedureCommand, C context) { + return visitCommand(dropProcedureCommand, context); + } } 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 9a042623da3d7d..2b1588f4928b98 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 @@ -47,6 +47,7 @@ import org.apache.doris.nereids.PLParser.Declare_handler_itemContext; import org.apache.doris.nereids.PLParser.Declare_var_itemContext; import org.apache.doris.nereids.PLParser.Doris_statementContext; +import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.DtypeContext; import org.apache.doris.nereids.PLParser.Dtype_lenContext; import org.apache.doris.nereids.PLParser.Exception_block_itemContext; @@ -1459,6 +1460,29 @@ String createLocalUdf() { return null; } + /** + * DROP PROCEDURE statement + */ + @Override + public Integer visitDrop_procedure_stmt(Drop_procedure_stmtContext ctx) { + exec.functions.removeUserProcedure(ctx); + removeLocalUdf(ctx); + return 0; + } + + /** + * Remove functions and procedures defined in the current script + */ + void removeLocalUdf(ParserRuleContext ctx) { + if (exec == this) { + String str = Exec.getFormattedText(ctx); + int i = localUdf.indexOf(str); + if (i != -1) { + localUdf.delete(i, i + str.length()); + } + } + } + @Override public Integer visitSet_doris_session_option( Set_doris_session_optionContext ctx) { 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 d28ebaaa6448f2..4b9730ccb503e8 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 @@ -24,6 +24,7 @@ import org.apache.doris.nereids.PLParser; import org.apache.doris.nereids.PLParser.Create_function_stmtContext; import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; +import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.PLParserBaseVisitor; import org.apache.doris.nereids.parser.CaseInsensitiveStream; @@ -207,6 +208,23 @@ private void saveInCache(String name, ParserRuleContext procCtx) { // cache.put(qualified(name.toUpperCase()), procCtx); } + @Override + public void removeUserProcedure(Drop_procedure_stmtContext ctx) { + FuncNameInfo procedureName = new FuncNameInfo( + exec.logicalPlanBuilder.visitMultipartIdentifier(ctx.multipartIdentifier())); + if (builtinFunctions.exists(procedureName.toString())) { + exec.info(ctx, procedureName.toString() + " is a built-in function which cannot be removed."); + return; + } + trace(ctx, "DROP PROCEDURE " + procedureName.toString()); + removeInCache(procedureName.toString(), ctx); + remove(procedureName); + } + + private void removeInCache(String name, ParserRuleContext procCtx) { + // TODO, removeCached needs to be synchronized to all Observer FEs. + } + /** * Evaluate the expression and pop value from the stack */ 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 e45a5eff3e470b..fc01accc75331a 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 @@ -22,6 +22,7 @@ import org.apache.doris.nereids.PLParser.Create_function_stmtContext; import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; +import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo; @@ -37,4 +38,6 @@ public interface FunctionRegistry { void remove(FuncNameInfo procedureName); void removeCached(String name); + + void removeUserProcedure(Drop_procedure_stmtContext ctx); } 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 ab39f617271616..8efd9148d0a461 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 @@ -24,6 +24,7 @@ import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Create_routine_param_itemContext; import org.apache.doris.nereids.PLParser.Create_routine_paramsContext; +import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.ExprContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo; @@ -251,6 +252,20 @@ public void addUserProcedure(Create_procedure_stmtContext ctx) { procMap.put(procedureName.toString(), ctx); } + @Override + public void removeUserProcedure(Drop_procedure_stmtContext ctx) { + FuncNameInfo procedureName = new FuncNameInfo( + exec.logicalPlanBuilder.visitMultipartIdentifier(ctx.multipartIdentifier())); + if (builtinFunctions.exists(procedureName.toString())) { + exec.info(ctx, procedureName.toString() + " is a built-in function which cannot be removed."); + return; + } + if (trace) { + trace(ctx, "DROP PROCEDURE " + procedureName.toString()); + } + procMap.remove(procedureName.toString()); + } + /** * Evaluate the expression and pop value from the stack */ diff --git a/regression-test/suites/plsql_p0/test_plsql_loop_cursor.groovy b/regression-test/suites/plsql_p0/test_plsql_loop_cursor.groovy index 0faa8228fa773e..72297888aaabd4 100644 --- a/regression-test/suites/plsql_p0/test_plsql_loop_cursor.groovy +++ b/regression-test/suites/plsql_p0/test_plsql_loop_cursor.groovy @@ -59,4 +59,8 @@ suite("test_plsql_loop_cursor") { // TODO support print sql """call procedure_cursor_select(111, "plsql111")""" sql """call procedure_cursor_select(111, "plsql333")""" + // TODO call show command before drop + sql """DROP PROCEDURE procedure_cursor_select""" + sql """DROP PROC procedure_insert""" + // TODO call show command after drop } From 81f928851de3576dff0f01110ce2a77bd785797e Mon Sep 17 00:00:00 2001 From: Vallish Pai Date: Sun, 18 Feb 2024 13:50:27 +0530 Subject: [PATCH 2/6] Update fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 Co-authored-by: morrySnow <101034200+morrySnow@users.noreply.github.com> --- .../src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a1c368949ff952..7a9b49d31e7960 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 @@ -37,7 +37,7 @@ statement : statementBase # statementBaseAlias | 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) name=multipartIdentifier #dropProcedure + | DROP (PROCEDURE | PROC) name=multipartIdentifier #dropProcedure ; statementBase From d5707ab26c597ff6fee0ab9db4a7b60cad81363f Mon Sep 17 00:00:00 2001 From: Vallish Pai Date: Sun, 18 Feb 2024 13:50:36 +0530 Subject: [PATCH 3/6] Update fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java Co-authored-by: morrySnow <101034200+morrySnow@users.noreply.github.com> --- .../org/apache/doris/nereids/parser/LogicalPlanBuilder.java | 6 +----- 1 file changed, 1 insertion(+), 5 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 1ea3761e2cf8b3..0b46b03ccb3532 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 @@ -3293,10 +3293,6 @@ public LogicalPlan visitCreateProcedure(CreateProcedureContext ctx) { public LogicalPlan visitDropProcedure(DropProcedureContext ctx) { List nameParts = visitMultipartIdentifier(ctx.name); FuncNameInfo procedureName = new FuncNameInfo(nameParts); - return ParserUtils.withOrigin(ctx, () -> { - LogicalPlan dropProcedurePlan; - dropProcedurePlan = new DropProcedureCommand(procedureName, getOriginSql(ctx)); - return dropProcedurePlan; - }); + return ParserUtils.withOrigin(ctx, () -> DropProcedureCommand(procedureName, getOriginSql(ctx))); } } From 66a9188d03de99ae53cf86f81a273a1ec463ca3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVallish=E2=80=9D?= Date: Sun, 18 Feb 2024 14:44:31 +0530 Subject: [PATCH 4/6] Review fix --- .../org/apache/doris/nereids/DorisParser.g4 | 2 +- .../org/apache/doris/nereids/PLParser.g4 | 3 +-- .../nereids/parser/LogicalPlanBuilder.java | 2 +- .../main/java/org/apache/doris/plsql/Exec.java | 11 ++++++++++- .../plsql/functions/DorisFunctionRegistry.java | 18 ------------------ .../plsql/functions/FunctionRegistry.java | 3 --- .../functions/InMemoryFunctionRegistry.java | 15 --------------- 7 files changed, 13 insertions(+), 41 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 7a9b49d31e7960..0def8c10ab373b 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 @@ -37,7 +37,7 @@ statement : statementBase # statementBaseAlias | 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) name=multipartIdentifier #dropProcedure + | DROP (PROCEDURE | PROC) (IF EXISTS)? name=multipartIdentifier #dropProcedure ; 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 e7cf5d166df748..e49dd9d26b6ac9 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 @@ -325,14 +325,13 @@ package_body_item : declare_stmt_item | create_function_stmt | create_procedure_stmt - | drop_procedure_stmt ; create_procedure_stmt : (ALTER | CREATE (OR REPLACE)? | REPLACE) (PROCEDURE | PROC) multipartIdentifier create_routine_params? create_routine_options? (AS | IS)? declare_block_inplace? label_stmt? procedure_block (ident_pl SEMICOLON)? ; drop_procedure_stmt: - (DROP (PROCEDURE | PROC) multipartIdentifier create_routine_params? create_routine_options?) + DROP (PROCEDURE | PROC) (IF EXISTS)? name=multipartIdentifier ; create_routine_params : 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 0b46b03ccb3532..2a6a602b71d288 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 @@ -3293,6 +3293,6 @@ public LogicalPlan visitCreateProcedure(CreateProcedureContext ctx) { public LogicalPlan visitDropProcedure(DropProcedureContext ctx) { List nameParts = visitMultipartIdentifier(ctx.name); FuncNameInfo procedureName = new FuncNameInfo(nameParts); - return ParserUtils.withOrigin(ctx, () -> DropProcedureCommand(procedureName, getOriginSql(ctx))); + return ParserUtils.withOrigin(ctx, () -> new DropProcedureCommand(procedureName, getOriginSql(ctx))); } } 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 2b1588f4928b98..98ebebfd4ea8b2 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 @@ -1465,7 +1465,16 @@ String createLocalUdf() { */ @Override public Integer visitDrop_procedure_stmt(Drop_procedure_stmtContext ctx) { - exec.functions.removeUserProcedure(ctx); + FuncNameInfo procedureName = new FuncNameInfo( + exec.logicalPlanBuilder.visitMultipartIdentifier(ctx.multipartIdentifier())); + if (builtinFunctions.exists(procedureName.toString())) { + exec.info(ctx, procedureName.toString() + " is a built-in function which cannot be removed."); + return 0; + } + if (trace) { + trace(ctx, "DROP PROCEDURE " + procedureName.toString()); + } + exec.functions.remove(procedureName); removeLocalUdf(ctx); return 0; } 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 4b9730ccb503e8..d28ebaaa6448f2 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 @@ -24,7 +24,6 @@ import org.apache.doris.nereids.PLParser; import org.apache.doris.nereids.PLParser.Create_function_stmtContext; import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; -import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.PLParserBaseVisitor; import org.apache.doris.nereids.parser.CaseInsensitiveStream; @@ -208,23 +207,6 @@ private void saveInCache(String name, ParserRuleContext procCtx) { // cache.put(qualified(name.toUpperCase()), procCtx); } - @Override - public void removeUserProcedure(Drop_procedure_stmtContext ctx) { - FuncNameInfo procedureName = new FuncNameInfo( - exec.logicalPlanBuilder.visitMultipartIdentifier(ctx.multipartIdentifier())); - if (builtinFunctions.exists(procedureName.toString())) { - exec.info(ctx, procedureName.toString() + " is a built-in function which cannot be removed."); - return; - } - trace(ctx, "DROP PROCEDURE " + procedureName.toString()); - removeInCache(procedureName.toString(), ctx); - remove(procedureName); - } - - private void removeInCache(String name, ParserRuleContext procCtx) { - // TODO, removeCached needs to be synchronized to all Observer FEs. - } - /** * Evaluate the expression and pop value from the stack */ 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 fc01accc75331a..e45a5eff3e470b 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 @@ -22,7 +22,6 @@ import org.apache.doris.nereids.PLParser.Create_function_stmtContext; import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; -import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo; @@ -38,6 +37,4 @@ public interface FunctionRegistry { void remove(FuncNameInfo procedureName); void removeCached(String name); - - void removeUserProcedure(Drop_procedure_stmtContext ctx); } 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 8efd9148d0a461..ab39f617271616 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 @@ -24,7 +24,6 @@ import org.apache.doris.nereids.PLParser.Create_procedure_stmtContext; import org.apache.doris.nereids.PLParser.Create_routine_param_itemContext; import org.apache.doris.nereids.PLParser.Create_routine_paramsContext; -import org.apache.doris.nereids.PLParser.Drop_procedure_stmtContext; import org.apache.doris.nereids.PLParser.ExprContext; import org.apache.doris.nereids.PLParser.Expr_func_paramsContext; import org.apache.doris.nereids.trees.plans.commands.info.FuncNameInfo; @@ -252,20 +251,6 @@ public void addUserProcedure(Create_procedure_stmtContext ctx) { procMap.put(procedureName.toString(), ctx); } - @Override - public void removeUserProcedure(Drop_procedure_stmtContext ctx) { - FuncNameInfo procedureName = new FuncNameInfo( - exec.logicalPlanBuilder.visitMultipartIdentifier(ctx.multipartIdentifier())); - if (builtinFunctions.exists(procedureName.toString())) { - exec.info(ctx, procedureName.toString() + " is a built-in function which cannot be removed."); - return; - } - if (trace) { - trace(ctx, "DROP PROCEDURE " + procedureName.toString()); - } - procMap.remove(procedureName.toString()); - } - /** * Evaluate the expression and pop value from the stack */ From 097501b8b9a65fd64f005aa0fdc6fb48f64c3b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVallish=E2=80=9D?= Date: Wed, 21 Feb 2024 15:06:48 +0530 Subject: [PATCH 5/6] Review fix --- .../nereids/trees/plans/commands/DropProcedureCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java index cd52704092b0bd..0d80f6199b39f3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java @@ -53,9 +53,7 @@ public DropProcedureCommand(FuncNameInfo procedureName, String source) { @Override public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { client.dropPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(), procedureName.getDb()); - // 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()); + ctx.getPlSqlOperation().getExec().functions.remove(procedureName); } @Override From b27f2ecbe0bed3cd5228dcf3e4600d99e9d008d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CVallish=E2=80=9D?= Date: Wed, 21 Feb 2024 15:16:29 +0530 Subject: [PATCH 6/6] review fix --- .../doris/nereids/trees/plans/commands/DropProcedureCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java index 0d80f6199b39f3..6aa76197d82915 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DropProcedureCommand.java @@ -52,7 +52,6 @@ public DropProcedureCommand(FuncNameInfo procedureName, String source) { @Override public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { - client.dropPlsqlStoredProcedure(procedureName.getName(), procedureName.getCtl(), procedureName.getDb()); ctx.getPlSqlOperation().getExec().functions.remove(procedureName); }