From ea49b325cebb9ad57ff2f477cc6b69924dbceb71 Mon Sep 17 00:00:00 2001
From: Denis Smirnov <sd@picodata.io>
Date: Fri, 15 Apr 2022 18:39:26 +0700
Subject: [PATCH] perf: reduce string allocations in ir -> sql

---
 src/executor/engine/cartridge/backend/sql/ir.rs | 9 +++++++--
 src/ir/expression.rs                            | 1 -
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/executor/engine/cartridge/backend/sql/ir.rs b/src/executor/engine/cartridge/backend/sql/ir.rs
index 9b31fdfdbe..3f221cc7d9 100644
--- a/src/executor/engine/cartridge/backend/sql/ir.rs
+++ b/src/executor/engine/cartridge/backend/sql/ir.rs
@@ -92,7 +92,10 @@ impl ExecutionPlan {
             match data {
                 // TODO: should we care about plans without projections?
                 // Or they should be treated as invalid?
-                SyntaxData::Alias(s) => sql.push_str(&format!("as {}", s.as_str())),
+                SyntaxData::Alias(s) => {
+                    sql.push_str("as ");
+                    sql.push_str(s);
+                }
                 SyntaxData::CloseParenthesis => sql.push(')'),
                 SyntaxData::Comma => sql.push(','),
                 SyntaxData::Condition => sql.push_str("ON"),
@@ -133,7 +136,9 @@ impl ExecutionPlan {
                                 let alias = &ir_plan.get_alias_from_reference_node(expr)?;
 
                                 if let Some(name) = rel_node.scan_name(ir_plan, *position)? {
-                                    sql.push_str(&format!("{}.{}", name, alias));
+                                    sql.push_str(name);
+                                    sql.push('.');
+                                    sql.push_str(alias);
                                 } else {
                                     sql.push_str(alias);
                                 }
diff --git a/src/ir/expression.rs b/src/ir/expression.rs
index 0123e7009f..259c993775 100644
--- a/src/ir/expression.rs
+++ b/src/ir/expression.rs
@@ -318,7 +318,6 @@ impl Plan {
                 )));
             }
         }
-        
         let mut result: Vec<usize> = Vec::new();
 
         if col_names.is_empty() {
-- 
GitLab