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 6d864eb81092e4fab7b66be450c0fc5d789adcf3 Author: BiteTheDDDDt <pxl...@qq.com> AuthorDate: Thu Nov 23 15:01:13 2023 +0800 fix --- .../vec/exec/join/process_hash_table_probe_impl.h | 57 +++++++++++++--------- 1 file changed, 33 insertions(+), 24 deletions(-) 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 937c8db453d..c3263e9a2b9 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 @@ -238,10 +238,10 @@ Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts( if constexpr (JoinOpType == TJoinOp::LEFT_OUTER_JOIN || JoinOpType == TJoinOp::FULL_OUTER_JOIN) { - auto new_filter_column = ColumnVector<UInt8>::create(row_count); + auto new_filter_column = ColumnUInt8::create(row_count); auto* __restrict filter_map = new_filter_column->get_data().data(); - auto null_map_column = ColumnVector<UInt8>::create(row_count, 0); + auto null_map_column = ColumnUInt8::create(row_count, 0); auto* __restrict null_map_data = null_map_column->get_data().data(); // process equal-conjuncts-matched tuples that are newly generated // in this run if there are any. @@ -273,33 +273,42 @@ Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts( } else if constexpr (JoinOpType == TJoinOp::LEFT_ANTI_JOIN || JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || JoinOpType == TJoinOp::LEFT_SEMI_JOIN) { - auto new_filter_column = ColumnVector<UInt8>::create(row_count); + auto new_filter_column = ColumnUInt8::create(row_count); auto* __restrict filter_map = new_filter_column->get_data().data(); - for (size_t i = 0; i < row_count; ++i) { - if (filter_column_ptr[i]) { - if constexpr (JoinOpType == TJoinOp::LEFT_SEMI_JOIN) { - 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; + + if (is_mark_join) { + auto mark_column = + 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) { + if (!_build_indexs[i]) { + helper.insert_null(); + continue; + } + } + 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) { + filter_map[i] = _parent->_last_probe_match != _probe_indexs[i]; _parent->_last_probe_match = _probe_indexs[i]; } else { - filter_map[i] = _parent->_last_probe_match != _probe_indexs[i]; + if (_build_indexs[i]) { + filter_map[i] = false; + _parent->_last_probe_match = _probe_indexs[i]; + } else { + filter_map[i] = _parent->_last_probe_match != _probe_indexs[i]; + } } + } else { + filter_map[i] = false; } - } else { - filter_map[i] = false; - } - } - - if (is_mark_join) { - auto& matched_map = assert_cast<ColumnVector<UInt8>&>( - *(output_block->get_by_position(orig_columns - 1) - .column->assume_mutable())) - .get_data(); - for (int i = 0; i < row_count; ++i) { - matched_map.push_back(filter_map[i] ^ (JoinOpType != TJoinOp::LEFT_SEMI_JOIN)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org