From 0e175da667f849e11f510bc24dc7ff6ed1aba288 Mon Sep 17 00:00:00 2001 From: Ashutosh Bapat Date: Fri, 6 Oct 2023 11:58:21 +0530 Subject: [PATCH 8/9] Add tests for "invalid preceding or following size in window function" Ashutosh Bapat --- src/test/regress/expected/window.out | 50 ++++++++++++++++++++++++++++ src/test/regress/sql/window.sql | 50 ++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/src/test/regress/expected/window.out b/src/test/regress/expected/window.out index 6b8c3c3413..f1eaf4b58b 100644 --- a/src/test/regress/expected/window.out +++ b/src/test/regress/expected/window.out @@ -2424,6 +2424,11 @@ window w as (order by f_time desc range between 0 | 10:00:00 | 1 | 0 (12 rows) +select id, f_time, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_time desc range between + '-70 min' preceding and '2 hours' following); +ERROR: invalid preceding or following size in window function select id, f_time, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_time range between @@ -2484,6 +2489,11 @@ window w as (order by f_time range between 11 | 21:00:00 | | (12 rows) +select id, f_time, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_time range between + '-infinity'::interval following and 'infinity'::interval following); +ERROR: invalid preceding or following size in window function select id, f_timetz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timetz range between @@ -2524,6 +2534,11 @@ window w as (order by f_timetz desc range between 0 | 10:00:00+01 | 1 | 0 (12 rows) +select id, f_timetz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timetz desc range between + '70 min' preceding and '-2 hours' following); +ERROR: invalid preceding or following size in window function select id, f_timetz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timetz range between @@ -2584,6 +2599,11 @@ window w as (order by f_timetz range between 11 | 21:00:00+01 | | (12 rows) +select id, f_timetz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timetz range between + 'infinity'::interval following and '-infinity'::interval following); +ERROR: invalid preceding or following size in window function select id, f_interval, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_interval range between @@ -2624,6 +2644,11 @@ window w as (order by f_interval desc range between 0 | -infinity | 0 | 0 (12 rows) +select id, f_interval, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_interval desc range between + '-1 year' preceding and '1 year' following); +ERROR: invalid preceding or following size in window function select id, f_interval, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_interval range between @@ -2684,6 +2709,11 @@ window w as (order by f_interval range between 11 | infinity | 11 | 11 (12 rows) +select id, f_interval, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_interval range between + '-infinity'::interval following and 'infinity'::interval following); +ERROR: invalid preceding or following size in window function select id, f_timestamptz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamptz range between @@ -2724,6 +2754,11 @@ window w as (order by f_timestamptz desc range between 0 | -infinity | 0 | 0 (12 rows) +select id, f_timestamptz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamptz desc range between + '1 year' preceding and '-1 year' following); +ERROR: invalid preceding or following size in window function select id, f_timestamptz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamptz range between @@ -2784,6 +2819,11 @@ window w as (order by f_timestamptz range between 11 | infinity | 11 | 11 (12 rows) +select id, f_timestamptz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamptz range between + '-infinity'::interval following and 'infinity'::interval following); +ERROR: invalid preceding or following size in window function select id, f_timestamp, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamp range between @@ -2824,6 +2864,11 @@ window w as (order by f_timestamp desc range between 0 | -infinity | 0 | 0 (12 rows) +select id, f_timestamp, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamp desc range between + '-1 year' preceding and '1 year' following); +ERROR: invalid preceding or following size in window function select id, f_timestamp, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamp range between @@ -2884,6 +2929,11 @@ window w as (order by f_timestamp range between 11 | infinity | 11 | 11 (12 rows) +select id, f_timestamp, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamp range between + '-infinity'::interval following and 'infinity'::interval following); +ERROR: invalid preceding or following size in window function -- RANGE offset PRECEDING/FOLLOWING error cases select sum(salary) over (order by enroll_date, salary range between '1 year'::interval preceding and '2 years'::interval following exclude ties), salary, enroll_date from empsalary; diff --git a/src/test/regress/sql/window.sql b/src/test/regress/sql/window.sql index c2a4cb8d64..586ffb245d 100644 --- a/src/test/regress/sql/window.sql +++ b/src/test/regress/sql/window.sql @@ -696,6 +696,11 @@ from datetimes window w as (order by f_time desc range between '70 min' preceding and '2 hours' following); +select id, f_time, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_time desc range between + '-70 min' preceding and '2 hours' following); + select id, f_time, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_time range between @@ -711,6 +716,11 @@ from datetimes window w as (order by f_time range between 'infinity'::interval following and 'infinity'::interval following); +select id, f_time, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_time range between + '-infinity'::interval following and 'infinity'::interval following); + select id, f_timetz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timetz range between @@ -721,6 +731,11 @@ from datetimes window w as (order by f_timetz desc range between '70 min' preceding and '2 hours' following); +select id, f_timetz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timetz desc range between + '70 min' preceding and '-2 hours' following); + select id, f_timetz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timetz range between @@ -736,6 +751,11 @@ from datetimes window w as (order by f_timetz range between 'infinity'::interval following and 'infinity'::interval following); +select id, f_timetz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timetz range between + 'infinity'::interval following and '-infinity'::interval following); + select id, f_interval, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_interval range between @@ -746,6 +766,11 @@ from datetimes window w as (order by f_interval desc range between '1 year' preceding and '1 year' following); +select id, f_interval, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_interval desc range between + '-1 year' preceding and '1 year' following); + select id, f_interval, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_interval range between @@ -761,6 +786,11 @@ from datetimes window w as (order by f_interval range between 'infinity'::interval following and 'infinity'::interval following); +select id, f_interval, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_interval range between + '-infinity'::interval following and 'infinity'::interval following); + select id, f_timestamptz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamptz range between @@ -771,6 +801,11 @@ from datetimes window w as (order by f_timestamptz desc range between '1 year' preceding and '1 year' following); +select id, f_timestamptz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamptz desc range between + '1 year' preceding and '-1 year' following); + select id, f_timestamptz, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamptz range between @@ -786,6 +821,11 @@ from datetimes window w as (order by f_timestamptz range between 'infinity'::interval following and 'infinity'::interval following); +select id, f_timestamptz, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamptz range between + '-infinity'::interval following and 'infinity'::interval following); + select id, f_timestamp, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamp range between @@ -796,6 +836,11 @@ from datetimes window w as (order by f_timestamp desc range between '1 year' preceding and '1 year' following); +select id, f_timestamp, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamp desc range between + '-1 year' preceding and '1 year' following); + select id, f_timestamp, first_value(id) over w, last_value(id) over w from datetimes window w as (order by f_timestamp range between @@ -811,6 +856,11 @@ from datetimes window w as (order by f_timestamp range between 'infinity'::interval following and 'infinity'::interval following); +select id, f_timestamp, first_value(id) over w, last_value(id) over w +from datetimes +window w as (order by f_timestamp range between + '-infinity'::interval following and 'infinity'::interval following); + -- RANGE offset PRECEDING/FOLLOWING error cases select sum(salary) over (order by enroll_date, salary range between '1 year'::interval preceding and '2 years'::interval following exclude ties), salary, enroll_date from empsalary; -- 2.25.1