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

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

commit 9f1db34e9c904ca2d6981f31ee9dbe2a17d2a5d5
Author: BiteTheDDDDt <pxl...@qq.com>
AuthorDate: Fri Nov 24 16:02:51 2023 +0800

    fix
---
 be/src/pipeline/exec/hashjoin_probe_operator.h     |  4 +++-
 be/src/vec/common/hash_table/hash_map.h            | 22 +++++++++++----------
 .../vec/exec/join/process_hash_table_probe_impl.h  | 23 ++++++++++++----------
 .../nereids_syntax_p0/sub_query_alias.groovy       |  2 +-
 .../nereids_syntax_p0/sub_query_correlated.groovy  | 12 +++++------
 .../suites/nereids_syntax_p0/view.groovy           |  4 ++--
 6 files changed, 37 insertions(+), 30 deletions(-)

diff --git a/be/src/pipeline/exec/hashjoin_probe_operator.h 
b/be/src/pipeline/exec/hashjoin_probe_operator.h
index fac0aaef171..44f2365e8ef 100644
--- a/be/src/pipeline/exec/hashjoin_probe_operator.h
+++ b/be/src/pipeline/exec/hashjoin_probe_operator.h
@@ -97,7 +97,9 @@ public:
     vectorized::DataTypes right_table_data_types();
     vectorized::DataTypes left_table_data_types();
     bool* has_null_in_build_side() { return 
&_shared_state->_has_null_in_build_side; }
-    const std::shared_ptr<vectorized::Block>& build_block() const { return 
_shared_state->build_block; }
+    const std::shared_ptr<vectorized::Block>& build_block() const {
+        return _shared_state->build_block;
+    }
 
 private:
     void _prepare_probe_block();
diff --git a/be/src/vec/common/hash_table/hash_map.h 
b/be/src/vec/common/hash_table/hash_map.h
index e6b5a527d74..08ca7628a03 100644
--- a/be/src/vec/common/hash_table/hash_map.h
+++ b/be/src/vec/common/hash_table/hash_map.h
@@ -262,8 +262,8 @@ public:
                     uint32_t* __restrict build_idxs,
                     doris::vectorized::ColumnFilterHelper* mark_column) {
         if constexpr (is_mark_join) {
-            return _find_batch_mark<JoinOpType>(keys, bucket_nums, probe_idx, 
probe_rows,
-                                                probe_idxs, build_idxs, 
mark_column);
+            return _find_batch_mark<JoinOpType, with_other_conjuncts>(
+                    keys, bucket_nums, probe_idx, probe_rows, probe_idxs, 
build_idxs, mark_column);
         }
 
         if constexpr (with_other_conjuncts) {
@@ -316,7 +316,7 @@ public:
 
 private:
     // only LEFT_ANTI_JOIN/LEFT_SEMI_JOIN/NULL_AWARE_LEFT_ANTI_JOIN/CROSS_JOIN 
support mark join
-    template <int JoinOpType>
+    template <int JoinOpType, bool with_other_conjuncts>
     auto _find_batch_mark(const Key* __restrict keys, const uint32_t* 
__restrict bucket_nums,
                           int probe_idx, int probe_rows, uint32_t* __restrict 
probe_idxs,
                           uint32_t* __restrict build_idxs,
@@ -331,13 +331,15 @@ private:
                 build_idx = next[build_idx];
             }
 
-            if (bucket_nums[probe_idx] == bucket_size) {
-                // mark result as null when probe row is null
-                mark_column->insert_null();
-            } else {
-                bool matched = JoinOpType == doris::TJoinOp::LEFT_SEMI_JOIN ? 
build_idx != 0
-                                                                            : 
build_idx == 0;
-                mark_column->insert_value(matched);
+            if constexpr (!with_other_conjuncts) {
+                if (bucket_nums[probe_idx] == bucket_size) {
+                    // mark result as null when probe row is null
+                    mark_column->insert_null();
+                } else {
+                    bool matched = JoinOpType == 
doris::TJoinOp::LEFT_SEMI_JOIN ? build_idx != 0
+                                                                               
 : build_idx == 0;
+                    mark_column->insert_value(matched);
+                }
             }
 
             probe_idxs[matched_cnt] = probe_idx++;
diff --git a/be/src/vec/exec/join/process_hash_table_probe_impl.h 
b/be/src/vec/exec/join/process_hash_table_probe_impl.h
index 39acd7e8f23..a93736b4371 100644
--- a/be/src/vec/exec/join/process_hash_table_probe_impl.h
+++ b/be/src/vec/exec/join/process_hash_table_probe_impl.h
@@ -278,7 +278,6 @@ Status ProcessHashTableProbe<JoinOpType, 
Parent>::do_other_join_conjuncts(
                     output_block->get_by_position(orig_columns - 
1).column->assume_mutable();
             ColumnFilterHelper helper(*mark_column);
 
-            mark_column->clear();
             for (size_t i = 0; i < row_count; ++i) {
                 filter_map[i] = true;
                 if constexpr (JoinOpType != TJoinOp::LEFT_SEMI_JOIN) {
@@ -290,21 +289,25 @@ Status ProcessHashTableProbe<JoinOpType, 
Parent>::do_other_join_conjuncts(
                 helper.insert_value(filter_column_ptr[i]);
             }
         } else {
-            for (size_t i = 0; i < row_count; ++i) {
-                if (filter_column_ptr[i]) {
-                    if constexpr (JoinOpType == TJoinOp::LEFT_SEMI_JOIN) {
+            if constexpr (JoinOpType == TJoinOp::LEFT_SEMI_JOIN) {
+                for (size_t i = 0; i < row_count; ++i) {
+                    if (filter_column_ptr[i]) {
                         filter_map[i] = _parent->_last_probe_match != 
_probe_indexs[i];
                         _parent->_last_probe_match = _probe_indexs[i];
                     } else {
-                        if (_build_indexs[i]) {
-                            filter_map[i] = false;
+                        filter_map[i] = false;
+                    }
+                }
+            } else {
+                for (size_t i = 0; i < row_count; ++i) {
+                    if (_build_indexs[i]) {
+                        filter_map[i] = false;
+                        if (filter_column_ptr[i]) {
                             _parent->_last_probe_match = _probe_indexs[i];
-                        } else {
-                            filter_map[i] = _parent->_last_probe_match != 
_probe_indexs[i];
                         }
+                    } else {
+                        filter_map[i] = _parent->_last_probe_match != 
_probe_indexs[i];
                     }
-                } else {
-                    filter_map[i] = false;
                 }
             }
         }
diff --git a/regression-test/suites/nereids_syntax_p0/sub_query_alias.groovy 
b/regression-test/suites/nereids_syntax_p0/sub_query_alias.groovy
index 5a5987ec434..ada61beccb7 100644
--- a/regression-test/suites/nereids_syntax_p0/sub_query_alias.groovy
+++ b/regression-test/suites/nereids_syntax_p0/sub_query_alias.groovy
@@ -77,7 +77,7 @@ suite("sub_query_alias") {
             select * 
             from lineorder l
         ) t on c.c_custkey = t.lo_custkey
-        order by c.c_custkey
+        order by c.c_custkey,lo_tax
     """
 }
 
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 0e98510e96f..ac87bbc813f 100644
--- a/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy
+++ b/regression-test/suites/nereids_syntax_p0/sub_query_correlated.groovy
@@ -428,27 +428,27 @@ suite ("sub_query_correlated") {
     """
 
     order_qt_hash_join_with_other_conjuncts1 """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 > 
sub_query_correlated_subquery3.k3) OR k1 < 10 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 > 
sub_query_correlated_subquery3.k3) OR k1 < 10 ORDER BY k1,k2;
     """
 
     order_qt_hash_join_with_other_conjuncts2 """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 < 
sub_query_correlated_subquery3.k3) OR k1 < 10 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 < 
sub_query_correlated_subquery3.k3) OR k1 < 10 ORDER BY k1,k2;
     """
 
     order_qt_hash_join_with_other_conjuncts3 """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 > 
sub_query_correlated_subquery3.k3) OR k1 < 11 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 > 
sub_query_correlated_subquery3.k3) OR k1 < 11 ORDER BY k1,k2;
     """
 
     order_qt_hash_join_with_other_conjuncts4 """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 < 
sub_query_correlated_subquery3.k3) OR k1 < 11 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3 WHERE sub_query_correlated_subquery1.k1 < 
sub_query_correlated_subquery3.k3) OR k1 < 11 ORDER BY k1,k2;
     """
 
     order_qt_same_subquery_in_conjuncts """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3) OR k1 IN (SELECT k1 FROM 
sub_query_correlated_subquery3) OR k1 < 10 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3) OR k1 IN (SELECT k1 FROM 
sub_query_correlated_subquery3) OR k1 < 10 ORDER BY k1,k2;
     """
 
     order_qt_two_subquery_in_one_conjuncts """
-        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3) OR k1 IN (SELECT k3 FROM 
sub_query_correlated_subquery3) OR k1 < 10 ORDER BY k1;
+        SELECT * FROM sub_query_correlated_subquery1 WHERE k1 IN (SELECT k1 
FROM sub_query_correlated_subquery3) OR k1 IN (SELECT k3 FROM 
sub_query_correlated_subquery3) OR k1 < 10 ORDER BY k1,k2;
     """
 
     order_qt_multi_subquery_in_and_scalry """
diff --git a/regression-test/suites/nereids_syntax_p0/view.groovy 
b/regression-test/suites/nereids_syntax_p0/view.groovy
index c694c37bbe2..48e0ca3752d 100644
--- a/regression-test/suites/nereids_syntax_p0/view.groovy
+++ b/regression-test/suites/nereids_syntax_p0/view.groovy
@@ -63,7 +63,7 @@ suite("view") {
     qt_select_3 """
         select *
         from v3
-        order by v3.c_custkey, v3.lo_orderkey
+        order by v3.c_custkey, v3.lo_orderkey,lo_tax
     """
 
     qt_select_4 """
@@ -83,7 +83,7 @@ suite("view") {
             from v2
             ) t 
         on l.lo_custkey = t.lo_custkey
-        order by l.lo_custkey, t.lo_custkey, l.lo_linenumber, l.lo_tax
+        order by l.lo_custkey, t.lo_custkey, l.lo_linenumber, t.lo_linenumber, 
t.lo_shipmode,t.lo_tax
     """
 
     qt_select_6 """


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

Reply via email to