From b2f5e39c4636951ccb7357478f21fcf34a692f51 Mon Sep 17 00:00:00 2001 From: Marko Grujic Date: Fri, 19 Apr 2024 00:13:25 +0200 Subject: [PATCH] Fix AVG groups accummulator ignoring return type (#10114) * Fix AVG groups accummulator ignoring return type * Add rowsort directive to an unstable slt test --- datafusion/physical-expr/src/aggregate/average.rs | 3 ++- datafusion/sqllogictest/test_files/aggregate.slt | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/datafusion/physical-expr/src/aggregate/average.rs b/datafusion/physical-expr/src/aggregate/average.rs index f06355293d7c..065c2179f4c5 100644 --- a/datafusion/physical-expr/src/aggregate/average.rs +++ b/datafusion/physical-expr/src/aggregate/average.rs @@ -519,7 +519,8 @@ where // don't evaluate averages with null inputs to avoid errors on null values let array: PrimitiveArray = if nulls.null_count() > 0 { - let mut builder = PrimitiveBuilder::::with_capacity(nulls.len()); + let mut builder = PrimitiveBuilder::::with_capacity(nulls.len()) + .with_data_type(self.return_data_type.clone()); let iter = sums.into_iter().zip(counts).zip(nulls.iter()); for ((sum, count), is_valid) in iter { diff --git a/datafusion/sqllogictest/test_files/aggregate.slt b/datafusion/sqllogictest/test_files/aggregate.slt index 3d24fe3888d7..457cd11211f1 100644 --- a/datafusion/sqllogictest/test_files/aggregate.slt +++ b/datafusion/sqllogictest/test_files/aggregate.slt @@ -2429,12 +2429,12 @@ statement ok INSERT INTO test_decimal_table VALUES (1, 10.10, 100.1, NULL), (1, 20.20, 200.2, NULL), (2, 10.10, 700.1, NULL), (2, 20.20, 700.1, NULL), (3, 10.1, 100.1, NULL), (3, 10.1, NULL, NULL) # aggregate_decimal_with_group_by -query IIRRRRIIR rowsort -select c1, count(c2), avg(c2), sum(c2), min(c2), max(c2), count(c3), count(c4), sum(c4) from test_decimal_table group by c1 +query IIRRRRIIRR rowsort +select c1, count(c2), avg(c2), sum(c2), min(c2), max(c2), count(c3), count(c4), sum(c4), avg(c4) from test_decimal_table group by c1 ---- -1 2 15.15 30.3 10.1 20.2 2 0 NULL -2 2 15.15 30.3 10.1 20.2 2 0 NULL -3 2 10.1 20.2 10.1 10.1 1 0 NULL +1 2 15.15 30.3 10.1 20.2 2 0 NULL NULL +2 2 15.15 30.3 10.1 20.2 2 0 NULL NULL +3 2 10.1 20.2 10.1 10.1 1 0 NULL NULL # aggregate_decimal_with_group_by_decimal query RIRRRRIR rowsort