From: drh <> Date: Mon, 30 Jun 2025 21:07:08 +0000 (+0000) Subject: More aggressive optimization of addrHalt for RIGHT JOIN. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d21dcc924fb1049c7e0cbc42a21ebfe17d472b6;p=thirdparty%2Fsqlite.git More aggressive optimization of addrHalt for RIGHT JOIN. FossilOrigin-Name: 5e51d1c0dfcafef9e71c99de3f626dee157c935724b84c6e0c630299a880446f --- diff --git a/manifest b/manifest index a99c608631..88cc0f7f5e 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 918ff018c7..c009925a2d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6fc0b9ac23be6840542982de4bb282ebca1db8b5ab3baefdde95a997c1506e81 +5e51d1c0dfcafef9e71c99de3f626dee157c935724b84c6e0c630299a880446f diff --git a/src/where.c b/src/where.c index 824cfcd8c9..ddf3f74996 100644 --- a/src/where.c +++ b/src/where.c @@ -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); diff --git a/src/wherecode.c b/src/wherecode.c index c5fa7a213a..cc672aa839 100644 --- a/src/wherecode.c +++ b/src/wherecode.c @@ -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;