/ Hex Artifact Content
Login

Artifact d04982df84334a9ed272ed2943b61985be5377ee:


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 33 35 20 32 30 30 39 2f 30 36 2f 30 35   1.35 2009/06/05
0200: 20 31 37 3a 30 39 3a 31 32 20 64 72 68 20 45 78   17:09:12 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 5f 75 6e 72 65  .5 {.  page_unre
0780: 66 20 24 3a 3a 67 78 0a 20 20 70 61 67 65 72 5f  f $::gx.  pager_
0790: 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72  stats $::p1.} {r
07a0: 65 66 20 31 20 70 61 67 65 20 31 20 6d 61 78 20  ef 1 page 1 max 
07b0: 31 30 20 73 69 7a 65 20 30 20 73 74 61 74 65 20  10 size 0 state 
07c0: 31 20 65 72 72 20 30 20 68 69 74 20 30 20 6d 69  1 err 0 hit 0 mi
07d0: 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f  ss 1 ovfl 0}.do_
07e0: 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33 2e 36  test pager-2.3.6
07f0: 20 7b 0a 20 20 65 78 70 72 20 7b 24 3a 3a 67 31   {.  expr {$::g1
0800: 3d 3d 24 3a 3a 67 78 7d 0a 7d 20 7b 31 7d 0a 64  ==$::gx}.} {1}.d
0810: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33  o_test pager-2.3
0820: 2e 37 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  .7 {.  pager_sta
0830: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0840: 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30 20  1 page 1 max 10 
0850: 73 69 7a 65 20 30 20 73 74 61 74 65 20 31 20 65  size 0 state 1 e
0860: 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73 20  rr 0 hit 0 miss 
0870: 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  1 ovfl 0}.do_tes
0880: 74 20 70 61 67 65 72 2d 32 2e 34 20 7b 0a 20 20  t pager-2.4 {.  
0890: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70  pager_stats $::p
08a0: 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20  1.} {ref 1 page 
08b0: 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20  1 max 10 size 0 
08c0: 73 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69  state 1 err 0 hi
08d0: 74 20 30 20 6d 69 73 73 20 31 20 6f 76 66 6c 20  t 0 miss 1 ovfl 
08e0: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
08f0: 2d 32 2e 35 20 7b 0a 20 20 70 61 67 65 72 5f 70  -2.5 {.  pager_p
0900: 61 67 65 63 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d  agecount $::p1.}
0910: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {0}.do_test pag
0920: 65 72 2d 32 2e 36 20 7b 0a 20 20 70 61 67 65 72  er-2.6 {.  pager
0930: 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b  _stats $::p1.} {
0940: 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61 78  ref 1 page 1 max
0950: 20 31 30 20 73 69 7a 65 20 30 20 73 74 61 74 65   10 size 0 state
0960: 20 31 20 65 72 72 20 30 20 68 69 74 20 30 20 6d   1 err 0 hit 0 m
0970: 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 1 ovfl 0}.do
0980: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 37 20  _test pager-2.7 
0990: 7b 0a 20 20 70 61 67 65 5f 6e 75 6d 62 65 72 20  {.  page_number 
09a0: 24 3a 3a 67 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  $::g1.} {1}.do_t
09b0: 65 73 74 20 70 61 67 65 72 2d 32 2e 38 20 7b 0a  est pager-2.8 {.
09c0: 20 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67    page_read $::g
09d0: 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  1.} {}.do_test p
09e0: 61 67 65 72 2d 32 2e 39 20 7b 0a 20 20 70 61 67  ager-2.9 {.  pag
09f0: 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31 0a 7d 20  e_unref $::g1.} 
0a00: 7b 7d 0a 0a 23 20 55 70 64 61 74 65 20 32 34 2f  {}..# Update 24/
0a10: 30 33 2f 32 30 30 37 3a 20 45 76 65 6e 20 74 68  03/2007: Even th
0a20: 6f 75 67 68 20 74 68 65 20 72 65 66 2d 63 6f 75  ough the ref-cou
0a30: 6e 74 20 68 61 73 20 64 72 6f 70 70 65 64 20 74  nt has dropped t
0a40: 6f 20 7a 65 72 6f 2c 20 74 68 65 0a 23 20 70 61  o zero, the.# pa
0a50: 67 65 72 2d 63 61 63 68 65 20 73 74 69 6c 6c 20  ger-cache still 
0a60: 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 70 61  contains some pa
0a70: 67 65 73 2e 20 50 72 65 76 69 6f 75 73 6c 79 2c  ges. Previously,
0a80: 20 69 74 20 77 61 73 20 61 6c 77 61 79 73 20 74   it was always t
0a90: 72 75 65 0a 23 20 74 68 61 74 20 69 66 20 74 68  rue.# that if th
0aa0: 65 72 65 20 77 65 72 65 20 6e 6f 20 72 65 66 65  ere were no refe
0ab0: 72 65 6e 63 65 73 20 74 6f 20 61 20 70 61 67 65  rences to a page
0ac0: 72 20 69 74 20 77 61 73 20 65 6d 70 74 79 2e 0a  r it was empty..
0ad0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e  do_test pager-2.
0ae0: 31 30 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  10 {.  pager_sta
0af0: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0b00: 30 20 70 61 67 65 20 31 20 6d 61 78 20 31 30 20  0 page 1 max 10 
0b10: 73 69 7a 65 20 2d 31 20 73 74 61 74 65 20 30 20  size -1 state 0 
0b20: 65 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73  err 0 hit 0 miss
0b30: 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65   1 ovfl 0}.do_te
0b40: 73 74 20 70 61 67 65 72 2d 32 2e 31 31 20 7b 0a  st pager-2.11 {.
0b50: 20 20 73 65 74 20 3a 3a 67 31 20 5b 70 61 67 65    set ::g1 [page
0b60: 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d 0a 20 20  _get $::p1 1].  
0b70: 65 78 70 72 20 7b 24 3a 3a 67 31 21 3d 30 7d 0a  expr {$::g1!=0}.
0b80: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61  } {1}.do_test pa
0b90: 67 65 72 2d 32 2e 31 32 20 7b 0a 20 20 70 61 67  ger-2.12 {.  pag
0ba0: 65 5f 6e 75 6d 62 65 72 20 24 3a 3a 67 31 0a 7d  e_number $::g1.}
0bb0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {1}.do_test pag
0bc0: 65 72 2d 32 2e 31 33 20 7b 0a 20 20 70 61 67 65  er-2.13 {.  page
0bd0: 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20  r_stats $::p1.} 
0be0: 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61  {ref 1 page 1 ma
0bf0: 78 20 31 30 20 73 69 7a 65 20 30 20 73 74 61 74  x 10 size 0 stat
0c00: 65 20 31 20 65 72 72 20 30 20 68 69 74 20 31 20  e 1 err 0 hit 1 
0c10: 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64  miss 1 ovfl 0}.d
0c20: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 31  o_test pager-2.1
0c30: 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  4 {.  set v [cat
0c40: 63 68 20 7b 0a 20 20 20 20 70 61 67 65 5f 77 72  ch {.    page_wr
0c50: 69 74 65 20 24 3a 3a 67 31 20 22 50 61 67 65 2d  ite $::g1 "Page-
0c60: 4f 6e 65 22 0a 20 20 7d 20 6d 73 67 5d 0a 20 20  One".  } msg].  
0c70: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0c80: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0c90: 70 61 67 65 72 2d 32 2e 31 35 20 7b 0a 20 20 70  pager-2.15 {.  p
0ca0: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31  ager_stats $::p1
0cb0: 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31  .} {ref 1 page 1
0cc0: 20 6d 61 78 20 31 30 20 73 69 7a 65 20 31 20 73   max 10 size 1 s
0cd0: 74 61 74 65 20 32 20 65 72 72 20 30 20 68 69 74  tate 2 err 0 hit
0ce0: 20 31 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30   1 miss 1 ovfl 0
0cf0: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0d00: 32 2e 31 36 20 7b 0a 20 20 70 61 67 65 5f 72 65  2.16 {.  page_re
0d10: 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 50 61 67 65  ad $::g1.} {Page
0d20: 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 70 61  -One}.do_test pa
0d30: 67 65 72 2d 32 2e 31 37 20 7b 0a 20 20 73 65 74  ger-2.17 {.  set
0d40: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
0d50: 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 3a 3a  pager_commit $::
0d60: 70 31 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61  p1.  } msg].  la
0d70: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0d80: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61  0 {}}.do_test pa
0d90: 67 65 72 2d 32 2e 32 30 20 7b 0a 20 20 70 61 67  ger-2.20 {.  pag
0da0: 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d  er_stats $::p1.}
0db0: 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d   {ref 1 page 1 m
0dc0: 61 78 20 31 30 20 73 69 7a 65 20 2d 31 20 73 74  ax 10 size -1 st
0dd0: 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20  ate 1 err 0 hit 
0de0: 32 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d  2 miss 1 ovfl 0}
0df0: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32  .do_test pager-2
0e00: 2e 31 39 20 7b 0a 20 20 70 61 67 65 72 5f 70 61  .19 {.  pager_pa
0e10: 67 65 63 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d 20  gecount $::p1.} 
0e20: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  {1}.do_test page
0e30: 72 2d 32 2e 32 31 20 7b 0a 20 20 70 61 67 65 72  r-2.21 {.  pager
0e40: 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b  _stats $::p1.} {
0e50: 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61 78  ref 1 page 1 max
0e60: 20 31 30 20 73 69 7a 65 20 31 20 73 74 61 74 65   10 size 1 state
0e70: 20 31 20 65 72 72 20 30 20 68 69 74 20 32 20 6d   1 err 0 hit 2 m
0e80: 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 1 ovfl 0}.do
0e90: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 32 32  _test pager-2.22
0ea0: 20 7b 0a 20 20 70 61 67 65 5f 75 6e 72 65 66 20   {.  page_unref 
0eb0: 24 3a 3a 67 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  $::g1.} {}.do_te
0ec0: 73 74 20 70 61 67 65 72 2d 32 2e 32 33 20 7b 0a  st pager-2.23 {.
0ed0: 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a    pager_stats $:
0ee0: 3a 70 31 0a 7d 20 7b 72 65 66 20 30 20 70 61 67  :p1.} {ref 0 pag
0ef0: 65 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20  e 1 max 10 size 
0f00: 2d 31 20 73 74 61 74 65 20 30 20 65 72 72 20 30  -1 state 0 err 0
0f10: 20 68 69 74 20 32 20 6d 69 73 73 20 31 20 6f 76   hit 2 miss 1 ov
0f20: 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  fl 0}.do_test pa
0f30: 67 65 72 2d 32 2e 32 34 20 7b 0a 20 20 73 65 74  ger-2.24 {.  set
0f40: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
0f50: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31  page_get $::p1 1
0f60: 0a 20 20 7d 20 3a 3a 67 31 5d 0a 20 20 69 66 20  .  } ::g1].  if 
0f70: 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20  {$v} {lappend v 
0f80: 24 3a 3a 67 31 7d 0a 20 20 73 65 74 20 76 0a 7d  $::g1}.  set v.}
0f90: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {0}.do_test pag
0fa0: 65 72 2d 32 2e 32 35 20 7b 0a 20 20 70 61 67 65  er-2.25 {.  page
0fb0: 5f 72 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 50  _read $::g1.} {P
0fc0: 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74  age-One}.do_test
0fd0: 20 70 61 67 65 72 2d 32 2e 32 36 20 7b 0a 20 20   pager-2.26 {.  
0fe0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
0ff0: 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24 3a     page_write $:
1000: 3a 67 31 20 7b 70 61 67 65 2d 6f 6e 65 7d 0a 20  :g1 {page-one}. 
1010: 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e   } msg].  lappen
1020: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
1030: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
1040: 32 2e 32 37 20 7b 0a 20 20 70 61 67 65 5f 72 65  2.27 {.  page_re
1050: 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 70 61 67 65  ad $::g1.} {page
1060: 2d 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 70 61  -one}.do_test pa
1070: 67 65 72 2d 32 2e 32 38 20 7b 0a 20 20 73 65 74  ger-2.28 {.  set
1080: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
1090: 70 61 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 20 24  pager_rollback $
10a0: 3a 3a 70 31 0a 20 20 7d 20 6d 73 67 5d 0a 20 20  ::p1.  } msg].  
10b0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
10c0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
10d0: 70 61 67 65 72 2d 32 2e 32 39 20 7b 0a 20 20 70  pager-2.29 {.  p
10e0: 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31 0a  age_unref $::g1.
10f0: 20 20 73 65 74 20 3a 3a 67 31 20 5b 70 61 67 65    set ::g1 [page
1100: 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d 0a 20 20  _get $::p1 1].  
1110: 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 31 0a  page_read $::g1.
1120: 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f  } {Page-One}.do_
1130: 74 65 73 74 20 70 61 67 65 72 2d 32 2e 39 39 20  test pager-2.99 
1140: 7b 0a 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24  {.  page_unref $
1150: 3a 3a 67 31 0a 20 20 70 61 67 65 72 5f 63 6c 6f  ::g1.  pager_clo
1160: 73 65 20 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 64  se $::p1.} {}..d
1170: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 31  o_test pager-3.1
1180: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
1190: 68 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 70 31  h {.    set ::p1
11a0: 20 5b 70 61 67 65 72 5f 6f 70 65 6e 20 70 74 66   [pager_open ptf
11b0: 31 2e 64 62 20 31 35 5d 0a 20 20 7d 20 6d 73 67  1.db 15].  } msg
11c0: 5d 0a 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61 70  ].  if {$v} {lap
11d0: 70 65 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20 73  pend v $msg}.  s
11e0: 65 74 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  et v.} {0}.do_te
11f0: 73 74 20 70 61 67 65 72 2d 33 2e 32 20 7b 0a 20  st pager-3.2 {. 
1200: 20 70 61 67 65 72 5f 70 61 67 65 63 6f 75 6e 74   pager_pagecount
1210: 20 24 3a 3a 70 31 0a 7d 20 7b 31 7d 0a 64 6f 5f   $::p1.} {1}.do_
1220: 74 65 73 74 20 70 61 67 65 72 2d 33 2e 33 20 7b  test pager-3.3 {
1230: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
1240: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67 28 31 29  {.    set ::g(1)
1250: 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31   [page_get $::p1
1260: 20 31 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69   1].  } msg].  i
1270: 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20  f {$v} {lappend 
1280: 76 20 24 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a  v $msg}.  set v.
1290: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  } {0}.do_test pa
12a0: 67 65 72 2d 33 2e 34 20 7b 0a 20 20 70 61 67 65  ger-3.4 {.  page
12b0: 5f 72 65 61 64 20 24 3a 3a 67 28 31 29 0a 7d 20  _read $::g(1).} 
12c0: 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65  {Page-One}.do_te
12d0: 73 74 20 70 61 67 65 72 2d 33 2e 35 20 7b 0a 20  st pager-3.5 {. 
12e0: 20 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20 7b   for {set i 2} {
12f0: 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d  $i<=20} {incr i}
1300: 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5b 70   {.    set gx [p
1310: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24 69  age_get $::p1 $i
1320: 5d 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74 65  ].    page_write
1330: 20 24 67 78 20 22 50 61 67 65 2d 24 69 22 0a 20   $gx "Page-$i". 
1340: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67     page_unref $g
1350: 78 0a 20 20 7d 0a 20 20 70 61 67 65 72 5f 63 6f  x.  }.  pager_co
1360: 6d 6d 69 74 20 24 3a 3a 70 31 0a 20 20 70 61 67  mmit $::p1.  pag
1370: 65 5f 75 6e 72 65 66 20 24 3a 3a 67 28 31 29 0a  e_unref $::g(1).
1380: 7d 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20  } {}.for {set i 
1390: 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63  2} {$i<=20} {inc
13a0: 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  r i} {.  do_test
13b0: 20 70 61 67 65 72 2d 33 2e 36 2e 5b 65 78 70 72   pager-3.6.[expr
13c0: 20 7b 24 69 2d 31 7d 5d 20 5b 73 75 62 73 74 20   {$i-1}] [subst 
13d0: 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5c 5b 70  {.    set gx \[p
13e0: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24 69  age_get $::p1 $i
13f0: 5c 5d 0a 20 20 20 20 73 65 74 20 76 20 5c 5b 70  \].    set v \[p
1400: 61 67 65 5f 72 65 61 64 20 5c 24 67 78 5c 5d 0a  age_read \$gx\].
1410: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 5c      page_unref \
1420: 24 67 78 0a 20 20 20 20 73 65 74 20 76 0a 20 20  $gx.    set v.  
1430: 7d 5d 20 22 50 61 67 65 2d 24 69 22 0a 7d 0a 66  }] "Page-$i".}.f
1440: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1450: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=20} {incr i} {
1460: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 43  .  regsub -all C
1470: 4e 54 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67  NT {.    set ::g
1480: 31 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70  1 [page_get $::p
1490: 31 20 43 4e 54 5d 0a 20 20 20 20 73 65 74 20 3a  1 CNT].    set :
14a0: 3a 67 32 20 5b 70 61 67 65 5f 67 65 74 20 24 3a  :g2 [page_get $:
14b0: 3a 70 31 20 43 4e 54 5d 0a 20 20 20 20 73 65 74  :p1 CNT].    set
14c0: 20 3a 3a 76 78 20 5b 70 61 67 65 5f 72 65 61 64   ::vx [page_read
14d0: 20 24 3a 3a 67 32 5d 0a 20 20 20 20 65 78 70 72   $::g2].    expr
14e0: 20 7b 24 3a 3a 67 31 3d 3d 24 3a 3a 67 32 7d 0a   {$::g1==$::g2}.
14f0: 20 20 7d 20 24 69 20 62 6f 64 79 3b 0a 20 20 64    } $i body;.  d
1500: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 37  o_test pager-3.7
1510: 2e 24 69 2e 31 20 24 62 6f 64 79 20 7b 31 7d 0a  .$i.1 $body {1}.
1520: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 43 4e    regsub -all CN
1530: 54 20 7b 0a 20 20 20 20 70 61 67 65 5f 75 6e 72  T {.    page_unr
1540: 65 66 20 24 3a 3a 67 32 0a 20 20 20 20 73 65 74  ef $::g2.    set
1550: 20 76 79 20 5b 70 61 67 65 5f 72 65 61 64 20 24   vy [page_read $
1560: 3a 3a 67 31 5d 0a 20 20 20 20 65 78 70 72 20 7b  ::g1].    expr {
1570: 24 76 79 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20  $vy==$::vx}.  } 
1580: 24 69 20 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65  $i body;.  do_te
1590: 73 74 20 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e  st pager-3.7.$i.
15a0: 32 20 24 62 6f 64 79 20 7b 31 7d 0a 20 20 72 65  2 $body {1}.  re
15b0: 67 73 75 62 20 2d 61 6c 6c 20 43 4e 54 20 7b 0a  gsub -all CNT {.
15c0: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
15d0: 3a 3a 67 31 0a 20 20 20 20 73 65 74 20 67 78 20  ::g1.    set gx 
15e0: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
15f0: 43 4e 54 5d 0a 20 20 20 20 73 65 74 20 76 79 20  CNT].    set vy 
1600: 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a  [page_read $gx].
1610: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
1620: 67 78 0a 20 20 20 20 65 78 70 72 20 7b 24 76 79  gx.    expr {$vy
1630: 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20 24 69 20  ==$::vx}.  } $i 
1640: 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65 73 74 20  body;.  do_test 
1650: 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e 33 20 24  pager-3.7.$i.3 $
1660: 62 6f 64 79 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65  body {1}.}.do_te
1670: 73 74 20 70 61 67 65 72 2d 33 2e 39 39 20 7b 0a  st pager-3.99 {.
1680: 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20 24 3a    pager_close $:
1690: 3a 70 31 0a 7d 20 7b 7d 0a 0a 23 20 74 65 73 74  :p1.} {}..# test
16a0: 73 20 6f 66 20 74 68 65 20 63 68 65 63 6b 70 6f  s of the checkpo
16b0: 69 6e 74 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e  int mechanism an
16c0: 64 20 61 70 69 0a 23 0a 64 6f 5f 74 65 73 74 20  d api.#.do_test 
16d0: 70 61 67 65 72 2d 34 2e 30 20 7b 0a 20 20 73 65  pager-4.0 {.  se
16e0: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
16f0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
1700: 72 63 65 20 70 74 66 31 2e 64 62 0a 20 20 20 20  rce ptf1.db.    
1710: 73 65 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f  set ::p1 [pager_
1720: 6f 70 65 6e 20 70 74 66 31 2e 64 62 20 31 35 5d  open ptf1.db 15]
1730: 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69 66 20 7b  .  } msg].  if {
1740: 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20 24  $v} {lappend v $
1750: 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a 7d 20 7b  msg}.  set v.} {
1760: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
1770: 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20 67 31 20  -4.1 {.  set g1 
1780: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
1790: 31 5d 0a 20 20 70 61 67 65 5f 77 72 69 74 65 20  1].  page_write 
17a0: 24 67 31 20 22 50 61 67 65 2d 31 20 76 30 22 0a  $g1 "Page-1 v0".
17b0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20    for {set i 2} 
17c0: 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69  {$i<=20} {incr i
17d0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5b  } {.    set gx [
17e0: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24  page_get $::p1 $
17f0: 69 5d 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74  i].    page_writ
1800: 65 20 24 67 78 20 22 50 61 67 65 2d 24 69 20 76  e $gx "Page-$i v
1810: 30 22 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65  0".    page_unre
1820: 66 20 24 67 78 0a 20 20 7d 0a 20 20 70 61 67 65  f $gx.  }.  page
1830: 72 5f 63 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a 7d  r_commit $::p1.}
1840: 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20 31   {}.for {set i 1
1850: 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$i<=20} {incr
1860: 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20   i} {.  do_test 
1870: 70 61 67 65 72 2d 34 2e 32 2e 24 69 20 7b 0a 20  pager-4.2.$i {. 
1880: 20 20 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f     set gx [page_
1890: 67 65 74 20 24 70 31 20 24 69 5d 0a 20 20 20 20  get $p1 $i].    
18a0: 73 65 74 20 76 20 5b 70 61 67 65 5f 72 65 61 64  set v [page_read
18b0: 20 24 67 78 5d 0a 20 20 20 20 70 61 67 65 5f 75   $gx].    page_u
18c0: 6e 72 65 66 20 24 67 78 0a 20 20 20 20 73 65 74  nref $gx.    set
18d0: 20 76 0a 20 20 7d 20 22 50 61 67 65 2d 24 69 20   v.  } "Page-$i 
18e0: 76 30 22 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 61  v0".}.do_test pa
18f0: 67 65 72 2d 34 2e 33 20 7b 0a 20 20 6c 72 61 6e  ger-4.3 {.  lran
1900: 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20  ge [pager_stats 
1910: 24 3a 3a 70 31 5d 20 30 20 31 0a 7d 20 7b 72 65  $::p1] 0 1.} {re
1920: 66 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  f 1}.do_test pag
1930: 65 72 2d 34 2e 34 20 7b 0a 20 20 6c 72 61 6e 67  er-4.4 {.  lrang
1940: 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24  e [pager_stats $
1950: 3a 3a 70 31 5d 20 38 20 39 0a 7d 20 7b 73 74 61  ::p1] 8 9.} {sta
1960: 74 65 20 31 7d 0a 0a 66 6f 72 20 7b 73 65 74 20  te 1}..for {set 
1970: 69 20 31 7d 20 7b 24 69 3c 32 30 7d 20 7b 69 6e  i 1} {$i<20} {in
1980: 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  cr i} {.  do_tes
1990: 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 30  t pager-4.5.$i.0
19a0: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b   {.    set res {
19b0: 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  }.    for {set j
19c0: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
19d0: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
19e0: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
19f0: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74  p1 $j].      set
1a00: 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61   value [page_rea
1a10: 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67  d $gx].      pag
1a20: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
1a30: 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22    set shouldbe "
1a40: 50 61 67 65 2d 24 6a 20 76 5b 65 78 70 72 20 7b  Page-$j v[expr {
1a50: 24 69 2d 31 7d 5d 22 0a 20 20 20 20 20 20 69 66  $i-1}]".      if
1a60: 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c   {$value!=$shoul
1a70: 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c  dbe} {.        l
1a80: 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c 75  append res $valu
1a90: 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20 20  e $shouldbe.    
1aa0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65    }.    }.    se
1ab0: 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64  t res.  } {}.  d
1ac0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35  o_test pager-4.5
1ad0: 2e 24 69 2e 31 20 7b 0a 20 20 20 20 70 61 67 65  .$i.1 {.    page
1ae0: 5f 77 72 69 74 65 20 24 67 31 20 22 50 61 67 65  _write $g1 "Page
1af0: 2d 31 20 76 24 69 22 0a 20 20 20 20 6c 72 61 6e  -1 v$i".    lran
1b00: 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20  ge [pager_stats 
1b10: 24 70 31 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74  $p1] 8 9.  } {st
1b20: 61 74 65 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74  ate 2}.  do_test
1b30: 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 32 20   pager-4.5.$i.2 
1b40: 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  {.    for {set j
1b50: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
1b60: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
1b70: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
1b80: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 70 61 67  p1 $j].      pag
1b90: 65 5f 77 72 69 74 65 20 24 67 78 20 22 50 61 67  e_write $gx "Pag
1ba0: 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20  e-$j v$i".      
1bb0: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
1bc0: 20 20 20 20 20 69 66 20 7b 24 6a 3d 3d 24 69 7d       if {$j==$i}
1bd0: 20 7b 0a 20 20 20 20 20 20 20 20 70 61 67 65 72   {.        pager
1be0: 5f 73 74 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a  _stmt_begin $p1.
1bf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1c00: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
1c10: 61 67 65 72 2d 34 2e 35 2e 24 69 2e 33 20 7b 0a  ager-4.5.$i.3 {.
1c20: 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20      set res {}. 
1c30: 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d     for {set j 2}
1c40: 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20   {$j<=20} {incr 
1c50: 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67  j} {.      set g
1c60: 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20  x [page_get $p1 
1c70: 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20 76 61  $j].      set va
1c80: 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64 20 24  lue [page_read $
1c90: 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 75  gx].      page_u
1ca0: 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20 73  nref $gx.      s
1cb0: 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50 61 67  et shouldbe "Pag
1cc0: 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20  e-$j v$i".      
1cd0: 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f  if {$value!=$sho
1ce0: 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20  uldbe} {.       
1cf0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61   lappend res $va
1d00: 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20  lue $shouldbe.  
1d10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1d20: 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20  set res.  } {}. 
1d30: 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34   do_test pager-4
1d40: 2e 35 2e 24 69 2e 34 20 7b 0a 20 20 20 20 70 61  .5.$i.4 {.    pa
1d50: 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 20 24 70 31  ger_rollback $p1
1d60: 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a  .    set res {}.
1d70: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32      for {set j 2
1d80: 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$j<=20} {incr
1d90: 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20   j} {.      set 
1da0: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31  gx [page_get $p1
1db0: 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20 76   $j].      set v
1dc0: 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64 20  alue [page_read 
1dd0: 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65 5f  $gx].      page_
1de0: 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20  unref $gx.      
1df0: 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50 61  set shouldbe "Pa
1e00: 67 65 2d 24 6a 20 76 5b 65 78 70 72 20 7b 24 69  ge-$j v[expr {$i
1e10: 2d 31 7d 5d 22 0a 20 20 20 20 20 20 69 66 20 7b  -1}]".      if {
1e20: 24 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62  $value!=$shouldb
1e30: 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  e} {.        lap
1e40: 70 65 6e 64 20 72 65 73 20 24 76 61 6c 75 65 20  pend res $value 
1e50: 24 73 68 6f 75 6c 64 62 65 0a 20 20 20 20 20 20  $shouldbe.      
1e60: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  }.    }.    set 
1e70: 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  res.  } {}.  do_
1e80: 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e 24  test pager-4.5.$
1e90: 69 2e 35 20 7b 0a 20 20 20 20 70 61 67 65 5f 77  i.5 {.    page_w
1ea0: 72 69 74 65 20 24 67 31 20 22 50 61 67 65 2d 31  rite $g1 "Page-1
1eb0: 20 76 24 69 22 0a 20 20 20 20 6c 72 61 6e 67 65   v$i".    lrange
1ec0: 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24 70   [pager_stats $p
1ed0: 31 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74 61 74  1] 8 9.  } {stat
1ee0: 65 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  e 2}.  do_test p
1ef0: 61 67 65 72 2d 34 2e 35 2e 24 69 2e 36 20 7b 0a  ager-4.5.$i.6 {.
1f00: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32      for {set j 2
1f10: 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$j<=20} {incr
1f20: 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20   j} {.      set 
1f30: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31  gx [page_get $p1
1f40: 20 24 6a 5d 0a 20 20 20 20 20 20 70 61 67 65 5f   $j].      page_
1f50: 77 72 69 74 65 20 24 67 78 20 22 50 61 67 65 2d  write $gx "Page-
1f60: 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20 70 61  $j v$i".      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 3d 3d 24 69 7d 20 7b     if {$j==$i} {
1f90: 0a 20 20 20 20 20 20 20 20 70 61 67 65 72 5f 73  .        pager_s
1fa0: 74 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a 20 20  tmt_begin $p1.  
1fb0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
1fc0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67  {}.  do_test pag
1fd0: 65 72 2d 34 2e 35 2e 24 69 2e 37 20 7b 0a 20 20  er-4.5.$i.7 {.  
1fe0: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 72 6f 6c    pager_stmt_rol
1ff0: 6c 62 61 63 6b 20 24 70 31 0a 20 20 20 20 66 6f  lback $p1.    fo
2000: 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c  r {set j 2} {$j<
2010: 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a  =20} {incr j} {.
2020: 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61        set gx [pa
2030: 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20  ge_get $p1 $j]. 
2040: 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b       set value [
2050: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
2060: 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20       page_unref 
2070: 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b 24 6a  $gx.      if {$j
2080: 3c 3d 24 69 20 7c 7c 20 24 69 3d 3d 31 7d 20 7b  <=$i || $i==1} {
2090: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 68 6f  .        set sho
20a0: 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20 76  uldbe "Page-$j v
20b0: 24 69 22 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  $i".      } else
20c0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   {.        set s
20d0: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
20e0: 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22   v[expr {$i-1}]"
20f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2100: 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75  f {$value!=$shou
2110: 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20  ldbe} {.        
2120: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c  lappend res $val
2130: 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20  ue $shouldbe.   
2140: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
2150: 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20  et res.  } {}.  
2160: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e  do_test pager-4.
2170: 35 2e 24 69 2e 38 20 7b 0a 20 20 20 20 66 6f 72  5.$i.8 {.    for
2180: 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d   {set j 2} {$j<=
2190: 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20  20} {incr j} {. 
21a0: 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67       set gx [pag
21b0: 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20 20  e_get $p1 $j].  
21c0: 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24      page_write $
21d0: 67 78 20 22 50 61 67 65 2d 24 6a 20 76 24 69 22  gx "Page-$j v$i"
21e0: 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65  .      page_unre
21f0: 66 20 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b  f $gx.      if {
2200: 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20 20 20 20  $j==$i} {.      
2210: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 62 65 67    pager_stmt_beg
2220: 69 6e 20 24 70 31 0a 20 20 20 20 20 20 7d 0a 20  in $p1.      }. 
2230: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
2240: 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e  _test pager-4.5.
2250: 24 69 2e 39 20 7b 0a 20 20 20 20 70 61 67 65 72  $i.9 {.    pager
2260: 5f 73 74 6d 74 5f 63 6f 6d 6d 69 74 20 24 70 31  _stmt_commit $p1
2270: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20  .    for {set j 
2280: 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63  2} {$j<=20} {inc
2290: 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  r j} {.      set
22a0: 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70   gx [page_get $p
22b0: 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20  1 $j].      set 
22c0: 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64  value [page_read
22d0: 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65   $gx].      page
22e0: 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20  _unref $gx.     
22f0: 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50   set shouldbe "P
2300: 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20  age-$j v$i".    
2310: 20 20 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73    if {$value!=$s
2320: 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20  houldbe} {.     
2330: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
2340: 76 61 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a  value $shouldbe.
2350: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2360: 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d    set res.  } {}
2370: 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72  .  do_test pager
2380: 2d 34 2e 35 2e 24 69 2e 31 30 20 7b 0a 20 20 20  -4.5.$i.10 {.   
2390: 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 70   pager_commit $p
23a0: 31 0a 20 20 20 20 6c 72 61 6e 67 65 20 5b 70 61  1.    lrange [pa
23b0: 67 65 72 5f 73 74 61 74 73 20 24 70 31 5d 20 38  ger_stats $p1] 8
23c0: 20 39 0a 20 20 7d 20 7b 73 74 61 74 65 20 31 7d   9.  } {state 1}
23d0: 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  .}..# Test that 
23e0: 6e 6f 74 68 69 6e 67 20 62 61 64 20 68 61 70 70  nothing bad happ
23f0: 65 6e 73 20 77 68 65 6e 20 73 71 6c 69 74 65 33  ens when sqlite3
2400: 70 61 67 65 72 5f 73 65 74 5f 63 61 63 68 65 73  pager_set_caches
2410: 69 7a 65 28 29 20 69 73 0a 23 20 63 61 6c 6c 65  ize() is.# calle
2420: 64 20 77 69 74 68 20 61 20 6e 65 67 61 74 69 76  d with a negativ
2430: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 64 6f 5f 74  e argument..do_t
2440: 65 73 74 20 70 61 67 65 72 2d 34 2e 36 2e 31 20  est pager-4.6.1 
2450: 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20  {.  pager_close 
2460: 5b 70 61 67 65 72 5f 6f 70 65 6e 20 70 74 66 32  [pager_open ptf2
2470: 2e 64 62 20 2d 31 35 5d 0a 7d 20 7b 7d 0a 0a 23  .db -15].} {}..#
2480: 20 54 65 73 74 20 74 72 75 6e 63 61 74 65 20 6f   Test truncate o
2490: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  n an in-memory d
24a0: 61 74 61 62 61 73 65 20 69 73 20 4f 6b 2e 0a 69  atabase is Ok..i
24b0: 66 63 61 70 61 62 6c 65 20 6d 65 6d 6f 72 79 64  fcapable memoryd
24c0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 61  b {.  do_test pa
24d0: 67 65 72 2d 34 2e 36 2e 32 20 7b 0a 20 20 20 20  ger-4.6.2 {.    
24e0: 73 65 74 20 3a 3a 70 32 20 5b 70 61 67 65 72 5f  set ::p2 [pager_
24f0: 6f 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a 20 31 30  open :memory: 10
2500: 5d 0a 20 20 20 20 70 61 67 65 72 5f 74 72 75 6e  ].    pager_trun
2510: 63 61 74 65 20 24 3a 3a 70 32 20 30 0a 20 20 7d  cate $::p2 0.  }
2520: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61   {}.  do_test pa
2530: 67 65 72 2d 34 2e 36 2e 33 20 7b 0a 20 20 20 20  ger-4.6.3 {.    
2540: 73 65 74 20 70 61 67 65 31 20 5b 70 61 67 65 5f  set page1 [page_
2550: 67 65 74 20 24 3a 3a 70 32 20 31 5d 0a 20 20 20  get $::p2 1].   
2560: 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
2570: 24 69 3c 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  $i<5} {incr i} {
2580: 0a 20 20 20 20 20 20 73 65 74 20 70 20 5b 70 61  .      set p [pa
2590: 67 65 5f 67 65 74 20 24 3a 3a 70 32 20 24 69 5d  ge_get $::p2 $i]
25a0: 0a 20 20 20 20 20 20 70 61 67 65 5f 77 72 69 74  .      page_writ
25b0: 65 20 24 70 20 22 50 61 67 65 20 24 69 22 0a 20  e $p "Page $i". 
25c0: 20 20 20 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69       pager_commi
25d0: 74 20 24 3a 3a 70 32 0a 20 20 20 20 20 20 70 61  t $::p2.      pa
25e0: 67 65 5f 75 6e 72 65 66 20 24 70 0a 20 20 20 20  ge_unref $p.    
25f0: 7d 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66  }.    page_unref
2600: 20 24 70 61 67 65 31 0a 20 20 20 20 70 61 67 65   $page1.    page
2610: 72 5f 74 72 75 6e 63 61 74 65 20 24 3a 3a 70 32  r_truncate $::p2
2620: 20 33 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   3.  } {}.  do_t
2630: 65 73 74 20 70 61 67 65 72 2d 34 2e 36 2e 34 20  est pager-4.6.4 
2640: 7b 0a 20 20 20 20 70 61 67 65 72 5f 63 6c 6f 73  {.    pager_clos
2650: 65 20 24 3a 3a 70 32 0a 20 20 7d 20 7b 7d 0a 7d  e $::p2.  } {}.}
2660: 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  ..do_test pager-
2670: 34 2e 39 39 20 7b 0a 20 20 70 61 67 65 5f 75 6e  4.99 {.  page_un
2680: 72 65 66 20 24 3a 3a 67 31 0a 20 20 70 61 67 65  ref $::g1.  page
2690: 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 7d 20  r_close $::p1.} 
26a0: 7b 7d 0a 0a 0a 0a 20 20 66 69 6c 65 20 64 65 6c  {}....  file del
26b0: 65 74 65 20 2d 66 6f 72 63 65 20 70 74 66 31 2e  ete -force ptf1.
26c0: 64 62 0a 0a 7d 20 3b 23 20 65 6e 64 20 69 66 28  db..} ;# end if(
26d0: 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64 20 68 61   not mem: and ha
26e0: 73 20 70 61 67 65 72 5f 6f 70 65 6e 20 63 6f 6d  s pager_open com
26f0: 6d 61 6e 64 20 29 3b 0a 0a 69 66 20 30 20 7b 0a  mand );..if 0 {.
2700: 23 20 54 69 63 6b 65 74 20 23 36 31 35 3a 20 61  # Ticket #615: a
2710: 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
2720: 74 20 69 6e 73 69 64 65 20 74 68 65 20 70 61 67  t inside the pag
2730: 65 72 2e 20 20 49 74 20 69 73 20 61 20 62 65 6e  er.  It is a ben
2740: 69 67 6e 0a 23 20 66 61 75 6c 74 2c 20 62 75 74  ign.# fault, but
2750: 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
2760: 6c 20 74 65 73 74 20 66 6f 72 20 69 74 2e 0a 23  l test for it..#
2770: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 35  .do_test pager-5
2780: 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .1 {.  sqlite3 d
2790: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
27a0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
27b0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
27c0: 45 20 74 31 28 78 29 3b 0a 20 20 20 20 50 52 41  E t1(x);.    PRA
27d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
27e0: 6f 66 66 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  off;.    COMMIT;
27f0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 0a 0a 23 20 54  .  }.} {}.}..# T
2800: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73  he following tes
2810: 74 73 20 63 6f 76 65 72 20 72 6f 6c 6c 69 6e 67  ts cover rolling
2820: 20 62 61 63 6b 20 68 6f 74 20 6a 6f 75 72 6e 61   back hot journa
2830: 6c 20 66 69 6c 65 73 2e 20 0a 23 20 54 68 65 79  l files. .# They
2840: 20 63 61 6e 27 74 20 62 65 20 72 75 6e 20 6f 6e   can't be run on
2850: 20 77 69 6e 64 6f 77 73 20 62 65 63 61 75 73 65   windows because
2860: 20 74 68 65 20 77 69 6e 64 6f 77 73 20 76 65 72   the windows ver
2870: 73 69 6f 6e 20 6f 66 20 0a 23 20 53 51 4c 69 74  sion of .# SQLit
2880: 65 20 68 6f 6c 64 73 20 61 20 6d 61 6e 64 61 74  e holds a mandat
2890: 6f 72 79 20 65 78 63 6c 75 73 69 76 65 20 6c 6f  ory exclusive lo
28a0: 63 6b 20 6f 6e 20 6a 6f 75 72 6e 61 6c 20 66 69  ck on journal fi
28b0: 6c 65 73 20 69 74 20 68 61 73 20 6f 70 65 6e 2e  les it has open.
28c0: 0a 23 20 0a 23 20 54 68 65 79 20 63 61 6e 6e 6f  .# .# They canno
28d0: 74 20 62 65 20 72 75 6e 20 64 75 72 69 6e 67 20  t be run during 
28e0: 74 68 65 20 6a 6f 75 72 6e 61 6c 74 65 73 74 20  the journaltest 
28f0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 62 65 63 61  permutation beca
2900: 75 73 65 20 0a 23 20 22 50 52 41 47 4d 41 20 73  use .# "PRAGMA s
2910: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 30 22 20  ynchronous = 0" 
2920: 69 73 20 75 73 65 64 2e 0a 23 0a 69 66 20 7b 24  is used..#.if {$
2930: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61  tcl_platform(pla
2940: 74 66 6f 72 6d 29 21 3d 22 77 69 6e 64 6f 77 73  tform)!="windows
2950: 22 20 26 26 20 28 0a 20 20 20 20 20 20 30 20 3d  " && (.      0 =
2960: 3d 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  = [info exists :
2970: 3a 70 65 72 6d 75 74 61 74 69 6f 6e 73 5f 74 65  :permutations_te
2980: 73 74 5f 70 72 65 66 69 78 5d 20 0a 20 20 20 7c  st_prefix] .   |
2990: 7c 20 24 3a 3a 70 65 72 6d 75 74 61 74 69 6f 6e  | $::permutation
29a0: 73 5f 74 65 73 74 5f 70 72 65 66 69 78 20 6e 65  s_test_prefix ne
29b0: 20 22 6a 6f 75 72 6e 61 6c 74 65 73 74 22 0a 29   "journaltest".)
29c0: 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  } {.do_test page
29d0: 72 2d 36 2e 31 20 7b 0a 20 20 66 69 6c 65 20 64  r-6.1 {.  file d
29e0: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73  elete -force tes
29f0: 74 32 2e 64 62 0a 20 20 66 69 6c 65 20 64 65 6c  t2.db.  file del
2a00: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32  ete -force test2
2a10: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73 71  .db-journal.  sq
2a20: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e  lite3 db2 test2.
2a30: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
2a40: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
2a50: 6f 6e 6f 75 73 20 3d 20 30 3b 0a 20 20 20 20 43  onous = 0;.    C
2a60: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
2a70: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e  a, b, c);.    IN
2a80: 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41  SERT INTO abc VA
2a90: 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64 73  LUES(1, 2, rands
2aa0: 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20 20  tr(200,200));.  
2ab0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
2ac0: 63 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 72  c VALUES(1, 2, r
2ad0: 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29 29  andstr(200,200))
2ae0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2af0: 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20  O abc VALUES(1, 
2b00: 32 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32  2, randstr(200,2
2b10: 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  00));.    INSERT
2b20: 20 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53   INTO abc VALUES
2b30: 28 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28 32  (1, 2, randstr(2
2b40: 30 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49 4e  00,200));.    IN
2b50: 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41  SERT INTO abc VA
2b60: 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64 73  LUES(1, 2, rands
2b70: 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20 20  tr(200,200));.  
2b80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
2b90: 63 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 72  c VALUES(1, 2, r
2ba0: 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29 29  andstr(200,200))
2bb0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2bc0: 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20  O abc VALUES(1, 
2bd0: 32 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32  2, randstr(200,2
2be0: 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  00));.    INSERT
2bf0: 20 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53   INTO abc VALUES
2c00: 28 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28 32  (1, 2, randstr(2
2c10: 30 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49 4e  00,200));.    IN
2c20: 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41  SERT INTO abc VA
2c30: 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64 73  LUES(1, 2, rands
2c40: 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20 20  tr(200,200));.  
2c50: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44    BEGIN;.    UPD
2c60: 41 54 45 20 61 62 63 20 53 45 54 20 63 20 3d 20  ATE abc SET c = 
2c70: 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29  randstr(200,200)
2c80: 3b 0a 20 20 7d 20 64 62 32 0a 20 20 63 6f 70 79  ;.  } db2.  copy
2c90: 5f 66 69 6c 65 20 74 65 73 74 32 2e 64 62 20 74  _file test2.db t
2ca0: 65 73 74 2e 64 62 0a 20 20 63 6f 70 79 5f 66 69  est.db.  copy_fi
2cb0: 6c 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72  le test2.db-jour
2cc0: 6e 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  nal test.db-jour
2cd0: 6e 61 6c 0a 0a 20 20 73 65 74 20 66 20 5b 6f 70  nal..  set f [op
2ce0: 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  en test.db-journ
2cf0: 61 6c 20 61 5d 0a 20 20 66 63 6f 6e 66 69 67 75  al a].  fconfigu
2d00: 72 65 20 24 66 20 2d 65 6e 63 6f 64 69 6e 67 20  re $f -encoding 
2d10: 62 69 6e 61 72 79 0a 20 20 73 65 65 6b 20 24 66  binary.  seek $f
2d20: 20 5b 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a   [expr [file siz
2d30: 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  e test.db-journa
2d40: 6c 5d 20 2d 20 31 30 33 32 5d 20 73 74 61 72 74  l] - 1032] start
2d50: 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69  .  puts -nonewli
2d60: 6e 65 20 24 66 20 22 5c 30 30 5c 30 30 5c 30 30  ne $f "\00\00\00
2d70: 5c 30 30 22 0a 20 20 63 6c 6f 73 65 20 24 66 0a  \00".  close $f.
2d80: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
2d90: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
2da0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c  {.    SELECT sql
2db0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
2dc0: 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  ter.  }.} {{CREA
2dd0: 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20  TE TABLE abc(a, 
2de0: 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f 74 65 73 74  b, c)}}..do_test
2df0: 20 70 61 67 65 72 2d 36 2e 32 20 7b 0a 20 20 63   pager-6.2 {.  c
2e00: 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64  opy_file test2.d
2e10: 62 20 74 65 73 74 2e 64 62 0a 20 20 63 6f 70 79  b test.db.  copy
2e20: 5f 66 69 6c 65 20 74 65 73 74 32 2e 64 62 2d 6a  _file test2.db-j
2e30: 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64 62 2d 6a  ournal test.db-j
2e40: 6f 75 72 6e 61 6c 0a 0a 20 20 73 65 74 20 66 20  ournal..  set f 
2e50: 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f  [open test.db-jo
2e60: 75 72 6e 61 6c 20 61 5d 0a 20 20 66 63 6f 6e 66  urnal a].  fconf
2e70: 69 67 75 72 65 20 24 66 20 2d 65 6e 63 6f 64 69  igure $f -encodi
2e80: 6e 67 20 62 69 6e 61 72 79 0a 20 20 73 65 65 6b  ng binary.  seek
2e90: 20 24 66 20 5b 65 78 70 72 20 5b 66 69 6c 65 20   $f [expr [file 
2ea0: 73 69 7a 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75  size test.db-jou
2eb0: 72 6e 61 6c 5d 20 2d 20 31 30 33 32 5d 20 73 74  rnal] - 1032] st
2ec0: 61 72 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65  art.  puts -none
2ed0: 77 6c 69 6e 65 20 24 66 20 22 5c 30 30 5c 30 30  wline $f "\00\00
2ee0: 5c 30 30 5c 46 46 22 0a 20 20 63 6c 6f 73 65 20  \00\FF".  close 
2ef0: 24 66 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62  $f..  sqlite3 db
2f00: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
2f10: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2f20: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
2f30: 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b 43  master.  }.} {{C
2f40: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
2f50: 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f 74  a, b, c)}}..do_t
2f60: 65 73 74 20 70 61 67 65 72 2d 36 2e 33 20 7b 0a  est pager-6.3 {.
2f70: 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74    copy_file test
2f80: 32 2e 64 62 20 74 65 73 74 2e 64 62 0a 20 20 63  2.db test.db.  c
2f90: 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64  opy_file test2.d
2fa0: 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64  b-journal test.d
2fb0: 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20 20 73 65 74  b-journal..  set
2fc0: 20 66 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62   f [open test.db
2fd0: 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a 20 20 66 63  -journal a].  fc
2fe0: 6f 6e 66 69 67 75 72 65 20 24 66 20 2d 65 6e 63  onfigure $f -enc
2ff0: 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a 20 20 73  oding binary.  s
3000: 65 65 6b 20 24 66 20 5b 65 78 70 72 20 5b 66 69  eek $f [expr [fi
3010: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 2d  le size test.db-
3020: 6a 6f 75 72 6e 61 6c 5d 20 2d 20 34 5d 20 73 74  journal] - 4] st
3030: 61 72 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65  art.  puts -none
3040: 77 6c 69 6e 65 20 24 66 20 22 5c 30 30 5c 30 30  wline $f "\00\00
3050: 5c 30 30 5c 30 30 22 0a 20 20 63 6c 6f 73 65 20  \00\00".  close 
3060: 24 66 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62  $f..  sqlite3 db
3070: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
3080: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
3090: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
30a0: 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b 43  master.  }.} {{C
30b0: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
30c0: 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f 74  a, b, c)}}..do_t
30d0: 65 73 74 20 70 61 67 65 72 2d 36 2e 34 2e 31 20  est pager-6.4.1 
30e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
30f0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 53 45 4c    BEGIN;.    SEL
3100: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
3110: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
3120: 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74    copy_file test
3130: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73  2.db-journal tes
3140: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 3b 0a 20 20  t.db-journal;.  
3150: 73 71 6c 69 74 65 33 20 64 62 33 20 74 65 73 74  sqlite3 db3 test
3160: 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  .db.  catchsql {
3170: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
3180: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
3190: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
31a0: 20 7d 20 64 62 33 3b 0a 7d 20 7b 31 20 7b 64 61   } db3;.} {1 {da
31b0: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
31c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  }}.do_test pager
31d0: 2d 36 2e 34 2e 32 20 7b 0a 20 20 66 69 6c 65 20  -6.4.2 {.  file 
31e0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
31f0: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
3200: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
3210: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
3220: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
3230: 7d 20 64 62 33 3b 0a 7d 20 7b 30 20 7b 7b 43 52  } db3;.} {0 {{CR
3240: 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61  EATE TABLE abc(a
3250: 2c 20 62 2c 20 63 29 7d 7d 7d 0a 64 6f 5f 74 65  , b, c)}}}.do_te
3260: 73 74 20 70 61 67 65 72 2d 36 2e 34 2e 33 20 7b  st pager-6.4.3 {
3270: 0a 20 20 64 62 33 20 63 6c 6f 73 65 0a 20 20 65  .  db3 close.  e
3280: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  xecsql {.    COM
3290: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  MIT;.  }.} {}..d
32a0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 36 2e 35  o_test pager-6.5
32b0: 20 7b 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74   {.  copy_file t
32c0: 65 73 74 32 2e 64 62 20 74 65 73 74 2e 64 62 0a  est2.db test.db.
32d0: 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74    copy_file test
32e0: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73  2.db-journal tes
32f0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20 20  t.db-journal..  
3300: 73 65 74 20 66 20 5b 6f 70 65 6e 20 74 65 73 74  set f [open test
3310: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a 20  .db-journal a]. 
3320: 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 20 2d   fconfigure $f -
3330: 65 6e 63 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a  encoding binary.
3340: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
3350: 65 20 24 66 20 22 68 65 6c 6c 6f 22 0a 20 20 70  e $f "hello".  p
3360: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
3370: 66 20 22 5c 78 30 30 5c 78 30 30 5c 78 30 30 5c  f "\x00\x00\x00\
3380: 78 30 35 5c 78 30 31 5c 78 30 32 5c 78 30 33 5c  x05\x01\x02\x03\
3390: 78 30 34 22 0a 20 20 70 75 74 73 20 2d 6e 6f 6e  x04".  puts -non
33a0: 65 77 6c 69 6e 65 20 24 66 20 22 5c 78 64 39 5c  ewline $f "\xd9\
33b0: 78 64 35 5c 78 30 35 5c 78 66 39 5c 78 32 30 5c  xd5\x05\xf9\x20\
33c0: 78 61 31 5c 78 36 33 5c 78 64 37 22 0a 20 20 63  xa1\x63\xd7".  c
33d0: 6c 6f 73 65 20 24 66 0a 0a 20 20 73 71 6c 69 74  lose $f..  sqlit
33e0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
33f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
3400: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
3410: 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a  lite_master.  }.
3420: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
3430: 20 61 62 63 28 61 2c 20 62 2c 20 63 29 7d 7d 0a   abc(a, b, c)}}.
3440: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 36  .do_test pager-6
3450: 2e 35 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65  .5 {.  db2 close
3460: 0a 7d 20 7b 7d 0a 7d 0a 66 69 6e 69 73 68 5f 74  .} {}.}.finish_t
3470: 65 73 74 0a                                      est.