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

gabriellee 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 69868f18d6 [Bug](join) fix nested loop join some problems (#24034)
69868f18d6 is described below

commit 69868f18d6c2da9bfa5b13060123262a169b400b
Author: Pxl <pxl...@qq.com>
AuthorDate: Fri Sep 8 17:40:41 2023 +0800

    [Bug](join) fix nested loop join some problems (#24034)
---
 be/src/vec/exec/join/vnested_loop_join_node.cpp      | 20 +++++++++++++-------
 .../data/nereids_syntax_p0/sub_query_correlated.out  | 19 +++++++++++++++++++
 .../nereids_syntax_p0/sub_query_correlated.groovy    | 14 ++++++++++++++
 3 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/be/src/vec/exec/join/vnested_loop_join_node.cpp 
b/be/src/vec/exec/join/vnested_loop_join_node.cpp
index 82fecf5793..75d7c68f35 100644
--- a/be/src/vec/exec/join/vnested_loop_join_node.cpp
+++ b/be/src/vec/exec/join/vnested_loop_join_node.cpp
@@ -404,7 +404,7 @@ void 
VNestedLoopJoinNode::_finalize_current_phase(MutableBlock& mutable_block, s
         DCHECK(!_is_mark_join);
         auto build_block_sz = _build_blocks.size();
         size_t i = _output_null_idx_build_side;
-        for (; i < build_block_sz and column_size < batch_size; i++) {
+        for (; i < build_block_sz && column_size < batch_size; i++) {
             const auto& cur_block = _build_blocks[i];
             const auto* __restrict cur_visited_flags =
                     
assert_cast<ColumnUInt8*>(_build_side_visited_flags[i].get())
@@ -493,16 +493,22 @@ void 
VNestedLoopJoinNode::_finalize_current_phase(MutableBlock& mutable_block, s
                                                  
*dst_columns[dst_columns.size() - 1])
                                                  .get_data();
             mark_data.reserve(mark_data.size() + _left_side_process_count);
-            DCHECK_LT(_left_block_pos, _left_block.rows());
+            DCHECK_LE(_left_block_start_pos + _left_side_process_count, 
_left_block.rows());
             for (int j = _left_block_start_pos;
                  j < _left_block_start_pos + _left_side_process_count; ++j) {
                 mark_data.emplace_back(IsSemi != 
_cur_probe_row_visited_flags[j]);
-                for (size_t i = 0; i < _num_probe_side_columns; ++i) {
-                    const ColumnWithTypeAndName src_column = 
_left_block.get_by_position(i);
-                    DCHECK(_join_op != TJoinOp::FULL_OUTER_JOIN);
-                    dst_columns[i]->insert_from(*src_column.column, j);
-                }
             }
+            for (size_t i = 0; i < _num_probe_side_columns; ++i) {
+                const ColumnWithTypeAndName src_column = 
_left_block.get_by_position(i);
+                DCHECK(_join_op != TJoinOp::FULL_OUTER_JOIN);
+                dst_columns[i]->insert_range_from(*src_column.column, 
_left_block_start_pos,
+                                                  _left_side_process_count);
+            }
+            for (size_t i = 0; i < _num_build_side_columns; ++i) {
+                dst_columns[_num_probe_side_columns + i]->insert_many_defaults(
+                        _left_side_process_count);
+            }
+            _resize_fill_tuple_is_null_column(_left_side_process_count, 0, 1);
         }
     }
 }
diff --git a/regression-test/data/nereids_syntax_p0/sub_query_correlated.out 
b/regression-test/data/nereids_syntax_p0/sub_query_correlated.out
index 116d4ec918..06cb3ca839 100644
--- a/regression-test/data/nereids_syntax_p0/sub_query_correlated.out
+++ b/regression-test/data/nereids_syntax_p0/sub_query_correlated.out
@@ -390,3 +390,22 @@
 
 -- !imitate_tpcds_10 --
 
+-- !doris_6937 --
+1      2
+1      3
+2      4
+2      5
+3      3
+3      4
+
+-- !doris_6937_2 --
+1      2
+1      3
+2      4
+2      5
+20     2
+22     3
+24     4
+3      3
+3      4
+
diff --git 
a/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy 
b/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy
index 349802e21a..8a1df18341 100644
--- a/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy
+++ b/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy
@@ -415,4 +415,18 @@ suite ("sub_query_correlated") {
                                         and (exists (SELECT * FROM 
sub_query_correlated_subquery3, sub_query_correlated_subquery4 WHERE 
sub_query_correlated_subquery1.k1 = sub_query_correlated_subquery3.k1 and 
sub_query_correlated_subquery3.v1 = sub_query_correlated_subquery4.k1)
                                              OR exists (SELECT * FROM 
sub_query_correlated_subquery3, sub_query_correlated_subquery5 WHERE 
sub_query_correlated_subquery1.k2 = sub_query_correlated_subquery3.v1 and 
sub_query_correlated_subquery3.v1 = sub_query_correlated_subquery5.k1))
     """
+
+    order_qt_doris_6937 """
+    SELECT *
+        FROM sub_query_correlated_subquery1
+        WHERE EXISTS 
+            (SELECT k1
+            FROM sub_query_correlated_subquery3
+            WHERE sub_query_correlated_subquery1.k1 > 
sub_query_correlated_subquery3.v1)
+                OR k1 < 10;
+    """
+
+    order_qt_doris_6937_2 """
+        select * from sub_query_correlated_subquery1 where 
sub_query_correlated_subquery1.k1 not in (select 
sub_query_correlated_subquery3.k3 from sub_query_correlated_subquery3 where 
sub_query_correlated_subquery3.v2 > sub_query_correlated_subquery1.k2) or k1 < 
10 order by k1, k2;
+    """
 }


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

Reply via email to