This is an automated email from the ASF dual-hosted git repository.
scovich pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 78ca92d6ce [Variant] `VariantArray` field API naming (#10124)
78ca92d6ce is described below
commit 78ca92d6ce0f8c41de42ae4636c91ca364b388a2
Author: Konstantin Tarasov <[email protected]>
AuthorDate: Tue Jun 16 16:56:00 2026 -0400
[Variant] `VariantArray` field API naming (#10124)
# Which issue does this PR close?
- Closes #10093.
# Rationale for this change
check issue
# What changes are included in this PR?
- Rename existing `_field` APIs that return `&ArrayRef` to `_column`
- Add new `_field` APIs that return `&FieldRef` and tests for them
# Are these changes tested?
- Yes, unit tests
# Are there any user-facing changes?
- Yes, breaking API name change.
---
parquet-variant-compute/src/from_json.rs | 12 +-
parquet-variant-compute/src/shred_variant.rs | 164 +++++++++++----------
parquet-variant-compute/src/unshred_variant.rs | 4 +-
parquet-variant-compute/src/variant_array.rs | 42 +++---
.../src/variant_array_builder.rs | 6 +-
parquet-variant-compute/src/variant_get.rs | 28 ++--
6 files changed, 131 insertions(+), 125 deletions(-)
diff --git a/parquet-variant-compute/src/from_json.rs
b/parquet-variant-compute/src/from_json.rs
index 0983147132..8e8c0ea9cf 100644
--- a/parquet-variant-compute/src/from_json.rs
+++ b/parquet-variant-compute/src/from_json.rs
@@ -84,8 +84,8 @@ mod test {
let array_ref: ArrayRef = Arc::new(input);
let variant_array = json_to_variant(&array_ref).unwrap();
- let metadata_array = variant_array.metadata_field();
- let value_array = variant_array.value_field().expect("value field");
+ let metadata_array = variant_array.metadata_column();
+ let value_array = variant_array.value_column().expect("value column");
// Compare row 0
assert!(!variant_array.is_null(0));
@@ -133,8 +133,8 @@ mod test {
let array_ref: ArrayRef = Arc::new(input);
let variant_array = json_to_variant(&array_ref).unwrap();
- let metadata_array = variant_array.metadata_field();
- let value_array = variant_array.value_field().expect("value field");
+ let metadata_array = variant_array.metadata_column();
+ let value_array = variant_array.value_column().expect("value column");
// Compare row 0
assert!(!variant_array.is_null(0));
@@ -182,8 +182,8 @@ mod test {
let array_ref: ArrayRef = Arc::new(input);
let variant_array = json_to_variant(&array_ref).unwrap();
- let metadata_array = variant_array.metadata_field();
- let value_array = variant_array.value_field().expect("value field");
+ let metadata_array = variant_array.metadata_column();
+ let value_array = variant_array.value_column().expect("value column");
// Compare row 0
assert!(!variant_array.is_null(0));
diff --git a/parquet-variant-compute/src/shred_variant.rs
b/parquet-variant-compute/src/shred_variant.rs
index 8f3963cce0..48ecdc2bc2 100644
--- a/parquet-variant-compute/src/shred_variant.rs
+++ b/parquet-variant-compute/src/shred_variant.rs
@@ -76,13 +76,13 @@ pub(crate) fn shred_variant_with_options(
as_type: &DataType,
cast_options: &CastOptions,
) -> Result<VariantArray> {
- if array.typed_value_field().is_some() {
+ if array.typed_value_column().is_some() {
return Err(ArrowError::InvalidArgumentError(
"Input is already shredded".to_string(),
));
}
- if array.value_field().is_none() {
+ if array.value_column().is_none() {
// all-null case -- nothing to do.
return Ok(array.clone());
};
@@ -102,7 +102,7 @@ pub(crate) fn shred_variant_with_options(
}
let (value, typed_value, nulls) = builder.finish()?;
Ok(VariantArray::from_parts(
- array.metadata_field().clone(),
+ array.metadata_column().clone(),
Some(Arc::new(value)),
Some(typed_value),
nulls,
@@ -855,7 +855,7 @@ mod tests {
fn downcast_list_like_array<O: OffsetSizeTrait>(
array: &VariantArray,
) -> &dyn TestListLikeArray<OffsetSize = O> {
- let typed_value = array.typed_value_field().unwrap();
+ let typed_value = array.typed_value_column().unwrap();
if let Some(list) =
typed_value.as_any().downcast_ref::<GenericListArray<O>>() {
list
} else if let Some(list_view) = typed_value
@@ -880,8 +880,8 @@ mod tests {
) {
assert_eq!(array.len(), expected_len);
- let fallback_value = array.value_field().unwrap();
- let fallback_metadata = array.metadata_field();
+ let fallback_value = array.value_column().unwrap();
+ let fallback_metadata = array.metadata_column();
let array = downcast_list_like_array::<O>(array);
assert_eq!(
@@ -978,7 +978,7 @@ mod tests {
// Validate the shredded primitive values for list elements
let element_array =
ShreddedVariantFieldArray::try_new(array.values().as_ref()).unwrap();
let element_values = element_array
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<PrimitiveArray<T>>()
@@ -995,7 +995,7 @@ mod tests {
}
// Validate fallback variants for list elements that could not be
shredded
- let element_fallbacks = element_array.value_field().unwrap();
+ let element_fallbacks = element_array.value_column().unwrap();
assert_eq!(element_fallbacks.len(), expected_fallbacks.len());
for (idx, expected_fallback) in expected_fallbacks.iter().enumerate() {
match expected_fallback {
@@ -1123,8 +1123,8 @@ mod tests {
typed_struct.column_by_name(field_name).unwrap(),
)
.unwrap();
- assert!(field.value_field().unwrap().is_null(0));
- assert!(field.typed_value_field().unwrap().is_null(0));
+ assert!(field.value_column().unwrap().is_null(0));
+ assert!(field.typed_value_column().unwrap().is_null(0));
}
}
}
@@ -1134,8 +1134,8 @@ mod tests {
// Create a VariantArray that already has typed_value_field
// First create a valid VariantArray, then extract its parts to
construct a shredded one
let temp_array =
VariantArray::from_iter(vec![Some(Variant::from("test"))]);
- let metadata = temp_array.metadata_field().clone();
- let value = temp_array.value_field().unwrap().clone();
+ let metadata = temp_array.metadata_column().clone();
+ let value = temp_array.value_column().unwrap().clone();
let typed_value = Arc::new(Int64Array::from(vec![42])) as ArrayRef;
let shredded_array =
@@ -1156,8 +1156,8 @@ mod tests {
let result = shred_variant(&all_null_array, &DataType::Int64).unwrap();
// Should return array with no value/typed_value fields
- assert!(result.value_field().is_none());
- assert!(result.typed_value_field().is_none());
+ assert!(result.value_column().is_none());
+ assert!(result.typed_value_column().is_none());
}
#[test]
@@ -1195,7 +1195,7 @@ mod tests {
// probe the downcasted typed_value array to make sure uuids are
shredded correctly
let uuids = variant_array
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<FixedSizeBinaryArray>()
@@ -1231,7 +1231,7 @@ mod tests {
let result = shred_variant(&input, &target).unwrap();
- let typed_value = result.typed_value_field().unwrap();
+ let typed_value = result.typed_value_column().unwrap();
let typed_struct =
typed_value.as_any().downcast_ref::<StructArray>().unwrap();
let id =
ShreddedVariantFieldArray::try_new(typed_struct.column_by_name("id").unwrap()).unwrap();
@@ -1258,10 +1258,10 @@ mod tests {
let result = shred_variant(&input, &DataType::Int64).unwrap();
// Verify structure
- let metadata_field = result.metadata_field();
- let value_field = result.value_field().unwrap();
+ let metadata_field = result.metadata_column();
+ let value_field = result.value_column().unwrap();
let typed_value_field = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Int64Array>()
@@ -1320,7 +1320,7 @@ mod tests {
// Test Int32 target
let result_int32 = shred_variant(&input, &DataType::Int32).unwrap();
let typed_value_int32 = result_int32
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::Int32Array>()
@@ -1332,7 +1332,7 @@ mod tests {
// Test Float64 target
let result_float64 = shred_variant(&input,
&DataType::Float64).unwrap();
let typed_value_float64 = result_float64
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Float64Array>()
@@ -1353,10 +1353,10 @@ mod tests {
]);
let result = shred_variant(&input, &DataType::LargeUtf8).unwrap();
- let metadata = result.metadata_field();
- let value = result.value_field().unwrap();
+ let metadata = result.metadata_column();
+ let value = result.value_column().unwrap();
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<LargeStringArray>()
@@ -1409,10 +1409,10 @@ mod tests {
]);
let result = shred_variant(&input, &DataType::LargeBinary).unwrap();
- let metadata = result.metadata_field();
- let value = result.value_field().unwrap();
+ let metadata = result.metadata_column();
+ let value = result.value_column().unwrap();
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<LargeBinaryArray>()
@@ -1660,23 +1660,23 @@ mod tests {
// The first row should be shredded, so the `value` field should be
null and the
// `typed_value` field should contain the list
assert!(result.is_valid(0));
- assert!(result.value_field().unwrap().is_null(0));
- assert!(result.typed_value_field().unwrap().is_valid(0));
+ assert!(result.value_column().unwrap().is_null(0));
+ assert!(result.typed_value_column().unwrap().is_valid(0));
// The second row should not be shredded because the provided schema
for shredding did not
// match. Hence, the `value` field should contain the raw value and
the `typed_value` field
// should be null.
assert!(result.is_valid(1));
- assert!(result.value_field().unwrap().is_valid(1));
- assert!(result.typed_value_field().unwrap().is_null(1));
+ assert!(result.value_column().unwrap().is_valid(1));
+ assert!(result.typed_value_column().unwrap().is_null(1));
// The third row should be shredded, so the `value` field should be
null and the
// `typed_value` field should contain the list
assert!(result.is_valid(2));
- assert!(result.value_field().unwrap().is_null(2));
- assert!(result.typed_value_field().unwrap().is_valid(2));
+ assert!(result.value_column().unwrap().is_null(2));
+ assert!(result.typed_value_column().unwrap().is_valid(2));
- let typed_value = result.typed_value_field().unwrap();
+ let typed_value = result.typed_value_column().unwrap();
let fixed_size_list = typed_value
.as_any()
.downcast_ref::<FixedSizeListArray>()
@@ -1758,7 +1758,7 @@ mod tests {
assert_eq!(result.len(), 4);
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<ListArray>()
@@ -1776,12 +1776,12 @@ mod tests {
ShreddedVariantFieldArray::try_new(typed_value.values().as_ref()).unwrap();
assert_eq!(outer_elements.len(), 6);
let outer_values = outer_elements
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<ListArray>()
.unwrap();
- let outer_fallbacks = outer_elements.value_field().unwrap();
+ let outer_fallbacks = outer_elements.value_column().unwrap();
let outer_metadata =
Arc::new(BinaryViewArray::from_iter_values(std::iter::repeat_n(
EMPTY_VARIANT_METADATA_BYTES,
@@ -1862,7 +1862,7 @@ mod tests {
// Validate nested struct fields for each element
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<ListArray>()
@@ -1871,7 +1871,7 @@ mod tests {
ShreddedVariantFieldArray::try_new(typed_value.values().as_ref()).unwrap();
assert_eq!(element_array.len(), 2);
let element_objects = element_array
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StructArray>()
@@ -1881,9 +1881,9 @@ mod tests {
let id_field =
ShreddedVariantFieldArray::try_new(element_objects.column_by_name("id").unwrap())
.unwrap();
- let id_values = id_field.value_field().unwrap();
+ let id_values = id_field.value_column().unwrap();
let id_typed_values = id_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Int64Array>()
@@ -1905,9 +1905,9 @@ mod tests {
let name_field =
ShreddedVariantFieldArray::try_new(element_objects.column_by_name("name").unwrap())
.unwrap();
- let name_values = name_field.value_field().unwrap();
+ let name_values = name_field.value_column().unwrap();
let name_typed_values = name_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<StringArray>()
@@ -1965,14 +1965,14 @@ mod tests {
let result = shred_variant(&input, &target_schema).unwrap();
// Verify structure
- assert!(result.value_field().is_some());
- assert!(result.typed_value_field().is_some());
+ assert!(result.value_column().is_some());
+ assert!(result.typed_value_column().is_some());
assert_eq!(result.len(), 9);
- let metadata = result.metadata_field();
- let value = result.value_field().unwrap();
+ let metadata = result.metadata_column();
+ let value = result.value_column().unwrap();
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StructArray>()
@@ -1985,16 +1985,16 @@ mod tests {
let age_field =
ShreddedVariantFieldArray::try_new(typed_value.column_by_name("age").unwrap()).unwrap();
- let score_value = score_field.value_field().unwrap();
+ let score_value = score_field.value_column().unwrap();
let score_typed_value = score_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Float64Array>()
.unwrap();
- let age_value = age_field.value_field().unwrap();
+ let age_value = age_field.value_column().unwrap();
let age_typed_value = age_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Int64Array>()
@@ -2295,9 +2295,9 @@ mod tests {
assert_eq!(result.len(), 5);
// Access base value/typed_value columns
- let value_field = result.value_field().unwrap();
+ let value_field = result.value_column().unwrap();
let typed_struct = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StructArray>()
@@ -2309,7 +2309,7 @@ mod tests {
assert!(value_field.is_null(2));
assert!(value_field.is_valid(3));
assert_eq!(
- variant_from_arrays_at(result.metadata_field(), value_field,
3).unwrap(),
+ variant_from_arrays_at(result.metadata_column(), value_field,
3).unwrap(),
Variant::from("not an object")
);
assert!(value_field.is_null(4));
@@ -2331,8 +2331,8 @@ mod tests {
EMPTY_VARIANT_METADATA_BYTES,
scores_field.len(),
))),
- Some(scores_field.value_field().unwrap().clone()),
- Some(scores_field.typed_value_field().unwrap().clone()),
+ Some(scores_field.value_column().unwrap().clone()),
+ Some(scores_field.typed_value_column().unwrap().clone()),
None,
),
scores_field.len(),
@@ -2360,7 +2360,7 @@ mod tests {
.with_path("id", &DataType::Int32)?
.build();
let result1 = shred_variant(&input, &schema1).unwrap();
- let value_field1 = result1.value_field().unwrap();
+ let value_field1 = result1.value_column().unwrap();
assert!(!value_field1.is_null(0)); // should contain {"age": 25,
"score": 95.5}
// Test with schema containing id and age fields
@@ -2369,7 +2369,7 @@ mod tests {
.with_path("age", &DataType::Int64)?
.build();
let result2 = shred_variant(&input, &schema2).unwrap();
- let value_field2 = result2.value_field().unwrap();
+ let value_field2 = result2.value_column().unwrap();
assert!(!value_field2.is_null(0)); // should contain {"score": 95.5}
// Test with schema containing all fields
@@ -2379,7 +2379,7 @@ mod tests {
.with_path("score", &DataType::Float64)?
.build();
let result3 = shred_variant(&input, &schema3).unwrap();
- let value_field3 = result3.value_field().unwrap();
+ let value_field3 = result3.value_column().unwrap();
assert!(value_field3.is_null(0)); // fully shredded, no remaining
fields
Ok(())
@@ -2426,14 +2426,14 @@ mod tests {
let result = shred_variant(&input, &target_schema).unwrap();
- assert!(result.value_field().is_some());
- assert!(result.typed_value_field().is_some());
+ assert!(result.value_column().is_some());
+ assert!(result.typed_value_column().is_some());
assert_eq!(result.len(), 6);
- let metadata = result.metadata_field();
- let value = result.value_field().unwrap();
+ let metadata = result.metadata_column();
+ let value = result.value_column().unwrap();
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StructArray>()
@@ -2446,16 +2446,16 @@ mod tests {
ShreddedVariantFieldArray::try_new(typed_value.column_by_name("session_id").unwrap())
.unwrap();
- let id_value = id_field.value_field().unwrap();
+ let id_value = id_field.value_column().unwrap();
let id_typed_value = id_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<FixedSizeBinaryArray>()
.unwrap();
- let session_id_value = session_id_field.value_field().unwrap();
+ let session_id_value = session_id_field.value_column().unwrap();
let session_id_typed_value = session_id_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<FixedSizeBinaryArray>()
@@ -2559,21 +2559,27 @@ mod tests {
assert!(inner_struct.column_by_name("typed_value").is_some());
// Test metadata preservation
- assert_eq!(result.metadata_field().len(),
input.metadata_field().len());
+ assert_eq!(
+ result.metadata_column().len(),
+ input.metadata_column().len()
+ );
// The metadata should be the same reference (cheap clone)
// Note: BinaryViewArray doesn't have a .values() method, so we
compare the arrays directly
- assert_eq!(result.metadata_field().len(),
input.metadata_field().len());
+ assert_eq!(
+ result.metadata_column().len(),
+ input.metadata_column().len()
+ );
// Test output structure correctness
assert_eq!(result.len(), input.len());
- assert!(result.value_field().is_some());
- assert!(result.typed_value_field().is_some());
+ assert!(result.value_column().is_some());
+ assert!(result.typed_value_column().is_some());
// For primitive shredding, verify that value and typed_value are
never both non-null
// (This rule applies to primitives; for objects, both can be non-null
for partial shredding)
- let value_field = result.value_field().unwrap();
+ let value_field = result.value_column().unwrap();
let typed_value_field = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Int64Array>()
@@ -2734,10 +2740,10 @@ mod tests {
);
assert_eq!(result.len(), 3);
- assert!(result.typed_value_field().is_some());
+ assert!(result.typed_value_column().is_some());
let typed_value = result
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StructArray>()
@@ -2751,13 +2757,13 @@ mod tests {
.unwrap();
let time_typed = time_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<Int64Array>()
.unwrap();
let hostname_typed = hostname_field
- .typed_value_field()
+ .typed_value_column()
.unwrap()
.as_any()
.downcast_ref::<arrow::array::StringArray>()
diff --git a/parquet-variant-compute/src/unshred_variant.rs
b/parquet-variant-compute/src/unshred_variant.rs
index f4bfa73bde..30f861ce1e 100644
--- a/parquet-variant-compute/src/unshred_variant.rs
+++ b/parquet-variant-compute/src/unshred_variant.rs
@@ -59,7 +59,7 @@ use uuid::Uuid;
/// - If unsupported data types are encountered in typed_value columns
pub fn unshred_variant(array: &VariantArray) -> Result<VariantArray> {
// Check if already unshredded (optimization for common case)
- if array.typed_value_field().is_none() && array.value_field().is_some() {
+ if array.typed_value_column().is_none() && array.value_column().is_some() {
return Ok(array.clone());
}
@@ -69,7 +69,7 @@ pub fn unshred_variant(array: &VariantArray) ->
Result<VariantArray> {
let mut row_builder = UnshredVariantRowBuilder::try_new_opt(array.inner())?
.unwrap_or_else(UnshredVariantRowBuilder::null);
- let metadata = array.metadata_field();
+ let metadata = array.metadata_column();
let mut value_builder = VariantValueArrayBuilder::new(array.len());
for i in 0..array.len() {
if array.is_null(i) {
diff --git a/parquet-variant-compute/src/variant_array.rs
b/parquet-variant-compute/src/variant_array.rs
index d773fe475d..82cda7867f 100644
--- a/parquet-variant-compute/src/variant_array.rs
+++ b/parquet-variant-compute/src/variant_array.rs
@@ -396,7 +396,7 @@ impl VariantArray {
/// Note: Does not do deep validation of the [`Variant`], so it is up to
the
/// caller to ensure that the metadata and value were constructed
correctly.
pub fn try_value(&self, index: usize) -> Result<Variant<'_, '_>> {
- match (self.typed_value_field(), self.value_field()) {
+ match (self.typed_value_column(), self.value_column()) {
// Always prefer typed_value, if available
(Some(typed_value), value) if typed_value.is_valid(index) => {
typed_value_to_variant(typed_value, value, index)
@@ -420,19 +420,19 @@ impl VariantArray {
}
}
- /// Return a reference to the metadata field of the [`StructArray`]
- pub fn metadata_field(&self) -> &ArrayRef {
+ /// Return a reference to the `metadata` column of the [`StructArray`]
+ pub fn metadata_column(&self) -> &ArrayRef {
&self.metadata
}
- /// Return a reference to the value field of the `StructArray`
- pub fn value_field(&self) -> Option<&ArrayRef> {
- self.shredding_state.value_field()
+ /// Return a reference to the `value` column of the [`StructArray`], if
present
+ pub fn value_column(&self) -> Option<&ArrayRef> {
+ self.shredding_state.value_column()
}
- /// Return a reference to the typed_value field of the `StructArray`, if
present
- pub fn typed_value_field(&self) -> Option<&ArrayRef> {
- self.shredding_state.typed_value_field()
+ /// Return a reference to the `typed_value` column of the [`StructArray`],
if present
+ pub fn typed_value_column(&self) -> Option<&ArrayRef> {
+ self.shredding_state.typed_value_column()
}
/// Return a field to represent this VariantArray in a `Schema` with
@@ -688,14 +688,14 @@ impl ShreddedVariantFieldArray {
&self.shredding_state
}
- /// Return a reference to the value field of the `StructArray`
- pub fn value_field(&self) -> Option<&ArrayRef> {
- self.shredding_state.value_field()
+ /// Return a reference to the `value` column of the [`StructArray`], if
present
+ pub fn value_column(&self) -> Option<&ArrayRef> {
+ self.shredding_state.value_column()
}
- /// Return a reference to the typed_value field of the `StructArray`, if
present
- pub fn typed_value_field(&self) -> Option<&ArrayRef> {
- self.shredding_state.typed_value_field()
+ /// Return a reference to the `typed_value` column of the [`StructArray`],
if present
+ pub fn typed_value_column(&self) -> Option<&ArrayRef> {
+ self.shredding_state.typed_value_column()
}
/// Returns a reference to the underlying [`StructArray`].
@@ -833,13 +833,13 @@ impl ShreddingState {
Self { value, typed_value }
}
- /// Return a reference to the value field, if present
- pub fn value_field(&self) -> Option<&ArrayRef> {
+ /// Return a reference to the `value` column, if present
+ pub fn value_column(&self) -> Option<&ArrayRef> {
self.value.as_ref()
}
- /// Return a reference to the typed_value field, if present
- pub fn typed_value_field(&self) -> Option<&ArrayRef> {
+ /// Return a reference to the `typed_value` column, if present
+ pub fn typed_value_column(&self) -> Option<&ArrayRef> {
self.typed_value.as_ref()
}
@@ -1393,7 +1393,7 @@ mod test {
// typed_value (struct) -> id (struct) -> typed_value (the
FixedSizeBinary(16) UUID leaf).
let variant_array = VariantArray::try_new(&input).unwrap();
- let object = variant_array.typed_value_field().unwrap().as_struct();
+ let object = variant_array.typed_value_column().unwrap().as_struct();
let id = object.column_by_name("id").unwrap().as_struct();
let uuid_leaf = id.field_by_name("typed_value").unwrap();
assert!(uuid_leaf.has_valid_extension_type::<UuidExtension>());
@@ -1554,7 +1554,7 @@ mod test {
let input =
make_variant_struct_with_typed_value(typed_value.clone());
let variant_array = VariantArray::try_new(&input).unwrap();
assert_eq!(
- variant_array.typed_value_field().unwrap().data_type(),
+ variant_array.typed_value_column().unwrap().data_type(),
typed_value.data_type(),
);
}
diff --git a/parquet-variant-compute/src/variant_array_builder.rs
b/parquet-variant-compute/src/variant_array_builder.rs
index e669277f1d..4c7340a0fb 100644
--- a/parquet-variant-compute/src/variant_array_builder.rs
+++ b/parquet-variant-compute/src/variant_array_builder.rs
@@ -492,8 +492,8 @@ mod test {
assert_eq!(variant_array.value(1), Variant::from(42i32));
// the metadata and value fields of non shredded variants should not
be null
- assert!(variant_array.metadata_field().nulls().is_none());
- assert!(variant_array.value_field().unwrap().nulls().is_none());
+ assert!(variant_array.metadata_column().nulls().is_none());
+ assert!(variant_array.value_column().unwrap().nulls().is_none());
let DataType::Struct(fields) = variant_array.data_type() else {
panic!("Expected VariantArray to have Struct data type");
};
@@ -638,7 +638,7 @@ mod test {
.finish();
let array2 = VariantArray::from_parts(
- array.metadata_field().clone(),
+ array.metadata_column().clone(),
Some(Arc::new(value_builder.build().unwrap())),
None,
None,
diff --git a/parquet-variant-compute/src/variant_get.rs
b/parquet-variant-compute/src/variant_get.rs
index c3e9159935..0caef50759 100644
--- a/parquet-variant-compute/src/variant_get.rs
+++ b/parquet-variant-compute/src/variant_get.rs
@@ -67,8 +67,8 @@ fn take_list_like_index_as_shredding_state<L: ListLikeArray +
'static>(
};
let shredding_state = ShreddingState::try_from(struct_array)?;
- let value_array = shredding_state.value_field();
- let typed_array = shredding_state.typed_value_field();
+ let value_array = shredding_state.value_column();
+ let typed_array = shredding_state.typed_value_column();
// If list elements have neither typed nor fallback value, this path step
is missing.
if value_array.is_none() && typed_array.is_none() {
@@ -117,12 +117,12 @@ pub(crate) fn follow_shredded_path_element(
) -> Result<ShreddedPathStep> {
// If the requested path element is not present in `typed_value`, and
`value` is missing, then
// we know it does not exist; it, and all paths under it, are all-NULL.
- let missing_path_step = || match shredding_state.value_field() {
+ let missing_path_step = || match shredding_state.value_column() {
Some(_) => ShreddedPathStep::NotShredded,
None => ShreddedPathStep::Missing,
};
- let Some(typed_value) = shredding_state.typed_value_field() else {
+ let Some(typed_value) = shredding_state.typed_value_column() else {
return Ok(missing_path_step());
};
@@ -197,7 +197,7 @@ fn shredded_get_path(
|value: Option<ArrayRef>,
typed_value: Option<ArrayRef>,
accumulated_nulls: Option<NullBuffer>| {
- let metadata = input.metadata_field().clone();
+ let metadata = input.metadata_column().clone();
VariantArray::from_parts(metadata, value, typed_value,
accumulated_nulls)
};
@@ -206,7 +206,7 @@ fn shredded_get_path(
|target: VariantArray, path: VariantPath<'_>, as_field:
Option<&Field>| {
let as_type = as_field.map(|f| f.data_type());
let mut builder = make_variant_to_arrow_row_builder(
- target.metadata_field(),
+ target.metadata_column(),
path,
as_type,
cast_options,
@@ -240,7 +240,7 @@ fn shredded_get_path(
match follow_shredded_path_element(&shredding_state, path_element,
cast_options)? {
ShreddedPathStep::Success(state) => {
// Union nulls from the typed_value we just accessed
- if let Some(typed_value) = shredding_state.typed_value_field()
{
+ if let Some(typed_value) =
shredding_state.typed_value_column() {
accumulated_nulls =
NullBuffer::union(accumulated_nulls.as_ref(),
typed_value.nulls());
}
@@ -258,7 +258,7 @@ fn shredded_get_path(
}
ShreddedPathStep::NotShredded => {
let target = make_target_variant(
- shredding_state.value_field().cloned(),
+ shredding_state.value_column().cloned(),
None,
accumulated_nulls,
);
@@ -269,8 +269,8 @@ fn shredded_get_path(
// Path exhausted! Create a new `VariantArray` for the location we landed
on.
let target = make_target_variant(
- shredding_state.value_field().cloned(),
- shredding_state.typed_value_field().cloned(),
+ shredding_state.value_column().cloned(),
+ shredding_state.typed_value_column().cloned(),
accumulated_nulls,
);
@@ -294,7 +294,7 @@ fn shredded_get_path(
// For shredded/partially-shredded targets (`typed_value` present),
recurse into each field
// separately to take advantage of deeper shredding in child fields.
if let DataType::Struct(fields) = as_field.data_type() {
- if target.typed_value_field().is_none() {
+ if target.typed_value_column().is_none() {
return shred_basic_variant(target, VariantPath::default(),
Some(as_field));
}
@@ -328,11 +328,11 @@ fn try_perfect_shredding(variant_array: &VariantArray,
as_field: &Field) -> Opti
if matches!(as_field.data_type(), DataType::Struct(_)) {
return None;
}
- let typed_value = variant_array.typed_value_field()?;
+ let typed_value = variant_array.typed_value_column()?;
if typed_value.data_type() == as_field.data_type()
&& variant_array
- .value_field()
+ .value_column()
.is_none_or(|v| v.null_count() == v.len())
{
// Here we need to gate against the case where the `typed_value` is
null but data is in the `value` column.
@@ -4356,7 +4356,7 @@ mod test {
let variant_array = perfectly_shredded_int32_variant_array();
let variant_array_ref = VariantArray::try_new(&variant_array).unwrap();
- let typed_value_arc =
variant_array_ref.typed_value_field().unwrap().clone();
+ let typed_value_arc =
variant_array_ref.typed_value_column().unwrap().clone();
let field = Field::new("result", DataType::Int32, true);
let options =
GetOptions::new().with_as_type(Some(FieldRef::from(field)));