Skip to content

Commit 387490a

Browse files
rluvatonalamb
andauthored
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]>
1 parent 42b6c17 commit 387490a

1 file changed

Lines changed: 48 additions & 4 deletions

File tree

arrow-row/src/lib.rs

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -623,10 +623,9 @@ impl RowConverter {
623623
fn supports_datatype(d: &DataType) -> bool {
624624
match d {
625625
_ if !d.is_nested() => true,
626-
DataType::List(f)
627-
| DataType::LargeList(f)
628-
| DataType::FixedSizeList(f, _)
629-
| DataType::Map(f, _) => Self::supports_datatype(f.data_type()),
626+
DataType::List(f) | DataType::LargeList(f) | DataType::FixedSizeList(f, _) => {
627+
Self::supports_datatype(f.data_type())
628+
}
630629
DataType::Struct(f) => f.iter().all(|x| Self::supports_datatype(x.data_type())),
631630
DataType::RunEndEncoded(_, values) => Self::supports_datatype(values.data_type()),
632631
_ => false,
@@ -3119,4 +3118,49 @@ mod tests {
31193118
let rows = converter.convert_columns(&[Arc::new(a) as _]).unwrap();
31203119
assert_eq!(rows.row(0).cmp(&rows.row(1)), Ordering::Less);
31213120
}
3121+
3122+
#[test]
3123+
fn map_should_be_marked_as_unsupported() {
3124+
let map_data_type = Field::new_map(
3125+
"map",
3126+
"entries",
3127+
Field::new("key", DataType::Utf8, false),
3128+
Field::new("value", DataType::Utf8, true),
3129+
false,
3130+
true,
3131+
)
3132+
.data_type()
3133+
.clone();
3134+
3135+
let is_supported = RowConverter::supports_fields(&[SortField::new(map_data_type)]);
3136+
3137+
assert!(!is_supported, "Map should not be supported");
3138+
}
3139+
3140+
#[test]
3141+
fn should_fail_to_create_row_converter_for_unsupported_map_type() {
3142+
let map_data_type = Field::new_map(
3143+
"map",
3144+
"entries",
3145+
Field::new("key", DataType::Utf8, false),
3146+
Field::new("value", DataType::Utf8, true),
3147+
false,
3148+
true,
3149+
)
3150+
.data_type()
3151+
.clone();
3152+
3153+
let converter = RowConverter::new(vec![SortField::new(map_data_type)]);
3154+
3155+
match converter {
3156+
Err(ArrowError::NotYetImplemented(message)) => {
3157+
assert!(
3158+
message.contains("Row format support not yet implemented for"),
3159+
"Expected NotYetImplemented error for map data type, got: {message}",
3160+
);
3161+
}
3162+
Err(e) => panic!("Expected NotYetImplemented error, got: {e}"),
3163+
Ok(_) => panic!("Expected NotYetImplemented error for map data type"),
3164+
}
3165+
}
31223166
}

0 commit comments

Comments
 (0)