diff --git a/sbroad-core/src/frontend/sql.rs b/sbroad-core/src/frontend/sql.rs index 8e77abbec21a7a1c5584d855b55c86b9e43d2118..834dcf2f834eaeaa72fad70f805805d68c50ab7e 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 9023bff9cdd12abbb8d9b28b58cd59ea0726ca5d..41c3efa87d64576a8593ea3514a8f2dbe2096f9f 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)]