From e487607c24b9dbaff66f16667e254552573e0949 Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 9 Feb 2024 05:23:36 +0000 Subject: [PATCH] Fix some bug for vec2.0 --- src/sql/engine/basic/ob_hp_infras_vec_op.h | 7 +++---- src/sql/engine/sort/ob_sort_vec_op.cpp | 20 +++++++++++-------- src/sql/engine/sort/ob_sort_vec_op_provider.h | 1 + 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/sql/engine/basic/ob_hp_infras_vec_op.h b/src/sql/engine/basic/ob_hp_infras_vec_op.h index 741868a545..f4032f17c9 100644 --- a/src/sql/engine/basic/ob_hp_infras_vec_op.h +++ b/src/sql/engine/basic/ob_hp_infras_vec_op.h @@ -819,9 +819,6 @@ set_distinct_batch(const common::ObIArray &exprs, ObEvalCtx::BatchInfoScopeGuard batch_info_guard(*eval_ctx_); batch_info_guard.set_batch_idx(0); batch_info_guard.set_batch_size(batch_size); - if (!is_push_down_ && OB_FAIL(prefetch(hash_values_for_batch, batch_size, skip))) { - SQL_ENG_LOG(WARN, "failed to prefetch", K(ret)); - } auto sf = [&] (const IVectorPtrs &vectors, const uint16_t selector[], const int64_t size, @@ -829,7 +826,9 @@ set_distinct_batch(const common::ObIArray &exprs, ret = preprocess_part_.store_.add_batch(vectors, selector, size, stored_rows); return ret; }; - if (OB_FAIL(hash_table_.set_distinct_batch(preprocess_part_.store_.get_row_meta(), batch_size, skip, + if (!is_push_down_ && OB_FAIL(prefetch(hash_values_for_batch, batch_size, skip))) { + SQL_ENG_LOG(WARN, "failed to prefetch", K(ret)); + } else if (OB_FAIL(hash_table_.set_distinct_batch(preprocess_part_.store_.get_row_meta(), batch_size, skip, my_skip, hash_values_for_batch, sf))) { LOG_WARN("failed to set batch", K(ret)); } diff --git a/src/sql/engine/sort/ob_sort_vec_op.cpp b/src/sql/engine/sort/ob_sort_vec_op.cpp index 0c654c9339..c779b890d1 100644 --- a/src/sql/engine/sort/ob_sort_vec_op.cpp +++ b/src/sql/engine/sort/ob_sort_vec_op.cpp @@ -38,8 +38,8 @@ OB_SERIALIZE_MEMBER((ObSortVecSpec, ObOpSpec), topn_expr_, topk_limit_expr_, top ObSortVecOp::ObSortVecOp(ObExecContext &ctx_, const ObOpSpec &spec, ObOpInput *input) : ObOperator(ctx_, spec, input), sort_op_provider_(op_monitor_info_), sort_row_count_(0), - is_first_(true), ret_row_count_(0), sk_row_store_(&ctx_.get_allocator()), - addon_row_store_(&ctx_.get_allocator()), sk_row_iter_(), addon_row_iter_() + is_first_(true), ret_row_count_(0), sk_row_store_(), addon_row_store_(), sk_row_iter_(), + addon_row_iter_() {} int ObSortVecOp::inner_rescan() @@ -50,7 +50,6 @@ int ObSortVecOp::inner_rescan() void ObSortVecOp::reset() { - sort_op_provider_.reset(); sort_row_count_ = 0; ret_row_count_ = 0; is_first_ = true; @@ -58,17 +57,16 @@ void ObSortVecOp::reset() addon_row_iter_.reset(); sk_row_store_.reset(); addon_row_store_.reset(); + sort_op_provider_.reset(); } void ObSortVecOp::destroy() { + reset(); + sk_row_store_.~ObTempRowStore(); + addon_row_store_.~ObTempRowStore(); sort_op_provider_.unregister_profile_if_necessary(); sort_op_provider_.~ObSortVecOpProvider(); - sort_row_count_ = 0; - is_first_ = true; - ret_row_count_ = 0; - sk_row_store_.reset(); - addon_row_store_.reset(); ObOperator::destroy(); } @@ -345,7 +343,11 @@ int ObSortVecOp::scan_all_then_sort_batch() } if (MY_SPEC.has_addon_) { blk_holder_.release(); + addon_row_iter_.reset(); + addon_row_store_.reset(); } + sk_row_iter_.reset(); + sk_row_store_.reset(); } } } @@ -394,6 +396,8 @@ int ObSortVecOp::init_sort(int64_t tenant_id, int64_t row_count, int64_t topn_cn if (OB_FAIL(sort_op_provider_.init(context))) { LOG_WARN("failed to init sort operator provider", K(ret)); } else { + sk_row_store_.set_allocator(*sort_op_provider_.get_malloc_allocator()); + addon_row_store_.set_allocator(*sort_op_provider_.get_malloc_allocator()); sort_op_provider_.set_input_rows(row_count); sort_op_provider_.set_input_width(MY_SPEC.width_ + aqs_head); sort_op_provider_.set_operator_type(MY_SPEC.type_); diff --git a/src/sql/engine/sort/ob_sort_vec_op_provider.h b/src/sql/engine/sort/ob_sort_vec_op_provider.h index 5bac0952e6..cf5ac12bd6 100644 --- a/src/sql/engine/sort/ob_sort_vec_op_provider.h +++ b/src/sql/engine/sort/ob_sort_vec_op_provider.h @@ -69,6 +69,7 @@ public: void set_operator_type(ObPhyOperatorType op_type); void set_operator_id(uint64_t op_id); void set_io_event_observer(ObIOEventObserver *observer); + common::ObIAllocator *get_malloc_allocator() { return alloc_; } private: int init_mem_context(uint64_t tenant_id);