diff --git a/parquet-variant-compute/src/type_conversion.rs b/parquet-variant-compute/src/type_conversion.rs index d2a63f49de16..74a17b468528 100644 --- a/parquet-variant-compute/src/type_conversion.rs +++ b/parquet-variant-compute/src/type_conversion.rs @@ -17,6 +17,9 @@ //! Module for transforming a typed arrow `Array` to `VariantArray`. +use arrow::datatypes::{self, ArrowPrimitiveType}; +use parquet_variant::Variant; + /// Options for controlling the behavior of `cast_to_variant_with_options`. #[derive(Debug, Clone, PartialEq, Eq)] pub struct CastOptions { @@ -30,6 +33,47 @@ impl Default for CastOptions { } } +/// Helper trait for converting `Variant` values to arrow primitive values. +pub(crate) trait VariantAsPrimitive { + fn as_primitive(&self) -> Option; +} + +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_int32() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_int16() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_int8() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_int64() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_f16() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_f32() + } +} +impl VariantAsPrimitive for Variant<'_, '_> { + fn as_primitive(&self) -> Option { + self.as_f64() + } +} + /// Convert the value at a specific index in the given array into a `Variant`. macro_rules! non_generic_conversion_single_value { ($array:expr, $cast_fn:expr, $index:expr) => {{ diff --git a/parquet-variant-compute/src/variant_get/output/row_builder.rs b/parquet-variant-compute/src/variant_get/output/row_builder.rs index 787bdd610d81..17136ccb13c0 100644 --- a/parquet-variant-compute/src/variant_get/output/row_builder.rs +++ b/parquet-variant-compute/src/variant_get/output/row_builder.rs @@ -22,6 +22,7 @@ use arrow::datatypes::ArrowPrimitiveType; use arrow::error::{ArrowError, Result}; use parquet_variant::{Variant, VariantPath}; +use crate::type_conversion::VariantAsPrimitive; use crate::VariantArrayBuilder; use std::sync::Arc; @@ -211,47 +212,6 @@ impl VariantShreddingRowBuilder for VariantPathRo } } -/// Helper trait for converting `Variant` values to arrow primitive values. -trait VariantAsPrimitive { - fn as_primitive(&self) -> Option; -} - -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_int32() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_int16() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_int8() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_int64() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_f16() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_f32() - } -} -impl VariantAsPrimitive for Variant<'_, '_> { - fn as_primitive(&self) -> Option { - self.as_f64() - } -} - /// Helper function to get a user-friendly type name fn get_type_name() -> &'static str { match std::any::type_name::() {