]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not allow the EXISTS-to-JOIN optimization if the EXISTS clause is based
authordrh <>
Fri, 4 Jul 2025 11:06:34 +0000 (11:06 +0000)
committerdrh <>
Fri, 4 Jul 2025 11:06:34 +0000 (11:06 +0000)
on a view, since that view might expand into a join.

FossilOrigin-Name: 872c41feddafcc21a02f1229ce017ceea9f8e309a4dd5b6e323477d67f975947

manifest
manifest.uuid
src/select.c

index 8f4d2219c750730a54453335f0020e680e5c8400..0ed185a5637b4233f898f3b17d39b5e03f99d97c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improve\sthe\searly-termination\soptimization\sso\sthat\sit\sworks\sin\squeries\nwhich\suse\sthe\sLIKE\soptimization\sin\sthe\souter\sloop.
-D 2025-07-04T10:26:55.842
+C Do\snot\sallow\sthe\sEXISTS-to-JOIN\soptimization\sif\sthe\sEXISTS\sclause\sis\sbased\non\sa\sview,\ssince\sthat\sview\smight\sexpand\sinto\sa\sjoin.
+D 2025-07-04T11:06:34.046
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -785,7 +785,7 @@ F src/printf.c 71b6d3a0093bf23f473e25480ca0024e8962681506c75f4ffd3d343a3f0ab113
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 5b14cad58bc21341fbaea76d7e781187559627a461745ece00c2655ba7c083ec
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c be5543b598cc0d217b34ddf804aaab7f5cf63d74958bf6e2a2f3523f4b07fced
+F src/select.c 6ce33294314f05898a35205566a7d7d5034f8a6f7ad9cb9e3804f4765a100290
 F src/shell.c.in 73c0eeb7c265d59b99219d5aa055f412f07842088d8036b6d259927d85dd1bbf
 F src/sqlite.h.in 5c54f2461a1ea529bab8499148a2b238e2d4bb571d59e8ea5322d0c190abb693
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -2211,8 +2211,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P d4f47e04f5880e99a53089e2dd5cde64a7ea44f059d9906b5d11324896546714
-R a697518c4d8b922117d5dad06f7688c7
+P b4e4d148243cfcb09aa0aaca30e83812b42e2780073e55c0e8c6e3da16243dfc
+R 3690d7e51c5bb54cabac58a689eae722
 U drh
-Z ef38abde98882fa21d988c824ad69a24
+Z c7e5a37e4d84ec49607cdfc27b218111
 # Remove this line to create a well-formed Fossil manifest.
index ab2837e8bde84651fd590033cec07ed733dfdbc1..eb7428f2805621f4e0a0e28583e7c26a73676d89 100644 (file)
@@ -1 +1 @@
-b4e4d148243cfcb09aa0aaca30e83812b42e2780073e55c0e8c6e3da16243dfc
+872c41feddafcc21a02f1229ce017ceea9f8e309a4dd5b6e323477d67f975947
index ff453940082bc50796c9e07af08da44a8b529d06..750de5e8ffe98cc77f079b1e8fc3e3f982e096d7 100644 (file)
@@ -7437,9 +7437,10 @@ static SQLITE_NOINLINE void existsToJoin(
     }
     else if( pWhere->op==TK_EXISTS ){
       Select *pSub = pWhere->x.pSelect;
-      if( pSub->pSrc->nSrc==1 
+      if( pSub->pSrc->nSrc==1
        && (pSub->selFlags & SF_Aggregate)==0
        && pSub->pWhere
+       && !pSub->pSrc->a[0].fg.isSubquery
       ){
         memset(pWhere, 0, sizeof(*pWhere));
         pWhere->op = TK_INTEGER;