1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Do not allow floating point rounding errors to cause a window function xInverse() function to be invoked before the corresponding xStep() call.

FossilOrigin-Name: 7a19fed4f222bc6c20e13a1367c8235916d21ba5e6f5a31cd26842efe748e744
This commit is contained in:
dan
2021-04-05 19:05:18 +00:00
parent e3814ee026
commit 6b6ec407ab
4 changed files with 84 additions and 35 deletions

View File

@ -2001,4 +2001,48 @@ do_execsql_test 65.4 {
FROM t1;
} {{}}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 66.1 {
CREATE TABLE t1(a INTEGER);
INSERT INTO t1 VALUES(3578824042033200656);
INSERT INTO t1 VALUES(3029012920382354029);
}
foreach {tn spec} {
1 "ORDER BY a RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING"
2 "ORDER BY a RANGE BETWEEN 0.3 PRECEDING AND 0.1 PRECEDING"
3 "ORDER BY a RANGE BETWEEN 0.3 FOLLOWING AND 10 FOLLOWING"
4 "ORDER BY a DESC RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING"
5 "ORDER BY a NULLS LAST RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING"
6 "ORDER BY a RANGE BETWEEN 1.0 PRECEDING AND 2.0 PRECEDING"
} {
do_execsql_test 66.2.$tn "
SELECT total(a) OVER ( $spec ) FROM t1 ORDER BY a
" {
3.02901292038235e+18 3.5788240420332e+18
}
}
do_execsql_test 66.3 {
CREATE TABLE t2(a INTEGER);
INSERT INTO t2 VALUES(45);
INSERT INTO t2 VALUES(30);
}
foreach {tn spec res} {
1 "ORDER BY a RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING" {30.0 45.0}
2 "ORDER BY a RANGE BETWEEN 0.3 PRECEDING AND 0.1 PRECEDING" {0.0 0.0}
3 "ORDER BY a RANGE BETWEEN 0.3 FOLLOWING AND 10 FOLLOWING" {0.0 0.0}
4 "ORDER BY a DESC RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING" {30.0 45.0}
5 "ORDER BY a NULLS LAST RANGE BETWEEN 0.3 PRECEDING AND 10 FOLLOWING" {30.0 45.0}
6 "ORDER BY a RANGE BETWEEN 1.0 PRECEDING AND 2.0 PRECEDING" {0.0 0.0}
} {
do_execsql_test 66.2.$tn "
SELECT total(a) OVER ( $spec ) FROM t2 ORDER BY a
" $res
}
finish_test