From 99220b8af46bdb04f1d7304f070b5b5d8ee97911 Mon Sep 17 00:00:00 2001 From: Denis Smirnov <sd@picodata.io> Date: Thu, 18 Aug 2022 19:21:10 +0700 Subject: [PATCH] perf: clarify preallocation for add syntax plan node --- src/executor/engine/cartridge/backend/sql/tree.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/executor/engine/cartridge/backend/sql/tree.rs b/src/executor/engine/cartridge/backend/sql/tree.rs index 4590883c56..8d20745e65 100644 --- a/src/executor/engine/cartridge/backend/sql/tree.rs +++ b/src/executor/engine/cartridge/backend/sql/tree.rs @@ -512,7 +512,7 @@ impl<'p> SyntaxPlan<'p> { // `SELECT` and `FROM`. let expr = ir_plan.get_expression_node(*output)?; if let Expression::Row { list, .. } = expr { - let mut nodes: Vec<usize> = Vec::with_capacity(list.len()); + let mut nodes: Vec<usize> = Vec::with_capacity(list.len() * 2); if let Some((last, elements)) = list.split_last() { for elem in elements { nodes.push(self.nodes.get_syntax_node_id(*elem)?); @@ -609,7 +609,7 @@ impl<'p> SyntaxPlan<'p> { Ok(self.nodes.push_syntax_node(sn)) } Relational::Values { children, .. } => { - let mut sn_children: Vec<usize> = Vec::with_capacity(children.len() * 2 - 1); + let mut sn_children: Vec<usize> = Vec::with_capacity(children.len() * 2); if let Some((last_id, other)) = children.split_last() { for child_id in other { sn_children.push(self.nodes.get_syntax_node_id(*child_id)?); @@ -691,6 +691,7 @@ impl<'p> SyntaxPlan<'p> { let mut nodes: Vec<usize> = vec![self.nodes.push_syntax_node(SyntaxNode::new_open())]; if let Some((last, elements)) = list.split_last() { + nodes.reserve(list.len() * 2); for elem in elements { nodes.push(self.nodes.get_syntax_node_id(*elem)?); nodes.push(self.nodes.push_syntax_node(SyntaxNode::new_comma())); -- GitLab