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

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


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 6b24871a64 [fix](planner)allow infer predicate for external table 
(#24347)
6b24871a64 is described below

commit 6b24871a644130638438304d751cd51e401035df
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Thu Sep 14 11:27:04 2023 +0800

    [fix](planner)allow infer predicate for external table (#24347)
    
    pick from master #24227
---
 .../org/apache/doris/planner/JdbcScanNode.java     |  4 ++
 .../org/apache/doris/planner/MysqlScanNode.java    |  4 ++
 .../org/apache/doris/planner/OdbcScanNode.java     |  4 ++
 .../apache/doris/planner/SingleNodePlanner.java    |  3 +-
 .../test_push_conjunct_external_table.groovy       | 66 ++++++++++++++++++++++
 5 files changed, 80 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
index 7af24dfa35..d46783e9a7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java
@@ -165,6 +165,10 @@ public class JdbcScanNode extends ScanNode {
             return output.toString();
         }
         output.append(prefix).append("QUERY: 
").append(getJdbcQueryStr()).append("\n");
+        if (!conjuncts.isEmpty()) {
+            Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
+            output.append(prefix).append("PREDICATES: 
").append(expr.toSql()).append("\n");
+        }
         return output.toString();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java
index a04b531159..71ed5274b4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/MysqlScanNode.java
@@ -88,6 +88,10 @@ public class MysqlScanNode extends ScanNode {
             return output.toString();
         }
         output.append(prefix).append("Query: 
").append(getMysqlQueryStr()).append("\n");
+        if (!conjuncts.isEmpty()) {
+            Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
+            output.append(prefix).append("PREDICATES: 
").append(expr.toSql()).append("\n");
+        }
         return output.toString();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java
index e22755d63e..9dfb2e2ed9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OdbcScanNode.java
@@ -166,6 +166,10 @@ public class OdbcScanNode extends ScanNode {
             return output.toString();
         }
         output.append(prefix).append("QUERY: 
").append(getOdbcQueryStr()).append("\n");
+        if (!conjuncts.isEmpty()) {
+            Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
+            output.append(prefix).append("PREDICATES: 
").append(expr.toSql()).append("\n");
+        }
         return output.toString();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
index 8acd269f0d..546b27e9b6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
@@ -2011,7 +2011,8 @@ public class SingleNodePlanner {
                 break;
         }
         if (scanNode instanceof OlapScanNode || scanNode instanceof EsScanNode 
|| scanNode instanceof HiveScanNode
-                || scanNode instanceof ExternalFileScanNode) {
+                || scanNode instanceof OdbcScanNode || scanNode instanceof 
JdbcScanNode
+                || scanNode instanceof ExternalFileScanNode || scanNode 
instanceof MysqlScanNode) {
             if (analyzer.enableInferPredicate()) {
                 PredicatePushDown.visitScanNode(scanNode, tblRef.getJoinOp(), 
analyzer);
             }
diff --git 
a/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
 
b/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
new file mode 100644
index 0000000000..2a0b073e0e
--- /dev/null
+++ 
b/regression-test/suites/correctness_p0/test_push_conjunct_external_table.groovy
@@ -0,0 +1,66 @@
+ // 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("test_push_conjunct_external_table") {
+ sql """set enable_nereids_planner=false;"""
+ sql """ DROP TABLE IF EXISTS dim_server; """
+
+ sql """
+     CREATE EXTERNAL TABLE `dim_server` (
+    `col1` varchar(50) NOT NULL,
+    `col2` varchar(50) NOT NULL
+    ) ENGINE=mysql
+    PROPERTIES
+    (
+    "host" = "127.0.0.1",
+    "port" = "8239",
+    "user" = "mysql_user",
+    "password" = "mysql_passwd",
+    "database" = "mysql_db_test",
+    "table" = "mysql_table_test",
+    "charset" = "utf8mb4"
+    );
+ """
+
+ sql """
+     DROP view if exists ads_oreo_sid_report;
+ """
+
+ sql """
+     create view ads_oreo_sid_report
+    (
+    `col1` ,
+        `col2`
+    )
+    AS
+    select
+    tmp.col1,tmp.col2
+    from (
+    select 'abc' as col1,'def' as col2
+    ) tmp
+    inner join dim_server ds on tmp.col1 = ds.col1  and tmp.col2 = ds.col2;
+ """
+
+ explain {
+        sql """select * from ads_oreo_sid_report where col1='abc' and 
col2='def';"""
+        contains "`ds`.`col1` = 'abc'"
+        contains "`ds`.`col2` = 'def'"
+    }
+
+    sql """ DROP TABLE IF EXISTS dim_server; """
+    sql """ DROP view if exists ads_oreo_sid_report; """
+}
\ No newline at end of file


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

Reply via email to