This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 387490a7a9 fix: mark `DataType::Map` as unsupported in `RowConverter`
(#7880)
387490a7a9 is described below
commit 387490a7a97a9ea6d2fcd0105e6a1abaf819a386
Author: Raz Luvaton <[email protected]>
AuthorDate: Fri Jul 11 15:24:14 2025 +0300
fix: mark `DataType::Map` as unsupported in `RowConverter` (#7880)
# Which issue does this PR close?
N/A
# Rationale for this change
`MapArray` is marked as supported in `RowConverter` while it's not
# What changes are included in this PR?
Remove `Map` from supported data type and added test that it is
correctly reported as unsupported
# Are these changes tested?
added tests
# Are there any user-facing changes?
yes, but it never worked, as the codec failed on Map DataType when
trying to create `RowConverter`
Related to:
- #7879
---------
Co-authored-by: Andrew Lamb <[email protected]>
---
arrow-row/src/lib.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 48 insertions(+), 4 deletions(-)
diff --git a/arrow-row/src/lib.rs b/arrow-row/src/lib.rs
index 2a810f9c31..325d2953c8 100644
--- a/arrow-row/src/lib.rs
+++ b/arrow-row/src/lib.rs
@@ -623,10 +623,9 @@ impl RowConverter {
fn supports_datatype(d: &DataType) -> bool {
match d {
_ if !d.is_nested() => true,
- DataType::List(f)
- | DataType::LargeList(f)
- | DataType::FixedSizeList(f, _)
- | DataType::Map(f, _) => Self::supports_datatype(f.data_type()),
+ DataType::List(f) | DataType::LargeList(f) |
DataType::FixedSizeList(f, _) => {
+ Self::supports_datatype(f.data_type())
+ }
DataType::Struct(f) => f.iter().all(|x|
Self::supports_datatype(x.data_type())),
DataType::RunEndEncoded(_, values) =>
Self::supports_datatype(values.data_type()),
_ => false,
@@ -3119,4 +3118,49 @@ mod tests {
let rows = converter.convert_columns(&[Arc::new(a) as _]).unwrap();
assert_eq!(rows.row(0).cmp(&rows.row(1)), Ordering::Less);
}
+
+ #[test]
+ fn map_should_be_marked_as_unsupported() {
+ let map_data_type = Field::new_map(
+ "map",
+ "entries",
+ Field::new("key", DataType::Utf8, false),
+ Field::new("value", DataType::Utf8, true),
+ false,
+ true,
+ )
+ .data_type()
+ .clone();
+
+ let is_supported =
RowConverter::supports_fields(&[SortField::new(map_data_type)]);
+
+ assert!(!is_supported, "Map should not be supported");
+ }
+
+ #[test]
+ fn should_fail_to_create_row_converter_for_unsupported_map_type() {
+ let map_data_type = Field::new_map(
+ "map",
+ "entries",
+ Field::new("key", DataType::Utf8, false),
+ Field::new("value", DataType::Utf8, true),
+ false,
+ true,
+ )
+ .data_type()
+ .clone();
+
+ let converter = RowConverter::new(vec![SortField::new(map_data_type)]);
+
+ match converter {
+ Err(ArrowError::NotYetImplemented(message)) => {
+ assert!(
+ message.contains("Row format support not yet implemented
for"),
+ "Expected NotYetImplemented error for map data type, got:
{message}",
+ );
+ }
+ Err(e) => panic!("Expected NotYetImplemented error, got: {e}"),
+ Ok(_) => panic!("Expected NotYetImplemented error for map data
type"),
+ }
+ }
}