Current section
Files
Jump to
Current section
Files
c_src/duckdb/src/optimizer/pullup/pullup_from_left.cpp
#include "duckdb/optimizer/filter_pullup.hpp"
#include "duckdb/planner/operator/logical_comparison_join.hpp"
#include "duckdb/planner/operator/logical_join.hpp"
namespace duckdb {
unique_ptr<LogicalOperator> FilterPullup::PullupFromLeft(unique_ptr<LogicalOperator> op) {
D_ASSERT(op->type == LogicalOperatorType::LOGICAL_COMPARISON_JOIN ||
op->type == LogicalOperatorType::LOGICAL_ANY_JOIN || op->type == LogicalOperatorType::LOGICAL_EXCEPT);
FilterPullup left_pullup(true, can_add_column);
FilterPullup right_pullup(false, can_add_column);
op->children[0] = left_pullup.Rewrite(move(op->children[0]));
op->children[1] = right_pullup.Rewrite(move(op->children[1]));
// check only for filters from the LHS
if (!left_pullup.filters_expr_pullup.empty() && right_pullup.filters_expr_pullup.empty()) {
return GeneratePullupFilter(move(op), left_pullup.filters_expr_pullup);
}
return op;
}
} // namespace duckdb