Skip to content

Commit 210ab29

Browse files
committed
[WIP] Remove pulling up from merging rules
1 parent 5aa29b0 commit 210ab29

File tree

1 file changed

+69
-24
lines changed
  • rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper

1 file changed

+69
-24
lines changed

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

Lines changed: 69 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ use crate::compile::rewrite::{
1111
impl WrapperRules {
1212
pub fn merge_rules(&self, rules: &mut Vec<CubeRewrite>) {
1313
rules.extend(vec![rewrite(
14-
"wrapper-pull-up-inner-wrapper-with-filter",
14+
"wrapper-merge-inner-wrapper-with-filter",
15+
16+
// This does not turn cube_scan_wrapper(wrapped_select(...)) to cube_scan_wrapper(wrapper_pullup_replacer(...)))
17+
// Because that would act as a pullup wrapper_pullup_replacer over wrapped_select
18+
// And that should follow the rules regarding ungroupedness
19+
// So, to avoid repeating it this rules just merges two wrapped_select's, but avoid pulling up further
20+
1521
cube_scan_wrapper(
1622
wrapped_select(
1723
"?select_type",
@@ -104,40 +110,79 @@ impl WrapperRules {
104110
"CubeScanWrapperFinalized:false",
105111
),
106112
cube_scan_wrapper(
107-
wrapper_pullup_replacer(
108-
wrapped_select(
109-
"?select_type",
113+
wrapped_select(
114+
"?select_type",
115+
wrapper_pullup_replacer(
110116
"?projection_expr",
117+
"?alias_to_cube",
118+
"?ungrouped",
119+
"?in_projection",
120+
"?cube_members",
121+
),
122+
wrapper_pullup_replacer(
111123
"?subqueries",
124+
"?alias_to_cube",
125+
"?ungrouped",
126+
"?in_projection",
127+
"?cube_members",
128+
),
129+
wrapper_pullup_replacer(
112130
"?group_expr",
131+
"?alias_to_cube",
132+
"?ungrouped",
133+
"?in_projection",
134+
"?cube_members",
135+
),
136+
wrapper_pullup_replacer(
113137
"?aggr_expr",
138+
"?alias_to_cube",
139+
"?ungrouped",
140+
"?in_projection",
141+
"?cube_members",
142+
),
143+
wrapper_pullup_replacer(
114144
"?window_expr",
145+
"?alias_to_cube",
146+
"?ungrouped",
147+
"?in_projection",
148+
"?cube_members",
149+
),
150+
wrapper_pullup_replacer(
115151
"?inner_cube_scan_input",
116-
wrapped_select_joins_empty_tail(),
152+
"?alias_to_cube",
153+
"?ungrouped",
154+
"?in_projection",
155+
"?cube_members",
156+
),
157+
wrapped_select_joins_empty_tail(),
158+
wrapper_pullup_replacer(
117159
wrapped_select_filter_expr(
118160
"?inner_filter_expr_left",
119161
"?inner_filter_expr_right",
120162
),
121-
wrapped_select_having_expr_empty_tail(),
122-
"?limit",
123-
"?offset",
163+
"?alias_to_cube",
164+
"?ungrouped",
165+
"?in_projection",
166+
"?cube_members",
167+
),
168+
wrapped_select_having_expr_empty_tail(),
169+
"?limit",
170+
"?offset",
171+
wrapper_pullup_replacer(
124172
"?order_expr",
125-
"?select_alias",
126-
"?select_distinct",
127-
// this should inherit lower instead of higher
128-
// sematics is that "input of WS in ungrouped", and we use input from lower
129-
// lower WrappedSelect is simple, but if it's ungrouped, then
130-
// "?select_ungrouped",
131-
"WrappedSelectUngrouped:true",
132-
"?select_ungrouped_scan",
133-
),
134-
"?alias_to_cube",
135-
// TODO why fixed false? is
136-
// "WrapperPullupReplacerUngrouped:false",
137-
// "WrapperPullupReplacerUngrouped:true",
138-
"?ungrouped",
139-
"?in_projection",
140-
"?cube_members",
173+
"?alias_to_cube",
174+
"?ungrouped",
175+
"?in_projection",
176+
"?cube_members",
177+
),
178+
"?select_alias",
179+
"?select_distinct",
180+
// this should inherit lower instead of higher
181+
// semantics is that "input of WS in ungrouped", and we use input from lower
182+
// lower WrappedSelect is simple, but if it's ungrouped, then
183+
// "?select_ungrouped",
184+
"WrappedSelectUngrouped:true",
185+
"?select_ungrouped_scan",
141186
),
142187
"CubeScanWrapperFinalized:false",
143188
),

0 commit comments

Comments
 (0)