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