This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new d7bba0ad2 Cleanup more uses of Array::data (#3880) (#4002)
d7bba0ad2 is described below
commit d7bba0ad26f4ef8b5a9bc142c78e84154f208e19
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Mon Apr 3 13:51:35 2023 +0100
Cleanup more uses of Array::data (#3880) (#4002)
* Cleanup more uses of Array::data (#3880)
* Fix failing test
* Fix parquet map array
* Further cleanup
* Further cleanup
* More cleanup
* Fix test
* Clippy
---
arrow-array/src/array/binary_array.rs | 4 +-
arrow-array/src/array/dictionary_array.rs | 16 +--
arrow-array/src/array/fixed_size_binary_array.rs | 2 +-
arrow-array/src/array/fixed_size_list_array.rs | 18 +--
arrow-array/src/array/list_array.rs | 12 +-
arrow-array/src/array/map_array.rs | 22 ++--
arrow-array/src/array/mod.rs | 4 +-
arrow-array/src/array/primitive_array.rs | 23 ++--
arrow-array/src/array/run_array.rs | 6 +-
arrow-array/src/array/string_array.rs | 4 +-
arrow-array/src/array/struct_array.rs | 10 +-
arrow-array/src/array/union_array.rs | 2 +-
arrow-array/src/builder/generic_list_builder.rs | 56 ++++-----
arrow-array/src/builder/struct_builder.rs | 11 +-
arrow-cast/src/cast.rs | 8 +-
arrow-ipc/src/reader.rs | 10 +-
arrow-json/src/reader.rs | 44 ++------
arrow-json/src/writer.rs | 4 +-
arrow-ord/src/comparison.rs | 7 +-
arrow-ord/src/ord.rs | 45 ++++----
arrow-row/src/lib.rs | 25 ++---
arrow-row/src/list.rs | 2 +-
arrow-select/src/filter.rs | 46 +++-----
arrow-select/src/nullif.rs | 12 +-
arrow-select/src/take.rs | 2 +-
arrow-string/src/like.rs | 2 +-
arrow/benches/array_data_validate.rs | 6 +-
arrow/src/array/ffi.rs | 44 ++++----
arrow/src/compute/kernels/limit.rs | 4 +-
arrow/src/ffi.rs | 4 +-
arrow/src/util/data_gen.rs | 4 +-
arrow/tests/array_equal.rs | 10 +-
arrow/tests/array_transform.rs | 125 +++++++++++----------
arrow/tests/array_validation.rs | 10 +-
.../arrow/array_reader/byte_array_dictionary.rs | 5 +-
parquet/src/arrow/array_reader/list_array.rs | 10 +-
parquet/src/arrow/array_reader/map_array.rs | 2 +-
parquet/src/arrow/array_reader/struct_array.rs | 4 +-
parquet/src/arrow/arrow_reader/mod.rs | 6 +-
parquet/src/arrow/arrow_writer/levels.rs | 57 +++++-----
parquet/src/arrow/arrow_writer/mod.rs | 76 ++++++-------
parquet/src/arrow/buffer/dictionary_buffer.rs | 3 +-
42 files changed, 352 insertions(+), 415 deletions(-)
diff --git a/arrow-array/src/array/binary_array.rs
b/arrow-array/src/array/binary_array.rs
index ccce3cda9..be861474f 100644
--- a/arrow-array/src/array/binary_array.rs
+++ b/arrow-array/src/array/binary_array.rs
@@ -683,7 +683,7 @@ mod tests {
let data = vec![None];
let array = BinaryArray::from(data);
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
@@ -693,7 +693,7 @@ mod tests {
let data = vec![None];
let array = LargeBinaryArray::from(data);
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
diff --git a/arrow-array/src/array/dictionary_array.rs
b/arrow-array/src/array/dictionary_array.rs
index 343fed768..dd6213d54 100644
--- a/arrow-array/src/array/dictionary_array.rs
+++ b/arrow-array/src/array/dictionary_array.rs
@@ -252,11 +252,11 @@ impl<K: ArrowDictionaryKeyType> DictionaryArray<K> {
// Note: This use the ArrayDataBuilder::build_unchecked and afterwards
// call the new function which only validates that the keys are in
bounds.
- let data = keys.data().clone();
+ let data = keys.to_data();
let builder = data
.into_builder()
.data_type(dict_data_type)
- .add_child_data(values.data().clone());
+ .add_child_data(values.to_data());
// Safety: `validate` ensures key type is correct, and
// `validate_values` ensures all offsets are within range
@@ -397,7 +397,7 @@ impl<K: ArrowDictionaryKeyType> DictionaryArray<K> {
Box::new(K::DATA_TYPE),
Box::new(values.data_type().clone()),
))
- .child_data(vec![values.data().clone()]);
+ .child_data(vec![values.to_data()]);
// SAFETY:
// Offsets were valid before and verified length is greater than or
equal
@@ -789,7 +789,7 @@ mod tests {
let dict_array = Int16DictionaryArray::from(dict_data);
let values = dict_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int8, dict_array.value_type());
assert_eq!(3, dict_array.len());
@@ -809,7 +809,7 @@ mod tests {
let dict_array = Int16DictionaryArray::from(dict_data);
let values = dict_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int8, dict_array.value_type());
assert_eq!(2, dict_array.len());
assert_eq!(dict_array.keys(), &Int16Array::from(vec![3_i16, 4]));
@@ -911,7 +911,7 @@ mod tests {
let test = vec![None, None, None];
let array: DictionaryArray<Int32Type> = test.into_iter().collect();
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
@@ -987,7 +987,7 @@ mod tests {
assert_eq!(array.keys().data_type(), &DataType::Int32);
assert_eq!(array.values().data_type(), &DataType::Utf8);
- assert_eq!(array.data().null_count(), 1);
+ assert_eq!(array.null_count(), 1);
assert!(array.keys().is_valid(0));
assert!(array.keys().is_valid(1));
@@ -1076,7 +1076,7 @@ mod tests {
let boxed: ArrayRef = Arc::new(dict_array);
let col: DictionaryArray<Int8Type> =
- DictionaryArray::<Int8Type>::from(boxed.data().clone());
+ DictionaryArray::<Int8Type>::from(boxed.to_data());
let err = col.into_primitive_dict_builder::<Int32Type>();
let returned = err.unwrap_err();
diff --git a/arrow-array/src/array/fixed_size_binary_array.rs
b/arrow-array/src/array/fixed_size_binary_array.rs
index fa303b4a8..f8d2f04de 100644
--- a/arrow-array/src/array/fixed_size_binary_array.rs
+++ b/arrow-array/src/array/fixed_size_binary_array.rs
@@ -792,7 +792,7 @@ mod tests {
FixedSizeBinaryArray::try_from_sparse_iter_with_size(data.into_iter(), 0)
.unwrap();
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
diff --git a/arrow-array/src/array/fixed_size_list_array.rs
b/arrow-array/src/array/fixed_size_list_array.rs
index 4a592d869..a56bb017f 100644
--- a/arrow-array/src/array/fixed_size_list_array.rs
+++ b/arrow-array/src/array/fixed_size_list_array.rs
@@ -256,6 +256,8 @@ impl std::fmt::Debug for FixedSizeListArray {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::cast::AsArray;
+ use crate::types::Int32Type;
use crate::Int32Array;
use arrow_buffer::{bit_util, Buffer};
use arrow_schema::Field;
@@ -281,7 +283,7 @@ mod tests {
.unwrap();
let list_array = FixedSizeListArray::from(list_data);
- assert_eq!(&value_data, list_array.values().data());
+ assert_eq!(value_data, list_array.values().to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(3, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -310,19 +312,11 @@ mod tests {
.unwrap();
let list_array = FixedSizeListArray::from(list_data);
- assert_eq!(&value_data, list_array.values().data());
+ assert_eq!(value_data, list_array.values().to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(3, list_array.len());
assert_eq!(0, list_array.null_count());
- assert_eq!(
- 3,
- list_array
- .value(0)
- .as_any()
- .downcast_ref::<Int32Array>()
- .unwrap()
- .value(0)
- );
+ assert_eq!(3,
list_array.value(0).as_primitive::<Int32Type>().value(0));
assert_eq!(6, list_array.value_offset(1));
assert_eq!(3, list_array.value_length());
}
@@ -386,7 +380,7 @@ mod tests {
.unwrap();
let list_array = FixedSizeListArray::from(list_data);
- assert_eq!(&value_data, list_array.values().data());
+ assert_eq!(value_data, list_array.values().to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(5, list_array.len());
assert_eq!(2, list_array.null_count());
diff --git a/arrow-array/src/array/list_array.rs
b/arrow-array/src/array/list_array.rs
index 8b314596d..fb94fe12c 100644
--- a/arrow-array/src/array/list_array.rs
+++ b/arrow-array/src/array/list_array.rs
@@ -442,7 +442,7 @@ mod tests {
let list_array = ListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(3, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -482,7 +482,7 @@ mod tests {
let list_array = ListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(2, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -532,7 +532,7 @@ mod tests {
let list_array = LargeListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(3, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -572,7 +572,7 @@ mod tests {
let list_array = LargeListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(2, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -630,7 +630,7 @@ mod tests {
let list_array = ListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(9, list_array.len());
assert_eq!(4, list_array.null_count());
@@ -694,7 +694,7 @@ mod tests {
let list_array = LargeListArray::from(list_data);
let values = list_array.values();
- assert_eq!(&value_data, values.data());
+ assert_eq!(value_data, values.to_data());
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(9, list_array.len());
assert_eq!(4, list_array.null_count());
diff --git a/arrow-array/src/array/map_array.rs
b/arrow-array/src/array/map_array.rs
index 3d78387cd..22ebbe533 100644
--- a/arrow-array/src/array/map_array.rs
+++ b/arrow-array/src/array/map_array.rs
@@ -52,6 +52,11 @@ impl MapArray {
&self.values
}
+ /// Returns a reference to the [`StructArray`] entries of this map
+ pub fn entries(&self) -> &ArrayRef {
+ &self.entries
+ }
+
/// Returns the data type of the map's keys.
pub fn key_type(&self) -> &DataType {
self.keys.data_type()
@@ -189,7 +194,7 @@ impl MapArray {
let entry_struct = StructArray::from(vec![
(keys_field, Arc::new(keys_data) as ArrayRef),
- (values_field, make_array(values.data().clone())),
+ (values_field, make_array(values.to_data())),
]);
let map_data_type = DataType::Map(
@@ -369,7 +374,7 @@ mod tests {
.unwrap();
let map_array = MapArray::from(map_data);
- assert_eq!(&value_data, map_array.values().data());
+ assert_eq!(value_data, map_array.values().to_data());
assert_eq!(&DataType::UInt32, map_array.value_type());
assert_eq!(3, map_array.len());
assert_eq!(0, map_array.null_count());
@@ -400,16 +405,9 @@ mod tests {
}
// Now test with a non-zero offset
- let map_data = ArrayData::builder(map_array.data_type().clone())
- .len(2)
- .offset(1)
- .add_buffer(map_array.data().buffers()[0].clone())
- .add_child_data(map_array.data().child_data()[0].clone())
- .build()
- .unwrap();
- let map_array = MapArray::from(map_data);
+ let map_array = map_array.slice(1, 2);
- assert_eq!(&value_data, map_array.values().data());
+ assert_eq!(value_data, map_array.values().to_data());
assert_eq!(&DataType::UInt32, map_array.value_type());
assert_eq!(2, map_array.len());
assert_eq!(0, map_array.null_count());
@@ -446,7 +444,7 @@ mod tests {
let sliced_array = map_array.slice(1, 2);
assert_eq!(2, sliced_array.len());
assert_eq!(1, sliced_array.offset());
- let sliced_array_data = sliced_array.data();
+ let sliced_array_data = sliced_array.to_data();
for array_data in sliced_array_data.child_data() {
assert_eq!(array_data.offset(), 1);
}
diff --git a/arrow-array/src/array/mod.rs b/arrow-array/src/array/mod.rs
index 589cf1eaf..41d5c8beb 100644
--- a/arrow-array/src/array/mod.rs
+++ b/arrow-array/src/array/mod.rs
@@ -290,7 +290,7 @@ impl Array for ArrayRef {
}
fn into_data(self) -> ArrayData {
- self.data().clone()
+ self.to_data()
}
#[allow(deprecated)]
@@ -357,7 +357,7 @@ impl<'a, T: Array> Array for &'a T {
}
fn into_data(self) -> ArrayData {
- self.data().clone()
+ self.to_data()
}
#[allow(deprecated)]
diff --git a/arrow-array/src/array/primitive_array.rs
b/arrow-array/src/array/primitive_array.rs
index f857e26c7..5dfcb4da4 100644
--- a/arrow-array/src/array/primitive_array.rs
+++ b/arrow-array/src/array/primitive_array.rs
@@ -466,9 +466,7 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {
O: ArrowPrimitiveType,
F: Fn(T::Native) -> O::Native,
{
- let data = self.data();
-
- let nulls = data.nulls().cloned();
+ let nulls = self.nulls().cloned();
let values = self.values().iter().map(|v| op(*v));
// JUSTIFICATION
// Benefit
@@ -593,9 +591,8 @@ impl<T: ArrowPrimitiveType> PrimitiveArray<T> {
O: ArrowPrimitiveType,
F: Fn(T::Native) -> Option<O::Native>,
{
- let data = self.data();
- let len = data.len();
- let (nulls, null_count, offset) = match data.nulls() {
+ let len = self.len();
+ let (nulls, null_count, offset) = match self.nulls() {
Some(n) => (Some(n.validity()), n.null_count(), n.offset()),
None => (None, 0, 0),
};
@@ -1185,7 +1182,7 @@ impl<T: DecimalType + ArrowPrimitiveType>
PrimitiveArray<T> {
pub fn precision(&self) -> u8 {
match T::BYTE_LENGTH {
16 => {
- if let DataType::Decimal128(p, _) = self.data().data_type() {
+ if let DataType::Decimal128(p, _) = self.data_type() {
*p
} else {
unreachable!(
@@ -1195,7 +1192,7 @@ impl<T: DecimalType + ArrowPrimitiveType>
PrimitiveArray<T> {
}
}
32 => {
- if let DataType::Decimal256(p, _) = self.data().data_type() {
+ if let DataType::Decimal256(p, _) = self.data_type() {
*p
} else {
unreachable!(
@@ -1212,7 +1209,7 @@ impl<T: DecimalType + ArrowPrimitiveType>
PrimitiveArray<T> {
pub fn scale(&self) -> i8 {
match T::BYTE_LENGTH {
16 => {
- if let DataType::Decimal128(_, s) = self.data().data_type() {
+ if let DataType::Decimal128(_, s) = self.data_type() {
*s
} else {
unreachable!(
@@ -1222,7 +1219,7 @@ impl<T: DecimalType + ArrowPrimitiveType>
PrimitiveArray<T> {
}
}
32 => {
- if let DataType::Decimal256(_, s) = self.data().data_type() {
+ if let DataType::Decimal256(_, s) = self.data_type() {
*s
} else {
unreachable!(
@@ -1874,7 +1871,7 @@ mod tests {
let array = PrimitiveArray::<Decimal128Type>::from(values.clone());
assert_eq!(array.values(), &values);
- let array =
PrimitiveArray::<Decimal128Type>::from(array.data().clone());
+ let array = PrimitiveArray::<Decimal128Type>::from(array.to_data());
assert_eq!(array.values(), &values);
}
@@ -1894,7 +1891,7 @@ mod tests {
let array = PrimitiveArray::<Decimal256Type>::from(values.clone());
assert_eq!(array.values(), &values);
- let array =
PrimitiveArray::<Decimal256Type>::from(array.data().clone());
+ let array = PrimitiveArray::<Decimal256Type>::from(array.to_data());
assert_eq!(array.values(), &values);
}
@@ -2190,7 +2187,7 @@ mod tests {
let boxed: ArrayRef = Arc::new(array);
- let col: Int32Array =
PrimitiveArray::<Int32Type>::from(boxed.data().clone());
+ let col: Int32Array =
PrimitiveArray::<Int32Type>::from(boxed.to_data());
let err = col.into_builder();
match err {
diff --git a/arrow-array/src/array/run_array.rs
b/arrow-array/src/array/run_array.rs
index ada34b47f..0754913e9 100644
--- a/arrow-array/src/array/run_array.rs
+++ b/arrow-array/src/array/run_array.rs
@@ -104,8 +104,8 @@ impl<R: RunEndIndexType> RunArray<R> {
let len = RunArray::logical_len(run_ends);
let builder = ArrayDataBuilder::new(ree_array_type)
.len(len)
- .add_child_data(run_ends.data().clone())
- .add_child_data(values.data().clone());
+ .add_child_data(run_ends.to_data())
+ .add_child_data(values.to_data());
// `build_unchecked` is used to avoid recursive validation of child
arrays.
let array_data = unsafe { builder.build_unchecked() };
@@ -665,7 +665,7 @@ mod tests {
assert_eq!(ree_array.null_count(), 0);
let values = ree_array.values();
- assert_eq!(&value_data.into_data(), values.data());
+ assert_eq!(value_data.into_data(), values.to_data());
assert_eq!(&DataType::Int8, values.data_type());
let run_ends = ree_array.run_ends();
diff --git a/arrow-array/src/array/string_array.rs
b/arrow-array/src/array/string_array.rs
index 304f0ab3e..e042f29c2 100644
--- a/arrow-array/src/array/string_array.rs
+++ b/arrow-array/src/array/string_array.rs
@@ -456,7 +456,7 @@ mod tests {
let data: Vec<Option<&str>> = vec![None];
let array = StringArray::from(data);
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
@@ -466,7 +466,7 @@ mod tests {
let data: Vec<Option<&str>> = vec![None];
let array = LargeStringArray::from(data);
array
- .data()
+ .into_data()
.validate_full()
.expect("All null array has valid array data");
}
diff --git a/arrow-array/src/array/struct_array.rs
b/arrow-array/src/array/struct_array.rs
index e31594d4b..27e10a31f 100644
--- a/arrow-array/src/array/struct_array.rs
+++ b/arrow-array/src/array/struct_array.rs
@@ -464,7 +464,7 @@ mod tests {
StructArray::try_from(vec![("f1", strings.clone()), ("f2",
ints.clone())])
.unwrap();
- let struct_data = arr.data();
+ let struct_data = arr.into_data();
assert_eq!(4, struct_data.len());
assert_eq!(1, struct_data.null_count());
assert_eq!(
@@ -488,8 +488,8 @@ mod tests {
.build()
.unwrap();
- assert_eq!(expected_string_data, *arr.column(0).data());
- assert_eq!(expected_int_data, *arr.column(1).data());
+ assert_eq!(expected_string_data, struct_data.child_data()[0]);
+ assert_eq!(expected_int_data, struct_data.child_data()[1]);
}
#[test]
@@ -579,8 +579,8 @@ mod tests {
assert!(struct_array.is_valid(2));
assert!(struct_array.is_null(3));
assert!(struct_array.is_valid(4));
- assert_eq!(&boolean_data, struct_array.column(0).data());
- assert_eq!(&int_data, struct_array.column(1).data());
+ assert_eq!(boolean_data, struct_array.column(0).to_data());
+ assert_eq!(int_data, struct_array.column(1).to_data());
let c0 = struct_array.column(0);
let c0 = c0.as_any().downcast_ref::<BooleanArray>().unwrap();
diff --git a/arrow-array/src/array/union_array.rs
b/arrow-array/src/array/union_array.rs
index 67848b4a8..7b818f313 100644
--- a/arrow-array/src/array/union_array.rs
+++ b/arrow-array/src/array/union_array.rs
@@ -219,7 +219,7 @@ impl UnionArray {
let new_self = unsafe {
Self::new_unchecked(field_type_ids, type_ids, value_offsets,
child_arrays)
};
- new_self.data().validate()?;
+ new_self.to_data().validate()?;
Ok(new_self)
}
diff --git a/arrow-array/src/builder/generic_list_builder.rs
b/arrow-array/src/builder/generic_list_builder.rs
index 5f726a5b1..b6d070798 100644
--- a/arrow-array/src/builder/generic_list_builder.rs
+++ b/arrow-array/src/builder/generic_list_builder.rs
@@ -17,7 +17,7 @@
use crate::builder::null_buffer_builder::NullBufferBuilder;
use crate::builder::{ArrayBuilder, BufferBuilder};
-use crate::{ArrayRef, GenericListArray, OffsetSizeTrait};
+use crate::{Array, ArrayRef, GenericListArray, OffsetSizeTrait};
use arrow_buffer::Buffer;
use arrow_data::ArrayData;
use arrow_schema::Field;
@@ -228,7 +228,7 @@ where
pub fn finish(&mut self) -> GenericListArray<OffsetSize> {
let len = self.len();
let values_arr = self.values_builder.finish();
- let values_data = values_arr.data();
+ let values_data = values_arr.to_data();
let offset_buffer = self.offsets_builder.finish();
let null_bit_buffer = self.null_buffer_builder.finish();
@@ -242,7 +242,7 @@ where
let array_data_builder = ArrayData::builder(data_type)
.len(len)
.add_buffer(offset_buffer)
- .add_child_data(values_data.clone())
+ .add_child_data(values_data)
.null_bit_buffer(null_bit_buffer);
let array_data = unsafe { array_data_builder.build_unchecked() };
@@ -254,7 +254,7 @@ where
pub fn finish_cloned(&self) -> GenericListArray<OffsetSize> {
let len = self.len();
let values_arr = self.values_builder.finish_cloned();
- let values_data = values_arr.data();
+ let values_data = values_arr.to_data();
let offset_buffer =
Buffer::from_slice_ref(self.offsets_builder.as_slice());
let null_bit_buffer = self
@@ -270,7 +270,7 @@ where
let array_data_builder = ArrayData::builder(data_type)
.len(len)
.add_buffer(offset_buffer)
- .add_child_data(values_data.clone())
+ .add_child_data(values_data)
.null_bit_buffer(null_bit_buffer);
let array_data = unsafe { array_data_builder.build_unchecked() };
@@ -311,7 +311,6 @@ mod tests {
use crate::cast::AsArray;
use crate::types::Int32Type;
use crate::{Array, Int32Array};
- use arrow_buffer::Buffer;
use arrow_schema::DataType;
fn _test_generic_list_array_builder<O: OffsetSizeTrait>() {
@@ -332,12 +331,9 @@ mod tests {
builder.append(true);
let list_array = builder.finish();
- let values = list_array.values().data().buffers()[0].clone();
- assert_eq!(Buffer::from_slice_ref([0, 1, 2, 3, 4, 5, 6, 7]), values);
- assert_eq!(
- Buffer::from_slice_ref([0, 3, 6, 8].map(|n|
O::from_usize(n).unwrap())),
- list_array.data().buffers()[0].clone()
- );
+ let list_values = list_array.values().as_primitive::<Int32Type>();
+ assert_eq!(list_values.values(), &[0, 1, 2, 3, 4, 5, 6, 7]);
+ assert_eq!(list_array.value_offsets(), [0, 3, 6, 8].map(O::usize_as));
assert_eq!(DataType::Int32, list_array.value_type());
assert_eq!(3, list_array.len());
assert_eq!(0, list_array.null_count());
@@ -469,28 +465,22 @@ mod tests {
builder.values().append(true);
builder.append(true);
- let list_array = builder.finish();
+ let l1 = builder.finish();
- assert_eq!(4, list_array.len());
- assert_eq!(1, list_array.null_count());
- assert_eq!(
- Buffer::from_slice_ref([0, 2, 5, 5, 6]),
- list_array.data().buffers()[0].clone()
- );
-
- assert_eq!(6, list_array.values().data().len());
- assert_eq!(1, list_array.values().data().null_count());
- assert_eq!(
- Buffer::from_slice_ref([0, 2, 4, 7, 7, 8, 10]),
- list_array.values().data().buffers()[0].clone()
- );
-
- assert_eq!(10, list_array.values().data().child_data()[0].len());
- assert_eq!(0, list_array.values().data().child_data()[0].null_count());
- assert_eq!(
- Buffer::from_slice_ref([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
- list_array.values().data().child_data()[0].buffers()[0].clone()
- );
+ assert_eq!(4, l1.len());
+ assert_eq!(1, l1.null_count());
+
+ assert_eq!(l1.value_offsets(), &[0, 2, 5, 5, 6]);
+ let l2 = l1.values().as_list::<i32>();
+
+ assert_eq!(6, l2.len());
+ assert_eq!(1, l2.null_count());
+ assert_eq!(l2.value_offsets(), &[0, 2, 4, 7, 7, 8, 10]);
+
+ let i1 = l2.values().as_primitive::<Int32Type>();
+ assert_eq!(10, i1.len());
+ assert_eq!(0, i1.null_count());
+ assert_eq!(i1.values(), &[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
}
#[test]
diff --git a/arrow-array/src/builder/struct_builder.rs
b/arrow-array/src/builder/struct_builder.rs
index 499ae183f..ebffeafcf 100644
--- a/arrow-array/src/builder/struct_builder.rs
+++ b/arrow-array/src/builder/struct_builder.rs
@@ -233,7 +233,7 @@ impl StructBuilder {
let mut child_data = Vec::with_capacity(self.field_builders.len());
for f in &mut self.field_builders {
let arr = f.finish();
- child_data.push(arr.data().clone());
+ child_data.push(arr.to_data());
}
let length = self.len();
let null_bit_buffer = self.null_buffer_builder.finish();
@@ -254,7 +254,7 @@ impl StructBuilder {
let mut child_data = Vec::with_capacity(self.field_builders.len());
for f in &self.field_builders {
let arr = f.finish_cloned();
- child_data.push(arr.data().clone());
+ child_data.push(arr.to_data());
}
let length = self.len();
let null_bit_buffer = self
@@ -330,9 +330,8 @@ mod tests {
builder.append_null();
builder.append(true);
- let arr = builder.finish();
+ let struct_data = builder.finish().into_data();
- let struct_data = arr.data();
assert_eq!(4, struct_data.len());
assert_eq!(1, struct_data.null_count());
assert_eq!(&[11_u8], struct_data.nulls().unwrap().validity());
@@ -352,8 +351,8 @@ mod tests {
.build()
.unwrap();
- assert_eq!(expected_string_data, *arr.column(0).data());
- assert_eq!(expected_int_data, *arr.column(1).data());
+ assert_eq!(expected_string_data, struct_data.child_data()[0]);
+ assert_eq!(expected_int_data, struct_data.child_data()[1]);
}
#[test]
diff --git a/arrow-cast/src/cast.rs b/arrow-cast/src/cast.rs
index 5d7bea0e9..0ea6332a7 100644
--- a/arrow-cast/src/cast.rs
+++ b/arrow-cast/src/cast.rs
@@ -634,7 +634,7 @@ pub fn cast_with_options(
let from_type = array.data_type();
// clone array if types are the same
if from_type == to_type {
- return Ok(make_array(array.data().clone()));
+ return Ok(make_array(array.to_data()));
}
match (from_type, to_type) {
(
@@ -3108,7 +3108,7 @@ fn dictionary_cast<K: ArrowDictionaryKeyType>(
})?;
let keys_array: ArrayRef =
-
Arc::new(PrimitiveArray::<K>::from(dict_array.keys().data().clone()));
+
Arc::new(PrimitiveArray::<K>::from(dict_array.keys().to_data()));
let values_array = dict_array.values();
let cast_keys = cast_with_options(&keys_array, to_index_type,
cast_options)?;
let cast_values =
@@ -3182,7 +3182,7 @@ where
// Note take requires first casting the indices to u32
let keys_array: ArrayRef =
- Arc::new(PrimitiveArray::<K>::from(dict_array.keys().data().clone()));
+ Arc::new(PrimitiveArray::<K>::from(dict_array.keys().to_data()));
let indices = cast_with_options(&keys_array, &DataType::UInt32,
cast_options)?;
let u32_indices =
indices
@@ -3379,7 +3379,7 @@ fn cast_list_inner<OffsetSize: OffsetSizeTrait>(
to_type: &DataType,
cast_options: &CastOptions,
) -> Result<ArrayRef, ArrowError> {
- let data = array.data().clone();
+ let data = array.to_data();
let underlying_array = make_array(data.child_data()[0].clone());
let cast_array =
cast_with_options(underlying_array.as_ref(), to.data_type(),
cast_options)?;
diff --git a/arrow-ipc/src/reader.rs b/arrow-ipc/src/reader.rs
index 60633487a..3d803b627 100644
--- a/arrow-ipc/src/reader.rs
+++ b/arrow-ipc/src/reader.rs
@@ -1608,7 +1608,7 @@ mod tests {
let union1 = rb.column(0);
let union2 = rb2.column(0);
- assert_eq!(union1.data().buffers(), union2.data().buffers());
+ assert_eq!(union1, union2);
}
#[test]
@@ -1762,14 +1762,14 @@ mod tests {
let values = StringArray::from(vec![Some("a"), None, Some("c"), None]);
let keys = Int8Array::from_iter_values([0, 0, 1, 2, 0, 1, 3]);
let dict_array = DictionaryArray::<Int8Type>::try_new(&keys,
&values).unwrap();
- let dict_data = dict_array.data();
+ let dict_data = dict_array.to_data();
let value_offsets = Buffer::from_slice_ref(offsets);
let list_data = ArrayData::builder(list_data_type)
.len(4)
.add_buffer(value_offsets)
- .add_child_data(dict_data.clone())
+ .add_child_data(dict_data)
.build()
.unwrap();
let list_array = GenericListArray::<OffsetSize>::from(list_data);
@@ -1825,7 +1825,7 @@ mod tests {
let values = StringArray::from(vec![Some("a"), None, Some("c"), None]);
let keys = Int8Array::from_iter_values([0, 0, 1, 2, 0, 1, 3, 1, 2]);
let dict_array = DictionaryArray::<Int8Type>::try_new(&keys,
&values).unwrap();
- let dict_data = dict_array.data();
+ let dict_data = dict_array.to_data();
let list_data_type = DataType::FixedSizeList(
Arc::new(Field::new_dict(
@@ -1839,7 +1839,7 @@ mod tests {
);
let list_data = ArrayData::builder(list_data_type)
.len(3)
- .add_child_data(dict_data.clone())
+ .add_child_data(dict_data)
.build()
.unwrap();
let list_array = FixedSizeListArray::from(list_data);
diff --git a/arrow-json/src/reader.rs b/arrow-json/src/reader.rs
index f5bf884fb..39f829052 100644
--- a/arrow-json/src/reader.rs
+++ b/arrow-json/src/reader.rs
@@ -2257,16 +2257,9 @@ mod tests {
assert_eq!(10, bb.len());
assert_eq!(4.0, bb.value(9));
- let cc = batch
- .column(c.0)
- .as_any()
- .downcast_ref::<ListArray>()
- .unwrap();
+ let cc = batch.column(c.0).as_list::<i32>();
// test that the list offsets are correct
- assert_eq!(
- *cc.data().buffers()[0],
- Buffer::from_slice_ref([0i32, 2, 2, 4, 5])
- );
+ assert_eq!(cc.value_offsets(), &[0, 2, 2, 4, 5]);
let cc = cc.values().as_boolean();
let cc_expected = BooleanArray::from(vec![
Some(false),
@@ -2275,18 +2268,11 @@ mod tests {
None,
Some(false),
]);
- assert_eq!(cc.data_ref(), cc_expected.data_ref());
+ assert_eq!(cc, &cc_expected);
- let dd: &ListArray = batch
- .column(d.0)
- .as_any()
- .downcast_ref::<ListArray>()
- .unwrap();
+ let dd = batch.column(d.0).as_list::<i32>();
// test that the list offsets are correct
- assert_eq!(
- *dd.data().buffers()[0],
- Buffer::from_slice_ref([0i32, 1, 1, 2, 6])
- );
+ assert_eq!(dd.value_offsets(), &[0, 1, 1, 2, 6]);
let dd = dd.values().as_string::<i32>();
// values are 6 because a `d: null` is treated as a null slot
@@ -2342,12 +2328,7 @@ mod tests {
// compare `a` with result from json reader
let batch = reader.next().unwrap().unwrap();
let read = batch.column(0);
- assert!(
- expected.data_ref() == read.data_ref(),
- "{:?} != {:?}",
- expected.data(),
- read.data(),
- );
+ assert_eq!(&expected, read);
}
#[test]
@@ -2425,12 +2406,9 @@ mod tests {
let read = batch.column(0);
assert_eq!(read.len(), 6);
// compare the arrays the long way around, to better detect differences
- let read: &ListArray =
read.as_any().downcast_ref::<ListArray>().unwrap();
- let expected = expected.as_any().downcast_ref::<ListArray>().unwrap();
- assert_eq!(
- *read.data().buffers()[0],
- Buffer::from_slice_ref([0i32, 2, 3, 6, 6, 6, 7])
- );
+ let read: &ListArray = read.as_list::<i32>();
+ let expected = expected.as_list::<i32>();
+ assert_eq!(read.value_offsets(), &[0, 2, 3, 6, 6, 6, 7]);
// compare list null buffers
assert_eq!(read.nulls(), expected.nulls());
// build struct from list
@@ -2525,10 +2503,10 @@ mod tests {
assert_eq!(batch.num_rows(), 3);
assert_eq!(batch.num_columns(), 2);
let col1 = batch.column(0);
- assert_eq!(col1.data(), expected_accounts.data());
+ assert_eq!(col1.as_ref(), &expected_accounts);
// Compare the map
let col2 = batch.column(1);
- assert_eq!(col2.data(), expected_stocks.data());
+ assert_eq!(col2.as_ref(), &expected_stocks);
}
#[test]
diff --git a/arrow-json/src/writer.rs b/arrow-json/src/writer.rs
index d66d32017..cf65e8a93 100644
--- a/arrow-json/src/writer.rs
+++ b/arrow-json/src/writer.rs
@@ -290,9 +290,9 @@ fn set_column_for_json_rows(
| DataType::Duration(_) => {
let options = FormatOptions::default();
let formatter = ArrayFormatter::try_new(array.as_ref(), &options)?;
- let data = array.data();
+ let nulls = array.nulls();
rows.iter_mut().enumerate().for_each(|(idx, row)| {
- if data.is_valid(idx) {
+ if nulls.map(|x| x.is_valid(idx)).unwrap_or(true) {
row.insert(
col_name.to_string(),
formatter.value(idx).to_string().into(),
diff --git a/arrow-ord/src/comparison.rs b/arrow-ord/src/comparison.rs
index e68e064c7..2927354da 100644
--- a/arrow-ord/src/comparison.rs
+++ b/arrow-ord/src/comparison.rs
@@ -1192,7 +1192,7 @@ where
{
// TODO: Use take_boolean (#2967)
let array = take(&dict_comparison, dict.keys(), None)?;
- Ok(BooleanArray::from(array.data().clone()))
+ Ok(BooleanArray::from(array.to_data()))
}
/// Helper function to perform boolean lambda function on values from two
arrays using
@@ -3382,10 +3382,7 @@ mod tests {
let array_b: PrimitiveArray<Int8Type> = vec![2; item_count].into();
let result_mask = gt_eq(&array_a, &array_b).unwrap();
- assert_eq!(
- result_mask.data().buffers()[0].len(),
- select_mask.data().buffers()[0].len()
- );
+ assert_eq!(result_mask.values().len(), select_mask.values().len());
}
// Expected behaviour:
diff --git a/arrow-ord/src/ord.rs b/arrow-ord/src/ord.rs
index db1fff6d3..bfe74d9e3 100644
--- a/arrow-ord/src/ord.rs
+++ b/arrow-ord/src/ord.rs
@@ -17,6 +17,7 @@
//! Contains functions and function factories to compare arrays.
+use arrow_array::cast::AsArray;
use arrow_array::types::*;
use arrow_array::*;
use arrow_buffer::ArrowNativeType;
@@ -33,21 +34,21 @@ fn compare_primitives<T: ArrowPrimitiveType>(
where
T::Native: ArrowNativeTypeOp,
{
- let left: PrimitiveArray<T> = PrimitiveArray::from(left.data().clone());
- let right: PrimitiveArray<T> = PrimitiveArray::from(right.data().clone());
+ let left: PrimitiveArray<T> = PrimitiveArray::from(left.to_data());
+ let right: PrimitiveArray<T> = PrimitiveArray::from(right.to_data());
Box::new(move |i, j| left.value(i).compare(right.value(j)))
}
fn compare_boolean(left: &dyn Array, right: &dyn Array) -> DynComparator {
- let left: BooleanArray = BooleanArray::from(left.data().clone());
- let right: BooleanArray = BooleanArray::from(right.data().clone());
+ let left: BooleanArray = BooleanArray::from(left.to_data());
+ let right: BooleanArray = BooleanArray::from(right.to_data());
Box::new(move |i, j| left.value(i).cmp(&right.value(j)))
}
fn compare_string(left: &dyn Array, right: &dyn Array) -> DynComparator {
- let left: StringArray = StringArray::from(left.data().clone());
- let right: StringArray = StringArray::from(right.data().clone());
+ let left: StringArray = StringArray::from(left.to_data());
+ let right: StringArray = StringArray::from(right.to_data());
Box::new(move |i, j| left.value(i).cmp(right.value(j)))
}
@@ -58,15 +59,13 @@ where
V: ArrowPrimitiveType,
V::Native: ArrowNativeTypeOp,
{
- let left = left.as_any().downcast_ref::<DictionaryArray<K>>().unwrap();
- let right = right.as_any().downcast_ref::<DictionaryArray<K>>().unwrap();
+ let left = left.as_dictionary::<K>();
+ let right = right.as_dictionary::<K>();
- let left_keys: PrimitiveArray<K> =
PrimitiveArray::from(left.keys().data().clone());
- let right_keys: PrimitiveArray<K> =
PrimitiveArray::from(right.keys().data().clone());
- let left_values: PrimitiveArray<V> =
- PrimitiveArray::from(left.values().data().clone());
- let right_values: PrimitiveArray<V> =
- PrimitiveArray::from(right.values().data().clone());
+ let left_keys: PrimitiveArray<K> =
PrimitiveArray::from(left.keys().to_data());
+ let right_keys: PrimitiveArray<K> =
PrimitiveArray::from(right.keys().to_data());
+ let left_values: PrimitiveArray<V> = left.values().to_data().into();
+ let right_values: PrimitiveArray<V> = right.values().to_data().into();
Box::new(move |i: usize, j: usize| {
let key_left = left_keys.value(i).as_usize();
@@ -81,13 +80,13 @@ fn compare_dict_string<T>(left: &dyn Array, right: &dyn
Array) -> DynComparator
where
T: ArrowDictionaryKeyType,
{
- let left = left.as_any().downcast_ref::<DictionaryArray<T>>().unwrap();
- let right = right.as_any().downcast_ref::<DictionaryArray<T>>().unwrap();
+ let left = left.as_dictionary::<T>();
+ let right = right.as_dictionary::<T>();
- let left_keys: PrimitiveArray<T> =
PrimitiveArray::from(left.keys().data().clone());
- let right_keys: PrimitiveArray<T> =
PrimitiveArray::from(right.keys().data().clone());
- let left_values = StringArray::from(left.values().data().clone());
- let right_values = StringArray::from(right.values().data().clone());
+ let left_keys: PrimitiveArray<T> =
PrimitiveArray::from(left.keys().to_data());
+ let right_keys: PrimitiveArray<T> =
PrimitiveArray::from(right.keys().to_data());
+ let left_values = StringArray::from(left.values().to_data());
+ let right_values = StringArray::from(right.values().to_data());
Box::new(move |i: usize, j: usize| {
let key_left = left_keys.value(i).as_usize();
@@ -264,10 +263,8 @@ pub fn build_compare(
}
}
(FixedSizeBinary(_), FixedSizeBinary(_)) => {
- let left: FixedSizeBinaryArray =
- FixedSizeBinaryArray::from(left.data().clone());
- let right: FixedSizeBinaryArray =
- FixedSizeBinaryArray::from(right.data().clone());
+ let left: FixedSizeBinaryArray = left.to_data().into();
+ let right: FixedSizeBinaryArray = right.to_data().into();
Box::new(move |i, j| left.value(i).cmp(right.value(j)))
}
diff --git a/arrow-row/src/lib.rs b/arrow-row/src/lib.rs
index 56b3ec2b3..9cc7b4f30 100644
--- a/arrow-row/src/lib.rs
+++ b/arrow-row/src/lib.rs
@@ -1651,9 +1651,9 @@ mod tests {
DataType::Dictionary(_, v) if !exact => {
assert_eq!(a.data_type(), v.as_ref());
let b = arrow_cast::cast(b, v).unwrap();
- assert_eq!(a.data(), b.data())
+ assert_eq!(a, b.as_ref())
}
- _ => assert_eq!(a.data(), b.data()),
+ _ => assert_eq!(a, b),
}
}
@@ -1767,8 +1767,7 @@ mod tests {
// Test struct nullability
let data = s1
- .data()
- .clone()
+ .to_data()
.into_builder()
.null_bit_buffer(Some(Buffer::from_slice_ref([0b00001010])))
.null_count(2)
@@ -1786,7 +1785,7 @@ mod tests {
assert_eq!(back.len(), 1);
assert_eq!(&back[0], &s2);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
}
#[test]
@@ -1910,7 +1909,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
let options = SortOptions {
@@ -1930,7 +1929,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
let options = SortOptions {
@@ -1950,7 +1949,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
let options = SortOptions {
@@ -1970,7 +1969,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
}
@@ -2033,7 +2032,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
let options = SortOptions {
@@ -2052,7 +2051,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
let options = SortOptions {
@@ -2071,7 +2070,7 @@ mod tests {
let back = converter.convert_rows(&rows).unwrap();
assert_eq!(back.len(), 1);
- back[0].data().validate_full().unwrap();
+ back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
}
@@ -2171,7 +2170,7 @@ mod tests {
.into_data()
.into_builder()
.data_type(data_type)
- .add_child_data(values.data().clone())
+ .add_child_data(values.to_data())
.build()
.unwrap();
diff --git a/arrow-row/src/list.rs b/arrow-row/src/list.rs
index e232e717c..e4ff878dd 100644
--- a/arrow-row/src/list.rs
+++ b/arrow-row/src/list.rs
@@ -164,7 +164,7 @@ pub unsafe fn decode<O: OffsetSizeTrait>(
let child = converter.convert_raw(&mut child_rows, validate_utf8)?;
assert_eq!(child.len(), 1);
- let child_data = child[0].data().clone();
+ let child_data = child[0].to_data();
let builder = ArrayDataBuilder::new(field.data_type.clone())
.len(rows.len())
diff --git a/arrow-select/src/filter.rs b/arrow-select/src/filter.rs
index 1cab72b6d..ba8fc4a2c 100644
--- a/arrow-select/src/filter.rs
+++ b/arrow-select/src/filter.rs
@@ -23,7 +23,7 @@ use arrow_array::builder::BooleanBufferBuilder;
use arrow_array::cast::AsArray;
use arrow_array::types::{ArrowDictionaryKeyType, ByteArrayType};
use arrow_array::*;
-use arrow_buffer::bit_util;
+use arrow_buffer::{bit_util, BooleanBuffer, NullBuffer};
use arrow_buffer::{Buffer, MutableBuffer};
use arrow_data::bit_iterator::{BitIndexIterator, BitSliceIterator};
use arrow_data::transform::MutableArrayData;
@@ -317,7 +317,7 @@ fn filter_array(
match predicate.strategy {
IterationStrategy::None => Ok(new_empty_array(values.data_type())),
- IterationStrategy::All => Ok(make_array(values.data().slice(0,
predicate.count))),
+ IterationStrategy::All => Ok(values.slice(0, predicate.count)),
// actually filter
_ => downcast_primitive_array! {
values => Ok(Arc::new(filter_primitive(values, predicate))),
@@ -386,15 +386,15 @@ fn filter_array(
/// in the filtered output, and `null_buffer` is the filtered null buffer
///
fn filter_null_mask(
- data: &ArrayData,
+ nulls: Option<&NullBuffer>,
predicate: &FilterPredicate,
) -> Option<(usize, Buffer)> {
- if data.null_count() == 0 {
+ let nulls = nulls?;
+ if nulls.null_count() == 0 {
return None;
}
- let nulls = data.nulls()?;
- let nulls = filter_bits(nulls.buffer(), nulls.offset(), predicate);
+ let nulls = filter_bits(nulls.inner(), predicate);
// The filtered `nulls` has a length of `predicate.count` bits and
// therefore the null count is this minus the number of valid bits
let null_count = predicate.count - nulls.count_set_bits_offset(0,
predicate.count);
@@ -407,8 +407,9 @@ fn filter_null_mask(
}
/// Filter the packed bitmask `buffer`, with `predicate` starting at bit
offset `offset`
-fn filter_bits(buffer: &Buffer, offset: usize, predicate: &FilterPredicate) ->
Buffer {
- let src = buffer.as_slice();
+fn filter_bits(buffer: &BooleanBuffer, predicate: &FilterPredicate) -> Buffer {
+ let src = buffer.values();
+ let offset = buffer.offset();
match &predicate.strategy {
IterationStrategy::IndexIterator => {
@@ -447,18 +448,14 @@ fn filter_bits(buffer: &Buffer, offset: usize, predicate:
&FilterPredicate) -> B
}
/// `filter` implementation for boolean buffers
-fn filter_boolean(values: &BooleanArray, predicate: &FilterPredicate) ->
BooleanArray {
- let data = values.data();
- assert_eq!(data.buffers().len(), 1);
- assert_eq!(data.child_data().len(), 0);
-
- let values = filter_bits(data.buffers()[0], data.offset(), predicate);
+fn filter_boolean(array: &BooleanArray, predicate: &FilterPredicate) ->
BooleanArray {
+ let values = filter_bits(array.values(), predicate);
let mut builder = ArrayDataBuilder::new(DataType::Boolean)
.len(predicate.count)
.add_buffer(values);
- if let Some((null_count, nulls)) = filter_null_mask(data, predicate) {
+ if let Some((null_count, nulls)) = filter_null_mask(array.nulls(),
predicate) {
builder = builder.null_count(null_count).null_bit_buffer(Some(nulls));
}
@@ -468,17 +465,13 @@ fn filter_boolean(values: &BooleanArray, predicate:
&FilterPredicate) -> Boolean
/// `filter` implementation for primitive arrays
fn filter_primitive<T>(
- values: &PrimitiveArray<T>,
+ array: &PrimitiveArray<T>,
predicate: &FilterPredicate,
) -> PrimitiveArray<T>
where
T: ArrowPrimitiveType,
{
- let data = values.data();
- assert_eq!(data.buffers().len(), 1);
- assert_eq!(data.child_data().len(), 0);
-
- let values = data.buffer::<T::Native>(0);
+ let values = array.values();
assert!(values.len() >= predicate.filter.len());
let buffer = match &predicate.strategy {
@@ -514,11 +507,11 @@ where
IterationStrategy::All | IterationStrategy::None => unreachable!(),
};
- let mut builder = ArrayDataBuilder::new(data.data_type().clone())
+ let mut builder = ArrayDataBuilder::new(array.data_type().clone())
.len(predicate.count)
.add_buffer(buffer.into());
- if let Some((null_count, nulls)) = filter_null_mask(data, predicate) {
+ if let Some((null_count, nulls)) = filter_null_mask(array.nulls(),
predicate) {
builder = builder.null_count(null_count).null_bit_buffer(Some(nulls));
}
@@ -554,7 +547,7 @@ where
Self {
src_offsets: array.value_offsets(),
- src_values: array.data().buffers()[1],
+ src_values: array.value_data(),
dst_offsets,
dst_values,
cur_offset,
@@ -617,9 +610,6 @@ fn filter_bytes<T>(
where
T: ByteArrayType,
{
- let data = array.data();
- assert_eq!(data.buffers().len(), 2);
- assert_eq!(data.child_data().len(), 0);
let mut filter = FilterBytes::new(predicate.count, array);
match &predicate.strategy {
@@ -639,7 +629,7 @@ where
.add_buffer(filter.dst_offsets.into())
.add_buffer(filter.dst_values.into());
- if let Some((null_count, nulls)) = filter_null_mask(data, predicate) {
+ if let Some((null_count, nulls)) = filter_null_mask(array.nulls(),
predicate) {
builder = builder.null_count(null_count).null_bit_buffer(Some(nulls));
}
diff --git a/arrow-select/src/nullif.rs b/arrow-select/src/nullif.rs
index 0895b99c7..6039d53ea 100644
--- a/arrow-select/src/nullif.rs
+++ b/arrow-select/src/nullif.rs
@@ -27,8 +27,8 @@ use arrow_schema::ArrowError;
///
/// Typically used to implement NULLIF.
pub fn nullif(left: &dyn Array, right: &BooleanArray) -> Result<ArrayRef,
ArrowError> {
- let left_data = left.data();
- let right_data = right.data();
+ let left_data = left.to_data();
+ let right_data = right.to_data();
if left_data.len() != right_data.len() {
return Err(ArrowError::ComputeError(
@@ -40,7 +40,7 @@ pub fn nullif(left: &dyn Array, right: &BooleanArray) ->
Result<ArrayRef, ArrowE
let l_offset = left_data.offset();
if len == 0 {
- return Ok(make_array(left_data.clone()));
+ return Ok(make_array(left_data));
}
// left=0 (null) right=null output bitmap=null
@@ -110,7 +110,6 @@ pub fn nullif(left: &dyn Array, right: &BooleanArray) ->
Result<ArrayRef, ArrowE
};
let data = left_data
- .clone()
.into_builder()
.null_bit_buffer(Some(null_buffer))
.null_count(null_count);
@@ -481,9 +480,10 @@ mod tests {
.collect();
let r = nullif(values, filter).unwrap();
- r.data().validate().unwrap();
+ let r_data = r.to_data();
+ r_data.validate().unwrap();
- assert_eq!(expected.data(), r.data());
+ assert_eq!(r.as_ref(), &expected);
}
#[test]
diff --git a/arrow-select/src/take.rs b/arrow-select/src/take.rs
index 2befcd054..e2f3630bd 100644
--- a/arrow-select/src/take.rs
+++ b/arrow-select/src/take.rs
@@ -2086,7 +2086,7 @@ mod tests {
.downcast_ref::<DictionaryArray<Int16Type>>()
.unwrap();
- let result_values: StringArray = result.values().data().clone().into();
+ let result_values: StringArray = result.values().to_data().into();
// dictionary values should stay the same
let expected_values = StringArray::from(vec!["foo", "bar", ""]);
diff --git a/arrow-string/src/like.rs b/arrow-string/src/like.rs
index 7b6c7d50c..383ac5fd1 100644
--- a/arrow-string/src/like.rs
+++ b/arrow-string/src/like.rs
@@ -152,7 +152,7 @@ pub fn $fn_name(
let dict_comparison = $fn_name(left.values().as_ref(),
right)?;
// TODO: Use take_boolean (#2967)
let array = take(&dict_comparison, left.keys(), None)?;
- Ok(BooleanArray::from(array.data().clone()))
+ Ok(BooleanArray::from(array.to_data()))
}
t => Err(ArrowError::ComputeError(format!(
"Should be DictionaryArray but got: {}", t
diff --git a/arrow/benches/array_data_validate.rs
b/arrow/benches/array_data_validate.rs
index 68fc66a63..529205e7e 100644
--- a/arrow/benches/array_data_validate.rs
+++ b/arrow/benches/array_data_validate.rs
@@ -37,8 +37,8 @@ fn create_binary_array_data(length: i32) -> ArrayData {
.unwrap()
}
-fn validate_utf8_array(arr: &StringArray) {
- arr.data().validate_values().unwrap();
+fn validate_utf8_array(arr: &ArrayData) {
+ arr.validate_values().unwrap();
}
fn validate_benchmark(c: &mut Criterion) {
@@ -48,7 +48,7 @@ fn validate_benchmark(c: &mut Criterion) {
});
//Utf8 Array
- let str_arr = StringArray::from(vec!["test"; 20000]);
+ let str_arr = StringArray::from(vec!["test"; 20000]).to_data();
c.bench_function("validate_utf8_array_data 20000", |b| {
b.iter(|| validate_utf8_array(&str_arr))
});
diff --git a/arrow/src/array/ffi.rs b/arrow/src/array/ffi.rs
index 0249a70d1..d4c284ad2 100644
--- a/arrow/src/array/ffi.rs
+++ b/arrow/src/array/ffi.rs
@@ -57,8 +57,8 @@ pub unsafe fn export_array_into_raw(
out_array: *mut ffi::FFI_ArrowArray,
out_schema: *mut ffi::FFI_ArrowSchema,
) -> Result<()> {
- let data = src.data();
- let array = ffi::FFI_ArrowArray::new(data);
+ let data = src.to_data();
+ let array = ffi::FFI_ArrowArray::new(&data);
let schema = ffi::FFI_ArrowSchema::try_from(data.data_type())?;
std::ptr::write_unaligned(out_array, array);
@@ -101,22 +101,22 @@ mod tests {
#[test]
fn test_u32() -> Result<()> {
let array = UInt32Array::from(vec![Some(2), None, Some(1), None]);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
fn test_u64() -> Result<()> {
let array = UInt64Array::from(vec![Some(2), None, Some(1), None]);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
fn test_i64() -> Result<()> {
let array = Int64Array::from(vec![Some(2), None, Some(1), None]);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -148,8 +148,8 @@ mod tests {
Arc::new(UInt32Array::from(vec![42, 28, 19, 31])),
),
]);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -169,8 +169,8 @@ mod tests {
]);
let array = DictionaryArray::try_new(&keys, &values)?;
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -178,8 +178,8 @@ mod tests {
let values = vec![vec![10, 10, 10], vec![20, 20, 20], vec![30, 30,
30]];
let array = FixedSizeBinaryArray::try_from_iter(values.into_iter())?;
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -195,8 +195,8 @@ mod tests {
let array =
FixedSizeBinaryArray::try_from_sparse_iter_with_size(values.into_iter(), 3)?;
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -214,8 +214,8 @@ mod tests {
.build()?;
let array = FixedSizeListArray::from(list_data);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -240,8 +240,8 @@ mod tests {
.build()?;
let array = FixedSizeListArray::from(list_data);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
#[test]
@@ -278,7 +278,7 @@ mod tests {
let array = FixedSizeListArray::from(list_data);
- let data = array.data();
- test_round_trip(data)
+ let data = array.into_data();
+ test_round_trip(&data)
}
}
diff --git a/arrow/src/compute/kernels/limit.rs
b/arrow/src/compute/kernels/limit.rs
index 74cbd2096..097b8e949 100644
--- a/arrow/src/compute/kernels/limit.rs
+++ b/arrow/src/compute/kernels/limit.rs
@@ -172,8 +172,8 @@ mod tests {
assert_eq!(5, struct_array.len());
assert_eq!(1, struct_array.null_count());
- assert_eq!(&boolean_data, struct_array.column(0).data());
- assert_eq!(&int_data, struct_array.column(1).data());
+ assert_eq!(boolean_data, struct_array.column(0).to_data());
+ assert_eq!(int_data, struct_array.column(1).to_data());
let array: ArrayRef = Arc::new(struct_array);
diff --git a/arrow/src/ffi.rs b/arrow/src/ffi.rs
index 7b26cf7f2..0af1b1111 100644
--- a/arrow/src/ffi.rs
+++ b/arrow/src/ffi.rs
@@ -1104,7 +1104,7 @@ mod tests {
)]);
// export it
- let array = ArrowArray::try_from(struct_array.data().clone())?;
+ let array = ArrowArray::try_from(struct_array.to_data())?;
// (simulate consumer) import it
let data = ArrayData::try_from(array)?;
@@ -1128,7 +1128,7 @@ mod tests {
let union = builder.build().unwrap();
// export it
- let array = ArrowArray::try_from(union.data().clone())?;
+ let array = ArrowArray::try_from(union.to_data())?;
// (simulate consumer) import it
let data = ArrayData::try_from(array)?;
diff --git a/arrow/src/util/data_gen.rs b/arrow/src/util/data_gen.rs
index 0b0a06875..c1094b127 100644
--- a/arrow/src/util/data_gen.rs
+++ b/arrow/src/util/data_gen.rs
@@ -289,8 +289,8 @@ mod tests {
}
// Test that the list's child values are non-null
let b_array = batch.column(1);
- let list_array = b_array.as_any().downcast_ref::<ListArray>().unwrap();
- let child_array =
make_array(list_array.data().child_data()[0].clone());
+ let list_array = b_array.as_list::<i32>();
+ let child_array = list_array.values();
assert_eq!(child_array.null_count(), 0);
// There should be more values than the list, to show that it's a list
assert!(child_array.len() > list_array.len());
diff --git a/arrow/tests/array_equal.rs b/arrow/tests/array_equal.rs
index 37968ec6a..93296c3b0 100644
--- a/arrow/tests/array_equal.rs
+++ b/arrow/tests/array_equal.rs
@@ -372,7 +372,7 @@ fn test_empty_offsets_list_equal() {
))))
.len(0)
.add_buffer(Buffer::from(&empty_offsets))
- .add_child_data(values.data().clone())
+ .add_child_data(values.to_data())
.null_bit_buffer(Some(Buffer::from(&empty_offsets)))
.build()
.unwrap()
@@ -385,7 +385,7 @@ fn test_empty_offsets_list_equal() {
))))
.len(0)
.add_buffer(Buffer::from(&empty_offsets))
- .add_child_data(values.data().clone())
+ .add_child_data(values.to_data())
.null_bit_buffer(Some(Buffer::from(&empty_offsets)))
.build()
.unwrap()
@@ -400,11 +400,7 @@ fn test_empty_offsets_list_equal() {
))))
.len(0)
.add_buffer(Buffer::from(vec![0i32, 2, 3, 4, 6, 7, 8].to_byte_slice()))
- .add_child_data(
- Int32Array::from(vec![1, 2, -1, -2, 3, 4, -3, -4])
- .data()
- .clone(),
- )
+ .add_child_data(Int32Array::from(vec![1, 2, -1, -2, 3, 4, -3,
-4]).into_data())
.null_bit_buffer(Some(Buffer::from(vec![0b00001001])))
.build()
.unwrap()
diff --git a/arrow/tests/array_transform.rs b/arrow/tests/array_transform.rs
index 97869544d..30a8bad60 100644
--- a/arrow/tests/array_transform.rs
+++ b/arrow/tests/array_transform.rs
@@ -59,8 +59,8 @@ fn test_decimal() {
fn test_decimal_offset() {
let decimal_array =
create_decimal_array(vec![Some(1), Some(2), None, Some(3)], 10, 3);
- let decimal_array = decimal_array.slice(1, 3); // 2, null, 3
- let arrays = vec![decimal_array.data()];
+ let decimal_array = decimal_array.slice(1, 3).into_data(); // 2, null, 3
+ let arrays = vec![&decimal_array];
let mut a = MutableArrayData::new(arrays, true, 2);
a.extend(0, 0, 2); // 2, null
let result = a.freeze();
@@ -74,8 +74,8 @@ fn test_decimal_offset() {
fn test_decimal_null_offset_nulls() {
let decimal_array =
create_decimal_array(vec![Some(1), Some(2), None, Some(3)], 10, 3);
- let decimal_array = decimal_array.slice(1, 3); // 2, null, 3
- let arrays = vec![decimal_array.data()];
+ let decimal_array = decimal_array.slice(1, 3).into_data(); // 2, null, 3
+ let arrays = vec![&decimal_array];
let mut a = MutableArrayData::new(arrays, true, 2);
a.extend(0, 0, 2); // 2, null
a.extend_nulls(3); // 2, null, null, null, null
@@ -90,8 +90,8 @@ fn test_decimal_null_offset_nulls() {
/// tests extending from a primitive array w/ offset nor nulls
#[test]
fn test_primitive() {
- let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]);
- let arrays = vec![b.data()];
+ let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]).into_data();
+ let arrays = vec![&b];
let mut a = MutableArrayData::new(arrays, false, 3);
a.extend(0, 0, 2);
let result = a.freeze();
@@ -103,9 +103,9 @@ fn test_primitive() {
/// tests extending from a primitive array with offset w/ nulls
#[test]
fn test_primitive_offset() {
- let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]);
+ let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]).into_data();
let b = b.slice(1, 2);
- let arrays = vec![b.data()];
+ let arrays = vec![&b];
let mut a = MutableArrayData::new(arrays, false, 2);
a.extend(0, 0, 2);
let result = a.freeze();
@@ -118,8 +118,8 @@ fn test_primitive_offset() {
#[test]
fn test_primitive_null_offset() {
let b = UInt8Array::from(vec![Some(1), None, Some(3)]);
- let b = b.slice(1, 2);
- let arrays = vec![b.data()];
+ let b = b.slice(1, 2).into_data();
+ let arrays = vec![&b];
let mut a = MutableArrayData::new(arrays, false, 2);
a.extend(0, 0, 2);
let result = a.freeze();
@@ -130,9 +130,9 @@ fn test_primitive_null_offset() {
#[test]
fn test_primitive_null_offset_nulls() {
- let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]);
+ let b = UInt8Array::from(vec![Some(1), Some(2), Some(3)]).into_data();
let b = b.slice(1, 2);
- let arrays = vec![b.data()];
+ let arrays = vec![&b];
let mut a = MutableArrayData::new(arrays, true, 2);
a.extend(0, 0, 2);
a.extend_nulls(3);
@@ -153,8 +153,8 @@ fn test_list_null_offset() {
builder.append(true);
builder.values().append_slice(&[6, 7, 8]);
builder.append(true);
- let array = builder.finish();
- let arrays = vec![array.data()];
+ let array = builder.finish().into_data();
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
mutable.extend(0, 0, 1);
@@ -174,8 +174,9 @@ fn test_list_null_offset() {
/// tests extending from a variable-sized (strings and binary) array w/ offset
with nulls
#[test]
fn test_variable_sized_nulls() {
- let array = StringArray::from(vec![Some("a"), Some("bc"), None,
Some("defh")]);
- let arrays = vec![array.data()];
+ let array =
+ StringArray::from(vec![Some("a"), Some("bc"), None,
Some("defh")]).into_data();
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -193,9 +194,9 @@ fn test_variable_sized_nulls() {
#[test]
fn test_variable_sized_offsets() {
let array = StringArray::from(vec![Some("a"), Some("bc"), None,
Some("defh")]);
- let array = array.slice(1, 3);
+ let array = array.into_data().slice(1, 3);
- let arrays = vec![array.data()];
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -211,9 +212,9 @@ fn test_variable_sized_offsets() {
#[test]
fn test_string_offsets() {
let array = StringArray::from(vec![Some("a"), Some("bc"), None,
Some("defh")]);
- let array = array.slice(1, 3);
+ let array = array.into_data().slice(1, 3);
- let arrays = vec![array.data()];
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -228,10 +229,10 @@ fn test_string_offsets() {
#[test]
fn test_multiple_with_nulls() {
- let array1 = StringArray::from(vec!["hello", "world"]);
- let array2 = StringArray::from(vec![Some("1"), None]);
+ let array1 = StringArray::from(vec!["hello", "world"]).into_data();
+ let array2 = StringArray::from(vec![Some("1"), None]).into_data();
- let arrays = vec![array1.data(), array2.data()];
+ let arrays = vec![&array1, &array2];
let mut mutable = MutableArrayData::new(arrays, false, 5);
@@ -248,9 +249,9 @@ fn test_multiple_with_nulls() {
#[test]
fn test_string_null_offset_nulls() {
let array = StringArray::from(vec![Some("a"), Some("bc"), None,
Some("defh")]);
- let array = array.slice(1, 3);
+ let array = array.into_data().slice(1, 3);
- let arrays = vec![array.data()];
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, true, 0);
@@ -266,8 +267,9 @@ fn test_string_null_offset_nulls() {
#[test]
fn test_bool() {
- let array = BooleanArray::from(vec![Some(false), Some(true), None,
Some(false)]);
- let arrays = vec![array.data()];
+ let array =
+ BooleanArray::from(vec![Some(false), Some(true), None,
Some(false)]).into_data();
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -282,9 +284,9 @@ fn test_bool() {
#[test]
fn test_null() {
- let array1 = NullArray::new(10);
- let array2 = NullArray::new(5);
- let arrays = vec![array1.data(), array2.data()];
+ let array1 = NullArray::new(10).into_data();
+ let array2 = NullArray::new(5).into_data();
+ let arrays = vec![&array1, &array2];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -352,8 +354,9 @@ fn test_struct() {
let array =
StructArray::try_from(vec![("f1", strings.clone()), ("f2",
ints.clone())])
- .unwrap();
- let arrays = vec![array.data()];
+ .unwrap()
+ .into_data();
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
mutable.extend(0, 1, 3);
@@ -388,8 +391,9 @@ fn test_struct_offset() {
let array =
StructArray::try_from(vec![("f1", strings.clone()), ("f2",
ints.clone())])
.unwrap()
+ .into_data()
.slice(1, 3);
- let arrays = vec![array.data()];
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
mutable.extend(0, 1, 3);
@@ -424,8 +428,9 @@ fn test_struct_nulls() {
let array =
StructArray::try_from(vec![("f1", strings.clone()), ("f2",
ints.clone())])
- .unwrap();
- let arrays = vec![array.data()];
+ .unwrap()
+ .into_data();
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -462,8 +467,9 @@ fn test_struct_many() {
let array =
StructArray::try_from(vec![("f1", strings.clone()), ("f2",
ints.clone())])
- .unwrap();
- let arrays = vec![array.data(), array.data()];
+ .unwrap()
+ .into_data();
+ let arrays = vec![&array, &array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
mutable.extend(0, 1, 3);
@@ -488,10 +494,10 @@ fn test_binary_fixed_sized_offsets() {
vec![vec![0, 0], vec![0, 1], vec![0, 2]].into_iter(),
)
.expect("Failed to create FixedSizeBinaryArray from iterable");
- let array = array.slice(1, 2);
+ let array = array.slice(1, 2).into_data();
// = [[0, 1], [0, 2]] due to the offset = 1
- let arrays = vec![array.data()];
+ let arrays = vec![&array];
let mut mutable = MutableArrayData::new(arrays, false, 0);
@@ -517,7 +523,7 @@ fn test_list_append() {
builder.values().append_slice(&[6, 7, 8]);
builder.values().append_slice(&[9, 10, 11]);
builder.append(true);
- let a = builder.finish();
+ let a = builder.finish().into_data();
let a_builder = Int64Builder::with_capacity(24);
let mut a_builder = ListBuilder::<Int64Builder>::new(a_builder);
@@ -526,11 +532,11 @@ fn test_list_append() {
a_builder.append(true);
a_builder.values().append_slice(&[14, 15]);
a_builder.append(true);
- let b = a_builder.finish();
+ let b = a_builder.finish().into_data();
let c = b.slice(1, 2);
- let mut mutable = MutableArrayData::new(vec![a.data(), b.data(),
c.data()], false, 1);
+ let mut mutable = MutableArrayData::new(vec![&a, &b, &c], false, 1);
mutable.extend(0, 0, a.len());
mutable.extend(1, 0, b.len());
mutable.extend(2, 0, c.len());
@@ -584,8 +590,7 @@ fn test_list_nulls_append() {
builder.values().append_null();
builder.values().append_slice(&[9, 10, 11]);
builder.append(true);
- let a = builder.finish();
- let a = a.data();
+ let a = builder.finish().into_data();
let mut builder =
ListBuilder::<Int64Builder>::new(Int64Builder::with_capacity(32));
builder.values().append_slice(&[12, 13]);
@@ -596,12 +601,11 @@ fn test_list_nulls_append() {
builder.values().append_null();
builder.values().append_slice(&[14, 15]);
builder.append(true);
- let b = builder.finish();
- let b = b.data();
+ let b = builder.finish().into_data();
let c = b.slice(1, 2);
let d = b.slice(2, 2);
- let mut mutable = MutableArrayData::new(vec![a, b, &c, &d], false, 10);
+ let mut mutable = MutableArrayData::new(vec![&a, &b, &c, &d], false, 10);
mutable.extend(0, 0, a.len());
mutable.extend(1, 0, b.len());
@@ -671,8 +675,7 @@ fn test_map_nulls_append() {
builder.values().append_slice(&[9, 10, 11]);
builder.append(true).unwrap();
- let a = builder.finish();
- let a = a.data();
+ let a = builder.finish().into_data();
let mut builder = MapBuilder::<Int64Builder, Int64Builder>::new(
None,
@@ -691,12 +694,11 @@ fn test_map_nulls_append() {
builder.values().append_slice(&[14, 15]);
builder.append(true).unwrap();
- let b = builder.finish();
- let b = b.data();
+ let b = builder.finish().into_data();
let c = b.slice(1, 2);
let d = b.slice(2, 2);
- let mut mutable = MutableArrayData::new(vec![a, b, &c, &d], false, 10);
+ let mut mutable = MutableArrayData::new(vec![&a, &b, &c, &d], false, 10);
mutable.extend(0, 0, a.len());
mutable.extend(1, 0, b.len());
@@ -804,7 +806,7 @@ fn test_list_of_strings_append() {
builder.values().append_value("Arrow");
builder.values().append_null();
builder.append(true);
- let a = builder.finish();
+ let a = builder.finish().into_data();
// [["alpha", "beta"], [None], ["gamma", "delta", None]]
let mut builder = ListBuilder::new(StringBuilder::new());
@@ -817,9 +819,9 @@ fn test_list_of_strings_append() {
builder.values().append_value("delta");
builder.values().append_null();
builder.append(true);
- let b = builder.finish();
+ let b = builder.finish().into_data();
- let mut mutable = MutableArrayData::new(vec![a.data(), b.data()], false,
10);
+ let mut mutable = MutableArrayData::new(vec![&a, &b], false, 10);
mutable.extend(0, 0, a.len());
mutable.extend(1, 0, b.len());
@@ -869,7 +871,8 @@ fn test_list_of_strings_append() {
fn test_fixed_size_binary_append() {
let a = vec![Some(vec![1, 2]), Some(vec![3, 4]), Some(vec![5, 6])];
let a =
FixedSizeBinaryArray::try_from_sparse_iter_with_size(a.into_iter(), 2)
- .expect("Failed to create FixedSizeBinaryArray from iterable");
+ .expect("Failed to create FixedSizeBinaryArray from iterable")
+ .into_data();
let b = vec![
None,
@@ -880,9 +883,10 @@ fn test_fixed_size_binary_append() {
None,
];
let b =
FixedSizeBinaryArray::try_from_sparse_iter_with_size(b.into_iter(), 2)
- .expect("Failed to create FixedSizeBinaryArray from iterable");
+ .expect("Failed to create FixedSizeBinaryArray from iterable")
+ .into_data();
- let mut mutable = MutableArrayData::new(vec![a.data(), b.data()], false,
10);
+ let mut mutable = MutableArrayData::new(vec![&a, &b], false, 10);
mutable.extend(0, 0, a.len());
mutable.extend(1, 0, b.len());
@@ -913,8 +917,9 @@ fn test_fixed_size_binary_append() {
];
let expected =
FixedSizeBinaryArray::try_from_sparse_iter_with_size(expected.into_iter(), 2)
- .expect("Failed to create FixedSizeBinaryArray from iterable");
- assert_eq!(&result, expected.data());
+ .expect("Failed to create FixedSizeBinaryArray from iterable")
+ .into_data();
+ assert_eq!(result, expected);
}
/*
diff --git a/arrow/tests/array_validation.rs b/arrow/tests/array_validation.rs
index 082d020ca..67960ada6 100644
--- a/arrow/tests/array_validation.rs
+++ b/arrow/tests/array_validation.rs
@@ -606,7 +606,7 @@ fn test_validate_dictionary_index_too_large() {
2,
None,
0,
- vec![keys.data().buffers()[0].clone()],
+ vec![keys.into_data().buffers()[0].clone()],
vec![values.into_data()],
)
.unwrap();
@@ -630,7 +630,7 @@ fn test_validate_dictionary_index_negative() {
2,
None,
0,
- vec![keys.data().buffers()[0].clone()],
+ vec![keys.into_data().buffers()[0].clone()],
vec![values.into_data()],
)
.unwrap();
@@ -655,7 +655,7 @@ fn
test_validate_dictionary_index_negative_but_not_referenced() {
1,
None,
0,
- vec![keys.data().buffers()[0].clone()],
+ vec![keys.into_data().buffers()[0].clone()],
vec![values.into_data()],
)
.unwrap();
@@ -681,7 +681,7 @@ fn test_validate_dictionary_index_giant_negative() {
2,
None,
0,
- vec![keys.data().buffers()[0].clone()],
+ vec![keys.into_data().buffers()[0].clone()],
vec![values.into_data()],
)
.unwrap();
@@ -1016,7 +1016,7 @@ fn test_decimal_validation() {
builder.append_value(20000);
let array = builder.finish();
- array.data().validate_full().unwrap();
+ array.into_data().validate_full().unwrap();
}
#[test]
diff --git a/parquet/src/arrow/array_reader/byte_array_dictionary.rs
b/parquet/src/arrow/array_reader/byte_array_dictionary.rs
index c4ed7e907..763a6ccee 100644
--- a/parquet/src/arrow/array_reader/byte_array_dictionary.rs
+++ b/parquet/src/arrow/array_reader/byte_array_dictionary.rs
@@ -355,7 +355,8 @@ where
assert_eq!(dict.data_type(), &self.value_type);
- let dict_buffers = dict.data().buffers();
+ let data = dict.to_data();
+ let dict_buffers = data.buffers();
let dict_offsets = dict_buffers[0].typed_data::<V>();
let dict_values = dict_buffers[1].as_slice();
@@ -391,8 +392,8 @@ where
#[cfg(test)]
mod tests {
- use arrow_array::{Array, StringArray};
use arrow::compute::cast;
+ use arrow_array::{Array, StringArray};
use crate::arrow::array_reader::test_util::{
byte_array_all_encodings, encode_dictionary, utf8_column,
diff --git a/parquet/src/arrow/array_reader/list_array.rs
b/parquet/src/arrow/array_reader/list_array.rs
index 504591c0c..a6b354f90 100644
--- a/parquet/src/arrow/array_reader/list_array.rs
+++ b/parquet/src/arrow/array_reader/list_array.rs
@@ -143,11 +143,9 @@ impl<OffsetSize: OffsetSizeTrait> ArrayReader for
ListArrayReader<OffsetSize> {
let mut skipped = 0;
// Builder used to construct the filtered child data, skipping empty
lists and nulls
- let mut child_data_builder = MutableArrayData::new(
- vec![next_batch_array.data()],
- false,
- next_batch_array.len(),
- );
+ let data = next_batch_array.to_data();
+ let mut child_data_builder =
+ MutableArrayData::new(vec![&data], false, next_batch_array.len());
def_levels.iter().zip(rep_levels).try_for_each(|(d, r)| {
match r.cmp(&self.rep_level) {
@@ -201,7 +199,7 @@ impl<OffsetSize: OffsetSizeTrait> ArrayReader for
ListArrayReader<OffsetSize> {
let child_data = if skipped == 0 {
// No filtered values - can reuse original array
- next_batch_array.data().clone()
+ next_batch_array.to_data()
} else {
// One or more filtered values - must build new array
if let Some(start) = filter_start.take() {
diff --git a/parquet/src/arrow/array_reader/map_array.rs
b/parquet/src/arrow/array_reader/map_array.rs
index d7645a593..9bfc04732 100644
--- a/parquet/src/arrow/array_reader/map_array.rs
+++ b/parquet/src/arrow/array_reader/map_array.rs
@@ -96,7 +96,7 @@ impl ArrayReader for MapArrayReader {
// A MapArray is just a ListArray with a StructArray child
// we can therefore just alter the ArrayData
let array = self.reader.consume_batch().unwrap();
- let data = array.data().clone();
+ let data = array.to_data();
let builder = data.into_builder().data_type(self.data_type.clone());
// SAFETY - we can assume that ListArrayReader produces valid ListArray
diff --git a/parquet/src/arrow/array_reader/struct_array.rs
b/parquet/src/arrow/array_reader/struct_array.rs
index 0670701a0..11e019f29 100644
--- a/parquet/src/arrow/array_reader/struct_array.rs
+++ b/parquet/src/arrow/array_reader/struct_array.rs
@@ -17,7 +17,7 @@
use crate::arrow::array_reader::ArrayReader;
use crate::errors::{ParquetError, Result};
-use arrow_array::{builder::BooleanBufferBuilder, ArrayRef, StructArray};
+use arrow_array::{builder::BooleanBufferBuilder, ArrayRef, StructArray, Array};
use arrow_data::{ArrayData, ArrayDataBuilder};
use arrow_schema::DataType as ArrowType;
use std::any::Any;
@@ -130,7 +130,7 @@ impl ArrayReader for StructArrayReader {
.child_data(
children_array
.iter()
- .map(|x| x.data().clone())
+ .map(|x| x.to_data())
.collect::<Vec<ArrayData>>(),
);
diff --git a/parquet/src/arrow/arrow_reader/mod.rs
b/parquet/src/arrow/arrow_reader/mod.rs
index 4b88a33f3..57741283a 100644
--- a/parquet/src/arrow/arrow_reader/mod.rs
+++ b/parquet/src/arrow/arrow_reader/mod.rs
@@ -1761,7 +1761,7 @@ mod tests {
let b = Arc::clone(batch.column(0));
assert_eq!(a.data_type(), b.data_type());
- assert_eq!(a.data(), b.data(), "{:#?} vs {:#?}", a.data(),
b.data());
+ assert_eq!(a.to_data(), b.to_data());
assert_eq!(
a.as_any().type_id(),
b.as_any().type_id(),
@@ -1960,7 +1960,7 @@ mod tests {
let batch = reader.into_iter().next().unwrap().unwrap();
assert_eq!(batch.schema().as_ref(), &expected_schema);
assert_eq!(batch.num_rows(), 4);
- assert_eq!(batch.column(0).data().null_count(), 2);
+ assert_eq!(batch.column(0).null_count(), 2);
}
#[test]
@@ -2077,7 +2077,7 @@ mod tests {
);
let get_dict =
- |batch: &RecordBatch|
batch.column(0).data().child_data()[0].clone();
+ |batch: &RecordBatch|
batch.column(0).to_data().child_data()[0].clone();
// First and second batch in same row group -> same dictionary
assert_eq!(get_dict(&batches[0]), get_dict(&batches[1]));
diff --git a/parquet/src/arrow/arrow_writer/levels.rs
b/parquet/src/arrow/arrow_writer/levels.rs
index 4239f3fba..680d31480 100644
--- a/parquet/src/arrow/arrow_writer/levels.rs
+++ b/parquet/src/arrow/arrow_writer/levels.rs
@@ -41,10 +41,9 @@
//! \[1\]
[parquet-format#nested-encoding](https://github.com/apache/parquet-format#nested-encoding)
use crate::errors::{ParquetError, Result};
-use arrow_array::{
- make_array, Array, ArrayRef, GenericListArray, MapArray, OffsetSizeTrait,
StructArray,
-};
-use arrow_data::ArrayData;
+use arrow_array::cast::AsArray;
+use arrow_array::{Array, ArrayRef, OffsetSizeTrait, StructArray};
+use arrow_buffer::NullBuffer;
use arrow_schema::{DataType, Field};
use std::ops::Range;
@@ -183,29 +182,37 @@ impl LevelInfoBuilder {
self.write_leaf(array, range)
}
DataType::Struct(_) => {
- let array =
array.as_any().downcast_ref::<StructArray>().unwrap();
+ let array = array.as_struct();
self.write_struct(array, range)
}
DataType::List(_) => {
- let array = array
- .as_any()
- .downcast_ref::<GenericListArray<i32>>()
- .unwrap();
- self.write_list(array.value_offsets(), array.data(), range)
+ let array = array.as_list::<i32>();
+ self.write_list(
+ array.value_offsets(),
+ array.nulls(),
+ array.values(),
+ range,
+ )
}
DataType::LargeList(_) => {
- let array = array
- .as_any()
- .downcast_ref::<GenericListArray<i64>>()
- .unwrap();
-
- self.write_list(array.value_offsets(), array.data(), range)
+ let array = array.as_list::<i64>();
+ self.write_list(
+ array.value_offsets(),
+ array.nulls(),
+ array.values(),
+ range,
+ )
}
DataType::Map(_, _) => {
- let array = array.as_any().downcast_ref::<MapArray>().unwrap();
+ let array = array.as_map();
// A Map is just as ListArray<i32> with a StructArray child,
we therefore
// treat it as such to avoid code duplication
- self.write_list(array.value_offsets(), array.data(), range)
+ self.write_list(
+ array.value_offsets(),
+ array.nulls(),
+ array.entries(),
+ range,
+ )
}
_ => unreachable!(),
}
@@ -217,7 +224,8 @@ impl LevelInfoBuilder {
fn write_list<O: OffsetSizeTrait>(
&mut self,
offsets: &[O],
- list_data: &ArrayData,
+ nulls: Option<&NullBuffer>,
+ values: &ArrayRef,
range: Range<usize>,
) {
let (child, ctx) = match self {
@@ -226,11 +234,10 @@ impl LevelInfoBuilder {
};
let offsets = &offsets[range.start..range.end + 1];
- let child_array = make_array(list_data.child_data()[0].clone());
let write_non_null_slice =
|child: &mut LevelInfoBuilder, start_idx: usize, end_idx: usize| {
- child.write(&child_array, start_idx..end_idx);
+ child.write(values, start_idx..end_idx);
child.visit_leaves(|leaf| {
let rep_levels = leaf.rep_levels.as_mut().unwrap();
let mut rev = rep_levels.iter_mut().rev();
@@ -270,7 +277,7 @@ impl LevelInfoBuilder {
})
};
- match list_data.nulls() {
+ match nulls {
Some(nulls) => {
let null_offset = range.start;
// TODO: Faster bitmask iteration (#1757)
@@ -485,7 +492,7 @@ mod tests {
use arrow_array::*;
use arrow_buffer::{Buffer, ToByteSlice};
use arrow_cast::display::array_value_to_string;
- use arrow_data::ArrayDataBuilder;
+ use arrow_data::{ArrayData, ArrayDataBuilder};
use arrow_schema::{Fields, Schema};
#[test]
@@ -1243,7 +1250,7 @@ mod tests {
let array = Arc::new(list_builder.finish());
- let values_len = array.data().child_data()[0].len();
+ let values_len = array.values().len();
assert_eq!(values_len, 5);
let schema = Arc::new(Schema::new(vec![list_field]));
@@ -1278,7 +1285,7 @@ mod tests {
]);
// This test assumes that nulls don't take up space
- assert_eq!(inner.data().child_data()[0].len(), 7);
+ assert_eq!(inner.values().len(), 7);
let field = Field::new("list", inner.data_type().clone(), true);
let array = Arc::new(inner) as ArrayRef;
diff --git a/parquet/src/arrow/arrow_writer/mod.rs
b/parquet/src/arrow/arrow_writer/mod.rs
index 86f7764ec..4cf54dc88 100644
--- a/parquet/src/arrow/arrow_writer/mod.rs
+++ b/parquet/src/arrow/arrow_writer/mod.rs
@@ -22,7 +22,7 @@ use std::io::Write;
use std::sync::Arc;
use arrow_array::cast::AsArray;
-use arrow_array::types::Decimal128Type;
+use arrow_array::types::{Decimal128Type, Int32Type, Int64Type, UInt32Type,
UInt64Type};
use arrow_array::{types, Array, ArrayRef, RecordBatch};
use arrow_schema::{DataType as ArrowDataType, IntervalUnit, SchemaRef};
@@ -33,11 +33,12 @@ use super::schema::{
use crate::arrow::arrow_writer::byte_array::ByteArrayWriter;
use crate::column::writer::{ColumnWriter, ColumnWriterImpl};
+use crate::data_type::{ByteArray, DataType, FixedLenByteArray};
use crate::errors::{ParquetError, Result};
use crate::file::metadata::{KeyValue, RowGroupMetaDataPtr};
use crate::file::properties::WriterProperties;
+use crate::file::writer::SerializedFileWriter;
use crate::file::writer::SerializedRowGroupWriter;
-use crate::{data_type::*, file::writer::SerializedFileWriter};
use levels::{calculate_array_levels, LevelInfo};
mod byte_array;
@@ -292,16 +293,21 @@ fn write_leaves<W: Write>(
}
col_writer.close()
}
- ArrowDataType::List(_) | ArrowDataType::LargeList(_) => {
+ ArrowDataType::List(_) => {
let arrays: Vec<_> = arrays.iter().map(|array|{
- // write the child list
- let data = array.data();
- arrow_array::make_array(data.child_data()[0].clone())
+ array.as_list::<i32>().values().clone()
}).collect();
write_leaves(row_group_writer, &arrays, levels)?;
Ok(())
}
+ ArrowDataType::LargeList(_) => {
+ let arrays: Vec<_> = arrays.iter().map(|array|{
+ array.as_list::<i64>().values().clone()
+ }).collect();
+ write_leaves(row_group_writer, &arrays, levels)?;
+ Ok(())
+ }
ArrowDataType::Struct(fields) => {
// Groups child arrays by field
let mut field_arrays = vec![Vec::with_capacity(arrays.len());
fields.len()];
@@ -384,19 +390,15 @@ fn write_leaf(
let array = arrow_cast::cast(column,
&ArrowDataType::Date32)?;
let array = arrow_cast::cast(&array,
&ArrowDataType::Int32)?;
- let array = array
- .as_any()
- .downcast_ref::<arrow_array::Int32Array>()
- .expect("Unable to get int32 array");
+ let array = array.as_primitive::<Int32Type>();
write_primitive(typed, array.values(), levels)?
}
ArrowDataType::UInt32 => {
- let data = column.data();
- let offset = data.offset();
+ let values = column.as_primitive::<UInt32Type>().values();
// follow C++ implementation and use overflow/reinterpret
cast from u32 to i32 which will map
// `(i32::MAX as u32)..u32::MAX` to `i32::MIN..0`
- let array: &[i32] = data.buffers()[0].typed_data();
- write_primitive(typed, &array[offset..offset +
data.len()], levels)?
+ let array = values.inner().typed_data::<i32>();
+ write_primitive(typed, array, levels)?
}
ArrowDataType::Decimal128(_, _) => {
// use the int32 to represent the decimal with low
precision
@@ -407,19 +409,13 @@ fn write_leaf(
}
_ => {
let array = arrow_cast::cast(column,
&ArrowDataType::Int32)?;
- let array = array
- .as_any()
- .downcast_ref::<arrow_array::Int32Array>()
- .expect("Unable to get i32 array");
+ let array = array.as_primitive::<Int32Type>();
write_primitive(typed, array.values(), levels)?
}
}
}
ColumnWriter::BoolColumnWriter(ref mut typed) => {
- let array = column
- .as_any()
- .downcast_ref::<arrow_array::BooleanArray>()
- .expect("Unable to get boolean array");
+ let array = column.as_boolean();
typed.write_batch(
get_bool_array_slice(array, indices).as_slice(),
levels.def_levels(),
@@ -429,19 +425,15 @@ fn write_leaf(
ColumnWriter::Int64ColumnWriter(ref mut typed) => {
match column.data_type() {
ArrowDataType::Int64 => {
- let array = column
- .as_any()
- .downcast_ref::<arrow_array::Int64Array>()
- .expect("Unable to get i64 array");
+ let array = column.as_primitive::<Int64Type>();
write_primitive(typed, array.values(), levels)?
}
ArrowDataType::UInt64 => {
+ let values = column.as_primitive::<UInt64Type>().values();
// follow C++ implementation and use overflow/reinterpret
cast from u64 to i64 which will map
// `(i64::MAX as u64)..u64::MAX` to `i64::MIN..0`
- let data = column.data();
- let offset = data.offset();
- let array: &[i64] = data.buffers()[0].typed_data();
- write_primitive(typed, &array[offset..offset +
data.len()], levels)?
+ let array = values.inner().typed_data::<i64>();
+ write_primitive(typed, array, levels)?
}
ArrowDataType::Decimal128(_, _) => {
// use the int64 to represent the decimal with low
precision
@@ -452,10 +444,7 @@ fn write_leaf(
}
_ => {
let array = arrow_cast::cast(column,
&ArrowDataType::Int64)?;
- let array = array
- .as_any()
- .downcast_ref::<arrow_array::Int64Array>()
- .expect("Unable to get i64 array");
+ let array = array.as_primitive::<Int64Type>();
write_primitive(typed, array.values(), levels)?
}
}
@@ -642,6 +631,7 @@ mod tests {
use arrow_schema::Fields;
use crate::basic::Encoding;
+ use crate::data_type::AsBytes;
use crate::file::metadata::ParquetMetaData;
use crate::file::page_index::index_reader::read_pages_locations;
use crate::file::properties::{ReaderProperties, WriterVersion};
@@ -723,8 +713,8 @@ mod tests {
assert_eq!(expected_batch.num_columns(),
actual_batch.num_columns());
assert_eq!(expected_batch.num_rows(), actual_batch.num_rows());
for i in 0..expected_batch.num_columns() {
- let expected_data = expected_batch.column(i).data().clone();
- let actual_data = actual_batch.column(i).data().clone();
+ let expected_data = expected_batch.column(i).to_data();
+ let actual_data = actual_batch.column(i).to_data();
assert_eq!(expected_data, actual_data);
}
@@ -779,7 +769,7 @@ mod tests {
// build a record batch
let batch = RecordBatch::try_new(Arc::new(schema),
vec![Arc::new(a)]).unwrap();
- assert_eq!(batch.column(0).data().null_count(), 1);
+ assert_eq!(batch.column(0).null_count(), 1);
// This test fails if the max row group size is less than the batch's
length
// see https://github.com/apache/arrow-rs/issues/518
@@ -821,7 +811,7 @@ mod tests {
// This test fails if the max row group size is less than the batch's
length
// see https://github.com/apache/arrow-rs/issues/518
- assert_eq!(batch.column(0).data().null_count(), 0);
+ assert_eq!(batch.column(0).null_count(), 0);
roundtrip(batch, None);
}
@@ -928,7 +918,7 @@ mod tests {
let g_list_data =
ArrayData::builder(struct_field_g.data_type().clone())
.len(5)
.add_buffer(g_value_offsets.clone())
- .add_child_data(g_value.data().clone())
+ .add_child_data(g_value.to_data())
.build()
.unwrap();
let g = ListArray::from(g_list_data);
@@ -936,7 +926,7 @@ mod tests {
let h_list_data =
ArrayData::builder(struct_field_h.data_type().clone())
.len(5)
.add_buffer(g_value_offsets)
- .add_child_data(g_value.data().clone())
+ .add_child_data(g_value.to_data())
.null_bit_buffer(Some(Buffer::from(vec![0b00011011])))
.build()
.unwrap();
@@ -1251,9 +1241,9 @@ mod tests {
assert_eq!(expected_batch.num_columns(), actual_batch.num_columns());
assert_eq!(expected_batch.num_rows(), actual_batch.num_rows());
for i in 0..expected_batch.num_columns() {
- let expected_data = expected_batch.column(i).data();
- let actual_data = actual_batch.column(i).data();
- validate(expected_data, actual_data);
+ let expected_data = expected_batch.column(i).to_data();
+ let actual_data = actual_batch.column(i).to_data();
+ validate(&expected_data, &actual_data);
}
file
diff --git a/parquet/src/arrow/buffer/dictionary_buffer.rs
b/parquet/src/arrow/buffer/dictionary_buffer.rs
index 23ebea57b..529c28872 100644
--- a/parquet/src/arrow/buffer/dictionary_buffer.rs
+++ b/parquet/src/arrow/buffer/dictionary_buffer.rs
@@ -107,7 +107,8 @@ impl<K: ScalarValue + ArrowNativeType + Ord, V: ScalarValue
+ OffsetSizeTrait>
Self::Values { values } => Ok(values),
Self::Dict { keys, values } => {
let mut spilled = OffsetBuffer::default();
- let dict_buffers = values.data().buffers();
+ let data = values.to_data();
+ let dict_buffers = data.buffers();
let dict_offsets = dict_buffers[0].typed_data::<V>();
let dict_values = dict_buffers[1].as_slice();