Skip to content

Commit b12c6ef

Browse files
committed
implement select_distinct_dimensions
1 parent 684c814 commit b12c6ef

File tree

1 file changed

+20
-14
lines changed
  • rust/cubesql/cubesql/src/compile/rewrite/rules

1 file changed

+20
-14
lines changed

rust/cubesql/cubesql/src/compile/rewrite/rules/members.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ impl RewriteRules for MemberRules {
288288
"CubeScanWrapped:false",
289289
"CubeScanUngrouped:false",
290290
),
291-
self.select_distinct_dimensions(/*"?members"*/),
291+
self.select_distinct_dimensions("?members"),
292292
),
293293
// MOD function to binary expr
294294
transforming_rewrite_with_root(
@@ -1508,20 +1508,26 @@ impl MemberRules {
15081508

15091509
fn select_distinct_dimensions(
15101510
&self,
1511-
// members_var: &'static str,
1511+
members_var: &'static str,
15121512
) -> impl Fn(&mut CubeEGraph, &mut Subst) -> bool {
1513-
// let members_var = var!(members_var);
1514-
1515-
move |_egraph, _subst| {
1516-
// for members in var_list_iter!(egraph[subst[members_var]], CubeScanMembers) {
1517-
// // TODO: check if all members in request are dimensions
1518-
// // If no - return false
1519-
// for member in members.iter() {
1520-
// println!("member: {:?}", egraph[*member]);
1521-
// }
1522-
// }
1523-
1524-
true
1513+
let members_var = var!(members_var);
1514+
let meta_context = self.meta_context.clone();
1515+
1516+
move |egraph, subst| {
1517+
egraph
1518+
.index(subst[members_var])
1519+
.data
1520+
.member_name_to_expr
1521+
.as_ref()
1522+
.map_or(true, |member_names_to_expr| {
1523+
!member_names_to_expr.list.iter().any(|(_, member, _)| {
1524+
// we should allow transform only for queries with dimensions only,
1525+
// as it doesn't make sense for measures
1526+
meta_context
1527+
.find_measure_with_name(member.name().unwrap().to_string())
1528+
.is_some()
1529+
})
1530+
})
15251531
}
15261532
}
15271533

0 commit comments

Comments
 (0)