From eed44cc25a3d925fe9f8ed40eb3161fa81503e84 Mon Sep 17 00:00:00 2001 From: Emil Ejbyfeldt Date: Wed, 25 Sep 2024 10:13:21 +0200 Subject: [PATCH] Fix panic in variance GroupsAccumulator The bug was in the orginal implementation in #12095. This fixes the issue and modify a test case such that it would have caught it. --- datafusion/functions-aggregate/src/variance.rs | 2 +- datafusion/sqllogictest/test_files/aggregate.slt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/datafusion/functions-aggregate/src/variance.rs b/datafusion/functions-aggregate/src/variance.rs index 367a8669ab7d3..3648ec0d13127 100644 --- a/datafusion/functions-aggregate/src/variance.rs +++ b/datafusion/functions-aggregate/src/variance.rs @@ -470,7 +470,7 @@ impl VarianceGroupsAccumulator { if let StatsType::Sample = self.stats_type { counts.iter_mut().for_each(|count| { - *count -= 1; + *count = count.saturating_sub(1); }); } let nulls = NullBuffer::from_iter(counts.iter().map(|&count| count != 0)); diff --git a/datafusion/sqllogictest/test_files/aggregate.slt b/datafusion/sqllogictest/test_files/aggregate.slt index 576abe5c6f5a3..3ae109bc80a69 100644 --- a/datafusion/sqllogictest/test_files/aggregate.slt +++ b/datafusion/sqllogictest/test_files/aggregate.slt @@ -567,13 +567,13 @@ set datafusion.sql_parser.dialect = 'Postgres'; # csv_query_stddev_12 query IR -SELECT c2, var_samp(c12) FILTER (WHERE c12 > 0.90) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2 +SELECT c2, var_samp(c12) FILTER (WHERE c12 > 0.95) FROM aggregate_test_100 GROUP BY c2 ORDER BY c2 ---- -1 0.000889240174 -2 0.000785878272 +1 0.000791243479 +2 0.000061521903 3 NULL 4 NULL -5 0.000269544643 +5 NULL # Restore the default dialect statement ok