From 13baf67d1997b88b16845d99f6b3061a096acda5 Mon Sep 17 00:00:00 2001 From: feniljain Date: Mon, 11 Aug 2025 23:37:26 +0530 Subject: [PATCH] feat(variant): add DataType::Null support to cast_to_variant --- parquet-variant-compute/src/cast_to_variant.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/parquet-variant-compute/src/cast_to_variant.rs b/parquet-variant-compute/src/cast_to_variant.rs index 446baf30384c..abfd434ec5e4 100644 --- a/parquet-variant-compute/src/cast_to_variant.rs +++ b/parquet-variant-compute/src/cast_to_variant.rs @@ -134,6 +134,11 @@ pub fn cast_to_variant(input: &dyn Array) -> Result { DataType::Float64 => { primitive_conversion!(Float64Type, input, builder); } + DataType::Null => { + for _ in 0..input.len() { + builder.append_null(); + } + } dt => { return Err(ArrowError::CastError(format!( "Unsupported data type for casting to Variant: {dt:?}", @@ -152,8 +157,8 @@ mod tests { use super::*; use arrow::array::{ ArrayRef, Float16Array, Float32Array, Float64Array, GenericByteBuilder, - GenericByteViewBuilder, Int16Array, Int32Array, Int64Array, Int8Array, UInt16Array, - UInt32Array, UInt64Array, UInt8Array, + GenericByteViewBuilder, Int16Array, Int32Array, Int64Array, Int8Array, NullArray, + UInt16Array, UInt32Array, UInt64Array, UInt8Array, }; use parquet_variant::{Variant, VariantDecimal16}; use std::sync::Arc; @@ -441,6 +446,11 @@ mod tests { ) } + #[test] + fn test_cast_to_variant_null() { + run_test(Arc::new(NullArray::new(2)), vec![None, None]) + } + /// Converts the given `Array` to a `VariantArray` and tests the conversion /// against the expected values. It also tests the handling of nulls by /// setting one element to null and verifying the output.