diff --git a/src/sql/engine/px/exchange/ob_px_ordered_coord_op.cpp b/src/sql/engine/px/exchange/ob_px_ordered_coord_op.cpp index 837e1005ab..cce2b923a8 100644 --- a/src/sql/engine/px/exchange/ob_px_ordered_coord_op.cpp +++ b/src/sql/engine/px/exchange/ob_px_ordered_coord_op.cpp @@ -464,6 +464,15 @@ int ObPxOrderedCoordOp::next_rows(ObReceiveRowReader &reader, int64_t max_row_cn return ret; } +int ObPxOrderedCoordOp::inner_rescan() +{ + finish_ch_cnt_ = 0; + all_rows_finish_ = false; + destroy_readers(); + int ret = ObPxCoordOp::inner_rescan(); + return ret; +} + int ObPxOrderedCoordOp::receive_channel_root_dfo(ObExecContext &ctx, ObDfo &parent, ObPxTaskChSets &parent_ch_sets) diff --git a/src/sql/engine/px/exchange/ob_px_ordered_coord_op.h b/src/sql/engine/px/exchange/ob_px_ordered_coord_op.h index 95ac85d1a5..fdcf7852b4 100644 --- a/src/sql/engine/px/exchange/ob_px_ordered_coord_op.h +++ b/src/sql/engine/px/exchange/ob_px_ordered_coord_op.h @@ -105,6 +105,7 @@ public: public: virtual int inner_open() override; virtual void destroy() override; + virtual int inner_rescan() override; virtual int inner_close() override; virtual int inner_get_next_row() override; diff --git a/src/sql/optimizer/ob_logical_operator.cpp b/src/sql/optimizer/ob_logical_operator.cpp index f4854074cd..6d250f89dc 100644 --- a/src/sql/optimizer/ob_logical_operator.cpp +++ b/src/sql/optimizer/ob_logical_operator.cpp @@ -5401,7 +5401,7 @@ int ObLogicalOperator::find_px_for_batch_rescan(const log_op_def::ObLogOpType op /*do nothing*/ } else if (LOG_EXCHANGE == get_type()) { ObLogExchange *op = static_cast(this); - if (op->is_rescanable()) { + if (op->is_rescanable() && !op->is_task_order()) { op->set_px_batch_op_id(op_id); op->set_px_batch_op_type(op_type); find = true;