Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions parquet-variant-compute/src/type_conversion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -30,6 +33,47 @@ impl Default for CastOptions {
}
}

/// Helper trait for converting `Variant` values to arrow primitive values.
pub(crate) trait VariantAsPrimitive<T: ArrowPrimitiveType> {
fn as_primitive(&self) -> Option<T::Native>;
}

impl VariantAsPrimitive<datatypes::Int32Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i32> {
self.as_int32()
}
}
impl VariantAsPrimitive<datatypes::Int16Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i16> {
self.as_int16()
}
}
impl VariantAsPrimitive<datatypes::Int8Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i8> {
self.as_int8()
}
}
impl VariantAsPrimitive<datatypes::Int64Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i64> {
self.as_int64()
}
}
impl VariantAsPrimitive<datatypes::Float16Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<half::f16> {
self.as_f16()
}
}
impl VariantAsPrimitive<datatypes::Float32Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<f32> {
self.as_f32()
}
}
impl VariantAsPrimitive<datatypes::Float64Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<f64> {
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) => {{
Expand Down
42 changes: 1 addition & 41 deletions parquet-variant-compute/src/variant_get/output/row_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -211,47 +212,6 @@ impl<T: VariantShreddingRowBuilder> VariantShreddingRowBuilder for VariantPathRo
}
}

/// Helper trait for converting `Variant` values to arrow primitive values.
trait VariantAsPrimitive<T: ArrowPrimitiveType> {
fn as_primitive(&self) -> Option<T::Native>;
}

impl VariantAsPrimitive<datatypes::Int32Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i32> {
self.as_int32()
}
}
impl VariantAsPrimitive<datatypes::Int16Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i16> {
self.as_int16()
}
}
impl VariantAsPrimitive<datatypes::Int8Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i8> {
self.as_int8()
}
}
impl VariantAsPrimitive<datatypes::Int64Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<i64> {
self.as_int64()
}
}
impl VariantAsPrimitive<datatypes::Float16Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<half::f16> {
self.as_f16()
}
}
impl VariantAsPrimitive<datatypes::Float32Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<f32> {
self.as_f32()
}
}
impl VariantAsPrimitive<datatypes::Float64Type> for Variant<'_, '_> {
fn as_primitive(&self) -> Option<f64> {
self.as_f64()
}
}

/// Helper function to get a user-friendly type name
fn get_type_name<T: ArrowPrimitiveType>() -> &'static str {
match std::any::type_name::<T>() {
Expand Down
Loading