From 397747af2ce4cfc06f3adbe66fc52bc8f60f8aff Mon Sep 17 00:00:00 2001 From: chenhao <510341142@qq.com> Date: Tue, 26 Feb 2019 10:55:14 +0800 Subject: [PATCH] Fix bug that push down the predicates past AggregateNode (#658) --- be/src/exec/exec_node.cpp | 10 ++++++---- .../org/apache/doris/planner/DistributedPlanner.java | 12 ++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/be/src/exec/exec_node.cpp b/be/src/exec/exec_node.cpp index a71eaa9da0..679d42c21d 100644 --- a/be/src/exec/exec_node.cpp +++ b/be/src/exec/exec_node.cpp @@ -143,10 +143,12 @@ ExecNode::~ExecNode() { void ExecNode::push_down_predicate( RuntimeState* state, std::list* expr_ctxs) { - for (int i = 0; i < _children.size(); ++i) { - _children[i]->push_down_predicate(state, expr_ctxs); - if (expr_ctxs->size() == 0) { - return; + if (_type != TPlanNodeType::AGGREGATION_NODE) { + for (int i = 0; i < _children.size(); ++i) { + _children[i]->push_down_predicate(state, expr_ctxs); + if (expr_ctxs->size() == 0) { + return; + } } } diff --git a/fe/src/main/java/org/apache/doris/planner/DistributedPlanner.java b/fe/src/main/java/org/apache/doris/planner/DistributedPlanner.java index d2cd3f1c91..891510240c 100644 --- a/fe/src/main/java/org/apache/doris/planner/DistributedPlanner.java +++ b/fe/src/main/java/org/apache/doris/planner/DistributedPlanner.java @@ -360,13 +360,13 @@ public class DistributedPlanner { connectChildFragment(node, 1, leftChildFragment, rightChildFragment); leftChildFragment.setPlanRoot(node); - if (!node.getJoinOp().isOuterJoin() && !node.getJoinOp().isSemiAntiJoin()) { + // Push down the predicates constructed by the right child when the + // join op is inner join or left semi join. + if (node.getJoinOp().isInnerJoin() || node.getJoinOp().isLeftSemiJoin()) { node.setIsPushDown(true); - } - // semi-join, only left semi join can pushDown - if (node.getJoinOp().isLeftSemiJoin()) { - node.setIsPushDown(true); - } + } else { + node.setIsPushDown(false); + } return leftChildFragment; } else { node.setDistributionMode(HashJoinNode.DistributionMode.PARTITIONED);