requiring meet aggregations all to be in the last positions

main
Ziyang Hu 2 years ago
parent 3a29935f9b
commit 987cefd0b0

@ -45,24 +45,27 @@ impl CompiledRuleSet {
pub(crate) fn aggr_kind(&self) -> AggrKind {
match self {
CompiledRuleSet::Rules(rules) => {
let mut is_aggr = false;
for rule in rules {
for aggr in &rule.aggr {
if aggr.is_some() {
is_aggr = true;
break;
let mut has_non_meet = false;
let mut has_aggr = false;
for maybe_aggr in rules[0].aggr.iter() {
match maybe_aggr {
None => {
// meet aggregations must all be at the last positions
if has_aggr {
has_non_meet = true
}
}
Some((aggr, _)) => {
has_aggr = true;
has_non_meet = has_non_meet || !aggr.is_meet
}
}
}
if !is_aggr {
return AggrKind::None;
}
for (aggr, _args) in rules[0].aggr.iter().flatten() {
if !aggr.is_meet {
return AggrKind::Normal;
}
match (has_aggr, has_non_meet) {
(false, _) => AggrKind::None,
(true, true) => AggrKind::Normal,
(true, false) => AggrKind::Meet,
}
AggrKind::Meet
}
CompiledRuleSet::Algo(_) => AggrKind::None,
}

Loading…
Cancel
Save