This is an automated email from the ASF dual-hosted git repository.
alamb 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 0433026b56 Support equality and comparison between interval arrays and
scalars (#6948)
0433026b56 is described below
commit 0433026b569abfcd48b1770f3f4fbcdd799f927f
Author: Georgi Krastev <[email protected]>
AuthorDate: Thu Jul 13 23:32:15 2023 +0300
Support equality and comparison between interval arrays and scalars (#6948)
Add missing cases for interval types to `binary_array_op_dyn_scalar`.
Also added tests for the array-array and scalar-scalar cases
that already work today but seem untested.
---
.../tests/sqllogictests/test_files/interval.slt | 35 ++++++++++++++++++++++
datafusion/physical-expr/src/expressions/binary.rs | 3 ++
2 files changed, 38 insertions(+)
diff --git a/datafusion/core/tests/sqllogictests/test_files/interval.slt
b/datafusion/core/tests/sqllogictests/test_files/interval.slt
index 9dd56c4636..1016cb155e 100644
--- a/datafusion/core/tests/sqllogictests/test_files/interval.slt
+++ b/datafusion/core/tests/sqllogictests/test_files/interval.slt
@@ -522,5 +522,40 @@ true false false false false true
true true false false true true
true true false false false true
+### interval (array) cmp interval (array)
+query BBBBBB
+select i = i, i != i, i < i, i <= i, i > i, i >= i from t;
+----
+true false false true false true
+true false false true false true
+true false false true false true
+
+### interval (array) cmp interval (scalar)
+query BBBBBB
+select
+ (interval '1 day') = i,
+ (interval '1 day') != i,
+ i < (interval '1 day'),
+ i <= (interval '1 day'),
+ i > (interval '1 day'),
+ i >= (interval '1 day')
+from t;
+----
+false true false false true true
+true false false true false true
+false true true true false false
+
+### interval (scalar) cmp interval (scalar)
+query BBBBBB
+select
+ (interval '1 day') = (interval '1 day'),
+ (interval '1 month') != (interval '1 day'),
+ (interval '1 minute') < (interval '1 day'),
+ (interval '1 hour') <= (interval '1 day'),
+ (interval '1 year') > (interval '1 day'),
+ (interval '1 day') >= (interval '1 day');
+----
+true true true true true 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 6132b7a954..9d2087a0c5 100644
--- a/datafusion/physical-expr/src/expressions/binary.rs
+++ b/datafusion/physical-expr/src/expressions/binary.rs
@@ -1035,6 +1035,9 @@ macro_rules! binary_array_op_dyn_scalar {
ScalarValue::TimestampMillisecond(v, _) =>
compute_op_dyn_scalar!($LEFT, v, $OP, $OP_TYPE),
ScalarValue::TimestampMicrosecond(v, _) =>
compute_op_dyn_scalar!($LEFT, v, $OP, $OP_TYPE),
ScalarValue::TimestampNanosecond(v, _) =>
compute_op_dyn_scalar!($LEFT, v, $OP, $OP_TYPE),
+ ScalarValue::IntervalYearMonth(v) => compute_op_dyn_scalar!($LEFT,
v, $OP, $OP_TYPE),
+ ScalarValue::IntervalDayTime(v) => compute_op_dyn_scalar!($LEFT,
v, $OP, $OP_TYPE),
+ ScalarValue::IntervalMonthDayNano(v) =>
compute_op_dyn_scalar!($LEFT, v, $OP, $OP_TYPE),
other => Err(DataFusionError::Internal(format!(
"Data type {:?} not supported for scalar operation '{}' on dyn
array",
other, stringify!($OP)))