Skip to content

Commit b436e17

Browse files
committed
update all ListViewArray construction with is_zctl
Signed-off-by: Connor Tsui <[email protected]>
1 parent f2efda0 commit b436e17

File tree

17 files changed

+116
-178
lines changed

17 files changed

+116
-178
lines changed

encodings/sparse/src/canonical.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,8 @@ mod test {
492492

493493
use rstest::rstest;
494494
use vortex_array::arrays::{
495-
BoolArray, DecimalArray, FixedSizeListArray, ListArray, ListViewArray, ListViewShape,
496-
PrimitiveArray, StructArray, VarBinArray, VarBinViewArray,
495+
BoolArray, DecimalArray, FixedSizeListArray, ListArray, ListViewArray, PrimitiveArray,
496+
StructArray, VarBinArray, VarBinViewArray,
497497
};
498498
use vortex_array::arrow::IntoArrowArray as _;
499499
use vortex_array::validity::Validity;
@@ -935,7 +935,7 @@ mod test {
935935
offsets,
936936
sizes,
937937
Validity::AllValid,
938-
ListViewShape::as_zero_copy_to_list(),
938+
true, // Is zero-copy to list.
939939
)
940940
.unwrap()
941941
.into_array();
@@ -988,7 +988,7 @@ mod test {
988988
offsets,
989989
sizes,
990990
Validity::AllValid,
991-
ListViewShape::as_zero_copy_to_list(),
991+
true, // Is zero-copy to list.
992992
)
993993
.unwrap()
994994
.into_array();
@@ -1038,7 +1038,7 @@ mod test {
10381038
offsets,
10391039
sizes,
10401040
Validity::AllValid,
1041-
ListViewShape::as_zero_copy_to_list(),
1041+
true, // Is zero-copy to list.
10421042
)
10431043
.unwrap()
10441044
.into_array();
@@ -1406,7 +1406,7 @@ mod test {
14061406
offsets,
14071407
sizes,
14081408
Validity::AllValid,
1409-
ListViewShape::as_zero_copy_to_list(),
1409+
true, // Is zero-copy to list.
14101410
)
14111411
.unwrap();
14121412

@@ -1488,7 +1488,7 @@ mod test {
14881488
offsets,
14891489
sizes,
14901490
Validity::AllValid,
1491-
ListViewShape::as_zero_copy_to_list(),
1491+
true, // Is zero-copy to list.
14921492
)
14931493
.unwrap()
14941494
.into_array();

fuzz/src/array/mask.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
6262
array.offsets().clone(),
6363
array.sizes().clone(),
6464
new_validity,
65-
array.shape(),
65+
array.is_zero_copy_to_list(),
6666
)
6767
.vortex_unwrap()
6868
.into_array()
@@ -131,8 +131,8 @@ fn apply_mask_to_validity(validity: &Validity, mask: &Mask) -> Validity {
131131
#[cfg(test)]
132132
mod tests {
133133
use vortex_array::arrays::{
134-
BoolArray, DecimalArray, FixedSizeListArray, ListViewArray, ListViewShape, NullArray,
135-
PrimitiveArray, StructArray, VarBinViewArray,
134+
BoolArray, DecimalArray, FixedSizeListArray, ListViewArray, NullArray, PrimitiveArray,
135+
StructArray, VarBinViewArray,
136136
};
137137
use vortex_array::{Array, IntoArray};
138138
use vortex_dtype::{DecimalDType, FieldNames, Nullability};
@@ -249,7 +249,7 @@ mod tests {
249249
offsets,
250250
sizes,
251251
Nullability::NonNullable.into(),
252-
ListViewShape::as_zero_copy_to_list(),
252+
true, // Is zero-copy to list.
253253
)
254254
.unwrap();
255255

fuzz/src/array/slice.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,14 @@ pub fn slice_canonical_array(
7474
// Since the list view elements can be stored out of order, we cannot slice it.
7575
let elements = list_array.elements().clone();
7676

77-
ListViewArray::try_new(elements, offsets, sizes, validity, list_array.shape())
78-
.map(|a| a.into_array())
77+
ListViewArray::try_new(
78+
elements,
79+
offsets,
80+
sizes,
81+
validity,
82+
list_array.is_zero_copy_to_list(),
83+
)
84+
.map(|a| a.into_array())
7985
}
8086
DType::FixedSizeList(..) => {
8187
let fsl_array = array.to_fixed_size_list();

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,15 @@ impl ListViewArray {
144144
) -> VortexResult<Self> {
145145
Self::validate(&elements, &offsets, &sizes, &validity, is_zctl)?;
146146

147-
// SAFETY: validate ensures all invariants are met.
148-
Ok(unsafe { Self::new_unchecked(elements, offsets, sizes, validity, is_zctl) })
147+
Ok(Self {
148+
dtype: DType::List(Arc::new(elements.dtype().clone()), validity.nullability()),
149+
elements,
150+
offsets,
151+
sizes,
152+
validity,
153+
is_zero_copy_to_list: is_zctl,
154+
stats_set: Default::default(),
155+
})
149156
}
150157

151158
/// Creates a new [`ListViewArray`] without validation.

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ mod tests {
532532
inner_offsets,
533533
inner_sizes,
534534
Validity::NonNullable,
535-
ListViewShape::as_zero_copy_to_list(),
535+
true, // Is zero-copy to list.
536536
)
537537
.unwrap();
538538

@@ -543,7 +543,7 @@ mod tests {
543543
outer_offsets,
544544
outer_sizes,
545545
Validity::NonNullable,
546-
ListViewShape::as_zero_copy_to_list(),
546+
true, // Is zero-copy to list.
547547
)
548548
.unwrap();
549549

@@ -582,7 +582,7 @@ mod tests {
582582
lv1_offsets,
583583
lv1_sizes,
584584
Validity::NonNullable,
585-
ListViewShape::as_zero_copy_to_list(),
585+
true, // Is zero-copy to list.
586586
)
587587
.unwrap();
588588

@@ -594,7 +594,7 @@ mod tests {
594594
lv2_offsets,
595595
lv2_sizes,
596596
Validity::NonNullable,
597-
ListViewShape::as_zero_copy_to_list(),
597+
true, // Is zero-copy to list.
598598
)
599599
.unwrap();
600600

@@ -622,7 +622,7 @@ mod tests {
622622
innermost_offsets,
623623
innermost_sizes,
624624
Validity::NonNullable,
625-
ListViewShape::as_zero_copy_to_list(),
625+
true, // Is zero-copy to list.
626626
)
627627
.unwrap();
628628

@@ -641,7 +641,7 @@ mod tests {
641641
outer_offsets,
642642
outer_sizes,
643643
Validity::NonNullable,
644-
ListViewShape::as_zero_copy_to_list(),
644+
true, // Is zero-copy to list.
645645
)
646646
.unwrap();
647647

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ mod tests {
200200
offsets,
201201
sizes,
202202
Validity::NonNullable,
203-
ListViewShape::as_zero_copy_to_list().with_no_overlaps(false),
203+
false, // NOT zero-copy to list (has overlaps).
204204
)
205205
.unwrap();
206206

@@ -241,11 +241,7 @@ mod tests {
241241
);
242242

243243
let listview = ListViewArray::try_new(
244-
elements,
245-
offsets,
246-
sizes,
247-
validity,
248-
ListViewShape::as_zero_copy_to_list().with_no_overlaps(false),
244+
elements, offsets, sizes, validity, false, // NOT zero-copy to list (has overlaps).
249245
)
250246
.unwrap();
251247

@@ -284,7 +280,7 @@ mod tests {
284280
offsets,
285281
sizes,
286282
Validity::NonNullable,
287-
ListViewShape::as_zero_copy_to_list().with_no_gaps(false),
283+
false, // NOT zero-copy to list (has gaps).
288284
)
289285
.unwrap();
290286

vortex-array/src/arrays/listview/tests/basic.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use vortex_buffer::buffer;
88
use vortex_dtype::{DType, Nullability, PType};
99
use vortex_scalar::Scalar;
1010

11-
use crate::arrays::listview::ListViewShape;
1211
use crate::arrays::{
1312
BoolArray, ConstantArray, ListArray, ListViewArray, PrimitiveArray, list_view_from_list,
1413
};
@@ -28,7 +27,7 @@ fn test_basic_listview_comprehensive() {
2827
offsets,
2928
sizes,
3029
Validity::NonNullable,
31-
ListViewShape::as_zero_copy_to_list(),
30+
true, // Is zero-copy to list.
3231
);
3332

3433
assert_eq!(listview.len(), 3);
@@ -85,7 +84,7 @@ fn test_out_of_order_offsets() {
8584
offsets,
8685
sizes,
8786
Validity::NonNullable,
88-
ListViewShape::as_zero_copy_to_list().with_sorted_offsets(false),
87+
false, // NOT zero-copy to list (unsorted offsets).
8988
);
9089

9190
assert_eq!(listview.len(), 3);
@@ -116,7 +115,7 @@ fn test_empty_listview() {
116115
offsets,
117116
sizes,
118117
Validity::NonNullable,
119-
ListViewShape::as_zero_copy_to_list(),
118+
true, // Is zero-copy to list.
120119
)
121120
.unwrap();
122121

@@ -178,19 +177,16 @@ fn test_listview_with_constant_arrays(#[case] const_sizes: bool, #[case] const_o
178177
buffer![3i32, 2, 1].into_array()
179178
};
180179

181-
// Determine shape flags based on test case.
182-
let has_overlaps = if const_offsets {
183-
false // All lists start at same offset, so they overlap
184-
} else {
185-
true // Different offsets with no overlap
186-
};
180+
// Determine if the array is zero-copy to list based on test case.
181+
// The array is NOT zero-copy when there are overlaps (const_offsets case).
182+
let is_zctl = !const_offsets;
187183

188184
let listview = ListViewArray::new(
189185
elements.into_array(),
190186
offsets,
191187
sizes,
192188
Validity::NonNullable,
193-
ListViewShape::as_zero_copy_to_list().with_no_overlaps(has_overlaps),
189+
is_zctl,
194190
);
195191
assert_eq!(listview.len(), 3);
196192

@@ -244,7 +240,7 @@ fn test_validation_errors(
244240
offsets.into_array(),
245241
sizes.into_array(),
246242
Validity::NonNullable,
247-
ListViewShape::as_zero_copy_to_list(),
243+
true, // Is zero-copy to list.
248244
);
249245

250246
assert!(result.is_err());
@@ -263,7 +259,7 @@ fn test_validate_nullable_offsets() {
263259
offsets,
264260
sizes,
265261
Validity::NonNullable,
266-
ListViewShape::as_zero_copy_to_list(),
262+
true, // Is zero-copy to list.
267263
);
268264

269265
assert!(result.is_err());
@@ -287,7 +283,7 @@ fn test_validate_nullable_sizes() {
287283
offsets,
288284
sizes,
289285
Validity::NonNullable,
290-
ListViewShape::as_zero_copy_to_list(),
286+
true, // Is zero-copy to list.
291287
);
292288

293289
assert!(result.is_err());
@@ -312,7 +308,7 @@ fn test_validate_size_type_too_large() {
312308
offsets,
313309
sizes,
314310
Validity::NonNullable,
315-
ListViewShape::as_zero_copy_to_list(),
311+
true, // Is zero-copy to list.
316312
);
317313

318314
assert!(result.is_err());
@@ -332,7 +328,7 @@ fn test_validate_offset_plus_size_overflow() {
332328
offsets,
333329
sizes,
334330
Validity::NonNullable,
335-
ListViewShape::as_zero_copy_to_list(),
331+
true, // Is zero-copy to list.
336332
);
337333

338334
assert!(result.is_err());
@@ -353,11 +349,7 @@ fn test_validate_invalid_validity_length() {
353349
let validity = Validity::Array(BoolArray::from_iter(vec![true, false]).into_array());
354350

355351
let result = ListViewArray::try_new(
356-
elements,
357-
offsets,
358-
sizes,
359-
validity,
360-
ListViewShape::as_zero_copy_to_list(),
352+
elements, offsets, sizes, validity, true, // Is zero-copy to list.
361353
);
362354

363355
assert!(result.is_err());
@@ -381,7 +373,7 @@ fn test_validate_non_integer_offsets() {
381373
offsets,
382374
sizes,
383375
Validity::NonNullable,
384-
ListViewShape::as_zero_copy_to_list(),
376+
true, // Is zero-copy to list.
385377
);
386378

387379
assert!(result.is_err());
@@ -405,9 +397,7 @@ fn test_validate_different_int_types() {
405397
offsets,
406398
sizes,
407399
Validity::NonNullable,
408-
ListViewShape::as_zero_copy_to_list()
409-
.with_sorted_offsets(false)
410-
.with_no_overlaps(false),
400+
false, // NOT zero-copy to list (unsorted and overlapping).
411401
);
412402
assert!(result.is_ok());
413403
}
@@ -425,7 +415,7 @@ fn test_validate_u64_overflow() {
425415
offsets,
426416
sizes,
427417
Validity::NonNullable,
428-
ListViewShape::as_zero_copy_to_list(),
418+
true, // Is zero-copy to list.
429419
);
430420

431421
assert!(result.is_err());

0 commit comments

Comments
 (0)