]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix typos in comments. Provided ".wheretrace" debugging output for the interstage-heuristic
authordrh <>
Tue, 2 Apr 2024 14:12:29 +0000 (14:12 +0000)
committerdrh <>
Tue, 2 Apr 2024 14:12:29 +0000 (14:12 +0000)
interstage heuristic module.  Do omit automatic index loops in the
interstage heuristic.

FossilOrigin-Name: 186dcae19e249db36de15f295999cff25063b54ee3d5d481cd2ba99b6d13148e

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

index 24a90e1c4326770d507fa92d706eacd2afca4920..790c61ed9b1a6f42967aaaf05dab096666a938a6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\sheuristic\sin\sbetween\sthe\stwo\ssolver()\spasses\sof\sthe\squery\splanner\sthat\ntries\sto\sprevent\sa\svery\sslow\squery\splan\sin\scases\swhere\sthe\soutput\srow\scount\nestimate\sis\simprecise.
-D 2024-04-02T11:44:44.648
+C Fix\stypos\sin\scomments.\s\sProvided\s".wheretrace"\sdebugging\soutput\sfor\sthe\ninterstage\sheuristic\smodule.\s\sDo\somit\sautomatic\sindex\sloops\sin\sthe\ninterstage\sheuristic.
+D 2024-04-02T14:12:29.323
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -755,7 +755,7 @@ F src/shell.c.in 0354ca51eee5fbf6af394a7ef9f5ef6823ef45b743db65431f6777e4d5be219
 F src/sqlite.h.in 32389e0d584551b300d0157881336162c14315a424cbf385c0d65eb7c2e31f7b
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
-F src/sqliteInt.h f8928f0397d797046396dd9d360a6af8ce6dcb48bd72ea290165b07c8c518744
+F src/sqliteInt.h 170f85c5a9d6189cf9b5dd304f4d40b73a8c9762fb927f1327e8ed2cb99c06b6
 F src/sqliteLimit.h 6878ab64bdeb8c24a1d762d45635e34b96da21132179023338c93f820eee6728
 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -835,7 +835,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 887fc4ca3f020ebb2e376f222069570834ac63bf50111ef0cbf3ae417048ed89
 F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
 F src/walker.c 7c7ea0115345851c3da4e04e2e239a29983b61fb5b038b94eede6aba462640e2
-F src/where.c ba9d22fda3850b508e075f8bdc4f4d4f1ff314551597a6f14842bb03aeec0d3a
+F src/where.c 08ffccb5b8df523a484af2ae8593c8f571113475fe76b13360f2dfd74e117b4e
 F src/whereInt.h 82a13766f13d1a53b05387c2e60726289ef26404bc7b9b1f7770204d97357fb8
 F src/wherecode.c 5d77db30a2a3dd532492ae882de114edba2fae672622056b1c7fd61f5917a8f1
 F src/whereexpr.c 7b64295f1d82ad0928df435925dd7bbd5997b44a026153113eace0d9e71ff435
@@ -2184,11 +2184,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 0b2ac2cdc767db764e3ea8bbc33898cac4e1ec27fe8c9b60ce08a1785f921e6d
-R bbe24560206aebee12aa3740963fd4bf
-T *branch * interstage-heuristic
-T *sym-interstage-heuristic *
-T -sym-trunk *
+P 8018417b0143ea11535f2457bf3e4b3755717c554a17df1076425b4251b5f2c6
+R 9b55b3987ec7e07bd641f4ba8c80fe98
 U drh
-Z f6898799f068ada043c459f74f460b9b
+Z 1d7be0abb1ed0f4f893f7da5731cd389
 # Remove this line to create a well-formed Fossil manifest.
index 4593d196ec114b0697ed41e291f36620b7d8cdb2..5063c5ac669cf0d58af27093430112ee71ac61ba 100644 (file)
@@ -1 +1 @@
-8018417b0143ea11535f2457bf3e4b3755717c554a17df1076425b4251b5f2c6
\ No newline at end of file
+186dcae19e249db36de15f295999cff25063b54ee3d5d481cd2ba99b6d13148e
\ No newline at end of file
index dba64c71bd970e1fa33e09a562f277a64bc48ce7..365ff2c7f55d4ab72842e9d75574da776e3b79bf 100644 (file)
@@ -1156,7 +1156,7 @@ extern u32 sqlite3WhereTrace;
 ** 0x00000010   Display sqlite3_index_info xBestIndex calls
 ** 0x00000020   Range an equality scan metrics
 ** 0x00000040   IN operator decisions
-** 0x00000080   WhereLoop cost adjustements
+** 0x00000080   WhereLoop cost adjustments
 ** 0x00000100
 ** 0x00000200   Covering index decisions
 ** 0x00000400   OR optimization
index fe76f2c960474d9248f64d2f8db004a330625a98..a4506602a20ce4f8b917535f7e46344770187e76 100644 (file)
@@ -5561,15 +5561,15 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
 ** Except, if the first solver() call generated a full-table scan in an outer
 ** loop then stop this analysis at the first full-scan, since the second
 ** solver() run might try to swap that full-scan for another in order to
-** get the output into the correct order.  In other words, we do *not* want
-** to inhibit a rewrites like this:
+** get the output into the correct order.  In other words, we allow a
+** rewrite like this:
 **
 **     First Solver()                      Second Solver()
 **       |-- SCAN t1                         |-- SCAN t2
 **       |-- SEARCH t2                       `-- SEARCH t1
 **       `-- SORT USING B-TREE
 **
-** Rather, the purpose of this routine is to inhibit rewrites such as:
+** The purpose of this routine is to disallow rewrites such as:
 **
 **     First Solver()                      Second Solver()
 **       |-- SEARCH t1                       |-- SCAN t2     <--- bad!
@@ -5581,6 +5581,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
 */
 static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){
   int i;
+#ifdef WHERETRACE_ENABLED
+  int once = 0;
+#endif
   for(i=0; i<pWInfo->nLevel; i++){
     WhereLoop *p = pWInfo->a[i].pWLoop;
     if( p==0 ) break;
@@ -5590,7 +5593,19 @@ static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){
       WhereLoop *pLoop;
       for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){
         if( pLoop->iTab!=iTab ) continue;
-        if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0 ) continue;
+        if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){
+          /* Auto-index and index-constrained loops allowed to remain */
+          continue;
+        }
+#ifdef WHERETRACE_ENABLED
+        if( sqlite3WhereTrace & 0x80 ){
+          if( once==0 ){
+            sqlite3DebugPrintf("Loops disabled by interstage heuristic:\n");
+            once = 1;
+          }
+          sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC);
+        }
+#endif /* WHERETRACE_ENABLED */
         pLoop->prereq = ALLBITS;  /* Prevent 2nd solver() from using this one */
       }
     }else{