This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 794b3ee4cce [Bug](join) do not set _should_keep_column_flags when key 
column belong to intermediate tuple (#54708)
794b3ee4cce is described below

commit 794b3ee4cce801c5873f6a37fe11bc71ee7a39b3
Author: Pxl <[email protected]>
AuthorDate: Thu Aug 14 17:06:49 2025 +0800

    [Bug](join) do not set _should_keep_column_flags when key column belong to 
intermediate tuple (#54708)
    
    ### What problem does this PR solve?
    ```cpp
    ./run-regression-test.sh --run constant_propagation
    
       4# 0x000056492C02C9C5 in 
/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be
       5# 0x000056492C01E27A in 
/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be
       6# google::LogMessage::SendToLog() in 
/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be
       7# google::LogMessage::Flush() in 
/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be
       8# google::LogMessageFatal::~LogMessageFatal() in 
/mnt/ssd01/pipline/OpenSourceDoris/clusterEnv/P0/Cluster0/be/lib/doris_be
       9# 
doris::pipeline::HashJoinBuildSinkLocalState::close(doris::RuntimeState*, 
doris::Status)::$_0::operator()() const at 
/root/doris/be/src/pipeline/exec/hashjoin_build_sink.cpp:215
      10# 
doris::Defer<doris::pipeline::HashJoinBuildSinkLocalState::close(doris::RuntimeState*,
 doris::Status)::$_0>::~Defer() at /root/doris/be/src/util/defer_op.h:37
      11# 
doris::pipeline::HashJoinBuildSinkLocalState::close(doris::RuntimeState*, 
doris::Status) at /root/doris/be/src/pipeline/exec/hashjoin_build_sink.cpp:261
      12# doris::pipeline::DataSinkOperatorXBase::close(doris::RuntimeState*, 
doris::Status) at /root/doris/be/src/pipeline/exec/operator.h:669
      13# doris::pipeline::PipelineTask::close(doris::Status, bool) at 
/root/doris/be/src/pipeline/pipeline_task.cpp:678
    ```
---
 be/src/pipeline/exec/hashjoin_build_sink.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/be/src/pipeline/exec/hashjoin_build_sink.cpp 
b/be/src/pipeline/exec/hashjoin_build_sink.cpp
index f123f173cc8..00eb4315a0a 100644
--- a/be/src/pipeline/exec/hashjoin_build_sink.cpp
+++ b/be/src/pipeline/exec/hashjoin_build_sink.cpp
@@ -212,7 +212,12 @@ Status HashJoinBuildSinkLocalState::close(RuntimeState* 
state, Status exec_statu
         // because it is used to compare with probe side hash key column
 
         if (p._should_keep_hash_key_column && _build_col_ids.size() == 1) {
-            p._should_keep_column_flags[_build_col_ids[0]] = true;
+            // when key column from build side tuple, we should keep it
+            // if key column belong to intermediate tuple, it means 
_build_col_ids[0] >= _should_keep_column_flags.size(),
+            // key column still kept too.
+            if (_build_col_ids[0] < p._should_keep_column_flags.size()) {
+                p._should_keep_column_flags[_build_col_ids[0]] = true;
+            }
         }
 
         if (_shared_state->build_block) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to