You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/05/05 01:42:54 UTC

[incubator-doris] branch master updated: [fix](vectorized) Fix bug of outer join with delete column (#9315)

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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 23d673a178 [fix](vectorized) Fix bug of outer join with delete column (#9315)
23d673a178 is described below

commit 23d673a178696272ffbfa9fad3573e3ab2524c9c
Author: HappenLee <ha...@hotmail.com>
AuthorDate: Thu May 5 09:42:48 2022 +0800

    [fix](vectorized) Fix bug of outer join with delete column (#9315)
---
 .../java/org/apache/doris/analysis/Analyzer.java   |  4 +++
 .../org/apache/doris/planner/OlapScanNode.java     |  1 +
 .../sql/test_outer_join_with_delete_column.out     | 33 ++++++++++++++++++++++
 regression-test/suites/query/join/ddl/table_1.sql  | 12 ++++++++
 regression-test/suites/query/join/ddl/table_2.sql  | 12 ++++++++
 regression-test/suites/query/join/load.groovy      |  5 +++-
 .../sql/test_outer_join_with_delete_column.sql     | 17 +++++++++++
 7 files changed, 83 insertions(+), 1 deletion(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
index c296fba022..101b6fe636 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
@@ -1381,6 +1381,10 @@ public class Analyzer {
         return globalState.fullOuterJoinedTupleIds.containsKey(tid);
     }
 
+    public boolean isOuterMaterializedJoined(TupleId tid) {
+        return globalState.outerJoinedMaterializedTupleIds.contains(tid);
+    }
+
     public boolean isFullOuterJoined(SlotId sid) {
         return isFullOuterJoined(getTupleId(sid));
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 6a1fc49b03..eacb4f7a37 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -904,6 +904,7 @@ public class OlapScanNode extends ScanNode {
             SlotRef deleteSignSlot = new SlotRef(desc.getAliasAsName(), Column.DELETE_SIGN);
             deleteSignSlot.analyze(analyzer);
             deleteSignSlot.getDesc().setIsMaterialized(true);
+            deleteSignSlot.getDesc().setIsNullable(analyzer.isOuterMaterializedJoined(desc.getId()));
             Expr conjunct = new BinaryPredicate(BinaryPredicate.Operator.EQ, deleteSignSlot, new IntLiteral(0));
             conjunct.analyze(analyzer);
             conjuncts.add(conjunct);
diff --git a/regression-test/data/query/join/sql/test_outer_join_with_delete_column.out b/regression-test/data/query/join/sql/test_outer_join_with_delete_column.out
new file mode 100644
index 0000000000..e73b7ed352
--- /dev/null
+++ b/regression-test/data/query/join/sql/test_outer_join_with_delete_column.out
@@ -0,0 +1,33 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !test_outer_join_with_delete_column --
+\N	\N	H220427011909770192580	2022-04-27T16:00:04
+\N	\N	H220427011909800104411	2022-04-27T16:00:14
+\N	\N	H220427011909820192943	2022-04-27T16:00:23
+\N	\N	H220427011909850160918	2022-04-27T16:00:33
+\N	\N	H220427011909870184823	2022-04-27T16:00:36
+\N	\N	T220427400109110184990	2022-04-27T16:00:29
+\N	\N	T220427400109910160949	2022-04-27T16:00:54
+\N	\N	T220427400109930192249	2022-04-27T16:00:56
+\N	\N	T220427400115770144416	2022-04-27T16:00:12
+\N	\N	T220427400123050168464	2022-04-27T16:00:37
+\N	\N	T220427400123770120058	2022-04-27T16:00:56
+\N	\N	T220427400124330112931	2022-04-27T16:00:56
+\N	\N	T220427400124430144718	2022-04-27T16:00:07
+\N	\N	T220427400126390112736	2022-04-27T16:00:19
+\N	\N	T220427400126530112854	2022-04-27T16:00:34
+\N	\N	T220427400127160144672	2022-04-27T16:00:10
+\N	\N	T220427400127900184511	2022-04-27T16:00:34
+\N	\N	T220427400128350120717	2022-04-27T16:00:56
+\N	\N	T220427400129680120838	2022-04-27T16:00:39
+\N	\N	T220427400129940120380	2022-04-27T16:00:23
+\N	\N	T220427400130570160488	2022-04-27T16:00:34
+\N	\N	T220427400130610112671	2022-04-27T16:00:30
+\N	\N	T220427400136970192083	2022-04-27T16:00:51
+\N	\N	T220427400137600160704	2022-04-27T16:00:35
+\N	\N	T220427400139720192986	2022-04-27T16:00:34
+\N	\N	T220427400140260152375	2022-04-27T16:00:02
+\N	\N	T220427400144590176969	2022-04-27T16:00:49
+\N	\N	T220427400146320176530	2022-04-27T16:00:34
+\N	\N	T220427400153170104281	2022-04-27T16:00:31
+\N	\N	T220427601780480120027	2022-04-27T16:00:58
+
diff --git a/regression-test/suites/query/join/ddl/table_1.sql b/regression-test/suites/query/join/ddl/table_1.sql
new file mode 100644
index 0000000000..9378994e3c
--- /dev/null
+++ b/regression-test/suites/query/join/ddl/table_1.sql
@@ -0,0 +1,12 @@
+CREATE TABLE `table_1` (
+  `abcd` varchar(150) NULL COMMENT "",
+  `create_time` datetime NULL COMMENT ""
+) ENGINE=OLAP
+UNIQUE KEY(`abcd`)
+COMMENT "OLAP"
+DISTRIBUTED BY HASH(`abcd`) BUCKETS 3
+  PROPERTIES (
+  "replication_allocation" = "tag.location.default: 1",
+  "in_memory" = "false",
+  "storage_format" = "V2"
+)
diff --git a/regression-test/suites/query/join/ddl/table_2.sql b/regression-test/suites/query/join/ddl/table_2.sql
new file mode 100644
index 0000000000..31cbf5b906
--- /dev/null
+++ b/regression-test/suites/query/join/ddl/table_2.sql
@@ -0,0 +1,12 @@
+CREATE TABLE `table_2` (
+  `abcd` varchar(150) NULL COMMENT "",
+  `create_time` datetime NULL COMMENT ""
+) ENGINE=OLAP
+UNIQUE KEY(`abcd`)
+COMMENT "OLAP"
+DISTRIBUTED BY HASH(`abcd`) BUCKETS 3
+  PROPERTIES (
+  "replication_allocation" = "tag.location.default: 1",
+  "in_memory" = "false",
+  "storage_format" = "V2"
+)
diff --git a/regression-test/suites/query/join/load.groovy b/regression-test/suites/query/join/load.groovy
index 60c429b068..aa3a5402f2 100644
--- a/regression-test/suites/query/join/load.groovy
+++ b/regression-test/suites/query/join/load.groovy
@@ -20,7 +20,7 @@
 // and modified by Doris.
 
 suite("load") {
-    def tables=["test_join", "test_bucket_shuffle_join"]
+    def tables=["test_join", "test_bucket_shuffle_join", "table_1", "table_2"]
 
     for (String table in tables) {
         sql """ DROP TABLE IF EXISTS $table """
@@ -31,8 +31,11 @@ suite("load") {
     }
 
     sql """ insert into test_join values(1),(2),(3),(4),(5) """
+
     sql """ ALTER TABLE test_bucket_shuffle_join ADD PARTITION p202112 
             VALUES LESS THAN ("2022-01-01 00:00:00") DISTRIBUTED BY HASH(id) BUCKETS 2;"""
     sql """ insert into test_bucket_shuffle_join values(1, "2021-12-01 00:00:00"),
         (2, "2021-12-01 00:00:00"), (3, "2021-12-01 00:00:00")"""
+
+    sql """ INSERT INTO table_2 VALUES ('H220427011909850160918','2022-04-27 16:00:33'),('T220427400109910160949','2022-04-27 16:00:54'),('T220427400123770120058','2022-04-27 16:00:56'),('T220427400126530112854','2022-04-27 16:00:34'),('T220427400127160144672','2022-04-27 16:00:10'),('T220427400127900184511','2022-04-27 16:00:34'),('T220427400129940120380','2022-04-27 16:00:23'),('T220427400139720192986','2022-04-27 16:00:34'),('T220427400140260152375','2022-04-27 16:00:02'),('T220427400 [...]
 }
diff --git a/regression-test/suites/query/join/sql/test_outer_join_with_delete_column.sql b/regression-test/suites/query/join/sql/test_outer_join_with_delete_column.sql
new file mode 100644
index 0000000000..8b07a72f3c
--- /dev/null
+++ b/regression-test/suites/query/join/sql/test_outer_join_with_delete_column.sql
@@ -0,0 +1,17 @@
+SELECT
+*
+FROM
+(
+SELECT
+table_1.abcd AS exist_key,
+table_1.create_time AS business_time
+FROM
+table_1
+) source
+RIGHT JOIN (
+SELECT
+table_2.abcd AS exist_key,
+table_2.create_time AS business_time
+FROM
+table_2
+) target ON source.exist_key = target.exist_key order by target.exist_key;


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