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