]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor tweaks to the exists-to-join optimization.
authordrh <>
Thu, 3 Jul 2025 00:17:27 +0000 (00:17 +0000)
committerdrh <>
Thu, 3 Jul 2025 00:17:27 +0000 (00:17 +0000)
FossilOrigin-Name: 9cb600ad576c68647ed943a0773019312c5f01c9c1ca9ff0bf1214b03a531b48

manifest
manifest.uuid
src/resolve.c
src/select.c
src/shell.c.in

index 8caec32f551098a99db636ea09c566307caaeb2c..7774b2396b4522f5d5285a420e28f80040328e2f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\sin\sthe\sexists-to-join\soptimization\sthat\shas\sbeen\smodified\nto\srelax\sthe\srequirement\sof\shaving\san\sindexed\sjoin\sconstraint.
-D 2025-07-02T20:46:02.299
+C Minor\stweaks\sto\sthe\sexists-to-join\soptimization.
+D 2025-07-03T00:17:27.518
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -783,10 +783,10 @@ F src/pragma.c 30b535d0a66348df844ee36f890617b4cf45e9a22dcbc47ec3ca92909c50aaf1
 F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126
 F src/printf.c 71b6d3a0093bf23f473e25480ca0024e8962681506c75f4ffd3d343a3f0ab113
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
-F src/resolve.c 9583e6eb8066400d377db9b130ebf46d461b59fccf1d018a5010d55b9bea217c
+F src/resolve.c 5b14cad58bc21341fbaea76d7e781187559627a461745ece00c2655ba7c083ec
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 30d7e450179a123c2a4dd9000592da196f5a6766688773cb11b921294afa11bf
-F src/shell.c.in 4f14a1f5196b6006abc8e73cc8fd6c1a62cf940396f8ba909d6711f35f074bb6
+F src/select.c d956136defc62a9b11d61b18c5c3559231055c0ea32f6b11d13c740a7467aeb0
+F src/shell.c.in 73c0eeb7c265d59b99219d5aa055f412f07842088d8036b6d259927d85dd1bbf
 F src/sqlite.h.in 5c54f2461a1ea529bab8499148a2b238e2d4bb571d59e8ea5322d0c190abb693
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
@@ -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 ff593a16d61cc5c588d1737deb822abb90b1759475a4cabfcf608978b1191487 9084a4c8726a2c7ba1c381886e29c7b86121d531282be0d63d5988d84f6f448d
-R f60eba1acfa64dc97c08e5ab9333e9b4
+P 1c1aef2b7feae29066d0330699ab634ef41f5b60cdcd479a60cb1a5409553138
+R 690f317201b055306be94336494e9b81
 U drh
-Z 4c3d6c95c910f93bc2abb148fe548800
+Z 608e6ffa5985c7c132d45ebfd75d87f4
 # Remove this line to create a well-formed Fossil manifest.
index 70909c9c3eb8982d6503c81b996f5eb7040f7e27..7b5464b41b533a50680282a6dc83b7d9e509d7c5 100644 (file)
@@ -1 +1 @@
-1c1aef2b7feae29066d0330699ab634ef41f5b60cdcd479a60cb1a5409553138
+9cb600ad576c68647ed943a0773019312c5f01c9c1ca9ff0bf1214b03a531b48
index 562ca5e0088a3f95eb4eb08c6c4617644b6aaa90..bbd1021e0b4a77446559f9ee9aece82f29eb677a 100644 (file)
@@ -1358,11 +1358,16 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
       return WRC_Prune;
     }
 #ifndef SQLITE_OMIT_SUBQUERY
+    case TK_EXISTS:
+      assert( ExprUseXSelect(pExpr) );
+      pParse->bHasExists = 1;
+      /* no break */ deliberate_fall_through
     case TK_SELECT:
-    case TK_EXISTS:  testcase( pExpr->op==TK_EXISTS );
 #endif
     case TK_IN: {
       testcase( pExpr->op==TK_IN );
+      testcase( pExpr->op==TK_EXISTS );
+      testcase( pExpr->op==TK_SELECT );
       if( ExprUseXSelect(pExpr) ){
         int nRef = pNC->nRef;
         testcase( pNC->ncFlags & NC_IsCheck );
@@ -1379,7 +1384,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
         if( nRef!=pNC->nRef ){
           ExprSetProperty(pExpr, EP_VarSelect);
           pExpr->x.pSelect->selFlags |= SF_Correlated;
-          if( pExpr->op==TK_EXISTS ) pParse->bHasExists = 1;
         }
         pNC->ncFlags |= NC_Subquery;
       }
index fd99dc91fe6acb541ef5040f9703150feb99184d..9c79f6c67ce69c95fd655bfeb5b1d287e9d938e9 100644 (file)
@@ -7437,7 +7437,7 @@ static SQLITE_NOINLINE void existsToJoin(
     else if( pWhere->op==TK_EXISTS ){
       Select *pSub = pWhere->x.pSelect;
       if( pSub->pSrc->nSrc==1 
-       && (pSub->selFlags & (SF_Aggregate|SF_Correlated))==SF_Correlated
+       && (pSub->selFlags & SF_Aggregate)==0
        && pSub->pWhere
       ){
         memset(pWhere, 0, sizeof(*pWhere));
index 33dd30697dcb02b883163ff206dfb67ffa7b515a..5cda6a1a1bc19f530420d2fce72faf6a344f0b96 100644 (file)
@@ -11710,6 +11710,7 @@ static int do_meta_command(char *zLine, ShellState *p){
             { 0x08000000, 1, "OnePass" },
             { 0x10000000, 1, "OrderBySubq" },
             { 0x20000000, 1, "StarQuery" },
+            { 0x40000000, 1, "ExistsToJoin" },
             { 0xffffffff, 0, "All" },
           };
           unsigned int curOpt;