@@ -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