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/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 1701ffa7c0 [fix](planner)push constant expr in predicate to outer 
join's other conjuncts by mistake (#11527)
1701ffa7c0 is described below

commit 1701ffa7c08892cda6accaab30eb91b50fe1e5d3
Author: morrySnow <101034200+morrys...@users.noreply.github.com>
AuthorDate: Mon Aug 8 20:56:08 2022 +0800

    [fix](planner)push constant expr in predicate to outer join's other 
conjuncts by mistake (#11527)
    
    constant expr in predicate should not be pushed to outer join's other 
conjuncts
---
 .../apache/doris/planner/SingleNodePlanner.java    |  8 +--
 .../test_constant_push_down_through_outer_join.out |  3 ++
 ...st_constant_push_down_through_outer_join.groovy | 61 ++++++++++++++++++++++
 3 files changed, 68 insertions(+), 4 deletions(-)

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 31e8794b05..85d9dc99ee 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
@@ -1559,24 +1559,24 @@ public class SingleNodePlanner {
                 // Conjuncts will be assigned to the lowest outer join node or 
non-outer join's leaf children.
                 for (int i = select.getTableRefs().size(); i > 1; i--) {
                     final TableRef joinInnerChild = 
select.getTableRefs().get(i - 1);
+                    final TableRef joinOuterChild = 
select.getTableRefs().get(i - 2);
                     if (!joinInnerChild.getJoinOp().isOuterJoin()) {
-                        // lowest join is't outer join.
+                        // lowest join isn't outer join.
                         if (i == 2) {
                             // Register constant for inner.
                             viewAnalyzer.registerConjuncts(newConjuncts, 
joinInnerChild.getDesc().getId().asList());
                             // Register constant for outer.
-                            final TableRef joinOuterChild = 
select.getTableRefs().get(0);
                             final List<Expr> cloneConjuncts = 
cloneExprs(newConjuncts);
                             viewAnalyzer.registerConjuncts(cloneConjuncts, 
joinOuterChild.getDesc().getId().asList());
                         }
                         continue;
                     }
-                    viewAnalyzer.registerOnClauseConjuncts(newConjuncts, 
joinInnerChild);
+                    viewAnalyzer.registerConjuncts(newConjuncts, 
joinOuterChild.getId());
                     break;
                 }
             } else {
                 Preconditions.checkArgument(select.getTableRefs().size() == 1);
-                viewAnalyzer.registerConjuncts(newConjuncts, 
select.getTableRefs().get(0).getDesc().getId().asList());
+                viewAnalyzer.registerConjuncts(newConjuncts, 
select.getTableRefs().get(0).getId());
             }
         } else {
             Preconditions.checkArgument(stmt instanceof SetOperationStmt);
diff --git 
a/regression-test/data/correctness/test_constant_push_down_through_outer_join.out
 
b/regression-test/data/correctness/test_constant_push_down_through_outer_join.out
new file mode 100644
index 0000000000..f958424e65
--- /dev/null
+++ 
b/regression-test/data/correctness/test_constant_push_down_through_outer_join.out
@@ -0,0 +1,3 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+
diff --git 
a/regression-test/suites/correctness/test_constant_push_down_through_outer_join.groovy
 
b/regression-test/suites/correctness/test_constant_push_down_through_outer_join.groovy
new file mode 100644
index 0000000000..1343184219
--- /dev/null
+++ 
b/regression-test/suites/correctness/test_constant_push_down_through_outer_join.groovy
@@ -0,0 +1,61 @@
+// 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("constant_push_down_through_outer_join") {
+     sql """ DROP TABLE IF EXISTS wftest1 """
+     sql """ DROP TABLE IF EXISTS wftest2 """
+     sql """
+         CREATE TABLE `wftest1` (
+             `aa` varchar(200) NULL COMMENT "",
+             `bb` int NULL COMMENT ""
+         ) ENGINE=OLAP
+         UNIQUE KEY (`aa`) COMMENT "aa" 
+         DISTRIBUTED BY HASH(`aa`) BUCKETS 3
+         PROPERTIES (
+             "replication_allocation" = "tag.location.default: 1",
+             "in_memory" = "false",
+             "storage_format" = "V2"
+         )
+     """
+     sql """
+         CREATE TABLE `wftest2` (
+             `cc` varchar(200) NULL COMMENT "",
+             `dd` int NULL COMMENT ""
+         ) ENGINE=OLAP
+         UNIQUE KEY (`cc`)
+         COMMENT "OLAP"
+         DISTRIBUTED BY HASH(`cc`) BUCKETS 3
+         PROPERTIES (
+             "replication_allocation" = "tag.location.default: 1",
+             "in_memory" = "false",
+             "storage_format" = "V2"
+         )
+     """
+
+     sql """
+         INSERT INTO  wftest1 VALUES('a', 1), ('b', 1), ('c', 1);
+     """
+
+     sql """
+         INSERT INTO  wftest2 VALUES('a', 1), ('b', 1), ('d', 1);
+     """
+
+     order_qt_select """
+         select t.* from (select * from wftest1 t1 left join wftest2 t2 on 
t1.aa=t2.cc) t where dayofweek(current_date())=8; 
+     """
+ }
+


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

Reply via email to