]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Disqualify the count-of-view optimization if the view is really
authordrh <>
Sat, 18 Jul 2026 17:47:25 +0000 (17:47 +0000)
committerdrh <>
Sat, 18 Jul 2026 17:47:25 +0000 (17:47 +0000)
a correlated subquery.
[forum:/info/2026-07-18T10:23:43Z|Forum post 2026-07-18T10:23:43Z].

FossilOrigin-Name: bb65c3adcd79581715f90d287807a3f03b375f69957c7d0202d31b23cf627da0

manifest
manifest.uuid
src/select.c
test/aggnested.test

index e04c7fa0ba95cce685362c0459a37421be159bbc..5ce9c0f5b42462c43a53717a4efb31fc9fe17aa2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Update\stcl\stest\scommand\s"optimization_control"\sto\ssupport\sthe\s"count-of-view"\soptimization.
-D 2026-07-18T13:34:51.657
+C Disqualify\sthe\scount-of-view\soptimization\sif\sthe\sview\sis\sreally\na\scorrelated\ssubquery.\n[forum:/info/2026-07-18T10:23:43Z|Forum\spost\s2026-07-18T10:23:43Z].
+D 2026-07-18T17:47:25.063
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -742,7 +742,7 @@ F src/printf.c b480176bd0aaed9d64e804cfa3ca27fc585f65a73e7c7ca2fe9b9016db2cf6d5
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 54395ee97eb710e695202d4112cf2b1c1c7767a57afcea745df71abb1c917768
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c f553420eaf5c72a49cef786621eea79dd8c4411671839fb05250bb49ca74a0a0
+F src/select.c 586ccc75f2fa289c51554330f9ff549d00dae4122ac7e2af712437e2ef737cc8
 F src/shell.c.in ce9ef76da7cc153afaa6aa233a155be885859f41c803a20bdc42d1c628b8ccab
 F src/sqlite.h.in 2101a2b494cbc282d0dc1c3f631c4fb83060c52876cc9d7615b091ad66d932b1
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -834,7 +834,7 @@ F test/affinity2.test 4d7a34d328e58ca2a2d78fd76c27614a41ca7ddf4312ded9c68c04f430
 F test/affinity3.test 9b7d1133e11d5edd7805573c4ab6f3ba73b0b74a1f280d5b130d4bf3506a93ff
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/aggfault.test 777f269d0da5b0c2524c7ff6d99ae9a93db4f1b1839a914dd2a12e3035c29829
-F test/aggnested.test 610b0ce2c3e8f3daee25f9752800ee8d785db10da4aa1fbeea0ea1aabaf1d704
+F test/aggnested.test dd6d08de1e950da299db705dcc6cfcbc52c2a4a009996cf92020d0436e174af5
 F test/aggorderby.test 7be65e743f82ee49ba62da1c799e59341d23884a99edfe093df0cdfaac94cbbb
 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 F test/all.test cf929f721e20960ca9db89471fa44f9176322ba8f25e97193f91881c223643b3
@@ -2215,8 +2215,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 6924895d2cbc50971d8da1810423ad15c638dabc31b4f1083dd6076e20492ef4
-R 86a4a4480d0a33f3221eb8d04beeb46a
-U dan
-Z 0b024a6f5b73f2d713e1af20ba62be25
+P b14c3f8fec5123b1faa6d88dee2740ee4acb10dd522207531567d46f4714e227
+R 6a7be0c63bdb75b04e2382e006b2cd5f
+U drh
+Z 474e172c65658296edc69a02e1046ccd
 # Remove this line to create a well-formed Fossil manifest.
index 6263a8b4bc0b532b5bcf5d18e1b27323381ecf24..7e16e7de07b528dbe86ebb258c8ddc3212029050 100644 (file)
@@ -1 +1 @@
-b14c3f8fec5123b1faa6d88dee2740ee4acb10dd522207531567d46f4714e227
+bb65c3adcd79581715f90d287807a3f03b375f69957c7d0202d31b23cf627da0
index e29ad6e436207c9d0dd487e50bf7c91b364fa948..073b30f7e641178d69b176f3a162e02521a77a33 100644 (file)
@@ -7155,7 +7155,8 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
   if( p->pSrc->nSrc!=1 ) return 0;                  /* One table in FROM  */
   if( ExprHasProperty(pExpr, EP_WinFunc) ) return 0;/* Not a window function */
   pFrom = p->pSrc->a;
-  if( pFrom->fg.isSubquery==0 ) return 0;    /* FROM is a subquery */
+  if( pFrom->fg.isSubquery==0 ) return 0;           /* FROM is a subquery */
+  if( (p->selFlags & SF_Correlated)!=0 ) return 0;  /* Not a correlated subq */
   pSub = pFrom->u4.pSubq->pSelect;
   if( pSub->pPrior==0 ) return 0;                   /* Must be a compound */
   if( pSub->selFlags & SF_CopyCte ) return 0;       /* Not a CTE */
index f3539076bddccfbba70304934d8b0e751ba31423..74376a5f255b301cb51a4df5c724a1df1e94dc15 100644 (file)
@@ -476,12 +476,44 @@ do_execsql_test 9.5 {
 # New test case for check-in [4470f657d2069972] from 2023-11-02
 # https://bugs.chromium.org/p/chromium/issues/detail?id=1511689
 #
-do_execsql_test 10.1 {
+do_catchsql_test 10.1 {
   DROP TABLE IF EXISTS t0;
   DROP TABLE IF EXISTS t1;
   CREATE TABLE t0(c1, c2);  INSERT INTO t0 VALUES(1,2);
   CREATE TABLE t1(c3, c4);  INSERT INTO t1 VALUES(3,4);
   SELECT * FROM t0 WHERE EXISTS (SELECT 1 FROM t1 GROUP BY c3 HAVING ( SELECT count(*) FROM (SELECT 1 UNION ALL SELECT sum(DISTINCT c1) ) ) ) BETWEEN 1 AND 1;
-} {1 2}
+} {1 {misuse of aggregate: sum()}}
+
+# Forum post 2026-07-18T10:23:43Z
+#
+do_execsql_test 11.1 {
+  DROP TABLE t1;
+  CREATE TABLE t1(c1); INSERT INTO t1 VALUES(11);
+  DROP TABLE t2;
+  CREATE TABLE t2(c2);
+}
+do_catchsql_test 11.2 {
+  SELECT * FROM t1 WHERE EXISTS(
+    SELECT 1 FROM t2 WHERE (
+      SELECT COUNT(*) FROM (
+        SELECT 1
+        UNION ALL
+        SELECT SUM(c1)
+      )
+    )
+  );
+} {1 {misuse of aggregate: SUM()}}
+do_catchsql_test 11.3 {
+  SELECT * FROM t1 WHERE EXISTS(
+    SELECT 1 FROM t2 WHERE (
+      SELECT COUNT(*) FROM (
+        SELECT 1 WHERE true
+        UNION ALL
+        SELECT SUM(c1)
+      )
+    )
+  );
+} {1 {misuse of aggregate: SUM()}}
+
 
 finish_test