]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add assert() statements to more tightly constrain the state of pager.c.
authordrh <drh@noemail.net>
Sat, 25 Jul 2009 04:12:02 +0000 (04:12 +0000)
committerdrh <drh@noemail.net>
Sat, 25 Jul 2009 04:12:02 +0000 (04:12 +0000)
Remove the three pager*.test scripts since they violate the constraints
asserted above by modifying the state of the system in ways that it cannot
be modified in a live system. (CVS 6933)

FossilOrigin-Name: 3b6d370ed68eaf9636b26c7240a8b3a43d2edd70

manifest
manifest.uuid
src/pager.c
test/pager.test [deleted file]
test/pager2.test [deleted file]
test/pager3.test [deleted file]

index 495e715e669432018185adef671aefaf4178f3e5..3c10bc3c41393acc8ad3f5741b1774a5217bc8ef 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\stwo\smore\soverzealous\sassert()\sstatements.\s(CVS\s6932)
-D 2009-07-25T00:13:59
+C Add\sassert()\sstatements\sto\smore\stightly\sconstrain\sthe\sstate\sof\spager.c.\nRemove\sthe\sthree\spager*.test\sscripts\ssince\sthey\sviolate\sthe\sconstraints\nasserted\sabove\sby\smodifying\sthe\sstate\sof\sthe\ssystem\sin\sways\sthat\sit\scannot\nbe\smodified\sin\sa\slive\ssystem.\s(CVS\s6933)
+D 2009-07-25T04:12:02
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in df9359da7a726ccb67a45db905c5447d5c00c6ef
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -147,7 +147,7 @@ F src/os_common.h 8c61457df58f1a4bd5f5adc3e90e01b37bf7afbc
 F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
 F src/os_unix.c cdb2a08b9ce4aa13b3f7b91d4dd60fb48be9f56a
 F src/os_win.c 725c38a524d168ce280446ad8761d731bc516405
-F src/pager.c c462bf6153c3c29da0ce723ac76c8fa76cbd6a9b
+F src/pager.c e26d9c5d881435b83551a07cd7e38396518582bc
 F src/pager.h 11852d044c86cf5a9d6e34171fb0c4fcf1f6265f
 F src/parse.y bcd46d43fbd23a22b8c020a3eb1806b794794ed5
 F src/pcache.c 1dae135b70a029f81ed66f6e9b5d0db91480d5d0
@@ -492,9 +492,6 @@ F test/notify2.test 195a467e021f74197be2c4fb02d6dee644b8d8db
 F test/notnull.test 44d600f916b770def8b095a9962dbe3be5a70d82
 F test/null.test a8b09b8ed87852742343b33441a9240022108993
 F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec
-F test/pager.test 2d0abb66c8967ffac4558c0530b31c28706b5e64
-F test/pager2.test d4b7f6b70ff018b9995e622a32526b275f515042
-F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
 F test/pageropt.test 3ee6578891baaca967f0bd349e4abfa736229e1a
 F test/pagesize.test 0d9ff3fedfce6e5ffe8fa7aca9b6d3433a2e843b
 F test/pcache.test eebc4420b37cb07733ae9b6e99c9da7c40dd6d58
@@ -741,7 +738,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
-P 4a924b475aa0f7f2f69caed0adc2e60d29c47f21
-R 69d11ad1bb13603103594d88d70fe872
+P 788aa9dde9e76f67f22c07a904faf03e97e032c6
+R 4116dfd49c9a3af1d9a66719263f82dc
 U drh
-Z e88cd7ec3be1e087035327e93db22707
+Z 51e179b626e42eaf6ce7a289270b3c19
index 487108c6434710b23f68eb59e528690a107a2e7c..2b5cda4c4a28b72873b0741d28ddef24758f5dd8 100644 (file)
@@ -1 +1 @@
-788aa9dde9e76f67f22c07a904faf03e97e032c6
\ No newline at end of file
+3b6d370ed68eaf9636b26c7240a8b3a43d2edd70
\ No newline at end of file
index 28e100ff87de85b96abeeab67099f26739638661..7998b6bd5f3bdfa5f764b36593a7729ff2546985 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.619 2009/07/25 00:13:59 drh Exp $
+** @(#) $Id: pager.c,v 1.620 2009/07/25 04:12:02 drh Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -2410,9 +2410,9 @@ int sqlite3PagerSetPagesize(Pager *pPager, u16 *pPageSize, int nReserve){
   if( rc==SQLITE_OK ){
     u16 pageSize = *pPageSize;
     assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
-    if( pageSize && pageSize!=pPager->pageSize 
-     && (pPager->memDb==0 || pPager->dbSize==0)
+    if( (pPager->memDb==0 || pPager->dbSize==0)
      && sqlite3PcacheRefCount(pPager->pPCache)==0 
+     && pageSize && pageSize!=pPager->pageSize 
     ){
       char *pNew = (char *)sqlite3PageMalloc(pageSize);
       if( !pNew ){
@@ -2988,7 +2988,6 @@ static int subjournalPage(PgHdr *pPg){
     pPager->nSubRec++;
     assert( pPager->nSavepoint>0 );
     rc = addToSavepointBitvecs(pPager, pPg->pgno);
-    testcase( rc!=SQLITE_OK );
   }
   return rc;
 }
@@ -3077,6 +3076,7 @@ static int pagerStress(void *p, PgHdr *pPg){
   ** executed.
   */
   if( rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg) ){
+assert(0);
     rc = subjournalPage(pPg);
   }
 
@@ -3418,6 +3418,7 @@ static int hasHotJournal(Pager *pPager, int *pExists){
   assert( pPager->useJournal );
   assert( isOpen(pPager->fd) );
   assert( !isOpen(pPager->jfd) );
+  assert( pPager->state <= PAGER_SHARED );
 
   *pExists = 0;
   rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);
@@ -3446,13 +3447,9 @@ static int hasHotJournal(Pager *pPager, int *pExists){
       if( rc==SQLITE_OK ){
         if( nPage==0 ){
           sqlite3BeginBenignMalloc();
-          if( pPager->state>=PAGER_RESERVED
-                 ||  sqlite3OsLock(pPager->fd, RESERVED_LOCK)==SQLITE_OK ){
+          if( sqlite3OsLock(pPager->fd, RESERVED_LOCK)==SQLITE_OK ){
             sqlite3OsDelete(pVfs, pPager->zJournal, 0);
-            assert( pPager->state>=PAGER_SHARED );
-            if( pPager->state==PAGER_SHARED ){
-              sqlite3OsUnlock(pPager->fd, SHARED_LOCK);
-            }
+            sqlite3OsUnlock(pPager->fd, SHARED_LOCK);
           }
           sqlite3EndBenignMalloc();
         }else{
@@ -3574,12 +3571,15 @@ int sqlite3PagerSharedLock(Pager *pPager){
   int rc = SQLITE_OK;                /* Return code */
   int isErrorReset = 0;              /* True if recovering from error state */
 
-  /* If this database has no outstanding page references and is in an 
-  ** error-state, this is a chance to clear the error. Discard the 
-  ** contents of the pager-cache and rollback any hot journal in the
-  ** file-system.
+  /* This routine is only called from b-tree and only when there are no
+  ** outstanding pages */
+  assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
+
+  /* If this database is in an error-state, now is a chance to clear
+  ** the error. Discard the contents of the pager-cache and rollback
+  ** any hot journal in the file-system.
   */
-  if( !MEMDB && sqlite3PcacheRefCount(pPager->pPCache)==0 && pPager->errCode ){
+  if( !MEMDB && pPager->errCode ){
     if( isOpen(pPager->jfd) || pPager->zJournal ){
       isErrorReset = 1;
     }
@@ -3615,6 +3615,7 @@ int sqlite3PagerSharedLock(Pager *pPager){
     ** database file, then it either needs to be played back or deleted.
     */
     if( !isErrorReset ){
+      assert( pPager->state <= PAGER_SHARED );
       rc = hasHotJournal(pPager, &isHotJournal);
       if( rc!=SQLITE_OK ){
         goto failed;
@@ -3891,7 +3892,7 @@ int sqlite3PagerAcquire(
         ** a bit in a bit vector.
         */
         sqlite3BeginBenignMalloc();
-        if( ALWAYS(pgno<=pPager->dbOrigSize) ){
+        if( pgno<=pPager->dbOrigSize ){
           TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);
           testcase( rc==SQLITE_NOMEM );
         }
@@ -4948,7 +4949,7 @@ int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
     for(ii=nCurrent; ii<nSavepoint; ii++){
       assert( pPager->dbSizeValid );
       aNew[ii].nOrig = pPager->dbSize;
-      if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
+      if( isOpen(pPager->jfd) && ALWAYS(pPager->journalOff>0) ){
         aNew[ii].iOffset = pPager->journalOff;
       }else{
         aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
diff --git a/test/pager.test b/test/pager.test
deleted file mode 100644 (file)
index 48a4830..0000000
+++ /dev/null
@@ -1,582 +0,0 @@
-# 2001 September 15
-#
-# The author disclaims copyright to this source code.  In place of
-# a legal notice, here is a blessing:
-#
-#    May you do good and not evil.
-#    May you find forgiveness for yourself and forgive others.
-#    May you share freely, never taking more than you give.
-#
-#***********************************************************************
-# This file implements regression tests for SQLite library.  The
-# focus of this script is page cache subsystem.
-#
-# $Id: pager.test,v 1.36 2009/07/24 16:32:01 drh Exp $
-
-
-set testdir [file dirname $argv0]
-source $testdir/tester.tcl
-
-if {[info commands pager_open]!=""} {
-db close
-
-# Basic sanity check.  Open and close a pager.
-#
-do_test pager-1.0 {
-  catch {file delete -force ptf1.db}
-  catch {file delete -force ptf1.db-journal}
-  set v [catch {
-    set ::p1 [pager_open ptf1.db 10]
-  } msg]
-} {0}
-do_test pager-1.1 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
-do_test pager-1.2 {
-  pager_pagecount $::p1
-} {0}
-do_test pager-1.3 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
-do_test pager-1.4 {
-  pager_close $::p1
-} {}
-
-# Try to write a few pages.
-#
-do_test pager-2.1 {
-  set v [catch {
-    set ::p1 [pager_open ptf1.db 10]
-  } msg]
-} {0}
-#do_test pager-2.2 {
-#  set v [catch {
-#    set ::g1 [page_get $::p1 0]
-#  } msg]
-#  lappend v $msg
-#} {1 SQLITE_ERROR}
-#do_test pager-2.3.1 {
-#  set ::gx [page_lookup $::p1 1]
-#} {}
-do_test pager-2.3.2 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size -1 state 0 err 0 hit 0 miss 0 ovfl 0}
-do_test pager-2.3.3 {
-  set v [catch {
-    set ::g1 [page_get $::p1 1]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager-2.3.3 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.3.4 {
-  set ::gx [page_lookup $::p1 1]
-  expr {$::gx!=""}
-} {1}
-do_test pager-2.3.5 {
-  page_unref $::gx
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.3.6 {
-  expr {$::g1==$::gx}
-} {1}
-do_test pager-2.3.7 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.4 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.5 {
-  pager_pagecount $::p1
-} {0}
-do_test pager-2.6 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.7 {
-  page_number $::g1
-} {1}
-do_test pager-2.8 {
-  page_read $::g1
-} {}
-do_test pager-2.9 {
-  page_unref $::g1
-} {}
-
-# Update 24/03/2007: Even though the ref-count has dropped to zero, the
-# pager-cache still contains some pages. Previously, it was always true
-# that if there were no references to a pager it was empty.
-do_test pager-2.10 {
-  pager_stats $::p1
-} {ref 0 page 1 max 10 size -1 state 0 err 0 hit 0 miss 1 ovfl 0}
-do_test pager-2.11 {
-  set ::g1 [page_get $::p1 1]
-  expr {$::g1!=0}
-} {1}
-do_test pager-2.12 {
-  page_number $::g1
-} {1}
-do_test pager-2.13 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 1 err 0 hit 1 miss 1 ovfl 0}
-do_test pager-2.14 {
-  set v [catch {
-    page_write $::g1 "Page-One"
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager-2.15 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 1 state 2 err 0 hit 1 miss 1 ovfl 0}
-do_test pager-2.16 {
-  page_read $::g1
-} {Page-One}
-do_test pager-2.17 {
-  set v [catch {
-    pager_commit $::p1
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager-2.20 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size -1 state 1 err 0 hit 2 miss 1 ovfl 0}
-do_test pager-2.19 {
-  pager_pagecount $::p1
-} {1}
-do_test pager-2.21 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 1 state 1 err 0 hit 2 miss 1 ovfl 0}
-do_test pager-2.22 {
-  page_unref $::g1
-} {}
-do_test pager-2.23 {
-  pager_stats $::p1
-} {ref 0 page 1 max 10 size -1 state 0 err 0 hit 2 miss 1 ovfl 0}
-do_test pager-2.24 {
-  set v [catch {
-    page_get $::p1 1
-  } ::g1]
-  if {$v} {lappend v $::g1}
-  set v
-} {0}
-do_test pager-2.25 {
-  page_read $::g1
-} {Page-One}
-do_test pager-2.26 {
-  set v [catch {
-    page_write $::g1 {page-one}
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager-2.27 {
-  page_read $::g1
-} {page-one}
-do_test pager-2.28 {
-  set v [catch {
-    pager_rollback $::p1
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager-2.29 {
-  page_unref $::g1
-  set ::g1 [page_get $::p1 1]
-  page_read $::g1
-} {Page-One}
-do_test pager-2.99 {
-  page_unref $::g1
-  pager_close $::p1
-} {}
-
-do_test pager-3.1 {
-  set v [catch {
-    set ::p1 [pager_open ptf1.db 15]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager-3.2 {
-  pager_pagecount $::p1
-} {1}
-do_test pager-3.3 {
-  set v [catch {
-    set ::g(1) [page_get $::p1 1]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager-3.4 {
-  page_read $::g(1)
-} {Page-One}
-do_test pager-3.5 {
-  for {set i 2} {$i<=20} {incr i} {
-    set gx [page_get $::p1 $i]
-    page_write $gx "Page-$i"
-    page_unref $gx
-  }
-  pager_commit $::p1
-  page_unref $::g(1)
-} {}
-for {set i 2} {$i<=20} {incr i} {
-  do_test pager-3.6.[expr {$i-1}] [subst {
-    set gx \[page_get $::p1 $i\]
-    set v \[page_read \$gx\]
-    page_unref \$gx
-    set v
-  }] "Page-$i"
-}
-for {set i 1} {$i<=20} {incr i} {
-  regsub -all CNT {
-    set ::g1 [page_get $::p1 CNT]
-    set ::g2 [page_get $::p1 CNT]
-    set ::vx [page_read $::g2]
-    expr {$::g1==$::g2}
-  } $i body;
-  do_test pager-3.7.$i.1 $body {1}
-  regsub -all CNT {
-    page_unref $::g2
-    set vy [page_read $::g1]
-    expr {$vy==$::vx}
-  } $i body;
-  do_test pager-3.7.$i.2 $body {1}
-  regsub -all CNT {
-    page_unref $::g1
-    set gx [page_get $::p1 CNT]
-    set vy [page_read $gx]
-    page_unref $gx
-    expr {$vy==$::vx}
-  } $i body;
-  do_test pager-3.7.$i.3 $body {1}
-}
-do_test pager-3.99 {
-  pager_close $::p1
-} {}
-
-# tests of the checkpoint mechanism and api
-#
-do_test pager-4.0 {
-  set v [catch {
-    file delete -force ptf1.db
-    set ::p1 [pager_open ptf1.db 15]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager-4.1 {
-  set g1 [page_get $::p1 1]
-  page_write $g1 "Page-1 v0"
-  for {set i 2} {$i<=20} {incr i} {
-    set gx [page_get $::p1 $i]
-    page_write $gx "Page-$i v0"
-    page_unref $gx
-  }
-  pager_commit $::p1
-} {}
-for {set i 1} {$i<=20} {incr i} {
-  do_test pager-4.2.$i {
-    set gx [page_get $p1 $i]
-    set v [page_read $gx]
-    page_unref $gx
-    set v
-  } "Page-$i v0"
-}
-do_test pager-4.3 {
-  lrange [pager_stats $::p1] 0 1
-} {ref 1}
-do_test pager-4.4 {
-  lrange [pager_stats $::p1] 8 9
-} {state 1}
-
-for {set i 1} {$i<20} {incr i} {
-  do_test pager-4.5.$i.0 {
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v[expr {$i-1}]"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager-4.5.$i.1 {
-    page_write $g1 "Page-1 v$i"
-    lrange [pager_stats $p1] 8 9
-  } {state 2}
-  do_test pager-4.5.$i.2 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager-4.5.$i.3 {
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v$i"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager-4.5.$i.4 {
-    pager_rollback $p1
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v[expr {$i-1}]"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager-4.5.$i.5 {
-    page_write $g1 "Page-1 v$i"
-    lrange [pager_stats $p1] 8 9
-  } {state 2}
-  do_test pager-4.5.$i.6 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager-4.5.$i.7 {
-    pager_stmt_rollback $p1
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      if {$j<=$i || $i==1} {
-        set shouldbe "Page-$j v$i"
-      } else {
-        set shouldbe "Page-$j v[expr {$i-1}]"
-      }
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager-4.5.$i.8 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager-4.5.$i.9 {
-    pager_stmt_commit $p1
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v$i"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager-4.5.$i.10 {
-    pager_commit $p1
-    lrange [pager_stats $p1] 8 9
-  } {state 1}
-}
-
-# Test that nothing bad happens when sqlite3pager_set_cachesize() is
-# called with a negative argument.
-do_test pager-4.6.1 {
-  pager_close [pager_open ptf2.db -15]
-} {}
-
-# Test truncate on an in-memory database is Ok.
-ifcapable memorydb {
-  do_test pager-4.6.2 {
-    set ::p2 [pager_open :memory: 10]
-    pager_truncate $::p2 0
-  } {}
-  do_test pager-4.6.3 {
-    set page1 [page_get $::p2 1]
-    for {set i 1} {$i<5} {incr i} {
-      set p [page_get $::p2 $i]
-      page_write $p "Page $i"
-      pager_commit $::p2
-      page_unref $p
-    }
-    page_unref $page1
-    pager_truncate $::p2 3
-  } {}
-  do_test pager-4.6.4 {
-    pager_close $::p2
-  } {}
-}
-
-do_test pager-4.99 {
-  page_unref $::g1
-  pager_close $::p1
-} {}
-
-
-
-  file delete -force ptf1.db
-
-} ;# end if( not mem: and has pager_open command );
-
-if 0 {
-# Ticket #615: an assertion fault inside the pager.  It is a benign
-# fault, but we might as well test for it.
-#
-do_test pager-5.1 {
-  sqlite3 db test.db
-  execsql {
-    BEGIN;
-    CREATE TABLE t1(x);
-    PRAGMA synchronous=off;
-    COMMIT;
-  }
-} {}
-}
-
-# The following tests cover rolling back hot journal files. 
-# They can't be run on windows because the windows version of 
-# SQLite holds a mandatory exclusive lock on journal files it has open.
-# 
-# They cannot be run during the journaltest permutation because 
-# "PRAGMA synchronous = 0" is used.
-#
-if {$tcl_platform(platform)!="windows" && (
-      0 == [info exists ::permutations_test_prefix] 
-   || $::permutations_test_prefix ne "journaltest"
-)} {
-do_test pager-6.1 {
-  file delete -force test2.db
-  file delete -force test2.db-journal
-  sqlite3 db2 test2.db
-  execsql {
-    PRAGMA synchronous = 0;
-    CREATE TABLE abc(a, b, c);
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    INSERT INTO abc VALUES(1, 2, randstr(200,200));
-    BEGIN;
-    UPDATE abc SET c = randstr(200,200);
-  } db2
-  copy_file test2.db test.db
-  copy_file test2.db-journal test.db-journal
-
-  set f [open test.db-journal a]
-  fconfigure $f -encoding binary
-  seek $f [expr [file size test.db-journal] - 1032] start
-  puts -nonewline $f "\00\00\00\00"
-  close $f
-
-  sqlite3 db test.db
-  execsql {
-    SELECT sql FROM sqlite_master
-  }
-} {{CREATE TABLE abc(a, b, c)}}
-
-do_test pager-6.2 {
-  copy_file test2.db test.db
-  copy_file test2.db-journal test.db-journal
-
-  set f [open test.db-journal a]
-  fconfigure $f -encoding binary
-  seek $f [expr [file size test.db-journal] - 1032] start
-  puts -nonewline $f "\00\00\00\FF"
-  close $f
-
-  sqlite3 db test.db
-  execsql {
-    SELECT sql FROM sqlite_master
-  }
-} {{CREATE TABLE abc(a, b, c)}}
-
-do_test pager-6.3 {
-  copy_file test2.db test.db
-  copy_file test2.db-journal test.db-journal
-
-  set f [open test.db-journal a]
-  fconfigure $f -encoding binary
-  seek $f [expr [file size test.db-journal] - 4] start
-  puts -nonewline $f "\00\00\00\00"
-  close $f
-
-  sqlite3 db test.db
-  execsql {
-    SELECT sql FROM sqlite_master
-  }
-} {{CREATE TABLE abc(a, b, c)}}
-
-do_test pager-6.4.1 {
-  execsql {
-    BEGIN;
-    SELECT sql FROM sqlite_master;
-  }
-  copy_file test2.db-journal test.db-journal;
-  sqlite3 db3 test.db
-  catchsql {
-    BEGIN;
-    SELECT sql FROM sqlite_master;
-  } db3;
-} {1 {database is locked}}
-do_test pager-6.4.2 {
-  file delete -force test.db-journal
-  catchsql {
-    SELECT sql FROM sqlite_master;
-  } db3;
-} {0 {{CREATE TABLE abc(a, b, c)}}}
-do_test pager-6.4.3 {
-  db3 close
-  execsql {
-    COMMIT;
-  }
-} {}
-
-do_test pager-6.5 {
-  copy_file test2.db test.db
-  copy_file test2.db-journal test.db-journal
-
-  set f [open test.db-journal a]
-  fconfigure $f -encoding binary
-  puts -nonewline $f "hello"
-  puts -nonewline $f "\x00\x00\x00\x05\x01\x02\x03\x04"
-  puts -nonewline $f "\xd9\xd5\x05\xf9\x20\xa1\x63\xd7"
-  close $f
-
-  sqlite3 db test.db
-  execsql {
-    SELECT sql FROM sqlite_master
-  }
-} {{CREATE TABLE abc(a, b, c)}}
-
-do_test pager-6.5 {
-  db2 close
-} {}
-}
-finish_test
diff --git a/test/pager2.test b/test/pager2.test
deleted file mode 100644 (file)
index 3d4057c..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-# 2001 September 15
-#
-# The author disclaims copyright to this source code.  In place of
-# a legal notice, here is a blessing:
-#
-#    May you do good and not evil.
-#    May you find forgiveness for yourself and forgive others.
-#    May you share freely, never taking more than you give.
-#
-#***********************************************************************
-# This file implements regression tests for SQLite library.  The
-# focus of this script is page cache subsystem.
-#
-# $Id: pager2.test,v 1.9 2008/12/30 17:55:00 drh Exp $
-
-
-set testdir [file dirname $argv0]
-source $testdir/tester.tcl
-
-# Don't run this test file if the pager test interface [pager_open] is not
-# available, or the library was compiled without in-memory database support.
-#
-if {[info commands pager_open]!=""} {
-ifcapable memorydb {
-db close
-
-# Basic sanity check.  Open and close a pager.
-#
-do_test pager2-1.0 {
-  set v [catch {
-    set ::p1 [pager_open :memory: 10]
-  } msg]
-} {0}
-do_test pager2-1.1 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size 0 state 4 err 0 hit 0 miss 0 ovfl 0}
-do_test pager2-1.2 {
-  pager_pagecount $::p1
-} {0}
-do_test pager2-1.3 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size 0 state 4 err 0 hit 0 miss 0 ovfl 0}
-do_test pager2-1.4 {
-  pager_close $::p1
-} {}
-
-# Try to write a few pages.
-#
-do_test pager2-2.1 {
-  set v [catch {
-    set ::p1 [pager_open :memory: 10]
-  } msg]
-} {0}
-#do_test pager2-2.2 {
-#  set v [catch {
-#    set ::g1 [page_get $::p1 0]
-#  } msg]
-#  lappend v $msg
-#} {1 SQLITE_ERROR}
-do_test pager2-2.3.1 {
-  set ::gx [page_lookup $::p1 1]
-} {}
-do_test pager2-2.3.2 {
-  pager_stats $::p1
-} {ref 0 page 0 max 10 size 0 state 4 err 0 hit 0 miss 0 ovfl 0}
-do_test pager2-2.3.3 {
-  set v [catch {
-    set ::g1 [page_get $::p1 1]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager2-2.3.3 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.3.4 {
-  set ::gx [page_lookup $::p1 1]
-  page_unref $::gx
-  expr {$::gx!=""}
-} {1}
-do_test pager2-2.3.5 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.3.6 {
-  expr {$::g1==$::gx}
-} {1}
-do_test pager2-2.3.7 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.4 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.5 {
-  pager_pagecount $::p1
-} {0}
-do_test pager2-2.6 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.7 {
-  page_number $::g1
-} {1}
-do_test pager2-2.8 {
-  page_read $::g1
-} {}
-do_test pager2-2.9 {
-  page_unref $::g1
-} {}
-do_test pager2-2.10 {
-  pager_stats $::p1
-} {ref 0 page 1 max 10 size 0 state 4 err 0 hit 0 miss 1 ovfl 0}
-do_test pager2-2.11 {
-  set ::g1 [page_get $::p1 1]
-  expr {$::g1!=0}
-} {1}
-do_test pager2-2.12 {
-  page_number $::g1
-} {1}
-do_test pager2-2.13 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 0 state 4 err 0 hit 1 miss 1 ovfl 0}
-do_test pager2-2.14 {
-  set v [catch {
-    page_write $::g1 "Page-One"
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager2-2.15 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 1 state 4 err 0 hit 1 miss 1 ovfl 0}
-do_test pager2-2.16 {
-  page_read $::g1
-} {Page-One}
-do_test pager2-2.17 {
-  set v [catch {
-    pager_commit $::p1
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager2-2.20 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 1 state 4 err 0 hit 1 miss 1 ovfl 0}
-do_test pager2-2.19 {
-  pager_pagecount $::p1
-} {1}
-do_test pager2-2.21 {
-  pager_stats $::p1
-} {ref 1 page 1 max 10 size 1 state 4 err 0 hit 1 miss 1 ovfl 0}
-do_test pager2-2.22 {
-  page_unref $::g1
-} {}
-do_test pager2-2.23 {
-  pager_stats $::p1
-} {ref 0 page 1 max 10 size 1 state 4 err 0 hit 1 miss 1 ovfl 0}
-do_test pager2-2.24 {
-  set v [catch {
-    page_get $::p1 1
-  } ::g1]
-  if {$v} {lappend v $::g1}
-  set v
-} {0}
-do_test pager2-2.25 {
-  page_read $::g1
-} {Page-One}
-do_test pager2-2.26 {
-  set v [catch {
-    page_write $::g1 {page-one}
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager2-2.27 {
-  page_read $::g1
-} {page-one}
-do_test pager2-2.28 {
-  set v [catch {
-    pager_rollback $::p1
-  } msg]
-  lappend v $msg
-} {0 {}}
-do_test pager2-2.29 {
-  page_unref $::g1
-  set ::g1 [page_get $::p1 1]
-  page_read $::g1
-} {Page-One}
-do_test pager2-2.99 {
-  page_unref $::g1
-} {}
-
-#do_test pager2-3.1 {
-#  set v [catch {
-#    set ::p1 [pager_open :memory: 15]
-#  } msg]
-#  if {$v} {lappend v $msg}
-#  set v
-#} {0}
-do_test pager2-3.2 {
-  pager_pagecount $::p1
-} {1}
-do_test pager2-3.3 {
-  set v [catch {
-    set ::g(1) [page_get $::p1 1]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager2-3.4 {
-  page_read $::g(1)
-} {Page-One}
-do_test pager2-3.5 {
-  for {set i 2} {$i<=20} {incr i} {
-    set gx [page_get $::p1 $i]
-    page_write $gx "Page-$i"
-    page_unref $gx
-  }
-  pager_commit $::p1
-  page_unref $::g(1)
-} {}
-for {set i 2} {$i<=20} {incr i} {
-  set page1 [page_get $::p1 1]
-  do_test pager2-3.6.[expr {$i-1}] [subst {
-    set gx \[page_get $::p1 $i\]
-    set v \[page_read \$gx\]
-    page_unref \$gx
-    set v
-  }] "Page-$i"
-  page_unref $page1
-}
-for {set i 1} {$i<=20} {incr i} {
-  set page1 [page_get $::p1 1]
-  regsub -all CNT {
-    set ::g1 [page_get $::p1 CNT]
-    set ::g2 [page_get $::p1 CNT]
-    set ::vx [page_read $::g2]
-    expr {$::g1==$::g2}
-  } $i body;
-  do_test pager2-3.7.$i.1 $body {1}
-  regsub -all CNT {
-    page_unref $::g2
-    set vy [page_read $::g1]
-    expr {$vy==$::vx}
-  } $i body;
-  do_test pager2-3.7.$i.2 $body {1}
-  regsub -all CNT {
-    page_unref $::g1
-    set gx [page_get $::p1 CNT]
-    set vy [page_read $gx]
-    page_unref $gx
-    expr {$vy==$::vx}
-  } $i body;
-  do_test pager2-3.7.$i.3 $body {1}
-  page_unref $page1
-}
-do_test pager2-3.99 {
-  pager_close $::p1
-} {}
-
-# tests of the checkpoint mechanism and api
-#
-do_test pager2-4.0 {
-  set v [catch {
-    set ::p1 [pager_open :memory: 15]
-  } msg]
-  if {$v} {lappend v $msg}
-  set v
-} {0}
-do_test pager2-4.1 {
-  set g1 [page_get $::p1 1]
-  page_write $g1 "Page-1 v0"
-  for {set i 2} {$i<=20} {incr i} {
-    set gx [page_get $::p1 $i]
-    page_write $gx "Page-$i v0"
-    page_unref $gx
-  }
-  pager_commit $::p1
-} {}
-for {set i 1} {$i<=20} {incr i} {
-  do_test pager2-4.2.$i {
-    set gx [page_get $p1 $i]
-    set v [page_read $gx]
-    page_unref $gx
-    set v
-  } "Page-$i v0"
-}
-do_test pager2-4.3 {
-  lrange [pager_stats $::p1] 0 1
-} {ref 1}
-do_test pager2-4.4 {
-  lrange [pager_stats $::p1] 8 9
-} {state 4}
-
-for {set i 1} {$i<20} {incr i} {
-  do_test pager2-4.5.$i.0 {
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v[expr {$i-1}]"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager2-4.5.$i.1 {
-    page_write $g1 "Page-1 v$i"
-    lrange [pager_stats $p1] 8 9
-  } {state 4}
-  do_test pager2-4.5.$i.2 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager2-4.5.$i.3 {
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v$i"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager2-4.5.$i.4 {
-    pager_rollback $p1
-    set res {}
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v[expr {$i-1}]"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager2-4.5.$i.5 {
-    page_write $g1 "Page-1 v$i"
-    lrange [pager_stats $p1] 8 9
-  } {state 4}
-  do_test pager2-4.5.$i.6 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager2-4.5.$i.7 {
-    pager_stmt_rollback $p1
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      if {$j<=$i || $i==1} {
-        set shouldbe "Page-$j v$i"
-      } else {
-        set shouldbe "Page-$j v[expr {$i-1}]"
-      }
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager2-4.5.$i.8 {
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      page_write $gx "Page-$j v$i"
-      page_unref $gx
-      if {$j==$i} {
-        pager_stmt_begin $p1
-      }
-    }
-  } {}
-  do_test pager2-4.5.$i.9 {
-    pager_stmt_commit $p1
-    for {set j 2} {$j<=20} {incr j} {
-      set gx [page_get $p1 $j]
-      set value [page_read $gx]
-      page_unref $gx
-      set shouldbe "Page-$j v$i"
-      if {$value!=$shouldbe} {
-        lappend res $value $shouldbe
-      }
-    }
-    set res
-  } {}
-  do_test pager2-4.5.$i.10 {
-    pager_commit $p1
-    lrange [pager_stats $p1] 8 9
-  } {state 4}
-}
-
-do_test pager2-4.99 {
-  page_unref $::g1
-  pager_close $::p1
-} {}
-
-} ;# ifcapable inmemory
-} ;# end if( has pager_open command );
-
-
-finish_test
diff --git a/test/pager3.test b/test/pager3.test
deleted file mode 100644 (file)
index 59a97c5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# 2001 September 15
-#
-# The author disclaims copyright to this source code.  In place of
-# a legal notice, here is a blessing:
-#
-#    May you do good and not evil.
-#    May you find forgiveness for yourself and forgive others.
-#    May you share freely, never taking more than you give.
-#
-#***********************************************************************
-# This file implements regression tests for SQLite library.  The
-# focus of this script is page cache subsystem.
-#
-# $Id: pager3.test,v 1.3 2005/03/29 03:11:00 danielk1977 Exp $
-
-
-set testdir [file dirname $argv0]
-source $testdir/tester.tcl
-
-# This test makes sure the database file is truncated back to the correct
-# length on a rollback.
-#
-# After some preliminary setup, a transaction is start at NOTE (1).
-# The create table on the following line allocates an additional page
-# at the end of the database file.  But that page is not written because
-# the database still has a RESERVED lock, not an EXCLUSIVE lock.  The
-# new page is held in memory and the size of the file is unchanged.
-# The insert at NOTE (2) begins adding additional pages.  Then it hits
-# a constraint error and aborts.  The abort causes sqlite3OsTruncate()
-# to be called to restore the file to the same length as it was after
-# the create table.  But the create table results had not yet been
-# written so the file is actually lengthened by this truncate.  Finally,
-# the rollback at NOTE (3) is called to undo all the changes since the
-# begin.  This rollback should truncate the database again.
-# 
-# This test was added because the second truncate at NOTE (3) was not
-# occurring on early versions of SQLite 3.0.
-#
-ifcapable tempdb {
-  do_test pager3-1.1 {
-    execsql {
-      create table t1(a unique, b);
-      insert into t1 values(1, 'abcdefghijklmnopqrstuvwxyz');
-      insert into t1 values(2, 'abcdefghijklmnopqrstuvwxyz');
-      update t1 set b=b||a||b;
-      update t1 set b=b||a||b;
-      update t1 set b=b||a||b;
-      update t1 set b=b||a||b;
-      update t1 set b=b||a||b;
-      update t1 set b=b||a||b;
-      create temp table t2 as select * from t1;
-      begin;                  ------- NOTE (1)
-      create table t3(x);
-    }
-    catchsql {
-      insert into t1 select 4-a, b from t2;  ----- NOTE (2)
-    }
-    execsql {
-      rollback;  ------- NOTE (3)
-    }
-    db close
-    sqlite3 db test.db
-    set r ok
-    ifcapable {integrityck} {
-      set r [execsql {
-        pragma integrity_check;
-      }]
-    }
-    set r
-  } ok
-}
-
-finish_test