From f77f3b7f69f323a6100ef61e0d1bdfbb3b123426 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 11 Dec 2023 04:13:21 +0000 Subject: [PATCH] [CP] If the ring exists and exits prematurely, only the allocator is cleaned when operator is closed in oracle DFS mode --- src/sql/engine/recursive_cte/ob_recursive_inner_data_op.cpp | 1 + src/sql/engine/recursive_cte/ob_search_method_op.cpp | 5 +++++ src/sql/engine/recursive_cte/ob_search_method_op.h | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/sql/engine/recursive_cte/ob_recursive_inner_data_op.cpp b/src/sql/engine/recursive_cte/ob_recursive_inner_data_op.cpp index 91f5ff23e8..8800ed37d3 100644 --- a/src/sql/engine/recursive_cte/ob_recursive_inner_data_op.cpp +++ b/src/sql/engine/recursive_cte/ob_recursive_inner_data_op.cpp @@ -548,6 +548,7 @@ int ObRecursiveInnerDataOp::set_fake_cte_table_empty() void ObRecursiveInnerDataOp::destroy() { + dfs_pump_.destroy(); stored_row_buf_.reset(); } diff --git a/src/sql/engine/recursive_cte/ob_search_method_op.cpp b/src/sql/engine/recursive_cte/ob_search_method_op.cpp index 48d924559f..093fe596ba 100644 --- a/src/sql/engine/recursive_cte/ob_search_method_op.cpp +++ b/src/sql/engine/recursive_cte/ob_search_method_op.cpp @@ -187,6 +187,11 @@ int ObDepthFisrtSearchOp::init() return ret; } +void ObDepthFisrtSearchOp::destroy() +{ + search_stack_.reset(); +} + int ObDepthFisrtSearchOp::reuse() { ObSearchMethodOp::reuse(); diff --git a/src/sql/engine/recursive_cte/ob_search_method_op.h b/src/sql/engine/recursive_cte/ob_search_method_op.h index c28b0aeddd..4615a05c94 100644 --- a/src/sql/engine/recursive_cte/ob_search_method_op.h +++ b/src/sql/engine/recursive_cte/ob_search_method_op.h @@ -232,7 +232,9 @@ public: } } + virtual int finish_add_row(bool sort) override; + virtual void destroy(); virtual int reuse() override; virtual int empty() override { return search_stack_.empty() && input_rows_.empty(); }