From a6adde45fd8b4fc884093068596efd9071d0a860 Mon Sep 17 00:00:00 2001
From: Denis Smirnov <sd@picodata.io>
Date: Fri, 21 Jul 2023 13:07:30 +0700
Subject: [PATCH] refactoring: DDL node processing in SQL module

Previously we extracted attributes from DDL plan nodes and left
the nodes in arena in the inconsistent state. This approach is
error prone, so now we extract the whole node from the plan arena
before using its attributes.
---
 sbroad     |  2 +-
 src/sql.rs | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/sbroad b/sbroad
index 08b0c3f64f..c5a5600921 160000
--- a/sbroad
+++ b/sbroad
@@ -1 +1 @@
-Subproject commit 08b0c3f64fd14a2a24973dae3e66462340bc8262
+Subproject commit c5a56009214f6d0c5a53a294b2f5abb605156b40
diff --git a/src/sql.rs b/src/sql.rs
index a2676c5585..b3f8a8ae3a 100644
--- a/src/sql.rs
+++ b/src/sql.rs
@@ -50,15 +50,15 @@ pub fn dispatch_query(encoded_params: EncodedPatternWithParams) -> traft::Result
                 let ir_plan = query.get_exec_plan().get_ir_plan();
                 let top_id = ir_plan.get_top().map_err(Error::from)?;
                 let ir_plan_mut = query.get_mut_exec_plan().get_mut_ir_plan();
-                let ddl = ir_plan_mut.get_mut_ddl_node(top_id).map_err(Error::from)?;
+                let ddl = ir_plan_mut.take_ddl_node(top_id).map_err(Error::from)?;
                 let timeout: f64 = ddl.timeout().map_err(Error::from)?;
                 let storage = &node::global()?.storage;
                 let ddl_op = match ddl {
                     Ddl::CreateShardedTable {
-                        ref mut name,
-                        ref mut format,
-                        ref mut primary_key,
-                        ref mut sharding_key,
+                        name,
+                        mut format,
+                        primary_key,
+                        sharding_key,
                         ..
                     } => {
                         let format = format
@@ -71,12 +71,12 @@ pub fn dispatch_query(encoded_params: EncodedPatternWithParams) -> traft::Result
                             .collect();
                         let params = CreateSpaceParams {
                             id: None,
-                            name: std::mem::take(name),
+                            name,
                             format,
-                            primary_key: std::mem::take(primary_key),
+                            primary_key,
                             distribution: DistributionParam::Sharded,
                             by_field: None,
-                            sharding_key: Some(std::mem::take(sharding_key)),
+                            sharding_key: Some(sharding_key),
                             sharding_fn: Some(ShardingFn::Murmur3),
                             timeout,
                         };
-- 
GitLab