]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More aggressive optimization of addrHalt for RIGHT JOIN.
authordrh <>
Mon, 30 Jun 2025 21:07:08 +0000 (21:07 +0000)
committerdrh <>
Mon, 30 Jun 2025 21:07:08 +0000 (21:07 +0000)
FossilOrigin-Name: 5e51d1c0dfcafef9e71c99de3f626dee157c935724b84c6e0c630299a880446f

manifest
manifest.uuid
src/where.c
src/wherecode.c

index a99c608631b97c90630492ffb48e4a8a094649a4..88cc0f7f5e9fdf46d6e9bdfea50b4e7d386b8a5d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Compute\sWhereLevel.addrBrk\sand\s.addrHalt\searly\sso\sthat\sthose\slabels\scan\sbe\nused\sto\sabort\sloops\searly.\s\sUse\sthis\sto\simprove\sperformance\son\stwo\smore\nof\sthe\scases\sdescribed\sby\s[forum:/forumpost/52651713ac|forum\spost\s52651713ac].
-D 2025-06-30T20:19:19.423
+C More\saggressive\soptimization\sof\saddrHalt\sfor\sRIGHT\sJOIN.
+D 2025-06-30T21:07:08.690
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -867,9 +867,9 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 20be6f0a25a80b7897cf2a5369bfd37ef198e6f0b6cdef16d83eee856056b159
 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
 F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
-F src/where.c baedbf818b67006033204fd9814bf1dc80bec728ed0340cf49146be36ddd5f40
+F src/where.c f58d41d0923eeb21cab8e4fc87a0b36c0724ff4f279ce95ab2731b4696b8e75a
 F src/whereInt.h 8d94cb116c9e06205c3d5ac87af065fc044f8cf08bfdccd94b6ea1c1308e65da
-F src/wherecode.c 0ee8afb68c04adaba81329f5c358010b2d8943d00a55161a34081acf830daa11
+F src/wherecode.c 504f3c1270c3ffd51ebcdf7a31de08aa51a63b33a2ccdf8f5736afe3dfa73d45
 F src/whereexpr.c 566ca4382e07a4ba1fd86c97ae0781cdf84004c7d9c59466bf5db75733548807
 F src/window.c d01227141f622f24fbe36ca105fbe6ef023f9fd98f1ccd65da95f88886565db5
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
@@ -2208,11 +2208,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 0083d5169a46104a25355bdd9d5a2f4027b049191ebda571dd228477ec217296
-R d7249f5cf7b6d480f743946f8ed64b97
-T *branch * empty-table-optimizations
-T *sym-empty-table-optimizations *
-T -sym-trunk *
+P 6fc0b9ac23be6840542982de4bb282ebca1db8b5ab3baefdde95a997c1506e81
+R 6c3da4fefe78ebf60c93e1bf3ae9f682
 U drh
-Z 7f9eb68d1bb4b376d2d8134bae280e6b
+Z c1632b7819f69e809c6c7ab2b9282264
 # Remove this line to create a well-formed Fossil manifest.
index 918ff018c76455a1ad7dc62eee728433011225e6..c009925a2d67ede8d1552e4c942da7893d053b23 100644 (file)
@@ -1 +1 @@
-6fc0b9ac23be6840542982de4bb282ebca1db8b5ab3baefdde95a997c1506e81
+5e51d1c0dfcafef9e71c99de3f626dee157c935724b84c6e0c630299a880446f
index 824cfcd8c9674eb962895e317ce3581be8d218fc..ddf3f74996b2b7abfecf94e4021f5429145ef836 100644 (file)
@@ -7078,6 +7078,8 @@ WhereInfo *sqlite3WhereBegin(
     pLevel->addrBrk = sqlite3VdbeMakeLabel(pParse);
     if( ii==0 || (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
       pLevel->addrHalt = pLevel->addrBrk;
+    }else if( pWInfo->a[ii-1].pRJ ){
+      pLevel->addrHalt = pWInfo->a[ii-1].addrBrk;
     }else{
       pLevel->addrHalt = pWInfo->a[ii-1].addrHalt;
     }
@@ -7211,7 +7213,6 @@ WhereInfo *sqlite3WhereBegin(
      && (pLevel->pRJ = sqlite3WhereMalloc(pWInfo, sizeof(WhereRightJoin)))!=0
     ){
       WhereRightJoin *pRJ = pLevel->pRJ;
-      pLevel->addrHalt = pLevel->addrBrk;
       pRJ->iMatch = pParse->nTab++;
       pRJ->regBloom = ++pParse->nMem;
       sqlite3VdbeAddOp2(v, OP_Blob, 65536, pRJ->regBloom);
index c5fa7a213a39ca1ea371650f9ace629fd5fadb4c..cc672aa83996fd5e8b2939f7417293fe786f42c1 100644 (file)
@@ -1545,17 +1545,6 @@ Bitmask sqlite3WhereCodeOneLoopStart(
     VdbeComment((v, "init LEFT JOIN match flag"));
   }
 
-#ifdef SQLITE_DEBUG
-  /* Re-compute the address to jump to if we discover that the table for
-  ** this loop is empty and can never contribute content.  Verify that the
-  ** computation here agrees with the one in sqlite3WhereBegin(). */
-  for(j=iLevel; j>0; j--){
-    if( pWInfo->a[j].iLeftJoin ) break;
-    if( pWInfo->a[j].pRJ ) break;
-  }
-  assert( pWInfo->a[j].addrBrk==pLevel->addrHalt );
-#endif
-
   /* Special case of a FROM clause subquery implemented as a co-routine */
   if( pTabItem->fg.viaCoroutine ){
     int regYield;