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

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


The following commit(s) were added to refs/heads/master by this push:
     new fb27e3ef31 [fix](planner) let OlapScanNode turn off preaggragation 
when there is a filter on DELETE_SIGN (#12118)
fb27e3ef31 is described below

commit fb27e3ef31fc56479999e9a41ebe91db48f1ff94
Author: Yongqiang YANG <[email protected]>
AuthorDate: Tue Aug 30 15:54:37 2022 +0800

    [fix](planner) let OlapScanNode turn off preaggragation when there is a 
filter on DELETE_SIGN (#12118)
    
    We can skip aggregate on replace column, otherwise it would generate
    wrong result. e.g. a row in UNIQUE is deleted by delte_sign_column,
    then it would be returned.
---
 .../org/apache/doris/planner/OlapScanNode.java     |  6 ++-
 .../data/delete_p0/test_delete_sign_mow.out        | 52 ++++++++++++++++++++++
 .../data/delete_p0/test_delete_sign_unique.out     | 52 ++++++++++++++++++++++
 .../suites/delete_p0/test_delete_sign_mow.sql      | 32 +++++++++++++
 .../suites/delete_p0/test_delete_sign_unique.sql   | 32 +++++++++++++
 5 files changed, 173 insertions(+), 1 deletion(-)

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 5b010be574..967895ee4e 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
@@ -171,7 +171,8 @@ public class OlapScanNode extends ScanNode {
 
     public void setIsPreAggregation(boolean isPreAggregation, String reason) {
         this.isPreAggregation = isPreAggregation;
-        this.reasonOfPreAggregation = reason;
+        this.reasonOfPreAggregation = this.reasonOfPreAggregation == null ? 
reason :
+                                      this.reasonOfPreAggregation + " " + 
reason;
     }
 
     public boolean isPreAggregation() {
@@ -1044,6 +1045,9 @@ public class OlapScanNode extends ScanNode {
             Expr conjunct = new BinaryPredicate(BinaryPredicate.Operator.EQ, 
deleteSignSlot, new IntLiteral(0));
             conjunct.analyze(analyzer);
             conjuncts.add(conjunct);
+            if (!olapTable.getEnableUniqueKeyMergeOnWrite()) {
+                closePreAggregation(Column.DELETE_SIGN + " is used as 
conjuncts.");
+            }
         }
     }
 
diff --git a/regression-test/data/delete_p0/test_delete_sign_mow.out 
b/regression-test/data/delete_p0/test_delete_sign_mow.out
new file mode 100644
index 0000000000..fabf3e3e71
--- /dev/null
+++ b/regression-test/data/delete_p0/test_delete_sign_mow.out
@@ -0,0 +1,52 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !test_delete_sign_mow --
+0
+
+-- !test_delete_sign_mow_2 --
+0
+
+-- !test_delete_sign_mow_3 --
+1
+
+-- !test_delete_sign_mow_4 --
+1
+
+-- !test_delete_sign_mow_5 --
+1
+
+-- !test_delete_sign_mow_6 --
+1
+
+-- !test_delete_sign_mow_7 --
+1
+
+-- !test_delete_sign_mow_8 --
+1
+
+-- !test_delete_sign_mow_9 --
+1
+
+-- !test_delete_sign_mow_10 --
+2
+
+-- !test_delete_sign_mow_11 --
+2
+
+-- !test_delete_sign_mow_12 --
+1
+
+-- !test_delete_sign_mow_13 --
+1
+
+-- !test_delete_sign_mow_14 --
+1
+
+-- !test_delete_sign_mow_15 --
+1
+
+-- !test_delete_sign_mow_16 --
+0
+
+-- !test_delete_sign_mow_17 --
+0
+
diff --git a/regression-test/data/delete_p0/test_delete_sign_unique.out 
b/regression-test/data/delete_p0/test_delete_sign_unique.out
new file mode 100644
index 0000000000..d62aa995fa
--- /dev/null
+++ b/regression-test/data/delete_p0/test_delete_sign_unique.out
@@ -0,0 +1,52 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !test_delete_sign_unique --
+0
+
+-- !test_delete_sign_unique_2 --
+0
+
+-- !test_delete_sign_unique_3 --
+1
+
+-- !test_delete_sign_unique_4 --
+1
+
+-- !test_delete_sign_unique_5 --
+1
+
+-- !test_delete_sign_unique_6 --
+1
+
+-- !test_delete_sign_unique_7 --
+1
+
+-- !test_delete_sign_unique_8 --
+1
+
+-- !test_delete_sign_unique_9 --
+1
+
+-- !test_delete_sign_unique_10 --
+2
+
+-- !test_delete_sign_unique_11 --
+2
+
+-- !test_delete_sign_unique_12 --
+1
+
+-- !test_delete_sign_unique_13 --
+1
+
+-- !test_delete_sign_unique_14 --
+1
+
+-- !test_delete_sign_unique_15 --
+1
+
+-- !test_delete_sign_unique_16 --
+0
+
+-- !test_delete_sign_unique_17 --
+0
+
diff --git a/regression-test/suites/delete_p0/test_delete_sign_mow.sql 
b/regression-test/suites/delete_p0/test_delete_sign_mow.sql
new file mode 100644
index 0000000000..a6387bd231
--- /dev/null
+++ b/regression-test/suites/delete_p0/test_delete_sign_mow.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS delete_sign_test_mow;
+
+CREATE TABLE delete_sign_test_mow (
+                `uid` BIGINT NULL,
+                `v1` BIGINT NULL 
+                )
+UNIQUE KEY(uid)
+DISTRIBUTED BY HASH(uid) BUCKETS 3
+PROPERTIES (
+    "unique_key_merge_on_write" = "true",
+    "replication_num" = "1"
+);
+
+insert into delete_sign_test_mow values(1, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow values(1, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow values(2, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow(uid, v1, __DORIS_DELETE_SIGN__) values(1, 1, 
1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow(uid, v1, __DORIS_DELETE_SIGN__) values(2, 1, 
1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
diff --git a/regression-test/suites/delete_p0/test_delete_sign_unique.sql 
b/regression-test/suites/delete_p0/test_delete_sign_unique.sql
new file mode 100644
index 0000000000..3089937b12
--- /dev/null
+++ b/regression-test/suites/delete_p0/test_delete_sign_unique.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS delete_sign_test;
+
+CREATE TABLE delete_sign_test (
+                `uid` BIGINT NULL,
+                `v1` BIGINT NULL 
+                )
+UNIQUE KEY(uid)
+DISTRIBUTED BY HASH(uid) BUCKETS 3
+PROPERTIES (
+    "replication_num" = "1"
+);
+
+insert into delete_sign_test values(1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test values(1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test values(2, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test(uid, v1, __DORIS_DELETE_SIGN__) values(1, 1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test(uid, v1, __DORIS_DELETE_SIGN__) values(2, 1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to