This is an automated email from the ASF dual-hosted git repository.

liukun 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 9746e59c1 remove casting other type to null type (#1942)
9746e59c1 is described below

commit 9746e59c16ec0116298fe3aeb18d42c5d5782234
Author: Kun Liu <[email protected]>
AuthorDate: Tue Jun 28 11:56:47 2022 +0800

    remove casting other type to null type (#1942)
---
 arrow/src/compute/kernels/cast.rs | 106 +++++---------------------------------
 1 file changed, 12 insertions(+), 94 deletions(-)

diff --git a/arrow/src/compute/kernels/cast.rs 
b/arrow/src/compute/kernels/cast.rs
index 7e9d1a147..4ffb1ea5d 100644
--- a/arrow/src/compute/kernels/cast.rs
+++ b/arrow/src/compute/kernels/cast.rs
@@ -105,39 +105,7 @@ pub fn can_cast_types(from_type: &DataType, to_type: 
&DataType) -> bool {
             | FixedSizeList(_, _)
             | Struct(_)
             | Map(_, _)
-            | Dictionary(_, _),
-        )
-        | (
-            Boolean
-            | Int8
-            | UInt8
-            | Int16
-            | UInt16
-            | Int32
-            | UInt32
-            | Float32
-            | Date32
-            | Time32(_)
-            | Int64
-            | UInt64
-            | Float64
-            | Date64
-            | Timestamp(_, _)
-            | Time64(_)
-            | Duration(_)
-            | Interval(_)
-            | FixedSizeBinary(_)
-            | Binary
-            | Utf8
-            | LargeBinary
-            | LargeUtf8
-            | List(_)
-            | LargeList(_)
-            | FixedSizeList(_, _)
-            | Struct(_)
-            | Map(_, _)
-            | Dictionary(_, _),
-            Null,
+            | Dictionary(_, _)
         ) => true,
         (Decimal(_, _), _) => false,
         (_, Decimal(_, _)) => false,
@@ -514,38 +482,6 @@ pub fn cast_with_options(
             | Struct(_)
             | Map(_, _)
             | Dictionary(_, _),
-        )
-        | (
-            Boolean
-            | Int8
-            | UInt8
-            | Int16
-            | UInt16
-            | Int32
-            | UInt32
-            | Float32
-            | Date32
-            | Time32(_)
-            | Int64
-            | UInt64
-            | Float64
-            | Date64
-            | Timestamp(_, _)
-            | Time64(_)
-            | Duration(_)
-            | Interval(_)
-            | FixedSizeBinary(_)
-            | Binary
-            | Utf8
-            | LargeBinary
-            | LargeUtf8
-            | List(_)
-            | LargeList(_)
-            | FixedSizeList(_, _)
-            | Struct(_)
-            | Map(_, _)
-            | Dictionary(_, _),
-            Null,
         ) => Ok(new_null_array(to_type, array.len())),
         (Struct(_), _) => Err(ArrowError::CastError(
             "Cannot cast from struct to other types".to_string(),
@@ -4347,14 +4283,6 @@ mod tests {
                     assert_eq!(cast_array.data_type(), &cast_type);
                     assert_eq!(cast_array, &expected);
                 }
-                {
-                    let array = Arc::new($ARR_TYPE::from(vec![None; 4])) as 
ArrayRef;
-                    let expected = NullArray::new(4);
-                    let cast_array = cast(&array, 
&DataType::Null).expect("cast failed");
-                    let cast_array = as_null_array(&cast_array);
-                    assert_eq!(cast_array.data_type(), &DataType::Null);
-                    assert_eq!(cast_array, &expected);
-                }
             }};
         }
 
@@ -4373,17 +4301,7 @@ mod tests {
         typed_test!(Date64Array, Date64, Date64Type);
     }
 
-    fn cast_from_and_to_null(data_type: &DataType) {
-        // Cast from data_type to null
-        {
-            let array = new_null_array(data_type, 4);
-            assert_eq!(array.data_type(), data_type);
-            let cast_array = cast(&array, &DataType::Null).expect("cast 
failed");
-            assert_eq!(cast_array.data_type(), &DataType::Null);
-            for i in 0..4 {
-                assert!(cast_array.is_null(i));
-            }
-        }
+    fn cast_from_null_to_other(data_type: &DataType) {
         // Cast from null to data_type
         {
             let array = new_null_array(&DataType::Null, 4);
@@ -4398,10 +4316,10 @@ mod tests {
 
     #[test]
     fn test_cast_null_from_and_to_variable_sized() {
-        cast_from_and_to_null(&DataType::Utf8);
-        cast_from_and_to_null(&DataType::LargeUtf8);
-        cast_from_and_to_null(&DataType::Binary);
-        cast_from_and_to_null(&DataType::LargeBinary);
+        cast_from_null_to_other(&DataType::Utf8);
+        cast_from_null_to_other(&DataType::LargeUtf8);
+        cast_from_null_to_other(&DataType::Binary);
+        cast_from_null_to_other(&DataType::LargeBinary);
     }
 
     #[test]
@@ -4418,32 +4336,32 @@ mod tests {
             )),
             false,
         );
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
 
         // Cast null from and to list
         let data_type =
             DataType::List(Box::new(Field::new("item", DataType::Int32, 
true)));
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
         let data_type =
             DataType::LargeList(Box::new(Field::new("item", DataType::Int32, 
true)));
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
         let data_type = DataType::FixedSizeList(
             Box::new(Field::new("item", DataType::Int32, true)),
             4,
         );
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
 
         // Cast null from and to dictionary
         let values = vec![None, None, None, None] as Vec<Option<&str>>;
         let array: DictionaryArray<Int8Type> = values.into_iter().collect();
         let array = Arc::new(array) as ArrayRef;
         let data_type = array.data_type().to_owned();
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
 
         // Cast null from and to struct
         let data_type =
             DataType::Struct(vec![Field::new("data", DataType::Int64, false)]);
-        cast_from_and_to_null(&data_type);
+        cast_from_null_to_other(&data_type);
     }
 
     /// Print the `DictionaryArray` `array` as a vector of strings

Reply via email to