diff --git a/benches/parse.rs b/benches/parse.rs
index cc19262c6d929d894aaad0d41a1b98d14cde4b31..e4bbbad4df9d83383721312d126a153aeb39bdf0 100644
--- a/benches/parse.rs
+++ b/benches/parse.rs
@@ -234,7 +234,7 @@ fn query1_sql() -> String {
     sql.into()
 }
 
-fn query1(pattern: &str, params: &mut Vec<Value>, engine: &mut RouterRuntimeMock) {
+fn query1(pattern: &str, params: Vec<Value>, engine: &mut RouterRuntimeMock) {
     let mut query = Query::new(engine, pattern, params).unwrap();
     let top_id = query.get_exec_plan().get_ir_plan().get_top().unwrap();
     let buckets = query.bucket_discovery(top_id).unwrap();
@@ -251,10 +251,10 @@ fn bench_query1(c: &mut Criterion) {
     let mut reestrid: u64 = 666;
     c.bench_function("query1", |b| {
         b.iter(|| {
-            let mut params = vec![Value::from(sys_from), Value::from(reestrid)];
+            let params = vec![Value::from(sys_from), Value::from(reestrid)];
             sys_from += 1;
             reestrid += 1;
-            query1(&sql, &mut params, &mut engine)
+            query1(&sql, params, &mut engine)
         })
     });
 }
diff --git a/src/api/exec_query.rs b/src/api/exec_query.rs
index a90f05f9d03cf3cfe2e075feee3a6be79d2a6aec..12e930df5ff39490f8d3b0a7a813afe34983173e 100644
--- a/src/api/exec_query.rs
+++ b/src/api/exec_query.rs
@@ -14,7 +14,7 @@ use crate::ir::value::Value;
 /// Dispatch parameterized SQL query from coordinator to the segments.
 #[no_mangle]
 pub extern "C" fn dispatch_query(ctx: FunctionCtx, args: FunctionArgs) -> c_int {
-    let mut lua_params = match PatternWithParams::try_from(args) {
+    let lua_params = match PatternWithParams::try_from(args) {
         Ok(param) => param,
         Err(e) => return tarantool::set_error!(TarantoolErrorCode::ProcC, "{:?}", e),
     };
@@ -34,7 +34,7 @@ pub extern "C" fn dispatch_query(ctx: FunctionCtx, args: FunctionArgs) -> c_int
                 );
             }
         };
-        let mut query = match Query::new(&*runtime, &lua_params.pattern, &mut lua_params.params) {
+        let mut query = match Query::new(&*runtime, &lua_params.pattern, lua_params.params) {
             Ok(q) => q,
             Err(e) => {
                 say(
diff --git a/src/api/explain.rs b/src/api/explain.rs
index 38d74d9cf1faa03d64dac95c0c3283b264cdf136..32dd3e395ff69457972b743477205fc90a1dbc64 100644
--- a/src/api/explain.rs
+++ b/src/api/explain.rs
@@ -50,7 +50,7 @@ pub extern "C" fn explain(ctx: FunctionCtx, args: FunctionArgs) -> c_int {
                 );
             }
         };
-        let query = match Query::new(&*runtime, &lua_params.query, &mut vec![]) {
+        let query = match Query::new(&*runtime, &lua_params.query, vec![]) {
             Ok(q) => q,
             Err(e) => {
                 say(
diff --git a/src/executor.rs b/src/executor.rs
index 62cd3b711a13772fc7de351e51124f4bbb583adc..91348ac49f2e4757c018f01a49cc0facd472db02 100644
--- a/src/executor.rs
+++ b/src/executor.rs
@@ -90,11 +90,7 @@ where
     /// - Failed to build AST.
     /// - Failed to build IR plan.
     /// - Failed to apply optimizing transformations to IR plan.
-    pub fn new(
-        coordinator: &'a C,
-        sql: &str,
-        params: &mut Vec<Value>,
-    ) -> Result<Self, QueryPlannerError>
+    pub fn new(coordinator: &'a C, sql: &str, params: Vec<Value>) -> Result<Self, QueryPlannerError>
     where
         C::Configuration: CoordinatorMetadata,
         C::Cache: Cache<String, Plan>,
diff --git a/src/executor/bucket/tests.rs b/src/executor/bucket/tests.rs
index 9ba97d39dfe52a1ea6d01b5b80f4a95a01a49688..8a3b6029ee821363f0884d0dd20d998b3104e0a4 100644
--- a/src/executor/bucket/tests.rs
+++ b/src/executor/bucket/tests.rs
@@ -18,7 +18,7 @@ fn simple_union_query() {
     WHERE "id" = 1"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
@@ -42,7 +42,7 @@ fn simple_disjunction_in_union_query() {
     WHERE ("id" = 1) OR ("id" = 100)"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
@@ -73,7 +73,7 @@ fn complex_shard_key_union_query() {
     WHERE "identification_number" = 1 AND "product_code" = '222'"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
@@ -106,7 +106,7 @@ fn union_complex_cond_query() {
         OR "product_code" = '111')"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
@@ -156,7 +156,7 @@ fn union_query_conjunction() {
     SELECT * FROM "test_space_hist" WHERE "id" = 2"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
@@ -182,7 +182,7 @@ fn simple_except_query() {
     WHERE "id" = 1"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, query, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, query, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
     let top = plan.get_top().unwrap();
     let buckets = query.bucket_discovery(top).unwrap();
diff --git a/src/executor/engine/cartridge/backend/sql/ir/tests.rs b/src/executor/engine/cartridge/backend/sql/ir/tests.rs
index 51543e6c57dc31d444d8385a024477dcb83ad988..d4fa13b92acda3debd30b154bd4655f371197af6 100644
--- a/src/executor/engine/cartridge/backend/sql/ir/tests.rs
+++ b/src/executor/engine/cartridge/backend/sql/ir/tests.rs
@@ -20,7 +20,7 @@ fn one_table_projection() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -52,7 +52,7 @@ fn one_table_with_asterisk() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -90,7 +90,7 @@ fn union_all() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -125,7 +125,7 @@ fn from_sub_query() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -163,7 +163,7 @@ fn from_sub_query_with_union() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -198,7 +198,7 @@ fn inner_join() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -235,7 +235,7 @@ fn inner_join_with_sq() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
@@ -272,7 +272,7 @@ fn selection_with_sq() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
     let mut sp = SyntaxPlan::new(&ex_plan, top_id).unwrap();
@@ -309,7 +309,7 @@ fn except() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let ex_plan = ExecutionPlan::from(plan);
 
     let top_id = ex_plan.get_ir_plan().get_top().unwrap();
diff --git a/src/executor/tests.rs b/src/executor/tests.rs
index e849027f68fca1a26258a519fa2bf2c3cdd5aab9..a2450301a3d56d26d494b45cbd3cb6bfb34c5509 100644
--- a/src/executor/tests.rs
+++ b/src/executor/tests.rs
@@ -16,7 +16,7 @@ fn shard_query() {
     let sql = r#"SELECT "FIRST_NAME" FROM "test_space" where "id" = 1"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -56,7 +56,7 @@ fn shard_union_query() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -91,7 +91,7 @@ fn map_reduce_query() {
     let sql = r#"SELECT "product_code" FROM "hash_testing" where "identification_number" = 1 and "product_code" = '457'"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -130,7 +130,7 @@ fn linker_test() {
     (SELECT "identification_number" FROM "hash_testing" where "identification_number" > 1)"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
     let mut virtual_table = virtual_table_23();
     if let MotionPolicy::Segment(key) = get_motion_policy(query.exec_plan.get_ir_plan(), motion_id)
@@ -209,7 +209,7 @@ fn union_linker_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
     let mut virtual_table = virtual_table_23();
     if let MotionPolicy::Segment(key) = get_motion_policy(query.exec_plan.get_ir_plan(), motion_id)
@@ -307,7 +307,7 @@ WHERE "t3"."id" = 2 AND "t8"."identification_number" = 2"#;
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
     let mut virtual_table = virtual_table_23();
     virtual_table.set_alias("\"t8\"").unwrap();
@@ -383,7 +383,7 @@ fn join_linker2_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -450,7 +450,7 @@ fn join_linker3_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -521,7 +521,7 @@ fn join_linker4_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
 
     let motion_t2_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
     let mut virtual_t2 = VirtualTable::new();
@@ -624,7 +624,7 @@ fn anonymous_col_index_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion1_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
     let mut virtual_t1 = virtual_table_23();
     if let MotionPolicy::Segment(key) = get_motion_policy(query.exec_plan.get_ir_plan(), motion1_id)
@@ -709,7 +709,7 @@ fn sharding_column1_test() {
     let sql = r#"SELECT * FROM "test_space" where "id" = 1"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -740,7 +740,7 @@ fn sharding_column2_test() {
     let sql = r#"SELECT *, "bucket_id" FROM "test_space" where "id" = 1"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -773,7 +773,7 @@ fn insert1_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -838,7 +838,7 @@ fn insert2_test() {
         where "a" = 1 and "b" = 2"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
 
     // Though projection row has the same distribution key as
     // the target table, we still add a motion and collect a
@@ -898,7 +898,7 @@ fn insert3_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -975,7 +975,7 @@ fn insert4_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
 
     // Though data allows to be inserted locally still gather it on the
     // coordinator to recalculate a "bucket_id" field for "t".
@@ -1033,7 +1033,7 @@ fn insert5_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -1097,7 +1097,7 @@ fn insert6_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -1186,7 +1186,7 @@ fn insert7_test() {
     let sql = r#"insert into "hash_testing" ("sys_op", "bucket_id" ) values (1, 2)"#;
 
     let coordinator = RouterRuntimeMock::new();
-    let result = Query::new(&coordinator, sql, &mut vec![]).unwrap_err();
+    let result = Query::new(&coordinator, sql, vec![]).unwrap_err();
 
     assert_eq!(
         QueryPlannerError::CustomError(format!(
@@ -1203,7 +1203,7 @@ fn insert8_test() {
 
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
 
     let mut virtual_table = VirtualTable::new();
@@ -1273,7 +1273,7 @@ fn insert9_test() {
     let mut query = Query::new(
         &coordinator,
         sql,
-        &mut vec![Value::from(1_u64), Value::from(2_u64)],
+        vec![Value::from(1_u64), Value::from(2_u64)],
     )
     .unwrap();
     let motion_id = query.exec_plan.get_ir_plan().get_slices().unwrap()[0][0];
diff --git a/src/executor/tests/between.rs b/src/executor/tests/between.rs
index 1ee4c15e12fbd0ece4b851f724b24d3ed6a4bbc9..390e81b6b4ee797b30ff605b7da4dfe844d4c967 100644
--- a/src/executor/tests/between.rs
+++ b/src/executor/tests/between.rs
@@ -23,7 +23,7 @@ fn between1_test() {
 
     // Initialize the query.
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
 
     // Validate the motion type.
@@ -81,7 +81,7 @@ fn between2_test() {
 
     // Initialize the query.
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
 
     // Validate the motion type.
diff --git a/src/executor/tests/bucket_id.rs b/src/executor/tests/bucket_id.rs
index 42e288dc90bd6f7521ab8a2721ac2a22e6e02329..91e0e91bef266f9f207898668d710b213c85377b 100644
--- a/src/executor/tests/bucket_id.rs
+++ b/src/executor/tests/bucket_id.rs
@@ -12,7 +12,7 @@ fn bucket1_test() {
     let sql = r#"SELECT *, "bucket_id" FROM "t1""#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
@@ -40,7 +40,7 @@ fn bucket2_test() {
         WHERE "a" = 1 AND "b" = 2"#;
     let coordinator = RouterRuntimeMock::new();
 
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let result = *query
         .dispatch()
         .unwrap()
diff --git a/src/executor/tests/not_eq.rs b/src/executor/tests/not_eq.rs
index d444e1e3edabb1860de105d9df04b9e9d249864c..99c5aebd5d54a250484a0279dabaa32c1da60fd7 100644
--- a/src/executor/tests/not_eq.rs
+++ b/src/executor/tests/not_eq.rs
@@ -20,7 +20,7 @@ fn not_eq1_test() {
 
     // Initialize the query.
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
 
     // Validate the motion type.
@@ -61,7 +61,7 @@ fn not_eq2_test() {
 
     // Initialize the query.
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
 
     // Validate the motion type.
diff --git a/src/executor/tests/not_in.rs b/src/executor/tests/not_in.rs
index 933da8de89935a077e2fde5837b111f50563e622..9551d331e5adb813fe6605b1c1d4be17c4e6fcfc 100644
--- a/src/executor/tests/not_in.rs
+++ b/src/executor/tests/not_in.rs
@@ -23,7 +23,7 @@ fn not_in1_test() {
 
     // Initialize the query.
     let coordinator = RouterRuntimeMock::new();
-    let mut query = Query::new(&coordinator, sql, &mut vec![]).unwrap();
+    let mut query = Query::new(&coordinator, sql, vec![]).unwrap();
     let plan = query.exec_plan.get_ir_plan();
 
     // Validate the motion type.
diff --git a/src/frontend/sql.rs b/src/frontend/sql.rs
index 3fc4e8de2eeacdb74b76300687ec65abf5f69447..f40efddb5e4e6a6ec7a1d69ff7eecfd141706670 100644
--- a/src/frontend/sql.rs
+++ b/src/frontend/sql.rs
@@ -758,7 +758,7 @@ impl Plan {
     /// - Invalid amount of parameters.
     /// - Internal errors.
     #[allow(clippy::too_many_lines)]
-    pub fn bind_params(&mut self, params: &mut Vec<Value>) -> Result<(), QueryPlannerError> {
+    pub fn bind_params(&mut self, mut params: Vec<Value>) -> Result<(), QueryPlannerError> {
         // Nothing to do here.
         if params.is_empty() {
             return Ok(());
diff --git a/src/frontend/sql/ir/tests.rs b/src/frontend/sql/ir/tests.rs
index 09a80b3afb9a4c20e66d6c6033aa3d3b94c5f026..82eacc5091b522167366805c1e12b79ba137bd81 100644
--- a/src/frontend/sql/ir/tests.rs
+++ b/src/frontend/sql/ir/tests.rs
@@ -24,7 +24,7 @@ fn front_sql1() {
         vec![Value::from(1_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -48,7 +48,7 @@ fn front_sql2() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -77,7 +77,7 @@ fn front_sql3() {
         vec![Value::from(1_u64), Value::from(1_u64), Value::from(1_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -119,7 +119,7 @@ fn front_sql4() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -138,7 +138,7 @@ fn front_sql5() {
         vec![Value::from("a")],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -162,7 +162,7 @@ fn front_sql6() {
         vec![Value::from(5_u64), Value::from("123")],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -202,7 +202,7 @@ fn front_sql8() {
         vec![Value::from(1_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -261,7 +261,7 @@ fn front_sql9() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -280,7 +280,7 @@ fn front_sql10() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -291,7 +291,7 @@ fn front_sql11() {
         vec![Value::from(1_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -335,7 +335,7 @@ fn front_sql14() {
         vec![],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -368,7 +368,7 @@ fn front_sql16() {
         vec![Value::from("кириллица")],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -384,7 +384,7 @@ fn front_sql17() {
         vec![],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -401,7 +401,7 @@ fn front_sql18() {
         vec![Value::from(1_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
@@ -417,14 +417,14 @@ fn front_sql19() {
         vec![],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(input, vec![], &no_transform), expected);
 }
 
 #[test]
 fn front_params1() {
     let pattern = r#"SELECT "id", "FIRST_NAME" FROM "test_space"
         WHERE "sys_op" = ? AND "sysFrom" > ?"#;
-    let mut params = vec![Value::from(0_i64), Value::from(1_i64)];
+    let params = vec![Value::from(0_i64), Value::from(1_i64)];
     let expected = PatternWithParams::new(
         format!(
             "{} {}",
@@ -434,14 +434,14 @@ fn front_params1() {
         params.clone(),
     );
 
-    assert_eq!(sql_to_sql(pattern, &mut params, &no_transform), expected);
+    assert_eq!(sql_to_sql(pattern, params, &no_transform), expected);
 }
 
 #[test]
 fn front_params2() {
     let pattern = r#"SELECT "id" FROM "test_space"
         WHERE "sys_op" = ? AND "FIRST_NAME" = ?"#;
-    let mut params = vec![Value::Null, Value::from("hello")];
+    let params = vec![Value::Null, Value::from("hello")];
     let expected = PatternWithParams::new(
         format!(
             "{} {}",
@@ -451,7 +451,7 @@ fn front_params2() {
         params.clone(),
     );
 
-    assert_eq!(sql_to_sql(pattern, &mut params, &no_transform), expected);
+    assert_eq!(sql_to_sql(pattern, params, &no_transform), expected);
 }
 
 // check cyrillic params support
@@ -459,7 +459,7 @@ fn front_params2() {
 fn front_params3() {
     let pattern = r#"SELECT "id" FROM "test_space"
         WHERE "sys_op" = ? AND "FIRST_NAME" = ?"#;
-    let mut params = vec![Value::Null, Value::from("кириллица")];
+    let params = vec![Value::Null, Value::from("кириллица")];
     let expected = PatternWithParams::new(
         format!(
             "{} {}",
@@ -469,7 +469,7 @@ fn front_params3() {
         params.clone(),
     );
 
-    assert_eq!(sql_to_sql(pattern, &mut params, &no_transform), expected);
+    assert_eq!(sql_to_sql(pattern, params, &no_transform), expected);
 }
 
 // check symbols in values (grammar)
@@ -488,5 +488,5 @@ fn front_params4() {
         params,
     );
 
-    assert_eq!(sql_to_sql(pattern, &mut vec![], &no_transform), expected);
+    assert_eq!(sql_to_sql(pattern, vec![], &no_transform), expected);
 }
diff --git a/src/ir/explain/tests.rs b/src/ir/explain/tests.rs
index 1acbc4e65b3e04fc69aca35cf59363124b425a0a..9164969e505cd52b322a668b184c1d189fd96cc5 100644
--- a/src/ir/explain/tests.rs
+++ b/src/ir/explain/tests.rs
@@ -8,7 +8,7 @@ fn simple_query_without_cond_plan() {
     let query =
         r#"SELECT "t"."identification_number" as "c1", "product_code" FROM "hash_testing" as "t""#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
 
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
@@ -27,7 +27,7 @@ fn simple_query_without_cond_plan() {
 fn simple_query_with_cond_plan() {
     let query = r#"SELECT "t"."identification_number" as "c1", "product_code" FROM "hash_testing" as "t" WHERE "t"."identification_number" = 1 AND "t"."product_code" = '222'"#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
 
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
@@ -49,7 +49,7 @@ fn union_query_plan() {
         UNION ALL
         SELECT "t2"."identification_number", "product_code" FROM "hash_testing_hist" as "t2""#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
 
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
@@ -74,7 +74,7 @@ SELECT "id", "FIRST_NAME" FROM "test_space_hist" WHERE "sys_op" < 0
 ) as "t"
 WHERE "id" = 1"#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
 
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
@@ -112,7 +112,7 @@ WHERE "id" IN (SELECT "id"
   AND "FIRST_NAME" IN (SELECT "FIRST_NAME" FROM "test_space" WHERE "id" = 5)
 "#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
 
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
@@ -156,7 +156,7 @@ fn explain_except1() {
         EXCEPT DISTINCT
         SELECT "identification_number" FROM "hash_testing_hist""#;
 
-    let plan = sql_to_ir(query, &mut vec![]);
+    let plan = sql_to_ir(query, vec![]);
     let top = &plan.get_top().unwrap();
     let explain_tree = FullExplain::new(&plan, *top).unwrap();
 
diff --git a/src/ir/transformation/bool_in/tests.rs b/src/ir/transformation/bool_in/tests.rs
index c5724afc328e9aa2348abf2a85398dfd99dd0848..d64f9e2758cbaf20588b970e51e1aed5b39d6941 100644
--- a/src/ir/transformation/bool_in/tests.rs
+++ b/src/ir/transformation/bool_in/tests.rs
@@ -20,10 +20,7 @@ fn bool_in1() {
         vec![Value::from(1_u64), Value::from(2_u64), Value::from(3_u64)],
     );
 
-    assert_eq!(
-        sql_to_sql(input, &mut vec![], &replace_in_operator),
-        expected
-    );
+    assert_eq!(sql_to_sql(input, vec![], &replace_in_operator), expected);
 }
 
 #[test]
@@ -46,10 +43,7 @@ fn bool_in2() {
         ],
     );
 
-    assert_eq!(
-        sql_to_sql(input, &mut vec![], &replace_in_operator),
-        expected
-    );
+    assert_eq!(sql_to_sql(input, vec![], &replace_in_operator), expected);
 }
 
 #[test]
@@ -64,8 +58,5 @@ fn bool_in3() {
         vec![Value::from(1_u64), Value::from(2_u64), Value::from(3_u64)],
     );
 
-    assert_eq!(
-        sql_to_sql(input, &mut vec![], &replace_in_operator),
-        expected
-    );
+    assert_eq!(sql_to_sql(input, vec![], &replace_in_operator), expected);
 }
diff --git a/src/ir/transformation/dnf/tests.rs b/src/ir/transformation/dnf/tests.rs
index 83c7cacc3e838d943f9a982f335eb5a069dd4537..ab1b22bacd304aabf769ca2e99de078873b9eb07 100644
--- a/src/ir/transformation/dnf/tests.rs
+++ b/src/ir/transformation/dnf/tests.rs
@@ -28,7 +28,7 @@ fn dnf1() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
 
 #[test]
@@ -54,7 +54,7 @@ fn dnf2() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
 
 #[test]
@@ -75,7 +75,7 @@ fn dnf3() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
 
 #[test]
@@ -96,7 +96,7 @@ fn dnf4() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
 
 #[test]
@@ -117,7 +117,7 @@ fn dnf5() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
 
 #[test]
@@ -133,5 +133,5 @@ fn dnf6() {
         vec![Value::from(1_u64), Value::from(1_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &set_dnf), expected);
+    assert_eq!(sql_to_sql(input, vec![], &set_dnf), expected);
 }
diff --git a/src/ir/transformation/equality_propagation/tests.rs b/src/ir/transformation/equality_propagation/tests.rs
index d48740a75ff02a37973a9a748319615c9f57f43a..6f9a0ed617b034be34dd2194f3235fccd7af946c 100644
--- a/src/ir/transformation/equality_propagation/tests.rs
+++ b/src/ir/transformation/equality_propagation/tests.rs
@@ -28,7 +28,7 @@ fn equality_propagation1() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &derive_equalities), expected);
+    assert_eq!(sql_to_sql(input, vec![], &derive_equalities), expected);
 }
 
 #[test]
@@ -44,7 +44,7 @@ fn equality_propagation2() {
         vec![Value::Null, Value::Null],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &derive_equalities), expected);
+    assert_eq!(sql_to_sql(input, vec![], &derive_equalities), expected);
 }
 
 #[test]
@@ -61,7 +61,7 @@ fn equality_propagation3() {
         vec![Value::from(1_u64), Value::Null, Value::Null],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &derive_equalities), expected);
+    assert_eq!(sql_to_sql(input, vec![], &derive_equalities), expected);
 }
 
 #[test]
@@ -84,7 +84,7 @@ fn equality_propagation4() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &derive_equalities), expected);
+    assert_eq!(sql_to_sql(input, vec![], &derive_equalities), expected);
 }
 
 #[test]
@@ -109,5 +109,5 @@ fn equality_propagation5() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &derive_equalities), expected);
+    assert_eq!(sql_to_sql(input, vec![], &derive_equalities), expected);
 }
diff --git a/src/ir/transformation/helpers.rs b/src/ir/transformation/helpers.rs
index 70144a5b044dc75c38e22a87497fcda9a2ffa37a..3c4039b033bb4aa16a477178f864c69c8ef352bb 100644
--- a/src/ir/transformation/helpers.rs
+++ b/src/ir/transformation/helpers.rs
@@ -12,7 +12,7 @@ use crate::ir::Plan;
 
 /// Compiles an SQL query to IR plan.
 #[allow(dead_code)]
-pub fn sql_to_ir(query: &str, params: &mut Vec<Value>) -> Plan {
+pub fn sql_to_ir(query: &str, params: Vec<Value>) -> Plan {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
@@ -24,7 +24,7 @@ pub fn sql_to_ir(query: &str, params: &mut Vec<Value>) -> Plan {
 #[allow(dead_code)]
 pub fn sql_to_sql(
     query: &str,
-    params: &mut Vec<Value>,
+    params: Vec<Value>,
     f_transform: &dyn Fn(&mut Plan),
 ) -> PatternWithParams {
     let mut plan = sql_to_ir(query, params);
diff --git a/src/ir/transformation/merge_tuples/tests.rs b/src/ir/transformation/merge_tuples/tests.rs
index 3a6d76608d518d91e799b86c65f3c87b4d59eea5..4408f3ce2d02d0085cd3e126195f6b6ec4dc1ff7 100644
--- a/src/ir/transformation/merge_tuples/tests.rs
+++ b/src/ir/transformation/merge_tuples/tests.rs
@@ -25,7 +25,7 @@ fn merge_tuples1() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
 
 #[test]
@@ -50,7 +50,7 @@ fn merge_tuples2() {
         ],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
 
 #[test]
@@ -61,7 +61,7 @@ fn merge_tuples3() {
         vec![Value::Boolean(true)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
 
 #[test]
@@ -75,7 +75,7 @@ fn merge_tuples4() {
         vec![Value::from(1_u64), Value::from(2_u64), Value::from(3_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
 
 #[test]
@@ -90,7 +90,7 @@ fn merge_tuples5() {
         vec![Value::from(1_u64), Value::from(2_u64), Value::from(3_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
 
 #[test]
@@ -104,5 +104,5 @@ fn merge_tuples6() {
         vec![Value::from(2_u64), Value::from(1_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &merge_tuples), expected);
+    assert_eq!(sql_to_sql(input, vec![], &merge_tuples), expected);
 }
diff --git a/src/ir/transformation/redistribution/tests.rs b/src/ir/transformation/redistribution/tests.rs
index 9b01db7c4cf62d9d2c70f4a9a71044a0cd8c4d45..2613329174db3457ea8f8ffdd7d3d2b6f670027f 100644
--- a/src/ir/transformation/redistribution/tests.rs
+++ b/src/ir/transformation/redistribution/tests.rs
@@ -345,7 +345,7 @@ fn union_all_in_sq() {
             WHERE "sys_op" > 1) AS "t3"
         WHERE "identification_number" = 1"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -357,7 +357,7 @@ fn inner_join_eq_for_keys() {
         INNER JOIN "t"
         ON ("t1"."identification_number", "t1"."product_code") = ("t"."a", "t"."b")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -370,7 +370,7 @@ fn join_inner_sq_eq_for_keys() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", "t1"."product_code") = ("t2"."id", "t2"."pc")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -383,7 +383,7 @@ fn join_inner_eq_non_match_keys() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", "t1"."product_code") = ("t2"."pc", "t2"."id")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -416,7 +416,7 @@ fn join_inner_sq_eq_for_keys_with_const() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", 1, "t1"."product_code") = ("t2"."id", 1, "t2"."pc")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -429,7 +429,7 @@ fn join_inner_sq_less_for_keys() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", "t1"."product_code") < ("t2"."id", "t2"."pc")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -454,7 +454,7 @@ fn join_inner_sq_eq_no_keys() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", 1) = (1, "t2"."pc")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -479,7 +479,7 @@ fn join_inner_sq_eq_no_outer_keys() {
         (SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist") AS "t2"
         ON ("t1"."identification_number", 1) = ("t2"."id", "t2"."pc")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -505,7 +505,7 @@ fn inner_join_full_policy_sq_in_filter() {
         AND ("t"."a", "t"."b") >=
         (SELECT "hash_testing"."sys_op", "hash_testing"."bucket_id" FROM "hash_testing")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -531,7 +531,7 @@ fn inner_join_local_policy_sq_in_filter() {
         AND ("t"."a", "t"."b") =
         (SELECT "hash_testing"."identification_number", "hash_testing"."product_code" FROM "hash_testing")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -547,7 +547,7 @@ fn inner_join_local_policy_sq_with_union_all_in_filter() {
         UNION ALL
         SELECT "hash_testing_hist"."identification_number", "hash_testing_hist"."product_code" FROM "hash_testing_hist")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -563,7 +563,7 @@ fn inner_join_full_policy_sq_with_union_all_in_filter() {
         UNION ALL
         SELECT "hash_testing_hist"."product_code", "hash_testing_hist"."identification_number" FROM "hash_testing_hist")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -597,7 +597,7 @@ fn join_inner_and_local_full_policies() {
         ON ("t1"."identification_number", "t1"."product_code") = ("t2"."id", "t2"."pc")
         AND "t1"."identification_number" = "t2"."pc""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -611,7 +611,7 @@ fn join_inner_or_local_full_policies() {
         ON ("t1"."identification_number", "t1"."product_code") = ("t2"."id", "t2"."pc")
         OR "t1"."identification_number" = "t2"."pc""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -652,7 +652,7 @@ fn join1() {
             ON "t3"."id" = "t8"."identification_number"
         WHERE "t3"."id" = 1 AND "t8"."identification_number" = 1"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -696,7 +696,7 @@ fn join1() {
 fn redistribution1() {
     let query = r#"INSERT INTO "t" SELECT "d", "c", "b", "a" FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -726,7 +726,7 @@ fn redistribution1() {
 fn redistribution2() {
     let query = r#"INSERT INTO "t" SELECT * FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     // Though data allows to be inserted locally still gather it on the
     // coordinator to recalculate a "bucket_id" field for "t".
@@ -758,7 +758,7 @@ fn redistribution2() {
 fn redistribution3() {
     let query = r#"INSERT INTO "t" ("a", "b") SELECT "a", "b" FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     // Though data allows to be inserted locally still gather it on the
     // coordinator to recalculate a "bucket_id" field for "t".
@@ -790,7 +790,7 @@ fn redistribution3() {
 fn redistribution4() {
     let query = r#"INSERT INTO "t" ("b", "a") SELECT "a", "b" FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -820,7 +820,7 @@ fn redistribution4() {
 fn redistribution5() {
     let query = r#"INSERT INTO "t" ("c", "d") SELECT "a", "b" FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
@@ -850,7 +850,7 @@ fn redistribution5() {
 fn redistribution6() {
     let query = r#"INSERT INTO "t" ("a", "c") SELECT "a", "b" FROM "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *plan
         .slices
diff --git a/src/ir/transformation/redistribution/tests/between.rs b/src/ir/transformation/redistribution/tests/between.rs
index 7521917d8335bd56a0616cf2031a547a67b113e6..4cd67d0bdfdf707cdc4520907cc98c1e235a9fcc 100644
--- a/src/ir/transformation/redistribution/tests/between.rs
+++ b/src/ir/transformation/redistribution/tests/between.rs
@@ -10,7 +10,7 @@ fn between1() {
         WHERE (SELECT "identification_number" FROM "hash_testing_hist" AS "h"
             WHERE "identification_number" = 2) BETWEEN 1 AND 2"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_gt_eq_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_gt_eq_id).unwrap();
@@ -35,7 +35,7 @@ fn between2() {
     let query = r#"SELECT "identification_number" FROM "hash_testing" AS "t"
         WHERE "identification_number" BETWEEN 1 AND 2"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -48,7 +48,7 @@ fn between3() {
             SELECT "identification_number" FROM "hash_testing_hist"
             WHERE "identification_number" = 3)"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -66,7 +66,7 @@ fn between4() {
     let query = r#"SELECT "identification_number" FROM "hash_testing" AS "t"
         WHERE 1 BETWEEN "identification_number" AND 2"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
diff --git a/src/ir/transformation/redistribution/tests/except.rs b/src/ir/transformation/redistribution/tests/except.rs
index f7780b0e8d19a6683c177301ad2b0bd258b142bb..d092fc260257315ff9e10165900e43c5f73c64e2 100644
--- a/src/ir/transformation/redistribution/tests/except.rs
+++ b/src/ir/transformation/redistribution/tests/except.rs
@@ -10,7 +10,7 @@ fn except1() {
         EXCEPT DISTINCT
         SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -27,7 +27,7 @@ fn except2() {
         EXCEPT DISTINCT
         SELECT "identification_number" as "id", "product_code" as "pc" FROM "hash_testing_hist" AS "t""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -39,7 +39,7 @@ fn except3() {
         EXCEPT
         SELECT 1, 2 FROM "hash_testing_hist""#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -68,7 +68,7 @@ fn except4() {
             SELECT 1, 2 FROM "hash_testing_hist"
         ) as t"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -97,7 +97,7 @@ fn except5() {
             SELECT 1, 2 FROM "hash_testing_hist"
         ) as t"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
diff --git a/src/ir/transformation/redistribution/tests/not_in.rs b/src/ir/transformation/redistribution/tests/not_in.rs
index bf0a1d3ca56b22f0352f45900a615c7fe49eba79..1be1e1cff590688fcf678741757199aba21b64f9 100644
--- a/src/ir/transformation/redistribution/tests/not_in.rs
+++ b/src/ir/transformation/redistribution/tests/not_in.rs
@@ -9,7 +9,7 @@ fn not_in1() {
     let query = r#"SELECT 1 FROM "hash_testing" AS "t" WHERE "product_code" NOT IN (
         SELECT "product_code" FROM "hash_testing_hist")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -25,7 +25,7 @@ fn not_in2() {
     let query = r#"SELECT 1 FROM "hash_testing" AS "t" WHERE ("identification_number", "product_code") NOT IN (
         SELECT "identification_number", "product_code" FROM "hash_testing_hist" AS "t")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let expected: Option<Vec<Vec<usize>>> = None;
     assert_eq!(expected, plan.slices);
@@ -36,7 +36,7 @@ fn not_in3() {
     let query = r#"SELECT 1 FROM "hash_testing" AS "t" WHERE ("identification_number", "product_code") NOT IN (
         SELECT "product_code", 42 FROM "hash_testing_hist")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -60,7 +60,7 @@ fn not_in4() {
     let query = r#"SELECT 1 FROM "hash_testing" AS "t" WHERE ("product_code", "identification_number") NOT IN (
         SELECT "product_code", 42 FROM "hash_testing_hist")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
@@ -84,7 +84,7 @@ fn not_in5() {
     let query = r#"SELECT 1 FROM "hash_testing" AS "t" WHERE ("identification_number", "product_code") NOT IN (
         SELECT 42, 666 FROM "hash_testing_hist" AS "t")"#;
 
-    let mut plan = sql_to_ir(query, &mut vec![]);
+    let mut plan = sql_to_ir(query, vec![]);
     plan.add_motions().unwrap();
     let motion_id = *get_motion_id(&plan, 0, 0).unwrap();
     let motion = plan.get_relation_node(motion_id).unwrap();
diff --git a/src/ir/transformation/split_columns/tests.rs b/src/ir/transformation/split_columns/tests.rs
index 038c5081c80fa3c65f46b6f42d9bd7d217ee2727..98d0f6c741157fdc440034cf42403b5b2f953a8a 100644
--- a/src/ir/transformation/split_columns/tests.rs
+++ b/src/ir/transformation/split_columns/tests.rs
@@ -22,7 +22,7 @@ fn split_columns1() {
         vec![Value::from(1_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &split_columns), expected);
+    assert_eq!(sql_to_sql(input, vec![], &split_columns), expected);
 }
 
 #[test]
@@ -33,7 +33,7 @@ fn split_columns2() {
         vec![Value::from(1_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &split_columns), expected);
+    assert_eq!(sql_to_sql(input, vec![], &split_columns), expected);
 }
 
 #[test]
@@ -43,7 +43,7 @@ fn split_columns3() {
     let metadata = &RouterConfigurationMock::new();
     let ast = AbstractSyntaxTree::new(query).unwrap();
     let mut plan = ast.resolve_metadata(metadata).unwrap();
-    plan.bind_params(&mut vec![]).unwrap();
+    plan.bind_params(vec![]).unwrap();
     let plan_err = plan.split_columns().unwrap_err();
     assert_eq!(
         format!(
@@ -64,7 +64,7 @@ fn split_columns4() {
         vec![Value::from(1_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &split_columns), expected);
+    assert_eq!(sql_to_sql(input, vec![], &split_columns), expected);
 }
 
 #[test]
@@ -79,5 +79,5 @@ fn split_columns5() {
         vec![Value::from(1_u64), Value::from(2_u64), Value::from(2_u64)],
     );
 
-    assert_eq!(sql_to_sql(input, &mut vec![], &split_columns), expected);
+    assert_eq!(sql_to_sql(input, vec![], &split_columns), expected);
 }