From: drh <> Date: Fri, 4 Jul 2025 11:06:34 +0000 (+0000) Subject: Do not allow the EXISTS-to-JOIN optimization if the EXISTS clause is based X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=478dfc7e74921f391732e03b486c786d4c7bd49b;p=thirdparty%2Fsqlite.git Do not allow the EXISTS-to-JOIN optimization if the EXISTS clause is based on a view, since that view might expand into a join. FossilOrigin-Name: 872c41feddafcc21a02f1229ce017ceea9f8e309a4dd5b6e323477d67f975947 --- diff --git a/manifest b/manifest index 8f4d2219c7..0ed185a563 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index ab2837e8bd..eb7428f280 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b4e4d148243cfcb09aa0aaca30e83812b42e2780073e55c0e8c6e3da16243dfc +872c41feddafcc21a02f1229ce017ceea9f8e309a4dd5b6e323477d67f975947 diff --git a/src/select.c b/src/select.c index ff45394008..750de5e8ff 100644 --- a/src/select.c +++ b/src/select.c @@ -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;