/ Hex Artifact Content
Login

Artifact 2d0abb66c8967ffac4558c0530b31c28706b5e64:


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 36 20 32 30 30 39 2f 30 37 2f 32 34   1.36 2009/07/24
0200: 20 31 36 3a 33 32 3a 30 31 20 64 72 68 20 45 78   16:32:01 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 23 64 6f 5f 74 65 73 74 20 70 61 67 65  R}.#do_test page
0590: 72 2d 32 2e 33 2e 31 20 7b 0a 23 20 20 73 65 74  r-2.3.1 {.#  set
05a0: 20 3a 3a 67 78 20 5b 70 61 67 65 5f 6c 6f 6f 6b   ::gx [page_look
05b0: 75 70 20 24 3a 3a 70 31 20 31 5d 0a 23 7d 20 7b  up $::p1 1].#} {
05c0: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
05d0: 32 2e 33 2e 32 20 7b 0a 20 20 70 61 67 65 72 5f  2.3.2 {.  pager_
05e0: 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72  stats $::p1.} {r
05f0: 65 66 20 30 20 70 61 67 65 20 30 20 6d 61 78 20  ef 0 page 0 max 
0600: 31 30 20 73 69 7a 65 20 2d 31 20 73 74 61 74 65  10 size -1 state
0610: 20 30 20 65 72 72 20 30 20 68 69 74 20 30 20 6d   0 err 0 hit 0 m
0620: 69 73 73 20 30 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 0 ovfl 0}.do
0630: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 33 2e  _test pager-2.3.
0640: 33 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  3 {.  set v [cat
0650: 63 68 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67  ch {.    set ::g
0660: 31 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70  1 [page_get $::p
0670: 31 20 31 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20  1 1].  } msg].  
0680: 69 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64  if {$v} {lappend
0690: 20 76 20 24 6d 73 67 7d 0a 20 20 73 65 74 20 76   v $msg}.  set v
06a0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
06b0: 61 67 65 72 2d 32 2e 33 2e 33 20 7b 0a 20 20 70  ager-2.3.3 {.  p
06c0: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31  ager_stats $::p1
06d0: 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31  .} {ref 1 page 1
06e0: 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73   max 10 size 0 s
06f0: 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74  tate 1 err 0 hit
0700: 20 30 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30   0 miss 1 ovfl 0
0710: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0720: 32 2e 33 2e 34 20 7b 0a 20 20 73 65 74 20 3a 3a  2.3.4 {.  set ::
0730: 67 78 20 5b 70 61 67 65 5f 6c 6f 6f 6b 75 70 20  gx [page_lookup 
0740: 24 3a 3a 70 31 20 31 5d 0a 20 20 65 78 70 72 20  $::p1 1].  expr 
0750: 7b 24 3a 3a 67 78 21 3d 22 22 7d 0a 7d 20 7b 31  {$::gx!=""}.} {1
0760: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0770: 32 2e 33 2e 35 20 7b 0a 20 20 70 61 67 65 5f 75  2.3.5 {.  page_u
0780: 6e 72 65 66 20 24 3a 3a 67 78 0a 20 20 70 61 67  nref $::gx.  pag
0790: 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d  er_stats $::p1.}
07a0: 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20 6d   {ref 1 page 1 m
07b0: 61 78 20 31 30 20 73 69 7a 65 20 30 20 73 74 61  ax 10 size 0 sta
07c0: 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20 30  te 1 err 0 hit 0
07d0: 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a   miss 1 ovfl 0}.
07e0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e  do_test pager-2.
07f0: 33 2e 36 20 7b 0a 20 20 65 78 70 72 20 7b 24 3a  3.6 {.  expr {$:
0800: 3a 67 31 3d 3d 24 3a 3a 67 78 7d 0a 7d 20 7b 31  :g1==$::gx}.} {1
0810: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0820: 32 2e 33 2e 37 20 7b 0a 20 20 70 61 67 65 72 5f  2.3.7 {.  pager_
0830: 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72  stats $::p1.} {r
0840: 65 66 20 31 20 70 61 67 65 20 31 20 6d 61 78 20  ef 1 page 1 max 
0850: 31 30 20 73 69 7a 65 20 30 20 73 74 61 74 65 20  10 size 0 state 
0860: 31 20 65 72 72 20 30 20 68 69 74 20 30 20 6d 69  1 err 0 hit 0 mi
0870: 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f  ss 1 ovfl 0}.do_
0880: 74 65 73 74 20 70 61 67 65 72 2d 32 2e 34 20 7b  test pager-2.4 {
0890: 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24  .  pager_stats $
08a0: 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 31 20 70 61  ::p1.} {ref 1 pa
08b0: 67 65 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65  ge 1 max 10 size
08c0: 20 30 20 73 74 61 74 65 20 31 20 65 72 72 20 30   0 state 1 err 0
08d0: 20 68 69 74 20 30 20 6d 69 73 73 20 31 20 6f 76   hit 0 miss 1 ov
08e0: 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  fl 0}.do_test pa
08f0: 67 65 72 2d 32 2e 35 20 7b 0a 20 20 70 61 67 65  ger-2.5 {.  page
0900: 72 5f 70 61 67 65 63 6f 75 6e 74 20 24 3a 3a 70  r_pagecount $::p
0910: 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  1.} {0}.do_test 
0920: 70 61 67 65 72 2d 32 2e 36 20 7b 0a 20 20 70 61  pager-2.6 {.  pa
0930: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a  ger_stats $::p1.
0940: 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20  } {ref 1 page 1 
0950: 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73 74  max 10 size 0 st
0960: 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20  ate 1 err 0 hit 
0970: 30 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d  0 miss 1 ovfl 0}
0980: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32  .do_test pager-2
0990: 2e 37 20 7b 0a 20 20 70 61 67 65 5f 6e 75 6d 62  .7 {.  page_numb
09a0: 65 72 20 24 3a 3a 67 31 0a 7d 20 7b 31 7d 0a 64  er $::g1.} {1}.d
09b0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 38  o_test pager-2.8
09c0: 20 7b 0a 20 20 70 61 67 65 5f 72 65 61 64 20 24   {.  page_read $
09d0: 3a 3a 67 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ::g1.} {}.do_tes
09e0: 74 20 70 61 67 65 72 2d 32 2e 39 20 7b 0a 20 20  t pager-2.9 {.  
09f0: 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31  page_unref $::g1
0a00: 0a 7d 20 7b 7d 0a 0a 23 20 55 70 64 61 74 65 20  .} {}..# Update 
0a10: 32 34 2f 30 33 2f 32 30 30 37 3a 20 45 76 65 6e  24/03/2007: Even
0a20: 20 74 68 6f 75 67 68 20 74 68 65 20 72 65 66 2d   though the ref-
0a30: 63 6f 75 6e 74 20 68 61 73 20 64 72 6f 70 70 65  count has droppe
0a40: 64 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 0a 23  d to zero, the.#
0a50: 20 70 61 67 65 72 2d 63 61 63 68 65 20 73 74 69   pager-cache sti
0a60: 6c 6c 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  ll contains some
0a70: 20 70 61 67 65 73 2e 20 50 72 65 76 69 6f 75 73   pages. Previous
0a80: 6c 79 2c 20 69 74 20 77 61 73 20 61 6c 77 61 79  ly, it was alway
0a90: 73 20 74 72 75 65 0a 23 20 74 68 61 74 20 69 66  s true.# that if
0aa0: 20 74 68 65 72 65 20 77 65 72 65 20 6e 6f 20 72   there were no r
0ab0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 61 20 70  eferences to a p
0ac0: 61 67 65 72 20 69 74 20 77 61 73 20 65 6d 70 74  ager it was empt
0ad0: 79 2e 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  y..do_test pager
0ae0: 2d 32 2e 31 30 20 7b 0a 20 20 70 61 67 65 72 5f  -2.10 {.  pager_
0af0: 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72  stats $::p1.} {r
0b00: 65 66 20 30 20 70 61 67 65 20 31 20 6d 61 78 20  ef 0 page 1 max 
0b10: 31 30 20 73 69 7a 65 20 2d 31 20 73 74 61 74 65  10 size -1 state
0b20: 20 30 20 65 72 72 20 30 20 68 69 74 20 30 20 6d   0 err 0 hit 0 m
0b30: 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 1 ovfl 0}.do
0b40: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 31 31  _test pager-2.11
0b50: 20 7b 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b 70   {.  set ::g1 [p
0b60: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d  age_get $::p1 1]
0b70: 0a 20 20 65 78 70 72 20 7b 24 3a 3a 67 31 21 3d  .  expr {$::g1!=
0b80: 30 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  0}.} {1}.do_test
0b90: 20 70 61 67 65 72 2d 32 2e 31 32 20 7b 0a 20 20   pager-2.12 {.  
0ba0: 70 61 67 65 5f 6e 75 6d 62 65 72 20 24 3a 3a 67  page_number $::g
0bb0: 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  1.} {1}.do_test 
0bc0: 70 61 67 65 72 2d 32 2e 31 33 20 7b 0a 20 20 70  pager-2.13 {.  p
0bd0: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31  ager_stats $::p1
0be0: 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31  .} {ref 1 page 1
0bf0: 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73   max 10 size 0 s
0c00: 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74  tate 1 err 0 hit
0c10: 20 31 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30   1 miss 1 ovfl 0
0c20: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
0c30: 32 2e 31 34 20 7b 0a 20 20 73 65 74 20 76 20 5b  2.14 {.  set v [
0c40: 63 61 74 63 68 20 7b 0a 20 20 20 20 70 61 67 65  catch {.    page
0c50: 5f 77 72 69 74 65 20 24 3a 3a 67 31 20 22 50 61  _write $::g1 "Pa
0c60: 67 65 2d 4f 6e 65 22 0a 20 20 7d 20 6d 73 67 5d  ge-One".  } msg]
0c70: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
0c80: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
0c90: 73 74 20 70 61 67 65 72 2d 32 2e 31 35 20 7b 0a  st pager-2.15 {.
0ca0: 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a    pager_stats $:
0cb0: 3a 70 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67  :p1.} {ref 1 pag
0cc0: 65 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20  e 1 max 10 size 
0cd0: 31 20 73 74 61 74 65 20 32 20 65 72 72 20 30 20  1 state 2 err 0 
0ce0: 68 69 74 20 31 20 6d 69 73 73 20 31 20 6f 76 66  hit 1 miss 1 ovf
0cf0: 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  l 0}.do_test pag
0d00: 65 72 2d 32 2e 31 36 20 7b 0a 20 20 70 61 67 65  er-2.16 {.  page
0d10: 5f 72 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 50  _read $::g1.} {P
0d20: 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74  age-One}.do_test
0d30: 20 70 61 67 65 72 2d 32 2e 31 37 20 7b 0a 20 20   pager-2.17 {.  
0d40: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
0d50: 20 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20     pager_commit 
0d60: 24 3a 3a 70 31 0a 20 20 7d 20 6d 73 67 5d 0a 20  $::p1.  } msg]. 
0d70: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0d80: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0d90: 20 70 61 67 65 72 2d 32 2e 32 30 20 7b 0a 20 20   pager-2.20 {.  
0da0: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70  pager_stats $::p
0db0: 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20  1.} {ref 1 page 
0dc0: 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 2d 31  1 max 10 size -1
0dd0: 20 73 74 61 74 65 20 31 20 65 72 72 20 30 20 68   state 1 err 0 h
0de0: 69 74 20 32 20 6d 69 73 73 20 31 20 6f 76 66 6c  it 2 miss 1 ovfl
0df0: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65   0}.do_test page
0e00: 72 2d 32 2e 31 39 20 7b 0a 20 20 70 61 67 65 72  r-2.19 {.  pager
0e10: 5f 70 61 67 65 63 6f 75 6e 74 20 24 3a 3a 70 31  _pagecount $::p1
0e20: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
0e30: 61 67 65 72 2d 32 2e 32 31 20 7b 0a 20 20 70 61  ager-2.21 {.  pa
0e40: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a  ger_stats $::p1.
0e50: 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31 20  } {ref 1 page 1 
0e60: 6d 61 78 20 31 30 20 73 69 7a 65 20 31 20 73 74  max 10 size 1 st
0e70: 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74 20  ate 1 err 0 hit 
0e80: 32 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30 7d  2 miss 1 ovfl 0}
0e90: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32  .do_test pager-2
0ea0: 2e 32 32 20 7b 0a 20 20 70 61 67 65 5f 75 6e 72  .22 {.  page_unr
0eb0: 65 66 20 24 3a 3a 67 31 0a 7d 20 7b 7d 0a 64 6f  ef $::g1.} {}.do
0ec0: 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e 32 33  _test pager-2.23
0ed0: 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73   {.  pager_stats
0ee0: 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 30 20   $::p1.} {ref 0 
0ef0: 70 61 67 65 20 31 20 6d 61 78 20 31 30 20 73 69  page 1 max 10 si
0f00: 7a 65 20 2d 31 20 73 74 61 74 65 20 30 20 65 72  ze -1 state 0 er
0f10: 72 20 30 20 68 69 74 20 32 20 6d 69 73 73 20 31  r 0 hit 2 miss 1
0f20: 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74   ovfl 0}.do_test
0f30: 20 70 61 67 65 72 2d 32 2e 32 34 20 7b 0a 20 20   pager-2.24 {.  
0f40: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
0f50: 20 20 20 70 61 67 65 5f 67 65 74 20 24 3a 3a 70     page_get $::p
0f60: 31 20 31 0a 20 20 7d 20 3a 3a 67 31 5d 0a 20 20  1 1.  } ::g1].  
0f70: 69 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64  if {$v} {lappend
0f80: 20 76 20 24 3a 3a 67 31 7d 0a 20 20 73 65 74 20   v $::g1}.  set 
0f90: 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  v.} {0}.do_test 
0fa0: 70 61 67 65 72 2d 32 2e 32 35 20 7b 0a 20 20 70  pager-2.25 {.  p
0fb0: 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 31 0a 7d  age_read $::g1.}
0fc0: 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74   {Page-One}.do_t
0fd0: 65 73 74 20 70 61 67 65 72 2d 32 2e 32 36 20 7b  est pager-2.26 {
0fe0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0ff0: 7b 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74 65  {.    page_write
1000: 20 24 3a 3a 67 31 20 7b 70 61 67 65 2d 6f 6e 65   $::g1 {page-one
1010: 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  }.  } msg].  lap
1020: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
1030: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {}}.do_test pag
1040: 65 72 2d 32 2e 32 37 20 7b 0a 20 20 70 61 67 65  er-2.27 {.  page
1050: 5f 72 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 70  _read $::g1.} {p
1060: 61 67 65 2d 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74  age-one}.do_test
1070: 20 70 61 67 65 72 2d 32 2e 32 38 20 7b 0a 20 20   pager-2.28 {.  
1080: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
1090: 20 20 20 70 61 67 65 72 5f 72 6f 6c 6c 62 61 63     pager_rollbac
10a0: 6b 20 24 3a 3a 70 31 0a 20 20 7d 20 6d 73 67 5d  k $::p1.  } msg]
10b0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
10c0: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
10d0: 73 74 20 70 61 67 65 72 2d 32 2e 32 39 20 7b 0a  st pager-2.29 {.
10e0: 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a    page_unref $::
10f0: 67 31 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b 70  g1.  set ::g1 [p
1100: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d  age_get $::p1 1]
1110: 0a 20 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a  .  page_read $::
1120: 67 31 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a  g1.} {Page-One}.
1130: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 32 2e  do_test pager-2.
1140: 39 39 20 7b 0a 20 20 70 61 67 65 5f 75 6e 72 65  99 {.  page_unre
1150: 66 20 24 3a 3a 67 31 0a 20 20 70 61 67 65 72 5f  f $::g1.  pager_
1160: 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 7d 20 7b 7d  close $::p1.} {}
1170: 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  ..do_test pager-
1180: 33 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  3.1 {.  set v [c
1190: 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20 3a  atch {.    set :
11a0: 3a 70 31 20 5b 70 61 67 65 72 5f 6f 70 65 6e 20  :p1 [pager_open 
11b0: 70 74 66 31 2e 64 62 20 31 35 5d 0a 20 20 7d 20  ptf1.db 15].  } 
11c0: 6d 73 67 5d 0a 20 20 69 66 20 7b 24 76 7d 20 7b  msg].  if {$v} {
11d0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 7d 0a  lappend v $msg}.
11e0: 20 20 73 65 74 20 76 0a 7d 20 7b 30 7d 0a 64 6f    set v.} {0}.do
11f0: 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 32 20  _test pager-3.2 
1200: 7b 0a 20 20 70 61 67 65 72 5f 70 61 67 65 63 6f  {.  pager_pageco
1210: 75 6e 74 20 24 3a 3a 70 31 0a 7d 20 7b 31 7d 0a  unt $::p1.} {1}.
1220: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e  do_test pager-3.
1230: 33 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  3 {.  set v [cat
1240: 63 68 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67  ch {.    set ::g
1250: 28 31 29 20 5b 70 61 67 65 5f 67 65 74 20 24 3a  (1) [page_get $:
1260: 3a 70 31 20 31 5d 0a 20 20 7d 20 6d 73 67 5d 0a  :p1 1].  } msg].
1270: 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65    if {$v} {lappe
1280: 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20 73 65 74  nd v $msg}.  set
1290: 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   v.} {0}.do_test
12a0: 20 70 61 67 65 72 2d 33 2e 34 20 7b 0a 20 20 70   pager-3.4 {.  p
12b0: 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 28 31 29  age_read $::g(1)
12c0: 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f  .} {Page-One}.do
12d0: 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 35 20  _test pager-3.5 
12e0: 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32  {.  for {set i 2
12f0: 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$i<=20} {incr
1300: 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 67 78   i} {.    set gx
1310: 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31   [page_get $::p1
1320: 20 24 69 5d 0a 20 20 20 20 70 61 67 65 5f 77 72   $i].    page_wr
1330: 69 74 65 20 24 67 78 20 22 50 61 67 65 2d 24 69  ite $gx "Page-$i
1340: 22 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66  ".    page_unref
1350: 20 24 67 78 0a 20 20 7d 0a 20 20 70 61 67 65 72   $gx.  }.  pager
1360: 5f 63 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a 20 20  _commit $::p1.  
1370: 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67 28  page_unref $::g(
1380: 31 29 0a 7d 20 7b 7d 0a 66 6f 72 20 7b 73 65 74  1).} {}.for {set
1390: 20 69 20 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b   i 2} {$i<=20} {
13a0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74  incr i} {.  do_t
13b0: 65 73 74 20 70 61 67 65 72 2d 33 2e 36 2e 5b 65  est pager-3.6.[e
13c0: 78 70 72 20 7b 24 69 2d 31 7d 5d 20 5b 73 75 62  xpr {$i-1}] [sub
13d0: 73 74 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20  st {.    set gx 
13e0: 5c 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31  \[page_get $::p1
13f0: 20 24 69 5c 5d 0a 20 20 20 20 73 65 74 20 76 20   $i\].    set v 
1400: 5c 5b 70 61 67 65 5f 72 65 61 64 20 5c 24 67 78  \[page_read \$gx
1410: 5c 5d 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65  \].    page_unre
1420: 66 20 5c 24 67 78 0a 20 20 20 20 73 65 74 20 76  f \$gx.    set v
1430: 0a 20 20 7d 5d 20 22 50 61 67 65 2d 24 69 22 0a  .  }] "Page-$i".
1440: 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20  }.for {set i 1} 
1450: 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69  {$i<=20} {incr i
1460: 7d 20 7b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  } {.  regsub -al
1470: 6c 20 43 4e 54 20 7b 0a 20 20 20 20 73 65 74 20  l CNT {.    set 
1480: 3a 3a 67 31 20 5b 70 61 67 65 5f 67 65 74 20 24  ::g1 [page_get $
1490: 3a 3a 70 31 20 43 4e 54 5d 0a 20 20 20 20 73 65  ::p1 CNT].    se
14a0: 74 20 3a 3a 67 32 20 5b 70 61 67 65 5f 67 65 74  t ::g2 [page_get
14b0: 20 24 3a 3a 70 31 20 43 4e 54 5d 0a 20 20 20 20   $::p1 CNT].    
14c0: 73 65 74 20 3a 3a 76 78 20 5b 70 61 67 65 5f 72  set ::vx [page_r
14d0: 65 61 64 20 24 3a 3a 67 32 5d 0a 20 20 20 20 65  ead $::g2].    e
14e0: 78 70 72 20 7b 24 3a 3a 67 31 3d 3d 24 3a 3a 67  xpr {$::g1==$::g
14f0: 32 7d 0a 20 20 7d 20 24 69 20 62 6f 64 79 3b 0a  2}.  } $i body;.
1500: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d    do_test pager-
1510: 33 2e 37 2e 24 69 2e 31 20 24 62 6f 64 79 20 7b  3.7.$i.1 $body {
1520: 31 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  1}.  regsub -all
1530: 20 43 4e 54 20 7b 0a 20 20 20 20 70 61 67 65 5f   CNT {.    page_
1540: 75 6e 72 65 66 20 24 3a 3a 67 32 0a 20 20 20 20  unref $::g2.    
1550: 73 65 74 20 76 79 20 5b 70 61 67 65 5f 72 65 61  set vy [page_rea
1560: 64 20 24 3a 3a 67 31 5d 0a 20 20 20 20 65 78 70  d $::g1].    exp
1570: 72 20 7b 24 76 79 3d 3d 24 3a 3a 76 78 7d 0a 20  r {$vy==$::vx}. 
1580: 20 7d 20 24 69 20 62 6f 64 79 3b 0a 20 20 64 6f   } $i body;.  do
1590: 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 37 2e  _test pager-3.7.
15a0: 24 69 2e 32 20 24 62 6f 64 79 20 7b 31 7d 0a 20  $i.2 $body {1}. 
15b0: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 43 4e 54   regsub -all CNT
15c0: 20 7b 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65   {.    page_unre
15d0: 66 20 24 3a 3a 67 31 0a 20 20 20 20 73 65 74 20  f $::g1.    set 
15e0: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a  gx [page_get $::
15f0: 70 31 20 43 4e 54 5d 0a 20 20 20 20 73 65 74 20  p1 CNT].    set 
1600: 76 79 20 5b 70 61 67 65 5f 72 65 61 64 20 24 67  vy [page_read $g
1610: 78 5d 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65  x].    page_unre
1620: 66 20 24 67 78 0a 20 20 20 20 65 78 70 72 20 7b  f $gx.    expr {
1630: 24 76 79 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20  $vy==$::vx}.  } 
1640: 24 69 20 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65  $i body;.  do_te
1650: 73 74 20 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e  st pager-3.7.$i.
1660: 33 20 24 62 6f 64 79 20 7b 31 7d 0a 7d 0a 64 6f  3 $body {1}.}.do
1670: 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 39 39  _test pager-3.99
1680: 20 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65   {.  pager_close
1690: 20 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 23 20 74   $::p1.} {}..# t
16a0: 65 73 74 73 20 6f 66 20 74 68 65 20 63 68 65 63  ests of the chec
16b0: 6b 70 6f 69 6e 74 20 6d 65 63 68 61 6e 69 73 6d  kpoint mechanism
16c0: 20 61 6e 64 20 61 70 69 0a 23 0a 64 6f 5f 74 65   and api.#.do_te
16d0: 73 74 20 70 61 67 65 72 2d 34 2e 30 20 7b 0a 20  st pager-4.0 {. 
16e0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a   set v [catch {.
16f0: 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20      file delete 
1700: 2d 66 6f 72 63 65 20 70 74 66 31 2e 64 62 0a 20  -force ptf1.db. 
1710: 20 20 20 73 65 74 20 3a 3a 70 31 20 5b 70 61 67     set ::p1 [pag
1720: 65 72 5f 6f 70 65 6e 20 70 74 66 31 2e 64 62 20  er_open ptf1.db 
1730: 31 35 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69  15].  } msg].  i
1740: 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20  f {$v} {lappend 
1750: 76 20 24 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a  v $msg}.  set v.
1760: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61  } {0}.do_test pa
1770: 67 65 72 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20  ger-4.1 {.  set 
1780: 67 31 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a  g1 [page_get $::
1790: 70 31 20 31 5d 0a 20 20 70 61 67 65 5f 77 72 69  p1 1].  page_wri
17a0: 74 65 20 24 67 31 20 22 50 61 67 65 2d 31 20 76  te $g1 "Page-1 v
17b0: 30 22 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  0".  for {set i 
17c0: 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63  2} {$i<=20} {inc
17d0: 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 67  r i} {.    set g
17e0: 78 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70  x [page_get $::p
17f0: 31 20 24 69 5d 0a 20 20 20 20 70 61 67 65 5f 77  1 $i].    page_w
1800: 72 69 74 65 20 24 67 78 20 22 50 61 67 65 2d 24  rite $gx "Page-$
1810: 69 20 76 30 22 0a 20 20 20 20 70 61 67 65 5f 75  i v0".    page_u
1820: 6e 72 65 66 20 24 67 78 0a 20 20 7d 0a 20 20 70  nref $gx.  }.  p
1830: 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 3a 3a 70  ager_commit $::p
1840: 31 0a 7d 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20  1.} {}.for {set 
1850: 69 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69  i 1} {$i<=20} {i
1860: 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65  ncr i} {.  do_te
1870: 73 74 20 70 61 67 65 72 2d 34 2e 32 2e 24 69 20  st pager-4.2.$i 
1880: 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5b 70 61  {.    set gx [pa
1890: 67 65 5f 67 65 74 20 24 70 31 20 24 69 5d 0a 20  ge_get $p1 $i]. 
18a0: 20 20 20 73 65 74 20 76 20 5b 70 61 67 65 5f 72     set v [page_r
18b0: 65 61 64 20 24 67 78 5d 0a 20 20 20 20 70 61 67  ead $gx].    pag
18c0: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
18d0: 73 65 74 20 76 0a 20 20 7d 20 22 50 61 67 65 2d  set v.  } "Page-
18e0: 24 69 20 76 30 22 0a 7d 0a 64 6f 5f 74 65 73 74  $i v0".}.do_test
18f0: 20 70 61 67 65 72 2d 34 2e 33 20 7b 0a 20 20 6c   pager-4.3 {.  l
1900: 72 61 6e 67 65 20 5b 70 61 67 65 72 5f 73 74 61  range [pager_sta
1910: 74 73 20 24 3a 3a 70 31 5d 20 30 20 31 0a 7d 20  ts $::p1] 0 1.} 
1920: 7b 72 65 66 20 31 7d 0a 64 6f 5f 74 65 73 74 20  {ref 1}.do_test 
1930: 70 61 67 65 72 2d 34 2e 34 20 7b 0a 20 20 6c 72  pager-4.4 {.  lr
1940: 61 6e 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74  ange [pager_stat
1950: 73 20 24 3a 3a 70 31 5d 20 38 20 39 0a 7d 20 7b  s $::p1] 8 9.} {
1960: 73 74 61 74 65 20 31 7d 0a 0a 66 6f 72 20 7b 73  state 1}..for {s
1970: 65 74 20 69 20 31 7d 20 7b 24 69 3c 32 30 7d 20  et i 1} {$i<20} 
1980: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f  {incr i} {.  do_
1990: 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e 24  test pager-4.5.$
19a0: 69 2e 30 20 7b 0a 20 20 20 20 73 65 74 20 72 65  i.0 {.    set re
19b0: 73 20 7b 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65  s {}.    for {se
19c0: 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20  t j 2} {$j<=20} 
19d0: 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20  {incr j} {.     
19e0: 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65   set gx [page_ge
19f0: 74 20 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20  t $p1 $j].      
1a00: 73 65 74 20 76 61 6c 75 65 20 5b 70 61 67 65 5f  set value [page_
1a10: 72 65 61 64 20 24 67 78 5d 0a 20 20 20 20 20 20  read $gx].      
1a20: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
1a30: 20 20 20 20 20 73 65 74 20 73 68 6f 75 6c 64 62       set shouldb
1a40: 65 20 22 50 61 67 65 2d 24 6a 20 76 5b 65 78 70  e "Page-$j v[exp
1a50: 72 20 7b 24 69 2d 31 7d 5d 22 0a 20 20 20 20 20  r {$i-1}]".     
1a60: 20 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68   if {$value!=$sh
1a70: 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20  ouldbe} {.      
1a80: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76    lappend res $v
1a90: 61 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20  alue $shouldbe. 
1aa0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1ab0: 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a   set res.  } {}.
1ac0: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d    do_test pager-
1ad0: 34 2e 35 2e 24 69 2e 31 20 7b 0a 20 20 20 20 70  4.5.$i.1 {.    p
1ae0: 61 67 65 5f 77 72 69 74 65 20 24 67 31 20 22 50  age_write $g1 "P
1af0: 61 67 65 2d 31 20 76 24 69 22 0a 20 20 20 20 6c  age-1 v$i".    l
1b00: 72 61 6e 67 65 20 5b 70 61 67 65 72 5f 73 74 61  range [pager_sta
1b10: 74 73 20 24 70 31 5d 20 38 20 39 0a 20 20 7d 20  ts $p1] 8 9.  } 
1b20: 7b 73 74 61 74 65 20 32 7d 0a 20 20 64 6f 5f 74  {state 2}.  do_t
1b30: 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69  est pager-4.5.$i
1b40: 2e 32 20 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65  .2 {.    for {se
1b50: 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20  t j 2} {$j<=20} 
1b60: 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20  {incr j} {.     
1b70: 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65   set gx [page_ge
1b80: 74 20 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20  t $p1 $j].      
1b90: 70 61 67 65 5f 77 72 69 74 65 20 24 67 78 20 22  page_write $gx "
1ba0: 50 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20  Page-$j v$i".   
1bb0: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67     page_unref $g
1bc0: 78 0a 20 20 20 20 20 20 69 66 20 7b 24 6a 3d 3d  x.      if {$j==
1bd0: 24 69 7d 20 7b 0a 20 20 20 20 20 20 20 20 70 61  $i} {.        pa
1be0: 67 65 72 5f 73 74 6d 74 5f 62 65 67 69 6e 20 24  ger_stmt_begin $
1bf0: 70 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  p1.      }.    }
1c00: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
1c10: 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 33  t pager-4.5.$i.3
1c20: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b   {.    set res {
1c30: 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  }.    for {set j
1c40: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
1c50: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
1c60: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
1c70: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74  p1 $j].      set
1c80: 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61   value [page_rea
1c90: 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67  d $gx].      pag
1ca0: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
1cb0: 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22    set shouldbe "
1cc0: 50 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20  Page-$j v$i".   
1cd0: 20 20 20 69 66 20 7b 24 76 61 6c 75 65 21 3d 24     if {$value!=$
1ce0: 73 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20  shouldbe} {.    
1cf0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
1d00: 24 76 61 6c 75 65 20 24 73 68 6f 75 6c 64 62 65  $value $shouldbe
1d10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1d20: 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b     set res.  } {
1d30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65  }.  do_test page
1d40: 72 2d 34 2e 35 2e 24 69 2e 34 20 7b 0a 20 20 20  r-4.5.$i.4 {.   
1d50: 20 70 61 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 20   pager_rollback 
1d60: 24 70 31 0a 20 20 20 20 73 65 74 20 72 65 73 20  $p1.    set res 
1d70: 7b 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20  {}.    for {set 
1d80: 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69  j 2} {$j<=20} {i
1d90: 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73  ncr j} {.      s
1da0: 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20  et gx [page_get 
1db0: 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65  $p1 $j].      se
1dc0: 74 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65  t value [page_re
1dd0: 61 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61  ad $gx].      pa
1de0: 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20  ge_unref $gx.   
1df0: 20 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20     set shouldbe 
1e00: 22 50 61 67 65 2d 24 6a 20 76 5b 65 78 70 72 20  "Page-$j v[expr 
1e10: 7b 24 69 2d 31 7d 5d 22 0a 20 20 20 20 20 20 69  {$i-1}]".      i
1e20: 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75  f {$value!=$shou
1e30: 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20  ldbe} {.        
1e40: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c  lappend res $val
1e50: 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20  ue $shouldbe.   
1e60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
1e70: 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20  et res.  } {}.  
1e80: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e  do_test pager-4.
1e90: 35 2e 24 69 2e 35 20 7b 0a 20 20 20 20 70 61 67  5.$i.5 {.    pag
1ea0: 65 5f 77 72 69 74 65 20 24 67 31 20 22 50 61 67  e_write $g1 "Pag
1eb0: 65 2d 31 20 76 24 69 22 0a 20 20 20 20 6c 72 61  e-1 v$i".    lra
1ec0: 6e 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73  nge [pager_stats
1ed0: 20 24 70 31 5d 20 38 20 39 0a 20 20 7d 20 7b 73   $p1] 8 9.  } {s
1ee0: 74 61 74 65 20 32 7d 0a 20 20 64 6f 5f 74 65 73  tate 2}.  do_tes
1ef0: 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 36  t pager-4.5.$i.6
1f00: 20 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20   {.    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 70 61  $p1 $j].      pa
1f50: 67 65 5f 77 72 69 74 65 20 24 67 78 20 22 50 61  ge_write $gx "Pa
1f60: 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20  ge-$j v$i".     
1f70: 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a   page_unref $gx.
1f80: 20 20 20 20 20 20 69 66 20 7b 24 6a 3d 3d 24 69        if {$j==$i
1f90: 7d 20 7b 0a 20 20 20 20 20 20 20 20 70 61 67 65  } {.        page
1fa0: 72 5f 73 74 6d 74 5f 62 65 67 69 6e 20 24 70 31  r_stmt_begin $p1
1fb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1fc0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
1fd0: 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 37 20 7b  pager-4.5.$i.7 {
1fe0: 0a 20 20 20 20 70 61 67 65 72 5f 73 74 6d 74 5f  .    pager_stmt_
1ff0: 72 6f 6c 6c 62 61 63 6b 20 24 70 31 0a 20 20 20  rollback $p1.   
2000: 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b   for {set j 2} {
2010: 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d  $j<=20} {incr j}
2020: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67 78 20   {.      set gx 
2030: 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a  [page_get $p1 $j
2040: 5d 0a 20 20 20 20 20 20 73 65 74 20 76 61 6c 75  ].      set valu
2050: 65 20 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78  e [page_read $gx
2060: 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72  ].      page_unr
2070: 65 66 20 24 67 78 0a 20 20 20 20 20 20 69 66 20  ef $gx.      if 
2080: 7b 24 6a 3c 3d 24 69 20 7c 7c 20 24 69 3d 3d 31  {$j<=$i || $i==1
2090: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
20a0: 73 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24  shouldbe "Page-$
20b0: 6a 20 76 24 69 22 0a 20 20 20 20 20 20 7d 20 65  j v$i".      } e
20c0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73 65  lse {.        se
20d0: 74 20 73 68 6f 75 6c 64 62 65 20 22 50 61 67 65  t shouldbe "Page
20e0: 2d 24 6a 20 76 5b 65 78 70 72 20 7b 24 69 2d 31  -$j v[expr {$i-1
20f0: 7d 5d 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  }]".      }.    
2100: 20 20 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73    if {$value!=$s
2110: 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20  houldbe} {.     
2120: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
2130: 76 61 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a  value $shouldbe.
2140: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2150: 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d    set res.  } {}
2160: 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72  .  do_test pager
2170: 2d 34 2e 35 2e 24 69 2e 38 20 7b 0a 20 20 20 20  -4.5.$i.8 {.    
2180: 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24  for {set j 2} {$
2190: 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20  j<=20} {incr j} 
21a0: 7b 0a 20 20 20 20 20 20 73 65 74 20 67 78 20 5b  {.      set gx [
21b0: 70 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d  page_get $p1 $j]
21c0: 0a 20 20 20 20 20 20 70 61 67 65 5f 77 72 69 74  .      page_writ
21d0: 65 20 24 67 78 20 22 50 61 67 65 2d 24 6a 20 76  e $gx "Page-$j v
21e0: 24 69 22 0a 20 20 20 20 20 20 70 61 67 65 5f 75  $i".      page_u
21f0: 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20 69  nref $gx.      i
2200: 66 20 7b 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20  f {$j==$i} {.   
2210: 20 20 20 20 20 70 61 67 65 72 5f 73 74 6d 74 5f       pager_stmt_
2220: 62 65 67 69 6e 20 24 70 31 0a 20 20 20 20 20 20  begin $p1.      
2230: 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  }.    }.  } {}. 
2240: 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34   do_test pager-4
2250: 2e 35 2e 24 69 2e 39 20 7b 0a 20 20 20 20 70 61  .5.$i.9 {.    pa
2260: 67 65 72 5f 73 74 6d 74 5f 63 6f 6d 6d 69 74 20  ger_stmt_commit 
2270: 24 70 31 0a 20 20 20 20 66 6f 72 20 7b 73 65 74  $p1.    for {set
2280: 20 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b   j 2} {$j<=20} {
2290: 69 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20  incr j} {.      
22a0: 73 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74  set gx [page_get
22b0: 20 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73   $p1 $j].      s
22c0: 65 74 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72  et value [page_r
22d0: 65 61 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70  ead $gx].      p
22e0: 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20  age_unref $gx.  
22f0: 20 20 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65      set shouldbe
2300: 20 22 50 61 67 65 2d 24 6a 20 76 24 69 22 0a 20   "Page-$j v$i". 
2310: 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 21       if {$value!
2320: 3d 24 73 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20  =$shouldbe} {.  
2330: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
2340: 73 20 24 76 61 6c 75 65 20 24 73 68 6f 75 6c 64  s $value $should
2350: 62 65 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  be.      }.    }
2360: 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d  .    set res.  }
2370: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61   {}.  do_test pa
2380: 67 65 72 2d 34 2e 35 2e 24 69 2e 31 30 20 7b 0a  ger-4.5.$i.10 {.
2390: 20 20 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74      pager_commit
23a0: 20 24 70 31 0a 20 20 20 20 6c 72 61 6e 67 65 20   $p1.    lrange 
23b0: 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24 70 31  [pager_stats $p1
23c0: 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74 61 74 65  ] 8 9.  } {state
23d0: 20 31 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68   1}.}..# Test th
23e0: 61 74 20 6e 6f 74 68 69 6e 67 20 62 61 64 20 68  at nothing bad h
23f0: 61 70 70 65 6e 73 20 77 68 65 6e 20 73 71 6c 69  appens when sqli
2400: 74 65 33 70 61 67 65 72 5f 73 65 74 5f 63 61 63  te3pager_set_cac
2410: 68 65 73 69 7a 65 28 29 20 69 73 0a 23 20 63 61  hesize() is.# ca
2420: 6c 6c 65 64 20 77 69 74 68 20 61 20 6e 65 67 61  lled with a nega
2430: 74 69 76 65 20 61 72 67 75 6d 65 6e 74 2e 0a 64  tive argument..d
2440: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 36  o_test pager-4.6
2450: 2e 31 20 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f  .1 {.  pager_clo
2460: 73 65 20 5b 70 61 67 65 72 5f 6f 70 65 6e 20 70  se [pager_open p
2470: 74 66 32 2e 64 62 20 2d 31 35 5d 0a 7d 20 7b 7d  tf2.db -15].} {}
2480: 0a 0a 23 20 54 65 73 74 20 74 72 75 6e 63 61 74  ..# Test truncat
2490: 65 20 6f 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  e on an in-memor
24a0: 79 20 64 61 74 61 62 61 73 65 20 69 73 20 4f 6b  y database is Ok
24b0: 2e 0a 69 66 63 61 70 61 62 6c 65 20 6d 65 6d 6f  ..ifcapable memo
24c0: 72 79 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  rydb {.  do_test
24d0: 20 70 61 67 65 72 2d 34 2e 36 2e 32 20 7b 0a 20   pager-4.6.2 {. 
24e0: 20 20 20 73 65 74 20 3a 3a 70 32 20 5b 70 61 67     set ::p2 [pag
24f0: 65 72 5f 6f 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a  er_open :memory:
2500: 20 31 30 5d 0a 20 20 20 20 70 61 67 65 72 5f 74   10].    pager_t
2510: 72 75 6e 63 61 74 65 20 24 3a 3a 70 32 20 30 0a  runcate $::p2 0.
2520: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
2530: 20 70 61 67 65 72 2d 34 2e 36 2e 33 20 7b 0a 20   pager-4.6.3 {. 
2540: 20 20 20 73 65 74 20 70 61 67 65 31 20 5b 70 61     set page1 [pa
2550: 67 65 5f 67 65 74 20 24 3a 3a 70 32 20 31 5d 0a  ge_get $::p2 1].
2560: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31      for {set i 1
2570: 7d 20 7b 24 69 3c 35 7d 20 7b 69 6e 63 72 20 69  } {$i<5} {incr i
2580: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 70 20  } {.      set p 
2590: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 32 20  [page_get $::p2 
25a0: 24 69 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 77  $i].      page_w
25b0: 72 69 74 65 20 24 70 20 22 50 61 67 65 20 24 69  rite $p "Page $i
25c0: 22 0a 20 20 20 20 20 20 70 61 67 65 72 5f 63 6f  ".      pager_co
25d0: 6d 6d 69 74 20 24 3a 3a 70 32 0a 20 20 20 20 20  mmit $::p2.     
25e0: 20 70 61 67 65 5f 75 6e 72 65 66 20 24 70 0a 20   page_unref $p. 
25f0: 20 20 20 7d 0a 20 20 20 20 70 61 67 65 5f 75 6e     }.    page_un
2600: 72 65 66 20 24 70 61 67 65 31 0a 20 20 20 20 70  ref $page1.    p
2610: 61 67 65 72 5f 74 72 75 6e 63 61 74 65 20 24 3a  ager_truncate $:
2620: 3a 70 32 20 33 0a 20 20 7d 20 7b 7d 0a 20 20 64  :p2 3.  } {}.  d
2630: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 36  o_test pager-4.6
2640: 2e 34 20 7b 0a 20 20 20 20 70 61 67 65 72 5f 63  .4 {.    pager_c
2650: 6c 6f 73 65 20 24 3a 3a 70 32 0a 20 20 7d 20 7b  lose $::p2.  } {
2660: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67  }.}..do_test pag
2670: 65 72 2d 34 2e 39 39 20 7b 0a 20 20 70 61 67 65  er-4.99 {.  page
2680: 5f 75 6e 72 65 66 20 24 3a 3a 67 31 0a 20 20 70  _unref $::g1.  p
2690: 61 67 65 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31  ager_close $::p1
26a0: 0a 7d 20 7b 7d 0a 0a 0a 0a 20 20 66 69 6c 65 20  .} {}....  file 
26b0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 70 74  delete -force pt
26c0: 66 31 2e 64 62 0a 0a 7d 20 3b 23 20 65 6e 64 20  f1.db..} ;# end 
26d0: 69 66 28 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64  if( not mem: and
26e0: 20 68 61 73 20 70 61 67 65 72 5f 6f 70 65 6e 20   has pager_open 
26f0: 63 6f 6d 6d 61 6e 64 20 29 3b 0a 0a 69 66 20 30  command );..if 0
2700: 20 7b 0a 23 20 54 69 63 6b 65 74 20 23 36 31 35   {.# Ticket #615
2710: 3a 20 61 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  : an assertion f
2720: 61 75 6c 74 20 69 6e 73 69 64 65 20 74 68 65 20  ault inside the 
2730: 70 61 67 65 72 2e 20 20 49 74 20 69 73 20 61 20  pager.  It is a 
2740: 62 65 6e 69 67 6e 0a 23 20 66 61 75 6c 74 2c 20  benign.# fault, 
2750: 62 75 74 20 77 65 20 6d 69 67 68 74 20 61 73 20  but we might as 
2760: 77 65 6c 6c 20 74 65 73 74 20 66 6f 72 20 69 74  well test for it
2770: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  ..#.do_test page
2780: 72 2d 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  r-5.1 {.  sqlite
2790: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
27a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
27b0: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
27c0: 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20  ABLE t1(x);.    
27d0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
27e0: 75 73 3d 6f 66 66 3b 0a 20 20 20 20 43 4f 4d 4d  us=off;.    COMM
27f0: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 0a 0a  IT;.  }.} {}.}..
2800: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
2810: 74 65 73 74 73 20 63 6f 76 65 72 20 72 6f 6c 6c  tests cover roll
2820: 69 6e 67 20 62 61 63 6b 20 68 6f 74 20 6a 6f 75  ing back hot jou
2830: 72 6e 61 6c 20 66 69 6c 65 73 2e 20 0a 23 20 54  rnal files. .# T
2840: 68 65 79 20 63 61 6e 27 74 20 62 65 20 72 75 6e  hey can't be run
2850: 20 6f 6e 20 77 69 6e 64 6f 77 73 20 62 65 63 61   on windows beca
2860: 75 73 65 20 74 68 65 20 77 69 6e 64 6f 77 73 20  use the windows 
2870: 76 65 72 73 69 6f 6e 20 6f 66 20 0a 23 20 53 51  version of .# SQ
2880: 4c 69 74 65 20 68 6f 6c 64 73 20 61 20 6d 61 6e  Lite holds a man
2890: 64 61 74 6f 72 79 20 65 78 63 6c 75 73 69 76 65  datory exclusive
28a0: 20 6c 6f 63 6b 20 6f 6e 20 6a 6f 75 72 6e 61 6c   lock on journal
28b0: 20 66 69 6c 65 73 20 69 74 20 68 61 73 20 6f 70   files it has op
28c0: 65 6e 2e 0a 23 20 0a 23 20 54 68 65 79 20 63 61  en..# .# They ca
28d0: 6e 6e 6f 74 20 62 65 20 72 75 6e 20 64 75 72 69  nnot be run duri
28e0: 6e 67 20 74 68 65 20 6a 6f 75 72 6e 61 6c 74 65  ng the journalte
28f0: 73 74 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 62  st permutation b
2900: 65 63 61 75 73 65 20 0a 23 20 22 50 52 41 47 4d  ecause .# "PRAGM
2910: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  A synchronous = 
2920: 30 22 20 69 73 20 75 73 65 64 2e 0a 23 0a 69 66  0" is used..#.if
2930: 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   {$tcl_platform(
2940: 70 6c 61 74 66 6f 72 6d 29 21 3d 22 77 69 6e 64  platform)!="wind
2950: 6f 77 73 22 20 26 26 20 28 0a 20 20 20 20 20 20  ows" && (.      
2960: 30 20 3d 3d 20 5b 69 6e 66 6f 20 65 78 69 73 74  0 == [info exist
2970: 73 20 3a 3a 70 65 72 6d 75 74 61 74 69 6f 6e 73  s ::permutations
2980: 5f 74 65 73 74 5f 70 72 65 66 69 78 5d 20 0a 20  _test_prefix] . 
2990: 20 20 7c 7c 20 24 3a 3a 70 65 72 6d 75 74 61 74    || $::permutat
29a0: 69 6f 6e 73 5f 74 65 73 74 5f 70 72 65 66 69 78  ions_test_prefix
29b0: 20 6e 65 20 22 6a 6f 75 72 6e 61 6c 74 65 73 74   ne "journaltest
29c0: 22 0a 29 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 70  ".)} {.do_test p
29d0: 61 67 65 72 2d 36 2e 31 20 7b 0a 20 20 66 69 6c  ager-6.1 {.  fil
29e0: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
29f0: 74 65 73 74 32 2e 64 62 0a 20 20 66 69 6c 65 20  test2.db.  file 
2a00: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
2a10: 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  st2.db-journal. 
2a20: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
2a30: 74 32 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  t2.db.  execsql 
2a40: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
2a50: 63 68 72 6f 6e 6f 75 73 20 3d 20 30 3b 0a 20 20  chronous = 0;.  
2a60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
2a70: 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  bc(a, b, c);.   
2a80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
2a90: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61   VALUES(1, 2, ra
2aa0: 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b  ndstr(200,200));
2ab0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2ac0: 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20 32   abc VALUES(1, 2
2ad0: 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30  , randstr(200,20
2ae0: 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0));.    INSERT 
2af0: 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53 28  INTO abc VALUES(
2b00: 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28 32 30  1, 2, randstr(20
2b10: 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49 4e 53  0,200));.    INS
2b20: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c  ERT INTO abc VAL
2b30: 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64 73 74  UES(1, 2, randst
2b40: 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20 20 20  r(200,200));.   
2b50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
2b60: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61   VALUES(1, 2, ra
2b70: 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b  ndstr(200,200));
2b80: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2b90: 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20 32   abc VALUES(1, 2
2ba0: 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30  , randstr(200,20
2bb0: 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0));.    INSERT 
2bc0: 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53 28  INTO abc VALUES(
2bd0: 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28 32 30  1, 2, randstr(20
2be0: 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49 4e 53  0,200));.    INS
2bf0: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c  ERT INTO abc VAL
2c00: 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64 73 74  UES(1, 2, randst
2c10: 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20 20 20  r(200,200));.   
2c20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
2c30: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61   VALUES(1, 2, ra
2c40: 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b  ndstr(200,200));
2c50: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
2c60: 55 50 44 41 54 45 20 61 62 63 20 53 45 54 20 63  UPDATE abc SET c
2c70: 20 3d 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32   = randstr(200,2
2c80: 30 30 29 3b 0a 20 20 7d 20 64 62 32 0a 20 20 63  00);.  } db2.  c
2c90: 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64  opy_file test2.d
2ca0: 62 20 74 65 73 74 2e 64 62 0a 20 20 63 6f 70 79  b test.db.  copy
2cb0: 5f 66 69 6c 65 20 74 65 73 74 32 2e 64 62 2d 6a  _file test2.db-j
2cc0: 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64 62 2d 6a  ournal test.db-j
2cd0: 6f 75 72 6e 61 6c 0a 0a 20 20 73 65 74 20 66 20  ournal..  set f 
2ce0: 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f  [open test.db-jo
2cf0: 75 72 6e 61 6c 20 61 5d 0a 20 20 66 63 6f 6e 66  urnal a].  fconf
2d00: 69 67 75 72 65 20 24 66 20 2d 65 6e 63 6f 64 69  igure $f -encodi
2d10: 6e 67 20 62 69 6e 61 72 79 0a 20 20 73 65 65 6b  ng binary.  seek
2d20: 20 24 66 20 5b 65 78 70 72 20 5b 66 69 6c 65 20   $f [expr [file 
2d30: 73 69 7a 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75  size test.db-jou
2d40: 72 6e 61 6c 5d 20 2d 20 31 30 33 32 5d 20 73 74  rnal] - 1032] st
2d50: 61 72 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65  art.  puts -none
2d60: 77 6c 69 6e 65 20 24 66 20 22 5c 30 30 5c 30 30  wline $f "\00\00
2d70: 5c 30 30 5c 30 30 22 0a 20 20 63 6c 6f 73 65 20  \00\00".  close 
2d80: 24 66 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62  $f..  sqlite3 db
2d90: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
2da0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2db0: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
2dc0: 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b 43  master.  }.} {{C
2dd0: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
2de0: 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f 74  a, b, c)}}..do_t
2df0: 65 73 74 20 70 61 67 65 72 2d 36 2e 32 20 7b 0a  est pager-6.2 {.
2e00: 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74    copy_file test
2e10: 32 2e 64 62 20 74 65 73 74 2e 64 62 0a 20 20 63  2.db test.db.  c
2e20: 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64  opy_file test2.d
2e30: 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64  b-journal test.d
2e40: 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20 20 73 65 74  b-journal..  set
2e50: 20 66 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62   f [open test.db
2e60: 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a 20 20 66 63  -journal a].  fc
2e70: 6f 6e 66 69 67 75 72 65 20 24 66 20 2d 65 6e 63  onfigure $f -enc
2e80: 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a 20 20 73  oding binary.  s
2e90: 65 65 6b 20 24 66 20 5b 65 78 70 72 20 5b 66 69  eek $f [expr [fi
2ea0: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 2d  le size test.db-
2eb0: 6a 6f 75 72 6e 61 6c 5d 20 2d 20 31 30 33 32 5d  journal] - 1032]
2ec0: 20 73 74 61 72 74 0a 20 20 70 75 74 73 20 2d 6e   start.  puts -n
2ed0: 6f 6e 65 77 6c 69 6e 65 20 24 66 20 22 5c 30 30  onewline $f "\00
2ee0: 5c 30 30 5c 30 30 5c 46 46 22 0a 20 20 63 6c 6f  \00\00\FF".  clo
2ef0: 73 65 20 24 66 0a 0a 20 20 73 71 6c 69 74 65 33  se $f..  sqlite3
2f00: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
2f10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2f20: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
2f30: 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20  te_master.  }.} 
2f40: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61  {{CREATE TABLE a
2f50: 62 63 28 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64  bc(a, b, c)}}..d
2f60: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 36 2e 33  o_test pager-6.3
2f70: 20 7b 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74   {.  copy_file t
2f80: 65 73 74 32 2e 64 62 20 74 65 73 74 2e 64 62 0a  est2.db test.db.
2f90: 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74    copy_file test
2fa0: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73  2.db-journal tes
2fb0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20 20  t.db-journal..  
2fc0: 73 65 74 20 66 20 5b 6f 70 65 6e 20 74 65 73 74  set f [open test
2fd0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a 20  .db-journal a]. 
2fe0: 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 20 2d   fconfigure $f -
2ff0: 65 6e 63 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a  encoding binary.
3000: 20 20 73 65 65 6b 20 24 66 20 5b 65 78 70 72 20    seek $f [expr 
3010: 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e  [file size test.
3020: 64 62 2d 6a 6f 75 72 6e 61 6c 5d 20 2d 20 34 5d  db-journal] - 4]
3030: 20 73 74 61 72 74 0a 20 20 70 75 74 73 20 2d 6e   start.  puts -n
3040: 6f 6e 65 77 6c 69 6e 65 20 24 66 20 22 5c 30 30  onewline $f "\00
3050: 5c 30 30 5c 30 30 5c 30 30 22 0a 20 20 63 6c 6f  \00\00\00".  clo
3060: 73 65 20 24 66 0a 0a 20 20 73 71 6c 69 74 65 33  se $f..  sqlite3
3070: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
3080: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
3090: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
30a0: 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20  te_master.  }.} 
30b0: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61  {{CREATE TABLE a
30c0: 62 63 28 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64  bc(a, b, c)}}..d
30d0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 36 2e 34  o_test pager-6.4
30e0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
30f0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
3100: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
3110: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
3120: 20 7d 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74   }.  copy_file t
3130: 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20  est2.db-journal 
3140: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 3b  test.db-journal;
3150: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 33 20 74  .  sqlite3 db3 t
3160: 65 73 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71  est.db.  catchsq
3170: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
3180: 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52     SELECT sql FR
3190: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
31a0: 3b 0a 20 20 7d 20 64 62 33 3b 0a 7d 20 7b 31 20  ;.  } db3;.} {1 
31b0: 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  {database is loc
31c0: 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61  ked}}.do_test pa
31d0: 67 65 72 2d 36 2e 34 2e 32 20 7b 0a 20 20 66 69  ger-6.4.2 {.  fi
31e0: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
31f0: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
3200: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3210: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
3220: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  M sqlite_master;
3230: 0a 20 20 7d 20 64 62 33 3b 0a 7d 20 7b 30 20 7b  .  } db3;.} {0 {
3240: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62  {CREATE TABLE ab
3250: 63 28 61 2c 20 62 2c 20 63 29 7d 7d 7d 0a 64 6f  c(a, b, c)}}}.do
3260: 5f 74 65 73 74 20 70 61 67 65 72 2d 36 2e 34 2e  _test pager-6.4.
3270: 33 20 7b 0a 20 20 64 62 33 20 63 6c 6f 73 65 0a  3 {.  db3 close.
3280: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3290: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d  COMMIT;.  }.} {}
32a0: 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  ..do_test pager-
32b0: 36 2e 35 20 7b 0a 20 20 63 6f 70 79 5f 66 69 6c  6.5 {.  copy_fil
32c0: 65 20 74 65 73 74 32 2e 64 62 20 74 65 73 74 2e  e test2.db test.
32d0: 64 62 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74  db.  copy_file t
32e0: 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20  est2.db-journal 
32f0: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
3300: 0a 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 74  .  set f [open t
3310: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 61  est.db-journal a
3320: 5d 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24  ].  fconfigure $
3330: 66 20 2d 65 6e 63 6f 64 69 6e 67 20 62 69 6e 61  f -encoding bina
3340: 72 79 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77  ry.  puts -nonew
3350: 6c 69 6e 65 20 24 66 20 22 68 65 6c 6c 6f 22 0a  line $f "hello".
3360: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
3370: 65 20 24 66 20 22 5c 78 30 30 5c 78 30 30 5c 78  e $f "\x00\x00\x
3380: 30 30 5c 78 30 35 5c 78 30 31 5c 78 30 32 5c 78  00\x05\x01\x02\x
3390: 30 33 5c 78 30 34 22 0a 20 20 70 75 74 73 20 2d  03\x04".  puts -
33a0: 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 20 22 5c 78  nonewline $f "\x
33b0: 64 39 5c 78 64 35 5c 78 30 35 5c 78 66 39 5c 78  d9\xd5\x05\xf9\x
33c0: 32 30 5c 78 61 31 5c 78 36 33 5c 78 64 37 22 0a  20\xa1\x63\xd7".
33d0: 20 20 63 6c 6f 73 65 20 24 66 0a 0a 20 20 73 71    close $f..  sq
33e0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
33f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3400: 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d   SELECT sql FROM
3410: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20   sqlite_master. 
3420: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
3430: 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29  BLE abc(a, b, c)
3440: 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  }}..do_test page
3450: 72 2d 36 2e 35 20 7b 0a 20 20 64 62 32 20 63 6c  r-6.5 {.  db2 cl
3460: 6f 73 65 0a 7d 20 7b 7d 0a 7d 0a 66 69 6e 69 73  ose.} {}.}.finis
3470: 68 5f 74 65 73 74 0a                             h_test.