diff --git a/datafusion/core/tests/sqllogictests/test_files/interval.slt b/datafusion/core/tests/sqllogictests/test_files/interval.slt index 911b28c84be3..40798f6a36bc 100644 --- a/datafusion/core/tests/sqllogictests/test_files/interval.slt +++ b/datafusion/core/tests/sqllogictests/test_files/interval.slt @@ -489,5 +489,20 @@ select interval '1 month' + '2012-01-01'::date; ---- 2012-02-01 +# is (not) distinct from +query BBBBBB +select + i is distinct from null, + i is distinct from (interval '1 month'), + i is distinct from i, + i is not distinct from null, + i is not distinct from (interval '1 day'), + i is not distinct from i +from t; +---- +true false false false false true +true true false false true true +true true false false false true + statement ok drop table t diff --git a/datafusion/physical-expr/src/expressions/binary.rs b/datafusion/physical-expr/src/expressions/binary.rs index e5b66d4a3987..5377fb84c47d 100644 --- a/datafusion/physical-expr/src/expressions/binary.rs +++ b/datafusion/physical-expr/src/expressions/binary.rs @@ -552,6 +552,15 @@ macro_rules! binary_array_op { DataType::Time64(TimeUnit::Nanosecond) => { compute_op!($LEFT, $RIGHT, $OP, Time64NanosecondArray) } + DataType::Interval(IntervalUnit::YearMonth) => { + compute_op!($LEFT, $RIGHT, $OP, IntervalYearMonthArray) + } + DataType::Interval(IntervalUnit::DayTime) => { + compute_op!($LEFT, $RIGHT, $OP, IntervalDayTimeArray) + } + DataType::Interval(IntervalUnit::MonthDayNano) => { + compute_op!($LEFT, $RIGHT, $OP, IntervalMonthDayNanoArray) + } DataType::Boolean => compute_bool_op!($LEFT, $RIGHT, $OP, BooleanArray), other => Err(DataFusionError::Internal(format!( "Data type {:?} not supported for binary operation '{}' on dyn arrays", diff --git a/datafusion/physical-expr/src/expressions/binary/kernels_arrow.rs b/datafusion/physical-expr/src/expressions/binary/kernels_arrow.rs index 4d984ac8e845..ab1b4b376fe5 100644 --- a/datafusion/physical-expr/src/expressions/binary/kernels_arrow.rs +++ b/datafusion/physical-expr/src/expressions/binary/kernels_arrow.rs @@ -99,7 +99,7 @@ pub(crate) fn is_distinct_from( right: &PrimitiveArray, ) -> Result where - T: ArrowNumericType, + T: ArrowPrimitiveType, { distinct( left, @@ -140,7 +140,7 @@ fn distinct< mut op: F, ) -> Result where - T: ArrowNumericType, + T: ArrowPrimitiveType, { let left_values = left.values(); let right_values = right.values();