Skip to content

Commit ff8bc73

Browse files
committed
fix: avro_to_arrow: Handle avro nested nullable struct (union)
Corrects handling of a nullable struct union. Signed-off-by: 🐼 Samrose Ahmed 🐼 <[email protected]>
1 parent 32dfbb0 commit ff8bc73

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

datafusion/core/src/datasource/avro_to_arrow/arrow_array_reader.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,14 +766,20 @@ impl<'a, R: Read> AvroArrowArrayReader<'a, R> {
766766
let len = rows.len();
767767
let num_bytes = bit_util::ceil(len, 8);
768768
let mut null_buffer = MutableBuffer::from_len_zeroed(num_bytes);
769+
let empty_vec = vec![];
769770
let struct_rows = rows
770771
.iter()
771772
.enumerate()
772773
.map(|(i, row)| (i, self.field_lookup(field.name(), row)))
773774
.map(|(i, v)| {
775+
let v = v.map(maybe_resolve_union);
774776
if let Some(Value::Record(value)) = v {
775777
bit_util::set_bit(&mut null_buffer, i);
776778
value
779+
} else if v.is_none() {
780+
&empty_vec
781+
} else if let Some(Value::Null) = v {
782+
&empty_vec
777783
} else {
778784
panic!("expected struct got {v:?}");
779785
}

0 commit comments

Comments
 (0)