You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by al...@apache.org on 2023/05/04 18:46:03 UTC

[arrow-datafusion] branch main updated: Add sqllogic test coverage for interval arithmetic (#6201)

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 017f28e10d Add sqllogic test coverage for interval arithmetic (#6201)
017f28e10d is described below

commit 017f28e10d0d053fda8a76d30a31ddc52e54f6c2
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Thu May 4 14:45:57 2023 -0400

    Add sqllogic test coverage for interval arithmetic (#6201)
    
    * Add sqllogic test coverage for interval arithmetic
    
    * Update tests for intervals
---
 .../tests/sqllogictests/test_files/interval.slt    | 198 +++++++++++++++++++++
 1 file changed, 198 insertions(+)

diff --git a/datafusion/core/tests/sqllogictests/test_files/interval.slt b/datafusion/core/tests/sqllogictests/test_files/interval.slt
index 4a1cd4b220..1ba58a3d27 100644
--- a/datafusion/core/tests/sqllogictests/test_files/interval.slt
+++ b/datafusion/core/tests/sqllogictests/test_files/interval.slt
@@ -182,3 +182,201 @@ from t;
 
 statement ok
 drop table t;
+
+
+##### Tests for interval arithmetic
+
+statement ok
+create table t(i interval, d date, ts timestamp)
+as
+values
+  ('1 month',  '1980-01-01', '2000-01-01T00:00:00'),
+  ('1 day',    '1990-10-01', '2000-01-01T12:11:10'),
+  ('1 minute', '1980-01-02', '2000-02-01T00:00:00')
+;
+
+### date / timestamp (scalar) + interval (scalar)
+query D
+select '1980-01-01'::date + interval '1 day'
+----
+1980-01-02
+
+
+query P
+select '1980-01-01'::timestamp + interval '1 day'
+----
+1980-01-02T00:00:00
+
+
+### date / timestamp (scalar) - interval (scalar)
+query D
+select '1980-01-01'::date - interval '1 day'
+----
+1979-12-31
+
+
+query P
+select '1980-01-01'::timestamp - interval '1 day'
+----
+1979-12-31T00:00:00
+
+
+### date / timestamp (array) + interval (scalar)
+query D
+select d + interval '1 day' from t;
+----
+1980-01-02
+1990-10-02
+1980-01-03
+
+query P
+select ts + interval '1 day' from t;
+----
+2000-01-02T00:00:00
+2000-01-02T12:11:10
+2000-02-02T00:00:00
+
+### date / timestamp (array) - interval (scalar)
+query D
+select d - interval '1 day' from t;
+----
+1979-12-31
+1990-09-30
+1980-01-01
+
+query P
+select ts - interval '1 day' from t;
+----
+1999-12-31T00:00:00
+1999-12-31T12:11:10
+2000-01-31T00:00:00
+
+### date / timestamp (scalar) + interval (array)
+query D
+select '1980-01-01'::date + i from t;
+----
+1980-02-01
+1980-01-02
+1980-01-01
+
+query P
+select '1980-01-01T12:00:00'::timestamp + i from t;
+----
+1980-02-01T12:00:00
+1980-01-02T12:00:00
+1980-01-01T12:01:00
+
+
+query D
+select '1980-01-01'::date - i from t;
+----
+1979-12-01
+1979-12-31
+1980-01-01
+
+query P
+select '1980-01-01T12:00:00'::timestamp - i from t;
+----
+1979-12-01T12:00:00
+1979-12-31T12:00:00
+1980-01-01T11:59:00
+
+### date / timestamp (array) + interval (array)
+query D
+select d + i from t;
+----
+1980-02-01
+1990-10-02
+1980-01-02
+
+query P
+select ts + i from t;
+----
+2000-02-01T00:00:00
+2000-01-02T12:11:10
+2000-02-01T00:01:00
+
+
+### date / timestamp (array) - interval (array)
+query D
+select d - i from t;
+----
+1979-12-01
+1990-09-30
+1980-01-02
+
+query P
+select ts - i from t;
+----
+1999-12-01T00:00:00
+1999-12-31T12:11:10
+2000-01-31T23:59:00
+
+
+# Now reverse the argument order
+# interval (scalar) + date / timestamp (scalar)
+query D
+select '1 month'::interval + '1980-01-01'::date;
+----
+1980-02-01
+
+query P
+select '1 month'::interval + '1980-01-01T12:00:00'::timestamp;
+----
+1980-02-01T12:00:00
+
+# Exected error: interval (scalar) - date / timestamp (scalar)
+
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select '1 month'::interval - '1980-01-01'::date;
+
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select '1 month'::interval - '1980-01-01T12:00:00'::timestamp;
+
+# interval (array) + date / timestamp (array)
+query D
+select i + d from t;
+----
+1980-02-01
+1990-10-02
+1980-01-02
+
+query P
+select i + ts from t;
+----
+2000-02-01T00:00:00
+2000-01-02T12:11:10
+2000-02-01T00:01:00
+
+# expected error interval (array) - date / timestamp (array)
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select i - d from t;
+
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select i - ts from t;
+
+
+# interval (scalar) + date / timestamp (array)
+query D
+select '1 month'::interval + d from t;
+----
+1980-02-01
+1990-11-01
+1980-02-02
+
+query P
+select '1 month'::interval + ts from t;
+----
+2000-02-01T00:00:00
+2000-02-01T12:11:10
+2000-03-01T00:00:00
+
+# expected error interval (scalar) - date / timestamp (array)
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select '1 month'::interval - d from t;
+
+query error DataFusion error: Error during planning: interval can't subtract timestamp/date
+select '1 month'::interval - ts from t;
+
+statement ok
+drop table t