@@ -4,7 +4,7 @@ use crate::{
44 compile:: rewrite:: {
55 rules:: utils:: granularity_str_to_int_order, CubeScanUngrouped , CubeScanWrapped ,
66 DimensionName , LogicalPlanLanguage , MemberErrorPriority , ScalarUDFExprFun ,
7- TimeDimensionGranularity , WrappedSelectUngroupedScan ,
7+ TimeDimensionGranularity , WrappedSelectPushToCube , WrappedSelectUngroupedScan ,
88 } ,
99 transport:: { MetaContext , V1CubeMetaDimensionExt } ,
1010} ;
@@ -186,6 +186,11 @@ impl BestCubePlan {
186186 _ => 0 ,
187187 } ;
188188
189+ let wrapped_select_non_push_to_cube = match enode {
190+ LogicalPlanLanguage :: WrappedSelectPushToCube ( WrappedSelectPushToCube ( false ) ) => 1 ,
191+ _ => 0 ,
192+ } ;
193+
189194 let wrapped_select_ungrouped_scan = match enode {
190195 LogicalPlanLanguage :: WrappedSelectUngroupedScan ( WrappedSelectUngroupedScan ( true ) ) => 1 ,
191196 _ => 0 ,
@@ -215,6 +220,7 @@ impl BestCubePlan {
215220 ungrouped_aggregates : 0 ,
216221 wrapper_nodes,
217222 joins,
223+ wrapped_select_non_push_to_cube,
218224 wrapped_select_ungrouped_scan,
219225 empty_wrappers : 0 ,
220226 ast_size_outside_wrapper : 0 ,
@@ -239,6 +245,7 @@ impl BestCubePlan {
239245/// - `member_errors` > `wrapper_nodes` - use SQL push down where possible if cube scan can't be detected
240246/// - `non_pushed_down_window` > `wrapper_nodes` - prefer to always push down window functions
241247/// - `non_pushed_down_limit_sort` > `wrapper_nodes` - prefer to always push down limit-sort expressions
248+ /// - `wrapped_select_non_push_to_cube` > `wrapped_select_ungrouped_scan` - otherwise cost would prefer any aggregation, even non-push-to-Cube
242249/// - match errors by priority - optimize for more specific errors
243250#[ derive( Debug , Clone , Ord , PartialOrd , Eq , PartialEq ) ]
244251pub struct CubePlanCost {
@@ -256,6 +263,7 @@ pub struct CubePlanCost {
256263 joins : usize ,
257264 wrapper_nodes : i64 ,
258265 ast_size_outside_wrapper : usize ,
266+ wrapped_select_non_push_to_cube : usize ,
259267 wrapped_select_ungrouped_scan : usize ,
260268 filters : i64 ,
261269 structure_points : i64 ,
@@ -382,6 +390,8 @@ impl CubePlanCost {
382390 + other. ast_size_outside_wrapper ,
383391 ungrouped_aggregates : self . ungrouped_aggregates + other. ungrouped_aggregates ,
384392 wrapper_nodes : self . wrapper_nodes + other. wrapper_nodes ,
393+ wrapped_select_non_push_to_cube : self . wrapped_select_non_push_to_cube
394+ + other. wrapped_select_non_push_to_cube ,
385395 wrapped_select_ungrouped_scan : self . wrapped_select_ungrouped_scan
386396 + other. wrapped_select_ungrouped_scan ,
387397 cube_scan_nodes : self . cube_scan_nodes + other. cube_scan_nodes ,
@@ -468,6 +478,7 @@ impl CubePlanCost {
468478 } + self . ungrouped_aggregates ,
469479 unwrapped_subqueries : self . unwrapped_subqueries ,
470480 wrapper_nodes : self . wrapper_nodes ,
481+ wrapped_select_non_push_to_cube : self . wrapped_select_non_push_to_cube ,
471482 wrapped_select_ungrouped_scan : self . wrapped_select_ungrouped_scan ,
472483 cube_scan_nodes : self . cube_scan_nodes ,
473484 ast_size_without_alias : self . ast_size_without_alias ,
0 commit comments