@@ -206,8 +206,8 @@ pub fn can_cast_types(from_type: &DataType, to_type: &DataType) -> bool {
206
206
DataType :: is_integer ( to_type) || DataType :: is_floating ( to_type) || to_type == & Utf8 || to_type == & LargeUtf8
207
207
}
208
208
209
- ( Binary , LargeBinary | Utf8 | LargeUtf8 | FixedSizeBinary ( _) | BinaryView ) => true ,
210
- ( LargeBinary , Binary | Utf8 | LargeUtf8 | FixedSizeBinary ( _) | BinaryView ) => true ,
209
+ ( Binary , LargeBinary | Utf8 | LargeUtf8 | FixedSizeBinary ( _) | BinaryView | Utf8View ) => true ,
210
+ ( LargeBinary , Binary | Utf8 | LargeUtf8 | FixedSizeBinary ( _) | BinaryView | Utf8View ) => true ,
211
211
( FixedSizeBinary ( _) , Binary | LargeBinary ) => true ,
212
212
(
213
213
Utf8 | LargeUtf8 | Utf8View ,
@@ -1411,6 +1411,9 @@ pub fn cast_with_options(
1411
1411
cast_binary_to_fixed_size_binary :: < i32 > ( array, * size, cast_options)
1412
1412
}
1413
1413
BinaryView => Ok ( Arc :: new ( BinaryViewArray :: from ( array. as_binary :: < i32 > ( ) ) ) ) ,
1414
+ Utf8View => Ok ( Arc :: new ( StringViewArray :: from (
1415
+ cast_binary_to_string :: < i32 > ( array, cast_options) ?. as_string :: < i32 > ( ) ,
1416
+ ) ) ) ,
1414
1417
_ => Err ( ArrowError :: CastError ( format ! (
1415
1418
"Casting from {from_type:?} to {to_type:?} not supported" ,
1416
1419
) ) ) ,
@@ -1426,6 +1429,10 @@ pub fn cast_with_options(
1426
1429
cast_binary_to_fixed_size_binary :: < i64 > ( array, * size, cast_options)
1427
1430
}
1428
1431
BinaryView => Ok ( Arc :: new ( BinaryViewArray :: from ( array. as_binary :: < i64 > ( ) ) ) ) ,
1432
+ Utf8View => {
1433
+ let array = cast_binary_to_string :: < i64 > ( array, cast_options) ?;
1434
+ Ok ( Arc :: new ( StringViewArray :: from ( array. as_string :: < i64 > ( ) ) ) )
1435
+ }
1429
1436
_ => Err ( ArrowError :: CastError ( format ! (
1430
1437
"Casting from {from_type:?} to {to_type:?} not supported" ,
1431
1438
) ) ) ,
@@ -5534,14 +5541,25 @@ mod tests {
5534
5541
{
5535
5542
let binary_array = GenericBinaryArray :: < O > :: from_iter ( VIEW_TEST_DATA ) ;
5536
5543
5544
+ assert ! ( can_cast_types(
5545
+ binary_array. data_type( ) ,
5546
+ & DataType :: Utf8View
5547
+ ) ) ;
5548
+
5537
5549
assert ! ( can_cast_types(
5538
5550
binary_array. data_type( ) ,
5539
5551
& DataType :: BinaryView
5540
5552
) ) ;
5541
5553
5554
+ let string_view_array = cast ( & binary_array, & DataType :: Utf8View ) . unwrap ( ) ;
5555
+ assert_eq ! ( string_view_array. data_type( ) , & DataType :: Utf8View ) ;
5556
+
5542
5557
let binary_view_array = cast ( & binary_array, & DataType :: BinaryView ) . unwrap ( ) ;
5543
5558
assert_eq ! ( binary_view_array. data_type( ) , & DataType :: BinaryView ) ;
5544
5559
5560
+ let expect_string_view_array = StringViewArray :: from_iter ( VIEW_TEST_DATA ) ;
5561
+ assert_eq ! ( string_view_array. as_ref( ) , & expect_string_view_array) ;
5562
+
5545
5563
let expect_binary_view_array = BinaryViewArray :: from_iter ( VIEW_TEST_DATA ) ;
5546
5564
assert_eq ! ( binary_view_array. as_ref( ) , & expect_binary_view_array) ;
5547
5565
}
0 commit comments