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 8e77abbec2..834dcf2f83 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 9023bff9cd..41c3efa87d 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