@@ -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,
@@ -270,9 +268,9 @@ impl PhysicalPlanBuilder {
270
268
dimensions_references,
271
269
)?;
272
270
Ok(from)
273
- }
271
+ } */
274
272
275
- fn make_pre_aggregation_source (
273
+ /* fn make_pre_aggregation_source(
276
274
&self,
277
275
pre_aggregation: &Rc<PreAggregation>,
278
276
source: &Rc<PreAggregationSource>,
@@ -316,9 +314,9 @@ impl PhysicalPlanBuilder {
316
314
}
317
315
};
318
316
Ok(from)
319
- }
317
+ } */
320
318
321
- fn make_pre_aggregation_join_source (
319
+ /* fn make_pre_aggregation_join_source(
322
320
&self,
323
321
source: &PreAggregationSource,
324
322
) -> Result<SingleAliasedSource, CubeError> {
@@ -424,9 +422,9 @@ impl PhysicalPlanBuilder {
424
422
let aliased_source = SingleAliasedSource { source, alias };
425
423
let from = From::new(FromSource::Single(aliased_source));
426
424
Ok(from)
427
- }
425
+ } */
428
426
429
- fn make_pre_aggregation_table_source (
427
+ /* fn make_pre_aggregation_table_source(
430
428
&self,
431
429
table: &PreAggregationTable,
432
430
) -> Result<SingleAliasedSource, CubeError> {
@@ -442,9 +440,9 @@ impl PhysicalPlanBuilder {
442
440
Some(alias),
443
441
);
444
442
Ok(res)
445
- }
443
+ } */
446
444
447
- fn build_full_key_aggregate_query (
445
+ /* fn build_full_key_aggregate_query(
448
446
&self,
449
447
logical_plan: &FullKeyAggregateQuery,
450
448
context: &PhysicalPlanBuilderContext,
@@ -511,7 +509,7 @@ impl PhysicalPlanBuilder {
511
509
context_factory.set_render_references(render_references);
512
510
513
511
Ok(Rc::new(select_builder.build(context_factory)))
514
- }
512
+ } */
515
513
516
514
//FIXME refactor required
517
515
pub ( super ) fn process_full_key_aggregate_dimensions (
@@ -574,7 +572,67 @@ impl PhysicalPlanBuilder {
574
572
Ok ( ( ) )
575
573
}
576
574
577
- fn process_full_key_aggregate (
575
+ pub ( super ) fn process_full_key_aggregate_dimensions_new (
576
+ & self ,
577
+ dimensions : & Vec < Rc < MemberSymbol > > ,
578
+ full_key_aggregate : & Rc < FullKeyAggregate > ,
579
+ select_builder : & mut SelectBuilder ,
580
+ references_builder : & ReferencesBuilder ,
581
+ render_references : & mut HashMap < String , QualifiedColumnName > ,
582
+ sources : Vec < String > ,
583
+ ) -> Result < ( ) , CubeError > {
584
+ let dimensions_for_join_names = full_key_aggregate
585
+ . join_dimensions
586
+ . iter ( )
587
+ . map ( |dim| dim. full_name ( ) )
588
+ . collect :: < HashSet < _ > > ( ) ;
589
+ let source_for_join_dimensions = sources. first ( ) . cloned ( ) ;
590
+ for dim in dimensions. iter ( ) {
591
+ let dimension_ref = dim. clone ( ) . as_base_member ( self . query_tools . clone ( ) ) ?;
592
+ if dimensions_for_join_names. contains ( & dim. full_name ( ) ) {
593
+ references_builder. resolve_references_for_member (
594
+ dim. clone ( ) ,
595
+ & source_for_join_dimensions,
596
+ render_references,
597
+ ) ?;
598
+ let alias = references_builder
599
+ . resolve_alias_for_member ( & dim. full_name ( ) , & source_for_join_dimensions) ;
600
+ if full_key_aggregate. use_full_join_and_coalesce {
601
+ let references = sources
602
+ . iter ( )
603
+ . map ( |alias| {
604
+ references_builder
605
+ . find_reference_for_member ( & dim. full_name ( ) , & Some ( alias. clone ( ) ) )
606
+ . ok_or_else ( || {
607
+ CubeError :: internal ( format ! (
608
+ "Reference for join not found for {} in {}" ,
609
+ dim. full_name( ) ,
610
+ alias
611
+ ) )
612
+ } )
613
+ } )
614
+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
615
+ select_builder. add_projection_coalesce_member (
616
+ & dimension_ref,
617
+ references,
618
+ alias,
619
+ ) ?;
620
+ } else {
621
+ select_builder. add_projection_member ( & dimension_ref, alias) ;
622
+ }
623
+ } else {
624
+ references_builder. resolve_references_for_member (
625
+ dim. clone ( ) ,
626
+ & None ,
627
+ render_references,
628
+ ) ?;
629
+ select_builder. add_projection_member ( & dimension_ref, None ) ;
630
+ }
631
+ }
632
+ Ok ( ( ) )
633
+ }
634
+
635
+ /* fn process_full_key_aggregate(
578
636
&self,
579
637
full_key_aggregate: &Rc<FullKeyAggregate>,
580
638
context: &PhysicalPlanBuilderContext,
@@ -663,9 +721,9 @@ impl PhysicalPlanBuilder {
663
721
664
722
let result = From::new_from_join(join_builder.build());
665
723
Ok((result, joins.len()))
666
- }
724
+ } */
667
725
668
- fn process_resolved_multiplied_measures (
726
+ /* fn process_resolved_multiplied_measures(
669
727
&self,
670
728
resolved_multiplied_measures: &ResolvedMultipliedMeasures,
671
729
context: &PhysicalPlanBuilderContext,
@@ -682,9 +740,9 @@ impl PhysicalPlanBuilder {
682
740
Ok(vec![source])
683
741
}
684
742
}
685
- }
743
+ } */
686
744
687
- fn process_resolve_multiplied_measures (
745
+ /* fn process_resolve_multiplied_measures(
688
746
&self,
689
747
resolve_multiplied_measures: &Rc<ResolveMultipliedMeasures>,
690
748
context: &PhysicalPlanBuilderContext,
@@ -716,9 +774,9 @@ impl PhysicalPlanBuilder {
716
774
joins.push(source);
717
775
}
718
776
Ok(joins)
719
- }
777
+ } */
720
778
721
- fn process_logical_join (
779
+ /* fn process_logical_join(
722
780
&self,
723
781
logical_join: &LogicalJoin,
724
782
context: &PhysicalPlanBuilderContext,
@@ -774,7 +832,7 @@ impl PhysicalPlanBuilder {
774
832
}
775
833
Ok(From::new_from_join(join_builder.build()))
776
834
}
777
- }
835
+ } */
778
836
779
837
fn add_subquery_join (
780
838
& self ,
@@ -783,7 +841,7 @@ impl PhysicalPlanBuilder {
783
841
render_references : & mut HashMap < String , QualifiedColumnName > ,
784
842
context : & PhysicalPlanBuilderContext ,
785
843
) -> Result < ( ) , CubeError > {
786
- let sub_query = self . build_impl ( dimension_subquery. query . clone ( ) , context) ?;
844
+ /* let sub_query = self.build_impl(dimension_subquery.query.clone(), context)?;
787
845
let dim_name = dimension_subquery.subquery_dimension.name();
788
846
let cube_name = dimension_subquery.subquery_dimension.cube_name();
789
847
let primary_keys_dimensions = &dimension_subquery.primary_keys_dimensions;
@@ -823,11 +881,11 @@ impl PhysicalPlanBuilder {
823
881
sub_query,
824
882
sub_query_alias,
825
883
JoinCondition::new_dimension_join(conditions, false),
826
- ) ;
884
+ ); */
827
885
Ok ( ( ) )
828
886
}
829
887
830
- fn process_aggregate_multiplied_subquery (
888
+ /* fn process_aggregate_multiplied_subquery(
831
889
&self,
832
890
aggregate_multiplied_subquery: &Rc<AggregateMultipliedSubquery>,
833
891
context: &PhysicalPlanBuilderContext,
@@ -965,9 +1023,9 @@ impl PhysicalPlanBuilder {
965
1023
.clone(),
966
1024
);
967
1025
Ok(Rc::new(select_builder.build(context_factory)))
968
- }
1026
+ } */
969
1027
970
- fn process_measure_subquery (
1028
+ /* TODO!! fn process_measure_subquery(
971
1029
&self,
972
1030
measure_subquery: &Rc<MeasureSubquery>,
973
1031
context: &PhysicalPlanBuilderContext,
@@ -1005,9 +1063,9 @@ impl PhysicalPlanBuilder {
1005
1063
}
1006
1064
let select = Rc::new(select_builder.build(context_factory));
1007
1065
Ok(select)
1008
- }
1066
+ } */
1009
1067
1010
- fn process_keys_sub_query (
1068
+ /* fn process_keys_sub_query(
1011
1069
&self,
1012
1070
keys_subquery: &Rc<KeysSubQuery>,
1013
1071
context: &PhysicalPlanBuilderContext,
@@ -1046,7 +1104,7 @@ impl PhysicalPlanBuilder {
1046
1104
context_factory.set_render_references(render_references);
1047
1105
let res = Rc::new(select_builder.build(context_factory));
1048
1106
Ok(res)
1049
- }
1107
+ } */
1050
1108
1051
1109
pub ( crate ) fn make_order_by (
1052
1110
& self ,
@@ -1068,15 +1126,16 @@ impl PhysicalPlanBuilder {
1068
1126
Ok ( result)
1069
1127
}
1070
1128
1071
- fn processs_multi_stage_member (
1129
+ /* TODO!! fn processs_multi_stage_member(
1072
1130
&self,
1073
1131
logical_plan: &Rc<LogicalMultiStageMember>,
1074
1132
multi_stage_schemas: &mut HashMap<String, Rc<Schema>>,
1075
1133
context: &PhysicalPlanBuilderContext,
1076
1134
) -> Result<Rc<Cte>, CubeError> {
1077
1135
let query = match &logical_plan.member_type {
1078
1136
MultiStageMemberLogicalType::LeafMeasure(measure) => {
1079
- self . process_multi_stage_leaf_measure ( & measure, context) ?
1137
+ todo!()
1138
+ //self.process_multi_stage_leaf_measure(&measure, context)?
1080
1139
}
1081
1140
MultiStageMemberLogicalType::MeasureCalculation(calculation) => self
1082
1141
.process_multi_stage_measure_calculation(
@@ -1100,9 +1159,9 @@ impl PhysicalPlanBuilder {
1100
1159
let alias = logical_plan.name.clone();
1101
1160
multi_stage_schemas.insert(alias.clone(), query.schema().clone());
1102
1161
Ok(Rc::new(Cte::new(query, alias)))
1103
- }
1162
+ } */
1104
1163
1105
- fn process_multi_stage_leaf_measure (
1164
+ /* TODO!! fn process_multi_stage_leaf_measure(
1106
1165
&self,
1107
1166
leaf_measure: &MultiStageLeafMeasure,
1108
1167
context: &PhysicalPlanBuilderContext,
@@ -1113,9 +1172,9 @@ impl PhysicalPlanBuilder {
1113
1172
context.time_shifts = leaf_measure.time_shifts.clone();
1114
1173
let select = self.build_impl(leaf_measure.query.clone(), &context)?;
1115
1174
Ok(Rc::new(QueryPlan::Select(select)))
1116
- }
1175
+ } */
1117
1176
1118
- fn process_multi_stage_get_date_range (
1177
+ /* fn process_multi_stage_get_date_range(
1119
1178
&self,
1120
1179
get_date_range: &MultiStageGetDateRange,
1121
1180
context: &PhysicalPlanBuilderContext,
@@ -1454,5 +1513,5 @@ impl PhysicalPlanBuilder {
1454
1513
context_factory.set_render_references(render_references);
1455
1514
let select = Rc::new(select_builder.build(context_factory));
1456
1515
Ok(Rc::new(QueryPlan::Select(select)))
1457
- }
1516
+ } */
1458
1517
}
0 commit comments