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

yiguolei 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 2a9b4a0f768 [enhancement](paimon)support predict for null and notnull 
(#29134)
2a9b4a0f768 is described below

commit 2a9b4a0f7686e80af2ead476e7e3f70fb8dab029
Author: wuwenchi <[email protected]>
AuthorDate: Wed Jan 3 12:53:39 2024 +0800

    [enhancement](paimon)support predict for null and notnull (#29134)
---
 .../external/paimon/PaimonPredicateConverter.java       | 17 +++++++++++++++--
 .../external_table_p0/paimon/test_paimon_catalog.out    |  4 ++++
 .../external_table_p0/paimon/test_paimon_catalog.groovy |  3 +++
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/paimon/PaimonPredicateConverter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/paimon/PaimonPredicateConverter.java
index cd35d1093ed..ac750be2745 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/planner/external/paimon/PaimonPredicateConverter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/planner/external/paimon/PaimonPredicateConverter.java
@@ -21,6 +21,7 @@ import org.apache.doris.analysis.CastExpr;
 import org.apache.doris.analysis.CompoundPredicate;
 import org.apache.doris.analysis.Expr;
 import org.apache.doris.analysis.FunctionCallExpr;
+import org.apache.doris.analysis.IsNullPredicate;
 import org.apache.doris.analysis.LiteralExpr;
 import org.apache.doris.analysis.SlotRef;
 import org.apache.doris.thrift.TExprOpcode;
@@ -70,10 +71,16 @@ public class PaimonPredicateConverter {
 
             switch (compoundPredicate.getOp()) {
                 case AND: {
-                    return PredicateBuilder.and(left, right);
+                    if (left != null && right != null) {
+                        return PredicateBuilder.and(left, right);
+                    }
+                    return null;
                 }
                 case OR: {
-                    return PredicateBuilder.or(left, right);
+                    if (left != null && right != null) {
+                        return PredicateBuilder.or(left, right);
+                    }
+                    return null;
                 }
                 default:
                     return null;
@@ -120,6 +127,12 @@ public class PaimonPredicateConverter {
                     if (name.equals("like") && !s.startsWith("%") && 
s.endsWith("%")) {
                         return builder.startsWith(idx, 
BinaryString.fromString(s.substring(0, s.length() - 1)));
                     }
+                } else if (dorisExpr instanceof IsNullPredicate) {
+                    if (((IsNullPredicate) dorisExpr).isNotNull()) {
+                        return builder.isNotNull(idx);
+                    } else {
+                        return builder.isNull(idx);
+                    }
                 }
                 return null;
             default:
diff --git 
a/regression-test/data/external_table_p0/paimon/test_paimon_catalog.out 
b/regression-test/data/external_table_p0/paimon/test_paimon_catalog.out
index b0c9eff5b0a..9661bf56cf8 100644
--- a/regression-test/data/external_table_p0/paimon/test_paimon_catalog.out
+++ b/regression-test/data/external_table_p0/paimon/test_paimon_catalog.out
@@ -474,3 +474,7 @@ bbb
 2      [[0, 0, 0], [1, 0, 0], [0, 1, 1]]       [["a", "5", "f"], ["7", "2", 
"3"], ["1", "b", "f"]]     [["11", "a8", "e3"], ["f4", "ee", "c3"], ["0f", 
"c6", "05"]]    
[["b723869515b24e9fbb54503f8a7584f083479998766213b784a9c530cbc0376bd5035054c657437251b85fa3dd41a0483776",
 
"ee780d81d3e9faa36aad06522a09cf9b18e00614c991d2c079243dcc7190f3dd6559e75e2c1992270272d9a9c01e950c7bd4",
 
"6e825a52cdae65786801caae53182956c80f88a48fa258a90d2c93302023c78b83f1dce758615a74731c9eef993a8c1dc4ad"],
 ["2ae97869372970f7ad7d0007a1 [...]
 3      [[1, 0, 0], [1, 0, 1], [1, 0, 1]]       [["c", "6", "4"], ["1", "e", 
"7"], ["7", "1", "d"]]     [["50", "a9", "b0"], ["02", "bf", "3a"], ["0a", 
"1d", "9a"]]    
[["2df05ba6ce8661f0fb9bc88386a1ba67188e3e99a4142a0703e1cd8bdf041fbc20131e50bea2a9891498c638ebac842d3d46",
 
"f6fecf3a4263ed8d4c5b63e4b3d9f4084b83835d9fba2046bf48d0a8068f2044c48271a1e9726741a09badea72c37cf18de3",
 
"d23af3266db4eda12673f5c451d36343ba1cea00fbfeeff2165de40e834778eb96a1199cb523dd394b4f08824f6af2a7d894"],
 ["dc00e9b27b9540e170caf93805 [...]
 
+-- !c101 --
+1      2       3       4       5       6       7       8       9.1     10.1    
11.10   2020-02-02      13str   14varchar       a       true    aaaa    
2023-08-13T09:32:38.530
+10     20      30      40      50      60      70      80      90.1    100.1   
110.10  2020-03-02      130str  140varchar      b       false   bbbb    
2023-08-14T08:32:52.821
+
diff --git 
a/regression-test/suites/external_table_p0/paimon/test_paimon_catalog.groovy 
b/regression-test/suites/external_table_p0/paimon/test_paimon_catalog.groovy
index ecf3263f825..87ea14ad2fd 100644
--- a/regression-test/suites/external_table_p0/paimon/test_paimon_catalog.groovy
+++ b/regression-test/suites/external_table_p0/paimon/test_paimon_catalog.groovy
@@ -166,6 +166,8 @@ suite("test_paimon_catalog", 
"p0,external,doris,external_docker,external_docker_
 
             def c100= """select * from array_nested order by c1;"""
 
+            def c101="""select * from all_table where c1 is not null or c2 is 
not null order by c1"""
+
             String hdfs_port = context.config.otherConfigs.get("hdfs_port")
             String catalog_name = "paimon1"
             String externalEnvIp = 
context.config.otherConfigs.get("externalEnvIp")
@@ -284,6 +286,7 @@ suite("test_paimon_catalog", 
"p0,external,doris,external_docker,external_docker_
             qt_c98 c98
             qt_c99 c99
             qt_c100 c100
+            qt_c101 c101
 
             // test view from jion paimon
             sql """ switch internal """


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

Reply via email to