/ Hex Artifact Content
Login

Artifact 059cc5c58d3b5a851343dff8c56cf7286425d03a:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69 70  us of this scrip
01c0: 74 20 69 73 20 70 61 67 65 20 63 61 63 68 65 20  t is page cache 
01d0: 73 75 62 73 79 73 74 65 6d 2e 0a 23 0a 23 20 24  subsystem..#.# $
01e0: 49 64 3a 20 70 61 67 65 72 2e 74 65 73 74 2c 76  Id: pager.test,v
01f0: 20 31 2e 31 37 20 32 30 30 34 2f 30 36 2f 31 39   1.17 2004/06/19
0200: 20 30 30 3a 31 36 3a 33 31 20 64 72 68 20 45 78   00:16:31 drh Ex
0210: 70 20 24 0a 0a 0a 73 65 74 20 74 65 73 74 64 69  p $...set testdi
0220: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0230: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0240: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0250: 63 6c 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 63 6f  cl..if {[info co
0260: 6d 6d 61 6e 64 73 20 70 61 67 65 72 5f 6f 70 65  mmands pager_ope
0270: 6e 5d 21 3d 22 22 7d 20 7b 0a 64 62 20 63 6c 6f  n]!=""} {.db clo
0280: 73 65 0a 0a 23 20 42 61 73 69 63 20 73 61 6e 69  se..# Basic sani
0290: 74 79 20 63 68 65 63 6b 2e 20 20 4f 70 65 6e 20  ty check.  Open 
02a0: 61 6e 64 20 63 6c 6f 73 65 20 61 20 70 61 67 65  and close a page
02b0: 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 61 67  r..#.do_test pag
02c0: 65 72 2d 31 2e 30 20 7b 0a 20 20 63 61 74 63 68  er-1.0 {.  catch
02d0: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66   {file delete -f
02e0: 6f 72 63 65 20 70 74 66 31 2e 64 62 7d 0a 20 20  orce ptf1.db}.  
02f0: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
0300: 74 65 20 2d 66 6f 72 63 65 20 70 74 66 31 2e 64  te -force ptf1.d
0310: 62 2d 6a 6f 75 72 6e 61 6c 7d 0a 20 20 73 65 74  b-journal}.  set
0320: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
0330: 73 65 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f  set ::p1 [pager_
0340: 6f 70 65 6e 20 70 74 66 31 2e 64 62 20 31 30 5d  open ptf1.db 10]
0350: 0a 20 20 7d 20 6d 73 67 5d 0a 7d 20 7b 30 7d 0a  .  } msg].} {0}.
0360: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 31 2e  do_test pager-1.
0370: 31 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61 74  1 {.  pager_stat
0380: 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 30  s $::p1.} {ref 0
0390: 20 70 61 67 65 20 30 20 6d 61 78 20 31 30 20 73   page 0 max 10 s
03a0: 69 7a 65 20 2d 31 20 73 74 61 74 65 20 30 20 65  ize -1 state 0 e
03b0: 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73 20  rr 0 hit 0 miss 
03c0: 30 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  0 ovfl 0}.do_tes
03d0: 74 20 70 61 67 65 72 2d 31 2e 32 20 7b 0a 20 20  t pager-1.2 {.  
03e0: 70 61 67 65 72 5f 70 61 67 65 63 6f 75 6e 74 20  pager_pagecount 
03f0: 24 3a 3a 70 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  $::p1.} {0}.do_t
0400: 65 73 74 20 70 61 67 65 72 2d 31 2e 33 20 7b 0a  est pager-1.3 {.
0410: 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a    pager_stats $:
0420: 3a 70 31 0a 7d 20 7b 72 65 66 20 30 20 70 61 67  :p1.} {ref 0 pag
0430: 65 20 30 20 6d 61 78 20 31 30 20 73 69 7a 65 20  e 0 max 10 size 
0440: 2d 31 20 73 74 61 74 65 20 30 20 65 72 72 20 30  -1 state 0 err 0
0450: 20 68 69 74 20 30 20 6d 69 73 73 20 30 20 6f 76   hit 0 miss 0 ov
0460: 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  fl 0}.do_test pa
0470: 67 65 72 2d 31 2e 34 20 7b 0a 20 20 70 61 67 65  ger-1.4 {.  page
0480: 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 7d 20  r_close $::p1.} 
0490: 7b 7d 0a 0a 23 20 54 72 79 20 74 6f 20 77 72 69  {}..# Try to wri
04a0: 74 65 20 61 20 66 65 77 20 70 61 67 65 73 2e 0a  te a few pages..
04b0: 23 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  #.do_test pager-
04c0: 32 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  2.1 {.  set v [c
04d0: 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20 3a  atch {.    set :
04e0: 3a 70 31 20 5b 70 61 67 65 72 5f 6f 70 65 6e 20  :p1 [pager_open 
04f0: 70 74 66 31 2e 64 62 20 31 30 5d 0a 20 20 7d 20  ptf1.db 10].  } 
0500: 6d 73 67 5d 0a 7d 20 7b 30 7d 0a 23 64 6f 5f 74  msg].} {0}.#do_t
0510: 65 73 74 20 70 61 67 65 72 2d 32 2e 32 20 7b 0a  est pager-2.2 {.
0520: 23 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  #  set v [catch 
0530: 7b 0a 23 20 20 20 20 73 65 74 20 3a 3a 67 31 20  {.#    set ::g1 
0540: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
0550: 30 5d 0a 23 20 20 7d 20 6d 73 67 5d 0a 23 20 20  0].#  } msg].#  
0560: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 23  lappend v $msg.#
0570: 7d 20 7b 31 20 53 51 4c 49 54 45 5f 45 52 52 4f  } {1 SQLITE_ERRO
0580: 52 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  R}.do_test pager
0590: 2d 32 2e 33 2e 31 20 7b 0a 20 20 73 65 74 20 3a  -2.3.1 {.  set :
05a0: 3a 67 78 20 5b 70 61 67 65 5f 6c 6f 6f 6b 75 70  :gx [page_lookup
05b0: 20 24 3a 3a 70 31 20 31 5d 0a 7d 20 7b 7d 0a 64   $::p1 1].} {}.d
05c0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33  o_test pager-2.3
05d0: 2e 32 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  .2 {.  pager_sta
05e0: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
05f0: 30 20 70 61 67 65 20 30 20 6d 61 78 20 31 30 20  0 page 0 max 10 
0600: 73 69 7a 65 20 2d 31 20 73 74 61 74 65 20 30 20  size -1 state 0 
0610: 65 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73  err 0 hit 0 miss
0620: 20 30 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65   0 ovfl 0}.do_te
0630: 73 74 20 70 61 67 65 72 2d 32 2e 33 2e 33 20 7b  st pager-2.3.3 {
0640: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0650: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67 31 20 5b  {.    set ::g1 [
0660: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31  page_get $::p1 1
0670: 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69 66 20  ].  } msg].  if 
0680: 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20  {$v} {lappend v 
0690: 24 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a 7d 20  $msg}.  set v.} 
06a0: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  {0}.do_test page
06b0: 72 2d 32 2e 33 2e 33 20 7b 0a 20 20 70 61 67 65  r-2.3.3 {.  page
06c0: 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20  r_stats $::p1.} 
06d0: 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61  {ref 1 page 1 ma
06e0: 78 20 31 30 20 73 69 7a 65 20 30 20 73 74 61 74  x 10 size 0 stat
06f0: 65 20 31 20 65 72 72 20 30 20 68 69 74 20 30 20  e 1 err 0 hit 0 
0700: 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64  miss 1 ovfl 0}.d
0710: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33  o_test pager-2.3
0720: 2e 34 20 7b 0a 20 20 73 65 74 20 3a 3a 67 78 20  .4 {.  set ::gx 
0730: 5b 70 61 67 65 5f 6c 6f 6f 6b 75 70 20 24 3a 3a  [page_lookup $::
0740: 70 31 20 31 5d 0a 20 20 65 78 70 72 20 7b 24 3a  p1 1].  expr {$:
0750: 3a 67 78 21 3d 22 22 7d 0a 7d 20 7b 31 7d 0a 64  :gx!=""}.} {1}.d
0760: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33  o_test pager-2.3
0770: 2e 35 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  .5 {.  pager_sta
0780: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0790: 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30 20  1 page 1 max 10 
07a0: 73 69 7a 65 20 30 20 73 74 61 74 65 20 31 20 65  size 0 state 1 e
07b0: 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73 20  rr 0 hit 0 miss 
07c0: 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  1 ovfl 0}.do_tes
07d0: 74 20 70 61 67 65 72 2d 32 2e 33 2e 36 20 7b 0a  t pager-2.3.6 {.
07e0: 20 20 65 78 70 72 20 24 3a 3a 67 31 3d 3d 24 3a    expr $::g1==$:
07f0: 3a 67 78 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  :gx.} {1}.do_tes
0800: 74 20 70 61 67 65 72 2d 32 2e 33 2e 37 20 7b 0a  t pager-2.3.7 {.
0810: 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a    page_unref $::
0820: 67 78 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73  gx.  pager_stats
0830: 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 31 20   $::p1.} {ref 1 
0840: 70 61 67 65 20 31 20 6d 61 78 20 31 30 20 73 69  page 1 max 10 si
0850: 7a 65 20 30 20 73 74 61 74 65 20 31 20 65 72 72  ze 0 state 1 err
0860: 20 30 20 68 69 74 20 30 20 6d 69 73 73 20 31 20   0 hit 0 miss 1 
0870: 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20  ovfl 0}.do_test 
0880: 70 61 67 65 72 2d 32 2e 34 20 7b 0a 20 20 70 61  pager-2.4 {.  pa
0890: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a  ger_stats $::p1.
08a0: 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20  } {ref 1 page 1 
08b0: 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73 74  max 10 size 0 st
08c0: 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20  ate 1 err 0 hit 
08d0: 30 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d  0 miss 1 ovfl 0}
08e0: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32  .do_test pager-2
08f0: 2e 35 20 7b 0a 20 20 70 61 67 65 72 5f 70 61 67  .5 {.  pager_pag
0900: 65 63 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d 20 7b  ecount $::p1.} {
0910: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
0920: 2d 32 2e 36 20 7b 0a 20 20 70 61 67 65 72 5f 73  -2.6 {.  pager_s
0930: 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65  tats $::p1.} {re
0940: 66 20 31 20 70 61 67 65 20 31 20 6d 61 78 20 31  f 1 page 1 max 1
0950: 30 20 73 69 7a 65 20 30 20 73 74 61 74 65 20 31  0 size 0 state 1
0960: 20 65 72 72 20 30 20 68 69 74 20 30 20 6d 69 73   err 0 hit 0 mis
0970: 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74  s 1 ovfl 0}.do_t
0980: 65 73 74 20 70 61 67 65 72 2d 32 2e 37 20 7b 0a  est pager-2.7 {.
0990: 20 20 70 61 67 65 5f 6e 75 6d 62 65 72 20 24 3a    page_number $:
09a0: 3a 67 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  :g1.} {1}.do_tes
09b0: 74 20 70 61 67 65 72 2d 32 2e 38 20 7b 0a 20 20  t pager-2.8 {.  
09c0: 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 31 0a  page_read $::g1.
09d0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  } {}.do_test pag
09e0: 65 72 2d 32 2e 39 20 7b 0a 20 20 70 61 67 65 5f  er-2.9 {.  page_
09f0: 75 6e 72 65 66 20 24 3a 3a 67 31 0a 7d 20 7b 7d  unref $::g1.} {}
0a00: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32  .do_test pager-2
0a10: 2e 31 30 20 7b 0a 20 20 70 61 67 65 72 5f 73 74  .10 {.  pager_st
0a20: 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66  ats $::p1.} {ref
0a30: 20 30 20 70 61 67 65 20 30 20 6d 61 78 20 31 30   0 page 0 max 10
0a40: 20 73 69 7a 65 20 2d 31 20 73 74 61 74 65 20 30   size -1 state 0
0a50: 20 65 72 72 20 30 20 68 69 74 20 30 20 6d 69 73   err 0 hit 0 mis
0a60: 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74  s 1 ovfl 0}.do_t
0a70: 65 73 74 20 70 61 67 65 72 2d 32 2e 31 31 20 7b  est pager-2.11 {
0a80: 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b 70 61 67  .  set ::g1 [pag
0a90: 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d 0a 20  e_get $::p1 1]. 
0aa0: 20 65 78 70 72 20 7b 24 3a 3a 67 31 21 3d 30 7d   expr {$::g1!=0}
0ab0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
0ac0: 61 67 65 72 2d 32 2e 31 32 20 7b 0a 20 20 70 61  ager-2.12 {.  pa
0ad0: 67 65 5f 6e 75 6d 62 65 72 20 24 3a 3a 67 31 0a  ge_number $::g1.
0ae0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61  } {1}.do_test pa
0af0: 67 65 72 2d 32 2e 31 33 20 7b 0a 20 20 70 61 67  ger-2.13 {.  pag
0b00: 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d  er_stats $::p1.}
0b10: 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d   {ref 1 page 1 m
0b20: 61 78 20 31 30 20 73 69 7a 65 20 30 20 73 74 61  ax 10 size 0 sta
0b30: 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20 30  te 1 err 0 hit 0
0b40: 20 6d 69 73 73 20 32 20 6f 76 66 6c 20 30 7d 0a   miss 2 ovfl 0}.
0b50: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e  do_test pager-2.
0b60: 31 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  14 {.  set v [ca
0b70: 74 63 68 20 7b 0a 20 20 20 20 70 61 67 65 5f 77  tch {.    page_w
0b80: 72 69 74 65 20 24 3a 3a 67 31 20 22 50 61 67 65  rite $::g1 "Page
0b90: 2d 4f 6e 65 22 0a 20 20 7d 20 6d 73 67 5d 0a 20  -One".  } msg]. 
0ba0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0bb0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0bc0: 20 70 61 67 65 72 2d 32 2e 31 35 20 7b 0a 20 20   pager-2.15 {.  
0bd0: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70  pager_stats $::p
0be0: 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20  1.} {ref 1 page 
0bf0: 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 31 20  1 max 10 size 1 
0c00: 73 74 61 74 65 20 32 20 65 72 72 20 30 20 68 69  state 2 err 0 hi
0c10: 74 20 30 20 6d 69 73 73 20 32 20 6f 76 66 6c 20  t 0 miss 2 ovfl 
0c20: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
0c30: 2d 32 2e 31 36 20 7b 0a 20 20 70 61 67 65 5f 72  -2.16 {.  page_r
0c40: 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 50 61 67  ead $::g1.} {Pag
0c50: 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 70  e-One}.do_test p
0c60: 61 67 65 72 2d 32 2e 31 37 20 7b 0a 20 20 73 65  ager-2.17 {.  se
0c70: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
0c80: 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 3a   pager_commit $:
0c90: 3a 70 31 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c  :p1.  } msg].  l
0ca0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
0cb0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  {0 {}}.do_test p
0cc0: 61 67 65 72 2d 32 2e 32 30 20 7b 0a 20 20 70 61  ager-2.20 {.  pa
0cd0: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a  ger_stats $::p1.
0ce0: 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20  } {ref 1 page 1 
0cf0: 6d 61 78 20 31 30 20 73 69 7a 65 20 2d 31 20 73  max 10 size -1 s
0d00: 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74  tate 1 err 0 hit
0d10: 20 31 20 6d 69 73 73 20 32 20 6f 76 66 6c 20 30   1 miss 2 ovfl 0
0d20: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0d30: 32 2e 31 39 20 7b 0a 20 20 70 61 67 65 72 5f 70  2.19 {.  pager_p
0d40: 61 67 65 63 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d  agecount $::p1.}
0d50: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {1}.do_test pag
0d60: 65 72 2d 32 2e 32 31 20 7b 0a 20 20 70 61 67 65  er-2.21 {.  page
0d70: 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20  r_stats $::p1.} 
0d80: 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61  {ref 1 page 1 ma
0d90: 78 20 31 30 20 73 69 7a 65 20 31 20 73 74 61 74  x 10 size 1 stat
0da0: 65 20 31 20 65 72 72 20 30 20 68 69 74 20 31 20  e 1 err 0 hit 1 
0db0: 6d 69 73 73 20 32 20 6f 76 66 6c 20 30 7d 0a 64  miss 2 ovfl 0}.d
0dc0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 32  o_test pager-2.2
0dd0: 32 20 7b 0a 20 20 70 61 67 65 5f 75 6e 72 65 66  2 {.  page_unref
0de0: 20 24 3a 3a 67 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::g1.} {}.do_t
0df0: 65 73 74 20 70 61 67 65 72 2d 32 2e 32 33 20 7b  est pager-2.23 {
0e00: 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24  .  pager_stats $
0e10: 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 30 20 70 61  ::p1.} {ref 0 pa
0e20: 67 65 20 30 20 6d 61 78 20 31 30 20 73 69 7a 65  ge 0 max 10 size
0e30: 20 2d 31 20 73 74 61 74 65 20 30 20 65 72 72 20   -1 state 0 err 
0e40: 30 20 68 69 74 20 31 20 6d 69 73 73 20 32 20 6f  0 hit 1 miss 2 o
0e50: 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70  vfl 0}.do_test p
0e60: 61 67 65 72 2d 32 2e 32 34 20 7b 0a 20 20 73 65  ager-2.24 {.  se
0e70: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
0e80: 20 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20   page_get $::p1 
0e90: 31 0a 20 20 7d 20 3a 3a 67 31 5d 0a 20 20 69 66  1.  } ::g1].  if
0ea0: 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76   {$v} {lappend v
0eb0: 20 24 3a 3a 67 31 7d 0a 20 20 73 65 74 20 76 0a   $::g1}.  set v.
0ec0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  } {0}.do_test pa
0ed0: 67 65 72 2d 32 2e 32 35 20 7b 0a 20 20 70 61 67  ger-2.25 {.  pag
0ee0: 65 5f 72 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b  e_read $::g1.} {
0ef0: 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73  Page-One}.do_tes
0f00: 74 20 70 61 67 65 72 2d 32 2e 32 36 20 7b 0a 20  t pager-2.26 {. 
0f10: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a   set v [catch {.
0f20: 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24      page_write $
0f30: 3a 3a 67 31 20 7b 70 61 67 65 2d 6f 6e 65 7d 0a  ::g1 {page-one}.
0f40: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65    } msg].  lappe
0f50: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
0f60: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  }}.do_test pager
0f70: 2d 32 2e 32 37 20 7b 0a 20 20 70 61 67 65 5f 72  -2.27 {.  page_r
0f80: 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 70 61 67  ead $::g1.} {pag
0f90: 65 2d 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 70  e-one}.do_test p
0fa0: 61 67 65 72 2d 32 2e 32 38 20 7b 0a 20 20 73 65  ager-2.28 {.  se
0fb0: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
0fc0: 20 70 61 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 20   pager_rollback 
0fd0: 24 3a 3a 70 31 0a 20 20 7d 20 6d 73 67 5d 0a 20  $::p1.  } msg]. 
0fe0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0ff0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1000: 20 70 61 67 65 72 2d 32 2e 32 39 20 7b 0a 20 20   pager-2.29 {.  
1010: 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31  page_unref $::g1
1020: 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b 70 61 67  .  set ::g1 [pag
1030: 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d 0a 20  e_get $::p1 1]. 
1040: 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 31   page_read $::g1
1050: 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f  .} {Page-One}.do
1060: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 39 39  _test pager-2.99
1070: 20 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65   {.  pager_close
1080: 20 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 64 6f 5f   $::p1.} {}..do_
1090: 74 65 73 74 20 70 61 67 65 72 2d 33 2e 31 20 7b  test pager-3.1 {
10a0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
10b0: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 70 31 20 5b  {.    set ::p1 [
10c0: 70 61 67 65 72 5f 6f 70 65 6e 20 70 74 66 31 2e  pager_open ptf1.
10d0: 64 62 20 31 35 5d 0a 20 20 7d 20 6d 73 67 5d 0a  db 15].  } msg].
10e0: 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65    if {$v} {lappe
10f0: 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20 73 65 74  nd v $msg}.  set
1100: 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   v.} {0}.do_test
1110: 20 70 61 67 65 72 2d 33 2e 32 20 7b 0a 20 20 70   pager-3.2 {.  p
1120: 61 67 65 72 5f 70 61 67 65 63 6f 75 6e 74 20 24  ager_pagecount $
1130: 3a 3a 70 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  ::p1.} {1}.do_te
1140: 73 74 20 70 61 67 65 72 2d 33 2e 33 20 7b 0a 20  st pager-3.3 {. 
1150: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a   set v [catch {.
1160: 20 20 20 20 73 65 74 20 3a 3a 67 28 31 29 20 5b      set ::g(1) [
1170: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31  page_get $::p1 1
1180: 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69 66 20  ].  } msg].  if 
1190: 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20  {$v} {lappend v 
11a0: 24 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a 7d 20  $msg}.  set v.} 
11b0: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  {0}.do_test page
11c0: 72 2d 33 2e 34 20 7b 0a 20 20 70 61 67 65 5f 72  r-3.4 {.  page_r
11d0: 65 61 64 20 24 3a 3a 67 28 31 29 0a 7d 20 7b 50  ead $::g(1).} {P
11e0: 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74  age-One}.do_test
11f0: 20 70 61 67 65 72 2d 33 2e 35 20 7b 0a 20 20 66   pager-3.5 {.  f
1200: 6f 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69  or {set i 2} {$i
1210: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=20} {incr i} {
1220: 0a 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67  .    set gx [pag
1230: 65 5f 67 65 74 20 24 3a 3a 70 31 20 24 69 5d 0a  e_get $::p1 $i].
1240: 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24      page_write $
1250: 67 78 20 22 50 61 67 65 2d 24 69 22 0a 20 20 20  gx "Page-$i".   
1260: 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a   page_unref $gx.
1270: 20 20 7d 0a 20 20 70 61 67 65 72 5f 63 6f 6d 6d    }.  pager_comm
1280: 69 74 20 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 66 6f  it $::p1.} {}.fo
1290: 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c  r {set i 2} {$i<
12a0: 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  =20} {incr i} {.
12b0: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d    do_test pager-
12c0: 33 2e 36 2e 5b 65 78 70 72 20 7b 24 69 2d 31 7d  3.6.[expr {$i-1}
12d0: 5d 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 73  ] [subst {.    s
12e0: 65 74 20 67 78 20 5c 5b 70 61 67 65 5f 67 65 74  et gx \[page_get
12f0: 20 24 3a 3a 70 31 20 24 69 5c 5d 0a 20 20 20 20   $::p1 $i\].    
1300: 73 65 74 20 76 20 5c 5b 70 61 67 65 5f 72 65 61  set v \[page_rea
1310: 64 20 5c 24 67 78 5c 5d 0a 20 20 20 20 70 61 67  d \$gx\].    pag
1320: 65 5f 75 6e 72 65 66 20 5c 24 67 78 0a 20 20 20  e_unref \$gx.   
1330: 20 73 65 74 20 76 0a 20 20 7d 5d 20 22 50 61 67   set v.  }] "Pag
1340: 65 2d 24 69 22 0a 7d 0a 66 6f 72 20 7b 73 65 74  e-$i".}.for {set
1350: 20 69 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b   i 1} {$i<=20} {
1360: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 72 65 67 73  incr i} {.  regs
1370: 75 62 20 2d 61 6c 6c 20 43 4e 54 20 7b 0a 20 20  ub -all CNT {.  
1380: 20 20 73 65 74 20 3a 3a 67 31 20 5b 70 61 67 65    set ::g1 [page
1390: 5f 67 65 74 20 24 3a 3a 70 31 20 43 4e 54 5d 0a  _get $::p1 CNT].
13a0: 20 20 20 20 73 65 74 20 3a 3a 67 32 20 5b 70 61      set ::g2 [pa
13b0: 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 43 4e 54  ge_get $::p1 CNT
13c0: 5d 0a 20 20 20 20 73 65 74 20 3a 3a 76 78 20 5b  ].    set ::vx [
13d0: 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 32 5d  page_read $::g2]
13e0: 0a 20 20 20 20 65 78 70 72 20 7b 24 3a 3a 67 31  .    expr {$::g1
13f0: 3d 3d 24 3a 3a 67 32 7d 0a 20 20 7d 20 24 69 20  ==$::g2}.  } $i 
1400: 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65 73 74 20  body;.  do_test 
1410: 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e 31 20 24  pager-3.7.$i.1 $
1420: 62 6f 64 79 20 7b 31 7d 0a 20 20 72 65 67 73 75  body {1}.  regsu
1430: 62 20 2d 61 6c 6c 20 43 4e 54 20 7b 0a 20 20 20  b -all CNT {.   
1440: 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67   page_unref $::g
1450: 32 0a 20 20 20 20 73 65 74 20 76 79 20 5b 70 61  2.    set vy [pa
1460: 67 65 5f 72 65 61 64 20 24 3a 3a 67 31 5d 0a 20  ge_read $::g1]. 
1470: 20 20 20 65 78 70 72 20 7b 24 76 79 3d 3d 24 3a     expr {$vy==$:
1480: 3a 76 78 7d 0a 20 20 7d 20 24 69 20 62 6f 64 79  :vx}.  } $i body
1490: 3b 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65  ;.  do_test page
14a0: 72 2d 33 2e 37 2e 24 69 2e 32 20 24 62 6f 64 79  r-3.7.$i.2 $body
14b0: 20 7b 31 7d 0a 20 20 72 65 67 73 75 62 20 2d 61   {1}.  regsub -a
14c0: 6c 6c 20 43 4e 54 20 7b 0a 20 20 20 20 70 61 67  ll CNT {.    pag
14d0: 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31 0a 20 20  e_unref $::g1.  
14e0: 20 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f 67    set gx [page_g
14f0: 65 74 20 24 3a 3a 70 31 20 43 4e 54 5d 0a 20 20  et $::p1 CNT].  
1500: 20 20 73 65 74 20 76 79 20 5b 70 61 67 65 5f 72    set vy [page_r
1510: 65 61 64 20 24 67 78 5d 0a 20 20 20 20 70 61 67  ead $gx].    pag
1520: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
1530: 65 78 70 72 20 7b 24 76 79 3d 3d 24 3a 3a 76 78  expr {$vy==$::vx
1540: 7d 0a 20 20 7d 20 24 69 20 62 6f 64 79 3b 0a 20  }.  } $i body;. 
1550: 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33   do_test pager-3
1560: 2e 37 2e 24 69 2e 33 20 24 62 6f 64 79 20 7b 31  .7.$i.3 $body {1
1570: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  }.}.do_test page
1580: 72 2d 33 2e 39 39 20 7b 0a 20 20 70 61 67 65 72  r-3.99 {.  pager
1590: 5f 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 7d 20 7b  _close $::p1.} {
15a0: 7d 0a 0a 23 20 74 65 73 74 73 20 6f 66 20 74 68  }..# tests of th
15b0: 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 6d 65 63  e checkpoint mec
15c0: 68 61 6e 69 73 6d 20 61 6e 64 20 61 70 69 0a 23  hanism and api.#
15d0: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34  .do_test pager-4
15e0: 2e 30 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .0 {.  set v [ca
15f0: 74 63 68 20 7b 0a 20 20 20 20 66 69 6c 65 20 64  tch {.    file d
1600: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 70 74 66  elete -force ptf
1610: 31 2e 64 62 0a 20 20 20 20 73 65 74 20 3a 3a 70  1.db.    set ::p
1620: 31 20 5b 70 61 67 65 72 5f 6f 70 65 6e 20 70 74  1 [pager_open pt
1630: 66 31 2e 64 62 20 31 35 5d 0a 20 20 7d 20 6d 73  f1.db 15].  } ms
1640: 67 5d 0a 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61  g].  if {$v} {la
1650: 70 70 65 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20  ppend v $msg}.  
1660: 73 65 74 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  set v.} {0}.do_t
1670: 65 73 74 20 70 61 67 65 72 2d 34 2e 31 20 7b 0a  est pager-4.1 {.
1680: 20 20 73 65 74 20 67 31 20 5b 70 61 67 65 5f 67    set g1 [page_g
1690: 65 74 20 24 3a 3a 70 31 20 31 5d 0a 20 20 70 61  et $::p1 1].  pa
16a0: 67 65 5f 77 72 69 74 65 20 24 67 31 20 22 50 61  ge_write $g1 "Pa
16b0: 67 65 2d 31 20 76 30 22 0a 20 20 66 6f 72 20 7b  ge-1 v0".  for {
16c0: 73 65 74 20 69 20 32 7d 20 7b 24 69 3c 3d 32 30  set i 2} {$i<=20
16d0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
16e0: 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65   set gx [page_ge
16f0: 74 20 24 3a 3a 70 31 20 24 69 5d 0a 20 20 20 20  t $::p1 $i].    
1700: 70 61 67 65 5f 77 72 69 74 65 20 24 67 78 20 22  page_write $gx "
1710: 50 61 67 65 2d 24 69 20 76 30 22 0a 20 20 20 20  Page-$i v0".    
1720: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
1730: 20 7d 0a 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69   }.  pager_commi
1740: 74 20 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 66 6f 72  t $::p1.} {}.for
1750: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
1760: 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  20} {incr i} {. 
1770: 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34   do_test pager-4
1780: 2e 32 2e 24 69 20 7b 0a 20 20 20 20 73 65 74 20  .2.$i {.    set 
1790: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31  gx [page_get $p1
17a0: 20 24 69 5d 0a 20 20 20 20 73 65 74 20 76 20 5b   $i].    set v [
17b0: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
17c0: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67     page_unref $g
17d0: 78 0a 20 20 20 20 73 65 74 20 76 0a 20 20 7d 20  x.    set v.  } 
17e0: 22 50 61 67 65 2d 24 69 20 76 30 22 0a 7d 0a 64  "Page-$i v0".}.d
17f0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 33  o_test pager-4.3
1800: 20 7b 0a 20 20 6c 72 61 6e 67 65 20 5b 70 61 67   {.  lrange [pag
1810: 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 5d 20  er_stats $::p1] 
1820: 30 20 31 0a 7d 20 7b 72 65 66 20 31 7d 0a 64 6f  0 1.} {ref 1}.do
1830: 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 34 20  _test pager-4.4 
1840: 7b 0a 20 20 6c 72 61 6e 67 65 20 5b 70 61 67 65  {.  lrange [page
1850: 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 5d 20 38  r_stats $::p1] 8
1860: 20 39 0a 7d 20 7b 73 74 61 74 65 20 31 7d 0a 0a   9.} {state 1}..
1870: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
1880: 69 3c 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  i<20} {incr i} {
1890: 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72  .  do_test pager
18a0: 2d 34 2e 35 2e 24 69 2e 30 20 7b 0a 20 20 20 20  -4.5.$i.0 {.    
18b0: 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 66  set res {}.    f
18c0: 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a  or {set j 2} {$j
18d0: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b  <=20} {incr j} {
18e0: 0a 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70  .      set gx [p
18f0: 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a  age_get $p1 $j].
1900: 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value 
1910: 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a  [page_read $gx].
1920: 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66        page_unref
1930: 20 24 67 78 0a 20 20 20 20 20 20 73 65 74 20 73   $gx.      set s
1940: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
1950: 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22   v[expr {$i-1}]"
1960: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75  .      if {$valu
1970: 65 21 3d 24 73 68 6f 75 6c 64 62 65 7d 20 7b 0a  e!=$shouldbe} {.
1980: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1990: 72 65 73 20 24 76 61 6c 75 65 20 24 73 68 6f 75  res $value $shou
19a0: 6c 64 62 65 0a 20 20 20 20 20 20 7d 0a 20 20 20  ldbe.      }.   
19b0: 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20   }.    set res. 
19c0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
19d0: 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 31 20 7b  pager-4.5.$i.1 {
19e0: 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20  .    page_write 
19f0: 24 67 31 20 22 50 61 67 65 2d 31 20 76 24 69 22  $g1 "Page-1 v$i"
1a00: 0a 20 20 20 20 6c 72 61 6e 67 65 20 5b 70 61 67  .    lrange [pag
1a10: 65 72 5f 73 74 61 74 73 20 24 70 31 5d 20 38 20  er_stats $p1] 8 
1a20: 39 0a 20 20 7d 20 7b 73 74 61 74 65 20 32 7d 0a  9.  } {state 2}.
1a30: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d    do_test pager-
1a40: 34 2e 35 2e 24 69 2e 32 20 7b 0a 20 20 20 20 66  4.5.$i.2 {.    f
1a50: 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a  or {set j 2} {$j
1a60: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b  <=20} {incr j} {
1a70: 0a 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70  .      set gx [p
1a80: 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a  age_get $p1 $j].
1a90: 20 20 20 20 20 20 70 61 67 65 5f 77 72 69 74 65        page_write
1aa0: 20 24 67 78 20 22 50 61 67 65 2d 24 6a 20 76 24   $gx "Page-$j v$
1ab0: 69 22 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e  i".      page_un
1ac0: 72 65 66 20 24 67 78 0a 20 20 20 20 20 20 69 66  ref $gx.      if
1ad0: 20 7b 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20 20   {$j==$i} {.    
1ae0: 20 20 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 62      pager_stmt_b
1af0: 65 67 69 6e 20 24 70 31 0a 20 20 20 20 20 20 7d  egin $p1.      }
1b00: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
1b10: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e  do_test pager-4.
1b20: 35 2e 24 69 2e 33 20 7b 0a 20 20 20 20 73 65 74  5.$i.3 {.    set
1b30: 20 72 65 73 20 7b 7d 0a 20 20 20 20 66 6f 72 20   res {}.    for 
1b40: 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d 32  {set j 2} {$j<=2
1b50: 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20 20  0} {incr j} {.  
1b60: 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67 65      set gx [page
1b70: 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20 20 20  _get $p1 $j].   
1b80: 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 70 61     set value [pa
1b90: 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20 20 20  ge_read $gx].   
1ba0: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67     page_unref $g
1bb0: 78 0a 20 20 20 20 20 20 73 65 74 20 73 68 6f 75  x.      set shou
1bc0: 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20 76 24  ldbe "Page-$j v$
1bd0: 69 22 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61  i".      if {$va
1be0: 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62 65 7d 20  lue!=$shouldbe} 
1bf0: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
1c00: 64 20 72 65 73 20 24 76 61 6c 75 65 20 24 73 68  d res $value $sh
1c10: 6f 75 6c 64 62 65 0a 20 20 20 20 20 20 7d 0a 20  ouldbe.      }. 
1c20: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73     }.    set res
1c30: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
1c40: 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 34  t pager-4.5.$i.4
1c50: 20 7b 0a 20 20 20 20 70 61 67 65 72 5f 72 6f 6c   {.    pager_rol
1c60: 6c 62 61 63 6b 20 24 70 31 0a 20 20 20 20 73 65  lback $p1.    se
1c70: 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 66 6f 72  t res {}.    for
1c80: 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d   {set j 2} {$j<=
1c90: 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20  20} {incr j} {. 
1ca0: 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67       set gx [pag
1cb0: 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20 20  e_get $p1 $j].  
1cc0: 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 70      set value [p
1cd0: 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20 20  age_read $gx].  
1ce0: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
1cf0: 67 78 0a 20 20 20 20 20 20 73 65 74 20 73 68 6f  gx.      set sho
1d00: 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20 76  uldbe "Page-$j v
1d10: 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22 0a 20  [expr {$i-1}]". 
1d20: 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 21       if {$value!
1d30: 3d 24 73 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20  =$shouldbe} {.  
1d40: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
1d50: 73 20 24 76 61 6c 75 65 20 24 73 68 6f 75 6c 64  s $value $should
1d60: 62 65 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  be.      }.    }
1d70: 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d  .    set res.  }
1d80: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61   {}.  do_test pa
1d90: 67 65 72 2d 34 2e 35 2e 24 69 2e 35 20 7b 0a 20  ger-4.5.$i.5 {. 
1da0: 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24 67     page_write $g
1db0: 31 20 22 50 61 67 65 2d 31 20 76 24 69 22 0a 20  1 "Page-1 v$i". 
1dc0: 20 20 20 6c 72 61 6e 67 65 20 5b 70 61 67 65 72     lrange [pager
1dd0: 5f 73 74 61 74 73 20 24 70 31 5d 20 38 20 39 0a  _stats $p1] 8 9.
1de0: 20 20 7d 20 7b 73 74 61 74 65 20 32 7d 0a 20 20    } {state 2}.  
1df0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e  do_test pager-4.
1e00: 35 2e 24 69 2e 36 20 7b 0a 20 20 20 20 66 6f 72  5.$i.6 {.    for
1e10: 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d   {set j 2} {$j<=
1e20: 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20  20} {incr j} {. 
1e30: 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67       set gx [pag
1e40: 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20 20  e_get $p1 $j].  
1e50: 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24      page_write $
1e60: 67 78 20 22 50 61 67 65 2d 24 6a 20 76 24 69 22  gx "Page-$j v$i"
1e70: 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65  .      page_unre
1e80: 66 20 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b  f $gx.      if {
1e90: 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20 20 20 20  $j==$i} {.      
1ea0: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 62 65 67    pager_stmt_beg
1eb0: 69 6e 20 24 70 31 0a 20 20 20 20 20 20 7d 0a 20  in $p1.      }. 
1ec0: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
1ed0: 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e  _test pager-4.5.
1ee0: 24 69 2e 37 20 7b 0a 20 20 20 20 70 61 67 65 72  $i.7 {.    pager
1ef0: 5f 73 74 6d 74 5f 72 6f 6c 6c 62 61 63 6b 20 24  _stmt_rollback $
1f00: 70 31 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20  p1.    for {set 
1f10: 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69  j 2} {$j<=20} {i
1f20: 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73  ncr j} {.      s
1f30: 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20  et gx [page_get 
1f40: 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65  $p1 $j].      se
1f50: 74 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65  t value [page_re
1f60: 61 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61  ad $gx].      pa
1f70: 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20  ge_unref $gx.   
1f80: 20 20 20 69 66 20 7b 24 6a 3c 3d 24 69 20 7c 7c     if {$j<=$i ||
1f90: 20 24 69 3d 3d 31 7d 20 7b 0a 20 20 20 20 20 20   $i==1} {.      
1fa0: 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22    set shouldbe "
1fb0: 50 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20  Page-$j v$i".   
1fc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
1fd0: 20 20 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65      set shouldbe
1fe0: 20 22 50 61 67 65 2d 24 6a 20 76 5b 65 78 70 72   "Page-$j v[expr
1ff0: 20 7b 24 69 2d 31 7d 5d 22 0a 20 20 20 20 20 20   {$i-1}]".      
2000: 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c  }.      if {$val
2010: 75 65 21 3d 24 73 68 6f 75 6c 64 62 65 7d 20 7b  ue!=$shouldbe} {
2020: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
2030: 20 72 65 73 20 24 76 61 6c 75 65 20 24 73 68 6f   res $value $sho
2040: 75 6c 64 62 65 0a 20 20 20 20 20 20 7d 0a 20 20  uldbe.      }.  
2050: 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a    }.    set res.
2060: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
2070: 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 38 20   pager-4.5.$i.8 
2080: 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  {.    for {set j
2090: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
20a0: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
20b0: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
20c0: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 70 61 67  p1 $j].      pag
20d0: 65 5f 77 72 69 74 65 20 24 67 78 20 22 50 61 67  e_write $gx "Pag
20e0: 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20  e-$j v$i".      
20f0: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
2100: 20 20 20 20 20 69 66 20 7b 24 6a 3d 3d 24 69 7d       if {$j==$i}
2110: 20 7b 0a 20 20 20 20 20 20 20 20 70 61 67 65 72   {.        pager
2120: 5f 73 74 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a  _stmt_begin $p1.
2130: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2140: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
2150: 61 67 65 72 2d 34 2e 35 2e 24 69 2e 39 20 7b 0a  ager-4.5.$i.9 {.
2160: 20 20 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 63      pager_stmt_c
2170: 6f 6d 6d 69 74 20 24 70 31 0a 20 20 20 20 66 6f  ommit $p1.    fo
2180: 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c  r {set j 2} {$j<
2190: 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a  =20} {incr j} {.
21a0: 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61        set gx [pa
21b0: 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20  ge_get $p1 $j]. 
21c0: 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b       set value [
21d0: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
21e0: 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20       page_unref 
21f0: 24 67 78 0a 20 20 20 20 20 20 73 65 74 20 73 68  $gx.      set sh
2200: 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20  ouldbe "Page-$j 
2210: 76 24 69 22 0a 20 20 20 20 20 20 69 66 20 7b 24  v$i".      if {$
2220: 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62 65  value!=$shouldbe
2230: 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70  } {.        lapp
2240: 65 6e 64 20 72 65 73 20 24 76 61 6c 75 65 20 24  end res $value $
2250: 73 68 6f 75 6c 64 62 65 0a 20 20 20 20 20 20 7d  shouldbe.      }
2260: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72  .    }.    set r
2270: 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  es.  } {}.  do_t
2280: 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69  est pager-4.5.$i
2290: 2e 31 30 20 7b 0a 20 20 20 20 70 61 67 65 72 5f  .10 {.    pager_
22a0: 63 6f 6d 6d 69 74 20 24 70 31 0a 20 20 20 20 6c  commit $p1.    l
22b0: 72 61 6e 67 65 20 5b 70 61 67 65 72 5f 73 74 61  range [pager_sta
22c0: 74 73 20 24 70 31 5d 20 38 20 39 0a 20 20 7d 20  ts $p1] 8 9.  } 
22d0: 7b 73 74 61 74 65 20 31 7d 0a 7d 0a 0a 64 6f 5f  {state 1}.}..do_
22e0: 74 65 73 74 20 70 61 67 65 72 2d 34 2e 39 39 20  test pager-4.99 
22f0: 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20  {.  pager_close 
2300: 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 0a 0a 20 20  $::p1.} {}....  
2310: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
2320: 63 65 20 70 74 66 31 2e 64 62 0a 0a 7d 20 3b 23  ce ptf1.db..} ;#
2330: 20 65 6e 64 20 69 66 28 20 6e 6f 74 20 6d 65 6d   end if( not mem
2340: 3a 20 61 6e 64 20 68 61 73 20 70 61 67 65 72 5f  : and has pager_
2350: 6f 70 65 6e 20 63 6f 6d 6d 61 6e 64 20 29 3b 0a  open command );.
2360: 0a 69 66 20 30 20 7b 0a 23 20 54 69 63 6b 65 74  .if 0 {.# Ticket
2370: 20 23 36 31 35 3a 20 61 6e 20 61 73 73 65 72 74   #615: an assert
2380: 69 6f 6e 20 66 61 75 6c 74 20 69 6e 73 69 64 65  ion fault inside
2390: 20 74 68 65 20 70 61 67 65 72 2e 20 20 49 74 20   the pager.  It 
23a0: 69 73 20 61 20 62 65 6e 69 67 6e 0a 23 20 66 61  is a benign.# fa
23b0: 75 6c 74 2c 20 62 75 74 20 77 65 20 6d 69 67 68  ult, but we migh
23c0: 74 20 61 73 20 77 65 6c 6c 20 74 65 73 74 20 66  t as well test f
23d0: 6f 72 20 69 74 2e 0a 23 0a 64 6f 5f 74 65 73 74  or it..#.do_test
23e0: 20 70 61 67 65 72 2d 35 2e 31 20 7b 0a 20 20 73   pager-5.1 {.  s
23f0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2400: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
2410: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
2420: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
2430: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
2440: 68 72 6f 6e 6f 75 73 3d 6f 66 66 3b 0a 20 20 20  hronous=off;.   
2450: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
2460: 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }.}..finish_test
2470: 0a                                               .