alamb commented on code in PR #9189:
URL: https://github.com/apache/arrow-rs/pull/9189#discussion_r2694452879
##########
arrow-array/src/array/run_array.rs:
##########
@@ -223,27 +223,42 @@ impl<R: RunEndIndexType> RunArray<R> {
impl<R: RunEndIndexType> From<ArrayData> for RunArray<R> {
// The method assumes the caller already validated the data using
`ArrayData::validate_data()`
fn from(data: ArrayData) -> Self {
- match data.data_type() {
+ let (data_type, len, _nulls, offset, _buffers, child_data) =
data.into_parts();
+
+ match &data_type {
DataType::RunEndEncoded(_, _) => {}
_ => {
panic!(
- "Invalid data type for RunArray. The data type should be
DataType::RunEndEncoded"
+ "Invalid data type {data_type:?} for RunArray. Should be
DataType::RunEndEncoded"
);
}
}
- // Safety
- // ArrayData is valid
- let child = &data.child_data()[0];
- assert_eq!(child.data_type(), &R::DATA_TYPE, "Incorrect run ends
type");
- let run_ends = unsafe {
- let scalar = child.buffers()[0].clone().into();
- RunEndBuffer::new_unchecked(scalar, data.offset(), data.len())
- };
-
- let values = make_array(data.child_data()[1].clone());
+ assert_eq!(child_data.len(), 2, "RunArray should have two child
arrays");
+
+ let [run_end_child, values_child]: [ArrayData; 2] = child_data
+ .try_into()
+ .expect("RunArray data should have exactly two child arrays");
+
+ // deconstruct the run ends child array
Review Comment:
this is what the current code does too (reaches into the child array data
and gets the first buffer)
The current code also checks that there is exactly 1 buffer in the child
array
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]