You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2023/11/27 07:19:30 UTC
(doris) 07/13: update
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 dac204d6e53128751f4f1c9a0edcc72adf87334e
Author: BiteTheDDDDt <px...@qq.com>
AuthorDate: Thu Nov 23 16:53:09 2023 +0800
update
---
.../vec/exec/join/process_hash_table_probe_impl.h | 7 +--
.../data/query_p0/join/mark_join/mark_join.out | 19 +++++++
.../query_p0/join/mark_join/mark_join.groovy | 64 ++++++++++++++++++++++
3 files changed, 85 insertions(+), 5 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 c3263e9a2b9..39acd7e8f23 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
@@ -241,16 +241,12 @@ Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts(
auto new_filter_column = ColumnUInt8::create(row_count);
auto* __restrict filter_map = new_filter_column->get_data().data();
- 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.
for (int i = 0; i < row_count; ++i) {
bool join_hit = _build_indexs[i];
bool other_hit = filter_column_ptr[i];
- null_map_data[i] = !join_hit || !other_hit;
-
if (!join_hit) {
filter_map[i] = _parent->_last_probe_match != _probe_indexs[i];
} else {
@@ -263,7 +259,8 @@ Status ProcessHashTableProbe<JoinOpType, Parent>::do_other_join_conjuncts(
for (size_t i = 0; i < row_count; ++i) {
if (filter_map[i]) {
- _tuple_is_null_right_flags->emplace_back(null_map_data[i]);
+ _tuple_is_null_right_flags->emplace_back(!_build_indexs[i] ||
+ !filter_column_ptr[i]);
if constexpr (JoinOpType == TJoinOp::FULL_OUTER_JOIN) {
visited[_build_indexs[i]] = 1;
}
diff --git a/regression-test/data/query_p0/join/mark_join/mark_join.out b/regression-test/data/query_p0/join/mark_join/mark_join.out
new file mode 100644
index 00000000000..ed3575d0e14
--- /dev/null
+++ b/regression-test/data/query_p0/join/mark_join/mark_join.out
@@ -0,0 +1,19 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !test --
+1 1 1 a
+2 2 2 b
+3 -3 \N c
+3 3 \N c
+
+-- !test --
+1 1 1 a
+2 2 2 b
+3 -3 \N c
+3 3 \N c
+
+-- !test --
+1 1 1 a
+2 2 2 b
+3 -3 \N c
+3 3 \N c
+
diff --git a/regression-test/suites/query_p0/join/mark_join/mark_join.groovy b/regression-test/suites/query_p0/join/mark_join/mark_join.groovy
new file mode 100644
index 00000000000..9759a0e9b4c
--- /dev/null
+++ b/regression-test/suites/query_p0/join/mark_join/mark_join.groovy
@@ -0,0 +1,64 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("mark_join") {
+ sql "drop table if exists t1;"
+ sql "drop table if exists t2;"
+ sql """
+ create table t1 (
+ k1 int null,
+ k2 int null,
+ k3 bigint null,
+ k4 varchar(100) null
+ )
+ duplicate key (k1,k2,k3)
+ distributed BY hash(k1) buckets 3
+ properties("replication_num" = "1");
+ """
+
+ sql """
+ create table t2 (
+ k1 int null,
+ k2 int null,
+ k3 bigint null,
+ k4 varchar(100) null
+ )
+ duplicate key (k1,k2,k3)
+ distributed BY hash(k1) buckets 3
+ properties("replication_num" = "1");
+ """
+
+ sql "insert into t1 select 1,1,1,'a';"
+ sql "insert into t1 select 2,2,2,'b';"
+ sql "insert into t1 select 3,-3,null,'c';"
+ sql "insert into t1 select 3,3,null,'c';"
+
+ sql "insert into t2 select 1,1,1,'a';"
+ sql "insert into t2 select 2,2,2,'b';"
+ sql "insert into t2 select 3,-3,null,'c';"
+ sql "insert into t2 select 3,3,null,'c';"
+
+ qt_test """
+ select * from t1 where exists (select t2.k3 from t2 where t1.k2 = t2.k2) or k1 < 10 order by k1, k2;
+ """
+ qt_test """
+ select * from t1 where not exists (select t2.k3 from t2 where t1.k2 = t2.k2) or k1 < 10 order by k1, k2;
+ """
+ qt_test """
+ select * from t1 where t1.k1 not in (select t2.k3 from t2 where t2.k2 = t1.k2) or k1 < 10 order by k1, k2;
+ """
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org