From d3262c20ab0fd26c6f45a61ac1de75e2c1b6082a Mon Sep 17 00:00:00 2001 From: Arseniy Volynets <vol0ncar@yandex.ru> Date: Tue, 14 May 2024 09:02:13 +0000 Subject: [PATCH] fix: parsing panics --- sbroad-core/src/frontend/sql.rs | 12 +++++++----- sbroad-core/src/frontend/sql/ir/tests.rs | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/sbroad-core/src/frontend/sql.rs b/sbroad-core/src/frontend/sql.rs index 8e77abbec..834dcf2f8 100644 --- a/sbroad-core/src/frontend/sql.rs +++ b/sbroad-core/src/frontend/sql.rs @@ -1833,11 +1833,13 @@ where Rule::FunctionArgs => { let mut args_inner = function_args.into_inner(); let mut arg_pairs_to_parse = Vec::new(); - let first_arg_pair = args_inner.next().expect("First arg expected under function"); - if let Rule::Distinct = first_arg_pair.as_rule() { - feature = Some(FunctionFeature::Distinct); - } else { - arg_pairs_to_parse.push(first_arg_pair); + + if let Some(first_arg_pair) = args_inner.next() { + if let Rule::Distinct = first_arg_pair.as_rule() { + feature = Some(FunctionFeature::Distinct); + } else { + arg_pairs_to_parse.push(first_arg_pair); + } } for arg_pair in args_inner { diff --git a/sbroad-core/src/frontend/sql/ir/tests.rs b/sbroad-core/src/frontend/sql/ir/tests.rs index 9023bff9c..41c3efa87 100644 --- a/sbroad-core/src/frontend/sql/ir/tests.rs +++ b/sbroad-core/src/frontend/sql/ir/tests.rs @@ -3455,6 +3455,21 @@ fn non_existent_references_in_values_do_not_panic() { .contains("Reference must point to some relational node")); } +#[test] +fn front_count_no_params() { + let input = r#"select count() from "test_space""#; + + let metadata = &RouterConfigurationMock::new(); + let plan = AbstractSyntaxTree::transform_into_plan(input, metadata); + let err = plan.unwrap_err(); + + assert_eq!( + true, + err.to_string() + .contains("invalid query: Expected one argument for aggregate: count") + ); +} + #[cfg(test)] mod cte; #[cfg(test)] -- GitLab