Skip to content

Commit 44da00f

Browse files
feat: return inner array is slice chunked array how only one chunk (#2799)
Seems unnecessary to allocate a new array?
1 parent 51b76f4 commit 44da00f

File tree

1 file changed

+9
-10
lines changed
  • vortex-array/src/arrays/chunked/compute

1 file changed

+9
-10
lines changed

vortex-array/src/arrays/chunked/compute/slice.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@ impl SliceFn<&ChunkedArray> for ChunkedEncoding {
1818

1919
if length_chunk == offset_chunk {
2020
let chunk = array.chunk(offset_chunk)?;
21-
return Ok(ChunkedArray::new_unchecked(
22-
vec![slice(chunk, offset_in_first_chunk, length_in_last_chunk)?],
23-
array.dtype().clone(),
24-
)
25-
.into_array());
21+
return slice(chunk, offset_in_first_chunk, length_in_last_chunk);
2622
}
2723

2824
let mut chunks = (offset_chunk..length_chunk + 1)
@@ -65,11 +61,14 @@ mod tests {
6561

6662
fn assert_equal_slices<T: NativePType>(arr: &dyn Array, slice: &[T]) {
6763
let mut values = Vec::with_capacity(arr.len());
68-
arr.as_::<ChunkedArray>()
69-
.chunks()
70-
.iter()
71-
.map(|a| a.to_primitive().unwrap())
72-
.for_each(|a| values.extend_from_slice(a.as_slice::<T>()));
64+
if let Some(arr) = arr.as_opt::<ChunkedArray>() {
65+
arr.chunks()
66+
.iter()
67+
.map(|a| a.to_primitive().unwrap())
68+
.for_each(|a| values.extend_from_slice(a.as_slice::<T>()));
69+
} else {
70+
values.extend_from_slice(arr.to_primitive().unwrap().as_slice::<T>());
71+
}
7372
assert_eq!(values, slice);
7473
}
7574

0 commit comments

Comments
 (0)