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);

Reply via email to