From 649f70dfa71063c094145c92f68dc87940468171 Mon Sep 17 00:00:00 2001 From: qianchanger Date: Mon, 4 Jul 2022 10:08:37 +0800 Subject: [PATCH] [CP] fix bug for px-coord merge sort --- src/sql/engine/px/ob_px_merge_sort_coord.cpp | 4 ++++ src/sql/engine/px/ob_px_merge_sort_coord.h | 3 +++ src/sql/executor/ob_fifo_receive.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/sql/engine/px/ob_px_merge_sort_coord.cpp b/src/sql/engine/px/ob_px_merge_sort_coord.cpp index e2eb515f15..d325b457f7 100644 --- a/src/sql/engine/px/ob_px_merge_sort_coord.cpp +++ b/src/sql/engine/px/ob_px_merge_sort_coord.cpp @@ -33,6 +33,7 @@ using namespace oceanbase::sql; using namespace oceanbase::sql::dtl; OB_SERIALIZE_MEMBER((ObPxMergeSortCoordInput, ObPxReceiveInput)); +OB_SERIALIZE_MEMBER((ObPxMergeSortCoord, ObPxCoord), sort_columns_); int ObPxMergeSortCoord::ObPxMergeSortCoordEventListener::on_root_data_channel_setup() { @@ -77,6 +78,9 @@ int ObPxMergeSortCoord::inner_open(ObExecContext& ctx) const LOG_WARN("fail init fifo allocator", K(ret)); } else if (OB_FAIL(setup_scheduler(*px_ctx))) { LOG_WARN("fail setup scheduler", K(ret)); + } else if (sort_columns_.empty()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("sort_column could not be empty", K(ret)); } else { px_ctx->row_heap_.set_sort_columns(sort_columns_); px_ctx->metric_.set_id(get_id()); diff --git a/src/sql/engine/px/ob_px_merge_sort_coord.h b/src/sql/engine/px/ob_px_merge_sort_coord.h index 384fa95906..a697363e74 100644 --- a/src/sql/engine/px/ob_px_merge_sort_coord.h +++ b/src/sql/engine/px/ob_px_merge_sort_coord.h @@ -81,6 +81,9 @@ private: }; class ObPxMergeSortCoord : public ObPxCoord, public ObSortableTrait { +public: + OB_UNIS_VERSION_V(2); + public: class ObPxMergeSortCoordCtx; diff --git a/src/sql/executor/ob_fifo_receive.cpp b/src/sql/executor/ob_fifo_receive.cpp index 512420186a..a354853afb 100644 --- a/src/sql/executor/ob_fifo_receive.cpp +++ b/src/sql/executor/ob_fifo_receive.cpp @@ -1085,6 +1085,9 @@ int ObMergeSortReceive::create_op_ctx(ObExecContext& exec_ctx, ObAsyncReceiveCtx } else if (OB_ISNULL(receive_ctx)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("fail to create merge sort receive ctx", K(ret)); + } else if (sort_columns_.empty()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("sort_column could not be empty", K(ret)); } else { receive_ctx->row_comparer_.init(sort_columns_, receive_ctx->child_rows_); op_ctx = receive_ctx;