1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-27 20:41:58 +03:00

Fix handling of NULL, text and blob values in window queries that use "RANGE BETWEEN A FOLLOWING AND B FOLLOWING", or "B PRECEDING AND A PRECEDING", where A>B.

FossilOrigin-Name: cb3e2be674316e1d39968eb6567f1fe1b72f9d89af49640a9e83f944979c4cf0
This commit is contained in:
dan
2019-09-04 06:56:43 +00:00
parent 7dc3547eeb
commit 1a97c413f8
5 changed files with 324 additions and 16 deletions

View File

@ -351,15 +351,75 @@ execsql_test 7.0 {
INSERT INTO t2 VALUES(2, NULL);
INSERT INTO t2 VALUES(3, NULL);
INSERT INTO t2 VALUES(4, NULL);
INSERT INTO t2 VALUES(5, 66);
INSERT INTO t2 VALUES(6, 67);
}
execsql_test 7.1 {
SELECT sum(a) OVER win FROM t2
foreach {tn f ex} {
1 sum ""
2 min ""
3 sum "EXCLUDE CURRENT ROW"
4 max "EXCLUDE CURRENT ROW"
} {
execsql_test 7.$tn.1 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING
);
"
execsql_test 7.$tn.2 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
);
"
execsql_test 7.$tn.3 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
);
"
execsql_test 7.$tn.4 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
);
"
execsql_test 7.$tn.5 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
);
"
execsql_test 7.$tn.6 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING
);
"
execsql_test 7.$tn.7 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
);
"
execsql_test 7.$tn.8 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING
);
"
execsql_test 7.$tn.9 "
SELECT $f (a) OVER win FROM t2
WINDOW win AS (
ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
);
"
}
finish_test