[SPARK-29889][SQL][TEST] unify the interval tests

### What changes were proposed in this pull request?

move interval tests to `interval.sql`, and import it to `ansi/interval.sql`

### Why are the changes needed?

improve test coverage

### Does this PR introduce any user-facing change?

no

### How was this patch tested?

N/A

Closes #26515 from cloud-fan/test.

Authored-by: Wenchen Fan <wenchen@databricks.com>
Signed-off-by: Wenchen Fan <wenchen@databricks.com>
This commit is contained in:
Wenchen Fan 2019-11-15 10:38:51 +08:00
parent d128ef13d8
commit bb8b04d4a2
6 changed files with 1714 additions and 889 deletions

View file

@ -1,187 +1,17 @@
select --import interval.sql
'1' second,
2 seconds,
'1' minute,
2 minutes,
'1' hour,
2 hours,
'1' day,
2 days,
'1' month,
2 months,
'1' year,
2 years;
select
interval '10-11' year to month,
interval '10' year,
interval '11' month;
select
'10-11' year to month,
'10' year,
'11' month;
select
interval '10 9:8:7.987654321' day to second,
interval '10' day,
interval '11' hour,
interval '12' minute,
interval '13' second,
interval '13.123456789' second;
select
'10 9:8:7.987654321' day to second,
'10' day,
'11' hour,
'12' minute,
'13' second,
'13.123456789' second;
select map(1, interval 1 day, 2, interval 3 week);
select map(1, 1 day, 2, 3 week);
-- Interval year-month arithmetic
create temporary view interval_arithmetic as
select CAST(dateval AS date), CAST(tsval AS timestamp) from values
('2012-01-01', '2012-01-01')
as interval_arithmetic(dateval, tsval);
select
dateval,
dateval - interval '2-2' year to month,
dateval - interval '-2-2' year to month,
dateval + interval '2-2' year to month,
dateval + interval '-2-2' year to month,
- interval '2-2' year to month + dateval,
interval '2-2' year to month + dateval
from interval_arithmetic;
select
dateval,
dateval - '2-2' year to month,
dateval - '-2-2' year to month,
dateval + '2-2' year to month,
dateval + '-2-2' year to month,
- '2-2' year to month + dateval,
'2-2' year to month + dateval
from interval_arithmetic;
select
tsval,
tsval - interval '2-2' year to month,
tsval - interval '-2-2' year to month,
tsval + interval '2-2' year to month,
tsval + interval '-2-2' year to month,
- interval '2-2' year to month + tsval,
interval '2-2' year to month + tsval
from interval_arithmetic;
select
tsval,
tsval - '2-2' year to month,
tsval - '-2-2' year to month,
tsval + '2-2' year to month,
tsval + '-2-2' year to month,
- '2-2' year to month + tsval,
'2-2' year to month + tsval
from interval_arithmetic;
select
interval '2-2' year to month + interval '3-3' year to month,
interval '2-2' year to month - interval '3-3' year to month
from interval_arithmetic;
select
'2-2' year to month + '3-3' year to month,
'2-2' year to month - '3-3' year to month
from interval_arithmetic;
-- Interval day-time arithmetic
select
dateval,
dateval - interval '99 11:22:33.123456789' day to second,
dateval - interval '-99 11:22:33.123456789' day to second,
dateval + interval '99 11:22:33.123456789' day to second,
dateval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + dateval,
interval '99 11:22:33.123456789' day to second + dateval
from interval_arithmetic;
select
dateval,
dateval - '99 11:22:33.123456789' day to second,
dateval - '-99 11:22:33.123456789' day to second,
dateval + '99 11:22:33.123456789' day to second,
dateval + '-99 11:22:33.123456789' day to second,
- '99 11:22:33.123456789' day to second + dateval,
'99 11:22:33.123456789' day to second + dateval
from interval_arithmetic;
select
tsval,
tsval - interval '99 11:22:33.123456789' day to second,
tsval - interval '-99 11:22:33.123456789' day to second,
tsval + interval '99 11:22:33.123456789' day to second,
tsval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + tsval,
interval '99 11:22:33.123456789' day to second + tsval
from interval_arithmetic;
select
tsval,
tsval - '99 11:22:33.123456789' day to second,
tsval - '-99 11:22:33.123456789' day to second,
tsval + '99 11:22:33.123456789' day to second,
tsval + '-99 11:22:33.123456789' day to second,
- '99 11:22:33.123456789' day to second + tsval,
'99 11:22:33.123456789' day to second + tsval
from interval_arithmetic;
select
interval '99 11:22:33.123456789' day to second + interval '10 9:8:7.123456789' day to second,
interval '99 11:22:33.123456789' day to second - interval '10 9:8:7.123456789' day to second
from interval_arithmetic;
select
'99 11:22:33.123456789' day to second + '10 9:8:7.123456789' day to second,
'99 11:22:33.123456789' day to second - '10 9:8:7.123456789' day to second
from interval_arithmetic;
-- More tests for interval syntax alternatives
select 30 day;
-- the `interval` keyword can be omitted with ansi mode
select 1 year 2 days;
select '10-9' year to month;
select '20 15:40:32.99899999' day to second;
select 30 day day; select 30 day day;
select date'2012-01-01' - '2-2' year to month;
select 30 day day day; select 1 month - 1 day;
select date '2012-01-01' - 30 day;
select date '2012-01-01' - 30 day day;
select date '2012-01-01' - 30 day day day;
select date '2012-01-01' + '-30' day;
select date '2012-01-01' + interval '-30' day;
-- Unsupported syntax for intervals
select date '2012-01-01' + interval (-30) day;
select date '2012-01-01' + (-30) day;
create temporary view t as select * from values (1), (2) as t(a);
select date '2012-01-01' + interval (a + 1) day from t;
select date '2012-01-01' + (a + 1) day from t;
-- malformed interval literal with ansi mode -- malformed interval literal with ansi mode
select 1 year to month; select 1 year to month;
select '1' year to second; select '1' year to second;
select 1 year '2-1' year to month; select 1 year '2-1' year to month;
select (-30) day;
select (a + 1) day;
select 30 day day day;

View file

@ -161,67 +161,3 @@ SELECT * FROM (SELECT COUNT(*) AS cnt FROM test_agg) WHERE cnt > 1L;
SELECT count(*) FROM test_agg WHERE count(*) > 1L; SELECT count(*) FROM test_agg WHERE count(*) > 1L;
SELECT count(*) FROM test_agg WHERE count(*) + 1L > 1L; SELECT count(*) FROM test_agg WHERE count(*) + 1L > 1L;
SELECT count(*) FROM test_agg WHERE k = 1 or k = 2 or count(*) + 1L > 1L or max(k) > 1; SELECT count(*) FROM test_agg WHERE k = 1 or k = 2 or count(*) + 1L > 1L or max(k) > 1;
-- sum interval values
-- null
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where v is null;
-- empty set
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0;
-- basic interval sum
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v);
-- group by
select
i,
sum(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i;
-- having
select
sum(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null;
-- window
SELECT
i,
Sum(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES(1,'1 seconds'),(1,'2 seconds'),(2,NULL),(2,NULL) t(i,v);
-- average with interval type
-- null
select avg(cast(v as interval)) from VALUES (null) t(v);
-- empty set
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0;
-- basic interval avg
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v);
-- group by
select
i,
avg(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i;
-- having
select
avg(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null;
-- window
SELECT
i,
avg(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES (1,'1 seconds'), (1,'2 seconds'), (2,NULL), (2,NULL) t(i,v);

View file

@ -53,9 +53,11 @@ select interval '2 seconds' / null;
select interval '2 seconds' * null; select interval '2 seconds' * null;
select null * interval '2 seconds'; select null * interval '2 seconds';
-- interval with a negative sign -- interval with a positive/negative sign
select -interval '-1 month 1 day -1 second'; select -interval '-1 month 1 day -1 second';
select -interval -1 month 1 day -1 second; select -interval -1 month 1 day -1 second;
select +interval '-1 month 1 day -1 second';
select +interval -1 month 1 day -1 second;
-- make intervals -- make intervals
select make_interval(1); select make_interval(1);
@ -89,7 +91,7 @@ select justify_days(interval '1 month 59 day -25 hour');
select justify_hours(interval '1 month 59 day -25 hour'); select justify_hours(interval '1 month 59 day -25 hour');
select justify_interval(interval '1 month 59 day -25 hour'); select justify_interval(interval '1 month 59 day -25 hour');
-- interval -- interval literal
select interval 13.123456789 seconds, interval -13.123456789 second; select interval 13.123456789 seconds, interval -13.123456789 second;
select interval 1 year 2 month 3 week 4 day 5 hour 6 minute 7 seconds 8 millisecond 9 microsecond; select interval 1 year 2 month 3 week 4 day 5 hour 6 minute 7 seconds 8 millisecond 9 microsecond;
select interval '30' year '25' month '-100' day '40' hour '80' minute '299.889987299' second; select interval '30' year '25' month '-100' day '40' hour '80' minute '299.889987299' second;
@ -105,6 +107,7 @@ select interval '15:40:32.99899999' hour to second;
select interval '20 40:32.99899999' minute to second; select interval '20 40:32.99899999' minute to second;
select interval '40:32.99899999' minute to second; select interval '40:32.99899999' minute to second;
select interval '40:32' minute to second; select interval '40:32' minute to second;
select interval 30 day day;
-- ns is not supported -- ns is not supported
select interval 10 nanoseconds; select interval 10 nanoseconds;
@ -128,6 +131,129 @@ select interval 1 year '2-1' year to month;
select interval 1 year '12:11:10' hour to second; select interval 1 year '12:11:10' hour to second;
select interval '10-9' year to month '1' year; select interval '10-9' year to month '1' year;
select interval '12:11:10' hour to second '1' year; select interval '12:11:10' hour to second '1' year;
select interval (-30) day;
select interval (a + 1) day;
select interval 30 day day day;
-- awareness of the positive sign before interval type -- sum interval values
select +interval '1 second'; -- null
select sum(cast(null as interval));
-- empty set
select sum(cast(v as interval)) from VALUES ('1 seconds') t(v) where 1=0;
-- basic interval sum
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v);
select sum(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v);
-- group by
select
i,
sum(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i;
-- having
select
sum(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null;
-- window
SELECT
i,
sum(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES(1, '1 seconds'), (1, '2 seconds'), (2, NULL), (2, NULL) t(i,v);
-- average with interval type
-- null
select avg(cast(v as interval)) from VALUES (null) t(v);
-- empty set
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0;
-- basic interval avg
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v);
select avg(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v);
-- group by
select
i,
avg(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i;
-- having
select
avg(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null;
-- window
SELECT
i,
avg(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES (1,'1 seconds'), (1,'2 seconds'), (2,NULL), (2,NULL) t(i,v);
-- Interval year-month arithmetic
create temporary view interval_arithmetic as
select CAST(dateval AS date), CAST(tsval AS timestamp) from values
('2012-01-01', '2012-01-01')
as interval_arithmetic(dateval, tsval);
select
dateval,
dateval - interval '2-2' year to month,
dateval - interval '-2-2' year to month,
dateval + interval '2-2' year to month,
dateval + interval '-2-2' year to month,
- interval '2-2' year to month + dateval,
interval '2-2' year to month + dateval
from interval_arithmetic;
select
tsval,
tsval - interval '2-2' year to month,
tsval - interval '-2-2' year to month,
tsval + interval '2-2' year to month,
tsval + interval '-2-2' year to month,
- interval '2-2' year to month + tsval,
interval '2-2' year to month + tsval
from interval_arithmetic;
select
interval '2-2' year to month + interval '3-3' year to month,
interval '2-2' year to month - interval '3-3' year to month
from interval_arithmetic;
-- Interval day-time arithmetic
select
dateval,
dateval - interval '99 11:22:33.123456789' day to second,
dateval - interval '-99 11:22:33.123456789' day to second,
dateval + interval '99 11:22:33.123456789' day to second,
dateval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + dateval,
interval '99 11:22:33.123456789' day to second + dateval
from interval_arithmetic;
select
tsval,
tsval - interval '99 11:22:33.123456789' day to second,
tsval - interval '-99 11:22:33.123456789' day to second,
tsval + interval '99 11:22:33.123456789' day to second,
tsval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + tsval,
interval '99 11:22:33.123456789' day to second + tsval
from interval_arithmetic;
select
interval '99 11:22:33.123456789' day to second + interval '10 9:8:7.123456789' day to second,
interval '99 11:22:33.123456789' day to second - interval '10 9:8:7.123456789' day to second
from interval_arithmetic;

View file

@ -1,5 +1,5 @@
-- Automatically generated by SQLQueryTestSuite -- Automatically generated by SQLQueryTestSuite
-- Number of queries: 74 -- Number of queries: 56
-- !query 0 -- !query 0
@ -573,177 +573,3 @@ org.apache.spark.sql.AnalysisException
Aggregate/Window/Generate expressions are not valid in where clause of the query. Aggregate/Window/Generate expressions are not valid in where clause of the query.
Expression in where clause: [(((test_agg.`k` = 1) OR (test_agg.`k` = 2)) OR (((count(1) + 1L) > 1L) OR (max(test_agg.`k`) > 1)))] Expression in where clause: [(((test_agg.`k` = 1) OR (test_agg.`k` = 2)) OR (((count(1) + 1L) > 1L) OR (max(test_agg.`k`) > 1)))]
Invalid expressions: [count(1), max(test_agg.`k`)]; Invalid expressions: [count(1), max(test_agg.`k`)];
-- !query 56
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where v is null
-- !query 56 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 56 output
NULL
-- !query 57
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0
-- !query 57 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 57 output
NULL
-- !query 58
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v)
-- !query 58 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 58 output
3 seconds
-- !query 59
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v)
-- !query 59 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 59 output
1 seconds
-- !query 60
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v)
-- !query 60 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 60 output
-3 seconds
-- !query 61
select sum(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v)
-- !query 61 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 61 output
-7 days 2 seconds
-- !query 62
select
i,
sum(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i
-- !query 62 schema
struct<i:int,sum(CAST(v AS INTERVAL)):interval>
-- !query 62 output
1 -2 days
2 2 seconds
3 NULL
-- !query 63
select
sum(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null
-- !query 63 schema
struct<sv:interval>
-- !query 63 output
-2 days 2 seconds
-- !query 64
SELECT
i,
Sum(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES(1,'1 seconds'),(1,'2 seconds'),(2,NULL),(2,NULL) t(i,v)
-- !query 64 schema
struct<i:int,sum(CAST(v AS INTERVAL)) OVER (ORDER BY i ASC NULLS FIRST ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING):interval>
-- !query 64 output
1 2 seconds
1 3 seconds
2 NULL
2 NULL
-- !query 65
select avg(cast(v as interval)) from VALUES (null) t(v)
-- !query 65 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 65 output
NULL
-- !query 66
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0
-- !query 66 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 66 output
NULL
-- !query 67
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v)
-- !query 67 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 67 output
1.5 seconds
-- !query 68
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v)
-- !query 68 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 68 output
0.5 seconds
-- !query 69
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v)
-- !query 69 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 69 output
-1.5 seconds
-- !query 70
select avg(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v)
-- !query 70 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 70 output
-3 days -11 hours -59 minutes -59 seconds
-- !query 71
select
i,
avg(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i
-- !query 71 schema
struct<i:int,avg(CAST(v AS INTERVAL)):interval>
-- !query 71 output
1 -1 days
2 2 seconds
3 NULL
-- !query 72
select
avg(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null
-- !query 72 schema
struct<sv:interval>
-- !query 72 output
-15 hours -59 minutes -59.333333 seconds
-- !query 73
SELECT
i,
avg(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES (1,'1 seconds'), (1,'2 seconds'), (2,NULL), (2,NULL) t(i,v)
-- !query 73 schema
struct<i:int,avg(CAST(v AS INTERVAL)) OVER (ORDER BY i ASC NULLS FIRST ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING):interval>
-- !query 73 output
1 1.5 seconds
1 2 seconds
2 NULL
2 NULL

View file

@ -1,5 +1,5 @@
-- Automatically generated by SQLQueryTestSuite -- Automatically generated by SQLQueryTestSuite
-- Number of queries: 88 -- Number of queries: 118
-- !query 0 -- !query 0
@ -253,295 +253,295 @@ struct<1 months -1 days 1 seconds:interval>
-- !query 31 -- !query 31
select make_interval(1) select +interval '-1 month 1 day -1 second'
-- !query 31 schema -- !query 31 schema
struct<make_interval(1, 0, 0, 0, 0, 0, 0.000000):interval> struct<-1 months 1 days -1 seconds:interval>
-- !query 31 output -- !query 31 output
1 years -1 months 1 days -1 seconds
-- !query 32 -- !query 32
select make_interval(1, 2) select +interval -1 month 1 day -1 second
-- !query 32 schema -- !query 32 schema
struct<make_interval(1, 2, 0, 0, 0, 0, 0.000000):interval> struct<-1 months 1 days -1 seconds:interval>
-- !query 32 output -- !query 32 output
1 years 2 months -1 months 1 days -1 seconds
-- !query 33 -- !query 33
select make_interval(1, 2, 3) select make_interval(1)
-- !query 33 schema -- !query 33 schema
struct<make_interval(1, 2, 3, 0, 0, 0, 0.000000):interval> struct<make_interval(1, 0, 0, 0, 0, 0, 0.000000):interval>
-- !query 33 output -- !query 33 output
1 years 2 months 21 days 1 years
-- !query 34 -- !query 34
select make_interval(1, 2, 3, 4) select make_interval(1, 2)
-- !query 34 schema -- !query 34 schema
struct<make_interval(1, 2, 3, 4, 0, 0, 0.000000):interval> struct<make_interval(1, 2, 0, 0, 0, 0, 0.000000):interval>
-- !query 34 output -- !query 34 output
1 years 2 months 25 days 1 years 2 months
-- !query 35 -- !query 35
select make_interval(1, 2, 3, 4, 5) select make_interval(1, 2, 3)
-- !query 35 schema -- !query 35 schema
struct<make_interval(1, 2, 3, 4, 5, 0, 0.000000):interval> struct<make_interval(1, 2, 3, 0, 0, 0, 0.000000):interval>
-- !query 35 output -- !query 35 output
1 years 2 months 25 days 5 hours 1 years 2 months 21 days
-- !query 36 -- !query 36
select make_interval(1, 2, 3, 4, 5, 6) select make_interval(1, 2, 3, 4)
-- !query 36 schema -- !query 36 schema
struct<make_interval(1, 2, 3, 4, 5, 6, 0.000000):interval> struct<make_interval(1, 2, 3, 4, 0, 0, 0.000000):interval>
-- !query 36 output -- !query 36 output
1 years 2 months 25 days 5 hours 6 minutes 1 years 2 months 25 days
-- !query 37 -- !query 37
select make_interval(1, 2, 3, 4, 5, 6, 7.008009) select make_interval(1, 2, 3, 4, 5)
-- !query 37 schema -- !query 37 schema
struct<make_interval(1, 2, 3, 4, 5, 6, CAST(7.008009 AS DECIMAL(8,6))):interval> struct<make_interval(1, 2, 3, 4, 5, 0, 0.000000):interval>
-- !query 37 output -- !query 37 output
1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds 1 years 2 months 25 days 5 hours
-- !query 38 -- !query 38
select cast('1 second' as interval) select make_interval(1, 2, 3, 4, 5, 6)
-- !query 38 schema -- !query 38 schema
struct<CAST(1 second AS INTERVAL):interval> struct<make_interval(1, 2, 3, 4, 5, 6, 0.000000):interval>
-- !query 38 output -- !query 38 output
1 seconds 1 years 2 months 25 days 5 hours 6 minutes
-- !query 39 -- !query 39
select cast('+1 second' as interval) select make_interval(1, 2, 3, 4, 5, 6, 7.008009)
-- !query 39 schema -- !query 39 schema
struct<CAST(+1 second AS INTERVAL):interval> struct<make_interval(1, 2, 3, 4, 5, 6, CAST(7.008009 AS DECIMAL(8,6))):interval>
-- !query 39 output -- !query 39 output
1 seconds 1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds
-- !query 40 -- !query 40
select cast('-1 second' as interval) select cast('1 second' as interval)
-- !query 40 schema -- !query 40 schema
struct<CAST(-1 second AS INTERVAL):interval> struct<CAST(1 second AS INTERVAL):interval>
-- !query 40 output -- !query 40 output
-1 seconds 1 seconds
-- !query 41 -- !query 41
select cast('+ 1 second' as interval) select cast('+1 second' as interval)
-- !query 41 schema -- !query 41 schema
struct<CAST(+ 1 second AS INTERVAL):interval> struct<CAST(+1 second AS INTERVAL):interval>
-- !query 41 output -- !query 41 output
1 seconds 1 seconds
-- !query 42 -- !query 42
select cast('- 1 second' as interval) select cast('-1 second' as interval)
-- !query 42 schema -- !query 42 schema
struct<CAST(- 1 second AS INTERVAL):interval> struct<CAST(-1 second AS INTERVAL):interval>
-- !query 42 output -- !query 42 output
-1 seconds -1 seconds
-- !query 43 -- !query 43
select cast('- -1 second' as interval) select cast('+ 1 second' as interval)
-- !query 43 schema -- !query 43 schema
struct<CAST(- -1 second AS INTERVAL):interval> struct<CAST(+ 1 second AS INTERVAL):interval>
-- !query 43 output -- !query 43 output
NULL 1 seconds
-- !query 44 -- !query 44
select cast('- +1 second' as interval) select cast('- 1 second' as interval)
-- !query 44 schema -- !query 44 schema
struct<CAST(- +1 second AS INTERVAL):interval> struct<CAST(- 1 second AS INTERVAL):interval>
-- !query 44 output -- !query 44 output
NULL -1 seconds
-- !query 45 -- !query 45
select justify_days(cast(null as interval)) select cast('- -1 second' as interval)
-- !query 45 schema -- !query 45 schema
struct<justifyDays(CAST(NULL AS INTERVAL)):interval> struct<CAST(- -1 second AS INTERVAL):interval>
-- !query 45 output -- !query 45 output
NULL NULL
-- !query 46 -- !query 46
select justify_hours(cast(null as interval)) select cast('- +1 second' as interval)
-- !query 46 schema -- !query 46 schema
struct<justifyHours(CAST(NULL AS INTERVAL)):interval> struct<CAST(- +1 second AS INTERVAL):interval>
-- !query 46 output -- !query 46 output
NULL NULL
-- !query 47 -- !query 47
select justify_interval(cast(null as interval)) select justify_days(cast(null as interval))
-- !query 47 schema -- !query 47 schema
struct<justifyInterval(CAST(NULL AS INTERVAL)):interval> struct<justifyDays(CAST(NULL AS INTERVAL)):interval>
-- !query 47 output -- !query 47 output
NULL NULL
-- !query 48 -- !query 48
select justify_days(interval '1 month 59 day 25 hour') select justify_hours(cast(null as interval))
-- !query 48 schema -- !query 48 schema
struct<justifyDays(1 months 59 days 25 hours):interval> struct<justifyHours(CAST(NULL AS INTERVAL)):interval>
-- !query 48 output -- !query 48 output
2 months 29 days 25 hours NULL
-- !query 49 -- !query 49
select justify_hours(interval '1 month 59 day 25 hour') select justify_interval(cast(null as interval))
-- !query 49 schema -- !query 49 schema
struct<justifyHours(1 months 59 days 25 hours):interval> struct<justifyInterval(CAST(NULL AS INTERVAL)):interval>
-- !query 49 output -- !query 49 output
1 months 60 days 1 hours NULL
-- !query 50 -- !query 50
select justify_interval(interval '1 month 59 day 25 hour') select justify_days(interval '1 month 59 day 25 hour')
-- !query 50 schema -- !query 50 schema
struct<justifyInterval(1 months 59 days 25 hours):interval> struct<justifyDays(1 months 59 days 25 hours):interval>
-- !query 50 output -- !query 50 output
3 months 1 hours 2 months 29 days 25 hours
-- !query 51 -- !query 51
select justify_days(interval '1 month -59 day 25 hour') select justify_hours(interval '1 month 59 day 25 hour')
-- !query 51 schema -- !query 51 schema
struct<justifyDays(1 months -59 days 25 hours):interval> struct<justifyHours(1 months 59 days 25 hours):interval>
-- !query 51 output -- !query 51 output
-29 days 25 hours 1 months 60 days 1 hours
-- !query 52 -- !query 52
select justify_hours(interval '1 month -59 day 25 hour') select justify_interval(interval '1 month 59 day 25 hour')
-- !query 52 schema -- !query 52 schema
struct<justifyHours(1 months -59 days 25 hours):interval> struct<justifyInterval(1 months 59 days 25 hours):interval>
-- !query 52 output -- !query 52 output
1 months -57 days -23 hours 3 months 1 hours
-- !query 53 -- !query 53
select justify_interval(interval '1 month -59 day 25 hour') select justify_days(interval '1 month -59 day 25 hour')
-- !query 53 schema -- !query 53 schema
struct<justifyInterval(1 months -59 days 25 hours):interval> struct<justifyDays(1 months -59 days 25 hours):interval>
-- !query 53 output -- !query 53 output
-27 days -23 hours -29 days 25 hours
-- !query 54 -- !query 54
select justify_days(interval '1 month 59 day -25 hour') select justify_hours(interval '1 month -59 day 25 hour')
-- !query 54 schema -- !query 54 schema
struct<justifyDays(1 months 59 days -25 hours):interval> struct<justifyHours(1 months -59 days 25 hours):interval>
-- !query 54 output -- !query 54 output
2 months 29 days -25 hours 1 months -57 days -23 hours
-- !query 55 -- !query 55
select justify_hours(interval '1 month 59 day -25 hour') select justify_interval(interval '1 month -59 day 25 hour')
-- !query 55 schema -- !query 55 schema
struct<justifyHours(1 months 59 days -25 hours):interval> struct<justifyInterval(1 months -59 days 25 hours):interval>
-- !query 55 output -- !query 55 output
1 months 57 days 23 hours -27 days -23 hours
-- !query 56 -- !query 56
select justify_interval(interval '1 month 59 day -25 hour') select justify_days(interval '1 month 59 day -25 hour')
-- !query 56 schema -- !query 56 schema
struct<justifyInterval(1 months 59 days -25 hours):interval> struct<justifyDays(1 months 59 days -25 hours):interval>
-- !query 56 output -- !query 56 output
2 months 27 days 23 hours 2 months 29 days -25 hours
-- !query 57 -- !query 57
select interval 13.123456789 seconds, interval -13.123456789 second select justify_hours(interval '1 month 59 day -25 hour')
-- !query 57 schema -- !query 57 schema
struct<13.123456 seconds:interval,-13.123456 seconds:interval> struct<justifyHours(1 months 59 days -25 hours):interval>
-- !query 57 output -- !query 57 output
13.123456 seconds -13.123456 seconds 1 months 57 days 23 hours
-- !query 58 -- !query 58
select interval 1 year 2 month 3 week 4 day 5 hour 6 minute 7 seconds 8 millisecond 9 microsecond select justify_interval(interval '1 month 59 day -25 hour')
-- !query 58 schema -- !query 58 schema
struct<1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds:interval> struct<justifyInterval(1 months 59 days -25 hours):interval>
-- !query 58 output -- !query 58 output
1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds 2 months 27 days 23 hours
-- !query 59 -- !query 59
select interval '30' year '25' month '-100' day '40' hour '80' minute '299.889987299' second select interval 13.123456789 seconds, interval -13.123456789 second
-- !query 59 schema -- !query 59 schema
struct<32 years 1 months -100 days 41 hours 24 minutes 59.889987 seconds:interval> struct<13.123456 seconds:interval,-13.123456 seconds:interval>
-- !query 59 output -- !query 59 output
32 years 1 months -100 days 41 hours 24 minutes 59.889987 seconds 13.123456 seconds -13.123456 seconds
-- !query 60 -- !query 60
select interval '0 0:0:0.1' day to second select interval 1 year 2 month 3 week 4 day 5 hour 6 minute 7 seconds 8 millisecond 9 microsecond
-- !query 60 schema -- !query 60 schema
struct<0.1 seconds:interval> struct<1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds:interval>
-- !query 60 output -- !query 60 output
0.1 seconds 1 years 2 months 25 days 5 hours 6 minutes 7.008009 seconds
-- !query 61 -- !query 61
select interval '10-9' year to month select interval '30' year '25' month '-100' day '40' hour '80' minute '299.889987299' second
-- !query 61 schema -- !query 61 schema
struct<10 years 9 months:interval> struct<32 years 1 months -100 days 41 hours 24 minutes 59.889987 seconds:interval>
-- !query 61 output -- !query 61 output
10 years 9 months 32 years 1 months -100 days 41 hours 24 minutes 59.889987 seconds
-- !query 62 -- !query 62
select interval '20 15:40:32.99899999' day to hour select interval '0 0:0:0.1' day to second
-- !query 62 schema -- !query 62 schema
struct<20 days 15 hours:interval> struct<0.1 seconds:interval>
-- !query 62 output -- !query 62 output
20 days 15 hours 0.1 seconds
-- !query 63 -- !query 63
select interval '20 15:40:32.99899999' day to minute select interval '10-9' year to month
-- !query 63 schema -- !query 63 schema
struct<20 days 15 hours 40 minutes:interval> struct<10 years 9 months:interval>
-- !query 63 output -- !query 63 output
20 days 15 hours 40 minutes 10 years 9 months
-- !query 64 -- !query 64
select interval '20 15:40:32.99899999' day to second select interval '20 15:40:32.99899999' day to hour
-- !query 64 schema -- !query 64 schema
struct<20 days 15 hours 40 minutes 32.998999 seconds:interval> struct<20 days 15 hours:interval>
-- !query 64 output -- !query 64 output
20 days 15 hours 40 minutes 32.998999 seconds 20 days 15 hours
-- !query 65 -- !query 65
select interval '15:40:32.99899999' hour to minute select interval '20 15:40:32.99899999' day to minute
-- !query 65 schema -- !query 65 schema
struct<15 hours 40 minutes:interval> struct<20 days 15 hours 40 minutes:interval>
-- !query 65 output -- !query 65 output
15 hours 40 minutes 20 days 15 hours 40 minutes
-- !query 66 -- !query 66
select interval '15:40.99899999' hour to second select interval '20 15:40:32.99899999' day to second
-- !query 66 schema -- !query 66 schema
struct<15 minutes 40.998999 seconds:interval> struct<20 days 15 hours 40 minutes 32.998999 seconds:interval>
-- !query 66 output -- !query 66 output
15 minutes 40.998999 seconds 20 days 15 hours 40 minutes 32.998999 seconds
-- !query 67 -- !query 67
select interval '15:40' hour to second select interval '15:40:32.99899999' hour to minute
-- !query 67 schema -- !query 67 schema
struct<15 hours 40 minutes:interval> struct<15 hours 40 minutes:interval>
-- !query 67 output -- !query 67 output
@ -549,42 +549,66 @@ struct<15 hours 40 minutes:interval>
-- !query 68 -- !query 68
select interval '15:40:32.99899999' hour to second select interval '15:40.99899999' hour to second
-- !query 68 schema -- !query 68 schema
struct<15 hours 40 minutes 32.998999 seconds:interval> struct<15 minutes 40.998999 seconds:interval>
-- !query 68 output -- !query 68 output
15 hours 40 minutes 32.998999 seconds 15 minutes 40.998999 seconds
-- !query 69 -- !query 69
select interval '20 40:32.99899999' minute to second select interval '15:40' hour to second
-- !query 69 schema -- !query 69 schema
struct<20 days 40 minutes 32.998999 seconds:interval> struct<15 hours 40 minutes:interval>
-- !query 69 output -- !query 69 output
20 days 40 minutes 32.998999 seconds 15 hours 40 minutes
-- !query 70 -- !query 70
select interval '40:32.99899999' minute to second select interval '15:40:32.99899999' hour to second
-- !query 70 schema -- !query 70 schema
struct<40 minutes 32.998999 seconds:interval> struct<15 hours 40 minutes 32.998999 seconds:interval>
-- !query 70 output -- !query 70 output
40 minutes 32.998999 seconds 15 hours 40 minutes 32.998999 seconds
-- !query 71 -- !query 71
select interval '40:32' minute to second select interval '20 40:32.99899999' minute to second
-- !query 71 schema -- !query 71 schema
struct<40 minutes 32 seconds:interval> struct<20 days 40 minutes 32.998999 seconds:interval>
-- !query 71 output -- !query 71 output
40 minutes 32 seconds 20 days 40 minutes 32.998999 seconds
-- !query 72 -- !query 72
select interval 10 nanoseconds select interval '40:32.99899999' minute to second
-- !query 72 schema -- !query 72 schema
struct<> struct<40 minutes 32.998999 seconds:interval>
-- !query 72 output -- !query 72 output
40 minutes 32.998999 seconds
-- !query 73
select interval '40:32' minute to second
-- !query 73 schema
struct<40 minutes 32 seconds:interval>
-- !query 73 output
40 minutes 32 seconds
-- !query 74
select interval 30 day day
-- !query 74 schema
struct<day:interval>
-- !query 74 output
30 days
-- !query 75
select interval 10 nanoseconds
-- !query 75 schema
struct<>
-- !query 75 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
no viable alternative at input '10 nanoseconds'(line 1, pos 19) no viable alternative at input '10 nanoseconds'(line 1, pos 19)
@ -594,35 +618,35 @@ select interval 10 nanoseconds
-------------------^^^ -------------------^^^
-- !query 73 -- !query 76
select map(1, interval 1 day, 2, interval 3 week) select map(1, interval 1 day, 2, interval 3 week)
-- !query 73 schema -- !query 76 schema
struct<map(1, 1 days, 2, 21 days):map<int,interval>> struct<map(1, 1 days, 2, 21 days):map<int,interval>>
-- !query 73 output -- !query 76 output
{1:1 days,2:21 days} {1:1 days,2:21 days}
-- !query 74 -- !query 77
select interval 'interval 3 year 1 hour' select interval 'interval 3 year 1 hour'
-- !query 74 schema -- !query 77 schema
struct<3 years 1 hours:interval> struct<3 years 1 hours:interval>
-- !query 74 output -- !query 77 output
3 years 1 hours 3 years 1 hours
-- !query 75 -- !query 78
select interval '3 year 1 hour' select interval '3 year 1 hour'
-- !query 75 schema -- !query 78 schema
struct<3 years 1 hours:interval> struct<3 years 1 hours:interval>
-- !query 75 output -- !query 78 output
3 years 1 hours 3 years 1 hours
-- !query 76 -- !query 79
select interval select interval
-- !query 76 schema -- !query 79 schema
struct<> struct<>
-- !query 76 output -- !query 79 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
at least one time unit should be given for interval literal(line 1, pos 7) at least one time unit should be given for interval literal(line 1, pos 7)
@ -632,11 +656,11 @@ select interval
-------^^^ -------^^^
-- !query 77 -- !query 80
select interval 1 fake_unit select interval 1 fake_unit
-- !query 77 schema -- !query 80 schema
struct<> struct<>
-- !query 77 output -- !query 80 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
no viable alternative at input '1 fake_unit'(line 1, pos 18) no viable alternative at input '1 fake_unit'(line 1, pos 18)
@ -646,11 +670,11 @@ select interval 1 fake_unit
------------------^^^ ------------------^^^
-- !query 78 -- !query 81
select interval 1 year to month select interval 1 year to month
-- !query 78 schema -- !query 81 schema
struct<> struct<>
-- !query 78 output -- !query 81 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
The value of from-to unit must be a string(line 1, pos 16) The value of from-to unit must be a string(line 1, pos 16)
@ -660,11 +684,11 @@ select interval 1 year to month
----------------^^^ ----------------^^^
-- !query 79 -- !query 82
select interval '1' year to second select interval '1' year to second
-- !query 79 schema -- !query 82 schema
struct<> struct<>
-- !query 79 output -- !query 82 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Intervals FROM year TO second are not supported.(line 1, pos 16) Intervals FROM year TO second are not supported.(line 1, pos 16)
@ -674,11 +698,11 @@ select interval '1' year to second
----------------^^^ ----------------^^^
-- !query 80 -- !query 83
select interval '10-9' year to month '2-1' year to month select interval '10-9' year to month '2-1' year to month
-- !query 80 schema -- !query 83 schema
struct<> struct<>
-- !query 80 output -- !query 83 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 37) Can only have a single from-to unit in the interval literal syntax(line 1, pos 37)
@ -688,11 +712,11 @@ select interval '10-9' year to month '2-1' year to month
-------------------------------------^^^ -------------------------------------^^^
-- !query 81 -- !query 84
select interval '10-9' year to month '12:11:10' hour to second select interval '10-9' year to month '12:11:10' hour to second
-- !query 81 schema -- !query 84 schema
struct<> struct<>
-- !query 81 output -- !query 84 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 37) Can only have a single from-to unit in the interval literal syntax(line 1, pos 37)
@ -702,11 +726,11 @@ select interval '10-9' year to month '12:11:10' hour to second
-------------------------------------^^^ -------------------------------------^^^
-- !query 82 -- !query 85
select interval '1 15:11' day to minute '12:11:10' hour to second select interval '1 15:11' day to minute '12:11:10' hour to second
-- !query 82 schema -- !query 85 schema
struct<> struct<>
-- !query 82 output -- !query 85 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 40) Can only have a single from-to unit in the interval literal syntax(line 1, pos 40)
@ -716,11 +740,11 @@ select interval '1 15:11' day to minute '12:11:10' hour to second
----------------------------------------^^^ ----------------------------------------^^^
-- !query 83 -- !query 86
select interval 1 year '2-1' year to month select interval 1 year '2-1' year to month
-- !query 83 schema -- !query 86 schema
struct<> struct<>
-- !query 83 output -- !query 86 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 23) Can only have a single from-to unit in the interval literal syntax(line 1, pos 23)
@ -730,11 +754,11 @@ select interval 1 year '2-1' year to month
-----------------------^^^ -----------------------^^^
-- !query 84 -- !query 87
select interval 1 year '12:11:10' hour to second select interval 1 year '12:11:10' hour to second
-- !query 84 schema -- !query 87 schema
struct<> struct<>
-- !query 84 output -- !query 87 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 23) Can only have a single from-to unit in the interval literal syntax(line 1, pos 23)
@ -744,11 +768,11 @@ select interval 1 year '12:11:10' hour to second
-----------------------^^^ -----------------------^^^
-- !query 85 -- !query 88
select interval '10-9' year to month '1' year select interval '10-9' year to month '1' year
-- !query 85 schema -- !query 88 schema
struct<> struct<>
-- !query 85 output -- !query 88 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 37) Can only have a single from-to unit in the interval literal syntax(line 1, pos 37)
@ -758,11 +782,11 @@ select interval '10-9' year to month '1' year
-------------------------------------^^^ -------------------------------------^^^
-- !query 86 -- !query 89
select interval '12:11:10' hour to second '1' year select interval '12:11:10' hour to second '1' year
-- !query 86 schema -- !query 89 schema
struct<> struct<>
-- !query 86 output -- !query 89 output
org.apache.spark.sql.catalyst.parser.ParseException org.apache.spark.sql.catalyst.parser.ParseException
Can only have a single from-to unit in the interval literal syntax(line 1, pos 42) Can only have a single from-to unit in the interval literal syntax(line 1, pos 42)
@ -772,9 +796,304 @@ select interval '12:11:10' hour to second '1' year
------------------------------------------^^^ ------------------------------------------^^^
-- !query 87 -- !query 90
select +interval '1 second' select interval (-30) day
-- !query 87 schema -- !query 90 schema
struct<1 seconds:interval> struct<>
-- !query 87 output -- !query 90 output
org.apache.spark.sql.AnalysisException
Undefined function: 'interval'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7
-- !query 91
select interval (a + 1) day
-- !query 91 schema
struct<>
-- !query 91 output
org.apache.spark.sql.AnalysisException
Undefined function: 'interval'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7
-- !query 92
select interval 30 day day day
-- !query 92 schema
struct<>
-- !query 92 output
org.apache.spark.sql.catalyst.parser.ParseException
extraneous input 'day' expecting <EOF>(line 1, pos 27)
== SQL ==
select interval 30 day day day
---------------------------^^^
-- !query 93
select sum(cast(null as interval))
-- !query 93 schema
struct<sum(CAST(NULL AS INTERVAL)):interval>
-- !query 93 output
NULL
-- !query 94
select sum(cast(v as interval)) from VALUES ('1 seconds') t(v) where 1=0
-- !query 94 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 94 output
NULL
-- !query 95
select sum(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v)
-- !query 95 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 95 output
3 seconds
-- !query 96
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v)
-- !query 96 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 96 output
1 seconds 1 seconds
-- !query 97
select sum(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v)
-- !query 97 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 97 output
-3 seconds
-- !query 98
select sum(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v)
-- !query 98 schema
struct<sum(CAST(v AS INTERVAL)):interval>
-- !query 98 output
-7 days 2 seconds
-- !query 99
select
i,
sum(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i
-- !query 99 schema
struct<i:int,sum(CAST(v AS INTERVAL)):interval>
-- !query 99 output
1 -2 days
2 2 seconds
3 NULL
-- !query 100
select
sum(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null
-- !query 100 schema
struct<sv:interval>
-- !query 100 output
-2 days 2 seconds
-- !query 101
SELECT
i,
sum(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES(1, '1 seconds'), (1, '2 seconds'), (2, NULL), (2, NULL) t(i,v)
-- !query 101 schema
struct<i:int,sum(CAST(v AS INTERVAL)) OVER (ORDER BY i ASC NULLS FIRST ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING):interval>
-- !query 101 output
1 2 seconds
1 3 seconds
2 NULL
2 NULL
-- !query 102
select avg(cast(v as interval)) from VALUES (null) t(v)
-- !query 102 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 102 output
NULL
-- !query 103
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v) where 1=0
-- !query 103 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 103 output
NULL
-- !query 104
select avg(cast(v as interval)) from VALUES ('1 seconds'), ('2 seconds'), (null) t(v)
-- !query 104 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 104 output
1.5 seconds
-- !query 105
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('2 seconds'), (null) t(v)
-- !query 105 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 105 output
0.5 seconds
-- !query 106
select avg(cast(v as interval)) from VALUES ('-1 seconds'), ('-2 seconds'), (null) t(v)
-- !query 106 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 106 output
-1.5 seconds
-- !query 107
select avg(cast(v as interval)) from VALUES ('-1 weeks'), ('2 seconds'), (null) t(v)
-- !query 107 schema
struct<avg(CAST(v AS INTERVAL)):interval>
-- !query 107 output
-3 days -11 hours -59 minutes -59 seconds
-- !query 108
select
i,
avg(cast(v as interval))
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
group by i
-- !query 108 schema
struct<i:int,avg(CAST(v AS INTERVAL)):interval>
-- !query 108 output
1 -1 days
2 2 seconds
3 NULL
-- !query 109
select
avg(cast(v as interval)) as sv
from VALUES (1, '-1 weeks'), (2, '2 seconds'), (3, null), (1, '5 days') t(i, v)
having sv is not null
-- !query 109 schema
struct<sv:interval>
-- !query 109 output
-15 hours -59 minutes -59.333333 seconds
-- !query 110
SELECT
i,
avg(cast(v as interval)) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
FROM VALUES (1,'1 seconds'), (1,'2 seconds'), (2,NULL), (2,NULL) t(i,v)
-- !query 110 schema
struct<i:int,avg(CAST(v AS INTERVAL)) OVER (ORDER BY i ASC NULLS FIRST ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING):interval>
-- !query 110 output
1 1.5 seconds
1 2 seconds
2 NULL
2 NULL
-- !query 111
create temporary view interval_arithmetic as
select CAST(dateval AS date), CAST(tsval AS timestamp) from values
('2012-01-01', '2012-01-01')
as interval_arithmetic(dateval, tsval)
-- !query 111 schema
struct<>
-- !query 111 output
-- !query 112
select
dateval,
dateval - interval '2-2' year to month,
dateval - interval '-2-2' year to month,
dateval + interval '2-2' year to month,
dateval + interval '-2-2' year to month,
- interval '2-2' year to month + dateval,
interval '2-2' year to month + dateval
from interval_arithmetic
-- !query 112 schema
struct<dateval:date,CAST(CAST(dateval AS TIMESTAMP) - 2 years 2 months AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) - -2 years -2 months AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + 2 years 2 months AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + -2 years -2 months AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + -2 years -2 months AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + 2 years 2 months AS DATE):date>
-- !query 112 output
2012-01-01 2009-11-01 2014-03-01 2014-03-01 2009-11-01 2009-11-01 2014-03-01
-- !query 113
select
tsval,
tsval - interval '2-2' year to month,
tsval - interval '-2-2' year to month,
tsval + interval '2-2' year to month,
tsval + interval '-2-2' year to month,
- interval '2-2' year to month + tsval,
interval '2-2' year to month + tsval
from interval_arithmetic
-- !query 113 schema
struct<tsval:timestamp,CAST(tsval - 2 years 2 months AS TIMESTAMP):timestamp,CAST(tsval - -2 years -2 months AS TIMESTAMP):timestamp,CAST(tsval + 2 years 2 months AS TIMESTAMP):timestamp,CAST(tsval + -2 years -2 months AS TIMESTAMP):timestamp,CAST(tsval + -2 years -2 months AS TIMESTAMP):timestamp,CAST(tsval + 2 years 2 months AS TIMESTAMP):timestamp>
-- !query 113 output
2012-01-01 00:00:00 2009-11-01 00:00:00 2014-03-01 00:00:00 2014-03-01 00:00:00 2009-11-01 00:00:00 2009-11-01 00:00:00 2014-03-01 00:00:00
-- !query 114
select
interval '2-2' year to month + interval '3-3' year to month,
interval '2-2' year to month - interval '3-3' year to month
from interval_arithmetic
-- !query 114 schema
struct<(2 years 2 months + 3 years 3 months):interval,(2 years 2 months - 3 years 3 months):interval>
-- !query 114 output
5 years 5 months -1 years -1 months
-- !query 115
select
dateval,
dateval - interval '99 11:22:33.123456789' day to second,
dateval - interval '-99 11:22:33.123456789' day to second,
dateval + interval '99 11:22:33.123456789' day to second,
dateval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + dateval,
interval '99 11:22:33.123456789' day to second + dateval
from interval_arithmetic
-- !query 115 schema
struct<dateval:date,CAST(CAST(dateval AS TIMESTAMP) - 99 days 11 hours 22 minutes 33.123456 seconds AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) - -99 days -11 hours -22 minutes -33.123456 seconds AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + 99 days 11 hours 22 minutes 33.123456 seconds AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + -99 days -11 hours -22 minutes -33.123456 seconds AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + -99 days -11 hours -22 minutes -33.123456 seconds AS DATE):date,CAST(CAST(dateval AS TIMESTAMP) + 99 days 11 hours 22 minutes 33.123456 seconds AS DATE):date>
-- !query 115 output
2012-01-01 2011-09-23 2012-04-09 2012-04-09 2011-09-23 2011-09-23 2012-04-09
-- !query 116
select
tsval,
tsval - interval '99 11:22:33.123456789' day to second,
tsval - interval '-99 11:22:33.123456789' day to second,
tsval + interval '99 11:22:33.123456789' day to second,
tsval + interval '-99 11:22:33.123456789' day to second,
-interval '99 11:22:33.123456789' day to second + tsval,
interval '99 11:22:33.123456789' day to second + tsval
from interval_arithmetic
-- !query 116 schema
struct<tsval:timestamp,CAST(tsval - 99 days 11 hours 22 minutes 33.123456 seconds AS TIMESTAMP):timestamp,CAST(tsval - -99 days -11 hours -22 minutes -33.123456 seconds AS TIMESTAMP):timestamp,CAST(tsval + 99 days 11 hours 22 minutes 33.123456 seconds AS TIMESTAMP):timestamp,CAST(tsval + -99 days -11 hours -22 minutes -33.123456 seconds AS TIMESTAMP):timestamp,CAST(tsval + -99 days -11 hours -22 minutes -33.123456 seconds AS TIMESTAMP):timestamp,CAST(tsval + 99 days 11 hours 22 minutes 33.123456 seconds AS TIMESTAMP):timestamp>
-- !query 116 output
2012-01-01 00:00:00 2011-09-23 12:37:26.876544 2012-04-09 11:22:33.123456 2012-04-09 11:22:33.123456 2011-09-23 12:37:26.876544 2011-09-23 12:37:26.876544 2012-04-09 11:22:33.123456
-- !query 117
select
interval '99 11:22:33.123456789' day to second + interval '10 9:8:7.123456789' day to second,
interval '99 11:22:33.123456789' day to second - interval '10 9:8:7.123456789' day to second
from interval_arithmetic
-- !query 117 schema
struct<(99 days 11 hours 22 minutes 33.123456 seconds + 10 days 9 hours 8 minutes 7.123456 seconds):interval,(99 days 11 hours 22 minutes 33.123456 seconds - 10 days 9 hours 8 minutes 7.123456 seconds):interval>
-- !query 117 output
109 days 20 hours 30 minutes 40.246912 seconds 89 days 2 hours 14 minutes 26 seconds