Skip to content

Commit fb39ca8

Browse files
committed
in work
1 parent 4a497d8 commit fb39ca8

File tree

25 files changed

+508
-144
lines changed

25 files changed

+508
-144
lines changed

packages/cubejs-schema-compiler/src/adapter/BaseQuery.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4108,7 +4108,7 @@ export class BaseQuery {
41084108
VAR_SAMP: 'VAR_SAMP({{ args_concat }})',
41094109
COVAR_POP: 'COVAR_POP({{ args_concat }})',
41104110
COVAR_SAMP: 'COVAR_SAMP({{ args_concat }})',
4111-
4111+
GROUP_ANY: 'max({{ expr }})',
41124112
COALESCE: 'COALESCE({{ args_concat }})',
41134113
CONCAT: 'CONCAT({{ args_concat }})',
41144114
FLOOR: 'FLOOR({{ args_concat }})',

packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ SELECT 1 AS revenue, cast('2024-01-01' AS timestamp) as time UNION ALL
862862
})
863863
`);
864864

865-
it('simple join', async () => {
865+
it('simple join 1', async () => {
866866
await compiler.compile();
867867

868868
console.log(joinGraph.buildJoin(['visitor_checkins', 'visitors']));

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/filter.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ impl LogicalFilter {
2424
Some(Filter { items })
2525
}
2626
}
27+
pub fn measures_filter(&self) -> Option<Filter> {
28+
if self.measures_filter.is_empty() {
29+
None
30+
} else {
31+
Some(Filter {
32+
items: self.measures_filter.clone(),
33+
})
34+
}
35+
}
2736
}
2837

2938
impl PrettyPrint for LogicalFilter {

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/full_key_aggregate.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@ pub enum ResolvedMultipliedMeasures {
2424
PreAggregation(Rc<SimpleQuery>),
2525
}
2626

27+
impl ResolvedMultipliedMeasures {
28+
pub fn schema(&self) -> Rc<LogicalSchema> {
29+
match self {
30+
ResolvedMultipliedMeasures::ResolveMultipliedMeasures(resolve_multiplied_measures) => {
31+
resolve_multiplied_measures.schema.clone()
32+
}
33+
ResolvedMultipliedMeasures::PreAggregation(simple_query) => simple_query.schema.clone(),
34+
}
35+
}
36+
}
37+
2738
impl PrettyPrint for ResolvedMultipliedMeasures {
2839
fn pretty_print(&self, result: &mut PrettyPrintResult, state: &PrettyPrintState) {
2940
match self {
@@ -39,7 +50,7 @@ impl PrettyPrint for ResolvedMultipliedMeasures {
3950
}
4051

4152
pub struct FullKeyAggregate {
42-
pub join_dimensions: Vec<Rc<MemberSymbol>>,
53+
pub schema: Rc<LogicalSchema>,
4354
pub use_full_join_and_coalesce: bool,
4455
pub multiplied_measures_resolver: Option<ResolvedMultipliedMeasures>,
4556
pub multi_stage_subquery_refs: Vec<Rc<MultiStageSubqueryRef>>,
@@ -50,10 +61,8 @@ impl PrettyPrint for FullKeyAggregate {
5061
result.println("FullKeyAggregate: ", state);
5162
let state = state.new_level();
5263
let details_state = state.new_level();
53-
result.println(
54-
&format!("join_dimensions: {}", print_symbols(&self.join_dimensions)),
55-
&state,
56-
);
64+
result.println(&format!("schema:"), &state);
65+
self.schema.pretty_print(result, &details_state);
5766
result.println(
5867
&format!(
5968
"use_full_join_and_coalesce: {}",
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
mod common;
1+
//mod common;
22
mod pre_aggregation;
33

4-
pub use common::*;
4+
//pub use common::*;
55
pub use pre_aggregation::*;
Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,58 @@
11
use super::*;
2+
use std::rc::Rc;
23

3-
pub enum Query {
4-
SimpleQuery(SimpleQuery),
5-
FullKeyAggregateQuery(FullKeyAggregateQuery),
4+
#[derive(Clone)]
5+
pub enum QuerySource {
6+
LogicalJoin(Rc<LogicalJoin>),
7+
FullKeyAggregate(Rc<FullKeyAggregate>),
8+
PreAggregation(Rc<PreAggregation>),
9+
}
10+
impl PrettyPrint for QuerySource {
11+
fn pretty_print(&self, result: &mut PrettyPrintResult, state: &PrettyPrintState) {
12+
match self {
13+
QuerySource::LogicalJoin(join) => join.pretty_print(result, state),
14+
QuerySource::FullKeyAggregate(full_key) => full_key.pretty_print(result, state),
15+
QuerySource::PreAggregation(pre_aggregation) => {
16+
pre_aggregation.pretty_print(result, state)
17+
}
18+
}
19+
}
20+
}
21+
#[derive(Clone)]
22+
pub struct Query {
23+
pub multistage_members: Vec<Rc<LogicalMultiStageMember>>,
24+
pub schema: Rc<LogicalSchema>,
25+
pub dimension_subqueries: Vec<Rc<DimensionSubQuery>>,
26+
pub filter: Rc<LogicalFilter>,
27+
pub modifers: Rc<LogicalQueryModifiers>,
28+
pub source: QuerySource,
629
}
730

831
impl PrettyPrint for Query {
932
fn pretty_print(&self, result: &mut PrettyPrintResult, state: &PrettyPrintState) {
10-
match self {
11-
Self::SimpleQuery(query) => query.pretty_print(result, state),
12-
Self::FullKeyAggregateQuery(query) => query.pretty_print(result, state),
33+
result.println("Query: ", state);
34+
let state = state.new_level();
35+
let details_state = state.new_level();
36+
if !self.multistage_members.is_empty() {
37+
result.println("multistage_members:", &state);
38+
for member in self.multistage_members.iter() {
39+
member.pretty_print(result, &details_state);
40+
}
1341
}
42+
43+
result.println("schema:", &state);
44+
self.schema.pretty_print(result, &details_state);
45+
if !self.dimension_subqueries.is_empty() {
46+
result.println("dimension_subqueries:", &state);
47+
for subquery in self.dimension_subqueries.iter() {
48+
subquery.pretty_print(result, &details_state);
49+
}
50+
}
51+
result.println("filters:", &state);
52+
self.filter.pretty_print(result, &details_state);
53+
self.modifers.pretty_print(result, &state);
54+
55+
result.println("source:", &state);
56+
self.source.pretty_print(result, &details_state);
1457
}
1558
}

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/resolve_multiplied_measures.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::rc::Rc;
44
pub struct ResolveMultipliedMeasures {
55
pub schema: Rc<LogicalSchema>,
66
pub filter: Rc<LogicalFilter>,
7-
pub regular_measure_subqueries: Vec<Rc<SimpleQuery>>,
7+
pub regular_measure_subqueries: Vec<Rc<Query>>,
88
pub aggregate_multiplied_subqueries: Vec<Rc<AggregateMultipliedSubquery>>,
99
}
1010

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/schema.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ impl LogicalSchema {
3939
pub fn all_dimensions(&self) -> impl Iterator<Item = &Rc<MemberSymbol>> {
4040
self.dimensions.iter().chain(self.time_dimensions.iter())
4141
}
42+
43+
pub fn all_members(&self) -> impl Iterator<Item = &Rc<MemberSymbol>> {
44+
self.all_dimensions().chain(self.measures.iter())
45+
}
4246
}
4347

4448
impl PrettyPrint for LogicalSchema {

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

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,29 @@ impl PhysicalPlanBuilder {
118118
logical_plan: Rc<Query>,
119119
context: &PushDownBuilderContext,
120120
) -> Result<Rc<Select>, CubeError> {
121-
match logical_plan.as_ref() {
122-
Query::SimpleQuery(query) => self.process_node(query, context),
123-
Query::FullKeyAggregateQuery(query) => self.process_node(query, context),
121+
self.process_node(logical_plan.as_ref(), context)
122+
}
123+
124+
pub(super) fn extend_measures(
125+
&self,
126+
node_measures: &Vec<Rc<MemberSymbol>>,
127+
context: &PushDownBuilderContext,
128+
) -> Vec<(Rc<MemberSymbol>, bool)> {
129+
if let Some(required_measures) = &context.required_measures {
130+
required_measures
131+
.iter()
132+
.map(|member| {
133+
(
134+
member.clone(),
135+
node_measures.iter().find(|m| m == &member).is_some(),
136+
)
137+
})
138+
.collect_vec()
139+
} else {
140+
node_measures
141+
.iter()
142+
.map(|member| (member.clone(), true))
143+
.collect_vec()
124144
}
125145
}
126146

@@ -398,7 +418,7 @@ impl PhysicalPlanBuilder {
398418
} */
399419

400420
//FIXME refactor required
401-
pub(super) fn process_full_key_aggregate_dimensions(
421+
/* pub(super) fn process_full_key_aggregate_dimensions(
402422
&self,
403423
dimensions: &Vec<Rc<MemberSymbol>>,
404424
full_key_aggregate: &Rc<FullKeyAggregate>,
@@ -516,7 +536,7 @@ impl PhysicalPlanBuilder {
516536
}
517537
}
518538
Ok(())
519-
}
539+
} */
520540

521541
/* fn process_full_key_aggregate(
522542
&self,

rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/context.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use crate::plan::schema::QualifiedColumnName;
22
use crate::planner::planners::multi_stage::TimeShiftState;
33
use crate::planner::sql_evaluator::sql_nodes::SqlNodesFactory;
4+
use crate::planner::sql_evaluator::MemberSymbol;
45
use std::collections::HashMap;
6+
use std::rc::Rc;
57

68
#[derive(Clone, Debug, Default)]
79
pub(super) struct PushDownBuilderContext {
@@ -10,6 +12,7 @@ pub(super) struct PushDownBuilderContext {
1012
pub render_measure_for_ungrouped: bool,
1113
pub time_shifts: TimeShiftState,
1214
pub original_sql_pre_aggregations: HashMap<String, String>,
15+
pub required_measures: Option<Vec<Rc<MemberSymbol>>>,
1316
}
1417

1518
impl PushDownBuilderContext {
@@ -22,4 +25,3 @@ impl PushDownBuilderContext {
2225
factory
2326
}
2427
}
25-

0 commit comments

Comments
 (0)