@@ -5,10 +5,13 @@ use itertools::Itertools as _;
55use vortex_buffer:: BufferMut ;
66use vortex_error:: VortexExpect ;
77use vortex_error:: VortexResult ;
8+ use vortex_error:: vortex_bail;
89use vortex_error:: vortex_ensure;
910use vortex_error:: vortex_err;
1011
1112use crate :: ArrayRef ;
13+ use crate :: Canonical ;
14+ use crate :: Columnar ;
1215use crate :: IntoArray ;
1316use crate :: array:: ArrayView ;
1417use crate :: arrays:: ConstantArray ;
@@ -20,7 +23,7 @@ use crate::arrays::Primitive;
2023use crate :: arrays:: PrimitiveArray ;
2124use crate :: arrays:: dict:: TakeExecute ;
2225use crate :: arrays:: list:: ListArrayExt ;
23- use crate :: arrays:: piecewise_sequence:: ConstantOrArray ;
26+ use crate :: arrays:: piecewise_sequence:: constant_unsigned_usize ;
2427use crate :: arrays:: piecewise_sequence:: maybe_contiguous_slices;
2528use crate :: arrays:: primitive:: PrimitiveArrayExt ;
2629use 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