Files
email-tracker/external/duckdb/test/sql/window/test_invalid_window.test
2025-10-24 19:21:19 -05:00

134 lines
3.0 KiB
SQL

# name: test/sql/window/test_invalid_window.test
# description: Illegal window function
# group: [window]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE empsalary (depname varchar, empno bigint, salary int, enroll_date date)
statement ok
INSERT INTO empsalary VALUES ('develop', 10, 5200, '2007-08-01'), ('sales', 1, 5000, '2006-10-01'), ('personnel', 5, 3500, '2007-12-10'), ('sales', 4, 4800, '2007-08-08'), ('personnel', 2, 3900, '2006-12-23'), ('develop', 7, 4200, '2008-01-01'), ('develop', 9, 4500, '2008-01-01'), ('sales', 3, 4800, '2007-08-01'), ('develop', 8, 6000, '2006-10-01'), ('develop', 11, 5200, '2007-08-15')
# GROUP BY window function is not allowed
statement error
SELECT depname, min(salary) OVER (PARTITION BY depname ORDER BY salary, empno) m1 FROM empsalary GROUP BY m1 ORDER BY depname, empno
----
statement error
select row_number() over (range between unbounded following and unbounded preceding);
----
statement error
select row_number() over (range between unbounded preceding and unbounded preceding);
----
# ORDER BY is now implemented for window functions!
query I
select LIST(salary ORDER BY enroll_date, salary) OVER (PARTITION BY depname) FROM empsalary
ORDER BY ALL DESC
----
[6000, 5200, 5200, 4200, 4500]
[6000, 5200, 5200, 4200, 4500]
[6000, 5200, 5200, 4200, 4500]
[6000, 5200, 5200, 4200, 4500]
[6000, 5200, 5200, 4200, 4500]
[5000, 4800, 4800]
[5000, 4800, 4800]
[5000, 4800, 4800]
[3900, 3500]
[3900, 3500]
# GROUPS frame spec is now implemented for window functions!
query I
SELECT sum(i) OVER (ORDER BY i GROUPS 1 PRECEDING)
FROM generate_series(1,10) AS _(i)
ORDER BY i
----
1
3
5
7
9
11
13
15
17
19
# Invalid window names
foreach invalid PARTITION RANGE ROWS GROUPS
statement error
SELECT array_agg(i) OVER (${invalid} ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM generate_series(1,5) AS _(i)
WINDOW ${invalid} AS (ORDER BY i);
----
syntax error at or near
endloop
# Framed non-aggregate functions can't handle EXCLUDE
foreach func lead lag ntile
statement error
SELECT
i,
${func}(i ORDER BY i // 2, i) OVER (
ORDER BY i // 2
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
EXCLUDE TIES
) AS f,
FROM range(10) tbl(i)
ORDER BY i;
----
EXCLUDE is not supported for the window function
statement error
SELECT
i,
lead(i ORDER BY i // 2, i) OVER w AS f,
FROM range(10) tbl(i)
WINDOW w AS (
ORDER BY i // 2
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
EXCLUDE TIES
)
ORDER BY i;
----
EXCLUDE is not supported for the window function
endloop
foreach func row_number rank cume_dist
statement error
SELECT
i,
${func}(ORDER BY i // 2, i) OVER (
ORDER BY i // 2
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
EXCLUDE TIES
) AS f,
FROM range(10) tbl(i)
ORDER BY i;
----
EXCLUDE is not supported for the window function
statement error
SELECT
i,
${func}(ORDER BY i // 2, i) OVER w AS f,
FROM range(10) tbl(i)
WINDOW w AS (
ORDER BY i // 2
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
EXCLUDE TIES
)
ORDER BY i;
----
EXCLUDE is not supported for the window function
endloop