Skip to content

Commit 1fb2194

Browse files
committed
Use Columnar lengths in List take
Signed-off-by: Daniel King <dan@spiraldb.com>
1 parent a54e059 commit 1fb2194

1 file changed

Lines changed: 32 additions & 18 deletions

File tree

  • vortex-array/src/arrays/list/compute

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

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ use itertools::Itertools as _;
55
use vortex_buffer::BufferMut;
66
use vortex_error::VortexExpect;
77
use vortex_error::VortexResult;
8+
use vortex_error::vortex_bail;
89
use vortex_error::vortex_ensure;
910
use vortex_error::vortex_err;
1011

1112
use crate::ArrayRef;
13+
use crate::Canonical;
14+
use crate::Columnar;
1215
use crate::IntoArray;
1316
use crate::array::ArrayView;
1417
use crate::arrays::ConstantArray;
@@ -20,7 +23,7 @@ use crate::arrays::Primitive;
2023
use crate::arrays::PrimitiveArray;
2124
use crate::arrays::dict::TakeExecute;
2225
use crate::arrays::list::ListArrayExt;
23-
use crate::arrays::piecewise_sequence::ConstantOrArray;
26+
use crate::arrays::piecewise_sequence::constant_unsigned_usize;
2427
use crate::arrays::piecewise_sequence::maybe_contiguous_slices;
2528
use crate::arrays::primitive::PrimitiveArrayExt;
2629
use crate::builders::ArrayBuilder;
@@ -164,23 +167,34 @@ fn take_piecewise_sequence(
164167
let offsets = offsets.reinterpret_cast(offsets.ptype().to_unsigned());
165168
let output_len = indices_ref.len();
166169

167-
let taken = match &lengths {
168-
ConstantOrArray::Constant(length) => take_piecewise_sequence_constant_dispatch(
169-
array,
170-
&starts,
171-
*length,
172-
&offsets,
173-
indices_ref,
174-
output_len,
175-
)?,
176-
ConstantOrArray::Array(lengths) => take_piecewise_sequence_lengths_dispatch(
177-
array,
178-
&starts,
179-
lengths,
180-
&offsets,
181-
indices_ref,
182-
output_len,
183-
)?,
170+
let taken = match lengths {
171+
Columnar::Constant(lengths) => {
172+
let length = constant_unsigned_usize(&lengths)?;
173+
take_piecewise_sequence_constant_dispatch(
174+
array,
175+
&starts,
176+
length,
177+
&offsets,
178+
indices_ref,
179+
output_len,
180+
)?
181+
}
182+
Columnar::Canonical(Canonical::Primitive(lengths)) => {
183+
take_piecewise_sequence_lengths_dispatch(
184+
array,
185+
&starts,
186+
&lengths,
187+
&offsets,
188+
indices_ref,
189+
output_len,
190+
)?
191+
}
192+
Columnar::Canonical(lengths) => {
193+
vortex_bail!(
194+
"PiecewiseSequenceArray lengths must be primitive or constant, got {}",
195+
lengths.dtype()
196+
)
197+
}
184198
};
185199
Ok(Some(taken))
186200
}

0 commit comments

Comments
 (0)