This is an automated email from the ASF dual-hosted git repository. Mryange pushed a commit to branch groupjoin in repository https://gitbox.apache.org/repos/asf/doris.git
commit 70889d7b601a3fb85e78dc41b41a7bef80a8cbaa Author: Mryange <[email protected]> AuthorDate: Wed Jun 24 16:13:22 2026 +0800 be fix --- be/src/exec/operator/groupjoin_probe_operator.cpp | 6 ++++-- be/src/exec/operator/groupjoin_probe_operator.h | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/be/src/exec/operator/groupjoin_probe_operator.cpp b/be/src/exec/operator/groupjoin_probe_operator.cpp index 9a80da4bcb6..ffdd152ea0d 100644 --- a/be/src/exec/operator/groupjoin_probe_operator.cpp +++ b/be/src/exec/operator/groupjoin_probe_operator.cpp @@ -55,8 +55,11 @@ GroupJoinProbeOperatorX::GroupJoinProbeOperatorX(ObjectPool* pool, const TPlanNo ? tnode.group_join_node.dist_type : TJoinDistributionType::NONE), _partition_exprs(tnode.__isset.distribute_expr_lists ? tnode.distribute_expr_lists[0] - : std::vector<TExpr> {}) { + : std::vector<TExpr> {}), + _output_tuple_id(tnode.group_join_node.output_tuple_id) { _op_name = "GROUP_JOIN_PROBE_OPERATOR"; + _output_row_desc = + std::make_unique<RowDescriptor>(descs, std::vector<TupleId> {_output_tuple_id}); } Status GroupJoinProbeOperatorX::init(const TPlanNode& tnode, RuntimeState* state) { @@ -71,7 +74,6 @@ Status GroupJoinProbeOperatorX::init(const TPlanNode& tnode, RuntimeState* state _aggregate_sides.resize(group_join_node.aggregate_functions.size()); _sizes_of_aggregate_states.assign(group_join_node.aggregate_functions.size(), 0); _aligns_of_aggregate_states.assign(group_join_node.aggregate_functions.size(), 1); - _output_tuple_id = group_join_node.output_tuple_id; TSortInfo dummy; for (int i = 0; i < group_join_node.aggregate_functions.size(); ++i) { diff --git a/be/src/exec/operator/groupjoin_probe_operator.h b/be/src/exec/operator/groupjoin_probe_operator.h index 78a1c0156f7..489de218d0b 100644 --- a/be/src/exec/operator/groupjoin_probe_operator.h +++ b/be/src/exec/operator/groupjoin_probe_operator.h @@ -84,6 +84,20 @@ public: Status push(RuntimeState* state, Block* input_block, bool eos) const override; Status pull(RuntimeState* state, Block* output_block, bool* eos) const override; bool need_more_input_data(RuntimeState* state) const override; + [[nodiscard]] const RowDescriptor& row_desc() const override { + DORIS_CHECK(_output_row_desc != nullptr); + return *_output_row_desc; + } + Status set_child(OperatorPtr child) override { + if (Base::_child && _build_side_child == nullptr) { + // The second child of a binary GroupJoin plan is the build side. Keep the first child + // as the probe input in this pipeline, same as HashJoinProbeOperatorX. + _build_side_child = child; + } else { + RETURN_IF_ERROR(Base::set_child(child)); + } + return Status::OK(); + } DataDistribution required_data_distribution(RuntimeState* state) const override; bool is_shuffled_operator() const override; @@ -104,6 +118,8 @@ private: std::vector<size_t> _make_nullable_keys; TupleId _output_tuple_id; TupleDescriptor* _output_tuple_desc = nullptr; + std::unique_ptr<RowDescriptor> _output_row_desc; + OperatorPtr _build_side_child = nullptr; }; } // namespace doris --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
