]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an auto-vacuum problem with the PENDING_BYTE page. Also link the Tcl
authordanielk1977 <danielk1977@noemail.net>
Fri, 16 Sep 2005 09:52:29 +0000 (09:52 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 16 Sep 2005 09:52:29 +0000 (09:52 +0000)
variable sqlite_pending_byte to the internal pending-byte location when in test mode. (CVS 2700)

FossilOrigin-Name: 9115e0621d1fdc5a89a0288b87c0a4ce1e4b50c6

manifest
manifest.uuid
src/btree.c
src/os.h
src/test2.c
test/autovacuum.test

index 4e91b87494190bed57a108c9fd20bba712c452b4..32fbdb0d75e7b4c306e74dbba83018ea6e085acd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Documentation\schanges\sin\spreparation\sfor\sthe\srelease\sof\s3.2.6.\s(CVS\s2698)
-D 2005-09-16T02:55:14
+C Fix\san\sauto-vacuum\sproblem\swith\sthe\sPENDING_BYTE\spage.\sAlso\slink\sthe\sTcl\nvariable\ssqlite_pending_byte\sto\sthe\sinternal\spending-byte\slocation\swhen\sin\stest\smode.\s(CVS\s2700)
+D 2005-09-16T09:52:29
 F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1
 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -32,7 +32,7 @@ F src/alter.c 26d755f2143719dd3f5b8aaf6cbe3c7f95332528
 F src/analyze.c 43a2d91242bdd71b6c299378f6b11e896ee5e43d
 F src/attach.c 4b21689700a72ae281fa85dbaff06b2a62bd49ee
 F src/auth.c 31e2304bef67f44d635655f44234387ea7d21454
-F src/btree.c a1ee183067f20eb5ba33ca45ed47acbc7214fe44
+F src/btree.c b2dedc955bc1778f5e6b23ae4c26625fc24f15d0
 F src/btree.h 1ed561263ca0e335bc3e81d761c9d5ff8c22f61e
 F src/build.c 74653e045581bfbadb8b35a0cb38a62f4a2c850e
 F src/callback.c 9a1162c8f9dae9fad6d548339669aacb5f6cf76b
@@ -48,7 +48,7 @@ F src/insert.c 484c73bc1309f283a31baa0e114f3ee980536397
 F src/legacy.c d58ea507bce885298a2c8c3cbb0f4bff5d47830b
 F src/main.c bf88855445d365b497070d85e3faa0579a9edb91
 F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
-F src/os.h c9fd9f92f176a5ea22e0101fcc1e85d532844dd1
+F src/os.h 5a0a42555a750f334b7da973776803a0e3cc263a
 F src/os_common.h bd6ede01998c19dbfd3c21fbfd13f4b9532dd7df
 F src/os_test.c 49833426101f99aee4bb5f6a44b7c4b2029fda1c
 F src/os_test.h 903c93554c23d88f34f667f1979e4a1cee792af3
@@ -70,7 +70,7 @@ F src/sqliteInt.h cc685a74a0458bc41a34131e7c0b217654558b6c
 F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9
 F src/tclsqlite.c ac94682f9e601dd373912c46414a5a842db2089a
 F src/test1.c b569b60e35f0e3ea20e5ebfaf6e522a01c08d481
-F src/test2.c 4f89ffd7aa96dfbd4b764e62bb823670231554a0
+F src/test2.c f5b438bc80110ef17a248f09b58096d7d81d602e
 F src/test3.c f4e6a16a602091696619a1171bda25c0e3df49f7
 F src/test4.c a8fd681e139e1c61f22a77d07fc3a99cb28fff3f
 F src/test5.c 64f08b2a50ef371a1bd68ff206829e7b1b9997f5
@@ -101,7 +101,7 @@ F test/attach3.test 63013383adc4380af69779f34f4af19bd49f7cbe
 F test/attachmalloc.test cdb26c42850f04698377ccec05f5fa89d987837c
 F test/auth.test 973ae7274eae32c4453fbbcbd0ec2b80c5b1eeb3
 F test/autoinc.test 395fbac8bc158d3599995c73bfb15c418a5429f0
-F test/autovacuum.test d2d0b2b86fd3b487d1e100fafcb03b1af6c23057
+F test/autovacuum.test 9471d58a08b14dc0d2c15b87583c46d1744343d6
 F test/autovacuum_crash.test 05a63b8805b20cfba7ace82856ce4ccdda075a31
 F test/autovacuum_ioerr.test 9cf27275ca47b72e188a47c53b61b6d583a01d24
 F test/autovacuum_ioerr2.test 2f8a3fb31f833fd0ca86ad4ad98913c73e807572
@@ -307,7 +307,7 @@ F www/tclsqlite.tcl ddcf912ea48695603c8ed7efb29f0812ef8d1b49
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 6017b1962517eb206183042bbb718925d9819063
-R 4df1cc59dde685a8213cfe530f8669ae
-U drh
-Z 71dca7c577320c1b910b1be05beabb55
+P 243f455c7c4e5c0c56406c197fa78088bc3659ca
+R ae1b2d7426cc1dc2c291ee57cc0bc2b2
+U danielk1977
+Z 374ff94d0d685dd8205cbb0751850154
index 35548e170af8c27e1478e54c2041f18a962a21fd..06dd7c06f6956b9acb597a29463ad3b54b55a5dd 100644 (file)
@@ -1 +1 @@
-243f455c7c4e5c0c56406c197fa78088bc3659ca
\ No newline at end of file
+9115e0621d1fdc5a89a0288b87c0a4ce1e4b50c6
\ No newline at end of file
index 6b778b4adfe176ceb0b0233d5dd91c48ac895a85..da7a6300f7b537d918e6f98ce6c519d7495cbbd1 100644 (file)
@@ -9,7 +9,7 @@
 **    May you share freely, never taking more than you give.
 **
 *************************************************************************
-** $Id: btree.c,v 1.266 2005/09/08 14:17:20 drh Exp $
+** $Id: btree.c,v 1.267 2005/09/16 09:52:29 danielk1977 Exp $
 **
 ** This file implements a external (disk-based) database using BTrees.
 ** For a detailed discussion of BTrees, refer to
@@ -1875,7 +1875,7 @@ static int autoVacuumCommit(Btree *pBt, Pgno *nTrunc){
   origSize = sqlite3pager_pagecount(pPager);
   nPtrMap = (nFreeList-origSize+PTRMAP_PAGENO(pgsz, origSize)+pgsz/5)/(pgsz/5);
   finSize = origSize - nFreeList - nPtrMap;
-  if( origSize>PENDING_BYTE_PAGE(pBt) && finSize<=PENDING_BYTE_PAGE(pBt) ){
+  if( origSize>=PENDING_BYTE_PAGE(pBt) && finSize<=PENDING_BYTE_PAGE(pBt) ){
     finSize--;
     if( PTRMAP_ISPAGE(pBt->usableSize, finSize) ){
       finSize--;
index c0d1efe5ce20e19eab885f3830ed0940c7d33013..a4a058baffbfc0b8dab31ce3c067814de7e87062 100644 (file)
--- a/src/os.h
+++ b/src/os.h
 ** 1GB boundary.
 **
 */
+#ifndef SQLITE_TEST
 #define PENDING_BYTE      0x40000000  /* First byte past the 1GB boundary */
-/* #define PENDING_BYTE     0x5400   // Page 22 - for testing */
+#else
+/* Defined in test2.c (pager tests) */
+extern unsigned int sqlite3_pending_byte;
+#define PENDING_BYTE sqlite3_pending_byte
+#endif
+
 #define RESERVED_BYTE     (PENDING_BYTE+1)
 #define SHARED_FIRST      (PENDING_BYTE+2)
 #define SHARED_SIZE       510
index ac6d1ed304dabfa21875a1c67ec94cff5b87e655..8f9fa02240b363f167ee59a4f1d84ab4bdb959ed 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test2.c,v 1.32 2005/09/09 10:46:19 drh Exp $
+** $Id: test2.c,v 1.33 2005/09/16 09:52:29 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -555,6 +555,10 @@ static int fake_big_file(
 }
 #endif
 
+#ifdef SQLITE_TEST
+unsigned int sqlite3_pending_byte = 0x0010000;
+#endif
+
 /*
 ** Register commands with the TCL interpreter.
 */
@@ -596,6 +600,8 @@ int Sqlitetest2_Init(Tcl_Interp *interp){
      (char*)&sqlite3_diskfull_pending, TCL_LINK_INT);
   Tcl_LinkVar(interp, "sqlite_diskfull",
      (char*)&sqlite3_diskfull, TCL_LINK_INT);
+  Tcl_LinkVar(interp, "sqlite_pending_byte",
+     (char*)&sqlite3_pending_byte, TCL_LINK_INT);
   Tcl_LinkVar(interp, "pager_pagesize",
      (char*)&test_pagesize, TCL_LINK_INT);
   return TCL_OK;
index f685ef8bb757829cc6ca65f6f42ecf814dd21dc6..0e2c8d70e297a2544b68d39d3a51903d39c803a6 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the SELECT statement.
 #
-# $Id: autovacuum.test,v 1.18 2005/09/08 10:37:01 drh Exp $
+# $Id: autovacuum.test,v 1.19 2005/09/16 09:52:30 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -279,12 +279,16 @@ do_test autovacuum-2.4.4 {
   "
 } {}
 set root_page_list [list]
+set pending_byte_page [expr ($::sqlite_pending_byte / 1024) + 1]
 for {set i 3} {$i<=532} {incr i} {
   # 207 and 412 are pointer-map pages.
-  if { $i!=207 && $i!=412 } {
+  if { $i!=207 && $i!=412 && $i != $pending_byte_page} {
     lappend root_page_list $i
   }
 }
+if {$i >= $pending_byte_page} {
+  lappend root_page_list $i
+}
 do_test autovacuum-2.4.5 {
   for {set i 11} {$i<=530} {incr i} {
     execsql "CREATE TABLE av$i (x)"
@@ -298,7 +302,7 @@ do_test autovacuum-2.4.5 {
 do_test autovacuum-2.4.6 {
   execsql COMMIT;
   file_pages
-} 561
+} [expr 561 + (($i >= $pending_byte_page)?1:0)]
 integrity_check autovacuum-2.4.6
 do_test autovacuum-2.4.7 {
   execsql BEGIN