diff --git a/crates/iceberg/src/arrow/schema.rs b/crates/iceberg/src/arrow/schema.rs index f96c29ab4a..9b504421ae 100644 --- a/crates/iceberg/src/arrow/schema.rs +++ b/crates/iceberg/src/arrow/schema.rs @@ -762,6 +762,11 @@ pub(crate) fn get_arrow_datum(datum: &Datum) -> Result { + let array = FixedSizeBinaryArray::try_from_iter(std::iter::once(value.as_slice())) + .map_err(|e| Error::new(ErrorKind::DataInvalid, e.to_string()))?; + Ok(Arc::new(Scalar::new(array))) + } (primitive_type, _) => Err(Error::new( ErrorKind::FeatureUnsupported, @@ -2154,6 +2159,18 @@ mod tests { assert!(is_scalar); assert_eq!(array.value(0), [66u8; 16]); } + { + let datum = Datum::fixed(vec![1u8, 2, 3, 4, 5, 6, 7, 8]); + let arrow_datum = get_arrow_datum(&datum).unwrap(); + let (array, is_scalar) = arrow_datum.get(); + let array = array + .as_any() + .downcast_ref::() + .unwrap(); + assert!(is_scalar); + assert_eq!(array.value_length(), 8); + assert_eq!(array.value(0), &[1u8, 2, 3, 4, 5, 6, 7, 8]); + } } #[test]