From 48a5322349af7c439b45aacbec8f9bcd0be6f56d Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Sun, 13 Nov 2022 05:14:47 +0100 Subject: [PATCH] Fixed error in memory usage of sliced binary/list/utf8arrays (#1293) --- src/compute/aggregate/memory.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/compute/aggregate/memory.rs b/src/compute/aggregate/memory.rs index 8c8617d936c..5b2e0e07e2d 100644 --- a/src/compute/aggregate/memory.rs +++ b/src/compute/aggregate/memory.rs @@ -9,9 +9,15 @@ fn validity_size(validity: Option<&Bitmap>) -> usize { macro_rules! dyn_binary { ($array:expr, $ty:ty, $o:ty) => {{ let array = $array.as_any().downcast_ref::<$ty>().unwrap(); + let offsets = array.offsets(); - array.values().len() - + array.offsets().len() * std::mem::size_of::<$o>() + // in case of Binary/Utf8/List the offsets are sliced, + // not the values buffer + let values_start = offsets[0] as usize; + let values_end = offsets[offsets.len() - 1] as usize; + + values_end - values_start + + offsets.len() * std::mem::size_of::<$o>() + validity_size(array.validity()) }}; }