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


The following commit(s) were added to refs/heads/groupjoin by this push:
     new 1a7b222acf9 be fix
1a7b222acf9 is described below

commit 1a7b222acf984624c1e0b1c99fb6a660994ddf2c
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]

Reply via email to