]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem causing queries containing window functions to ignore collation sequenc...
authordan <dan@noemail.net>
Mon, 13 Jul 2020 15:20:27 +0000 (15:20 +0000)
committerdan <dan@noemail.net>
Mon, 13 Jul 2020 15:20:27 +0000 (15:20 +0000)
FossilOrigin-Name: e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7

manifest
manifest.uuid
src/window.c
test/window1.test

index 7fb5e5719d831aa511ae4dfa8c8518f48647a9ed..a1b6958070e203c992e8faf9f5d4d16aa2215ae6 100644 (file)
--- 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
index 34d4b08854536d24af652074723ef08ab32cca8f..f49c48a4a63412fd90b76d011797b6fe75dcf5f7 100644 (file)
@@ -1 +1 @@
-49da8bdce17ced910b414d50e8df79800513dcf03a196197dc1ea8e47deeda92
\ No newline at end of file
+e6c2192ef88e9990c8b91755c8e779f09e23f936a17123d8e42059257b756ed7
\ No newline at end of file
index ab8b5ce1392204396ced5f496287c8c35e79726a..602af784a9326e5794e054bf1641126b9a057d93 100644 (file)
@@ -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;
index 618d95e685360a995683a85d60da403c52ce534e..dbaf4388fbff6db37d1f2e95ecf96d14672e67c8 100644 (file)
@@ -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