|
16 | 16 | // under the License. |
17 | 17 |
|
18 | 18 | use arrow::array::{ |
19 | | - ArrayRef, BinaryViewArray, BooleanBuilder, FixedSizeBinaryBuilder, LargeStringBuilder, |
20 | | - NullArray, NullBufferBuilder, PrimitiveBuilder, StringBuilder, StringLikeArrayBuilder, |
21 | | - StringViewBuilder, |
| 19 | + ArrayRef, BinaryLikeArrayBuilder, BinaryViewArray, BinaryViewBuilder, BooleanBuilder, |
| 20 | + FixedSizeBinaryBuilder, GenericByteBuilder, LargeStringBuilder, NullArray, NullBufferBuilder, |
| 21 | + PrimitiveBuilder, StringBuilder, StringLikeArrayBuilder, StringViewBuilder, |
22 | 22 | }; |
23 | 23 | use arrow::compute::{CastOptions, DecimalCast}; |
24 | | -use arrow::datatypes::{self, DataType, DecimalType}; |
| 24 | +use arrow::datatypes::{self, BinaryType, DataType, DecimalType, LargeBinaryType}; |
25 | 25 | use arrow::error::{ArrowError, Result}; |
26 | 26 | use parquet_variant::{Variant, VariantPath}; |
27 | 27 |
|
@@ -66,6 +66,9 @@ pub(crate) enum PrimitiveVariantToArrowRowBuilder<'a> { |
66 | 66 | String(VariantToStringArrowBuilder<'a, StringBuilder>), |
67 | 67 | LargeString(VariantToStringArrowBuilder<'a, LargeStringBuilder>), |
68 | 68 | StringView(VariantToStringArrowBuilder<'a, StringViewBuilder>), |
| 69 | + Binary(VariantToBinaryArrowRowBuilder<'a, GenericByteBuilder<BinaryType>>), |
| 70 | + LargeBinary(VariantToBinaryArrowRowBuilder<'a, GenericByteBuilder<LargeBinaryType>>), |
| 71 | + BinaryView(VariantToBinaryArrowRowBuilder<'a, BinaryViewBuilder>), |
69 | 72 | } |
70 | 73 |
|
71 | 74 | /// Builder for converting variant values into strongly typed Arrow arrays. |
@@ -111,6 +114,9 @@ impl<'a> PrimitiveVariantToArrowRowBuilder<'a> { |
111 | 114 | String(b) => b.append_null(), |
112 | 115 | LargeString(b) => b.append_null(), |
113 | 116 | StringView(b) => b.append_null(), |
| 117 | + Binary(b) => b.append_null(), |
| 118 | + LargeBinary(b) => b.append_null(), |
| 119 | + BinaryView(b) => b.append_null(), |
114 | 120 | } |
115 | 121 | } |
116 | 122 |
|
@@ -144,6 +150,9 @@ impl<'a> PrimitiveVariantToArrowRowBuilder<'a> { |
144 | 150 | String(b) => b.append_value(value), |
145 | 151 | LargeString(b) => b.append_value(value), |
146 | 152 | StringView(b) => b.append_value(value), |
| 153 | + Binary(b) => b.append_value(value), |
| 154 | + LargeBinary(b) => b.append_value(value), |
| 155 | + BinaryView(b) => b.append_value(value), |
147 | 156 | } |
148 | 157 | } |
149 | 158 |
|
@@ -177,6 +186,9 @@ impl<'a> PrimitiveVariantToArrowRowBuilder<'a> { |
177 | 186 | String(b) => b.finish(), |
178 | 187 | LargeString(b) => b.finish(), |
179 | 188 | StringView(b) => b.finish(), |
| 189 | + Binary(b) => b.finish(), |
| 190 | + LargeBinary(b) => b.finish(), |
| 191 | + BinaryView(b) => b.finish(), |
180 | 192 | } |
181 | 193 | } |
182 | 194 | } |
@@ -322,6 +334,13 @@ pub(crate) fn make_primitive_variant_to_arrow_row_builder<'a>( |
322 | 334 | LargeString(VariantToStringArrowBuilder::new(cast_options, capacity)) |
323 | 335 | } |
324 | 336 | DataType::Utf8View => StringView(VariantToStringArrowBuilder::new(cast_options, capacity)), |
| 337 | + DataType::Binary => Binary(VariantToBinaryArrowRowBuilder::new(cast_options, capacity)), |
| 338 | + DataType::LargeBinary => { |
| 339 | + LargeBinary(VariantToBinaryArrowRowBuilder::new(cast_options, capacity)) |
| 340 | + } |
| 341 | + DataType::BinaryView => { |
| 342 | + BinaryView(VariantToBinaryArrowRowBuilder::new(cast_options, capacity)) |
| 343 | + } |
325 | 344 | _ if data_type.is_primitive() => { |
326 | 345 | return Err(ArrowError::NotYetImplemented(format!( |
327 | 346 | "Primitive data_type {data_type:?} not yet implemented" |
@@ -506,6 +525,13 @@ define_variant_to_primitive_builder!( |
506 | 525 | type_name: T::DATA_TYPE |
507 | 526 | ); |
508 | 527 |
|
| 528 | +define_variant_to_primitive_builder!( |
| 529 | + struct VariantToBinaryArrowRowBuilder<'a, B: BinaryLikeArrayBuilder> |
| 530 | + |capacity| -> B { B::with_capacity(capacity) }, |
| 531 | + |value| value.as_u8_slice(), |
| 532 | + type_name: B::type_name() |
| 533 | +); |
| 534 | + |
509 | 535 | /// Builder for converting variant values to arrow Decimal values |
510 | 536 | pub(crate) struct VariantToDecimalArrowRowBuilder<'a, T> |
511 | 537 | where |
|
0 commit comments