Skip to content

Commit 5c63235

Browse files
committed
upd
1 parent 5a207b4 commit 5c63235

File tree

8 files changed

+50
-50
lines changed

8 files changed

+50
-50
lines changed

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/logical_node.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ pub(super) fn check_inputs_len(
100100
Ok(())
101101
} else {
102102
Err(CubeError::internal(format!(
103-
"For node {} expected {} inputs but received {}",
103+
"{} received {} inputs, but {} were expected",
104104
node_type,
105-
expected,
106-
inputs.len()
105+
inputs.len(),
106+
expected
107107
)))
108108
}
109109
}

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/visitor/rewriter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ pub struct NodeRewriteResult {
88
}
99

1010
impl NodeRewriteResult {
11-
pub fn rewritten(rewrited: PlanNode) -> Self {
11+
pub fn rewritten(rewritten_node: PlanNode) -> Self {
1212
Self {
13-
rewritten: Some(rewrited),
13+
rewritten: Some(rewritten_node),
1414
stop: true,
1515
}
1616
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ impl PhysicalPlanBuilder {
115115
) -> Result<(), CubeError> {
116116
let mut context = context.clone();
117117
context.dimensions_query = false;
118+
context.measure_subquery = true;
118119
let sub_query = self.process_node(dimension_subquery.query.as_ref(), &context)?;
119120
let dim_name = dimension_subquery.subquery_dimension.name();
120121
let cube_name = dimension_subquery.subquery_dimension.cube_name();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub(super) struct PushDownBuilderContext {
1616
pub original_sql_pre_aggregations: HashMap<String, String>,
1717
pub required_measures: Option<Vec<Rc<MemberSymbol>>>,
1818
pub dimensions_query: bool,
19+
pub measure_subquery: bool,
1920
pub multi_stage_schemas: HashMap<String, Rc<Schema>>,
2021
}
2122

rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/processors/query.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ impl<'a> LogicalNodeProcessor<'a, Query> for QueryProcessor<'a> {
9494
&None,
9595
&mut render_references,
9696
)?;
97-
select_builder.add_projection_member(member, None);
97+
if context.measure_subquery {
98+
select_builder.add_projection_member_without_schema(member, None);
99+
} else {
100+
select_builder.add_projection_member(member, None);
101+
}
98102
}
99103

100104
for (measure, exists) in self

rust/cubesqlplanner/cubesqlplanner/src/plan/builder/select.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@ impl SelectBuilder {
7777
.add_column(SchemaColumn::new(alias.clone(), Some(member.full_name())));
7878
}
7979

80+
pub fn add_projection_member_without_schema(&mut self, member: &Rc<MemberSymbol>, alias: Option<String>) {
81+
let alias = if let Some(alias) = alias {
82+
alias
83+
} else {
84+
member.alias()
85+
};
86+
87+
let expr = Expr::Member(MemberExpression::new(member.clone()));
88+
let aliased_expr = AliasedExpr {
89+
expr,
90+
alias: alias.clone(),
91+
};
92+
93+
self.projection_columns.push(aliased_expr);
94+
}
95+
8096
pub fn add_projection_member_reference(
8197
&mut self,
8298
member: &Rc<MemberSymbol>,

rust/cubesqlplanner/cubesqlplanner/src/plan/subquery.rs

Lines changed: 0 additions & 35 deletions
This file was deleted.

rust/cubesqlplanner/cubesqlplanner/src/planner/query_properties.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,14 @@ impl QueryProperties {
240240
}
241241
}
242242
let source_measure_compiled = evaluator_compiler.add_measure_evaluator(source_measure.clone())?;
243-
let patched_measure = source_measure_compiled.as_measure()?.new_patched(new_measure_type, filters_to_add)?;
244-
let patched_symbol = MemberSymbol::new_measure(patched_measure);
245-
MemberExpressionExpression::PatchedSymbol(patched_symbol)
243+
let symbol = if let Ok(source_measure) = source_measure_compiled.as_measure() {
244+
245+
let patched_measure = source_measure.new_patched(new_measure_type, filters_to_add)?;
246+
MemberSymbol::new_measure(patched_measure)
247+
} else {
248+
source_measure_compiled
249+
};
250+
MemberExpressionExpression::PatchedSymbol(symbol)
246251

247252
} else {
248253
return Err(CubeError::user(format!("Source measure is required for `PatchMeasure` type of memeber expression")));
@@ -808,12 +813,20 @@ impl QueryProperties {
808813
.rendered_as_multiplied_measures
809814
.insert(item.measure.full_name());
810815
}
811-
if item.multiplied
812-
&& !item
813-
.measure
814-
.as_measure()?
815-
.can_used_as_addictive_in_multplied()
816-
{
816+
let is_multiplied_measure = if item.multiplied {
817+
if let Ok(measure) = item.measure.as_measure() {
818+
if measure.can_used_as_addictive_in_multplied() {
819+
false
820+
} else {
821+
true
822+
}
823+
} else {
824+
true
825+
}
826+
} else {
827+
false
828+
};
829+
if is_multiplied_measure {
817830
result
818831
.multiplied_measures
819832
.push(MultipliedMeasure::new(item.measure.clone(), item.cube_name));

0 commit comments

Comments
 (0)