]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Use a mini Bloom filter to help reduce the number of pointless searches for
authordrh <>
Fri, 5 Jul 2024 13:55:59 +0000 (13:55 +0000)
committerdrh <>
Fri, 5 Jul 2024 13:55:59 +0000 (13:55 +0000)
prior SubrtnSig objects when generating code for IN operators with subqueries
as their right operand.

FossilOrigin-Name: d8cedbe055b40a0ea4e5d47845b535162e9fcb0d0f88c03211797ab64d2d56fb

manifest
manifest.uuid
src/expr.c
src/sqliteInt.h

index 70b8f686e30c1090b986b02a54ec6e0c80d43523..92ab769f65219d96afcdec85af7bc9c3fb4713b6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\sreuse\sof\ssubqueries\sassociated\swith\sIN\soperators,\sespecially\swhen\nthe\sIN\soperator\sis\sduplicated\sdue\sto\spredicate\spush-down.
-D 2024-07-05T09:56:11.351
+C Use\sa\smini\sBloom\sfilter\sto\shelp\sreduce\sthe\snumber\sof\spointless\ssearches\sfor\nprior\sSubrtnSig\sobjects\swhen\sgenerating\scode\sfor\sIN\soperators\swith\ssubqueries\nas\stheir\sright\soperand.
+D 2024-07-05T13:55:59.179
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -705,7 +705,7 @@ F src/date.c 13dd752847afb32ed70510ad7345a5b9c841f51ad904dba5d010f1fa3a6a324e
 F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782
 F src/dbstat.c 3b677254d512fcafd4d0b341bf267b38b235ccfddbef24f9154e19360fa22e43
 F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
-F src/expr.c 4d76a31f37302d11c89dd5184a0e1a80a95bd3f8c97e72fa2a18b64cc8672603
+F src/expr.c e8e5c5b2e2bf3d3d4b575c71e8fdd19caed20712afef6ad9fde735f9a210e08d
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 852f93c0ef995e0c2b8983059a2b97151c194cc8259e21f5bc2b7ac508348c2a
 F src/func.c 1f61e32e7a357e615b5d2e774bee563761fce4f2fd97ecb0f72c33e62a2ada5f
@@ -760,7 +760,7 @@ F src/shell.c.in b7d435c137eb323981adff814f172dbaabb9ba504fef17cb11d4681c1633ee1
 F src/sqlite.h.in 6c884a87bbf8828562b49272025a1e66e3801a196a58b0bdec87edcd2c9c8fc1
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
-F src/sqliteInt.h 5f940c22e14a7434b2fbefa53407372be2eed47b43cb9f4f98c5054c565d63b2
+F src/sqliteInt.h b77218c425891c7c90506c77fd2eb13bae03628d065b44fffeb37401cd955ac1
 F src/sqliteLimit.h 6878ab64bdeb8c24a1d762d45635e34b96da21132179023338c93f820eee6728
 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -2195,9 +2195,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P be77fe701c7b7d3407800e1ed6a4c8be14035831790419cc99362bff41c65b60 99fd34b58a9b09af20f1f1a3c37137ae55159310c8af97806550eeee6adc4fc5
-R c2554732fd5d00a4bc9161c1ecfc2ecd
-T +closed 99fd34b58a9b09af20f1f1a3c37137ae55159310c8af97806550eeee6adc4fc5
+P c9a3498113074bbcd9a8c8d30286fef6c6a49ad2c84b90ec0f5a148389d6245c
+R 048647da7489fe3c22ba97fe98be7560
 U drh
-Z 4e117d1a68420f4abee82559a7eb0fa4
+Z a8545f3061897f51fd0152659e811cae
 # Remove this line to create a well-formed Fossil manifest.
index 38e9ad1c61f3f3c5f883bb88e5930a194d3058dd..e68869204e47ccb00c0d2174eace6740461a5940 100644 (file)
@@ -1 +1 @@
-c9a3498113074bbcd9a8c8d30286fef6c6a49ad2c84b90ec0f5a148389d6245c
+d8cedbe055b40a0ea4e5d47845b535162e9fcb0d0f88c03211797ab64d2d56fb
index d012c3d5e67fc447812980e4cc6845c5c59ca9db..e7df61c869ca4180e0f98f04e3d502c6b83e9741 100644 (file)
@@ -3436,7 +3436,7 @@ static int findCompatibleInRhsSubrtn(
   Vdbe *v;
 
   if( pNewSig==0 ) return 0;
-  if( pParse->bHasSubrtn==0 ) return 0;
+  if( (pParse->mSubrtnSig & (1<<(pNewSig->selId&7)))==0 ) return 0;
   assert( pExpr->op==TK_IN );
   assert( !ExprUseYSub(pExpr) );
   assert( ExprUseXSelect(pExpr) );
@@ -3564,7 +3564,7 @@ void sqlite3CodeRhsOfIN(
       pSig->regReturn = pExpr->y.sub.regReturn;
       pSig->iTable = iTab;
       sqlite3VdbeChangeP4(v, -1, (const char*)pSig, P4_SUBRTNSIG);
-      pParse->bHasSubrtn = 1;
+      pParse->mSubrtnSig = 1 << (pSig->selId&7);
     }
     addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v);
   }
index 323a257f6c9b4c66029a610b01024635a5b9cf38..6a92befe0f41b94270fc7de30f26b5e530ae49e5 100644 (file)
@@ -3834,7 +3834,7 @@ struct Parse {
   u8 prepFlags;        /* SQLITE_PREPARE_* flags */
   u8 withinRJSubrtn;   /* Nesting level for RIGHT JOIN body subroutines */
   u8 bHasWith;         /* True if statement contains WITH */
-  u8 bHasSubrtn;       /* True if any P4_SUBRTNSIG has been set */
+  u8 mSubrtnSig;       /* mini Bloom filter on available SubrtnSig.selId */
 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
   u8 earlyCleanup;     /* OOM inside sqlite3ParserAddCleanup() */
 #endif