From b8b8189d948dae8fb8461f7b71f18fbf7501905f Mon Sep 17 00:00:00 2001
From: Arseniy Volynets <vol0ncar@yandex.ru>
Date: Tue, 27 Feb 2024 12:29:29 +0300
Subject: [PATCH] fix: handle routine with empty params correctly

---
 sbroad-core/src/frontend/sql.rs         | 6 +++---
 sbroad-core/src/frontend/sql/query.pest | 2 +-
 sbroad-core/src/ir/ddl.rs               | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/sbroad-core/src/frontend/sql.rs b/sbroad-core/src/frontend/sql.rs
index 1ee5505326..bb5cd6f798 100644
--- a/sbroad-core/src/frontend/sql.rs
+++ b/sbroad-core/src/frontend/sql.rs
@@ -270,15 +270,15 @@ fn parse_create_proc(ast: &AbstractSyntaxTree, node: &ParseNode) -> Result<Ddl,
 fn parse_proc_with_optional_params(
     ast: &AbstractSyntaxTree,
     node: &ParseNode,
-) -> Result<(String, Vec<ParamDef>), SbroadError> {
+) -> Result<(String, Option<Vec<ParamDef>>), SbroadError> {
     let proc_name_id = node.children.first().expect("Expected to get Proc name");
     let proc_name = parse_identifier(ast, *proc_name_id)?;
 
     let params = if let Some(params_node_id) = node.children.get(1) {
         let params_node = ast.nodes.get_node(*params_node_id)?;
-        parse_proc_params(ast, params_node)?
+        Some(parse_proc_params(ast, params_node)?)
     } else {
-        Vec::new()
+        None
     };
 
     Ok((proc_name, params))
diff --git a/sbroad-core/src/frontend/sql/query.pest b/sbroad-core/src/frontend/sql/query.pest
index 33cd277485..ba399ce5e3 100644
--- a/sbroad-core/src/frontend/sql/query.pest
+++ b/sbroad-core/src/frontend/sql/query.pest
@@ -78,7 +78,7 @@ DDL = _{ CreateTable | DropTable | CreateProc | DropProc | RenameProc }
         ~ ((^"as" ~ "$$" ~ ProcBody ~ "$$") | (^"begin" ~ "atomic" ~ ProcBody ~ "end"))
         ~ TimeoutOption?
     }
-        ProcParams = { "(" ~ ColumnDefType ~ ("," ~ ColumnDefType)* ~ ")" }
+        ProcParams = { "(" ~ (ColumnDefType ~ ("," ~ ColumnDefType)*)? ~ ")" }
         ProcLanguage = { SQL }
             SQL = { ^"sql" }
         ProcBody = { (Insert | Update | Delete) }
diff --git a/sbroad-core/src/ir/ddl.rs b/sbroad-core/src/ir/ddl.rs
index c16d76378c..06c34717a0 100644
--- a/sbroad-core/src/ir/ddl.rs
+++ b/sbroad-core/src/ir/ddl.rs
@@ -59,7 +59,7 @@ pub enum Ddl {
     },
     DropProc {
         name: String,
-        params: Vec<ParamDef>,
+        params: Option<Vec<ParamDef>>,
         timeout: Decimal,
     },
     RenameRoutine {
-- 
GitLab