Skip to content

Commit 0791631

Browse files
authored
Merge pull request #328 from ion-elgreco/fix/schema_metadata
fix: metadata string conversion
2 parents 1459b30 + c2e525f commit 0791631

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

kernel/src/engine/arrow_conversion.rs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use arrow_schema::{
99
use itertools::Itertools;
1010

1111
use crate::error::Error;
12-
use crate::schema::{ArrayType, DataType, MapType, PrimitiveType, StructField, StructType};
12+
use crate::schema::{
13+
ArrayType, DataType, MapType, MetadataValue, PrimitiveType, StructField, StructType,
14+
};
1315

1416
pub(crate) const LIST_ARRAY_ROOT: &str = "element";
1517
pub(crate) const MAP_ROOT_DEFAULT: &str = "key_value";
@@ -32,7 +34,10 @@ impl TryFrom<&StructField> for ArrowField {
3234
let metadata = f
3335
.metadata()
3436
.iter()
35-
.map(|(key, val)| Ok((key.clone(), serde_json::to_string(val)?)))
37+
.map(|(key, val)| match &val {
38+
&MetadataValue::String(val) => Ok((key.clone(), val.clone())),
39+
_ => Ok((key.clone(), serde_json::to_string(val)?)),
40+
})
3641
.collect::<Result<_, serde_json::Error>>()
3742
.map_err(|err| ArrowError::JsonError(err.to_string()))?;
3843

@@ -250,3 +255,30 @@ impl TryFrom<&ArrowDataType> for DataType {
250255
}
251256
}
252257
}
258+
259+
#[cfg(test)]
260+
mod tests {
261+
use crate::engine::arrow_conversion::ArrowField;
262+
use crate::{
263+
schema::{DataType, StructField},
264+
DeltaResult,
265+
};
266+
use std::collections::HashMap;
267+
268+
#[test]
269+
fn test_metadata_string_conversion() -> DeltaResult<()> {
270+
let mut metadata = HashMap::new();
271+
metadata.insert("description", "hello world".to_owned());
272+
let struct_field =
273+
StructField::new("name", DataType::STRING, false).with_metadata(metadata);
274+
275+
let arrow_field = ArrowField::try_from(&struct_field)?;
276+
let new_metadata = arrow_field.metadata();
277+
278+
assert_eq!(
279+
new_metadata.get("description").unwrap(),
280+
&"hello world".to_owned()
281+
);
282+
Ok(())
283+
}
284+
}

0 commit comments

Comments
 (0)