From a6c4a2abd416c3aec278484660953ec8f47f5084 Mon Sep 17 00:00:00 2001 From: TCeason Date: Tue, 24 Sep 2024 10:56:55 +0800 Subject: [PATCH] support create or replace procedure --- .../management/src/procedure/procedure_mgr.rs | 13 +++++++-- .../base/15_procedure/15_0002_procedure.test | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/query/management/src/procedure/procedure_mgr.rs b/src/query/management/src/procedure/procedure_mgr.rs index 655e9a10c295..1c0de9cd5e97 100644 --- a/src/query/management/src/procedure/procedure_mgr.rs +++ b/src/query/management/src/procedure/procedure_mgr.rs @@ -82,9 +82,16 @@ impl ProcedureMgr { procedure_id: *existent.data, }), CreateOption::CreateOrReplace => { - unreachable!( - "create_procedure: CreateOrReplace should never conflict with existent" - ); + let res = self + .kv_api + .update_id_value(name_ident, meta.clone()) + .await?; + + if let Some((id, _meta)) = res { + Ok(CreateProcedureReply { procedure_id: *id }) + } else { + Err(AppError::from(name_ident.unknown_error(func_name!())).into()) + } } }, } diff --git a/tests/sqllogictests/suites/base/15_procedure/15_0002_procedure.test b/tests/sqllogictests/suites/base/15_procedure/15_0002_procedure.test index 9d7b954df09c..77d2b99a0633 100644 --- a/tests/sqllogictests/suites/base/15_procedure/15_0002_procedure.test +++ b/tests/sqllogictests/suites/base/15_procedure/15_0002_procedure.test @@ -25,6 +25,23 @@ call procedure p1(); ---- 2 +statement ok +CREATE or replace PROCEDURE p1() RETURNS int not null LANGUAGE SQL COMMENT='test' AS $$ +BEGIN + LET x := -1; + LET sum := 10; + FOR x IN x TO x + 3 DO + sum := sum + x; + END FOR; + RETURN sum; +END; +$$; + +query T +call procedure p1(); +---- +12 + statement ok CREATE PROCEDURE p1(x UInt8, sum UInt8) RETURNS int not null LANGUAGE SQL COMMENT='test' AS $$ BEGIN @@ -45,6 +62,18 @@ BEGIN END; $$; +statement ok +CREATE OR REPLACE PROCEDURE p1() RETURNS int not null LANGUAGE SQL COMMENT='test' AS $$ +BEGIN + LET x := -1; + LET sum := 0; + FOR x IN x TO x + 3 DO + sum := sum + x; + END FOR; + RETURN sum; +END; +$$; + query T call procedure p1(); ----