Skip to content

Commit 85eabb0

Browse files
committed
feat: Used object
1 parent 5563b27 commit 85eabb0

File tree

1 file changed

+20
-29
lines changed

1 file changed

+20
-29
lines changed

parquet-variant-compute/src/cast_to_variant.rs

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -538,9 +538,9 @@ pub fn cast_to_variant(input: &dyn Array) -> Result<VariantArray, ArrowError> {
538538
DataType::Map(field, _) => {
539539
match field.data_type() {
540540
DataType::Struct(_) => {
541-
// Get the struct array for the map entries
542541
let map_array = input.as_map();
543-
let entries = cast_to_variant(map_array.entries())?;
542+
let keys = cast_to_variant(map_array.keys())?;
543+
let values = cast_to_variant(map_array.values())?;
544544
let offsets = map_array.offsets();
545545

546546
let mut start_offset = offsets[0];
@@ -553,13 +553,14 @@ pub fn cast_to_variant(input: &dyn Array) -> Result<VariantArray, ArrowError> {
553553
let length = (end_offset - start_offset) as usize;
554554

555555
let mut tmp_builder = VariantBuilder::new();
556-
let mut list_builder = tmp_builder.new_list();
556+
let mut object_builder = tmp_builder.new_object();
557557

558558
for i in start_offset..*end_offset {
559-
let value = entries.value(i as usize);
560-
list_builder.append_value(value);
559+
let value = values.value(i as usize);
560+
object_builder
561+
.insert(keys.value(i as usize).as_string().unwrap(), value);
561562
}
562-
list_builder.finish();
563+
object_builder.finish()?;
563564
let (metadata, value) = tmp_builder.finish();
564565
let variant = Variant::try_new(&metadata, &value).unwrap();
565566

@@ -627,7 +628,13 @@ fn process_run_end_encoded<R: RunEndIndexType>(
627628
mod tests {
628629
use super::*;
629630
use arrow::array::{
630-
ArrayRef, BinaryArray, BooleanArray, Date32Array, Date64Array, Decimal128Array, Decimal256Array, Decimal32Array, Decimal64Array, DictionaryArray, FixedSizeBinaryBuilder, Float16Array, Float32Array, Float64Array, GenericByteBuilder, GenericByteViewBuilder, Int16Array, Int32Array, Int64Array, Int8Array, IntervalYearMonthArray, LargeStringArray, MapArray, NullArray, StringArray, StringRunBuilder, StringViewArray, StructArray, Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray, UInt16Array, UInt32Array, UInt64Array, UInt8Array
631+
ArrayRef, BinaryArray, BooleanArray, Date32Array, Date64Array, Decimal128Array,
632+
Decimal256Array, Decimal32Array, Decimal64Array, DictionaryArray, FixedSizeBinaryBuilder,
633+
Float16Array, Float32Array, Float64Array, GenericByteBuilder, GenericByteViewBuilder,
634+
Int16Array, Int32Array, Int64Array, Int8Array, IntervalYearMonthArray, LargeStringArray,
635+
MapArray, NullArray, StringArray, StringRunBuilder, StringViewArray, StructArray,
636+
Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray,
637+
UInt16Array, UInt32Array, UInt64Array, UInt8Array,
631638
};
632639
use arrow::buffer::NullBuffer;
633640
use arrow_schema::{Field, Fields};
@@ -2029,38 +2036,22 @@ mod tests {
20292036
let result = cast_to_variant(&map_array).unwrap();
20302037
// [{"key1":1}]
20312038
let variant1 = result.value(0);
2032-
let item = variant1.as_list().unwrap().get(0).unwrap();
20332039
assert_eq!(
2034-
item.as_object().unwrap().get("keys").unwrap(),
2035-
Variant::from("key1")
2036-
);
2037-
assert_eq!(
2038-
item.as_object().unwrap().get("values").unwrap(),
2039-
Variant::from(1i32)
2040+
variant1.as_object().unwrap().get("key1").unwrap(),
2041+
Variant::from(1)
20402042
);
20412043

20422044
assert!(result.is_null(1)); // Second row is null
20432045

20442046
// [{"key2":2},{"key3":3}]
20452047
let variant2 = result.value(2);
2046-
let item = variant2.as_list().unwrap().get(0).unwrap();
2047-
assert_eq!(
2048-
item.as_object().unwrap().get("keys").unwrap(),
2049-
Variant::from("key2")
2050-
);
2051-
assert_eq!(
2052-
item.as_object().unwrap().get("values").unwrap(),
2053-
Variant::from(2i32)
2054-
);
2055-
2056-
let item = variant2.as_list().unwrap().get(1).unwrap();
20572048
assert_eq!(
2058-
item.as_object().unwrap().get("keys").unwrap(),
2059-
Variant::from("key3")
2049+
variant2.as_object().unwrap().get("key2").unwrap(),
2050+
Variant::from(2)
20602051
);
20612052
assert_eq!(
2062-
item.as_object().unwrap().get("values").unwrap(),
2063-
Variant::from(3i32)
2053+
variant2.as_object().unwrap().get("key3").unwrap(),
2054+
Variant::from(3)
20642055
);
20652056
}
20662057

0 commit comments

Comments
 (0)