Skip to content

Commit 0b532a1

Browse files
MazterQyoumcheshkov
authored andcommitted
wip(cubesql): Flatten SQL push down filter
1 parent 922ac49 commit 0b532a1

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
use crate::compile::rewrite::{
2+
cube_scan_wrapper, rewrite, rewriter::CubeRewrite, rules::wrapper::WrapperRules,
3+
wrapped_select, wrapped_select_aggr_expr_empty_tail, wrapped_select_filter_expr,
4+
wrapped_select_filter_expr_empty_tail, wrapped_select_group_expr_empty_tail,
5+
wrapped_select_having_expr_empty_tail, wrapped_select_joins_empty_tail,
6+
wrapped_select_order_expr_empty_tail, wrapped_select_projection_expr_empty_tail,
7+
wrapped_select_subqueries_empty_tail, wrapped_select_window_expr_empty_tail,
8+
wrapper_pullup_replacer,
9+
};
10+
11+
impl WrapperRules {
12+
pub fn merge_rules(&self, rules: &mut Vec<CubeRewrite>) {
13+
rules.extend(vec![rewrite(
14+
"wrapper-pull-up-inner-wrapper-with-filter",
15+
cube_scan_wrapper(
16+
wrapped_select(
17+
"?select_type",
18+
wrapper_pullup_replacer(
19+
"?projection_expr",
20+
"?alias_to_cube",
21+
"?ungrouped",
22+
"?in_projection",
23+
"?cube_members",
24+
),
25+
wrapper_pullup_replacer(
26+
"?subqueries",
27+
"?alias_to_cube",
28+
"?ungrouped",
29+
"?in_projection",
30+
"?cube_members",
31+
),
32+
wrapper_pullup_replacer(
33+
"?group_expr",
34+
"?alias_to_cube",
35+
"?ungrouped",
36+
"?in_projection",
37+
"?cube_members",
38+
),
39+
wrapper_pullup_replacer(
40+
"?aggr_expr",
41+
"?alias_to_cube",
42+
"?ungrouped",
43+
"?in_projection",
44+
"?cube_members",
45+
),
46+
wrapper_pullup_replacer(
47+
"?window_expr",
48+
"?alias_to_cube",
49+
"?ungrouped",
50+
"?in_projection",
51+
"?cube_members",
52+
),
53+
wrapper_pullup_replacer(
54+
wrapped_select(
55+
"WrappedSelectSelectType:Projection",
56+
wrapped_select_projection_expr_empty_tail(),
57+
wrapped_select_subqueries_empty_tail(),
58+
wrapped_select_group_expr_empty_tail(),
59+
wrapped_select_aggr_expr_empty_tail(),
60+
wrapped_select_window_expr_empty_tail(),
61+
"?inner_cube_scan_input",
62+
wrapped_select_joins_empty_tail(),
63+
wrapped_select_filter_expr(
64+
"?inner_filter_expr_left",
65+
"?inner_filter_expr_right",
66+
),
67+
wrapped_select_having_expr_empty_tail(),
68+
"WrappedSelectLimit:None",
69+
"WrappedSelectOffset:None",
70+
wrapped_select_order_expr_empty_tail(),
71+
"WrappedSelectAlias:None",
72+
"WrappedSelectDistinct:false",
73+
"WrappedSelectUngrouped:true",
74+
"WrappedSelectUngroupedScan:true",
75+
),
76+
"?alias_to_cube",
77+
"?ungrouped",
78+
"?in_projection",
79+
"?cube_members",
80+
),
81+
wrapped_select_joins_empty_tail(),
82+
wrapper_pullup_replacer(
83+
wrapped_select_filter_expr_empty_tail(),
84+
"?alias_to_cube",
85+
"?ungrouped",
86+
"?in_projection",
87+
"?cube_members",
88+
),
89+
wrapped_select_having_expr_empty_tail(),
90+
"?limit",
91+
"?offset",
92+
wrapper_pullup_replacer(
93+
"?order_expr",
94+
"?alias_to_cube",
95+
"?ungrouped",
96+
"?in_projection",
97+
"?cube_members",
98+
),
99+
"?select_alias",
100+
"?select_distinct",
101+
"?select_ungrouped",
102+
"?select_ungrouped_scan",
103+
),
104+
"CubeScanWrapperFinalized:false",
105+
),
106+
cube_scan_wrapper(
107+
wrapper_pullup_replacer(
108+
wrapped_select(
109+
"?select_type",
110+
"?projection_expr",
111+
"?subqueries",
112+
"?group_expr",
113+
"?aggr_expr",
114+
"?window_expr",
115+
"?inner_cube_scan_input",
116+
wrapped_select_joins_empty_tail(),
117+
wrapped_select_filter_expr(
118+
"?inner_filter_expr_left",
119+
"?inner_filter_expr_right",
120+
),
121+
wrapped_select_having_expr_empty_tail(),
122+
"?limit",
123+
"?offset",
124+
"?order_expr",
125+
"?select_alias",
126+
"?select_distinct",
127+
"?select_ungrouped",
128+
"?select_ungrouped_scan",
129+
),
130+
"?alias_to_cube",
131+
"WrapperPullupReplacerUngrouped:false",
132+
"?in_projection",
133+
"?cube_members",
134+
),
135+
"CubeScanWrapperFinalized:false",
136+
),
137+
)]);
138+
}
139+
}

rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ mod is_null_expr;
1515
mod like_expr;
1616
mod limit;
1717
mod literal;
18+
mod merge;
1819
mod negative_expr;
1920
mod not_expr;
2021
mod order;
@@ -82,6 +83,7 @@ impl RewriteRules for WrapperRules {
8283
self.not_expr_rules(&mut rules);
8384
self.distinct_rules(&mut rules);
8485
self.like_expr_rules(&mut rules);
86+
self.merge_rules(&mut rules);
8587

8688
rules
8789
}

0 commit comments

Comments
 (0)