polars_arrow/legacy/kernels/
concatenate.rs1use polars_error::{polars_bail, PolarsResult};
2
3use crate::array::growable::make_growable;
4use crate::array::ArrayRef;
5
6pub fn concatenate_owned_unchecked(arrays: &[ArrayRef]) -> PolarsResult<ArrayRef> {
11 if arrays.is_empty() {
12 polars_bail!(InvalidOperation: "concat requires input of at least one array")
13 }
14 if arrays.len() == 1 {
15 return Ok(arrays[0].clone());
16 }
17 let mut arrays_ref = Vec::with_capacity(arrays.len());
18 let mut lengths = Vec::with_capacity(arrays.len());
19 let mut capacity = 0;
20 for array in arrays {
21 arrays_ref.push(&**array);
22 lengths.push(array.len());
23 capacity += array.len();
24 }
25
26 let mut mutable = make_growable(&arrays_ref, false, capacity);
27
28 for (i, len) in lengths.iter().enumerate() {
29 unsafe { mutable.extend(i, 0, *len) }
32 }
33
34 Ok(mutable.as_box())
35}