Skip to content

Commit 1eace72

Browse files
committed
in work
1 parent 0067a92 commit 1eace72

File tree

14 files changed

+661
-69
lines changed

14 files changed

+661
-69
lines changed

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/common/cube_names_collector.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ impl CubeNamesCollector {
3838
&mut self,
3939
query: &FullKeyAggregateQuery,
4040
) -> Result<(), CubeError> {
41-
self.collect_from_full_key_aggregate(&query.source)?;
41+
/* self.collect_from_full_key_aggregate(&query.source)?;
4242
for member in query.multistage_members.iter() {
4343
self.collect_from_multi_stage_member(member)?;
44-
}
44+
} */
4545
Ok(())
4646
}
4747

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
mod compiled_pre_aggregation;
2-
mod dimension_matcher;
3-
mod measure_matcher;
4-
mod optimizer;
5-
mod original_sql_collector;
6-
mod original_sql_optimizer;
7-
mod pre_aggregations_compiler;
2+
//mod dimension_matcher;
3+
//mod measure_matcher;
4+
//mod optimizer;
5+
//mod original_sql_collector;
6+
//mod original_sql_optimizer;
7+
//mod pre_aggregations_compiler;
88

99
pub use compiled_pre_aggregation::*;
10-
use dimension_matcher::*;
11-
use measure_matcher::*;
12-
pub use optimizer::*;
13-
pub use original_sql_collector::*;
14-
pub use original_sql_optimizer::*;
15-
pub use pre_aggregations_compiler::*;
10+
//use dimension_matcher::*;
11+
//use measure_matcher::*;
12+
//pub use optimizer::*;
13+
//pub use original_sql_collector::*;
14+
//pub use original_sql_optimizer::*;
15+
//pub use pre_aggregations_compiler::*;

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/pre_aggregation.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use super::pre_aggregation::PreAggregationSource;
21
use super::*;
32
use crate::planner::sql_evaluator::MemberSymbol;
43
use itertools::Itertools;

rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs

Lines changed: 101 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ impl PhysicalPlanBuilder {
9090
original_sql_pre_aggregations: HashMap<String, String>,
9191
total_query: bool,
9292
) -> Result<Rc<Select>, CubeError> {
93-
let mut context = PhysicalPlanBuilderContext::default();
93+
let mut context = PushDownBuilderContext::default();
9494
context.original_sql_pre_aggregations = original_sql_pre_aggregations;
9595
let query = self.build_impl(logical_plan, &context)?;
9696
let query = if total_query {
@@ -104,7 +104,7 @@ impl PhysicalPlanBuilder {
104104
fn build_total_count(
105105
&self,
106106
source: Rc<Select>,
107-
context: &PhysicalPlanBuilderContext,
107+
context: &PushDownBuilderContext,
108108
) -> Result<Rc<Select>, CubeError> {
109109
let from = From::new_from_subselect(source.clone(), ORIGINAL_QUERY.to_string());
110110
let mut select_builder = SelectBuilder::new(from);
@@ -116,17 +116,15 @@ impl PhysicalPlanBuilder {
116116
fn build_impl(
117117
&self,
118118
logical_plan: Rc<Query>,
119-
context: &PhysicalPlanBuilderContext,
119+
context: &PushDownBuilderContext,
120120
) -> Result<Rc<Select>, CubeError> {
121121
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),
126124
}
127125
}
128126

129-
fn build_simple_query(
127+
/* fn build_simple_query(
130128
&self,
131129
logical_plan: &SimpleQuery,
132130
context: &PhysicalPlanBuilderContext,
@@ -213,9 +211,9 @@ impl PhysicalPlanBuilder {
213211
214212
let res = Rc::new(select_builder.build(context_factory));
215213
Ok(res)
216-
}
214+
} */
217215

218-
fn process_pre_aggregation(
216+
/* fn process_pre_aggregation(
219217
&self,
220218
pre_aggregation: &Rc<PreAggregation>,
221219
context: &PhysicalPlanBuilderContext,
@@ -270,9 +268,9 @@ impl PhysicalPlanBuilder {
270268
dimensions_references,
271269
)?;
272270
Ok(from)
273-
}
271+
} */
274272

275-
fn make_pre_aggregation_source(
273+
/* fn make_pre_aggregation_source(
276274
&self,
277275
pre_aggregation: &Rc<PreAggregation>,
278276
source: &Rc<PreAggregationSource>,
@@ -316,9 +314,9 @@ impl PhysicalPlanBuilder {
316314
}
317315
};
318316
Ok(from)
319-
}
317+
} */
320318

321-
fn make_pre_aggregation_join_source(
319+
/* fn make_pre_aggregation_join_source(
322320
&self,
323321
source: &PreAggregationSource,
324322
) -> Result<SingleAliasedSource, CubeError> {
@@ -424,9 +422,9 @@ impl PhysicalPlanBuilder {
424422
let aliased_source = SingleAliasedSource { source, alias };
425423
let from = From::new(FromSource::Single(aliased_source));
426424
Ok(from)
427-
}
425+
} */
428426

429-
fn make_pre_aggregation_table_source(
427+
/* fn make_pre_aggregation_table_source(
430428
&self,
431429
table: &PreAggregationTable,
432430
) -> Result<SingleAliasedSource, CubeError> {
@@ -442,9 +440,9 @@ impl PhysicalPlanBuilder {
442440
Some(alias),
443441
);
444442
Ok(res)
445-
}
443+
} */
446444

447-
fn build_full_key_aggregate_query(
445+
/* fn build_full_key_aggregate_query(
448446
&self,
449447
logical_plan: &FullKeyAggregateQuery,
450448
context: &PhysicalPlanBuilderContext,
@@ -511,7 +509,7 @@ impl PhysicalPlanBuilder {
511509
context_factory.set_render_references(render_references);
512510
513511
Ok(Rc::new(select_builder.build(context_factory)))
514-
}
512+
} */
515513

516514
//FIXME refactor required
517515
pub(super) fn process_full_key_aggregate_dimensions(
@@ -574,7 +572,67 @@ impl PhysicalPlanBuilder {
574572
Ok(())
575573
}
576574

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(
578636
&self,
579637
full_key_aggregate: &Rc<FullKeyAggregate>,
580638
context: &PhysicalPlanBuilderContext,
@@ -663,9 +721,9 @@ impl PhysicalPlanBuilder {
663721
664722
let result = From::new_from_join(join_builder.build());
665723
Ok((result, joins.len()))
666-
}
724+
} */
667725

668-
fn process_resolved_multiplied_measures(
726+
/* fn process_resolved_multiplied_measures(
669727
&self,
670728
resolved_multiplied_measures: &ResolvedMultipliedMeasures,
671729
context: &PhysicalPlanBuilderContext,
@@ -682,9 +740,9 @@ impl PhysicalPlanBuilder {
682740
Ok(vec![source])
683741
}
684742
}
685-
}
743+
} */
686744

687-
fn process_resolve_multiplied_measures(
745+
/* fn process_resolve_multiplied_measures(
688746
&self,
689747
resolve_multiplied_measures: &Rc<ResolveMultipliedMeasures>,
690748
context: &PhysicalPlanBuilderContext,
@@ -716,9 +774,9 @@ impl PhysicalPlanBuilder {
716774
joins.push(source);
717775
}
718776
Ok(joins)
719-
}
777+
} */
720778

721-
fn process_logical_join(
779+
/* fn process_logical_join(
722780
&self,
723781
logical_join: &LogicalJoin,
724782
context: &PhysicalPlanBuilderContext,
@@ -774,7 +832,7 @@ impl PhysicalPlanBuilder {
774832
}
775833
Ok(From::new_from_join(join_builder.build()))
776834
}
777-
}
835+
} */
778836

779837
fn add_subquery_join(
780838
&self,
@@ -783,7 +841,7 @@ impl PhysicalPlanBuilder {
783841
render_references: &mut HashMap<String, QualifiedColumnName>,
784842
context: &PhysicalPlanBuilderContext,
785843
) -> 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)?;
787845
let dim_name = dimension_subquery.subquery_dimension.name();
788846
let cube_name = dimension_subquery.subquery_dimension.cube_name();
789847
let primary_keys_dimensions = &dimension_subquery.primary_keys_dimensions;
@@ -823,11 +881,11 @@ impl PhysicalPlanBuilder {
823881
sub_query,
824882
sub_query_alias,
825883
JoinCondition::new_dimension_join(conditions, false),
826-
);
884+
); */
827885
Ok(())
828886
}
829887

830-
fn process_aggregate_multiplied_subquery(
888+
/* fn process_aggregate_multiplied_subquery(
831889
&self,
832890
aggregate_multiplied_subquery: &Rc<AggregateMultipliedSubquery>,
833891
context: &PhysicalPlanBuilderContext,
@@ -965,9 +1023,9 @@ impl PhysicalPlanBuilder {
9651023
.clone(),
9661024
);
9671025
Ok(Rc::new(select_builder.build(context_factory)))
968-
}
1026+
} */
9691027

970-
fn process_measure_subquery(
1028+
/* TODO!! fn process_measure_subquery(
9711029
&self,
9721030
measure_subquery: &Rc<MeasureSubquery>,
9731031
context: &PhysicalPlanBuilderContext,
@@ -1005,9 +1063,9 @@ impl PhysicalPlanBuilder {
10051063
}
10061064
let select = Rc::new(select_builder.build(context_factory));
10071065
Ok(select)
1008-
}
1066+
} */
10091067

1010-
fn process_keys_sub_query(
1068+
/* fn process_keys_sub_query(
10111069
&self,
10121070
keys_subquery: &Rc<KeysSubQuery>,
10131071
context: &PhysicalPlanBuilderContext,
@@ -1046,7 +1104,7 @@ impl PhysicalPlanBuilder {
10461104
context_factory.set_render_references(render_references);
10471105
let res = Rc::new(select_builder.build(context_factory));
10481106
Ok(res)
1049-
}
1107+
} */
10501108

10511109
pub(crate) fn make_order_by(
10521110
&self,
@@ -1068,15 +1126,16 @@ impl PhysicalPlanBuilder {
10681126
Ok(result)
10691127
}
10701128

1071-
fn processs_multi_stage_member(
1129+
/* TODO!! fn processs_multi_stage_member(
10721130
&self,
10731131
logical_plan: &Rc<LogicalMultiStageMember>,
10741132
multi_stage_schemas: &mut HashMap<String, Rc<Schema>>,
10751133
context: &PhysicalPlanBuilderContext,
10761134
) -> Result<Rc<Cte>, CubeError> {
10771135
let query = match &logical_plan.member_type {
10781136
MultiStageMemberLogicalType::LeafMeasure(measure) => {
1079-
self.process_multi_stage_leaf_measure(&measure, context)?
1137+
todo!()
1138+
//self.process_multi_stage_leaf_measure(&measure, context)?
10801139
}
10811140
MultiStageMemberLogicalType::MeasureCalculation(calculation) => self
10821141
.process_multi_stage_measure_calculation(
@@ -1100,9 +1159,9 @@ impl PhysicalPlanBuilder {
11001159
let alias = logical_plan.name.clone();
11011160
multi_stage_schemas.insert(alias.clone(), query.schema().clone());
11021161
Ok(Rc::new(Cte::new(query, alias)))
1103-
}
1162+
} */
11041163

1105-
fn process_multi_stage_leaf_measure(
1164+
/* TODO!! fn process_multi_stage_leaf_measure(
11061165
&self,
11071166
leaf_measure: &MultiStageLeafMeasure,
11081167
context: &PhysicalPlanBuilderContext,
@@ -1113,9 +1172,9 @@ impl PhysicalPlanBuilder {
11131172
context.time_shifts = leaf_measure.time_shifts.clone();
11141173
let select = self.build_impl(leaf_measure.query.clone(), &context)?;
11151174
Ok(Rc::new(QueryPlan::Select(select)))
1116-
}
1175+
} */
11171176

1118-
fn process_multi_stage_get_date_range(
1177+
/* fn process_multi_stage_get_date_range(
11191178
&self,
11201179
get_date_range: &MultiStageGetDateRange,
11211180
context: &PhysicalPlanBuilderContext,
@@ -1454,5 +1513,5 @@ impl PhysicalPlanBuilder {
14541513
context_factory.set_render_references(render_references);
14551514
let select = Rc::new(select_builder.build(context_factory));
14561515
Ok(Rc::new(QueryPlan::Select(select)))
1457-
}
1516+
} */
14581517
}

0 commit comments

Comments
 (0)