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