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