mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +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:
@ -6213,13 +6213,260 @@ do_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);
|
||||
} {}
|
||||
|
||||
do_execsql_test 7.1 {
|
||||
SELECT sum(a) OVER win FROM t2
|
||||
do_execsql_test 7.1.1 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING
|
||||
);
|
||||
} {9 9 9 9}
|
||||
} {9 9 9 9 9 9}
|
||||
|
||||
do_execsql_test 7.1.2 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.1.3 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.1.4 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.1.5 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.1.6 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} 1 9 9 9}
|
||||
|
||||
do_execsql_test 7.1.7 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.1.8 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.1.9 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.2.1 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING
|
||||
);
|
||||
} {2 2 2 2 2 2}
|
||||
|
||||
do_execsql_test 7.2.2 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} {} 2 2 2}
|
||||
|
||||
do_execsql_test 7.2.3 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 2 2 2}
|
||||
|
||||
do_execsql_test 7.2.4 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {2 2 2 {} {} {}}
|
||||
|
||||
do_execsql_test 7.2.5 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {2 2 2 {} {} {}}
|
||||
|
||||
do_execsql_test 7.2.6 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} 1 2 2 2}
|
||||
|
||||
do_execsql_test 7.2.7 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 2 2 2}
|
||||
|
||||
do_execsql_test 7.2.8 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING
|
||||
);
|
||||
} {2 2 2 {} {} {}}
|
||||
|
||||
do_execsql_test 7.2.9 {
|
||||
SELECT min (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {2 2 2 {} {} {}}
|
||||
|
||||
do_execsql_test 7.3.1 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING
|
||||
);
|
||||
} {9 9 9 9 9 9}
|
||||
|
||||
do_execsql_test 7.3.2 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.3.3 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.3.4 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.3.5 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.3.6 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} 1 9 9 9}
|
||||
|
||||
do_execsql_test 7.3.7 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 9 9 9}
|
||||
|
||||
do_execsql_test 7.3.8 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.3.9 {
|
||||
SELECT sum (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {9 9 9 {} {} {}}
|
||||
|
||||
do_execsql_test 7.4.1 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 6 FOLLOWING AND UNBOUNDED FOLLOWING
|
||||
);
|
||||
} {4 4 4 4 4 4}
|
||||
|
||||
do_execsql_test 7.4.2 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} {} 4 4 4}
|
||||
|
||||
do_execsql_test 7.4.3 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 4 4 4}
|
||||
|
||||
do_execsql_test 7.4.4 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {4 4 4 {} {} {}}
|
||||
|
||||
do_execsql_test 7.4.5 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2 FOLLOWING AND 1 FOLLOWING
|
||||
);
|
||||
} {4 4 4 {} {} {}}
|
||||
|
||||
do_execsql_test 7.4.6 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 1000 PRECEDING AND 2 PRECEDING
|
||||
);
|
||||
} {{} {} 1 4 4 4}
|
||||
|
||||
do_execsql_test 7.4.7 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS LAST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {{} {} {} 4 4 4}
|
||||
|
||||
do_execsql_test 7.4.8 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 1000 PRECEDING AND 2000 PRECEDING
|
||||
);
|
||||
} {4 4 4 {} {} {}}
|
||||
|
||||
do_execsql_test 7.4.9 {
|
||||
SELECT max (a) OVER win FROM t2
|
||||
WINDOW win AS (
|
||||
ORDER BY b NULLS FIRST RANGE BETWEEN 2000 FOLLOWING AND 1000 FOLLOWING
|
||||
);
|
||||
} {4 4 4 {} {} {}}
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user