@@ -90,7 +90,7 @@ impl PhysicalPlanBuilder {
90
90
original_sql_pre_aggregations : HashMap < String , String > ,
91
91
total_query : bool ,
92
92
) -> Result < Rc < Select > , CubeError > {
93
- let mut context = PhysicalPlanBuilderContext :: default ( ) ;
93
+ let mut context = PushDownBuilderContext :: default ( ) ;
94
94
context. original_sql_pre_aggregations = original_sql_pre_aggregations;
95
95
let query = self . build_impl ( logical_plan, & context) ?;
96
96
let query = if total_query {
@@ -104,7 +104,7 @@ impl PhysicalPlanBuilder {
104
104
fn build_total_count (
105
105
& self ,
106
106
source : Rc < Select > ,
107
- context : & PhysicalPlanBuilderContext ,
107
+ context : & PushDownBuilderContext ,
108
108
) -> Result < Rc < Select > , CubeError > {
109
109
let from = From :: new_from_subselect ( source. clone ( ) , ORIGINAL_QUERY . to_string ( ) ) ;
110
110
let mut select_builder = SelectBuilder :: new ( from) ;
@@ -116,17 +116,15 @@ impl PhysicalPlanBuilder {
116
116
fn build_impl (
117
117
& self ,
118
118
logical_plan : Rc < Query > ,
119
- context : & PhysicalPlanBuilderContext ,
119
+ context : & PushDownBuilderContext ,
120
120
) -> Result < Rc < Select > , CubeError > {
121
121
match logical_plan. as_ref ( ) {
122
- Query :: SimpleQuery ( query) => self . build_simple_query ( query, context) ,
123
- Query :: FullKeyAggregateQuery ( query) => {
124
- self . build_full_key_aggregate_query ( query, context)
125
- }
122
+ Query :: SimpleQuery ( query) => self . process_node ( query, context) ,
123
+ Query :: FullKeyAggregateQuery ( query) => self . process_node ( query, context) ,
126
124
}
127
125
}
128
126
129
- fn build_simple_query (
127
+ /* fn build_simple_query(
130
128
&self,
131
129
logical_plan: &SimpleQuery,
132
130
context: &PhysicalPlanBuilderContext,
@@ -213,9 +211,9 @@ impl PhysicalPlanBuilder {
213
211
214
212
let res = Rc::new(select_builder.build(context_factory));
215
213
Ok(res)
216
- }
214
+ } */
217
215
218
- fn process_pre_aggregation (
216
+ /* fn process_pre_aggregation(
219
217
&self,
220
218
pre_aggregation: &Rc<PreAggregation>,
221
219
context: &PhysicalPlanBuilderContext,
@@ -269,9 +267,9 @@ impl PhysicalPlanBuilder {
269
267
dimensions_references,
270
268
)?;
271
269
Ok(from)
272
- }
270
+ } */
273
271
274
- fn make_pre_aggregation_source (
272
+ /* fn make_pre_aggregation_source(
275
273
&self,
276
274
source: &Rc<PreAggregationSource>,
277
275
_context: &PhysicalPlanBuilderContext,
@@ -310,9 +308,9 @@ impl PhysicalPlanBuilder {
310
308
}
311
309
};
312
310
Ok(from)
313
- }
311
+ } */
314
312
315
- fn make_pre_aggregation_table_source (
313
+ /* fn make_pre_aggregation_table_source(
316
314
&self,
317
315
table: &PreAggregationTable,
318
316
) -> Result<SingleAliasedSource, CubeError> {
@@ -328,9 +326,9 @@ impl PhysicalPlanBuilder {
328
326
Some(alias),
329
327
);
330
328
Ok(res)
331
- }
329
+ } */
332
330
333
- fn build_full_key_aggregate_query (
331
+ /* fn build_full_key_aggregate_query(
334
332
&self,
335
333
logical_plan: &FullKeyAggregateQuery,
336
334
context: &PhysicalPlanBuilderContext,
@@ -397,7 +395,7 @@ impl PhysicalPlanBuilder {
397
395
context_factory.set_render_references(render_references);
398
396
399
397
Ok(Rc::new(select_builder.build(context_factory)))
400
- }
398
+ } */
401
399
402
400
//FIXME refactor required
403
401
pub ( super ) fn process_full_key_aggregate_dimensions (
@@ -460,7 +458,67 @@ impl PhysicalPlanBuilder {
460
458
Ok ( ( ) )
461
459
}
462
460
463
- fn process_full_key_aggregate (
461
+ pub ( super ) fn process_full_key_aggregate_dimensions_new (
462
+ & self ,
463
+ dimensions : & Vec < Rc < MemberSymbol > > ,
464
+ full_key_aggregate : & Rc < FullKeyAggregate > ,
465
+ select_builder : & mut SelectBuilder ,
466
+ references_builder : & ReferencesBuilder ,
467
+ render_references : & mut HashMap < String , QualifiedColumnName > ,
468
+ sources : Vec < String > ,
469
+ ) -> Result < ( ) , CubeError > {
470
+ let dimensions_for_join_names = full_key_aggregate
471
+ . join_dimensions
472
+ . iter ( )
473
+ . map ( |dim| dim. full_name ( ) )
474
+ . collect :: < HashSet < _ > > ( ) ;
475
+ let source_for_join_dimensions = sources. first ( ) . cloned ( ) ;
476
+ for dim in dimensions. iter ( ) {
477
+ let dimension_ref = dim. clone ( ) . as_base_member ( self . query_tools . clone ( ) ) ?;
478
+ if dimensions_for_join_names. contains ( & dim. full_name ( ) ) {
479
+ references_builder. resolve_references_for_member (
480
+ dim. clone ( ) ,
481
+ & source_for_join_dimensions,
482
+ render_references,
483
+ ) ?;
484
+ let alias = references_builder
485
+ . resolve_alias_for_member ( & dim. full_name ( ) , & source_for_join_dimensions) ;
486
+ if full_key_aggregate. use_full_join_and_coalesce {
487
+ let references = sources
488
+ . iter ( )
489
+ . map ( |alias| {
490
+ references_builder
491
+ . find_reference_for_member ( & dim. full_name ( ) , & Some ( alias. clone ( ) ) )
492
+ . ok_or_else ( || {
493
+ CubeError :: internal ( format ! (
494
+ "Reference for join not found for {} in {}" ,
495
+ dim. full_name( ) ,
496
+ alias
497
+ ) )
498
+ } )
499
+ } )
500
+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
501
+ select_builder. add_projection_coalesce_member (
502
+ & dimension_ref,
503
+ references,
504
+ alias,
505
+ ) ?;
506
+ } else {
507
+ select_builder. add_projection_member ( & dimension_ref, alias) ;
508
+ }
509
+ } else {
510
+ references_builder. resolve_references_for_member (
511
+ dim. clone ( ) ,
512
+ & None ,
513
+ render_references,
514
+ ) ?;
515
+ select_builder. add_projection_member ( & dimension_ref, None ) ;
516
+ }
517
+ }
518
+ Ok ( ( ) )
519
+ }
520
+
521
+ /* fn process_full_key_aggregate(
464
522
&self,
465
523
full_key_aggregate: &Rc<FullKeyAggregate>,
466
524
context: &PhysicalPlanBuilderContext,
@@ -549,9 +607,9 @@ impl PhysicalPlanBuilder {
549
607
550
608
let result = From::new_from_join(join_builder.build());
551
609
Ok((result, joins.len()))
552
- }
610
+ } */
553
611
554
- fn process_resolved_multiplied_measures (
612
+ /* fn process_resolved_multiplied_measures(
555
613
&self,
556
614
resolved_multiplied_measures: &ResolvedMultipliedMeasures,
557
615
context: &PhysicalPlanBuilderContext,
@@ -568,9 +626,9 @@ impl PhysicalPlanBuilder {
568
626
Ok(vec![source])
569
627
}
570
628
}
571
- }
629
+ } */
572
630
573
- fn process_resolve_multiplied_measures (
631
+ /* fn process_resolve_multiplied_measures(
574
632
&self,
575
633
resolve_multiplied_measures: &Rc<ResolveMultipliedMeasures>,
576
634
context: &PhysicalPlanBuilderContext,
@@ -602,9 +660,9 @@ impl PhysicalPlanBuilder {
602
660
joins.push(source);
603
661
}
604
662
Ok(joins)
605
- }
663
+ } */
606
664
607
- fn process_logical_join (
665
+ /* fn process_logical_join(
608
666
&self,
609
667
logical_join: &LogicalJoin,
610
668
context: &PhysicalPlanBuilderContext,
@@ -660,7 +718,7 @@ impl PhysicalPlanBuilder {
660
718
}
661
719
Ok(From::new_from_join(join_builder.build()))
662
720
}
663
- }
721
+ } */
664
722
665
723
fn add_subquery_join (
666
724
& self ,
@@ -669,7 +727,7 @@ impl PhysicalPlanBuilder {
669
727
render_references : & mut HashMap < String , QualifiedColumnName > ,
670
728
context : & PhysicalPlanBuilderContext ,
671
729
) -> Result < ( ) , CubeError > {
672
- let sub_query = self . build_impl ( dimension_subquery. query . clone ( ) , context) ?;
730
+ /* let sub_query = self.build_impl(dimension_subquery.query.clone(), context)?;
673
731
let dim_name = dimension_subquery.subquery_dimension.name();
674
732
let cube_name = dimension_subquery.subquery_dimension.cube_name();
675
733
let primary_keys_dimensions = &dimension_subquery.primary_keys_dimensions;
@@ -709,11 +767,11 @@ impl PhysicalPlanBuilder {
709
767
sub_query,
710
768
sub_query_alias,
711
769
JoinCondition::new_dimension_join(conditions, false),
712
- ) ;
770
+ ); */
713
771
Ok ( ( ) )
714
772
}
715
773
716
- fn process_aggregate_multiplied_subquery (
774
+ /* fn process_aggregate_multiplied_subquery(
717
775
&self,
718
776
aggregate_multiplied_subquery: &Rc<AggregateMultipliedSubquery>,
719
777
context: &PhysicalPlanBuilderContext,
@@ -851,9 +909,9 @@ impl PhysicalPlanBuilder {
851
909
.clone(),
852
910
);
853
911
Ok(Rc::new(select_builder.build(context_factory)))
854
- }
912
+ } */
855
913
856
- fn process_measure_subquery (
914
+ /* TODO!! fn process_measure_subquery(
857
915
&self,
858
916
measure_subquery: &Rc<MeasureSubquery>,
859
917
context: &PhysicalPlanBuilderContext,
@@ -891,9 +949,9 @@ impl PhysicalPlanBuilder {
891
949
}
892
950
let select = Rc::new(select_builder.build(context_factory));
893
951
Ok(select)
894
- }
952
+ } */
895
953
896
- fn process_keys_sub_query (
954
+ /* fn process_keys_sub_query(
897
955
&self,
898
956
keys_subquery: &Rc<KeysSubQuery>,
899
957
context: &PhysicalPlanBuilderContext,
@@ -932,7 +990,7 @@ impl PhysicalPlanBuilder {
932
990
context_factory.set_render_references(render_references);
933
991
let res = Rc::new(select_builder.build(context_factory));
934
992
Ok(res)
935
- }
993
+ } */
936
994
937
995
pub ( crate ) fn make_order_by (
938
996
& self ,
@@ -954,15 +1012,16 @@ impl PhysicalPlanBuilder {
954
1012
Ok ( result)
955
1013
}
956
1014
957
- fn processs_multi_stage_member (
1015
+ /* TODO!! fn processs_multi_stage_member(
958
1016
&self,
959
1017
logical_plan: &Rc<LogicalMultiStageMember>,
960
1018
multi_stage_schemas: &mut HashMap<String, Rc<Schema>>,
961
1019
context: &PhysicalPlanBuilderContext,
962
1020
) -> Result<Rc<Cte>, CubeError> {
963
1021
let query = match &logical_plan.member_type {
964
1022
MultiStageMemberLogicalType::LeafMeasure(measure) => {
965
- self . process_multi_stage_leaf_measure ( & measure, context) ?
1023
+ todo!()
1024
+ //self.process_multi_stage_leaf_measure(&measure, context)?
966
1025
}
967
1026
MultiStageMemberLogicalType::MeasureCalculation(calculation) => self
968
1027
.process_multi_stage_measure_calculation(
@@ -986,9 +1045,9 @@ impl PhysicalPlanBuilder {
986
1045
let alias = logical_plan.name.clone();
987
1046
multi_stage_schemas.insert(alias.clone(), query.schema().clone());
988
1047
Ok(Rc::new(Cte::new(query, alias)))
989
- }
1048
+ } */
990
1049
991
- fn process_multi_stage_leaf_measure (
1050
+ /* TODO!! fn process_multi_stage_leaf_measure(
992
1051
&self,
993
1052
leaf_measure: &MultiStageLeafMeasure,
994
1053
context: &PhysicalPlanBuilderContext,
@@ -999,9 +1058,9 @@ impl PhysicalPlanBuilder {
999
1058
context.time_shifts = leaf_measure.time_shifts.clone();
1000
1059
let select = self.build_impl(leaf_measure.query.clone(), &context)?;
1001
1060
Ok(Rc::new(QueryPlan::Select(select)))
1002
- }
1061
+ } */
1003
1062
1004
- fn process_multi_stage_get_date_range (
1063
+ /* fn process_multi_stage_get_date_range(
1005
1064
&self,
1006
1065
get_date_range: &MultiStageGetDateRange,
1007
1066
context: &PhysicalPlanBuilderContext,
@@ -1340,5 +1399,5 @@ impl PhysicalPlanBuilder {
1340
1399
context_factory.set_render_references(render_references);
1341
1400
let select = Rc::new(select_builder.build(context_factory));
1342
1401
Ok(Rc::new(QueryPlan::Select(select)))
1343
- }
1402
+ } */
1344
1403
}
0 commit comments