]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove an ALWAYS() that can sometimes be false. And fix
authordrh <>
Thu, 13 Apr 2023 15:11:58 +0000 (15:11 +0000)
committerdrh <>
Thu, 13 Apr 2023 15:11:58 +0000 (15:11 +0000)
a code-generator issue associated with very unusual use of window functions.

FossilOrigin-Name: fc12743763b2b5707ab101453c996bc18d514dcb6e9e0aaf6968618e9653a86d

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

index 872e42b10ca33479d2d8ec1b53171713adb25ebc..5bb18afbf562c108e2c19f8c304bb8061128ad3f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\sassertion\sfault\sthat\scan\soccur\swhen\scompiling\swith\sboth\nSQLITE_ENABLE_UNKNOWN_SQL_FUNCTIONS\sand\sSQLITE_ENABLE_STAT4.
-D 2023-04-09T20:48:13.249
+C Remove\san\sALWAYS()\sthat\scan\ssometimes\sbe\sfalse.\s\sAnd\sfix\na\scode-generator\sissue\sassociated\swith\svery\sunusual\suse\sof\swindow\sfunctions.
+D 2023-04-13T15:11:58.373
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -571,7 +571,7 @@ F src/date.c f21815ca7172ce073db3163ac54c8d9f2841077165c1a6123b4d1c376a0c7ec7
 F src/dbpage.c d47549716549311f79dc39fe5c8fb19390a6eb2c960f8e37c89a9c4de0c1052e
 F src/dbstat.c ec92074baa61d883de58c945162d9e666c13cd7cf3a23bc38b4d1c4d0b2c2bef
 F src/delete.c a9c6d3f51c0a31e9b831e0a0580a98d702904b42d216fee530940e40dec34873
-F src/expr.c 6927742729dd05607ff0610d304bd76c4c25c566c02366cb65d8fd08ed31fb34
+F src/expr.c f307007b9e8ebc6cfbbc32609d93fe59a54ca2bb82d683ca0557d7847f99c774
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
 F src/func.c d187be57a886ddf4e6b7ef584a494361899be3df5eee6d4a747b68ff4aff4122
@@ -710,7 +710,7 @@ F src/where.c 481e537f24a46f6aad1cf07116b5cf6788ab11cd0e7c1ed29c0c1eeb2edb84a0
 F src/whereInt.h e25203e5bfee149f5f1225ae0166cfb4f1e65490c998a024249e98bb0647377c
 F src/wherecode.c cfb770843e99a4a977c37103e055c2cd8b15d6d694370d1e1b3f5ea59a3b963d
 F src/whereexpr.c 16d1eefd95f69843b45aba6d04fe2b63fc4f51584dff85ae380f5c20718f3c75
-F src/window.c 76a27cff9ea2ded0c2c3527187029259440fabcc4cc4c07b11d942c78494a614
+F src/window.c e075ea85bea322e30e361fa6e69eddba74f461e99e2a564dc09973f8a1fb27d9
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
 F test/affinity3.test f094773025eddf31135c7ad4cde722b7696f8eb07b97511f98585addf2a510a9
@@ -1896,7 +1896,7 @@ F test/win32heap.test 10fd891266bd00af68671e702317726375e5407561d859be1aa04696f2
 F test/win32lock.test e0924eb8daac02bf80e9da88930747bd44dd9b230b7759fed927b1655b467c9c
 F test/win32longpath.test 4baffc3acb2e5188a5e3a895b2b543ed09e62f7c72d713c1feebf76222fe9976
 F test/win32nolock.test ac4f08811a562e45a5755e661f45ca85892bdbbc
-F test/window1.test 67aaef6e01e8d8fb3f89aa440e8c8045dbfd3c6f21628a6d7bad2b786c310d9b
+F test/window1.test cc3cf7ea8cbff3f69dd7e6b3b98fad1b9ccc4450c99fa0de5fffd68f5f44e8c6
 F test/window2.tcl 492c125fa550cda1dd3555768a2303b3effbeceee215293adf8871efc25f1476
 F test/window2.test e466a88bd626d66edc3d352d7d7e1d5531e0079b549ba44efb029d1fbff9fd3c
 F test/window3.tcl acea6e86a4324a210fd608d06741010ca83ded9fde438341cb978c49928faf03
@@ -2046,9 +2046,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 450d8ad85c510efa13753f23dcee5ae1b0ba872096b504ad7e08149d85ecfa67
-Q +9ff69e599817610d14948a3eebcc4d3c18245f78a1433c23ae659211cbbdb017
-R 3397ad13f4ad3b818673642d9a7f3ab1
+P 2b02862de6046f032f079b8c8faf54454241077f232ccef0a0d80cf96d750560
+Q +1ba22631a7831e3562eda0eb6a5edf7f009c85c7ab4451d9eacd13ef0fb6036a
+Q +c8fb143d64d8e823684cd26799080da4b42bef121ca3c6315b1803a593490926
+R 82ed32cd888992c9dbc5ed8a9f744b3f
 U drh
-Z a217397040c784953ac2f4b247aada59
+Z 781ad1eca4d2f0c7e71a848e4733450d
 # Remove this line to create a well-formed Fossil manifest.
index f1722a2457dcb41f36835d32df54a30b0487ab18..488ddf68c2ff9a747d6c6abcb575d653527accd9 100644 (file)
@@ -1 +1 @@
-2b02862de6046f032f079b8c8faf54454241077f232ccef0a0d80cf96d750560
\ No newline at end of file
+fc12743763b2b5707ab101453c996bc18d514dcb6e9e0aaf6968618e9653a86d
\ No newline at end of file
index 826fb9b465041cd5b9327adfd67ec9a15afb3cef..2569ef612fb127701a74af48a8b97abe5193d768 100644 (file)
@@ -6288,7 +6288,7 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
     sqlite3 *db = pParse->db;
     assert( iAgg>=0 );
     if( pExpr->op!=TK_AGG_FUNCTION ){
-      if( ALWAYS(iAgg<pAggInfo->nColumn)
+      if( iAgg<pAggInfo->nColumn
        && pAggInfo->aCol[iAgg].pCExpr==pExpr
       ){
         pExpr = sqlite3ExprDup(db, pExpr, 0);
@@ -6494,7 +6494,7 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
           } /* endif pExpr->iTable==pItem->iCursor */
         } /* end loop over pSrcList */
       }
-      return WRC_Prune;
+      return WRC_Continue;
     }
     case TK_AGG_FUNCTION: {
       if( (pNC->ncFlags & NC_InAggFunc)==0
index 56de38ba39dd5c00793bf8916ee49a570f8f72d5..a8081aa2444dc3b35d60993817b84a2debcb78a0 100644 (file)
@@ -785,6 +785,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){
       }
       /* no break */ deliberate_fall_through
 
+    case TK_IF_NULL_ROW:
     case TK_AGG_FUNCTION:
     case TK_COLUMN: {
       int iCol = -1;
index 59a933c4f6286f96eb42c86d2272477f11892b12..3dc01dd55badcf4241200427c86db8a3ce6f8eb7 100644 (file)
@@ -2316,4 +2316,49 @@ do_execsql_test 74.4 {
      AND a1.c1=0;
 } {}
 
+# 2023-04-11 https://sqlite.org/forum/forumpost/6c5678e3da
+# An ALWAYS() turns out to be sometimes false.
+#
+do_execsql_test 75.0 {
+  DROP TABLE t1;
+  CREATE TABLE t1(a INT, b INT);
+  CREATE INDEX t1x ON t1(a+b);
+}
+do_catchsql_test 75.1 {
+  SELECT count((SELECT count(a0.a+a0.b) ORDER BY sum(0) OVER (PARTITION BY 0)))
+    FROM t1 AS a0 JOIN t1 AS a1
+   GROUP BY a1.a;
+} {1 {misuse of aggregate: count()}}
+
+# 2023-04-11 https://sqlite.org/forum/forumpost/6c5678e3da
+# An ALWAYS() turns out to be sometimes false.
+#
+do_execsql_test 75.0 {
+  DROP TABLE t1;
+  CREATE TABLE t1(a INT, b INT);
+  CREATE INDEX t1x ON t1(a+b);
+}
+do_catchsql_test 75.1 {
+  SELECT count((SELECT count(a0.a+a0.b) ORDER BY sum(0) OVER (PARTITION BY 0)))
+    FROM t1 AS a0 JOIN t1 AS a1
+   GROUP BY a1.a;
+} {1 {misuse of aggregate: count()}}
+
+# 2023-04-13 https://sqlite.org/forum/forumpost/0d48347967
+reset_db
+do_execsql_test 76.0 {
+  CREATE TABLE t1(a INT, b INT);
+  INSERT INTO t1(a,b) VALUES (111,222),(111,223),(118,229);
+  CREATE INDEX t1a ON t1(a);
+  CREATE TABLE t2(x INT);
+  INSERT INTO t2 VALUES (333),(444),(555);
+}
+do_execsql_test 76.1 {
+  SELECT c, (SELECT c + sum(1) OVER ()) AS "res"
+    FROM t2 LEFT JOIN (SELECT +a AS c FROM t1) AS v1 ON true
+   GROUP BY c
+   ORDER by c;
+} {111 112 118 119}
+# ^^^^^^^^^^^^^^^^^-- results verified against PG 14.2
+
 finish_test