forked from alibaba/AliSQL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpullup_both_side.cpp
More file actions
24 lines (19 loc) · 877 Bytes
/
pullup_both_side.cpp
File metadata and controls
24 lines (19 loc) · 877 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "duckdb/optimizer/filter_pullup.hpp"
namespace duckdb {
unique_ptr<LogicalOperator> FilterPullup::PullupBothSide(unique_ptr<LogicalOperator> op) {
FilterPullup left_pullup(true, can_add_column);
FilterPullup right_pullup(true, can_add_column);
op->children[0] = left_pullup.Rewrite(std::move(op->children[0]));
op->children[1] = right_pullup.Rewrite(std::move(op->children[1]));
D_ASSERT(left_pullup.can_add_column == can_add_column);
D_ASSERT(right_pullup.can_add_column == can_add_column);
// merging filter expressions
for (idx_t i = 0; i < right_pullup.filters_expr_pullup.size(); ++i) {
left_pullup.filters_expr_pullup.push_back(std::move(right_pullup.filters_expr_pullup[i]));
}
if (!left_pullup.filters_expr_pullup.empty()) {
return GeneratePullupFilter(std::move(op), left_pullup.filters_expr_pullup);
}
return op;
}
} // namespace duckdb