From: dan Date: Mon, 13 Jul 2020 15:20:27 +0000 (+0000) Subject: Fix a problem causing queries containing window functions to ignore collation sequenc... X-Git-Tag: version-3.33.0~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=27da907f8eea868f6eae12f39b7d489bd1c11866;p=thirdparty%2Fsqlite.git Fix a problem causing queries containing window functions to ignore collation sequences under some circumstances. FossilOrigin-Name: e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 --- diff --git a/manifest b/manifest index 7fb5e5719d..a1b6958070 100644 --- a/manifest +++ b/manifest @@ -1,6 +1,6 @@ B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b -C Fix\san\sinteger\soverflow\sbug\sin\sfts5\striggered\sby\sa\scorrupt\srecord. -D 2020-07-13T11:06:30.315 +C Fix\sa\sproblem\scausing\squeries\scontaining\swindow\sfunctions\sto\signore\scollation\ssequences\sunder\ssome\scircumstances. +D 2020-07-13T15:20:27.736 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8 @@ -31,7 +31,7 @@ F src/update.c 6a0484134635f167594d597a33d186051125d3ef41803a90b246cea6cf7f11f9 F src/util.c c0bacc165f46169d2b720c37c8719165e383211698fad1de39dd16a8c161815a F src/vdbe.c 981666c49d33039df6dc9fccd40191575586ac4866255b2f57819cc5eb99f572 F src/vdbeapi.c c1a9004ac554d8d48794d2ce5f80397f8e419fd28643a543cc1e004c7713c3ef -F src/window.c ddfe21354731f5a7f29f39d7a9150c578191ce33b05b90875d7bc2cf7afd1751 +F src/window.c 0dec178bfa541c757d15a2be78f34aea36393a0966600366810e5f8739ccf370 F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe9812d002 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7 F test/corruptL.test 01cfda6b28f463d1713ac72a101e65549250568129ce5317ec6729729ecaf477 @@ -43,6 +43,7 @@ F test/fuzzdata8.db ef83ab1c8d130daabef304cb440bae2215208120de741b8476de66e16237 F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d +F test/window1.test e52b81fff0c3cb122a1240f336688eb81bea2967a99c4ddb78969adec7aadc2a F tool/lemon.c 600a58b9d1b8ec5419373982428e927ca208826edacb91ca42ab94514d006039 F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8 F tool/mkpragmatab.tcl ae5585ae76ca26e4d6ccd5ea9cdebaf5efefb318bf989497a0e846cd711d9ab1 @@ -50,7 +51,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58 -P 1bd18ca35bdbf3034591bf8981fd3a985f0920379bc4dc81e0e6a819667998e9 -R 43097d6a212fb3bde30bde7120d335a2 +P 49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 +R 18df21e3eeb9dc795d1a995e52f5b385 U dan -Z bd29e1b14f7ec3369b0d887f7b4d4b83 +Z 7954a7e23c93e850aa318d75407d6e75 diff --git a/manifest.uuid b/manifest.uuid index 34d4b08854..f49c48a4a6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92 \ No newline at end of file +e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7 \ No newline at end of file diff --git a/src/window.c b/src/window.c index ab8b5ce139..602af784a9 100644 --- a/src/window.c +++ b/src/window.c @@ -803,6 +803,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); } if( p->pSub ){ + int f = pExpr->flags & EP_Collate; assert( ExprHasProperty(pExpr, EP_Static)==0 ); ExprSetProperty(pExpr, EP_Static); sqlite3ExprDelete(pParse->db, pExpr); @@ -813,6 +814,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ pExpr->iColumn = (iCol<0 ? p->pSub->nExpr-1: iCol); pExpr->iTable = p->pWin->iEphCsr; pExpr->y.pTab = p->pTab; + pExpr->flags = f; } if( pParse->db->mallocFailed ) return WRC_Abort; break; diff --git a/test/window1.test b/test/window1.test index 618d95e685..dbaf4388fb 100644 --- a/test/window1.test +++ b/test/window1.test @@ -1947,4 +1947,58 @@ do_execsql_test 63.3 { FROM t1; } {{}} +#------------------------------------------------------------------------- +reset_db +do_execsql_test 64.1 { + CREATE TABLE t1(a INTEGER PRIMARY KEY, b); + INSERT INTO t1 VALUES(1, 'abcd'); + INSERT INTO t1 VALUES(2, 'BCDE'); + INSERT INTO t1 VALUES(3, 'cdef'); + INSERT INTO t1 VALUES(4, 'DEFG'); +} + +do_execsql_test 64.2 { + SELECT rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +} {1 abcd 2 BCDE 3 cdef 4 DEFG} + +do_execsql_test 64.3 { + SELECT count() OVER (), rowid, max(b COLLATE nocase)||'' + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase)||''; +} {4 1 abcd 4 2 BCDE 4 3 cdef 4 4 DEFG} + +do_execsql_test 64.4 { + SELECT count() OVER (), rowid, max(b COLLATE nocase) + FROM t1 + GROUP BY rowid + ORDER BY max(b COLLATE nocase); +} {4 1 abcd 4 2 BCDE 4 3 cdef 4 4 DEFG} + +#------------------------------------------------------------------------- +reset_db +do_execsql_test 65.1 { + CREATE TABLE t1(c1); + INSERT INTO t1 VALUES('abcd'); +} +do_execsql_test 65.2 { + SELECT max(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; +} {1} + +do_execsql_test 65.3 { + SELECT + count() OVER (), + group_concat(c1 COLLATE nocase) IN (SELECT 'aBCd') FROM t1; +} {1 1} + +do_execsql_test 65.4 { + SELECT COUNT() OVER () LIKE lead(102030) OVER( + ORDER BY sum('abcdef' COLLATE nocase) IN (SELECT 54321) + ) + FROM t1; +} {{}} + finish_test