Fix avg(), total(), count() default value on empty set

This commit is contained in:
Bennett Clement
2024-07-12 00:20:44 +08:00
parent 79ba53f190
commit e377e09498

View File

@@ -594,23 +594,38 @@ impl Program {
state.pc += 1; state.pc += 1;
} }
Insn::AggFinal { register, func } => { Insn::AggFinal { register, func } => {
match func { match state.registers[*register].borrow_mut() {
AggFunc::Avg => { OwnedValue::Agg(agg) => {
let OwnedValue::Agg(agg) = state.registers[*register].borrow_mut() match func {
else { AggFunc::Avg => {
unreachable!(); let AggContext::Avg(acc, count) = agg.borrow_mut() else {
unreachable!();
};
*acc /= count.clone();
}
AggFunc::Sum | AggFunc::Total => {}
AggFunc::Count => {}
AggFunc::Max => {}
AggFunc::Min => {}
_ => {
todo!();
}
}; };
let AggContext::Avg(acc, count) = agg.borrow_mut() else {
unreachable!();
};
*acc /= count.clone();
} }
AggFunc::Sum | AggFunc::Total => {} OwnedValue::Null => {
AggFunc::Count => {} // when the set is empty
AggFunc::Max => {} match func {
AggFunc::Min => {} AggFunc::Total => {
state.registers[*register] = OwnedValue::Float(0.0);
}
AggFunc::Count => {
state.registers[*register] = OwnedValue::Integer(0);
}
_ => {}
}
}
_ => { _ => {
todo!(); unreachable!();
} }
}; };
state.pc += 1; state.pc += 1;