This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new b8261629f Improve Schema metadata mismatch error (#2238)
b8261629f is described below
commit b8261629f3d197c5bc40e66a0356a51706ebab96
Author: Andrew Lamb <[email protected]>
AuthorDate: Wed Aug 3 06:05:30 2022 -0400
Improve Schema metadata mismatch error (#2238)
---
arrow/src/datatypes/mod.rs | 22 +++++++++++++++-------
arrow/src/datatypes/schema.rs | 9 +++++----
2 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/arrow/src/datatypes/mod.rs b/arrow/src/datatypes/mod.rs
index c082bc64c..b035a37c8 100644
--- a/arrow/src/datatypes/mod.rs
+++ b/arrow/src/datatypes/mod.rs
@@ -1481,23 +1481,31 @@ mod tests {
.is_err());
// incompatible metadata should throw error
- assert!(Schema::try_merge(vec![
+ let res = Schema::try_merge(vec![
Schema::new_with_metadata(
vec![Field::new("first_name", DataType::Utf8, false)],
- [("foo".to_string(), "bar".to_string()),]
+ [("foo".to_string(), "bar".to_string())]
.iter()
.cloned()
- .collect::<HashMap<String, String>>()
+ .collect::<HashMap<String, String>>(),
),
Schema::new_with_metadata(
vec![Field::new("last_name", DataType::Utf8, false)],
- [("foo".to_string(), "baz".to_string()),]
+ [("foo".to_string(), "baz".to_string())]
.iter()
.cloned()
- .collect::<HashMap<String, String>>()
- )
+ .collect::<HashMap<String, String>>(),
+ ),
])
- .is_err());
+ .unwrap_err();
+
+ let expected = "Fail to merge schema due to conflicting metadata. Key
'foo' has different values 'bar' and 'baz'";
+ assert!(
+ res.to_string().contains(expected),
+ "Could not find expected string '{}' in '{}'",
+ expected,
+ res
+ );
Ok(())
}
diff --git a/arrow/src/datatypes/schema.rs b/arrow/src/datatypes/schema.rs
index f1f28d611..3ab627c68 100644
--- a/arrow/src/datatypes/schema.rs
+++ b/arrow/src/datatypes/schema.rs
@@ -149,10 +149,11 @@ impl Schema {
// merge metadata
if let Some(old_val) = merged.metadata.get(&key) {
if old_val != &value {
- return Err(ArrowError::SchemaError(
- "Fail to merge schema due to conflicting
metadata."
- .to_string(),
- ));
+ return Err(ArrowError::SchemaError(format!(
+ "Fail to merge schema due to conflicting
metadata. \
+ Key '{}' has different values '{}'
and '{}'",
+ key, old_val, value
+ )));
}
}
merged.metadata.insert(key, value);