Skip to content

Commit 4a497d8

Browse files
committed
in work
1 parent 2eb339c commit 4a497d8

File tree

14 files changed

+659
-67
lines changed

14 files changed

+659
-67
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: 99 additions & 40 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,
@@ -269,9 +267,9 @@ impl PhysicalPlanBuilder {
269267
dimensions_references,
270268
)?;
271269
Ok(from)
272-
}
270+
} */
273271

274-
fn make_pre_aggregation_source(
272+
/* fn make_pre_aggregation_source(
275273
&self,
276274
source: &Rc<PreAggregationSource>,
277275
_context: &PhysicalPlanBuilderContext,
@@ -310,9 +308,9 @@ impl PhysicalPlanBuilder {
310308
}
311309
};
312310
Ok(from)
313-
}
311+
} */
314312

315-
fn make_pre_aggregation_table_source(
313+
/* fn make_pre_aggregation_table_source(
316314
&self,
317315
table: &PreAggregationTable,
318316
) -> Result<SingleAliasedSource, CubeError> {
@@ -328,9 +326,9 @@ impl PhysicalPlanBuilder {
328326
Some(alias),
329327
);
330328
Ok(res)
331-
}
329+
} */
332330

333-
fn build_full_key_aggregate_query(
331+
/* fn build_full_key_aggregate_query(
334332
&self,
335333
logical_plan: &FullKeyAggregateQuery,
336334
context: &PhysicalPlanBuilderContext,
@@ -397,7 +395,7 @@ impl PhysicalPlanBuilder {
397395
context_factory.set_render_references(render_references);
398396
399397
Ok(Rc::new(select_builder.build(context_factory)))
400-
}
398+
} */
401399

402400
//FIXME refactor required
403401
pub(super) fn process_full_key_aggregate_dimensions(
@@ -460,7 +458,67 @@ impl PhysicalPlanBuilder {
460458
Ok(())
461459
}
462460

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(
464522
&self,
465523
full_key_aggregate: &Rc<FullKeyAggregate>,
466524
context: &PhysicalPlanBuilderContext,
@@ -549,9 +607,9 @@ impl PhysicalPlanBuilder {
549607
550608
let result = From::new_from_join(join_builder.build());
551609
Ok((result, joins.len()))
552-
}
610+
} */
553611

554-
fn process_resolved_multiplied_measures(
612+
/* fn process_resolved_multiplied_measures(
555613
&self,
556614
resolved_multiplied_measures: &ResolvedMultipliedMeasures,
557615
context: &PhysicalPlanBuilderContext,
@@ -568,9 +626,9 @@ impl PhysicalPlanBuilder {
568626
Ok(vec![source])
569627
}
570628
}
571-
}
629+
} */
572630

573-
fn process_resolve_multiplied_measures(
631+
/* fn process_resolve_multiplied_measures(
574632
&self,
575633
resolve_multiplied_measures: &Rc<ResolveMultipliedMeasures>,
576634
context: &PhysicalPlanBuilderContext,
@@ -602,9 +660,9 @@ impl PhysicalPlanBuilder {
602660
joins.push(source);
603661
}
604662
Ok(joins)
605-
}
663+
} */
606664

607-
fn process_logical_join(
665+
/* fn process_logical_join(
608666
&self,
609667
logical_join: &LogicalJoin,
610668
context: &PhysicalPlanBuilderContext,
@@ -660,7 +718,7 @@ impl PhysicalPlanBuilder {
660718
}
661719
Ok(From::new_from_join(join_builder.build()))
662720
}
663-
}
721+
} */
664722

665723
fn add_subquery_join(
666724
&self,
@@ -669,7 +727,7 @@ impl PhysicalPlanBuilder {
669727
render_references: &mut HashMap<String, QualifiedColumnName>,
670728
context: &PhysicalPlanBuilderContext,
671729
) -> 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)?;
673731
let dim_name = dimension_subquery.subquery_dimension.name();
674732
let cube_name = dimension_subquery.subquery_dimension.cube_name();
675733
let primary_keys_dimensions = &dimension_subquery.primary_keys_dimensions;
@@ -709,11 +767,11 @@ impl PhysicalPlanBuilder {
709767
sub_query,
710768
sub_query_alias,
711769
JoinCondition::new_dimension_join(conditions, false),
712-
);
770+
); */
713771
Ok(())
714772
}
715773

716-
fn process_aggregate_multiplied_subquery(
774+
/* fn process_aggregate_multiplied_subquery(
717775
&self,
718776
aggregate_multiplied_subquery: &Rc<AggregateMultipliedSubquery>,
719777
context: &PhysicalPlanBuilderContext,
@@ -851,9 +909,9 @@ impl PhysicalPlanBuilder {
851909
.clone(),
852910
);
853911
Ok(Rc::new(select_builder.build(context_factory)))
854-
}
912+
} */
855913

856-
fn process_measure_subquery(
914+
/* TODO!! fn process_measure_subquery(
857915
&self,
858916
measure_subquery: &Rc<MeasureSubquery>,
859917
context: &PhysicalPlanBuilderContext,
@@ -891,9 +949,9 @@ impl PhysicalPlanBuilder {
891949
}
892950
let select = Rc::new(select_builder.build(context_factory));
893951
Ok(select)
894-
}
952+
} */
895953

896-
fn process_keys_sub_query(
954+
/* fn process_keys_sub_query(
897955
&self,
898956
keys_subquery: &Rc<KeysSubQuery>,
899957
context: &PhysicalPlanBuilderContext,
@@ -932,7 +990,7 @@ impl PhysicalPlanBuilder {
932990
context_factory.set_render_references(render_references);
933991
let res = Rc::new(select_builder.build(context_factory));
934992
Ok(res)
935-
}
993+
} */
936994

937995
pub(crate) fn make_order_by(
938996
&self,
@@ -954,15 +1012,16 @@ impl PhysicalPlanBuilder {
9541012
Ok(result)
9551013
}
9561014

957-
fn processs_multi_stage_member(
1015+
/* TODO!! fn processs_multi_stage_member(
9581016
&self,
9591017
logical_plan: &Rc<LogicalMultiStageMember>,
9601018
multi_stage_schemas: &mut HashMap<String, Rc<Schema>>,
9611019
context: &PhysicalPlanBuilderContext,
9621020
) -> Result<Rc<Cte>, CubeError> {
9631021
let query = match &logical_plan.member_type {
9641022
MultiStageMemberLogicalType::LeafMeasure(measure) => {
965-
self.process_multi_stage_leaf_measure(&measure, context)?
1023+
todo!()
1024+
//self.process_multi_stage_leaf_measure(&measure, context)?
9661025
}
9671026
MultiStageMemberLogicalType::MeasureCalculation(calculation) => self
9681027
.process_multi_stage_measure_calculation(
@@ -986,9 +1045,9 @@ impl PhysicalPlanBuilder {
9861045
let alias = logical_plan.name.clone();
9871046
multi_stage_schemas.insert(alias.clone(), query.schema().clone());
9881047
Ok(Rc::new(Cte::new(query, alias)))
989-
}
1048+
} */
9901049

991-
fn process_multi_stage_leaf_measure(
1050+
/* TODO!! fn process_multi_stage_leaf_measure(
9921051
&self,
9931052
leaf_measure: &MultiStageLeafMeasure,
9941053
context: &PhysicalPlanBuilderContext,
@@ -999,9 +1058,9 @@ impl PhysicalPlanBuilder {
9991058
context.time_shifts = leaf_measure.time_shifts.clone();
10001059
let select = self.build_impl(leaf_measure.query.clone(), &context)?;
10011060
Ok(Rc::new(QueryPlan::Select(select)))
1002-
}
1061+
} */
10031062

1004-
fn process_multi_stage_get_date_range(
1063+
/* fn process_multi_stage_get_date_range(
10051064
&self,
10061065
get_date_range: &MultiStageGetDateRange,
10071066
context: &PhysicalPlanBuilderContext,
@@ -1340,5 +1399,5 @@ impl PhysicalPlanBuilder {
13401399
context_factory.set_render_references(render_references);
13411400
let select = Rc::new(select_builder.build(context_factory));
13421401
Ok(Rc::new(QueryPlan::Select(select)))
1343-
}
1402+
} */
13441403
}

0 commit comments

Comments
 (0)