You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by dh...@apache.org on 2023/06/27 11:32:17 UTC

[arrow-datafusion] branch main updated: Enable IsDistinctFrom and IsNotDistinctFrom on interval types (#6776)

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

dheres pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 143ef16bff Enable IsDistinctFrom and IsNotDistinctFrom on interval types (#6776)
143ef16bff is described below

commit 143ef16bfff1b15949086dab4bdfd1064ff09d64
Author: Georgi Krastev <jo...@gmail.com>
AuthorDate: Tue Jun 27 14:32:12 2023 +0300

    Enable IsDistinctFrom and IsNotDistinctFrom on interval types (#6776)
---
 .../core/tests/sqllogictests/test_files/interval.slt      | 15 +++++++++++++++
 datafusion/physical-expr/src/expressions/binary.rs        |  9 +++++++++
 .../physical-expr/src/expressions/binary/kernels_arrow.rs |  4 ++--
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/datafusion/core/tests/sqllogictests/test_files/interval.slt b/datafusion/core/tests/sqllogictests/test_files/interval.slt
index 74ddfbf78d..889e2759b2 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 8e9e361596..e3bbefbcd3 100644
--- a/datafusion/physical-expr/src/expressions/binary.rs
+++ b/datafusion/physical-expr/src/expressions/binary.rs
@@ -554,6 +554,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 4d984ac8e8..ab1b4b376f 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<T>(
     right: &PrimitiveArray<T>,
 ) -> Result<BooleanArray>
 where
-    T: ArrowNumericType,
+    T: ArrowPrimitiveType,
 {
     distinct(
         left,
@@ -140,7 +140,7 @@ fn distinct<
     mut op: F,
 ) -> Result<BooleanArray>
 where
-    T: ArrowNumericType,
+    T: ArrowPrimitiveType,
 {
     let left_values = left.values();
     let right_values = right.values();