From e377e09498061ac99e88e0a89cb79ccfa2758fb8 Mon Sep 17 00:00:00 2001 From: Bennett Clement Date: Fri, 12 Jul 2024 00:20:44 +0800 Subject: [PATCH] Fix avg(), total(), count() default value on empty set --- core/vdbe.rs | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/core/vdbe.rs b/core/vdbe.rs index 27fb65d95..4c1ca358f 100644 --- a/core/vdbe.rs +++ b/core/vdbe.rs @@ -594,23 +594,38 @@ impl Program { state.pc += 1; } Insn::AggFinal { register, func } => { - match func { - AggFunc::Avg => { - let OwnedValue::Agg(agg) = state.registers[*register].borrow_mut() - else { - unreachable!(); + match state.registers[*register].borrow_mut() { + OwnedValue::Agg(agg) => { + match func { + AggFunc::Avg => { + 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 => {} - AggFunc::Count => {} - AggFunc::Max => {} - AggFunc::Min => {} + OwnedValue::Null => { + // when the set is empty + match func { + AggFunc::Total => { + state.registers[*register] = OwnedValue::Float(0.0); + } + AggFunc::Count => { + state.registers[*register] = OwnedValue::Integer(0); + } + _ => {} + } + } _ => { - todo!(); + unreachable!(); } }; state.pc += 1;