From f02a5bd3f3ecc78982dc307beb73ee4b0894b5a1 Mon Sep 17 00:00:00 2001 From: slinkydeveloper Date: Fri, 19 Apr 2024 11:05:03 +0200 Subject: [PATCH 1/2] Add more info to data mismatch error --- arrow_convert/src/deserialize/mod.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arrow_convert/src/deserialize/mod.rs b/arrow_convert/src/deserialize/mod.rs index de5e963..baeba9f 100644 --- a/arrow_convert/src/deserialize/mod.rs +++ b/arrow_convert/src/deserialize/mod.rs @@ -424,9 +424,13 @@ where ::ArrayType: ArrowArrayIterable, { if &::data_type() != arr.data_type() { - Err(arrow::error::ArrowError::InvalidArgumentError( - "Data type mismatch".to_string(), - )) + Err(arrow::error::ArrowError::InvalidArgumentError(format!( + "Data type mismatch. Expected type={} is_nullable={}, but was type={} is_nullable={}", + &::data_type(), + &::is_nullable(), + arr.data_type(), + arr.is_nullable() + ))) } else { Ok(arrow_array_deserialize_iterator_internal::< Element, From 0d52c0d53701b0dd168bb31f0a26ed2e9d96775e Mon Sep 17 00:00:00 2001 From: slinkydeveloper Date: Fri, 19 Apr 2024 11:34:23 +0200 Subject: [PATCH 2/2] Expanded an existing test, plus format using alternative formatting. --- arrow_convert/src/deserialize/mod.rs | 2 +- arrow_convert/tests/test_deserialize.rs | 26 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/arrow_convert/src/deserialize/mod.rs b/arrow_convert/src/deserialize/mod.rs index baeba9f..c58d292 100644 --- a/arrow_convert/src/deserialize/mod.rs +++ b/arrow_convert/src/deserialize/mod.rs @@ -425,7 +425,7 @@ where { if &::data_type() != arr.data_type() { Err(arrow::error::ArrowError::InvalidArgumentError(format!( - "Data type mismatch. Expected type={} is_nullable={}, but was type={} is_nullable={}", + "Data type mismatch. Expected type={:#?} is_nullable={}, but was type={:#?} is_nullable={}", &::data_type(), &::is_nullable(), arr.data_type(), diff --git a/arrow_convert/tests/test_deserialize.rs b/arrow_convert/tests/test_deserialize.rs index c12cef0..cb3f8e4 100644 --- a/arrow_convert/tests/test_deserialize.rs +++ b/arrow_convert/tests/test_deserialize.rs @@ -1,6 +1,7 @@ use arrow::buffer::ScalarBuffer; use arrow::error::Result; use arrow::{array::*, buffer::Buffer}; +use arrow_convert::field::ArrowField; use arrow_convert::{deserialize::*, serialize::*, ArrowDeserialize, ArrowField, ArrowSerialize}; #[test] @@ -31,6 +32,16 @@ fn test_deserialize_iterator() { } } +fn data_mismatch_error() -> arrow::error::ArrowError { + arrow::error::ArrowError::InvalidArgumentError(format!( + "Data type mismatch. Expected type={:#?} is_nullable={}, but was type={:#?} is_nullable={}", + Expected::data_type(), + Expected::is_nullable(), + Actual::data_type(), + Actual::is_nullable() + )) +} + #[test] fn test_deserialize_schema_mismatch_error() { #[derive(Debug, Clone, PartialEq, ArrowField, ArrowSerialize, ArrowDeserialize)] @@ -45,12 +56,18 @@ fn test_deserialize_schema_mismatch_error() { let arr1 = vec![S1 { a: 1 }, S1 { a: 2 }]; let arr1: ArrayRef = arr1.try_into_arrow().unwrap(); let result: Result> = arr1.try_into_collection(); - assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + data_mismatch_error::().to_string() + ); let arr1 = vec![S1 { a: 1 }, S1 { a: 2 }]; let arr1: ArrayRef = arr1.try_into_arrow().unwrap(); let result: Result> = arr1.try_into_collection_as_type::(); - assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + data_mismatch_error::().to_string() + ); } #[test] @@ -76,7 +93,10 @@ fn test_deserialize_large_types_schema_mismatch_error() { let arr1: ArrayRef = arr1.try_into_arrow().unwrap(); let result: Result> = arr1.try_into_collection(); - assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + data_mismatch_error::().to_string() + ); } #[test]