diff --git a/arrow-select/src/concat.rs b/arrow-select/src/concat.rs index 6096dc082251..60c0423404af 100644 --- a/arrow-select/src/concat.rs +++ b/arrow-select/src/concat.rs @@ -57,14 +57,24 @@ fn binary_capacity(arrays: &[&dyn Array]) -> Capacities { fn fixed_size_list_capacity(arrays: &[&dyn Array], data_type: &DataType) -> Capacities { if let DataType::FixedSizeList(f, _) = data_type { let item_capacity = arrays.iter().map(|a| a.len()).sum(); - let values: Vec<&dyn arrow_array::Array> = arrays - .iter() - .map(|a| a.as_fixed_size_list().values().as_ref()) - .collect(); - Capacities::List( - item_capacity, - Some(Box::new(get_capacity(&values, f.data_type()))), - ) + let child_data_type = f.data_type(); + match child_data_type { + DataType::Utf8 + | DataType::LargeUtf8 + | DataType::Binary + | DataType::LargeBinary + | DataType::FixedSizeList(_, _) => { + let values: Vec<&dyn arrow_array::Array> = arrays + .iter() + .map(|a| a.as_fixed_size_list().values().as_ref()) + .collect(); + Capacities::List( + item_capacity, + Some(Box::new(get_capacity(&values, child_data_type))), + ) + }, + _ => Capacities::Array(item_capacity), + } } else { unreachable!("illegal data type for fixed size list") }