You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by tu...@apache.org on 2022/10/09 07:45:11 UTC

[arrow-rs] branch master updated: Simplify downcast_primitive_array (#2809)

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

tustvold 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 2ae23093c Simplify downcast_primitive_array (#2809)
2ae23093c is described below

commit 2ae23093c3f7edc278fe6daf57daf167c430143b
Author: Raphael Taylor-Davies <17...@users.noreply.github.com>
AuthorDate: Sun Oct 9 08:45:06 2022 +0100

    Simplify downcast_primitive_array (#2809)
---
 arrow-array/src/cast.rs | 442 ++++++++++++------------------------------------
 1 file changed, 105 insertions(+), 337 deletions(-)

diff --git a/arrow-array/src/cast.rs b/arrow-array/src/cast.rs
index 653836b8d..6eb540796 100644
--- a/arrow-array/src/cast.rs
+++ b/arrow-array/src/cast.rs
@@ -20,6 +20,18 @@
 use crate::array::*;
 use crate::types::*;
 
+/// Repeats the provided pattern based on the number of comma separated identifiers
+#[doc(hidden)]
+#[macro_export]
+macro_rules! repeat_pat {
+    ($e:pat, $v_:ident) => {
+        $e
+    };
+    ($e:pat, $v_:ident $(, $tail:ident)+) => {
+        ($e, $crate::repeat_pat!($e $(, $tail)+))
+    }
+}
+
 /// Downcast an [`Array`] to a [`PrimitiveArray`] based on its [`DataType`]
 /// accepts a number of subsequent patterns to match the data type
 ///
@@ -50,427 +62,183 @@ macro_rules! downcast_primitive_array {
     ($values:ident => $e:expr, $($p:pat => $fallback:expr $(,)*)*) => {
         downcast_primitive_array!($values => {$e} $($p => $fallback)*)
     };
-
-    ($values:ident => $e:block $($p:pat => $fallback:expr $(,)*)*) => {
-        match $values.data_type() {
-            arrow_schema::DataType::Int8 => {
-                let $values = $crate::cast::as_primitive_array::<
+    (($($values:ident),+) => $e:block $($($p:pat),+ => $fallback:expr $(,)*)*) => {
+        $crate::downcast_primitive_array!($($values),+ => $e $($($p),+ => $fallback)*)
+    };
+    (($($values:ident),+) => $e:block $(($($p:pat),+) => $fallback:expr $(,)*)*) => {
+        $crate::downcast_primitive_array!($($values),+ => $e $($($p),+ => $fallback)*)
+    };
+    ($($values:ident),+ => $e:block $($($p:pat),+ => $fallback:expr $(,)*)*) => {
+        match ($($values.data_type()),+) {
+            $crate::repeat_pat!(arrow_schema::DataType::Int8, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Int8Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Int16 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Int16, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Int16Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Int32 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Int32, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Int32Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Int64 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Int64, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Int64Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::UInt8 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::UInt8, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::UInt8Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::UInt16 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::UInt16, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::UInt16Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::UInt32 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::UInt32, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::UInt32Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::UInt64 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::UInt64, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::UInt64Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Float16 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Float16, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Float16Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Float32 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Float32, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Float32Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Float64 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Float64, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Float64Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Date32 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Date32, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Date32Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Date64 => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Date64, $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Date64Type,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Second) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Second), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Time32SecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Millisecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Millisecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Time32MillisecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Microsecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Microsecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Time64MicrosecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Nanosecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Nanosecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::Time64NanosecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Second, _) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Second, _), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::TimestampSecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond, _) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond, _), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::TimestampMillisecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Microsecond, _) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Microsecond, _), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::TimestampMicrosecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Nanosecond, _) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Nanosecond, _), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::TimestampNanosecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::IntervalYearMonthType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::DayTime) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::DayTime), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::IntervalDayTimeType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::MonthDayNano) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::MonthDayNano), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::IntervalMonthDayNanoType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Second) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Second), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::DurationSecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Millisecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Millisecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::DurationMillisecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Microsecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Microsecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::DurationMicrosecondType,
-                >($values);
+                >($values);)+
                 $e
             }
-            arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Nanosecond) => {
-                let $values = $crate::cast::as_primitive_array::<
+            $crate::repeat_pat!(arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Nanosecond), $($values),+) => {
+                $(let $values = $crate::cast::as_primitive_array::<
                     $crate::types::DurationNanosecondType,
-                >($values);
-                $e
-            }
-            $($p => $fallback,)*
-        }
-    };
-
-    (($values1:ident, $values2:ident) => $e:block $($p:pat => $fallback:expr $(,)*)*) => {
-        match ($values1.data_type(), $values2.data_type()) {
-            (arrow_schema::DataType::Int8, arrow_schema::DataType::Int8) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int8Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int8Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Int16, arrow_schema::DataType::Int16) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int16Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int16Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Int32, arrow_schema::DataType::Int32) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int32Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int32Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Int64, arrow_schema::DataType::Int64) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int64Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Int64Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::UInt8, arrow_schema::DataType::UInt8) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt8Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt8Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::UInt16, arrow_schema::DataType::UInt16) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt16Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt16Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::UInt32, arrow_schema::DataType::UInt32) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt32Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt32Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::UInt64, arrow_schema::DataType::UInt64) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt64Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::UInt64Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Float32, arrow_schema::DataType::Float32) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Float32Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Float32Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Float64, arrow_schema::DataType::Float64) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Float64Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Float64Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Date32, arrow_schema::DataType::Date32) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Date32Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Date32Type,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Date64, arrow_schema::DataType::Date64) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Date64Type,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Date64Type,
-                >($values2);
+                >($values);)+
                 $e
             }
-            (arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Second), arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Second)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time32SecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time32SecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Millisecond), arrow_schema::DataType::Time32(arrow_schema::TimeUnit::Millisecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time32MillisecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time32MillisecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Microsecond), arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Microsecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time64MicrosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time64MicrosecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Nanosecond), arrow_schema::DataType::Time64(arrow_schema::TimeUnit::Nanosecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time64NanosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::Time64NanosecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Second, _), arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Second, _)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampSecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampSecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond, _), arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Millisecond, _)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampMillisecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampMillisecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Microsecond, _), arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Microsecond, _)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampMicrosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampMicrosecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Nanosecond, _), arrow_schema::DataType::Timestamp(arrow_schema::TimeUnit::Nanosecond, _)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampNanosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::TimestampNanosecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth), arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::YearMonth)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalYearMonthType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalYearMonthType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::DayTime), arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::DayTime)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalDayTimeType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalDayTimeType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::MonthDayNano), arrow_schema::DataType::Interval(arrow_schema::IntervalUnit::MonthDayNano)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalMonthDayNanoType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::IntervalMonthDayNanoType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Second), arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Second)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationSecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationSecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Millisecond), arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Millisecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationMillisecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationMillisecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Microsecond), arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Microsecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationMicrosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationMicrosecondType,
-                >($values2);
-                $e
-            }
-            (arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Nanosecond), arrow_schema::DataType::Duration(arrow_schema::TimeUnit::Nanosecond)) => {
-                let $values1 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationNanosecondType,
-                >($values1);
-                let $values2 = $crate::cast::as_primitive_array::<
-                    $crate::types::DurationNanosecondType,
-                >($values2);
-                $e
-            }
-            $($p => $fallback,)*
+            $(($($p),+) => $fallback,)*
         }
     };
 }