@@ -11,7 +11,13 @@ use crate::compile::rewrite::{
1111impl 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