Skip to content

Commit 87340aa

Browse files
committed
empty struct
Signed-off-by: Robert Kruszewski <[email protected]>
1 parent 1efc0f5 commit 87340aa

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

vortex-duckdb/src/convert/vector.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -390,13 +390,20 @@ pub fn flat_vector_to_arrow_array(
390390
flat_vector_to_arrow_array(&mut vector.struct_vector_get_child(idx), len)
391391
})
392392
.collect::<Result<Vec<_>, _>>()?;
393-
Ok(Arc::new(arrow_array::StructArray::try_new(
394-
DType::from_logical_type(vector.logical_type(), Nullability::NonNullable)?
395-
.to_arrow_schema()?
396-
.fields,
397-
children,
398-
vector.validity_ref(len).to_null_buffer(),
399-
)?))
393+
if children.is_empty() {
394+
Ok(Arc::new(arrow_array::StructArray::new_empty_fields(
395+
len,
396+
vector.validity_ref(len).to_null_buffer(),
397+
)))
398+
} else {
399+
Ok(Arc::new(arrow_array::StructArray::try_new(
400+
DType::from_logical_type(vector.logical_type(), Nullability::NonNullable)?
401+
.to_arrow_schema()?
402+
.fields,
403+
children,
404+
vector.validity_ref(len).to_null_buffer(),
405+
)?))
406+
}
400407
}
401408
_ => todo!("missing impl for {type_id:?}"),
402409
}
@@ -756,6 +763,20 @@ mod tests {
756763
);
757764
}
758765

766+
#[test]
767+
fn test_empty_struct() {
768+
let len = 4;
769+
let logical_type = LogicalType::struct_type([], []).vortex_unwrap();
770+
let mut vector = Vector::with_capacity(logical_type, len);
771+
772+
// Test conversion
773+
let result = flat_vector_to_arrow_array(&mut vector, len).unwrap();
774+
let arrow_array = result.as_struct();
775+
776+
assert_eq!(arrow_array.len(), len);
777+
assert_eq!(arrow_array.fields().len(), 0);
778+
}
779+
759780
#[test]
760781
fn test_struct() {
761782
let values1 = vec![1i32, 2, 3, 4];

0 commit comments

Comments
 (0)