mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Fix a couple of problems with "RANGE BETWEEN <expr> PRECEDING AND <expr> PRECEDING" frames.
FossilOrigin-Name: 39225cc77579896214dceb93b7f224b4b3bc95b3505a2e19b41b0b18b184fbc4
This commit is contained in:
20
manifest
20
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Small\soptimizations\sto\sthe\sgrammar\sfor\swindow\sfunctions\ssave\sabout\s120\sbytes\nof\sspace\sin\sthe\sparser\stables.
|
C Fix\sa\scouple\sof\sproblems\swith\s"RANGE\sBETWEEN\s<expr>\sPRECEDING\sAND\s<expr>\sPRECEDING"\sframes.
|
||||||
D 2019-04-02T18:12:20.162
|
D 2019-04-03T16:27:44.377
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -607,7 +607,7 @@ F src/where.c ff2955dc2743c1af05ba5a8232ab72724d9a63b76dbee256368f40fd3ef82db5
|
|||||||
F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88
|
F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88
|
||||||
F src/wherecode.c 9572aab9eff42859a5f3e9b212f704521a84bf77e444217f0339d8b811e6333f
|
F src/wherecode.c 9572aab9eff42859a5f3e9b212f704521a84bf77e444217f0339d8b811e6333f
|
||||||
F src/whereexpr.c 90859652920f153d2c03f075488744be2926625ebd36911bcbcb17d0d29c891c
|
F src/whereexpr.c 90859652920f153d2c03f075488744be2926625ebd36911bcbcb17d0d29c891c
|
||||||
F src/window.c 1c3e20fc23e1c3cc0c2516626d7b0bcaf6a25d9a19ba397153363fd57bde2325
|
F src/window.c 038c248267e74ff70a2bb9b1884d40fd145c5183b017823ecb6cbb14bc781478
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
||||||
F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
|
F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
|
||||||
@@ -1679,7 +1679,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
|
|||||||
F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
|
F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
|
||||||
F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
|
F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
|
||||||
F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
|
F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
|
||||||
F test/window1.test 71bb9bfb705edff56ac592c1cf47286096558559b3fba7578e2ee5c8448e2a78
|
F test/window1.test 8d453bfaa3f8f0873ba16ca1270c7368f18445065a0003a1b5954ac4e95797b4
|
||||||
F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143
|
F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3143
|
||||||
F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e
|
F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e
|
||||||
F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
|
F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
|
||||||
@@ -1690,8 +1690,8 @@ F test/window5.test d328dd18221217c49c144181975eea17339eaeaf0e9aa558cee3afb84652
|
|||||||
F test/window6.test 465e608c021020fb0948a90200e154cd787bc910449e3dafee44c9ca5bd407fe
|
F test/window6.test 465e608c021020fb0948a90200e154cd787bc910449e3dafee44c9ca5bd407fe
|
||||||
F test/window7.tcl 6a1210f05d40ec89c22960213a22cd3f98d4e2f2eb20646c83c8c30d4d76108f
|
F test/window7.tcl 6a1210f05d40ec89c22960213a22cd3f98d4e2f2eb20646c83c8c30d4d76108f
|
||||||
F test/window7.test ce7f865241fdd1c5c4db869cd7bb2986c3be836bc2e73649a6846dd920f63e0f
|
F test/window7.test ce7f865241fdd1c5c4db869cd7bb2986c3be836bc2e73649a6846dd920f63e0f
|
||||||
F test/window8.tcl 97de3829e0e1aae2c3aaae41a55c54bc1b0751bbc80dfdd93020431b7a889dad
|
F test/window8.tcl 9e9a82ae9eea90a4a83481d641a812b974980c38f9247f3b89a6e3c8bed45518
|
||||||
F test/window8.test 0dd7e2d32605bf59dc6163b924faeff5951419c1c17a9e506e5a38606e97ab7e
|
F test/window8.test df187dc19921f7be0ab709d531d681bd80ccaac96a913a89ecee8b272b91d43f
|
||||||
F test/windowerr.tcl abf4d6d0c6d360213af98ed7d538295d905689e83692106f3ece0e3afb9d7f36
|
F test/windowerr.tcl abf4d6d0c6d360213af98ed7d538295d905689e83692106f3ece0e3afb9d7f36
|
||||||
F test/windowerr.test 675b5e6debfc9370bfacb0b91e2a93a8923512f92600b16f4ea70a1cd9b8e6e4
|
F test/windowerr.test 675b5e6debfc9370bfacb0b91e2a93a8923512f92600b16f4ea70a1cd9b8e6e4
|
||||||
F test/windowfault.test 16e906a2c4110c88372ff4bd5de59ac7397ec2f025912eff8e5677eedd126898
|
F test/windowfault.test 16e906a2c4110c88372ff4bd5de59ac7397ec2f025912eff8e5677eedd126898
|
||||||
@@ -1815,7 +1815,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P bc0fb1c324be2fd668bc4398c7d364b7e3c5a98537fe5fb58a125b66f3e6d041
|
P bce01d9584e52b23d7c07c2e832d5fa5d6e6235711c856b903a296725f61ed6e
|
||||||
R 31f79484d2e9bc79fcf8ee7f9041a857
|
R 2d8f926b545e1ca155da4ee78a88fc73
|
||||||
U drh
|
U dan
|
||||||
Z 869b3f84b6baf5642194100f15e4c54e
|
Z 299eef657559cfc0cc2116a950775914
|
||||||
|
@@ -1 +1 @@
|
|||||||
bce01d9584e52b23d7c07c2e832d5fa5d6e6235711c856b903a296725f61ed6e
|
39225cc77579896214dceb93b7f224b4b3bc95b3505a2e19b41b0b18b184fbc4
|
15
src/window.c
15
src/window.c
@@ -2323,19 +2323,22 @@ static int windowExprGtZero(Parse *pParse, Expr *pExpr){
|
|||||||
** regEnd = <expr2>
|
** regEnd = <expr2>
|
||||||
** regStart = <expr1>
|
** regStart = <expr1>
|
||||||
** }else{
|
** }else{
|
||||||
** while( (csrEnd.key + regEnd) <= csrCurrent.key ){
|
** if( (csrEnd.key + regEnd) <= csrCurrent.key ){
|
||||||
** AGGSTEP
|
** AGGSTEP
|
||||||
** }
|
** }
|
||||||
** RETURN_ROW
|
|
||||||
** while( (csrStart.key + regStart) < csrCurrent.key ){
|
** while( (csrStart.key + regStart) < csrCurrent.key ){
|
||||||
** AGGINVERSE
|
** AGGINVERSE
|
||||||
** }
|
** }
|
||||||
|
** RETURN_ROW
|
||||||
** }
|
** }
|
||||||
** }
|
** }
|
||||||
** flush:
|
** flush:
|
||||||
** while( (csrEnd.key + regEnd) <= csrCurrent.key ){
|
** while( (csrEnd.key + regEnd) <= csrCurrent.key ){
|
||||||
** AGGSTEP
|
** AGGSTEP
|
||||||
** }
|
** }
|
||||||
|
** while( (csrStart.key + regStart) < csrCurrent.key ){
|
||||||
|
** AGGINVERSE
|
||||||
|
** }
|
||||||
** RETURN_ROW
|
** RETURN_ROW
|
||||||
**
|
**
|
||||||
** RANGE BETWEEN <expr1> FOLLOWING AND <expr2> FOLLOWING
|
** RANGE BETWEEN <expr1> FOLLOWING AND <expr2> FOLLOWING
|
||||||
@@ -2576,6 +2579,8 @@ void sqlite3WindowCodeStep(
|
|||||||
sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
|
sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
|
||||||
|
|
||||||
sqlite3VdbeJumpHere(v, addrNe);
|
sqlite3VdbeJumpHere(v, addrNe);
|
||||||
|
|
||||||
|
/* Beginning of the block executed for the second and subsequent rows. */
|
||||||
if( regPeer ){
|
if( regPeer ){
|
||||||
windowIfNewPeer(pParse, pOrderBy, regNewPeer, regPeer, lblWhereEnd);
|
windowIfNewPeer(pParse, pOrderBy, regNewPeer, regPeer, lblWhereEnd);
|
||||||
}
|
}
|
||||||
@@ -2597,9 +2602,11 @@ void sqlite3WindowCodeStep(
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if( pMWin->eEnd==TK_PRECEDING ){
|
if( pMWin->eEnd==TK_PRECEDING ){
|
||||||
|
int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE);
|
||||||
windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
|
windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
|
||||||
|
if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
|
||||||
windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
|
windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
|
||||||
windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
|
if( !bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
|
||||||
}else{
|
}else{
|
||||||
int addr = 0;
|
int addr = 0;
|
||||||
windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
|
windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
|
||||||
@@ -2642,7 +2649,9 @@ void sqlite3WindowCodeStep(
|
|||||||
addrEmpty = sqlite3VdbeAddOp1(v, OP_Rewind, csrWrite);
|
addrEmpty = sqlite3VdbeAddOp1(v, OP_Rewind, csrWrite);
|
||||||
VdbeCoverage(v);
|
VdbeCoverage(v);
|
||||||
if( pMWin->eEnd==TK_PRECEDING ){
|
if( pMWin->eEnd==TK_PRECEDING ){
|
||||||
|
int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE);
|
||||||
windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
|
windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
|
||||||
|
if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
|
||||||
windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
|
windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
|
||||||
}else if( pMWin->eStart==TK_FOLLOWING ){
|
}else if( pMWin->eStart==TK_FOLLOWING ){
|
||||||
int addrStart;
|
int addrStart;
|
||||||
|
@@ -1081,6 +1081,91 @@ do_execsql_test 27.2 {
|
|||||||
WINDOW win AS (ORDER BY rowid ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
WINDOW win AS (ORDER BY rowid ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||||
} {1 1 1 2 3 4}
|
} {1 1 1 2 3 4}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
reset_db
|
||||||
|
do_execsql_test 28.1.1 {
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b CHAR(1), c CHAR(2), d ANY);
|
||||||
|
INSERT INTO t1 VALUES (3, 'C', 'cc', 1.0);
|
||||||
|
INSERT INTO t1 VALUES (13,'M', 'cc', NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 28.1.2 {
|
||||||
|
SELECT group_concat(b,'') OVER w1 FROM t1
|
||||||
|
WINDOW w1 AS (ORDER BY a RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING)
|
||||||
|
} {
|
||||||
|
{} {}
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 28.2.1 {
|
||||||
|
CREATE TABLE t2(a TEXT, b INTEGER);
|
||||||
|
INSERT INTO t2 VALUES('A', NULL);
|
||||||
|
INSERT INTO t2 VALUES('B', NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 28.2.1 {
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b CHAR(1), c CHAR(2), d ANY);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(10,'J', 'cc', NULL),
|
||||||
|
(11,'K', 'cc', 'xyz'),
|
||||||
|
(13,'M', 'cc', NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 28.2.2 {
|
||||||
|
SELECT a, b, c, quote(d), group_concat(b,'') OVER w1, '|' FROM t1
|
||||||
|
WINDOW w1 AS
|
||||||
|
(ORDER BY d DESC RANGE BETWEEN 7.0 PRECEDING AND 2.5 PRECEDING)
|
||||||
|
ORDER BY c, d, a;
|
||||||
|
} {
|
||||||
|
10 J cc NULL JM |
|
||||||
|
13 M cc NULL JM |
|
||||||
|
11 K cc 'xyz' K |
|
||||||
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
reset_db
|
||||||
|
|
||||||
|
do_execsql_test 29.1 {
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b CHAR(1), c CHAR(2), d ANY);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1, 'A', 'aa', 2.5),
|
||||||
|
(2, 'B', 'bb', 3.75),
|
||||||
|
(3, 'C', 'cc', 1.0),
|
||||||
|
(4, 'D', 'cc', 8.25),
|
||||||
|
(5, 'E', 'bb', 6.5),
|
||||||
|
(6, 'F', 'aa', 6.5),
|
||||||
|
(7, 'G', 'aa', 6.0),
|
||||||
|
(8, 'H', 'bb', 9.0),
|
||||||
|
(9, 'I', 'aa', 3.75),
|
||||||
|
(10,'J', 'cc', NULL),
|
||||||
|
(11,'K', 'cc', 'xyz'),
|
||||||
|
(12,'L', 'cc', 'xyZ'),
|
||||||
|
(13,'M', 'cc', NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 29.2 {
|
||||||
|
SELECT a, b, c, quote(d), group_concat(b,'') OVER w1, '|' FROM t1
|
||||||
|
WINDOW w1 AS
|
||||||
|
(PARTITION BY c ORDER BY d DESC
|
||||||
|
RANGE BETWEEN 7.0 PRECEDING AND 2.5 PRECEDING)
|
||||||
|
ORDER BY c, d, a;
|
||||||
|
} {
|
||||||
|
1 A aa 2.5 FG |
|
||||||
|
9 I aa 3.75 F |
|
||||||
|
7 G aa 6 {} |
|
||||||
|
6 F aa 6.5 {} |
|
||||||
|
2 B bb 3.75 HE |
|
||||||
|
5 E bb 6.5 H |
|
||||||
|
8 H bb 9 {} |
|
||||||
|
10 J cc NULL JM |
|
||||||
|
13 M cc NULL JM |
|
||||||
|
3 C cc 1 {} |
|
||||||
|
4 D cc 8.25 {} |
|
||||||
|
12 L cc 'xyZ' L |
|
||||||
|
11 K cc 'xyz' K |
|
||||||
|
}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
@@ -269,6 +269,31 @@ foreach {tn ex} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
==========
|
||||||
|
|
||||||
|
execsql_test 6.0 {
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t2(a TEXT, b INTEGER);
|
||||||
|
INSERT INTO t2 VALUES('A', NULL);
|
||||||
|
INSERT INTO t2 VALUES('B', NULL);
|
||||||
|
INSERT INTO t2 VALUES('C', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
execsql_test 6.1 {
|
||||||
|
SELECT string_agg(a, '.') OVER (
|
||||||
|
ORDER BY b NULLS FIRST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
|
||||||
|
)
|
||||||
|
FROM t2
|
||||||
|
}
|
||||||
|
|
||||||
|
execsql_test 6.2 {
|
||||||
|
SELECT string_agg(a, '.') OVER (
|
||||||
|
ORDER BY b DESC NULLS LAST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
|
||||||
|
)
|
||||||
|
FROM t2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
|
||||||
|
@@ -3841,7 +3841,7 @@ do_execsql_test 5.1.7.1 {
|
|||||||
count(a) OVER win
|
count(a) OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {979 102 83 979 102 83 979 102 83 979 102 83 979 102 83 979 102 83
|
} {979 102 83 979 102 83 979 102 83 979 102 83 979 102 83 979 102 83
|
||||||
979 102 83 979 113 81 979 113 82 979 133 80 979 148 79 979 158 77
|
979 102 83 979 113 81 979 113 82 979 133 80 979 148 79 979 158 77
|
||||||
@@ -3865,7 +3865,7 @@ do_execsql_test 5.1.7.2 {
|
|||||||
dense_rank() OVER win
|
dense_rank() OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE NO OTHERS )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {3830 89 89 4741 88 88 5640 84 84 5640 85 85 5640 86 86 5640 87 87
|
} {3830 89 89 4741 88 88 5640 84 84 5640 85 85 5640 86 86 5640 87 87
|
||||||
6485 81 81 6485 82 82 6485 83 83 7324 80 80 8163 78 78 8163 79 79
|
6485 81 81 6485 82 82 6485 83 83 7324 80 80 8163 78 78 8163 79 79
|
||||||
@@ -4166,7 +4166,7 @@ do_execsql_test 5.2.7.1 {
|
|||||||
count(a) OVER win
|
count(a) OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {963 929 6 979 102 82 979 102 82 979 102 82 979 102 82 979 102 82
|
} {963 929 6 979 102 82 979 102 82 979 102 82 979 102 82 979 102 82
|
||||||
979 102 83 979 113 80 979 113 81 979 113 82 979 133 79 979 148 78
|
979 102 83 979 113 80 979 113 81 979 113 82 979 133 79 979 148 78
|
||||||
@@ -4190,7 +4190,7 @@ do_execsql_test 5.2.7.2 {
|
|||||||
dense_rank() OVER win
|
dense_rank() OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE CURRENT ROW )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {2851 89 89 3778 88 88 4681 87 87 5556 83 83 5574 82 82 5586 81 81
|
} {2851 89 89 3778 88 88 4681 87 87 5556 83 83 5574 82 82 5586 81 81
|
||||||
5640 84 84 5640 85 85 5640 86 86 7324 80 80 8123 77 77 8129 73 73
|
5640 84 84 5640 85 85 5640 86 86 7324 80 80 8123 77 77 8129 73 73
|
||||||
@@ -4481,7 +4481,7 @@ do_execsql_test 5.3.7.1 {
|
|||||||
count(a) OVER win
|
count(a) OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {963 929 6 979 102 82 979 102 82 979 102 82 979 102 82 979 102 82
|
} {963 929 6 979 102 82 979 102 82 979 102 82 979 102 82 979 102 82
|
||||||
979 102 83 979 113 80 979 113 81 979 113 82 979 133 79 979 148 78
|
979 102 83 979 113 80 979 113 81 979 113 82 979 133 79 979 148 78
|
||||||
@@ -4505,7 +4505,7 @@ do_execsql_test 5.3.7.2 {
|
|||||||
dense_rank() OVER win
|
dense_rank() OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE GROUP )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {2851 89 89 3778 88 88 4681 87 87 5556 83 83 5574 82 82 5586 81 81
|
} {2851 89 89 3778 88 88 4681 87 87 5556 83 83 5574 82 82 5586 81 81
|
||||||
5640 84 84 5640 85 85 5640 86 86 7324 80 80 8123 77 77 8129 73 73
|
5640 84 84 5640 85 85 5640 86 86 7324 80 80 8123 77 77 8129 73 73
|
||||||
@@ -4804,7 +4804,7 @@ do_execsql_test 5.4.7.1 {
|
|||||||
count(a) OVER win
|
count(a) OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {979 102 83 979 102 83 979 102 83 979 102 83 979 102 83 979 102 83
|
} {979 102 83 979 102 83 979 102 83 979 102 83 979 102 83 979 102 83
|
||||||
979 102 83 979 113 81 979 113 82 979 133 80 979 148 79 979 158 77
|
979 102 83 979 113 81 979 113 82 979 133 80 979 148 79 979 158 77
|
||||||
@@ -4828,7 +4828,7 @@ do_execsql_test 5.4.7.2 {
|
|||||||
dense_rank() OVER win
|
dense_rank() OVER win
|
||||||
FROM t3
|
FROM t3
|
||||||
WINDOW win AS ( ORDER BY c , b , a
|
WINDOW win AS ( ORDER BY c , b , a
|
||||||
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES )
|
ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING EXCLUDE TIES )
|
||||||
ORDER BY 1 , 2 , 3
|
ORDER BY 1 , 2 , 3
|
||||||
} {3830 89 89 4741 88 88 5640 84 84 5640 85 85 5640 86 86 5640 87 87
|
} {3830 89 89 4741 88 88 5640 84 84 5640 85 85 5640 86 86 5640 87 87
|
||||||
6485 81 81 6485 82 82 6485 83 83 7324 80 80 8163 78 78 8163 79 79
|
6485 81 81 6485 82 82 6485 83 83 7324 80 80 8163 78 78 8163 79 79
|
||||||
@@ -4848,4 +4848,28 @@ do_execsql_test 5.4.7.2 {
|
|||||||
22796 16 16 22929 10 10 23042 9 9 23155 1 1 23155 2 2 23155 3 3
|
22796 16 16 22929 10 10 23042 9 9 23155 1 1 23155 2 2 23155 3 3
|
||||||
23155 4 4 23155 5 5 23155 6 6 23155 7 7 23155 8 8}
|
23155 4 4 23155 5 5 23155 6 6 23155 7 7 23155 8 8}
|
||||||
|
|
||||||
|
#==========================================================================
|
||||||
|
|
||||||
|
do_execsql_test 6.0 {
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t2(a TEXT, b INTEGER);
|
||||||
|
INSERT INTO t2 VALUES('A', NULL);
|
||||||
|
INSERT INTO t2 VALUES('B', NULL);
|
||||||
|
INSERT INTO t2 VALUES('C', 1);
|
||||||
|
} {}
|
||||||
|
|
||||||
|
do_execsql_test 6.1 {
|
||||||
|
SELECT group_concat(a, '.') OVER (
|
||||||
|
ORDER BY b RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
|
||||||
|
)
|
||||||
|
FROM t2
|
||||||
|
} {A.B A.B {}}
|
||||||
|
|
||||||
|
do_execsql_test 6.2 {
|
||||||
|
SELECT group_concat(a, '.') OVER (
|
||||||
|
ORDER BY b DESC RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
|
||||||
|
)
|
||||||
|
FROM t2
|
||||||
|
} {{} A.B A.B}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user