From 5817d059df82dcba839e0a8a3fa07cff6fd19423 Mon Sep 17 00:00:00 2001
From: Andrey Strochuk <a.strochuk@picodata.io>
Date: Mon, 9 Sep 2024 11:57:24 +0300
Subject: [PATCH] fix: clippy warnings

---
 sbroad-core/src/backend/sql/ir/tests.rs       |   1 -
 .../src/backend/sql/ir/tests/except.rs        |  11 -
 sbroad-core/src/backend/sql/space.rs          |   3 +-
 sbroad-core/src/backend/sql/tree/tests.rs     | 238 ------------------
 .../src/executor/engine/helpers/vshard.rs     |  18 +-
 sbroad-core/src/executor/ir.rs                |   2 +-
 sbroad-core/src/frontend/sql/ir.rs            |   8 +-
 sbroad-core/src/ir.rs                         | 107 +-------
 sbroad-core/src/ir/node.rs                    | 185 ++++++--------
 sbroad-core/src/ir/node/acl.rs                |  25 +-
 sbroad-core/src/ir/node/block.rs              |  13 +-
 sbroad-core/src/ir/node/ddl.rs                |  24 +-
 sbroad-core/src/ir/node/expression.rs         |  26 +-
 sbroad-core/src/ir/node/relational.rs         |  32 +--
 sbroad-core/src/ir/node/tests.rs              |  10 +
 sbroad-core/src/ir/node/util.rs               |  14 --
 sbroad-core/src/ir/operator.rs                |   6 +-
 sbroad-core/src/ir/transformation/helpers.rs  |   1 -
 18 files changed, 131 insertions(+), 593 deletions(-)
 delete mode 100644 sbroad-core/src/backend/sql/tree/tests.rs
 create mode 100644 sbroad-core/src/ir/node/tests.rs
 delete mode 100644 sbroad-core/src/ir/node/util.rs

diff --git a/sbroad-core/src/backend/sql/ir/tests.rs b/sbroad-core/src/backend/sql/ir/tests.rs
index 17f11775a..f699ec519 100644
--- a/sbroad-core/src/backend/sql/ir/tests.rs
+++ b/sbroad-core/src/backend/sql/ir/tests.rs
@@ -1,7 +1,6 @@
 use pretty_assertions::assert_eq;
 
 use crate::backend::sql::tree::{OrderedSyntaxNodes, SyntaxPlan};
-use crate::executor::bucket::Buckets;
 
 use crate::executor::ir::ExecutionPlan;
 
diff --git a/sbroad-core/src/backend/sql/ir/tests/except.rs b/sbroad-core/src/backend/sql/ir/tests/except.rs
index 83fffff38..2180d36f1 100644
--- a/sbroad-core/src/backend/sql/ir/tests/except.rs
+++ b/sbroad-core/src/backend/sql/ir/tests/except.rs
@@ -1,5 +1,4 @@
 use super::*;
-use crate::ir::node::*;
 use crate::ir::tree::Snapshot;
 use crate::ir::value::Value;
 
@@ -50,13 +49,3 @@ fn except1_oldest() {
     );
     check_sql_with_snapshot(query, vec![], expected, Snapshot::Oldest);
 }
-
-// TODO create test for size equals than 40(32) for 64, 96, 136
-#[test]
-fn test_node_size() {
-    assert!(std::mem::size_of::<Node32>() == 40);
-    assert!(std::mem::size_of::<Node64>() == 72);
-    assert!(std::mem::size_of::<Node96>() == 96);
-    assert!(std::mem::size_of::<Node136>() == 136);
-    assert!(std::mem::size_of::<Node224>() == 224);
-}
diff --git a/sbroad-core/src/backend/sql/space.rs b/sbroad-core/src/backend/sql/space.rs
index d6c40c502..38a548bf9 100644
--- a/sbroad-core/src/backend/sql/space.rs
+++ b/sbroad-core/src/backend/sql/space.rs
@@ -1,9 +1,10 @@
 use std::fmt::Debug;
 
+use crate::errors::SbroadError;
 use crate::executor::ir::ExecutionPlan;
 use crate::executor::protocol::VTablesMeta;
+use crate::ir::node::NodeId;
 use crate::ir::relation::SpaceEngine;
-use crate::{errors::SbroadError, ir::node::NodeId};
 
 #[cfg(not(feature = "mock"))]
 mod prod_imports {
diff --git a/sbroad-core/src/backend/sql/tree/tests.rs b/sbroad-core/src/backend/sql/tree/tests.rs
deleted file mode 100644
index e463b2934..000000000
--- a/sbroad-core/src/backend/sql/tree/tests.rs
+++ /dev/null
@@ -1,238 +0,0 @@
-use std::fs;
-use std::path::Path;
-
-use pretty_assertions::assert_eq;
-use smol_str::ToSmolStr;
-
-use crate::backend::sql::tree::{OrderedSyntaxNodes, SyntaxPlan};
-use crate::ir::operator::{Arithmetic, Bool, Unary};
-use crate::ir::relation::{SpaceEngine, Table, Type};
-use crate::ir::tests::sharding_column;
-use crate::ir::tree::Snapshot;
-use crate::ir::value::Value;
-use crate::ir::Plan;
-
-use super::*;
-use crate::ir::tests::{column_integer_user_non_null, column_user_non_null};
-
-#[test]
-fn sql_order_selection() {
-    // select a from t where a = 1
-
-    let mut plan = Plan::default();
-    let t = Table::new_sharded(
-        "t",
-        vec![column_user_non_null(SmolStr::from("a"), Type::Boolean)],
-        &["a"],
-        &["a"],
-        SpaceEngine::Memtx,
-    )
-    .unwrap();
-    plan.add_rel(t);
-    let scan_id = plan.add_scan("t", None).unwrap();
-
-    let a_id = plan.add_row_from_child(scan_id, &["a"]).unwrap();
-    let const_1 = plan.nodes.add_const(Value::from(1_u64));
-    let const_row = plan.nodes.add_row(vec![const_1], None);
-    let eq_id = plan.nodes.add_bool(a_id, Bool::Eq, const_row).unwrap();
-    let select_id = plan.add_select(&[scan_id], eq_id).unwrap();
-
-    let proj_id = plan.add_proj(select_id, &["a"], false, false).unwrap();
-    plan.set_top(proj_id).unwrap();
-
-    // check the plan
-    let path = Path::new("")
-        .join("tests")
-        .join("artifactory")
-        .join("backend")
-        .join("sql")
-        .join("tree")
-        .join("sql_order_selection.yaml");
-    let s = fs::read_to_string(path).unwrap();
-    let expected_plan = Plan::from_yaml(&s).unwrap();
-    // This field is not serialized, do not check it
-    plan.context = None;
-    assert_eq!(expected_plan, plan);
-    let exec_plan = ExecutionPlan::from(plan.clone());
-    let top_id = exec_plan.get_ir_plan().get_top().unwrap();
-
-    // test the syntax plan
-    let sp = SyntaxPlan::new(&exec_plan, top_id, Snapshot::Latest).unwrap();
-    let path = Path::new("")
-        .join("tests")
-        .join("artifactory")
-        .join("backend")
-        .join("sql")
-        .join("tree")
-        .join("sql_order_selection_syntax_nodes.yaml");
-    let s = fs::read_to_string(path).unwrap();
-    let expected_syntax_nodes: SyntaxNodes = serde_yaml::from_str(&s).unwrap();
-    assert_eq!(expected_syntax_nodes, sp.nodes);
-
-    let exec_plan = ExecutionPlan::from(plan);
-    let top_id = exec_plan.get_ir_plan().get_top().unwrap();
-
-    // get nodes in the sql-convenient order
-    let sp = SyntaxPlan::new(&exec_plan, top_id, Snapshot::Latest).unwrap();
-    let ordered = OrderedSyntaxNodes::try_from(sp).unwrap();
-    let nodes = ordered.to_syntax_data().unwrap();
-    let mut nodes_iter = nodes.into_iter();
-    assert_eq!(Some(&SyntaxData::PlanId(16)), nodes_iter.next()); // projection
-    assert_eq!(Some(&SyntaxData::PlanId(14)), nodes_iter.next()); // alias
-    assert_eq!(Some(&SyntaxData::PlanId(13)), nodes_iter.next()); // ref
-    assert_eq!(Some(&SyntaxData::From), nodes_iter.next()); // from
-    assert_eq!(Some(&SyntaxData::PlanId(3)), nodes_iter.next()); // scan
-    assert_eq!(Some(&SyntaxData::PlanId(12)), nodes_iter.next()); // selection
-    assert_eq!(Some(&SyntaxData::PlanId(5)), nodes_iter.next()); // row
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next()); // (
-    assert_eq!(Some(&SyntaxData::PlanId(4)), nodes_iter.next()); // ref a
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next()); // )
-    assert_eq!(Some(&SyntaxData::PlanId(8)), nodes_iter.next()); // bool
-    assert_eq!(Some(&SyntaxData::Operator("=".into())), nodes_iter.next()); // =
-    assert_eq!(Some(&SyntaxData::PlanId(7)), nodes_iter.next()); // row
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next()); // (
-    assert_eq!(Some(&SyntaxData::Parameter(6)), nodes_iter.next()); // parameter
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next()); // )
-    assert_eq!(None, nodes_iter.next());
-}
-
-#[test]
-fn sql_arbitrary_projection_plan() {
-    // select a + b > c and d is not null from t
-    let mut plan = Plan::default();
-    let t = Table::new_sharded(
-        "t",
-        vec![
-            column_integer_user_non_null(SmolStr::from("a")),
-            column_integer_user_non_null(SmolStr::from("b")),
-            column_integer_user_non_null(SmolStr::from("c")),
-            column_integer_user_non_null(SmolStr::from("d")),
-            sharding_column(),
-        ],
-        &["a"],
-        &["a"],
-        SpaceEngine::Memtx,
-    )
-    .unwrap();
-    plan.add_rel(t);
-    let scan_id = plan.add_scan("t", None).unwrap();
-    let a_id = plan.add_row_from_child(scan_id, &["a"]).unwrap();
-    let b_id = plan.add_row_from_child(scan_id, &["b"]).unwrap();
-    let c_id = plan.add_row_from_child(scan_id, &["c"]).unwrap();
-    let d_id = plan.add_row_from_child(scan_id, &["d"]).unwrap();
-
-    // a + b
-    let arith_addition_id = plan
-        .add_arithmetic_to_plan(a_id, Arithmetic::Add, b_id)
-        .unwrap();
-
-    // a + b > c
-    let gt_id = plan
-        .nodes
-        .add_bool(arith_addition_id, Bool::Gt, c_id)
-        .unwrap();
-
-    // d is not null
-    let is_null_id = plan.nodes.add_unary_bool(Unary::IsNull, d_id).unwrap();
-    let not_null_id = plan.nodes.add_unary_bool(Unary::Not, is_null_id).unwrap();
-
-    // a + b > c and d is not null
-    let and_id = plan.nodes.add_bool(gt_id, Bool::And, not_null_id).unwrap();
-    let alias_id = plan.nodes.add_alias("col_1", and_id).unwrap();
-
-    let proj_id = plan.add_proj_internal(scan_id, &[alias_id], false).unwrap();
-    plan.set_top(proj_id).unwrap();
-    // this field is not serialized, do not check it
-    plan.context = None;
-
-    // check the plan
-    let path = Path::new("")
-        .join("tests")
-        .join("artifactory")
-        .join("backend")
-        .join("sql")
-        .join("tree")
-        .join("arbitrary_projection_plan.yaml");
-    let s = fs::read_to_string(path).unwrap();
-    let expected_plan = Plan::from_yaml(&s).unwrap();
-    assert_eq!(expected_plan, plan);
-
-    let exec_plan = ExecutionPlan::from(plan.clone());
-    let top_id = exec_plan.get_ir_plan().get_top().unwrap();
-
-    // get nodes in the sql-convenient order
-    let sp = SyntaxPlan::new(&exec_plan, top_id, Snapshot::Latest).unwrap();
-    let ordered = OrderedSyntaxNodes::try_from(sp).unwrap();
-    let nodes = ordered.to_syntax_data().unwrap();
-    let mut nodes_iter = nodes.into_iter();
-
-    // projection
-    assert_eq!(Some(&SyntaxData::PlanId(27)), nodes_iter.next());
-    // row 12
-    assert_eq!(Some(&SyntaxData::PlanId(13)), nodes_iter.next());
-    // (
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next());
-    // ref a
-    assert_eq!(Some(&SyntaxData::PlanId(12)), nodes_iter.next());
-    // )
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next());
-    // arithmetic expression: [a] + [b]
-    assert_eq!(Some(&SyntaxData::PlanId(20)), nodes_iter.next());
-    // arithmetic operator Add (+)
-    assert_eq!(Some(&SyntaxData::Operator("+".into())), nodes_iter.next());
-    // row
-    assert_eq!(Some(&SyntaxData::PlanId(15)), nodes_iter.next());
-    // (
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next());
-    // ref b
-    assert_eq!(Some(&SyntaxData::PlanId(14)), nodes_iter.next());
-    // )
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next());
-    // bool expression gt: [a + b] > [c]
-    assert_eq!(Some(&SyntaxData::PlanId(21)), nodes_iter.next());
-    // bool operator Gt (>)
-    assert_eq!(Some(&SyntaxData::Operator(">".into())), nodes_iter.next());
-    // row
-    assert_eq!(Some(&SyntaxData::PlanId(17)), nodes_iter.next());
-    // (
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next());
-    // ref c
-    assert_eq!(Some(&SyntaxData::PlanId(16)), nodes_iter.next());
-    // )
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next());
-    // bool expression and: [a + b > c] and [d is not null]
-    assert_eq!(Some(&SyntaxData::PlanId(24)), nodes_iter.next());
-    // bool operator And (and)
-    assert_eq!(Some(&SyntaxData::Operator("and".into())), nodes_iter.next());
-    // unary operator Not (not)
-    assert_eq!(Some(&SyntaxData::Operator("not".into())), nodes_iter.next());
-    // unary expression not is null: not [d] is null 19
-    assert_eq!(Some(&SyntaxData::PlanId(23)), nodes_iter.next());
-    // row
-    assert_eq!(Some(&SyntaxData::PlanId(19)), nodes_iter.next());
-    // (
-    assert_eq!(Some(&SyntaxData::OpenParenthesis), nodes_iter.next());
-    // ref d
-    assert_eq!(Some(&SyntaxData::PlanId(18)), nodes_iter.next());
-    // )
-    assert_eq!(Some(&SyntaxData::CloseParenthesis), nodes_iter.next());
-    // unary expression is null: [d] is null
-    assert_eq!(Some(&SyntaxData::PlanId(22)), nodes_iter.next());
-    // unary operator IsNull (is null)
-    assert_eq!(
-        Some(&SyntaxData::Operator("is null".into())),
-        nodes_iter.next()
-    );
-    // alias
-    assert_eq!(Some(&SyntaxData::PlanId(25)), nodes_iter.next());
-    assert_eq!(
-        Some(&SyntaxData::Alias("col_1".to_smolstr())),
-        nodes_iter.next()
-    );
-    // from
-    assert_eq!(Some(&SyntaxData::From), nodes_iter.next());
-    // scan
-    assert_eq!(Some(&SyntaxData::PlanId(11)), nodes_iter.next());
-
-    assert_eq!(None, nodes_iter.next());
-}
diff --git a/sbroad-core/src/executor/engine/helpers/vshard.rs b/sbroad-core/src/executor/engine/helpers/vshard.rs
index d9d08730e..43aa83a90 100644
--- a/sbroad-core/src/executor/engine/helpers/vshard.rs
+++ b/sbroad-core/src/executor/engine/helpers/vshard.rs
@@ -12,6 +12,15 @@ use tarantool::{
     tlua::StringInLua,
 };
 
+use crate::ir::{
+    helpers::RepeatableState,
+    transformation::redistribution::{MotionOpcode, MotionPolicy},
+    tree::{
+        relation::RelationalIterator,
+        traversal::{LevelNode, PostOrderWithFilter, REL_CAPACITY},
+    },
+    Plan,
+};
 use crate::{
     executor::{
         engine::{helpers::build_optional_binary, ConvertToDispatchResult, DispatchReturnFormat},
@@ -24,15 +33,6 @@ use crate::{
     },
     otm::child_span,
 };
-use crate::ir::{
-        helpers::RepeatableState,
-        transformation::redistribution::{MotionOpcode, MotionPolicy},
-        tree::{
-            relation::RelationalIterator,
-            traversal::{LevelNode, PostOrderWithFilter, REL_CAPACITY},
-        },
-        Plan,
-    };
 use ahash::AHashMap;
 use rand::{thread_rng, Rng};
 use sbroad_proc::otm_child_span;
diff --git a/sbroad-core/src/executor/ir.rs b/sbroad-core/src/executor/ir.rs
index d8f23c5e4..0a3272fde 100644
--- a/sbroad-core/src/executor/ir.rs
+++ b/sbroad-core/src/executor/ir.rs
@@ -477,7 +477,7 @@ impl ExecutionPlan {
 
             // Replace the node with some invalid value.
             let mut node: NodeOwned = if cte_ids.contains(&node_id) {
-                mut_plan.get_mut_node(node_id)?.get_common_node()
+                mut_plan.get_node(node_id)?.get_common_node()
             } else {
                 mut_plan.replace_with_stub(node_id)
             };
diff --git a/sbroad-core/src/frontend/sql/ir.rs b/sbroad-core/src/frontend/sql/ir.rs
index 96187f2ef..e6e705c26 100644
--- a/sbroad-core/src/frontend/sql/ir.rs
+++ b/sbroad-core/src/frontend/sql/ir.rs
@@ -13,8 +13,8 @@ use crate::ir::node::relational::{MutRelational, RelOwned, Relational};
 use crate::ir::node::{
     Alias, ArenaType, ArithmeticExpr, BoolExpr, Case, Cast, Concat, Constant, Delete, Except,
     ExprInParentheses, GroupBy, Having, Insert, Intersect, Join, Limit, Motion, MutNode, Node,
-    NodeId, OrderBy, Projection, Reference, Row, ScanCte, ScanRelation, ScanSubQuery, Selection,
-    SizeNode, StableFunction, Trim, UnaryExpr, Union, UnionAll, Update, Values, ValuesRow,
+    NodeAligned, NodeId, OrderBy, Projection, Reference, Row, ScanCte, ScanRelation, ScanSubQuery,
+    Selection, StableFunction, Trim, UnaryExpr, Union, UnionAll, Update, Values, ValuesRow,
 };
 use crate::ir::operator::{OrderByElement, OrderByEntity};
 use crate::ir::transformation::redistribution::MotionOpcode;
@@ -347,7 +347,7 @@ impl Plan {
         let nodes = subtree.take_nodes();
         let mut map = CloneExprSubtreeMap::with_capacity(nodes.len());
         for LevelNode(_, id) in nodes {
-            let mut expr = self.get_mut_expression_node(id)?.get_expr_owned();
+            let mut expr = self.get_expression_node(id)?.get_expr_owned();
             match expr {
                 ExprOwned::Constant { .. }
                 | ExprOwned::Reference { .. }
@@ -768,7 +768,7 @@ impl SubtreeCloner {
         drop(dfs);
         for LevelNode(_, id) in nodes {
             let node = plan.get_node(id)?;
-            let new_node: SizeNode = match node {
+            let new_node: NodeAligned = match node {
                 Node::Relational(rel) => self.clone_relational(&rel, id)?.into(),
                 Node::Expression(expr) => self.clone_expression(&expr)?.into(),
                 _ => {
diff --git a/sbroad-core/src/ir.rs b/sbroad-core/src/ir.rs
index 9f1ad55fa..765399f43 100644
--- a/sbroad-core/src/ir.rs
+++ b/sbroad-core/src/ir.rs
@@ -7,7 +7,7 @@ use node::block::{Block, MutBlock};
 use node::ddl::{Ddl, MutDdl};
 use node::expression::{Expression, MutExpression};
 use node::relational::{MutRelational, Relational};
-use node::{Invalid, Parameter, SizeNode};
+use node::{Invalid, NodeAligned, Parameter};
 use serde::{Deserialize, Serialize};
 use smol_str::{format_smolstr, SmolStr, ToSmolStr};
 use std::cell::{RefCell, RefMut};
@@ -366,11 +366,6 @@ impl Nodes {
             && self.arena224.is_empty()
     }
 
-    // #[must_use]
-    // pub fn len(&self) -> usize {
-    //     self.arena.len()
-    // }
-
     pub fn iter32(&self) -> Iter<'_, Node32> {
         self.arena32.iter()
     }
@@ -397,9 +392,9 @@ impl Nodes {
     /// # Panics
     /// Inserts a new node to the arena and returns its position,
     /// that is treated as a pointer.
-    pub fn push(&mut self, node: SizeNode) -> NodeId {
+    pub fn push(&mut self, node: NodeAligned) -> NodeId {
         match node {
-            SizeNode::Node32(node32) => {
+            NodeAligned::Node32(node32) => {
                 let new_node_id = NodeId {
                     offset: u32::try_from(self.arena32.len()).unwrap(),
                     arena_type: ArenaType::Arena32,
@@ -409,7 +404,7 @@ impl Nodes {
 
                 new_node_id
             }
-            SizeNode::Node64(node64) => {
+            NodeAligned::Node64(node64) => {
                 let new_node_id = NodeId {
                     offset: u32::try_from(self.arena64.len()).unwrap(),
                     arena_type: ArenaType::Arena64,
@@ -419,7 +414,7 @@ impl Nodes {
 
                 new_node_id
             }
-            SizeNode::Node96(node96) => {
+            NodeAligned::Node96(node96) => {
                 let new_node_id = NodeId {
                     offset: u32::try_from(self.arena96.len()).unwrap(),
                     arena_type: ArenaType::Arena96,
@@ -429,7 +424,7 @@ impl Nodes {
 
                 new_node_id
             }
-            SizeNode::Node136(node136) => {
+            NodeAligned::Node136(node136) => {
                 let new_node_id = NodeId {
                     offset: u32::try_from(self.arena136.len()).unwrap(),
                     arena_type: ArenaType::Arena136,
@@ -439,7 +434,7 @@ impl Nodes {
 
                 new_node_id
             }
-            SizeNode::Node224(node224) => {
+            NodeAligned::Node224(node224) => {
                 let new_node_id = NodeId {
                     offset: u32::try_from(self.arena224.len()).unwrap(),
                     arena_type: ArenaType::Arena224,
@@ -480,14 +475,6 @@ impl Nodes {
     }
 }
 
-// impl<'nodes> IntoIterator for &'nodes Nodes {
-//     type Item = &'nodes Node;
-//     type IntoIter = Iter<'nodes, Node>;
-//     fn into_iter(self) -> Self::IntoIter {
-//         self.iter()
-//     }
-// }
-
 /// One level of `Slices`.
 /// Element of `slice` vec is a `motion_id` to execute.
 #[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
@@ -807,76 +794,6 @@ impl Plan {
         self.relations.insert(table);
     }
 
-    /// Check that plan tree is valid.
-    ///
-    /// # Errors
-    /// Returns `SbroadError` when the plan tree check fails.
-    pub fn check(&self) -> Result<(), SbroadError> {
-        let _ = match self.top {
-            None => {
-                return Err(SbroadError::Invalid(
-                    Entity::Plan,
-                    Some("plan tree top is None".into()),
-                ))
-            }
-            Some(top) => match top.arena_type {
-                ArenaType::Arena32 => {
-                    let top_node = self.nodes.arena32.get(top.offset as usize);
-                    match top_node {
-                        Some(_) => Ok(()),
-                        None => Err(SbroadError::Invalid(
-                            Entity::Plan,
-                            Some("plan tree top index is out of bounds".into()),
-                        )),
-                    }
-                }
-                ArenaType::Arena64 => {
-                    let top_node = self.nodes.arena64.get(top.offset as usize);
-                    match top_node {
-                        Some(_) => Ok(()),
-                        None => Err(SbroadError::Invalid(
-                            Entity::Plan,
-                            Some("plan tree top index is out of bounds".into()),
-                        )),
-                    }
-                }
-                ArenaType::Arena96 => {
-                    let top_node = self.nodes.arena96.get(top.offset as usize);
-                    match top_node {
-                        Some(_) => Ok(()),
-                        None => Err(SbroadError::Invalid(
-                            Entity::Plan,
-                            Some("plan tree top index is out of bounds".into()),
-                        )),
-                    }
-                }
-                ArenaType::Arena136 => {
-                    let top_node = self.nodes.arena136.get(top.offset as usize);
-                    match top_node {
-                        Some(_) => Ok(()),
-                        None => Err(SbroadError::Invalid(
-                            Entity::Plan,
-                            Some("plan tree top index is out of bounds".into()),
-                        )),
-                    }
-                }
-                ArenaType::Arena224 => {
-                    let top_node = self.nodes.arena224.get(top.offset as usize);
-                    match top_node {
-                        Some(_) => Ok(()),
-                        None => Err(SbroadError::Invalid(
-                            Entity::Plan,
-                            Some("plan tree top index is out of bounds".into()),
-                        )),
-                    }
-                }
-            },
-        };
-
-        Ok(())
-        //TODO: additional consistency checks
-    }
-
     /// # Panics
     #[must_use]
     pub fn replace_with_stub(&mut self, dst_id: NodeId) -> NodeOwned {
@@ -889,7 +806,7 @@ impl Plan {
                     .unwrap();
                 let stub = Node32::Invalid(Invalid {});
                 let node32 = std::mem::replace(node32, stub);
-                node32.into_common_node()
+                node32.into_owned()
             }
             ArenaType::Arena64 => {
                 let node64 = self
@@ -899,7 +816,7 @@ impl Plan {
                     .unwrap();
                 let stub = Node64::Parameter(Parameter { param_type: None });
                 let node64 = std::mem::replace(node64, stub);
-                node64.into_common_node()
+                node64.into_owned()
             }
             ArenaType::Arena96 => {
                 let node96 = self
@@ -909,7 +826,7 @@ impl Plan {
                     .unwrap();
                 let stub = Node96::Invalid(Invalid {});
                 let node96 = std::mem::replace(node96, stub);
-                node96.into_common_node()
+                node96.into_owned()
             }
             ArenaType::Arena136 => {
                 let node136 = self
@@ -919,7 +836,7 @@ impl Plan {
                     .unwrap();
                 let stub = Node136::Invalid(Invalid {});
                 let node136 = std::mem::replace(node136, stub);
-                node136.into_common_node()
+                node136.into_owned()
             }
             ArenaType::Arena224 => {
                 let node224 = self
@@ -929,7 +846,7 @@ impl Plan {
                     .unwrap();
                 let stub = Node224::Invalid(Invalid {});
                 let node224 = std::mem::replace(node224, stub);
-                node224.into_common_node()
+                node224.into_owned()
             }
         }
     }
diff --git a/sbroad-core/src/ir/node.rs b/sbroad-core/src/ir/node.rs
index fd93c2aeb..4d8dcf638 100644
--- a/sbroad-core/src/ir/node.rs
+++ b/sbroad-core/src/ir/node.rs
@@ -13,17 +13,14 @@ use tarantool::{
     space::SpaceEngineType,
 };
 
-use crate::{
-    errors::SbroadError,
-    ir::{
-        acl::{AlterOption, GrantRevokeType},
-        ddl::{ColumnDef, Language, ParamDef, SetParamScopeType, SetParamValue},
-        distribution::Distribution,
-        helpers::RepeatableState,
-        relation::Type,
-        transformation::redistribution::{ColumnPosition, MotionPolicy, Program},
-        value::Value,
-    },
+use crate::ir::{
+    acl::{AlterOption, GrantRevokeType},
+    ddl::{ColumnDef, Language, ParamDef, SetParamScopeType, SetParamValue},
+    distribution::Distribution,
+    helpers::RepeatableState,
+    relation::Type,
+    transformation::redistribution::{ColumnPosition, MotionPolicy, Program},
+    value::Value,
 };
 
 use super::{
@@ -102,7 +99,7 @@ pub struct Alias {
     pub child: NodeId,
 }
 
-impl From<Alias> for SizeNode {
+impl From<Alias> for NodeAligned {
     fn from(value: Alias) -> Self {
         Self::Node32(Node32::Alias(value))
     }
@@ -121,7 +118,7 @@ pub struct BoolExpr {
     pub right: NodeId,
 }
 
-impl From<BoolExpr> for SizeNode {
+impl From<BoolExpr> for NodeAligned {
     fn from(value: BoolExpr) -> Self {
         Self::Node32(Node32::Bool(value))
     }
@@ -142,7 +139,7 @@ pub struct ArithmeticExpr {
     pub right: NodeId,
 }
 
-impl From<ArithmeticExpr> for SizeNode {
+impl From<ArithmeticExpr> for NodeAligned {
     fn from(value: ArithmeticExpr) -> Self {
         Self::Node32(Node32::Arithmetic(value))
     }
@@ -159,7 +156,7 @@ pub struct Cast {
     pub to: cast::Type,
 }
 
-impl From<Cast> for SizeNode {
+impl From<Cast> for NodeAligned {
     fn from(value: Cast) -> Self {
         Self::Node32(Node32::Cast(value))
     }
@@ -176,7 +173,7 @@ pub struct Concat {
     pub right: NodeId,
 }
 
-impl From<Concat> for SizeNode {
+impl From<Concat> for NodeAligned {
     fn from(value: Concat) -> Self {
         Self::Node32(Node32::Concat(value))
     }
@@ -191,7 +188,7 @@ pub struct Constant {
     pub value: Value,
 }
 
-impl From<Constant> for SizeNode {
+impl From<Constant> for NodeAligned {
     fn from(value: Constant) -> Self {
         Self::Node64(Node64::Constant(value))
     }
@@ -217,7 +214,7 @@ pub struct Reference {
     pub col_type: Type,
 }
 
-impl From<Reference> for SizeNode {
+impl From<Reference> for NodeAligned {
     fn from(value: Reference) -> Self {
         Self::Node64(Node64::Reference(value))
     }
@@ -240,7 +237,7 @@ pub struct Row {
     pub distribution: Option<Distribution>,
 }
 
-impl From<Row> for SizeNode {
+impl From<Row> for NodeAligned {
     fn from(value: Row) -> Self {
         Self::Node64(Node64::Row(value))
     }
@@ -270,7 +267,7 @@ pub struct StableFunction {
     pub is_system: bool,
 }
 
-impl From<StableFunction> for SizeNode {
+impl From<StableFunction> for NodeAligned {
     fn from(value: StableFunction) -> Self {
         Self::Node96(Node96::StableFunction(value))
     }
@@ -287,7 +284,7 @@ pub struct Trim {
     pub target: NodeId,
 }
 
-impl From<Trim> for SizeNode {
+impl From<Trim> for NodeAligned {
     fn from(value: Trim) -> Self {
         Self::Node32(Node32::Trim(value))
     }
@@ -302,7 +299,7 @@ pub struct UnaryExpr {
     pub child: NodeId,
 }
 
-impl From<UnaryExpr> for SizeNode {
+impl From<UnaryExpr> for NodeAligned {
     fn from(value: UnaryExpr) -> Self {
         Self::Node32(Node32::Unary(value))
     }
@@ -313,7 +310,7 @@ pub struct ExprInParentheses {
     pub child: NodeId,
 }
 
-impl From<ExprInParentheses> for SizeNode {
+impl From<ExprInParentheses> for NodeAligned {
     fn from(value: ExprInParentheses) -> Self {
         Self::Node32(Node32::ExprInParentheses(value))
     }
@@ -326,7 +323,7 @@ pub struct Case {
     pub else_expr: Option<NodeId>,
 }
 
-impl From<Case> for SizeNode {
+impl From<Case> for NodeAligned {
     fn from(value: Case) -> Self {
         Self::Node64(Node64::Case(value))
     }
@@ -337,7 +334,7 @@ pub struct Parameter {
     pub param_type: Option<Type>,
 }
 
-impl From<Parameter> for SizeNode {
+impl From<Parameter> for NodeAligned {
     fn from(value: Parameter) -> Self {
         Self::Node64(Node64::Parameter(value))
     }
@@ -346,7 +343,7 @@ impl From<Parameter> for SizeNode {
 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
 pub struct CountAsterisk {}
 
-impl From<CountAsterisk> for SizeNode {
+impl From<CountAsterisk> for NodeAligned {
     fn from(value: CountAsterisk) -> Self {
         Self::Node32(Node32::CountAsterisk(value))
     }
@@ -362,7 +359,7 @@ pub struct ScanCte {
     pub output: NodeId,
 }
 
-impl From<ScanCte> for SizeNode {
+impl From<ScanCte> for NodeAligned {
     fn from(value: ScanCte) -> Self {
         Self::Node64(Node64::ScanCte(value))
     }
@@ -378,7 +375,7 @@ pub struct Except {
     pub output: NodeId,
 }
 
-impl From<Except> for SizeNode {
+impl From<Except> for NodeAligned {
     fn from(value: Except) -> Self {
         Self::Node32(Node32::Except(value))
     }
@@ -394,7 +391,7 @@ pub struct Delete {
     pub output: NodeId,
 }
 
-impl From<Delete> for SizeNode {
+impl From<Delete> for NodeAligned {
     fn from(value: Delete) -> Self {
         Self::Node64(Node64::Delete(value))
     }
@@ -415,7 +412,7 @@ pub struct Insert {
     pub conflict_strategy: ConflictStrategy,
 }
 
-impl From<Insert> for SizeNode {
+impl From<Insert> for NodeAligned {
     fn from(value: Insert) -> Self {
         Self::Node96(Node96::Insert(value))
     }
@@ -429,7 +426,7 @@ pub struct Intersect {
     pub output: NodeId,
 }
 
-impl From<Intersect> for SizeNode {
+impl From<Intersect> for NodeAligned {
     fn from(value: Intersect) -> Self {
         Self::Node32(Node32::Intersect(value))
     }
@@ -456,7 +453,7 @@ pub struct Update {
     pub output: NodeId,
 }
 
-impl From<Update> for SizeNode {
+impl From<Update> for NodeAligned {
     fn from(value: Update) -> Self {
         Self::Node136(Node136::Update(value))
     }
@@ -477,7 +474,7 @@ pub struct Join {
     pub kind: JoinKind,
 }
 
-impl From<Join> for SizeNode {
+impl From<Join> for NodeAligned {
     fn from(value: Join) -> Self {
         Self::Node64(Node64::Join(value))
     }
@@ -495,7 +492,7 @@ pub struct Limit {
     pub child: NodeId,
 }
 
-impl From<Limit> for SizeNode {
+impl From<Limit> for NodeAligned {
     fn from(value: Limit) -> Self {
         Self::Node32(Node32::Limit(value))
     }
@@ -522,7 +519,7 @@ pub struct Motion {
     pub is_child_subquery: bool,
 }
 
-impl From<Motion> for SizeNode {
+impl From<Motion> for NodeAligned {
     fn from(value: Motion) -> Self {
         Self::Node136(Node136::Motion(value))
     }
@@ -541,7 +538,7 @@ pub struct Projection {
     pub is_distinct: bool,
 }
 
-impl From<Projection> for SizeNode {
+impl From<Projection> for NodeAligned {
     fn from(value: Projection) -> Self {
         Self::Node64(Node64::Projection(value))
     }
@@ -557,7 +554,7 @@ pub struct ScanRelation {
     pub relation: SmolStr,
 }
 
-impl From<ScanRelation> for SizeNode {
+impl From<ScanRelation> for NodeAligned {
     fn from(value: ScanRelation) -> Self {
         Self::Node64(Node64::ScanRelation(value))
     }
@@ -574,7 +571,7 @@ pub struct ScanSubQuery {
     pub output: NodeId,
 }
 
-impl From<ScanSubQuery> for SizeNode {
+impl From<ScanSubQuery> for NodeAligned {
     fn from(value: ScanSubQuery) -> Self {
         Self::Node64(Node64::ScanSubQuery(value))
     }
@@ -593,7 +590,7 @@ pub struct Selection {
     pub output: NodeId,
 }
 
-impl From<Selection> for SizeNode {
+impl From<Selection> for NodeAligned {
     fn from(value: Selection) -> Self {
         Self::Node64(Node64::Selection(value))
     }
@@ -608,7 +605,7 @@ pub struct GroupBy {
     pub is_final: bool,
 }
 
-impl From<GroupBy> for SizeNode {
+impl From<GroupBy> for NodeAligned {
     fn from(value: GroupBy) -> Self {
         Self::Node64(Node64::GroupBy(value))
     }
@@ -621,7 +618,7 @@ pub struct Having {
     pub filter: NodeId,
 }
 
-impl From<Having> for SizeNode {
+impl From<Having> for NodeAligned {
     fn from(value: Having) -> Self {
         Self::Node64(Node64::Having(value))
     }
@@ -634,7 +631,7 @@ pub struct OrderBy {
     pub order_by_elements: Vec<OrderByElement>,
 }
 
-impl From<OrderBy> for SizeNode {
+impl From<OrderBy> for NodeAligned {
     fn from(value: OrderBy) -> Self {
         Self::Node64(Node64::OrderBy(value))
     }
@@ -650,7 +647,7 @@ pub struct UnionAll {
     pub output: NodeId,
 }
 
-impl From<UnionAll> for SizeNode {
+impl From<UnionAll> for NodeAligned {
     fn from(value: UnionAll) -> Self {
         Self::Node32(Node32::UnionAll(value))
     }
@@ -664,7 +661,7 @@ pub struct Values {
     pub children: Vec<NodeId>,
 }
 
-impl From<Values> for SizeNode {
+impl From<Values> for NodeAligned {
     fn from(value: Values) -> Self {
         Self::Node32(Node32::Values(value))
     }
@@ -684,7 +681,7 @@ pub struct ValuesRow {
     pub children: Vec<NodeId>,
 }
 
-impl From<ValuesRow> for SizeNode {
+impl From<ValuesRow> for NodeAligned {
     fn from(value: ValuesRow) -> Self {
         Self::Node64(Node64::ValuesRow(value))
     }
@@ -696,7 +693,7 @@ pub struct DropRole {
     pub timeout: Decimal,
 }
 
-impl From<DropRole> for SizeNode {
+impl From<DropRole> for NodeAligned {
     fn from(value: DropRole) -> Self {
         Self::Node64(Node64::DropRole(value))
     }
@@ -708,7 +705,7 @@ pub struct DropUser {
     pub timeout: Decimal,
 }
 
-impl From<DropUser> for SizeNode {
+impl From<DropUser> for NodeAligned {
     fn from(value: DropUser) -> Self {
         Self::Node64(Node64::DropUser(value))
     }
@@ -720,7 +717,7 @@ pub struct CreateRole {
     pub timeout: Decimal,
 }
 
-impl From<CreateRole> for SizeNode {
+impl From<CreateRole> for NodeAligned {
     fn from(value: CreateRole) -> Self {
         Self::Node64(Node64::CreateRole(value))
     }
@@ -734,7 +731,7 @@ pub struct CreateUser {
     pub timeout: Decimal,
 }
 
-impl From<CreateUser> for SizeNode {
+impl From<CreateUser> for NodeAligned {
     fn from(value: CreateUser) -> Self {
         Self::Node136(Node136::CreateUser(value))
     }
@@ -747,7 +744,7 @@ pub struct AlterUser {
     pub timeout: Decimal,
 }
 
-impl From<AlterUser> for SizeNode {
+impl From<AlterUser> for NodeAligned {
     fn from(value: AlterUser) -> Self {
         Self::Node136(Node136::AlterUser(value))
     }
@@ -760,7 +757,7 @@ pub struct GrantPrivilege {
     pub timeout: Decimal,
 }
 
-impl From<GrantPrivilege> for SizeNode {
+impl From<GrantPrivilege> for NodeAligned {
     fn from(value: GrantPrivilege) -> Self {
         Self::Node136(Node136::GrantPrivilege(value))
     }
@@ -773,7 +770,7 @@ pub struct RevokePrivilege {
     pub timeout: Decimal,
 }
 
-impl From<RevokePrivilege> for SizeNode {
+impl From<RevokePrivilege> for NodeAligned {
     fn from(value: RevokePrivilege) -> Self {
         Self::Node136(Node136::RevokePrivilege(value))
     }
@@ -797,7 +794,7 @@ pub struct CreateTable {
     pub tier: Option<SmolStr>,
 }
 
-impl From<CreateTable> for SizeNode {
+impl From<CreateTable> for NodeAligned {
     fn from(value: CreateTable) -> Self {
         Self::Node224(Node224::CreateTable(value))
     }
@@ -809,7 +806,7 @@ pub struct DropTable {
     pub timeout: Decimal,
 }
 
-impl From<DropTable> for SizeNode {
+impl From<DropTable> for NodeAligned {
     fn from(value: DropTable) -> Self {
         Self::Node64(Node64::DropTable(value))
     }
@@ -824,7 +821,7 @@ pub struct CreateProc {
     pub timeout: Decimal,
 }
 
-impl From<CreateProc> for SizeNode {
+impl From<CreateProc> for NodeAligned {
     fn from(value: CreateProc) -> Self {
         Self::Node136(Node136::CreateProc(value))
     }
@@ -837,7 +834,7 @@ pub struct DropProc {
     pub timeout: Decimal,
 }
 
-impl From<DropProc> for SizeNode {
+impl From<DropProc> for NodeAligned {
     fn from(value: DropProc) -> Self {
         Self::Node96(Node96::DropProc(value))
     }
@@ -851,7 +848,7 @@ pub struct RenameRoutine {
     pub timeout: Decimal,
 }
 
-impl From<RenameRoutine> for SizeNode {
+impl From<RenameRoutine> for NodeAligned {
     fn from(value: RenameRoutine) -> Self {
         Self::Node136(Node136::RenameRoutine(value))
     }
@@ -875,7 +872,7 @@ pub struct CreateIndex {
     pub timeout: Decimal,
 }
 
-impl From<CreateIndex> for SizeNode {
+impl From<CreateIndex> for NodeAligned {
     fn from(value: CreateIndex) -> Self {
         Self::Node224(Node224::CreateIndex(value))
     }
@@ -887,7 +884,7 @@ pub struct DropIndex {
     pub timeout: Decimal,
 }
 
-impl From<DropIndex> for SizeNode {
+impl From<DropIndex> for NodeAligned {
     fn from(value: DropIndex) -> Self {
         Self::Node64(Node64::DropIndex(value))
     }
@@ -909,13 +906,13 @@ pub struct AlterSystem {
     pub timeout: Decimal,
 }
 
-impl From<AlterSystem> for SizeNode {
+impl From<AlterSystem> for NodeAligned {
     fn from(value: AlterSystem) -> Self {
         Self::Node136(Node136::AlterSystem(value))
     }
 }
 
-impl From<SetParam> for SizeNode {
+impl From<SetParam> for NodeAligned {
     fn from(value: SetParam) -> Self {
         Self::Node64(Node64::SetParam(value))
     }
@@ -927,7 +924,7 @@ pub struct SetTransaction {
     pub timeout: Decimal,
 }
 
-impl From<SetTransaction> for SizeNode {
+impl From<SetTransaction> for NodeAligned {
     fn from(value: SetTransaction) -> Self {
         Self::Node64(Node64::SetTransaction(value))
     }
@@ -936,7 +933,7 @@ impl From<SetTransaction> for SizeNode {
 #[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)]
 pub struct Invalid;
 
-impl From<Invalid> for SizeNode {
+impl From<Invalid> for NodeAligned {
     fn from(value: Invalid) -> Self {
         Self::Node32(Node32::Invalid(value))
     }
@@ -951,7 +948,7 @@ pub struct Procedure {
     pub values: Vec<NodeId>,
 }
 
-impl From<Procedure> for SizeNode {
+impl From<Procedure> for NodeAligned {
     fn from(value: Procedure) -> Self {
         Self::Node64(Node64::Procedure(value))
     }
@@ -967,7 +964,7 @@ pub struct Union {
     pub output: NodeId,
 }
 
-impl From<Union> for SizeNode {
+impl From<Union> for NodeAligned {
     fn from(value: Union) -> Self {
         Self::Node32(Node32::Union(value))
     }
@@ -994,16 +991,9 @@ pub enum Node32 {
     Values(Values),
 }
 
-const _: () = {
-    assert!(std::mem::size_of::<Node32>() == 40);
-    assert!(std::mem::size_of::<Node64>() == 72);
-    assert!(std::mem::size_of::<Node96>() == 96);
-    assert!(std::mem::size_of::<Node136>() == 136);
-    assert!(std::mem::size_of::<Node224>() == 224);
-};
 impl Node32 {
     #[must_use]
-    pub fn into_common_node(self) -> NodeOwned {
+    pub fn into_owned(self) -> NodeOwned {
         match self {
             Node32::Alias(alias) => NodeOwned::Expression(ExprOwned::Alias(alias)),
             Node32::Arithmetic(arithm) => NodeOwned::Expression(ExprOwned::Arithmetic(arithm)),
@@ -1057,17 +1047,8 @@ pub enum Node64 {
 }
 
 impl Node64 {
-    /// # Errors
-    pub fn into_expr_node(&self) -> Result<Expression<'_>, SbroadError> {
-        match self {
-            Node64::Case(case) => Ok(Expression::Case(case)),
-            Node64::Constant(constant) => Ok(Expression::Constant(constant)),
-            _ => Err(SbroadError::Invalid(crate::errors::Entity::Node, None)),
-        }
-    }
-
     #[must_use]
-    pub fn into_common_node(self) -> NodeOwned {
+    pub fn into_owned(self) -> NodeOwned {
         match self {
             Node64::Case(case) => NodeOwned::Expression(ExprOwned::Case(case)),
             Node64::Constant(constant) => NodeOwned::Expression(ExprOwned::Constant(constant)),
@@ -1114,7 +1095,7 @@ pub enum Node96 {
 
 impl Node96 {
     #[must_use]
-    pub fn into_common_node(self) -> NodeOwned {
+    pub fn into_owned(self) -> NodeOwned {
         match self {
             Node96::DropProc(drop_proc) => NodeOwned::Ddl(DdlOwned::DropProc(drop_proc)),
             Node96::Insert(insert) => NodeOwned::Relational(RelOwned::Insert(insert)),
@@ -1143,7 +1124,7 @@ pub enum Node136 {
 
 impl Node136 {
     #[must_use]
-    pub fn into_common_node(self) -> NodeOwned {
+    pub fn into_owned(self) -> NodeOwned {
         match self {
             Node136::AlterUser(alter_user) => NodeOwned::Acl(AclOwned::AlterUser(alter_user)),
             Node136::AlterSystem(alter_system) => {
@@ -1177,7 +1158,7 @@ pub enum Node224 {
 
 impl Node224 {
     #[must_use]
-    pub fn into_common_node(self) -> NodeOwned {
+    pub fn into_owned(self) -> NodeOwned {
         match self {
             Node224::CreateTable(create_table) => {
                 NodeOwned::Ddl(DdlOwned::CreateTable(create_table))
@@ -1191,7 +1172,7 @@ impl Node224 {
 }
 
 #[allow(clippy::module_name_repetitions)]
-pub enum SizeNode {
+pub enum NodeAligned {
     Node32(Node32),
     Node64(Node64),
     Node96(Node96),
@@ -1199,31 +1180,31 @@ pub enum SizeNode {
     Node224(Node224),
 }
 
-impl From<Node32> for SizeNode {
+impl From<Node32> for NodeAligned {
     fn from(value: Node32) -> Self {
         Self::Node32(value)
     }
 }
 
-impl From<Node64> for SizeNode {
+impl From<Node64> for NodeAligned {
     fn from(value: Node64) -> Self {
         Self::Node64(value)
     }
 }
 
-impl From<Node96> for SizeNode {
+impl From<Node96> for NodeAligned {
     fn from(value: Node96) -> Self {
         Self::Node96(value)
     }
 }
 
-impl From<Node136> for SizeNode {
+impl From<Node136> for NodeAligned {
     fn from(value: Node136) -> Self {
         Self::Node136(value)
     }
 }
 
-impl From<Node224> for SizeNode {
+impl From<Node224> for NodeAligned {
     fn from(value: Node224) -> Self {
         Self::Node224(value)
     }
@@ -1252,21 +1233,6 @@ pub enum MutNode<'nodes> {
     Invalid(&'nodes mut Invalid),
 }
 
-impl MutNode<'_> {
-    #[must_use]
-    pub fn get_common_node(self) -> NodeOwned {
-        match self {
-            MutNode::Expression(expr) => NodeOwned::Expression(expr.get_expr_owned()),
-            MutNode::Relational(rel) => NodeOwned::Relational(rel.get_rel_owned()),
-            MutNode::Ddl(ddl) => NodeOwned::Ddl(ddl.get_ddl_owned()),
-            MutNode::Acl(acl) => NodeOwned::Acl(acl.get_acl_owned()),
-            MutNode::Block(block) => NodeOwned::Block(block.get_block_owned()),
-            MutNode::Parameter(param) => NodeOwned::Parameter((*param).clone()),
-            MutNode::Invalid(inv) => NodeOwned::Invalid((*inv).clone()),
-        }
-    }
-}
-
 impl Node<'_> {
     #[must_use]
     pub fn get_common_node(self) -> NodeOwned {
@@ -1295,7 +1261,7 @@ pub enum NodeOwned {
     Invalid(Invalid),
 }
 
-impl From<NodeOwned> for SizeNode {
+impl From<NodeOwned> for NodeAligned {
     fn from(value: NodeOwned) -> Self {
         match value {
             NodeOwned::Acl(acl) => acl.into(),
@@ -1308,3 +1274,6 @@ impl From<NodeOwned> for SizeNode {
         }
     }
 }
+
+#[cfg(test)]
+mod tests;
diff --git a/sbroad-core/src/ir/node/acl.rs b/sbroad-core/src/ir/node/acl.rs
index 932414fcf..430f89458 100644
--- a/sbroad-core/src/ir/node/acl.rs
+++ b/sbroad-core/src/ir/node/acl.rs
@@ -4,8 +4,8 @@ use smol_str::{format_smolstr, ToSmolStr};
 use crate::errors::{Entity, SbroadError};
 
 use super::{
-    AlterUser, CreateRole, CreateUser, DropRole, DropUser, GrantPrivilege, RevokePrivilege,
-    SizeNode,
+    AlterUser, CreateRole, CreateUser, DropRole, DropUser, GrantPrivilege, NodeAligned,
+    RevokePrivilege,
 };
 
 #[allow(clippy::module_name_repetitions)]
@@ -46,7 +46,7 @@ impl AclOwned {
     }
 }
 
-impl From<AclOwned> for SizeNode {
+impl From<AclOwned> for NodeAligned {
     fn from(value: AclOwned) -> Self {
         match value {
             AclOwned::AlterUser(alter_user) => alter_user.into(),
@@ -72,25 +72,6 @@ pub enum MutAcl<'a> {
     RevokePrivilege(&'a mut RevokePrivilege),
 }
 
-impl MutAcl<'_> {
-    #[must_use]
-    pub fn get_acl_owned(&self) -> AclOwned {
-        match self {
-            MutAcl::AlterUser(alter_user) => AclOwned::AlterUser((*alter_user).clone()),
-            MutAcl::CreateRole(create_role) => AclOwned::CreateRole((*create_role).clone()),
-            MutAcl::CreateUser(create_user) => AclOwned::CreateUser((*create_user).clone()),
-            MutAcl::DropRole(drop_role) => AclOwned::DropRole((*drop_role).clone()),
-            MutAcl::DropUser(drop_user) => AclOwned::DropUser((*drop_user).clone()),
-            MutAcl::GrantPrivilege(grant_privelege) => {
-                AclOwned::GrantPrivilege((*grant_privelege).clone())
-            }
-            MutAcl::RevokePrivilege(revoke_privelege) => {
-                AclOwned::RevokePrivilege((*revoke_privelege).clone())
-            }
-        }
-    }
-}
-
 #[allow(clippy::module_name_repetitions)]
 #[derive(Clone, Debug, PartialEq, Eq, Serialize)]
 pub enum Acl<'a> {
diff --git a/sbroad-core/src/ir/node/block.rs b/sbroad-core/src/ir/node/block.rs
index e36f164c1..b2431322e 100644
--- a/sbroad-core/src/ir/node/block.rs
+++ b/sbroad-core/src/ir/node/block.rs
@@ -1,6 +1,6 @@
 use serde::Serialize;
 
-use super::{Procedure, SizeNode};
+use super::{NodeAligned, Procedure};
 
 #[allow(clippy::module_name_repetitions)]
 #[derive(Clone, Debug, Eq, PartialEq, Serialize)]
@@ -9,7 +9,7 @@ pub enum BlockOwned {
     Procedure(Procedure),
 }
 
-impl From<BlockOwned> for SizeNode {
+impl From<BlockOwned> for NodeAligned {
     fn from(value: BlockOwned) -> Self {
         match value {
             BlockOwned::Procedure(proc) => proc.into(),
@@ -24,15 +24,6 @@ pub enum MutBlock<'a> {
     Procedure(&'a mut Procedure),
 }
 
-impl MutBlock<'_> {
-    #[must_use]
-    pub fn get_block_owned(&self) -> BlockOwned {
-        match self {
-            MutBlock::Procedure(proc) => BlockOwned::Procedure((*proc).clone()),
-        }
-    }
-}
-
 #[allow(clippy::module_name_repetitions)]
 #[derive(Clone, Debug, Eq, PartialEq, Serialize)]
 pub enum Block<'a> {
diff --git a/sbroad-core/src/ir/node/ddl.rs b/sbroad-core/src/ir/node/ddl.rs
index fd3157337..e49cd10bc 100644
--- a/sbroad-core/src/ir/node/ddl.rs
+++ b/sbroad-core/src/ir/node/ddl.rs
@@ -4,8 +4,8 @@ use smol_str::{format_smolstr, ToSmolStr};
 use crate::errors::{Entity, SbroadError};
 
 use super::{
-    AlterSystem, CreateIndex, CreateProc, CreateTable, DropIndex, DropProc, DropTable,
-    RenameRoutine, SetParam, SetTransaction, SizeNode,
+    AlterSystem, CreateIndex, CreateProc, CreateTable, DropIndex, DropProc, DropTable, NodeAligned,
+    RenameRoutine, SetParam, SetTransaction,
 };
 
 #[allow(clippy::module_name_repetitions)]
@@ -52,7 +52,7 @@ impl DdlOwned {
     }
 }
 
-impl From<DdlOwned> for SizeNode {
+impl From<DdlOwned> for NodeAligned {
     fn from(value: DdlOwned) -> Self {
         match value {
             DdlOwned::CreateIndex(create_index) => create_index.into(),
@@ -99,24 +99,6 @@ pub enum Ddl<'a> {
     SetTransaction(&'a SetTransaction),
 }
 
-impl MutDdl<'_> {
-    #[must_use]
-    pub fn get_ddl_owned(&self) -> DdlOwned {
-        match self {
-            MutDdl::CreateIndex(create_index) => DdlOwned::CreateIndex((*create_index).clone()),
-            MutDdl::CreateProc(create_proc) => DdlOwned::CreateProc((*create_proc).clone()),
-            MutDdl::CreateTable(create_table) => DdlOwned::CreateTable((*create_table).clone()),
-            MutDdl::DropIndex(drop_index) => DdlOwned::DropIndex((*drop_index).clone()),
-            MutDdl::DropProc(drop_proc) => DdlOwned::DropProc((*drop_proc).clone()),
-            MutDdl::DropTable(drop_table) => DdlOwned::DropTable((*drop_table).clone()),
-            MutDdl::RenameRoutine(rename) => DdlOwned::RenameRoutine((*rename).clone()),
-            MutDdl::AlterSystem(alter_system) => DdlOwned::AlterSystem((*alter_system).clone()),
-            MutDdl::SetParam(set_param) => DdlOwned::SetParam((*set_param).clone()),
-            MutDdl::SetTransaction(set_trans) => DdlOwned::SetTransaction((*set_trans).clone()),
-        }
-    }
-}
-
 impl Ddl<'_> {
     /// Return DDL node timeout.
     ///
diff --git a/sbroad-core/src/ir/node/expression.rs b/sbroad-core/src/ir/node/expression.rs
index e748a01bc..b91554915 100644
--- a/sbroad-core/src/ir/node/expression.rs
+++ b/sbroad-core/src/ir/node/expression.rs
@@ -7,7 +7,7 @@ use crate::{
 
 use super::{
     Alias, ArithmeticExpr, BoolExpr, Case, Cast, Concat, Constant, CountAsterisk,
-    ExprInParentheses, NodeId, Reference, Row, SizeNode, StableFunction, Trim, UnaryExpr,
+    ExprInParentheses, NodeAligned, NodeId, Reference, Row, StableFunction, Trim, UnaryExpr,
 };
 
 #[allow(clippy::module_name_repetitions)]
@@ -29,7 +29,7 @@ pub enum ExprOwned {
     ExprInParentheses(ExprInParentheses),
 }
 
-impl From<ExprOwned> for SizeNode {
+impl From<ExprOwned> for NodeAligned {
     fn from(value: ExprOwned) -> Self {
         match value {
             ExprOwned::Alias(alias) => alias.into(),
@@ -238,26 +238,4 @@ impl MutExpression<'_> {
             *parent = None;
         }
     }
-
-    #[must_use]
-    pub fn get_expr_owned(&self) -> ExprOwned {
-        match self {
-            MutExpression::Alias(alias) => ExprOwned::Alias((*alias).clone()),
-            MutExpression::Arithmetic(arithm) => ExprOwned::Arithmetic((*arithm).clone()),
-            MutExpression::Bool(bool) => ExprOwned::Bool((*bool).clone()),
-            MutExpression::Case(case) => ExprOwned::Case((*case).clone()),
-            MutExpression::Cast(cast) => ExprOwned::Cast((*cast).clone()),
-            MutExpression::Concat(con) => ExprOwned::Concat((*con).clone()),
-            MutExpression::Constant(constant) => ExprOwned::Constant((*constant).clone()),
-            MutExpression::CountAsterisk(count) => ExprOwned::CountAsterisk((*count).clone()),
-            MutExpression::ExprInParentheses(expr_par) => {
-                ExprOwned::ExprInParentheses((*expr_par).clone())
-            }
-            MutExpression::Reference(reference) => ExprOwned::Reference((*reference).clone()),
-            MutExpression::Row(row) => ExprOwned::Row((*row).clone()),
-            MutExpression::StableFunction(sfunc) => ExprOwned::StableFunction((*sfunc).clone()),
-            MutExpression::Trim(trim) => ExprOwned::Trim((*trim).clone()),
-            MutExpression::Unary(unary) => ExprOwned::Unary((*unary).clone()),
-        }
-    }
 }
diff --git a/sbroad-core/src/ir/node/relational.rs b/sbroad-core/src/ir/node/relational.rs
index c580db51f..2f0efdc9c 100644
--- a/sbroad-core/src/ir/node/relational.rs
+++ b/sbroad-core/src/ir/node/relational.rs
@@ -7,8 +7,8 @@ use crate::{
 };
 
 use super::{
-    Delete, Except, GroupBy, Having, Insert, Intersect, Join, Limit, Motion, NodeId, OrderBy,
-    Projection, ScanCte, ScanRelation, ScanSubQuery, Selection, SizeNode, Union, UnionAll, Update,
+    Delete, Except, GroupBy, Having, Insert, Intersect, Join, Limit, Motion, NodeAligned, NodeId,
+    OrderBy, Projection, ScanCte, ScanRelation, ScanSubQuery, Selection, Union, UnionAll, Update,
     Values, ValuesRow,
 };
 
@@ -37,7 +37,7 @@ pub enum RelOwned {
     ValuesRow(ValuesRow),
 }
 
-impl From<RelOwned> for SizeNode {
+impl From<RelOwned> for NodeAligned {
     fn from(value: RelOwned) -> Self {
         match value {
             RelOwned::ScanCte(scan_cte) => scan_cte.into(),
@@ -531,32 +531,6 @@ impl MutRelational<'_> {
             )),
         }
     }
-
-    #[must_use]
-    pub fn get_rel_owned(&self) -> RelOwned {
-        match self {
-            MutRelational::Delete(del) => RelOwned::Delete((*del).clone()),
-            MutRelational::Except(except) => RelOwned::Except((*except).clone()),
-            MutRelational::GroupBy(group_by) => RelOwned::GroupBy((*group_by).clone()),
-            MutRelational::Having(having) => RelOwned::Having((*having).clone()),
-            MutRelational::Insert(insert) => RelOwned::Insert((*insert).clone()),
-            MutRelational::Intersect(intersect) => RelOwned::Intersect((*intersect).clone()),
-            MutRelational::Join(join) => RelOwned::Join((*join).clone()),
-            MutRelational::Limit(limit) => RelOwned::Limit((*limit).clone()),
-            MutRelational::Motion(motion) => RelOwned::Motion((*motion).clone()),
-            MutRelational::OrderBy(order_by) => RelOwned::OrderBy((*order_by).clone()),
-            MutRelational::Projection(proj) => RelOwned::Projection((*proj).clone()),
-            MutRelational::ScanCte(scan_cte) => RelOwned::ScanCte((*scan_cte).clone()),
-            MutRelational::ScanRelation(scan_rel) => RelOwned::ScanRelation((*scan_rel).clone()),
-            MutRelational::ScanSubQuery(ssubquery) => RelOwned::ScanSubQuery((*ssubquery).clone()),
-            MutRelational::Selection(sel) => RelOwned::Selection((*sel).clone()),
-            MutRelational::Union(un) => RelOwned::Union((*un).clone()),
-            MutRelational::UnionAll(union_all) => RelOwned::UnionAll((*union_all).clone()),
-            MutRelational::Update(upd) => RelOwned::Update((*upd).clone()),
-            MutRelational::Values(values) => RelOwned::Values((*values).clone()),
-            MutRelational::ValuesRow(values_row) => RelOwned::ValuesRow((*values_row).clone()),
-        }
-    }
 }
 
 #[allow(dead_code)]
diff --git a/sbroad-core/src/ir/node/tests.rs b/sbroad-core/src/ir/node/tests.rs
new file mode 100644
index 000000000..d5453a0a9
--- /dev/null
+++ b/sbroad-core/src/ir/node/tests.rs
@@ -0,0 +1,10 @@
+use crate::ir::node::{Node136, Node224, Node32, Node64, Node96};
+
+#[test]
+fn test_node_size() {
+    assert!(std::mem::size_of::<Node32>() == 40);
+    assert!(std::mem::size_of::<Node64>() == 72);
+    assert!(std::mem::size_of::<Node96>() == 96);
+    assert!(std::mem::size_of::<Node136>() == 136);
+    assert!(std::mem::size_of::<Node224>() == 224);
+}
diff --git a/sbroad-core/src/ir/node/util.rs b/sbroad-core/src/ir/node/util.rs
deleted file mode 100644
index a97b82604..000000000
--- a/sbroad-core/src/ir/node/util.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-use serde::Serialize;
-use crate::ir::node::{Invalid as Inv, Parameter as Param};
-
-#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
-pub enum Invalid<'a> {
-    /// Procedure body.
-    Invalid(&'a Inv),
-}
-
-#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
-pub enum Parameter<'a> {
-    /// Procedure body.
-    Parameter(&'a Param),
-}
\ No newline at end of file
diff --git a/sbroad-core/src/ir/operator.rs b/sbroad-core/src/ir/operator.rs
index ed65415f0..8c487f4f3 100644
--- a/sbroad-core/src/ir/operator.rs
+++ b/sbroad-core/src/ir/operator.rs
@@ -27,7 +27,7 @@ use crate::errors::{Action, Entity, SbroadError};
 use super::expression::{ColumnPositionMap, ExpressionId};
 use super::node::expression::{Expression, MutExpression};
 use super::node::relational::Relational;
-use super::node::{ArenaType, Limit, Node, SizeNode};
+use super::node::{ArenaType, Limit, Node, NodeAligned};
 use super::transformation::redistribution::{MotionPolicy, Program};
 use super::tree::traversal::{LevelNode, PostOrderWithFilter, EXPR_CAPACITY};
 use crate::ir::distribution::{Distribution, Key, KeySet};
@@ -325,7 +325,7 @@ impl Plan {
     ///
     /// # Errors
     /// - failed to oupdate shard columns info due to invalid plan subtree
-    pub fn add_relational(&mut self, node: SizeNode) -> Result<NodeId, SbroadError> {
+    pub fn add_relational(&mut self, node: NodeAligned) -> Result<NodeId, SbroadError> {
         let rel_id = self.nodes.push(node);
         let mut context = self.context_mut();
         context.shard_col_info.update_node(rel_id, self)?;
@@ -1261,7 +1261,7 @@ impl Plan {
         }
 
         let output = self.add_row_for_union_except(left, right)?;
-        let union_all: SizeNode = if remove_duplicates {
+        let union_all: NodeAligned = if remove_duplicates {
             Union {
                 left,
                 right,
diff --git a/sbroad-core/src/ir/transformation/helpers.rs b/sbroad-core/src/ir/transformation/helpers.rs
index 874ef434f..5de394821 100644
--- a/sbroad-core/src/ir/transformation/helpers.rs
+++ b/sbroad-core/src/ir/transformation/helpers.rs
@@ -2,7 +2,6 @@
 
 use crate::backend::sql::ir::PatternWithParams;
 use crate::backend::sql::tree::{OrderedSyntaxNodes, SyntaxPlan};
-use crate::executor::bucket::Buckets;
 use crate::executor::engine::mock::RouterConfigurationMock;
 use crate::executor::ir::ExecutionPlan;
 use crate::frontend::sql::ast::AbstractSyntaxTree;
-- 
GitLab