From f3354acfaff8138600eaf4d578d2070342ff481e Mon Sep 17 00:00:00 2001
From: EmirVildanov <reddog201030@gmail.com>
Date: Fri, 31 May 2024 12:55:24 +0300
Subject: [PATCH] fix: allow param under cast

---
 sbroad-core/src/frontend/sql/ir/tests/params.rs | 17 +++++++++++++++++
 sbroad-core/src/ir/expression/cast.rs           |  1 -
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/sbroad-core/src/frontend/sql/ir/tests/params.rs b/sbroad-core/src/frontend/sql/ir/tests/params.rs
index 315748f7a..368ea4ec5 100644
--- a/sbroad-core/src/frontend/sql/ir/tests/params.rs
+++ b/sbroad-core/src/frontend/sql/ir/tests/params.rs
@@ -2,6 +2,23 @@ use crate::ir::transformation::helpers::sql_to_optimized_ir;
 use crate::ir::value::Value;
 use pretty_assertions::assert_eq;
 
+#[test]
+fn front_param_in_cast() {
+    let pattern = r#"SELECT CAST(? AS INTEGER) FROM "test_space""#;
+    let plan = sql_to_optimized_ir(pattern, vec![Value::from(1_i64)]);
+
+    let expected_explain = String::from(
+        r#"projection (1::integer::int -> "COL_1")
+    scan "test_space"
+execution options:
+sql_vdbe_max_steps = 45000
+vtable_max_rows = 5000
+"#,
+    );
+
+    assert_eq!(expected_explain, plan.as_explain().unwrap());
+}
+
 #[test]
 fn front_params1() {
     let pattern = r#"SELECT "id", "FIRST_NAME" FROM "test_space"
diff --git a/sbroad-core/src/ir/expression/cast.rs b/sbroad-core/src/ir/expression/cast.rs
index db6ac0533..c43277cec 100644
--- a/sbroad-core/src/ir/expression/cast.rs
+++ b/sbroad-core/src/ir/expression/cast.rs
@@ -130,7 +130,6 @@ impl Plan {
     /// # Errors
     /// - Child node is not of the expression type.
     pub fn add_cast(&mut self, expr_id: usize, to_type: Type) -> Result<usize, SbroadError> {
-        self.get_expression_node(expr_id)?;
         let cast_expr = Expression::Cast {
             child: expr_id,
             to: to_type,
-- 
GitLab