diff --git a/src/executor/engine/cartridge/backend/sql/tree.rs b/src/executor/engine/cartridge/backend/sql/tree.rs index f11b18ffd6ef3db4203ebd2b6149102c2b62dcd3..d94c58db189dcf740d97e30090ceef64213e8499 100644 --- a/src/executor/engine/cartridge/backend/sql/tree.rs +++ b/src/executor/engine/cartridge/backend/sql/tree.rs @@ -33,7 +33,7 @@ pub enum SyntaxData { /// parameter (a wrapper over a plan constants) Parameter(usize), /// virtual table - VTable(VirtualTable), + VTable(Box<VirtualTable>), } /// A syntax tree node. @@ -133,7 +133,7 @@ impl SyntaxNode { } } - fn new_vtable(value: VirtualTable) -> Self { + fn new_vtable(value: Box<VirtualTable>) -> Self { SyntaxNode { data: SyntaxData::VTable(value), left: None, @@ -572,6 +572,7 @@ impl<'p> SyntaxPlan<'p> { } Relational::Motion { .. } => { let vtable = self.plan.get_motion_vtable(id)?.clone(); + let vtable_alias = &vtable.get_alias(); let child_id = self.plan.get_motion_child(id)?; let child_rel = self.plan.get_ir_plan().get_relation_node(child_id)?; let mut children: Vec<usize> = Vec::new(); @@ -579,15 +580,18 @@ impl<'p> SyntaxPlan<'p> { children = Vec::from([ self.nodes.push_syntax_node(SyntaxNode::new_open()), self.nodes - .push_syntax_node(SyntaxNode::new_vtable(vtable.clone())), + .push_syntax_node(SyntaxNode::new_vtable(Box::new(vtable))), self.nodes.push_syntax_node(SyntaxNode::new_close()), ]); - if let Some(name) = &vtable.get_alias() { + if let Some(name) = vtable_alias { children.push(self.nodes.push_syntax_node(SyntaxNode::new_alias(name))); } } else { - children.push(self.nodes.push_syntax_node(SyntaxNode::new_vtable(vtable))); + children.push( + self.nodes + .push_syntax_node(SyntaxNode::new_vtable(Box::new(vtable))), + ); } let sn = SyntaxNode::new_pointer(id, None, &children); @@ -643,7 +647,8 @@ impl<'p> SyntaxPlan<'p> { None, &[ self.nodes.push_syntax_node(SyntaxNode::new_open()), - self.nodes.push_syntax_node(SyntaxNode::new_vtable(vtable)), + self.nodes + .push_syntax_node(SyntaxNode::new_vtable(Box::new(vtable))), self.nodes.push_syntax_node(SyntaxNode::new_close()), ], );