From a16c6b7e4a8a5aab28146b4a841e5dac31edf76d Mon Sep 17 00:00:00 2001
From: Arseniy Volynets <vol0ncar@yandex.ru>
Date: Wed, 5 Jun 2024 17:50:29 +0000
Subject: [PATCH] fix: panic on wrong number of parameters

---
 sbroad-core/src/ir/api/parameter.rs | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/sbroad-core/src/ir/api/parameter.rs b/sbroad-core/src/ir/api/parameter.rs
index 5b5e50e71a..441e724545 100644
--- a/sbroad-core/src/ir/api/parameter.rs
+++ b/sbroad-core/src/ir/api/parameter.rs
@@ -7,6 +7,7 @@ use crate::ir::value::Value;
 use crate::ir::{Node, NodeId, OptionParamValue, Plan, ValueIdx};
 use crate::otm::child_span;
 use sbroad_proc::otm_child_span;
+use smol_str::format_smolstr;
 
 use crate::ir::relation::Type;
 use ahash::{AHashMap, AHashSet, RandomState};
@@ -145,14 +146,16 @@ impl<'binder> ParamsBinder<'binder> {
     }
 
     /// Check that number of user passed params equal to the params nodes we have to bind.
-    fn check_params_count(&self) {
+    fn check_params_count(&self) -> Result<(), SbroadError> {
         let non_binded_params_len = self.param_node_ids.len() - self.binded_options_counter;
-        assert!(
-            !(self.tnt_params_style && non_binded_params_len > self.value_ids.len()),
-            "Expected at least {} values for parameters. Got {}.",
-            non_binded_params_len,
-            self.value_ids.len()
-        );
+        if self.tnt_params_style && non_binded_params_len > self.value_ids.len() {
+            return Err(SbroadError::UnexpectedNumberOfValues(format_smolstr!(
+                "Expected at least {} values for parameters. Got {}.",
+                non_binded_params_len,
+                self.value_ids.len()
+            )));
+        }
+        Ok(())
     }
 
     /// Retrieve a corresponding value (plan constant node) for a parameter node.
@@ -647,7 +650,7 @@ impl Plan {
         let mut binder = ParamsBinder::new(self, values)?;
         binder.handle_pg_parameters()?;
         binder.create_parameter_constants();
-        binder.check_params_count();
+        binder.check_params_count()?;
         binder.cover_params_with_rows()?;
         binder.bind_params()?;
         binder.update_value_rows()?;
-- 
GitLab