Skip to content

Commit 562dcfb

Browse files
committed
fix fixed array
1 parent 0913b30 commit 562dcfb

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

arrow-array/src/array/list_view_array.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use arrow_schema::{ArrowError, DataType, FieldRef};
2525
use crate::array::{make_array, print_long_array};
2626
use crate::iterator::GenericListViewArrayIter;
2727
use crate::{
28-
new_empty_array, Array, ArrayAccessor, ArrayRef, ArrowPrimitiveType, FixedSizeListArray,
28+
new_empty_array, Array, ArrayAccessor, ArrayRef, FixedSizeListArray,
2929
OffsetSizeTrait,
3030
};
3131

@@ -409,15 +409,13 @@ impl<OffsetSize: OffsetSizeTrait> From<FixedSizeListArray> for GenericListViewAr
409409
DataType::FixedSizeList(f, size) => (f, *size as usize),
410410
_ => unreachable!(),
411411
};
412-
let iter = std::iter::repeat(size).take(value.len());
413-
let mut offsets = Vec::with_capacity(iter.size_hint().0);
414-
offsets.push(OffsetSize::usize_as(0));
412+
let mut offsets = Vec::with_capacity(size);
415413
let mut acc = 0_usize;
416414
let iter = std::iter::repeat(size).take(value.len());
417415
let mut sizes = Vec::with_capacity(iter.size_hint().0);
418416
for size in iter {
419-
acc = acc.checked_add(size).expect("usize overflow");
420417
offsets.push(OffsetSize::usize_as(acc));
418+
acc = acc.checked_add(size).expect("usize overflow");
421419
sizes.push(OffsetSize::usize_as(size));
422420
}
423421
OffsetSize::from_usize(acc).expect("offset overflow");
@@ -535,17 +533,13 @@ mod tests {
535533
0,
536534
list_array
537535
.value(0)
538-
.as_any()
539-
.downcast_ref::<Int32Array>()
540-
.unwrap()
536+
.as_primitive::<Int32Type>()
541537
.value(0)
542538
);
543539
assert_eq!(
544540
0,
545541
unsafe { list_array.value_unchecked(0) }
546-
.as_any()
547-
.downcast_ref::<Int32Array>()
548-
.unwrap()
542+
.as_primitive::<Int32Type>()
549543
.value(0)
550544
);
551545
for i in 0..3 {
@@ -581,17 +575,13 @@ mod tests {
581575
0,
582576
list_array
583577
.value(0)
584-
.as_any()
585-
.downcast_ref::<Int32Array>()
586-
.unwrap()
578+
.as_primitive::<Int32Type>()
587579
.value(0)
588580
);
589581
assert_eq!(
590582
0,
591583
unsafe { list_array.value_unchecked(0) }
592-
.as_any()
593-
.downcast_ref::<Int32Array>()
594-
.unwrap()
584+
.as_primitive::<Int32Type>()
595585
.value(0)
596586
);
597587
for i in 0..3 {
@@ -955,7 +945,15 @@ mod tests {
955945
.iter()
956946
.map(|x| x.map(|x| x.as_primitive::<Int32Type>().values().to_vec()))
957947
.collect();
958-
assert_eq!(values, vec![Some(vec![1, 2, 3]), None, Some(vec![4, 5, 6])])
948+
assert_eq!(values, vec![Some(vec![1, 2, 3]), None, Some(vec![4, 5, 6])]);
949+
let offsets = list.value_offsets();
950+
assert_eq!(offsets, &[0, 3, 6]);
951+
let sizes = list.value_sizes();
952+
assert_eq!(sizes, &[3, 3, 3]);
959953
}
960954

955+
956+
957+
958+
961959
}

0 commit comments

Comments
 (0)