Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,25 @@ impl PhysicalPlanBuilder {
) -> Result<Vec<OrderBy>, CubeError> {
let mut result = Vec::new();
for o in order_by.iter() {
for position in logical_schema.find_member_positions(&o.name()) {
let positions = logical_schema.find_member_positions(&o.name());

// TODO: Check for `is_measure` is temporary here until
// correct processing of order by dimension that is not included in the
// selection list will be implemented
if positions.is_empty() && o.member_symbol().is_measure() {
result.push(OrderBy::new(
Expr::Member(MemberExpression::new(o.member_symbol())),
position + 1,
0,
o.desc(),
));
} else {
for position in positions {
result.push(OrderBy::new(
Expr::Member(MemberExpression::new(o.member_symbol())),
position + 1,
o.desc(),
));
}
}
}
Ok(result)
Expand Down
30 changes: 30 additions & 0 deletions rust/cubesqlplanner/cubesqlplanner/src/planner/query_properties.rs
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,7 @@ impl QueryProperties {
self.query_tools.clone(),
&self.measures,
&self.dimensions,
&self.extract_dimensions_from_order(),
&self.time_dimensions,
&self.time_dimensions_filters,
&self.dimensions_filters,
Expand All @@ -541,6 +542,7 @@ impl QueryProperties {
self.query_tools.clone(),
measures,
&self.dimensions,
&self.extract_dimensions_from_order(),
&self.time_dimensions,
&self.time_dimensions_filters,
&self.dimensions_filters,
Expand All @@ -553,11 +555,25 @@ impl QueryProperties {
self.total_query
}

fn extract_dimensions_from_order(&self) -> Vec<Rc<MemberSymbol>> {
self.order_by
.iter()
.filter_map(|order| {
if order.member_evaluator.as_dimension().is_ok() {
Some(order.member_evaluator.clone())
} else {
None
}
})
.collect()
}

pub fn compute_join_multi_fact_groups(
query_join_hints: Rc<Vec<JoinHintItem>>,
query_tools: Rc<QueryTools>,
measures: &Vec<Rc<MemberSymbol>>,
dimensions: &Vec<Rc<MemberSymbol>>,
order_dimensions: &Vec<Rc<MemberSymbol>>,
time_dimensions: &Vec<Rc<MemberSymbol>>,
time_dimensions_filters: &Vec<FilterItem>,
dimensions_filters: &Vec<FilterItem>,
Expand All @@ -567,6 +583,9 @@ impl QueryProperties {
let dimensions_join_hints = query_tools
.cached_data_mut()
.join_hints_for_member_symbol_vec(&dimensions)?;
let order_dimensions_join_hints = query_tools
.cached_data_mut()
.join_hints_for_member_symbol_vec(&order_dimensions)?;
let time_dimensions_join_hints = query_tools
.cached_data_mut()
.join_hints_for_member_symbol_vec(&time_dimensions)?;
Expand All @@ -586,6 +605,7 @@ impl QueryProperties {
let mut dimension_and_filter_join_hints_concat = vec![query_join_hints];

dimension_and_filter_join_hints_concat.extend(dimensions_join_hints.into_iter());
dimension_and_filter_join_hints_concat.extend(order_dimensions_join_hints.into_iter());
dimension_and_filter_join_hints_concat.extend(time_dimensions_join_hints.into_iter());
dimension_and_filter_join_hints_concat
.extend(time_dimensions_filters_join_hints.into_iter());
Expand Down Expand Up @@ -936,6 +956,16 @@ impl QueryProperties {
for item in self.measures_filters.iter() {
self.fill_missed_measures_from_filter(item, &mut measures)?;
}
for item in self.order_by.iter() {
if let Ok(measure) = item.member_evaluator.as_measure() {
if !measures
.iter()
.any(|m| m.full_name() == measure.full_name())
{
measures.push(item.member_evaluator.clone());
}
}
}
Ok(measures)
}

Expand Down
Loading