]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with window functions in aggregate queries that do not have GROUP BY...
authordan <dan@noemail.net>
Fri, 27 Dec 2019 16:25:56 +0000 (16:25 +0000)
committerdan <dan@noemail.net>
Fri, 27 Dec 2019 16:25:56 +0000 (16:25 +0000)
FossilOrigin-Name: 99609786f485653464d1caef1d207ae299d28c925bff3e8e94891759b4765dcc

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

index 33ed82a300a30b086dcb6d1ef15afb6327750029..2908ea78ffdc63c80bc1c4fd0243684b9ffedb55 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\smistake\sconstant\sintegers\sin\sa\sPARTITION\sBY\sexpression\sfor\sreferences\sto\sORDER\sBY\sstyle\sreferences\sto\svalues\sreturned\sby\sthe\sSELECT\sstatement.
-D 2019-12-27T15:31:47.514
+C Fix\sa\sproblem\swith\swindow\sfunctions\sin\saggregate\squeries\sthat\sdo\snot\shave\sGROUP\sBY\sclauses.
+D 2019-12-27T16:25:56.334
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -618,7 +618,7 @@ F src/where.c 58653781a4b31fa16b95b953591fdc1f1ed5ff77574e59b90a27da3819b60a46
 F src/whereInt.h 4a296fd4fa79fdcbc2b5e8c1b898901617655811223e1082b899c23ecb092217
 F src/wherecode.c d42d3e0fe93786621b84dec8065e1dc6b324d7c5934df52f141555843b6aef4e
 F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
-F src/window.c c5c7da1a28123a3697f59ad0c90dd0ec3ed820ee34691be31d5cdadbaf2c5c38
+F src/window.c 87795bb8293179cb8a92529264d49bd66b5bcad5e91cfc17dd8d3e66a2a77f88
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1714,7 +1714,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test fbf107c91d8f5512be5a5b87c4c42ab9fdd54972
 F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/window1.test f091ea2dadaca112a0dab983a1055e21eda8d7829f43e73f75fb10651e80cc62
+F test/window1.test 9f5883b8f97ad81a9ae07cb737d5fd8e4b62a881c1d8a9db7a5aea6f4c6a1179
 F test/window2.tcl 492c125fa550cda1dd3555768a2303b3effbeceee215293adf8871efc25f1476
 F test/window2.test e466a88bd626d66edc3d352d7d7e1d5531e0079b549ba44efb029d1fbff9fd3c
 F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
@@ -1853,7 +1853,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8a39803ef8db4d8cb0d231e66299525fad4e61266ca29b3704aebb88df1c745b
-R 2e599939602f27f3650e444e6b56fe0f
+P 45c64d39d5afed7fdc6b1de19408559740d1fba1f5e0269ab68b132366a289e4
+R 34b1daea135211dcf75924949664eb09
 U dan
-Z 8fb26a7185f0be454adde39ec4ab299d
+Z 645ab97c8aa78138d63493956dedb7f5
index 0eb424b8f1e86f578d64e266a7a95f36d476b4ac..8516e1e393cd31e442079ba4953bbed0cceca014 100644 (file)
@@ -1 +1 @@
-45c64d39d5afed7fdc6b1de19408559740d1fba1f5e0269ab68b132366a289e4
\ No newline at end of file
+99609786f485653464d1caef1d207ae299d28c925bff3e8e94891759b4765dcc
\ No newline at end of file
index 83dd40532c6c1025720b27add6686234e0094b68..15a49f44230fa198c60b2976267fcdcc3c3be481 100644 (file)
@@ -799,6 +799,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){
       }
       if( iCol<0 ){
         Expr *pDup = sqlite3ExprDup(pParse->db, pExpr, 0);
+        if( pDup && pDup->op==TK_AGG_FUNCTION ) pDup->op = TK_FUNCTION;
         p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup);
       }
       if( p->pSub ){
index ee4d4dfe16beed06d4982791db845c3b83a85e34..9978fbc14b1a0b57d9c0f219fdb2d6880283d30e 100644 (file)
@@ -1363,12 +1363,12 @@ do_execsql_test 39.4 {
 
 # 2019-12-25 ticket d87336c81c7d0873
 #
-#reset_db
-#do_catchsql_test 40.1 {
-#  CREATE VIRTUAL TABLE t0 USING rtree(c0, c1, c2);
-#  SELECT * FROM t0
-#   WHERE ((0,0) IN (SELECT COUNT(*),LAG(5)OVER(PARTITION BY 0) FROM t0),0)<=(c1,0);
-#} {1 {1st ORDER BY term out of range - should be between 1 and 3}}
+reset_db
+do_catchsql_test 40.1 {
+  CREATE VIRTUAL TABLE t0 USING rtree(c0, c1, c2);
+  SELECT * FROM t0
+   WHERE ((0,0) IN (SELECT COUNT(*),LAG(5)OVER(PARTITION BY 0) FROM t0),0)<=(c1,0);
+} {0 {}}
 
 #-------------------------------------------------------------------------
 reset_db
@@ -1402,4 +1402,46 @@ do_execsql_test 41.3 {
   );
 } {0 0  0 0  0 0  0 0}
 
+#-------------------------------------------------------------------------
+reset_db
+do_execsql_test 42.1 {
+  CREATE TABLE t1(a, b, c);
+  INSERT INTO t1 VALUES(1, 1, 1);
+  INSERT INTO t1 VALUES(2, 2, 2);
+}
+do_execsql_test 42.2 {
+  SELECT * FROM t1 WHERE (0, 0) IN ( SELECT count(*), 0 FROM t1 )
+} {}
+do_execsql_test 42.3 {
+  SELECT * FROM t1 WHERE (2, 0) IN ( SELECT count(*), 0 FROM t1 )
+} {1 1 1 2 2 2}
+
+do_execsql_test 42.3 {
+  SELECT count(*), max(a) OVER () FROM t1 GROUP BY c; 
+} {1 2 1 2}
+
+do_execsql_test 42.4 {
+  SELECT sum(a), max(b) OVER () FROM t1;
+} {3 1}
+
+do_execsql_test 42.5 {
+  CREATE TABLE t2(a, b);
+  INSERT INTO t2 VALUES('a', 1);
+  INSERT INTO t2 VALUES('a', 2);
+  INSERT INTO t2 VALUES('a', 3);
+  INSERT INTO t2 VALUES('b', 4);
+  INSERT INTO t2 VALUES('b', 5);
+  INSERT INTO t2 VALUES('b', 6);
+}
+
+do_execsql_test 42.6 {
+  SELECT a, sum(b), sum( sum(b) ) OVER (ORDER BY a) FROM t2 GROUP BY a;
+} {a 6 6   b 15 21}
+
+do_execsql_test 42.7 {
+  SELECT sum(b), sum( sum(b) ) OVER (ORDER BY a) FROM t2;
+} {21 21}
+
 finish_test
+
+