Skip to content

Commit 4ff991e

Browse files
committed
Use unit multipliers for PiecewiseSequence consumers
Signed-off-by: Daniel King <dan@spiraldb.com>
1 parent 7b3beb6 commit 4ff991e

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

vortex-array/src/arrays/list/compute/take.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use vortex_error::vortex_err;
1111
use crate::ArrayRef;
1212
use crate::IntoArray;
1313
use crate::array::ArrayView;
14+
use crate::arrays::ConstantArray;
1415
use crate::arrays::List;
1516
use crate::arrays::ListArray;
1617
use crate::arrays::PiecewiseSequence;
@@ -19,7 +20,7 @@ use crate::arrays::Primitive;
1920
use crate::arrays::PrimitiveArray;
2021
use crate::arrays::dict::TakeExecute;
2122
use crate::arrays::list::ListArrayExt;
22-
use crate::arrays::piecewise_sequence::execute_index_arrays;
23+
use crate::arrays::piecewise_sequence::execute_unit_multiplier_index_arrays;
2324
use crate::arrays::piecewise_sequence::validate_index_ranges;
2425
use crate::arrays::primitive::PrimitiveArrayExt;
2526
use crate::builders::ArrayBuilder;
@@ -156,7 +157,9 @@ fn take_piecewise_sequence(
156157
return Ok(None);
157158
}
158159

159-
let (starts, lengths) = execute_index_arrays(indices, ctx)?;
160+
let Some((starts, lengths)) = execute_unit_multiplier_index_arrays(indices, ctx)? else {
161+
return Ok(None);
162+
};
160163
let offsets = array.offsets().clone().execute::<PrimitiveArray>(ctx)?;
161164
let offsets = offsets.reinterpret_cast(offsets.ptype().to_unsigned());
162165

@@ -305,12 +308,14 @@ where
305308
debug_assert_eq!(output_elements, total_elements);
306309

307310
let offsets = PrimitiveArray::new(new_offsets.freeze(), Validity::NonNullable).into_array();
311+
let multipliers = ConstantArray::new(1u64, element_starts.len()).into_array();
308312
// SAFETY: element ranges are derived from validated source list offsets, and total_elements is
309-
// the sum of the gathered element range lengths.
313+
// the sum of the gathered element range lengths. Multiplier 1 preserves contiguous ranges.
310314
let element_indices = unsafe {
311315
PiecewiseSequenceArray::new_unchecked(
312316
element_starts.into_array(),
313317
element_lengths.into_array(),
318+
multipliers,
314319
total_elements,
315320
)
316321
};
@@ -416,6 +421,7 @@ mod test {
416421
use crate::VortexSessionExecute;
417422
use crate::array_session;
418423
use crate::arrays::BoolArray;
424+
use crate::arrays::ConstantArray;
419425
use crate::arrays::ListArray;
420426
use crate::arrays::ListViewArray;
421427
use crate::arrays::PiecewiseSequenceArray;
@@ -618,6 +624,7 @@ mod test {
618624
let idx = PiecewiseSequenceArray::try_new(
619625
buffer![1u64, 0].into_array(),
620626
buffer![2u64, 1].into_array(),
627+
ConstantArray::new(1u64, 2).into_array(),
621628
3,
622629
)
623630
.unwrap()

vortex-array/src/arrays/listview/rebuild.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,13 @@ impl ListViewArray {
288288
} = ranges;
289289

290290
// SAFETY: range starts and lengths are derived from valid ListView metadata; elements_len
291-
// is the sum of all generated range lengths.
291+
// is the sum of all generated range lengths. Multiplier 1 preserves contiguous ranges.
292+
let multipliers = ConstantArray::new(1u64, starts.len()).into_array();
292293
let element_indices = unsafe {
293294
PiecewiseSequenceArray::new_unchecked(
294295
starts.into_array(),
295296
lengths.into_array(),
297+
multipliers,
296298
elements_len,
297299
)
298300
};

0 commit comments

Comments
 (0)