/ Hex Artifact Content
Login

Artifact 7e1788cce372ca0302a787d6b44821e269d10790:


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