/ Hex Artifact Content
Login

Artifact ceeef3caac4bf2046c6c06827f1a87dc1dec30f3:


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 32 36 20 32 30 30 37 2f 30 33 2f 32 33   1.26 2007/03/23
0200: 20 31 38 3a 31 32 3a 30 37 20 64 61 6e 69 65 6c   18:12:07 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 72 5f 73 74 61 74 73 20 24 3a 3a 70 31  ager_stats $::p1
0790: 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65 20 31  .} {ref 1 page 1
07a0: 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73   max 10 size 0 s
07b0: 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69 74  tate 1 err 0 hit
07c0: 20 30 20 6d 69 73 73 20 31 20 6f 76 66 6c 20 30   0 miss 1 ovfl 0
07d0: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
07e0: 32 2e 33 2e 36 20 7b 0a 20 20 65 78 70 72 20 7b  2.3.6 {.  expr {
07f0: 24 3a 3a 67 31 3d 3d 24 3a 3a 67 78 7d 0a 7d 20  $::g1==$::gx}.} 
0800: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  {1}.do_test page
0810: 72 2d 32 2e 33 2e 37 20 7b 0a 20 20 70 61 67 65  r-2.3.7 {.  page
0820: 5f 75 6e 72 65 66 20 24 3a 3a 67 78 0a 20 20 70  _unref $::gx.  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 32 20 6d 61 78 20 31 30 20 73 69 7a  age 2 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 32 20 6f  0 hit 1 miss 2 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 32 20 6d 61 78 20 31 30 20  1 page 2 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: 32 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  2 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 32 20 6d 61 78 20 31 30 20 73 69  page 2 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 32  r 0 hit 2 miss 2
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 32 20 6d 61 78 20 31 30 20 73 69 7a 65  ge 2 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 32 20 6f 76   hit 2 miss 2 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 32 20 6d 61 78 20  ef 0 page 2 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 32 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 2 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: 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 7d 20  r_close $::p1.} 
1160: 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  {}..do_test page
1170: 72 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 76 20  r-3.1 {.  set v 
1180: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74  [catch {.    set
1190: 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f 6f 70 65   ::p1 [pager_ope
11a0: 6e 20 70 74 66 31 2e 64 62 20 31 35 5d 0a 20 20  n ptf1.db 15].  
11b0: 7d 20 6d 73 67 5d 0a 20 20 69 66 20 7b 24 76 7d  } msg].  if {$v}
11c0: 20 7b 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67   {lappend v $msg
11d0: 7d 0a 20 20 73 65 74 20 76 0a 7d 20 7b 30 7d 0a  }.  set v.} {0}.
11e0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e  do_test pager-3.
11f0: 32 20 7b 0a 20 20 70 61 67 65 72 5f 70 61 67 65  2 {.  pager_page
1200: 63 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d 20 7b 31  count $::p1.} {1
1210: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  }.do_test pager-
1220: 33 2e 33 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  3.3 {.  set v [c
1230: 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74 20 3a  atch {.    set :
1240: 3a 67 28 31 29 20 5b 70 61 67 65 5f 67 65 74 20  :g(1) [page_get 
1250: 24 3a 3a 70 31 20 31 5d 0a 20 20 7d 20 6d 73 67  $::p1 1].  } msg
1260: 5d 0a 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61 70  ].  if {$v} {lap
1270: 70 65 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20 73  pend v $msg}.  s
1280: 65 74 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  et v.} {0}.do_te
1290: 73 74 20 70 61 67 65 72 2d 33 2e 34 20 7b 0a 20  st pager-3.4 {. 
12a0: 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 28   page_read $::g(
12b0: 31 29 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a  1).} {Page-One}.
12c0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e  do_test pager-3.
12d0: 35 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  5 {.  for {set i
12e0: 20 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e   2} {$i<=20} {in
12f0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
1300: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a  gx [page_get $::
1310: 70 31 20 24 69 5d 0a 20 20 20 20 70 61 67 65 5f  p1 $i].    page_
1320: 77 72 69 74 65 20 24 67 78 20 22 50 61 67 65 2d  write $gx "Page-
1330: 24 69 22 0a 20 20 20 20 70 61 67 65 5f 75 6e 72  $i".    page_unr
1340: 65 66 20 24 67 78 0a 20 20 7d 0a 20 20 70 61 67  ef $gx.  }.  pag
1350: 65 72 5f 63 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a  er_commit $::p1.
1360: 7d 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20  } {}.for {set i 
1370: 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63  2} {$i<=20} {inc
1380: 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  r i} {.  do_test
1390: 20 70 61 67 65 72 2d 33 2e 36 2e 5b 65 78 70 72   pager-3.6.[expr
13a0: 20 7b 24 69 2d 31 7d 5d 20 5b 73 75 62 73 74 20   {$i-1}] [subst 
13b0: 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5c 5b 70  {.    set gx \[p
13c0: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24 69  age_get $::p1 $i
13d0: 5c 5d 0a 20 20 20 20 73 65 74 20 76 20 5c 5b 70  \].    set v \[p
13e0: 61 67 65 5f 72 65 61 64 20 5c 24 67 78 5c 5d 0a  age_read \$gx\].
13f0: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 5c      page_unref \
1400: 24 67 78 0a 20 20 20 20 73 65 74 20 76 0a 20 20  $gx.    set v.  
1410: 7d 5d 20 22 50 61 67 65 2d 24 69 22 0a 7d 0a 66  }] "Page-$i".}.f
1420: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1430: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=20} {incr i} {
1440: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 43  .  regsub -all C
1450: 4e 54 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67  NT {.    set ::g
1460: 31 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70  1 [page_get $::p
1470: 31 20 43 4e 54 5d 0a 20 20 20 20 73 65 74 20 3a  1 CNT].    set :
1480: 3a 67 32 20 5b 70 61 67 65 5f 67 65 74 20 24 3a  :g2 [page_get $:
1490: 3a 70 31 20 43 4e 54 5d 0a 20 20 20 20 73 65 74  :p1 CNT].    set
14a0: 20 3a 3a 76 78 20 5b 70 61 67 65 5f 72 65 61 64   ::vx [page_read
14b0: 20 24 3a 3a 67 32 5d 0a 20 20 20 20 65 78 70 72   $::g2].    expr
14c0: 20 7b 24 3a 3a 67 31 3d 3d 24 3a 3a 67 32 7d 0a   {$::g1==$::g2}.
14d0: 20 20 7d 20 24 69 20 62 6f 64 79 3b 0a 20 20 64    } $i body;.  d
14e0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 33 2e 37  o_test pager-3.7
14f0: 2e 24 69 2e 31 20 24 62 6f 64 79 20 7b 31 7d 0a  .$i.1 $body {1}.
1500: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 43 4e    regsub -all CN
1510: 54 20 7b 0a 20 20 20 20 70 61 67 65 5f 75 6e 72  T {.    page_unr
1520: 65 66 20 24 3a 3a 67 32 0a 20 20 20 20 73 65 74  ef $::g2.    set
1530: 20 76 79 20 5b 70 61 67 65 5f 72 65 61 64 20 24   vy [page_read $
1540: 3a 3a 67 31 5d 0a 20 20 20 20 65 78 70 72 20 7b  ::g1].    expr {
1550: 24 76 79 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20  $vy==$::vx}.  } 
1560: 24 69 20 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65  $i body;.  do_te
1570: 73 74 20 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e  st pager-3.7.$i.
1580: 32 20 24 62 6f 64 79 20 7b 31 7d 0a 20 20 72 65  2 $body {1}.  re
1590: 67 73 75 62 20 2d 61 6c 6c 20 43 4e 54 20 7b 0a  gsub -all CNT {.
15a0: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
15b0: 3a 3a 67 31 0a 20 20 20 20 73 65 74 20 67 78 20  ::g1.    set gx 
15c0: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
15d0: 43 4e 54 5d 0a 20 20 20 20 73 65 74 20 76 79 20  CNT].    set vy 
15e0: 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a  [page_read $gx].
15f0: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
1600: 67 78 0a 20 20 20 20 65 78 70 72 20 7b 24 76 79  gx.    expr {$vy
1610: 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20 24 69 20  ==$::vx}.  } $i 
1620: 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65 73 74 20  body;.  do_test 
1630: 70 61 67 65 72 2d 33 2e 37 2e 24 69 2e 33 20 24  pager-3.7.$i.3 $
1640: 62 6f 64 79 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65  body {1}.}.do_te
1650: 73 74 20 70 61 67 65 72 2d 33 2e 39 39 20 7b 0a  st pager-3.99 {.
1660: 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20 24 3a    pager_close $:
1670: 3a 70 31 0a 7d 20 7b 7d 0a 0a 23 20 74 65 73 74  :p1.} {}..# test
1680: 73 20 6f 66 20 74 68 65 20 63 68 65 63 6b 70 6f  s of the checkpo
1690: 69 6e 74 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e  int mechanism an
16a0: 64 20 61 70 69 0a 23 0a 64 6f 5f 74 65 73 74 20  d api.#.do_test 
16b0: 70 61 67 65 72 2d 34 2e 30 20 7b 0a 20 20 73 65  pager-4.0 {.  se
16c0: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
16d0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
16e0: 72 63 65 20 70 74 66 31 2e 64 62 0a 20 20 20 20  rce ptf1.db.    
16f0: 73 65 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f  set ::p1 [pager_
1700: 6f 70 65 6e 20 70 74 66 31 2e 64 62 20 31 35 5d  open ptf1.db 15]
1710: 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69 66 20 7b  .  } msg].  if {
1720: 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20 24  $v} {lappend v $
1730: 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a 7d 20 7b  msg}.  set v.} {
1740: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
1750: 2d 34 2e 31 20 7b 0a 20 20 73 65 74 20 67 31 20  -4.1 {.  set g1 
1760: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
1770: 31 5d 0a 20 20 70 61 67 65 5f 77 72 69 74 65 20  1].  page_write 
1780: 24 67 31 20 22 50 61 67 65 2d 31 20 76 30 22 0a  $g1 "Page-1 v0".
1790: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20    for {set i 2} 
17a0: 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69  {$i<=20} {incr i
17b0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5b  } {.    set gx [
17c0: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24  page_get $::p1 $
17d0: 69 5d 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74  i].    page_writ
17e0: 65 20 24 67 78 20 22 50 61 67 65 2d 24 69 20 76  e $gx "Page-$i v
17f0: 30 22 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65  0".    page_unre
1800: 66 20 24 67 78 0a 20 20 7d 0a 20 20 70 61 67 65  f $gx.  }.  page
1810: 72 5f 63 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a 7d  r_commit $::p1.}
1820: 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20 69 20 31   {}.for {set i 1
1830: 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$i<=20} {incr
1840: 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20   i} {.  do_test 
1850: 70 61 67 65 72 2d 34 2e 32 2e 24 69 20 7b 0a 20  pager-4.2.$i {. 
1860: 20 20 20 73 65 74 20 67 78 20 5b 70 61 67 65 5f     set gx [page_
1870: 67 65 74 20 24 70 31 20 24 69 5d 0a 20 20 20 20  get $p1 $i].    
1880: 73 65 74 20 76 20 5b 70 61 67 65 5f 72 65 61 64  set v [page_read
1890: 20 24 67 78 5d 0a 20 20 20 20 70 61 67 65 5f 75   $gx].    page_u
18a0: 6e 72 65 66 20 24 67 78 0a 20 20 20 20 73 65 74  nref $gx.    set
18b0: 20 76 0a 20 20 7d 20 22 50 61 67 65 2d 24 69 20   v.  } "Page-$i 
18c0: 76 30 22 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 61  v0".}.do_test pa
18d0: 67 65 72 2d 34 2e 33 20 7b 0a 20 20 6c 72 61 6e  ger-4.3 {.  lran
18e0: 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20  ge [pager_stats 
18f0: 24 3a 3a 70 31 5d 20 30 20 31 0a 7d 20 7b 72 65  $::p1] 0 1.} {re
1900: 66 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  f 1}.do_test pag
1910: 65 72 2d 34 2e 34 20 7b 0a 20 20 6c 72 61 6e 67  er-4.4 {.  lrang
1920: 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24  e [pager_stats $
1930: 3a 3a 70 31 5d 20 38 20 39 0a 7d 20 7b 73 74 61  ::p1] 8 9.} {sta
1940: 74 65 20 31 7d 0a 0a 66 6f 72 20 7b 73 65 74 20  te 1}..for {set 
1950: 69 20 31 7d 20 7b 24 69 3c 32 30 7d 20 7b 69 6e  i 1} {$i<20} {in
1960: 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  cr i} {.  do_tes
1970: 74 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 30  t pager-4.5.$i.0
1980: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b   {.    set res {
1990: 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  }.    for {set j
19a0: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
19b0: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
19c0: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
19d0: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74  p1 $j].      set
19e0: 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61   value [page_rea
19f0: 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67  d $gx].      pag
1a00: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
1a10: 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22    set shouldbe "
1a20: 50 61 67 65 2d 24 6a 20 76 5b 65 78 70 72 20 7b  Page-$j v[expr {
1a30: 24 69 2d 31 7d 5d 22 0a 20 20 20 20 20 20 69 66  $i-1}]".      if
1a40: 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c   {$value!=$shoul
1a50: 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c  dbe} {.        l
1a60: 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c 75  append res $valu
1a70: 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20 20  e $shouldbe.    
1a80: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65    }.    }.    se
1a90: 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64  t res.  } {}.  d
1aa0: 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35  o_test pager-4.5
1ab0: 2e 24 69 2e 31 20 7b 0a 20 20 20 20 70 61 67 65  .$i.1 {.    page
1ac0: 5f 77 72 69 74 65 20 24 67 31 20 22 50 61 67 65  _write $g1 "Page
1ad0: 2d 31 20 76 24 69 22 0a 20 20 20 20 6c 72 61 6e  -1 v$i".    lran
1ae0: 67 65 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20  ge [pager_stats 
1af0: 24 70 31 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74  $p1] 8 9.  } {st
1b00: 61 74 65 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74  ate 2}.  do_test
1b10: 20 70 61 67 65 72 2d 34 2e 35 2e 24 69 2e 32 20   pager-4.5.$i.2 
1b20: 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a  {.    for {set j
1b30: 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e   2} {$j<=20} {in
1b40: 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65  cr j} {.      se
1b50: 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24  t gx [page_get $
1b60: 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 70 61 67  p1 $j].      pag
1b70: 65 5f 77 72 69 74 65 20 24 67 78 20 22 50 61 67  e_write $gx "Pag
1b80: 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20  e-$j v$i".      
1b90: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
1ba0: 20 20 20 20 20 69 66 20 7b 24 6a 3d 3d 24 69 7d       if {$j==$i}
1bb0: 20 7b 0a 20 20 20 20 20 20 20 20 70 61 67 65 72   {.        pager
1bc0: 5f 73 74 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a  _stmt_begin $p1.
1bd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1be0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
1bf0: 61 67 65 72 2d 34 2e 35 2e 24 69 2e 33 20 7b 0a  ager-4.5.$i.3 {.
1c00: 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20      set res {}. 
1c10: 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d     for {set j 2}
1c20: 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20   {$j<=20} {incr 
1c30: 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67  j} {.      set g
1c40: 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20  x [page_get $p1 
1c50: 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20 76 61  $j].      set va
1c60: 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64 20 24  lue [page_read $
1c70: 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 75  gx].      page_u
1c80: 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20 73  nref $gx.      s
1c90: 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50 61 67  et shouldbe "Pag
1ca0: 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20  e-$j v$i".      
1cb0: 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f  if {$value!=$sho
1cc0: 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20  uldbe} {.       
1cd0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61   lappend res $va
1ce0: 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20  lue $shouldbe.  
1cf0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1d00: 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20  set res.  } {}. 
1d10: 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34   do_test pager-4
1d20: 2e 35 2e 24 69 2e 34 20 7b 0a 20 20 20 20 70 61  .5.$i.4 {.    pa
1d30: 67 65 72 5f 72 6f 6c 6c 62 61 63 6b 20 24 70 31  ger_rollback $p1
1d40: 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a  .    set res {}.
1d50: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32      for {set j 2
1d60: 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$j<=20} {incr
1d70: 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20   j} {.      set 
1d80: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31  gx [page_get $p1
1d90: 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20 76   $j].      set v
1da0: 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64 20  alue [page_read 
1db0: 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65 5f  $gx].      page_
1dc0: 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20  unref $gx.      
1dd0: 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50 61  set shouldbe "Pa
1de0: 67 65 2d 24 6a 20 76 5b 65 78 70 72 20 7b 24 69  ge-$j v[expr {$i
1df0: 2d 31 7d 5d 22 0a 20 20 20 20 20 20 69 66 20 7b  -1}]".      if {
1e00: 24 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62  $value!=$shouldb
1e10: 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  e} {.        lap
1e20: 70 65 6e 64 20 72 65 73 20 24 76 61 6c 75 65 20  pend res $value 
1e30: 24 73 68 6f 75 6c 64 62 65 0a 20 20 20 20 20 20  $shouldbe.      
1e40: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  }.    }.    set 
1e50: 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  res.  } {}.  do_
1e60: 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e 24  test pager-4.5.$
1e70: 69 2e 35 20 7b 0a 20 20 20 20 70 61 67 65 5f 77  i.5 {.    page_w
1e80: 72 69 74 65 20 24 67 31 20 22 50 61 67 65 2d 31  rite $g1 "Page-1
1e90: 20 76 24 69 22 0a 20 20 20 20 6c 72 61 6e 67 65   v$i".    lrange
1ea0: 20 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24 70   [pager_stats $p
1eb0: 31 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74 61 74  1] 8 9.  } {stat
1ec0: 65 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  e 2}.  do_test p
1ed0: 61 67 65 72 2d 34 2e 35 2e 24 69 2e 36 20 7b 0a  ager-4.5.$i.6 {.
1ee0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32      for {set j 2
1ef0: 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72  } {$j<=20} {incr
1f00: 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20   j} {.      set 
1f10: 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31  gx [page_get $p1
1f20: 20 24 6a 5d 0a 20 20 20 20 20 20 70 61 67 65 5f   $j].      page_
1f30: 77 72 69 74 65 20 24 67 78 20 22 50 61 67 65 2d  write $gx "Page-
1f40: 24 6a 20 76 24 69 22 0a 20 20 20 20 20 20 70 61  $j v$i".      pa
1f50: 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20  ge_unref $gx.   
1f60: 20 20 20 69 66 20 7b 24 6a 3d 3d 24 69 7d 20 7b     if {$j==$i} {
1f70: 0a 20 20 20 20 20 20 20 20 70 61 67 65 72 5f 73  .        pager_s
1f80: 74 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a 20 20  tmt_begin $p1.  
1f90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
1fa0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67  {}.  do_test pag
1fb0: 65 72 2d 34 2e 35 2e 24 69 2e 37 20 7b 0a 20 20  er-4.5.$i.7 {.  
1fc0: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 72 6f 6c    pager_stmt_rol
1fd0: 6c 62 61 63 6b 20 24 70 31 0a 20 20 20 20 66 6f  lback $p1.    fo
1fe0: 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c  r {set j 2} {$j<
1ff0: 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a  =20} {incr j} {.
2000: 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61        set gx [pa
2010: 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20  ge_get $p1 $j]. 
2020: 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b       set value [
2030: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
2040: 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20       page_unref 
2050: 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b 24 6a  $gx.      if {$j
2060: 3c 3d 24 69 20 7c 7c 20 24 69 3d 3d 31 7d 20 7b  <=$i || $i==1} {
2070: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 68 6f  .        set sho
2080: 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20 76  uldbe "Page-$j v
2090: 24 69 22 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  $i".      } else
20a0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   {.        set s
20b0: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
20c0: 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22   v[expr {$i-1}]"
20d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20e0: 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75  f {$value!=$shou
20f0: 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20  ldbe} {.        
2100: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c  lappend res $val
2110: 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20  ue $shouldbe.   
2120: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
2130: 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20  et res.  } {}.  
2140: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e  do_test pager-4.
2150: 35 2e 24 69 2e 38 20 7b 0a 20 20 20 20 66 6f 72  5.$i.8 {.    for
2160: 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c 3d   {set j 2} {$j<=
2170: 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a 20  20} {incr j} {. 
2180: 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61 67       set gx [pag
2190: 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20 20  e_get $p1 $j].  
21a0: 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24      page_write $
21b0: 67 78 20 22 50 61 67 65 2d 24 6a 20 76 24 69 22  gx "Page-$j v$i"
21c0: 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65  .      page_unre
21d0: 66 20 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b  f $gx.      if {
21e0: 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20 20 20 20  $j==$i} {.      
21f0: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 62 65 67    pager_stmt_beg
2200: 69 6e 20 24 70 31 0a 20 20 20 20 20 20 7d 0a 20  in $p1.      }. 
2210: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
2220: 5f 74 65 73 74 20 70 61 67 65 72 2d 34 2e 35 2e  _test pager-4.5.
2230: 24 69 2e 39 20 7b 0a 20 20 20 20 70 61 67 65 72  $i.9 {.    pager
2240: 5f 73 74 6d 74 5f 63 6f 6d 6d 69 74 20 24 70 31  _stmt_commit $p1
2250: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20  .    for {set j 
2260: 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63  2} {$j<=20} {inc
2270: 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  r j} {.      set
2280: 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70   gx [page_get $p
2290: 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65 74 20  1 $j].      set 
22a0: 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65 61 64  value [page_read
22b0: 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61 67 65   $gx].      page
22c0: 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20  _unref $gx.     
22d0: 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20 22 50   set shouldbe "P
22e0: 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20 20 20  age-$j v$i".    
22f0: 20 20 69 66 20 7b 24 76 61 6c 75 65 21 3d 24 73    if {$value!=$s
2300: 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20  houldbe} {.     
2310: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
2320: 76 61 6c 75 65 20 24 73 68 6f 75 6c 64 62 65 0a  value $shouldbe.
2330: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2340: 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d    set res.  } {}
2350: 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72  .  do_test pager
2360: 2d 34 2e 35 2e 24 69 2e 31 30 20 7b 0a 20 20 20  -4.5.$i.10 {.   
2370: 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 70   pager_commit $p
2380: 31 0a 20 20 20 20 6c 72 61 6e 67 65 20 5b 70 61  1.    lrange [pa
2390: 67 65 72 5f 73 74 61 74 73 20 24 70 31 5d 20 38  ger_stats $p1] 8
23a0: 20 39 0a 20 20 7d 20 7b 73 74 61 74 65 20 31 7d   9.  } {state 1}
23b0: 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  .}..# Test that 
23c0: 6e 6f 74 68 69 6e 67 20 62 61 64 20 68 61 70 70  nothing bad happ
23d0: 65 6e 73 20 77 68 65 6e 20 73 71 6c 69 74 65 33  ens when sqlite3
23e0: 70 61 67 65 72 5f 73 65 74 5f 63 61 63 68 65 73  pager_set_caches
23f0: 69 7a 65 28 29 20 69 73 0a 23 20 63 61 6c 6c 65  ize() is.# calle
2400: 64 20 77 69 74 68 20 61 20 6e 65 67 61 74 69 76  d with a negativ
2410: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 64 6f 5f 74  e argument..do_t
2420: 65 73 74 20 70 61 67 65 72 2d 34 2e 36 2e 31 20  est pager-4.6.1 
2430: 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20  {.  pager_close 
2440: 5b 70 61 67 65 72 5f 6f 70 65 6e 20 70 74 66 32  [pager_open ptf2
2450: 2e 64 62 20 2d 31 35 5d 0a 7d 20 7b 7d 0a 0a 23  .db -15].} {}..#
2460: 20 54 65 73 74 20 74 72 75 6e 63 61 74 65 20 6f   Test truncate o
2470: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  n an in-memory d
2480: 61 74 61 62 61 73 65 20 69 73 20 4f 6b 2e 0a 69  atabase is Ok..i
2490: 66 63 61 70 61 62 6c 65 20 6d 65 6d 6f 72 79 64  fcapable memoryd
24a0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 61  b {.  do_test pa
24b0: 67 65 72 2d 34 2e 36 2e 32 20 7b 0a 20 20 20 20  ger-4.6.2 {.    
24c0: 73 65 74 20 3a 3a 70 32 20 5b 70 61 67 65 72 5f  set ::p2 [pager_
24d0: 6f 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a 20 31 30  open :memory: 10
24e0: 5d 0a 20 20 20 20 70 61 67 65 72 5f 74 72 75 6e  ].    pager_trun
24f0: 63 61 74 65 20 24 3a 3a 70 32 20 35 0a 20 20 7d  cate $::p2 5.  }
2500: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61   {}.  do_test pa
2510: 67 65 72 2d 34 2e 36 2e 33 20 7b 0a 20 20 20 20  ger-4.6.3 {.    
2520: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
2530: 69 3c 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  i<5} {incr i} {.
2540: 20 20 20 20 20 20 73 65 74 20 70 20 5b 70 61 67        set p [pag
2550: 65 5f 67 65 74 20 24 3a 3a 70 32 20 24 69 5d 0a  e_get $::p2 $i].
2560: 20 20 20 20 20 20 70 61 67 65 5f 77 72 69 74 65        page_write
2570: 20 24 70 20 22 50 61 67 65 20 24 69 22 0a 20 20   $p "Page $i".  
2580: 20 20 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74      pager_commit
2590: 20 24 3a 3a 70 32 0a 20 20 20 20 20 20 70 61 67   $::p2.      pag
25a0: 65 5f 75 6e 72 65 66 20 24 70 0a 20 20 20 20 7d  e_unref $p.    }
25b0: 0a 20 20 20 20 23 20 70 61 67 65 72 5f 74 72 75  .    # pager_tru
25c0: 6e 63 61 74 65 20 24 3a 3a 70 32 20 33 0a 20 20  ncate $::p2 3.  
25d0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
25e0: 61 67 65 72 2d 34 2e 36 2e 34 20 7b 0a 20 20 20  ager-4.6.4 {.   
25f0: 20 70 61 67 65 72 5f 63 6c 6f 73 65 20 24 3a 3a   pager_close $::
2600: 70 32 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64 6f 5f  p2.  } {}.}..do_
2610: 74 65 73 74 20 70 61 67 65 72 2d 34 2e 39 39 20  test pager-4.99 
2620: 7b 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20  {.  pager_close 
2630: 24 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 0a 0a 20 20  $::p1.} {}....  
2640: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
2650: 63 65 20 70 74 66 31 2e 64 62 0a 0a 7d 20 3b 23  ce ptf1.db..} ;#
2660: 20 65 6e 64 20 69 66 28 20 6e 6f 74 20 6d 65 6d   end if( not mem
2670: 3a 20 61 6e 64 20 68 61 73 20 70 61 67 65 72 5f  : and has pager_
2680: 6f 70 65 6e 20 63 6f 6d 6d 61 6e 64 20 29 3b 0a  open command );.
2690: 0a 69 66 20 30 20 7b 0a 23 20 54 69 63 6b 65 74  .if 0 {.# Ticket
26a0: 20 23 36 31 35 3a 20 61 6e 20 61 73 73 65 72 74   #615: an assert
26b0: 69 6f 6e 20 66 61 75 6c 74 20 69 6e 73 69 64 65  ion fault inside
26c0: 20 74 68 65 20 70 61 67 65 72 2e 20 20 49 74 20   the pager.  It 
26d0: 69 73 20 61 20 62 65 6e 69 67 6e 0a 23 20 66 61  is a benign.# fa
26e0: 75 6c 74 2c 20 62 75 74 20 77 65 20 6d 69 67 68  ult, but we migh
26f0: 74 20 61 73 20 77 65 6c 6c 20 74 65 73 74 20 66  t as well test f
2700: 6f 72 20 69 74 2e 0a 23 0a 64 6f 5f 74 65 73 74  or it..#.do_test
2710: 20 70 61 67 65 72 2d 35 2e 31 20 7b 0a 20 20 73   pager-5.1 {.  s
2720: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2730: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
2740: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
2750: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
2760: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
2770: 68 72 6f 6e 6f 75 73 3d 6f 66 66 3b 0a 20 20 20  hronous=off;.   
2780: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
2790: 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  }.}..# The follo
27a0: 77 69 6e 67 20 74 65 73 74 73 20 63 6f 76 65 72  wing tests cover
27b0: 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 68 6f   rolling back ho
27c0: 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  t journal files.
27d0: 20 0a 23 20 54 68 65 79 20 63 61 6e 27 74 20 62   .# They can't b
27e0: 65 20 72 75 6e 20 6f 6e 20 77 69 6e 64 6f 77 73  e run on windows
27f0: 20 62 65 63 61 75 73 65 20 74 68 65 20 77 69 6e   because the win
2800: 64 6f 77 73 20 76 65 72 73 69 6f 6e 20 6f 66 20  dows version of 
2810: 0a 23 20 53 51 4c 69 74 65 20 68 6f 6c 64 73 20  .# SQLite holds 
2820: 61 20 6d 61 6e 64 61 74 6f 72 79 20 65 78 63 6c  a mandatory excl
2830: 75 73 69 76 65 20 6c 6f 63 6b 20 6f 6e 20 6a 6f  usive lock on jo
2840: 75 72 6e 61 6c 20 66 69 6c 65 73 20 69 74 20 68  urnal files it h
2850: 61 73 20 6f 70 65 6e 2e 0a 23 0a 69 66 20 7b 24  as open..#.if {$
2860: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61  tcl_platform(pla
2870: 74 66 6f 72 6d 29 21 3d 22 77 69 6e 64 6f 77 73  tform)!="windows
2880: 22 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 70 61 67  "} {.do_test pag
2890: 65 72 2d 36 2e 31 20 7b 0a 20 20 66 69 6c 65 20  er-6.1 {.  file 
28a0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
28b0: 73 74 32 2e 64 62 0a 20 20 66 69 6c 65 20 64 65  st2.db.  file de
28c0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
28d0: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73  2.db-journal.  s
28e0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
28f0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
2900: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
2910: 72 6f 6e 6f 75 73 20 3d 20 30 3b 0a 20 20 20 20  ronous = 0;.    
2920: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63  CREATE TABLE abc
2930: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49  (a, b, c);.    I
2940: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56  NSERT INTO abc V
2950: 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64  ALUES(1, 2, rand
2960: 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20  str(200,200));. 
2970: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
2980: 62 63 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  bc VALUES(1, 2, 
2990: 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29  randstr(200,200)
29a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
29b0: 54 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c  TO abc VALUES(1,
29c0: 20 32 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c   2, randstr(200,
29d0: 32 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  200));.    INSER
29e0: 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45  T INTO abc VALUE
29f0: 53 28 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28  S(1, 2, randstr(
2a00: 32 30 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49  200,200));.    I
2a10: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56  NSERT INTO abc V
2a20: 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64  ALUES(1, 2, rand
2a30: 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20  str(200,200));. 
2a40: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
2a50: 62 63 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  bc VALUES(1, 2, 
2a60: 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30 29  randstr(200,200)
2a70: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2a80: 54 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c  TO abc VALUES(1,
2a90: 20 32 2c 20 72 61 6e 64 73 74 72 28 32 30 30 2c   2, randstr(200,
2aa0: 32 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  200));.    INSER
2ab0: 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45  T INTO abc VALUE
2ac0: 53 28 31 2c 20 32 2c 20 72 61 6e 64 73 74 72 28  S(1, 2, randstr(
2ad0: 32 30 30 2c 32 30 30 29 29 3b 0a 20 20 20 20 49  200,200));.    I
2ae0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56  NSERT INTO abc V
2af0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 72 61 6e 64  ALUES(1, 2, rand
2b00: 73 74 72 28 32 30 30 2c 32 30 30 29 29 3b 0a 20  str(200,200));. 
2b10: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50     BEGIN;.    UP
2b20: 44 41 54 45 20 61 62 63 20 53 45 54 20 63 20 3d  DATE abc SET c =
2b30: 20 72 61 6e 64 73 74 72 28 32 30 30 2c 32 30 30   randstr(200,200
2b40: 29 3b 0a 20 20 7d 20 64 62 32 0a 20 20 63 6f 70  );.  } db2.  cop
2b50: 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64 62 20  y_file test2.db 
2b60: 74 65 73 74 2e 64 62 0a 20 20 63 6f 70 79 5f 66  test.db.  copy_f
2b70: 69 6c 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75  ile test2.db-jou
2b80: 72 6e 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75  rnal test.db-jou
2b90: 72 6e 61 6c 0a 0a 20 20 73 65 74 20 66 20 5b 6f  rnal..  set f [o
2ba0: 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  pen test.db-jour
2bb0: 6e 61 6c 20 61 5d 0a 20 20 66 63 6f 6e 66 69 67  nal a].  fconfig
2bc0: 75 72 65 20 24 66 20 2d 65 6e 63 6f 64 69 6e 67  ure $f -encoding
2bd0: 20 62 69 6e 61 72 79 0a 20 20 73 65 65 6b 20 24   binary.  seek $
2be0: 66 20 5b 65 78 70 72 20 5b 66 69 6c 65 20 73 69  f [expr [file si
2bf0: 7a 65 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  ze test.db-journ
2c00: 61 6c 5d 20 2d 20 31 30 33 32 5d 20 73 74 61 72  al] - 1032] star
2c10: 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c  t.  puts -nonewl
2c20: 69 6e 65 20 24 66 20 22 5c 30 30 5c 30 30 5c 30  ine $f "\00\00\0
2c30: 30 5c 30 30 22 0a 20 20 63 6c 6f 73 65 20 24 66  0\00".  close $f
2c40: 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  ..  sqlite3 db t
2c50: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
2c60: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71   {.    SELECT sq
2c70: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
2c80: 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45  ster.  }.} {{CRE
2c90: 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c  ATE TABLE abc(a,
2ca0: 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f 74 65 73   b, c)}}..do_tes
2cb0: 74 20 70 61 67 65 72 2d 36 2e 32 20 7b 0a 20 20  t pager-6.2 {.  
2cc0: 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e  copy_file test2.
2cd0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 63 6f 70  db test.db.  cop
2ce0: 79 5f 66 69 6c 65 20 74 65 73 74 32 2e 64 62 2d  y_file test2.db-
2cf0: 6a 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64 62 2d  journal test.db-
2d00: 6a 6f 75 72 6e 61 6c 0a 0a 20 20 73 65 74 20 66  journal..  set f
2d10: 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a   [open test.db-j
2d20: 6f 75 72 6e 61 6c 20 61 5d 0a 20 20 66 63 6f 6e  ournal a].  fcon
2d30: 66 69 67 75 72 65 20 24 66 20 2d 65 6e 63 6f 64  figure $f -encod
2d40: 69 6e 67 20 62 69 6e 61 72 79 0a 20 20 73 65 65  ing binary.  see
2d50: 6b 20 24 66 20 5b 65 78 70 72 20 5b 66 69 6c 65  k $f [expr [file
2d60: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 2d 6a 6f   size test.db-jo
2d70: 75 72 6e 61 6c 5d 20 2d 20 31 30 33 32 5d 20 73  urnal] - 1032] s
2d80: 74 61 72 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e  tart.  puts -non
2d90: 65 77 6c 69 6e 65 20 24 66 20 22 5c 30 30 5c 30  ewline $f "\00\0
2da0: 30 5c 30 30 5c 46 46 22 0a 20 20 63 6c 6f 73 65  0\00\FF".  close
2db0: 20 24 66 0a 0a 20 20 73 71 6c 69 74 65 33 20 64   $f..  sqlite3 d
2dc0: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
2dd0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2de0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
2df0: 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b  _master.  }.} {{
2e00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63  CREATE TABLE abc
2e10: 28 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f  (a, b, c)}}..do_
2e20: 74 65 73 74 20 70 61 67 65 72 2d 36 2e 33 20 7b  test pager-6.3 {
2e30: 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73  .  copy_file tes
2e40: 74 32 2e 64 62 20 74 65 73 74 2e 64 62 0a 20 20  t2.db test.db.  
2e50: 63 6f 70 79 5f 66 69 6c 65 20 74 65 73 74 32 2e  copy_file test2.
2e60: 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73 74 2e  db-journal test.
2e70: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20 20 73 65  db-journal..  se
2e80: 74 20 66 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64  t f [open test.d
2e90: 62 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a 20 20 66  b-journal a].  f
2ea0: 63 6f 6e 66 69 67 75 72 65 20 24 66 20 2d 65 6e  configure $f -en
2eb0: 63 6f 64 69 6e 67 20 62 69 6e 61 72 79 0a 20 20  coding binary.  
2ec0: 73 65 65 6b 20 24 66 20 5b 65 78 70 72 20 5b 66  seek $f [expr [f
2ed0: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
2ee0: 2d 6a 6f 75 72 6e 61 6c 5d 20 2d 20 34 5d 20 73  -journal] - 4] s
2ef0: 74 61 72 74 0a 20 20 70 75 74 73 20 2d 6e 6f 6e  tart.  puts -non
2f00: 65 77 6c 69 6e 65 20 24 66 20 22 5c 30 30 5c 30  ewline $f "\00\0
2f10: 30 5c 30 30 5c 30 30 22 0a 20 20 63 6c 6f 73 65  0\00\00".  close
2f20: 20 24 66 0a 0a 20 20 73 71 6c 69 74 65 33 20 64   $f..  sqlite3 d
2f30: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
2f40: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2f50: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
2f60: 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b 7b  _master.  }.} {{
2f70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63  CREATE TABLE abc
2f80: 28 61 2c 20 62 2c 20 63 29 7d 7d 0a 0a 64 6f 5f  (a, b, c)}}..do_
2f90: 74 65 73 74 20 70 61 67 65 72 2d 36 2e 34 2e 31  test pager-6.4.1
2fa0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2fb0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 53 45     BEGIN;.    SE
2fc0: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
2fd0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d  lite_master;.  }
2fe0: 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73  .  copy_file tes
2ff0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65  t2.db-journal te
3000: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 3b 0a 20  st.db-journal;. 
3010: 20 73 71 6c 69 74 65 33 20 64 62 33 20 74 65 73   sqlite3 db3 tes
3020: 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  t.db.  catchsql 
3030: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
3040: 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d   SELECT sql FROM
3050: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
3060: 20 20 7d 20 64 62 33 3b 0a 7d 20 7b 31 20 7b 64    } db3;.} {1 {d
3070: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
3080: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  d}}.do_test page
3090: 72 2d 36 2e 34 2e 32 20 7b 0a 20 20 66 69 6c 65  r-6.4.2 {.  file
30a0: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74   delete -force t
30b0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  est.db-journal. 
30c0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
30d0: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
30e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
30f0: 20 7d 20 64 62 33 3b 0a 7d 20 7b 30 20 7b 7b 43   } db3;.} {0 {{C
3100: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
3110: 61 2c 20 62 2c 20 63 29 7d 7d 7d 0a 64 6f 5f 74  a, b, c)}}}.do_t
3120: 65 73 74 20 70 61 67 65 72 2d 36 2e 34 2e 33 20  est pager-6.4.3 
3130: 7b 0a 20 20 64 62 33 20 63 6c 6f 73 65 0a 20 20  {.  db3 close.  
3140: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f  execsql {.    CO
3150: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  MMIT;.  }.} {}..
3160: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d 36 2e  do_test pager-6.
3170: 35 20 7b 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20  5 {.  copy_file 
3180: 74 65 73 74 32 2e 64 62 20 74 65 73 74 2e 64 62  test2.db test.db
3190: 0a 20 20 63 6f 70 79 5f 66 69 6c 65 20 74 65 73  .  copy_file tes
31a0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65  t2.db-journal te
31b0: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 20  st.db-journal.. 
31c0: 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 74 65 73   set f [open tes
31d0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 61 5d 0a  t.db-journal a].
31e0: 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 20    fconfigure $f 
31f0: 2d 65 6e 63 6f 64 69 6e 67 20 62 69 6e 61 72 79  -encoding binary
3200: 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69  .  puts -nonewli
3210: 6e 65 20 24 66 20 22 68 65 6c 6c 6f 22 0a 20 20  ne $f "hello".  
3220: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
3230: 24 66 20 22 5c 78 30 30 5c 78 30 30 5c 78 30 30  $f "\x00\x00\x00
3240: 5c 78 30 35 5c 78 30 31 5c 78 30 32 5c 78 30 33  \x05\x01\x02\x03
3250: 5c 78 30 34 22 0a 20 20 70 75 74 73 20 2d 6e 6f  \x04".  puts -no
3260: 6e 65 77 6c 69 6e 65 20 24 66 20 22 5c 78 64 39  newline $f "\xd9
3270: 5c 78 64 35 5c 78 30 35 5c 78 66 39 5c 78 32 30  \xd5\x05\xf9\x20
3280: 5c 78 61 31 5c 78 36 33 5c 78 64 37 22 0a 20 20  \xa1\x63\xd7".  
3290: 63 6c 6f 73 65 20 24 66 0a 0a 20 20 73 71 6c 69  close $f..  sqli
32a0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
32b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
32c0: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
32d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d  qlite_master.  }
32e0: 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  .} {{CREATE TABL
32f0: 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29 7d 7d  E abc(a, b, c)}}
3300: 0a 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 2d  ..do_test pager-
3310: 36 2e 35 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73  6.5 {.  db2 clos
3320: 65 0a 7d 20 7b 7d 0a 7d 0a 66 69 6e 69 73 68 5f  e.} {}.}.finish_
3330: 74 65 73 74 0a 0a 0a 0a                          test....