You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/07/18 05:43:11 UTC

[doris] branch dev-1.1.1 updated: [bugfix] fix coredump of left anti join (#10961)

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

yiguolei pushed a commit to branch dev-1.1.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/dev-1.1.1 by this push:
     new 8220d145fd [bugfix] fix coredump of left anti join (#10961)
8220d145fd is described below

commit 8220d145fd007306967d9ae1bff4b35dcec2ffbe
Author: TengJianPing <18...@users.noreply.github.com>
AuthorDate: Mon Jul 18 13:43:06 2022 +0800

    [bugfix] fix coredump of left anti join (#10961)
    
    Merge fix of #10591 to branch dev-1.1.1.
---
 be/src/vec/exec/join/vhash_join_node.cpp | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/be/src/vec/exec/join/vhash_join_node.cpp b/be/src/vec/exec/join/vhash_join_node.cpp
index 72af7c29b3..422b77b801 100644
--- a/be/src/vec/exec/join/vhash_join_node.cpp
+++ b/be/src/vec/exec/join/vhash_join_node.cpp
@@ -225,16 +225,27 @@ struct ProcessHashTableProbe {
                                                                          _build_block_rows[j]);
                                 }
                             } else {
-                                auto column = _build_blocks[_build_block_offsets[j]]
-                                                      .get_by_position(i)
-                                                      .column;
-                                if (mcol[i + column_offset]->is_nullable() xor
-                                    column->is_nullable()) {
-                                    DCHECK(mcol[i + column_offset]->is_nullable() &&
-                                           !column->is_nullable());
-                                    column = make_nullable(column);
+                                if (_build_block_offsets[j] == -1) {
+                                    // the only case to reach here:
+                                    // 1. left anti join with other conjuncts, and
+                                    // 2. equal conjuncts does not match
+                                    // since nullptr is emplaced back to visited_map,
+                                    // the output value of the build side does not matter,
+                                    // just insert default value
+                                    mcol[i + column_offset]->insert_default();
+                                } else {
+                                    auto column = _build_blocks[_build_block_offsets[j]]
+                                                          .get_by_position(i)
+                                                          .column;
+                                    if (mcol[i + column_offset]->is_nullable() xor
+                                        column->is_nullable()) {
+                                        DCHECK(mcol[i + column_offset]->is_nullable() &&
+                                               !column->is_nullable());
+                                        column = make_nullable(column);
+                                    }
+                                    mcol[i + column_offset]->insert_from(*column,
+                                                                         _build_block_rows[j]);
                                 }
-                                mcol[i + column_offset]->insert_from(*column, _build_block_rows[j]);
                             }
                         }
                     } else {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org