]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix errors in the table resize detection.
authordrh <drh@noemail.net>
Sat, 18 Feb 2017 02:42:54 +0000 (02:42 +0000)
committerdrh <drh@noemail.net>
Sat, 18 Feb 2017 02:42:54 +0000 (02:42 +0000)
FossilOrigin-Name: 4229caec0b60a1617b9d5ff94b47271cbd7be1e0

manifest
manifest.uuid
src/analyze.c
src/btree.c

index d311cdbbf35796152b97f1da5cb73150e1df86a8..5af18e20b22d176d23617f4a4908eca495b03862 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C In\sthe\sanalyze_as_needed\spragma,\savoid\srunning\sunnecessary\sOP_LoadAnalysis\s\nand\sOP_Expire\sopcodes.\s\sMake\sthe\sanalyze_as_needed\spragma\sresponsive\sto\sthe\nschema\sname.
-D 2017-02-18T02:19:02.183
+C Fix\serrors\sin\sthe\stable\sresize\sdetection.
+D 2017-02-18T02:42:54.892
 F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc a89ea37ab5928026001569f056973b9059492fe2
@@ -331,13 +331,13 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
 F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 F src/alter.c 3b23977620ce9662ac54443f65b87ba996e36121
-F src/analyze.c eb50045b8f2e0d8a0a36a2158a65afe098d9a3bb
+F src/analyze.c e01e5362ba2ac8430ab7833022afb6081ade8315
 F src/attach.c 8c476f8bd5d2afe11d925f890d30e527e5b0ce43
 F src/auth.c 930b376a9c56998557367e6f7f8aaeac82a2a792
 F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b
 F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
 F src/btmutex.c 0e9ce2d56159b89b9bc8e197e023ee11e39ff8ca
-F src/btree.c e7d724b02365d88920171caf0c919aa96d9b19e3
+F src/btree.c a4ab1fb5cdeea88c4f76216e41cfecfa505c8c43
 F src/btree.h bf64dfeeddeebdb775a5eba0098bbc00d073290d
 F src/btreeInt.h cd55d39d9916270837a88c12e701047cba0729b0
 F src/build.c 2e05d0360568f40dc583461f2211f020ff282ee4
@@ -1557,7 +1557,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P bfbdd07409688fac4ccddbab3639745f6152e23d
-R 1c1b7451b307830f90322e6d51007af7
+P 882599a4a7ea92c9e7752e0745475508e58a11c3
+R cf9f80fd407d6e9e7cfac9c2957017b5
 U drh
-Z 2d7c806c83a06bb426974433c00a5916
+Z 225df65ba1e601aba9cbc975df68b3a8
index 9825130b6a209221fabcf49d5f9e86e522fd78a9..07d49087a1be8bd613840216c93b94e318bf2bb4 100644 (file)
@@ -1 +1 @@
-882599a4a7ea92c9e7752e0745475508e58a11c3
\ No newline at end of file
+4229caec0b60a1617b9d5ff94b47271cbd7be1e0
\ No newline at end of file
index c30027aec9581fb31e6f875b37e0db81867c2444..118cdb93830c2a9550a34a3a8a5dc8d6132840bd 100644 (file)
@@ -1019,6 +1019,7 @@ static void analyzeOneTable(
   sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
   if( szOld>0 ){
     addrSizeCk = sqlite3VdbeAddOp3(v, OP_IfSmaller, iTabCur, 0, szOld);
+    VdbeCoverage(v);
   }
   sqlite3VdbeLoadString(v, regTabname, pTab->zName);
 
@@ -1296,9 +1297,10 @@ static int analyzeNeeded(Table *pTab, LogEst *pThreshold){
   Index *pIdx;
   if( (pTab->tabFlags & TF_StatsUsed)==0 ) return 0;
 
-  /* If TF_StatsUsed is true, then we might need to reanalyze.  But
-  ** only reanalyze if the table size has grown by a factor of 10 or more */
-  *pThreshold = pTab->nRowLogEst + 33;  assert( sqlite3LogEst(10)==33 );
+  /* If TF_StatsUsed is true, then we might need to reanalyze.
+  ** TUNING: Only reanalyze if the table size has grown by a factor
+  ** of 25 or more. */
+  *pThreshold = pTab->nRowLogEst + 46;  assert( sqlite3LogEst(25)==46 );
 
   /* Except, if any of the indexes of the table do not have valid
   ** sqlite_stat1 entries, then set the size threshold to zero to
index 8aed08cb36b1b2af45adf276f0870f8a422a7b50..4d31661f1089d5c9f1e782af668772328114e1d4 100644 (file)
@@ -5331,8 +5331,8 @@ i64 sqlite3BtreeRowCountEst(BtCursor *pCur){
   assert( cursorOwnsBtShared(pCur) );
   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
   if( pCur->eState!=CURSOR_VALID ) return -1;
-  if( pCur->apPage[pCur->iPage-1]->leaf==0 ) return -1;
-  for(n=1, i=0; i<pCur->iPage; i++){
+  if( pCur->apPage[pCur->iPage]->leaf==0 ) return -1;
+  for(n=1, i=0; i<=pCur->iPage; i++){
     n *= pCur->apPage[i]->nCell;
   }
   return n;