From 576cc3226dd8236aa103ff73255347422379d7b6 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Thu, 10 Oct 2024 07:08:09 -0400 Subject: [PATCH] x2 --- datafusion/functions-aggregate/src/min_max/min_max_bytes.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/datafusion/functions-aggregate/src/min_max/min_max_bytes.rs b/datafusion/functions-aggregate/src/min_max/min_max_bytes.rs index 3ce1ac37625f..bb5c822aaf6a 100644 --- a/datafusion/functions-aggregate/src/min_max/min_max_bytes.rs +++ b/datafusion/functions-aggregate/src/min_max/min_max_bytes.rs @@ -412,7 +412,11 @@ impl MinMaxBytesState { fn set_value(&mut self, group_index: usize, new_val: &[u8]) { match self.min_max[group_index].as_mut() { None => { - self.min_max[group_index] = Some(new_val.to_vec()); + // No existing value, so allocate a new one (allocate 2x the size of the input) + // to avoid re-allocating for small strings + let mut new_vec = Vec::with_capacity(new_val.len() * 2); + new_vec.extend_from_slice(new_val); + self.min_max[group_index] = Some(new_vec); self.total_data_bytes += new_val.len(); } Some(existing_val) => {