/ Hex Artifact Content
Login

Artifact 55469c7c1c1a54d6b32d7b3cc99001e90101a1ce:


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 32 2e 74 65 73 74 2c  Id: pager2.test,
01f0: 76 20 31 2e 32 20 32 30 30 34 2f 30 36 2f 30 39  v 1.2 2004/06/09
0200: 20 32 30 3a 30 33 3a 31 30 20 64 72 68 20 45 78   20:03:10 drh Ex
0210: 70 20 24 0a 0a 0a 73 65 74 20 74 65 73 74 64 69  p $...set testdi
0220: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0230: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0240: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0250: 63 6c 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 63 6f  cl..if {[info co
0260: 6d 6d 61 6e 64 73 20 70 61 67 65 72 5f 6f 70 65  mmands pager_ope
0270: 6e 5d 21 3d 22 22 7d 20 7b 0a 64 62 20 63 6c 6f  n]!=""} {.db clo
0280: 73 65 0a 0a 23 20 42 61 73 69 63 20 73 61 6e 69  se..# Basic sani
0290: 74 79 20 63 68 65 63 6b 2e 20 20 4f 70 65 6e 20  ty check.  Open 
02a0: 61 6e 64 20 63 6c 6f 73 65 20 61 20 70 61 67 65  and close a page
02b0: 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 61 67  r..#.do_test pag
02c0: 65 72 32 2d 31 2e 30 20 7b 0a 20 20 73 65 74 20  er2-1.0 {.  set 
02d0: 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73  v [catch {.    s
02e0: 65 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f 6f  et ::p1 [pager_o
02f0: 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a 20 31 30 5d  pen :memory: 10]
0300: 0a 20 20 7d 20 6d 73 67 5d 0a 7d 20 7b 30 7d 0a  .  } msg].} {0}.
0310: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 31  do_test pager2-1
0320: 2e 31 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  .1 {.  pager_sta
0330: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0340: 30 20 70 61 67 65 20 30 20 6d 61 78 20 31 30 20  0 page 0 max 10 
0350: 73 69 7a 65 20 30 20 73 74 61 74 65 20 30 20 65  size 0 state 0 e
0360: 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73 20  rr 0 hit 0 miss 
0370: 30 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  0 ovfl 0}.do_tes
0380: 74 20 70 61 67 65 72 32 2d 31 2e 32 20 7b 0a 20  t pager2-1.2 {. 
0390: 20 70 61 67 65 72 5f 70 61 67 65 63 6f 75 6e 74   pager_pagecount
03a0: 20 24 3a 3a 70 31 0a 7d 20 7b 30 7d 0a 64 6f 5f   $::p1.} {0}.do_
03b0: 74 65 73 74 20 70 61 67 65 72 32 2d 31 2e 33 20  test pager2-1.3 
03c0: 7b 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73 20  {.  pager_stats 
03d0: 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 30 20 70  $::p1.} {ref 0 p
03e0: 61 67 65 20 30 20 6d 61 78 20 31 30 20 73 69 7a  age 0 max 10 siz
03f0: 65 20 30 20 73 74 61 74 65 20 30 20 65 72 72 20  e 0 state 0 err 
0400: 30 20 68 69 74 20 30 20 6d 69 73 73 20 30 20 6f  0 hit 0 miss 0 o
0410: 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70  vfl 0}.do_test p
0420: 61 67 65 72 32 2d 31 2e 34 20 7b 0a 20 20 70 61  ager2-1.4 {.  pa
0430: 67 65 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31 0a  ger_close $::p1.
0440: 7d 20 7b 7d 0a 0a 23 20 54 72 79 20 74 6f 20 77  } {}..# Try to w
0450: 72 69 74 65 20 61 20 66 65 77 20 70 61 67 65 73  rite a few pages
0460: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 61 67 65  ..#.do_test page
0470: 72 32 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 76  r2-2.1 {.  set v
0480: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65   [catch {.    se
0490: 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f 6f 70  t ::p1 [pager_op
04a0: 65 6e 20 3a 6d 65 6d 6f 72 79 3a 20 31 30 5d 0a  en :memory: 10].
04b0: 20 20 7d 20 6d 73 67 5d 0a 7d 20 7b 30 7d 0a 23    } msg].} {0}.#
04c0: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32  do_test pager2-2
04d0: 2e 32 20 7b 0a 23 20 20 73 65 74 20 76 20 5b 63  .2 {.#  set v [c
04e0: 61 74 63 68 20 7b 0a 23 20 20 20 20 73 65 74 20  atch {.#    set 
04f0: 3a 3a 67 31 20 5b 70 61 67 65 5f 67 65 74 20 24  ::g1 [page_get $
0500: 3a 3a 70 31 20 30 5d 0a 23 20 20 7d 20 6d 73 67  ::p1 0].#  } msg
0510: 5d 0a 23 20 20 6c 61 70 70 65 6e 64 20 76 20 24  ].#  lappend v $
0520: 6d 73 67 0a 23 7d 20 7b 31 20 53 51 4c 49 54 45  msg.#} {1 SQLITE
0530: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
0540: 70 61 67 65 72 32 2d 32 2e 33 2e 31 20 7b 0a 20  pager2-2.3.1 {. 
0550: 20 73 65 74 20 3a 3a 67 78 20 5b 70 61 67 65 5f   set ::gx [page_
0560: 6c 6f 6f 6b 75 70 20 24 3a 3a 70 31 20 31 5d 0a  lookup $::p1 1].
0570: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  } {}.do_test pag
0580: 65 72 32 2d 32 2e 33 2e 32 20 7b 0a 20 20 70 61  er2-2.3.2 {.  pa
0590: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a  ger_stats $::p1.
05a0: 7d 20 7b 72 65 66 20 30 20 70 61 67 65 20 30 20  } {ref 0 page 0 
05b0: 6d 61 78 20 31 30 20 73 69 7a 65 20 30 20 73 74  max 10 size 0 st
05c0: 61 74 65 20 30 20 65 72 72 20 30 20 68 69 74 20  ate 0 err 0 hit 
05d0: 30 20 6d 69 73 73 20 30 20 6f 76 66 6c 20 30 7d  0 miss 0 ovfl 0}
05e0: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d  .do_test pager2-
05f0: 32 2e 33 2e 33 20 7b 0a 20 20 73 65 74 20 76 20  2.3.3 {.  set v 
0600: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 73 65 74  [catch {.    set
0610: 20 3a 3a 67 31 20 5b 70 61 67 65 5f 67 65 74 20   ::g1 [page_get 
0620: 24 3a 3a 70 31 20 31 5d 0a 20 20 7d 20 6d 73 67  $::p1 1].  } msg
0630: 5d 0a 20 20 69 66 20 7b 24 76 7d 20 7b 6c 61 70  ].  if {$v} {lap
0640: 70 65 6e 64 20 76 20 24 6d 73 67 7d 0a 20 20 73  pend v $msg}.  s
0650: 65 74 20 76 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  et v.} {0}.do_te
0660: 73 74 20 70 61 67 65 72 32 2d 32 2e 33 2e 33 20  st pager2-2.3.3 
0670: 7b 0a 20 20 70 61 67 65 72 5f 73 74 61 74 73 20  {.  pager_stats 
0680: 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20 31 20 70  $::p1.} {ref 1 p
0690: 61 67 65 20 31 20 6d 61 78 20 31 30 20 73 69 7a  age 1 max 10 siz
06a0: 65 20 30 20 73 74 61 74 65 20 31 20 65 72 72 20  e 0 state 1 err 
06b0: 30 20 68 69 74 20 30 20 6d 69 73 73 20 31 20 6f  0 hit 0 miss 1 o
06c0: 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70  vfl 0}.do_test p
06d0: 61 67 65 72 32 2d 32 2e 33 2e 34 20 7b 0a 20 20  ager2-2.3.4 {.  
06e0: 73 65 74 20 3a 3a 67 78 20 5b 70 61 67 65 5f 6c  set ::gx [page_l
06f0: 6f 6f 6b 75 70 20 24 3a 3a 70 31 20 31 5d 0a 20  ookup $::p1 1]. 
0700: 20 65 78 70 72 20 7b 24 3a 3a 67 78 21 3d 22 22   expr {$::gx!=""
0710: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
0720: 70 61 67 65 72 32 2d 32 2e 33 2e 35 20 7b 0a 20  pager2-2.3.5 {. 
0730: 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a   pager_stats $::
0740: 70 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65  p1.} {ref 1 page
0750: 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30   1 max 10 size 0
0760: 20 73 74 61 74 65 20 31 20 65 72 72 20 30 20 68   state 1 err 0 h
0770: 69 74 20 30 20 6d 69 73 73 20 31 20 6f 76 66 6c  it 0 miss 1 ovfl
0780: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65   0}.do_test page
0790: 72 32 2d 32 2e 33 2e 36 20 7b 0a 20 20 65 78 70  r2-2.3.6 {.  exp
07a0: 72 20 24 3a 3a 67 31 3d 3d 24 3a 3a 67 78 0a 7d  r $::g1==$::gx.}
07b0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {1}.do_test pag
07c0: 65 72 32 2d 32 2e 33 2e 37 20 7b 0a 20 20 70 61  er2-2.3.7 {.  pa
07d0: 67 65 5f 75 6e 72 65 66 20 24 3a 3a 67 78 0a 20  ge_unref $::gx. 
07e0: 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a   pager_stats $::
07f0: 70 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67 65  p1.} {ref 1 page
0800: 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 30   1 max 10 size 0
0810: 20 73 74 61 74 65 20 31 20 65 72 72 20 30 20 68   state 1 err 0 h
0820: 69 74 20 30 20 6d 69 73 73 20 31 20 6f 76 66 6c  it 0 miss 1 ovfl
0830: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65   0}.do_test page
0840: 72 32 2d 32 2e 34 20 7b 0a 20 20 70 61 67 65 72  r2-2.4 {.  pager
0850: 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b  _stats $::p1.} {
0860: 72 65 66 20 31 20 70 61 67 65 20 31 20 6d 61 78  ref 1 page 1 max
0870: 20 31 30 20 73 69 7a 65 20 30 20 73 74 61 74 65   10 size 0 state
0880: 20 31 20 65 72 72 20 30 20 68 69 74 20 30 20 6d   1 err 0 hit 0 m
0890: 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 1 ovfl 0}.do
08a0: 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32 2e 35  _test pager2-2.5
08b0: 20 7b 0a 20 20 70 61 67 65 72 5f 70 61 67 65 63   {.  pager_pagec
08c0: 6f 75 6e 74 20 24 3a 3a 70 31 0a 7d 20 7b 30 7d  ount $::p1.} {0}
08d0: 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d  .do_test pager2-
08e0: 32 2e 36 20 7b 0a 20 20 70 61 67 65 72 5f 73 74  2.6 {.  pager_st
08f0: 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66  ats $::p1.} {ref
0900: 20 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30   1 page 1 max 10
0910: 20 73 69 7a 65 20 30 20 73 74 61 74 65 20 31 20   size 0 state 1 
0920: 65 72 72 20 30 20 68 69 74 20 30 20 6d 69 73 73  err 0 hit 0 miss
0930: 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65   1 ovfl 0}.do_te
0940: 73 74 20 70 61 67 65 72 32 2d 32 2e 37 20 7b 0a  st pager2-2.7 {.
0950: 20 20 70 61 67 65 5f 6e 75 6d 62 65 72 20 24 3a    page_number $:
0960: 3a 67 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  :g1.} {1}.do_tes
0970: 74 20 70 61 67 65 72 32 2d 32 2e 38 20 7b 0a 20  t pager2-2.8 {. 
0980: 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67 31   page_read $::g1
0990: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 61  .} {}.do_test pa
09a0: 67 65 72 32 2d 32 2e 39 20 7b 0a 20 20 70 61 67  ger2-2.9 {.  pag
09b0: 65 5f 75 6e 72 65 66 20 24 3a 3a 67 31 0a 7d 20  e_unref $::g1.} 
09c0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  {}.do_test pager
09d0: 32 2d 32 2e 31 30 20 7b 0a 20 20 70 61 67 65 72  2-2.10 {.  pager
09e0: 5f 73 74 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b  _stats $::p1.} {
09f0: 72 65 66 20 30 20 70 61 67 65 20 31 20 6d 61 78  ref 0 page 1 max
0a00: 20 31 30 20 73 69 7a 65 20 30 20 73 74 61 74 65   10 size 0 state
0a10: 20 31 20 65 72 72 20 30 20 68 69 74 20 30 20 6d   1 err 0 hit 0 m
0a20: 69 73 73 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f  iss 1 ovfl 0}.do
0a30: 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32 2e 31  _test pager2-2.1
0a40: 31 20 7b 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b  1 {.  set ::g1 [
0a50: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31  page_get $::p1 1
0a60: 5d 0a 20 20 65 78 70 72 20 7b 24 3a 3a 67 31 21  ].  expr {$::g1!
0a70: 3d 30 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  =0}.} {1}.do_tes
0a80: 74 20 70 61 67 65 72 32 2d 32 2e 31 32 20 7b 0a  t pager2-2.12 {.
0a90: 20 20 70 61 67 65 5f 6e 75 6d 62 65 72 20 24 3a    page_number $:
0aa0: 3a 67 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  :g1.} {1}.do_tes
0ab0: 74 20 70 61 67 65 72 32 2d 32 2e 31 33 20 7b 0a  t pager2-2.13 {.
0ac0: 20 20 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a    pager_stats $:
0ad0: 3a 70 31 0a 7d 20 7b 72 65 66 20 31 20 70 61 67  :p1.} {ref 1 pag
0ae0: 65 20 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20  e 1 max 10 size 
0af0: 30 20 73 74 61 74 65 20 31 20 65 72 72 20 30 20  0 state 1 err 0 
0b00: 68 69 74 20 31 20 6d 69 73 73 20 31 20 6f 76 66  hit 1 miss 1 ovf
0b10: 6c 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67  l 0}.do_test pag
0b20: 65 72 32 2d 32 2e 31 34 20 7b 0a 20 20 73 65 74  er2-2.14 {.  set
0b30: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
0b40: 70 61 67 65 5f 77 72 69 74 65 20 24 3a 3a 67 31  page_write $::g1
0b50: 20 22 50 61 67 65 2d 4f 6e 65 22 0a 20 20 7d 20   "Page-One".  } 
0b60: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0b70: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
0b80: 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32 2e  o_test pager2-2.
0b90: 31 35 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  15 {.  pager_sta
0ba0: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0bb0: 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30 20  1 page 1 max 10 
0bc0: 73 69 7a 65 20 31 20 73 74 61 74 65 20 33 20 65  size 1 state 3 e
0bd0: 72 72 20 30 20 68 69 74 20 31 20 6d 69 73 73 20  rr 0 hit 1 miss 
0be0: 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  1 ovfl 0}.do_tes
0bf0: 74 20 70 61 67 65 72 32 2d 32 2e 31 36 20 7b 0a  t pager2-2.16 {.
0c00: 20 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a 67    page_read $::g
0c10: 31 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64  1.} {Page-One}.d
0c20: 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32 2e  o_test pager2-2.
0c30: 31 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  17 {.  set v [ca
0c40: 74 63 68 20 7b 0a 20 20 20 20 70 61 67 65 72 5f  tch {.    pager_
0c50: 63 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a 20 20 7d  commit $::p1.  }
0c60: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0c70: 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a  v $msg.} {0 {}}.
0c80: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32  do_test pager2-2
0c90: 2e 32 30 20 7b 0a 20 20 70 61 67 65 72 5f 73 74  .20 {.  pager_st
0ca0: 61 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66  ats $::p1.} {ref
0cb0: 20 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30   1 page 1 max 10
0cc0: 20 73 69 7a 65 20 31 20 73 74 61 74 65 20 31 20   size 1 state 1 
0cd0: 65 72 72 20 30 20 68 69 74 20 31 20 6d 69 73 73  err 0 hit 1 miss
0ce0: 20 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65   1 ovfl 0}.do_te
0cf0: 73 74 20 70 61 67 65 72 32 2d 32 2e 31 39 20 7b  st pager2-2.19 {
0d00: 0a 20 20 70 61 67 65 72 5f 70 61 67 65 63 6f 75  .  pager_pagecou
0d10: 6e 74 20 24 3a 3a 70 31 0a 7d 20 7b 31 7d 0a 64  nt $::p1.} {1}.d
0d20: 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 32 2e  o_test pager2-2.
0d30: 32 31 20 7b 0a 20 20 70 61 67 65 72 5f 73 74 61  21 {.  pager_sta
0d40: 74 73 20 24 3a 3a 70 31 0a 7d 20 7b 72 65 66 20  ts $::p1.} {ref 
0d50: 31 20 70 61 67 65 20 31 20 6d 61 78 20 31 30 20  1 page 1 max 10 
0d60: 73 69 7a 65 20 31 20 73 74 61 74 65 20 31 20 65  size 1 state 1 e
0d70: 72 72 20 30 20 68 69 74 20 31 20 6d 69 73 73 20  rr 0 hit 1 miss 
0d80: 31 20 6f 76 66 6c 20 30 7d 0a 64 6f 5f 74 65 73  1 ovfl 0}.do_tes
0d90: 74 20 70 61 67 65 72 32 2d 32 2e 32 32 20 7b 0a  t pager2-2.22 {.
0da0: 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a    page_unref $::
0db0: 67 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  g1.} {}.do_test 
0dc0: 70 61 67 65 72 32 2d 32 2e 32 33 20 7b 0a 20 20  pager2-2.23 {.  
0dd0: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 70  pager_stats $::p
0de0: 31 0a 7d 20 7b 72 65 66 20 30 20 70 61 67 65 20  1.} {ref 0 page 
0df0: 31 20 6d 61 78 20 31 30 20 73 69 7a 65 20 31 20  1 max 10 size 1 
0e00: 73 74 61 74 65 20 31 20 65 72 72 20 30 20 68 69  state 1 err 0 hi
0e10: 74 20 31 20 6d 69 73 73 20 31 20 6f 76 66 6c 20  t 1 miss 1 ovfl 
0e20: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
0e30: 32 2d 32 2e 32 34 20 7b 0a 20 20 73 65 74 20 76  2-2.24 {.  set v
0e40: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 70 61   [catch {.    pa
0e50: 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 0a 20  ge_get $::p1 1. 
0e60: 20 7d 20 3a 3a 67 31 5d 0a 20 20 69 66 20 7b 24   } ::g1].  if {$
0e70: 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76 20 24 3a  v} {lappend v $:
0e80: 3a 67 31 7d 0a 20 20 73 65 74 20 76 0a 7d 20 7b  :g1}.  set v.} {
0e90: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72  0}.do_test pager
0ea0: 32 2d 32 2e 32 35 20 7b 0a 20 20 70 61 67 65 5f  2-2.25 {.  page_
0eb0: 72 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 50 61  read $::g1.} {Pa
0ec0: 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20  ge-One}.do_test 
0ed0: 70 61 67 65 72 32 2d 32 2e 32 36 20 7b 0a 20 20  pager2-2.26 {.  
0ee0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
0ef0: 20 20 20 70 61 67 65 5f 77 72 69 74 65 20 24 3a     page_write $:
0f00: 3a 67 31 20 7b 70 61 67 65 2d 6f 6e 65 7d 0a 20  :g1 {page-one}. 
0f10: 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e   } msg].  lappen
0f20: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
0f30: 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32  }.do_test pager2
0f40: 2d 32 2e 32 37 20 7b 0a 20 20 70 61 67 65 5f 72  -2.27 {.  page_r
0f50: 65 61 64 20 24 3a 3a 67 31 0a 7d 20 7b 70 61 67  ead $::g1.} {pag
0f60: 65 2d 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 70  e-one}.do_test p
0f70: 61 67 65 72 32 2d 32 2e 32 38 20 7b 0a 20 20 73  ager2-2.28 {.  s
0f80: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20  et v [catch {.  
0f90: 20 20 70 61 67 65 72 5f 72 6f 6c 6c 62 61 63 6b    pager_rollback
0fa0: 20 24 3a 3a 70 31 0a 20 20 7d 20 6d 73 67 5d 0a   $::p1.  } msg].
0fb0: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
0fc0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0fd0: 74 20 70 61 67 65 72 32 2d 32 2e 32 39 20 7b 0a  t pager2-2.29 {.
0fe0: 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a 3a    page_unref $::
0ff0: 67 31 0a 20 20 73 65 74 20 3a 3a 67 31 20 5b 70  g1.  set ::g1 [p
1000: 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 31 5d  age_get $::p1 1]
1010: 0a 20 20 70 61 67 65 5f 72 65 61 64 20 24 3a 3a  .  page_read $::
1020: 67 31 0a 7d 20 7b 50 61 67 65 2d 4f 6e 65 7d 0a  g1.} {Page-One}.
1030: 23 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d  #do_test pager2-
1040: 32 2e 39 39 20 7b 0a 23 20 20 70 61 67 65 72 5f  2.99 {.#  pager_
1050: 63 6c 6f 73 65 20 24 3a 3a 70 31 0a 23 7d 20 7b  close $::p1.#} {
1060: 7d 0a 0a 23 64 6f 5f 74 65 73 74 20 70 61 67 65  }..#do_test page
1070: 72 32 2d 33 2e 31 20 7b 0a 23 20 20 73 65 74 20  r2-3.1 {.#  set 
1080: 76 20 5b 63 61 74 63 68 20 7b 0a 23 20 20 20 20  v [catch {.#    
1090: 73 65 74 20 3a 3a 70 31 20 5b 70 61 67 65 72 5f  set ::p1 [pager_
10a0: 6f 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a 20 31 35  open :memory: 15
10b0: 5d 0a 23 20 20 7d 20 6d 73 67 5d 0a 23 20 20 69  ].#  } msg].#  i
10c0: 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20  f {$v} {lappend 
10d0: 76 20 24 6d 73 67 7d 0a 23 20 20 73 65 74 20 76  v $msg}.#  set v
10e0: 0a 23 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  .#} {0}.do_test 
10f0: 70 61 67 65 72 32 2d 33 2e 32 20 7b 0a 20 20 70  pager2-3.2 {.  p
1100: 61 67 65 72 5f 70 61 67 65 63 6f 75 6e 74 20 24  ager_pagecount $
1110: 3a 3a 70 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  ::p1.} {1}.do_te
1120: 73 74 20 70 61 67 65 72 32 2d 33 2e 33 20 7b 0a  st pager2-3.3 {.
1130: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
1140: 0a 20 20 20 20 73 65 74 20 3a 3a 67 28 31 29 20  .    set ::g(1) 
1150: 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20  [page_get $::p1 
1160: 31 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 69 66  1].  } msg].  if
1170: 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64 20 76   {$v} {lappend v
1180: 20 24 6d 73 67 7d 0a 20 20 73 65 74 20 76 0a 7d   $msg}.  set v.}
1190: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 61 67   {0}.do_test pag
11a0: 65 72 32 2d 33 2e 34 20 7b 0a 20 20 70 61 67 65  er2-3.4 {.  page
11b0: 5f 72 65 61 64 20 24 3a 3a 67 28 31 29 0a 7d 20  _read $::g(1).} 
11c0: 7b 50 61 67 65 2d 4f 6e 65 7d 0a 64 6f 5f 74 65  {Page-One}.do_te
11d0: 73 74 20 70 61 67 65 72 32 2d 33 2e 35 20 7b 0a  st pager2-3.5 {.
11e0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20    for {set i 2} 
11f0: 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69  {$i<=20} {incr i
1200: 7d 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20 5b  } {.    set gx [
1210: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 24  page_get $::p1 $
1220: 69 5d 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74  i].    page_writ
1230: 65 20 24 67 78 20 22 50 61 67 65 2d 24 69 22 0a  e $gx "Page-$i".
1240: 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24      page_unref $
1250: 67 78 0a 20 20 7d 0a 20 20 70 61 67 65 72 5f 63  gx.  }.  pager_c
1260: 6f 6d 6d 69 74 20 24 3a 3a 70 31 0a 7d 20 7b 7d  ommit $::p1.} {}
1270: 0a 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20 7b  .for {set i 2} {
1280: 24 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d  $i<=20} {incr i}
1290: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67   {.  do_test pag
12a0: 65 72 32 2d 33 2e 36 2e 5b 65 78 70 72 20 7b 24  er2-3.6.[expr {$
12b0: 69 2d 31 7d 5d 20 5b 73 75 62 73 74 20 7b 0a 20  i-1}] [subst {. 
12c0: 20 20 20 73 65 74 20 67 78 20 5c 5b 70 61 67 65     set gx \[page
12d0: 5f 67 65 74 20 24 3a 3a 70 31 20 24 69 5c 5d 0a  _get $::p1 $i\].
12e0: 20 20 20 20 73 65 74 20 76 20 5c 5b 70 61 67 65      set v \[page
12f0: 5f 72 65 61 64 20 5c 24 67 78 5c 5d 0a 20 20 20  _read \$gx\].   
1300: 20 70 61 67 65 5f 75 6e 72 65 66 20 5c 24 67 78   page_unref \$gx
1310: 0a 20 20 20 20 73 65 74 20 76 0a 20 20 7d 5d 20  .    set v.  }] 
1320: 22 50 61 67 65 2d 24 69 22 0a 7d 0a 66 6f 72 20  "Page-$i".}.for 
1330: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 32  {set i 1} {$i<=2
1340: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
1350: 72 65 67 73 75 62 20 2d 61 6c 6c 20 43 4e 54 20  regsub -all CNT 
1360: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 67 31 20 5b  {.    set ::g1 [
1370: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 43  page_get $::p1 C
1380: 4e 54 5d 0a 20 20 20 20 73 65 74 20 3a 3a 67 32  NT].    set ::g2
1390: 20 5b 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31   [page_get $::p1
13a0: 20 43 4e 54 5d 0a 20 20 20 20 73 65 74 20 3a 3a   CNT].    set ::
13b0: 76 78 20 5b 70 61 67 65 5f 72 65 61 64 20 24 3a  vx [page_read $:
13c0: 3a 67 32 5d 0a 20 20 20 20 65 78 70 72 20 7b 24  :g2].    expr {$
13d0: 3a 3a 67 31 3d 3d 24 3a 3a 67 32 7d 0a 20 20 7d  ::g1==$::g2}.  }
13e0: 20 24 69 20 62 6f 64 79 3b 0a 20 20 64 6f 5f 74   $i body;.  do_t
13f0: 65 73 74 20 70 61 67 65 72 32 2d 33 2e 37 2e 24  est pager2-3.7.$
1400: 69 2e 31 20 24 62 6f 64 79 20 7b 31 7d 0a 20 20  i.1 $body {1}.  
1410: 72 65 67 73 75 62 20 2d 61 6c 6c 20 43 4e 54 20  regsub -all CNT 
1420: 7b 0a 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66  {.    page_unref
1430: 20 24 3a 3a 67 32 0a 20 20 20 20 73 65 74 20 76   $::g2.    set v
1440: 79 20 5b 70 61 67 65 5f 72 65 61 64 20 24 3a 3a  y [page_read $::
1450: 67 31 5d 0a 20 20 20 20 65 78 70 72 20 7b 24 76  g1].    expr {$v
1460: 79 3d 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20 24 69  y==$::vx}.  } $i
1470: 20 62 6f 64 79 3b 0a 20 20 64 6f 5f 74 65 73 74   body;.  do_test
1480: 20 70 61 67 65 72 32 2d 33 2e 37 2e 24 69 2e 32   pager2-3.7.$i.2
1490: 20 24 62 6f 64 79 20 7b 31 7d 0a 20 20 72 65 67   $body {1}.  reg
14a0: 73 75 62 20 2d 61 6c 6c 20 43 4e 54 20 7b 0a 20  sub -all CNT {. 
14b0: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 3a     page_unref $:
14c0: 3a 67 31 0a 20 20 20 20 73 65 74 20 67 78 20 5b  :g1.    set gx [
14d0: 70 61 67 65 5f 67 65 74 20 24 3a 3a 70 31 20 43  page_get $::p1 C
14e0: 4e 54 5d 0a 20 20 20 20 73 65 74 20 76 79 20 5b  NT].    set vy [
14f0: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
1500: 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20 24 67     page_unref $g
1510: 78 0a 20 20 20 20 65 78 70 72 20 7b 24 76 79 3d  x.    expr {$vy=
1520: 3d 24 3a 3a 76 78 7d 0a 20 20 7d 20 24 69 20 62  =$::vx}.  } $i b
1530: 6f 64 79 3b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ody;.  do_test p
1540: 61 67 65 72 32 2d 33 2e 37 2e 24 69 2e 33 20 24  ager2-3.7.$i.3 $
1550: 62 6f 64 79 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65  body {1}.}.do_te
1560: 73 74 20 70 61 67 65 72 32 2d 33 2e 39 39 20 7b  st pager2-3.99 {
1570: 0a 20 20 70 61 67 65 72 5f 63 6c 6f 73 65 20 24  .  pager_close $
1580: 3a 3a 70 31 0a 7d 20 7b 7d 0a 0a 23 20 74 65 73  ::p1.} {}..# tes
1590: 74 73 20 6f 66 20 74 68 65 20 63 68 65 63 6b 70  ts of the checkp
15a0: 6f 69 6e 74 20 6d 65 63 68 61 6e 69 73 6d 20 61  oint mechanism a
15b0: 6e 64 20 61 70 69 0a 23 0a 64 6f 5f 74 65 73 74  nd api.#.do_test
15c0: 20 70 61 67 65 72 32 2d 34 2e 30 20 7b 0a 20 20   pager2-4.0 {.  
15d0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
15e0: 20 20 20 73 65 74 20 3a 3a 70 31 20 5b 70 61 67     set ::p1 [pag
15f0: 65 72 5f 6f 70 65 6e 20 3a 6d 65 6d 6f 72 79 3a  er_open :memory:
1600: 20 31 35 5d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20   15].  } msg].  
1610: 69 66 20 7b 24 76 7d 20 7b 6c 61 70 70 65 6e 64  if {$v} {lappend
1620: 20 76 20 24 6d 73 67 7d 0a 20 20 73 65 74 20 76   v $msg}.  set v
1630: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
1640: 61 67 65 72 32 2d 34 2e 31 20 7b 0a 20 20 73 65  ager2-4.1 {.  se
1650: 74 20 67 31 20 5b 70 61 67 65 5f 67 65 74 20 24  t g1 [page_get $
1660: 3a 3a 70 31 20 31 5d 0a 20 20 70 61 67 65 5f 77  ::p1 1].  page_w
1670: 72 69 74 65 20 24 67 31 20 22 50 61 67 65 2d 31  rite $g1 "Page-1
1680: 20 76 30 22 0a 20 20 66 6f 72 20 7b 73 65 74 20   v0".  for {set 
1690: 69 20 32 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69  i 2} {$i<=20} {i
16a0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
16b0: 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20 24 3a   gx [page_get $:
16c0: 3a 70 31 20 24 69 5d 0a 20 20 20 20 70 61 67 65  :p1 $i].    page
16d0: 5f 77 72 69 74 65 20 24 67 78 20 22 50 61 67 65  _write $gx "Page
16e0: 2d 24 69 20 76 30 22 0a 20 20 20 20 70 61 67 65  -$i v0".    page
16f0: 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 7d 0a 20  _unref $gx.  }. 
1700: 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74 20 24 3a   pager_commit $:
1710: 3a 70 31 0a 7d 20 7b 7d 0a 66 6f 72 20 7b 73 65  :p1.} {}.for {se
1720: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20  t i 1} {$i<=20} 
1730: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f  {incr i} {.  do_
1740: 74 65 73 74 20 70 61 67 65 72 32 2d 34 2e 32 2e  test pager2-4.2.
1750: 24 69 20 7b 0a 20 20 20 20 73 65 74 20 67 78 20  $i {.    set gx 
1760: 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20 24 69  [page_get $p1 $i
1770: 5d 0a 20 20 20 20 73 65 74 20 76 20 5b 70 61 67  ].    set v [pag
1780: 65 5f 72 65 61 64 20 24 67 78 5d 0a 20 20 20 20  e_read $gx].    
1790: 70 61 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20  page_unref $gx. 
17a0: 20 20 20 73 65 74 20 76 0a 20 20 7d 20 22 50 61     set v.  } "Pa
17b0: 67 65 2d 24 69 20 76 30 22 0a 7d 0a 64 6f 5f 74  ge-$i v0".}.do_t
17c0: 65 73 74 20 70 61 67 65 72 32 2d 34 2e 33 20 7b  est pager2-4.3 {
17d0: 0a 20 20 6c 72 61 6e 67 65 20 5b 70 61 67 65 72  .  lrange [pager
17e0: 5f 73 74 61 74 73 20 24 3a 3a 70 31 5d 20 30 20  _stats $::p1] 0 
17f0: 31 0a 7d 20 7b 72 65 66 20 31 7d 0a 64 6f 5f 74  1.} {ref 1}.do_t
1800: 65 73 74 20 70 61 67 65 72 32 2d 34 2e 34 20 7b  est pager2-4.4 {
1810: 0a 20 20 6c 72 61 6e 67 65 20 5b 70 61 67 65 72  .  lrange [pager
1820: 5f 73 74 61 74 73 20 24 3a 3a 70 31 5d 20 38 20  _stats $::p1] 8 
1830: 39 0a 7d 20 7b 73 74 61 74 65 20 31 7d 0a 0a 66  9.} {state 1}..f
1840: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1850: 3c 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  <20} {incr i} {.
1860: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32    do_test pager2
1870: 2d 34 2e 35 2e 24 69 2e 30 20 7b 0a 20 20 20 20  -4.5.$i.0 {.    
1880: 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 66  set res {}.    f
1890: 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a  or {set j 2} {$j
18a0: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b  <=20} {incr j} {
18b0: 0a 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70  .      set gx [p
18c0: 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a  age_get $p1 $j].
18d0: 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value 
18e0: 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a  [page_read $gx].
18f0: 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66        page_unref
1900: 20 24 67 78 0a 20 20 20 20 20 20 73 65 74 20 73   $gx.      set s
1910: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
1920: 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22   v[expr {$i-1}]"
1930: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75  .      if {$valu
1940: 65 21 3d 24 73 68 6f 75 6c 64 62 65 7d 20 7b 0a  e!=$shouldbe} {.
1950: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
1960: 72 65 73 20 24 76 61 6c 75 65 20 24 73 68 6f 75  res $value $shou
1970: 6c 64 62 65 0a 20 20 20 20 20 20 7d 0a 20 20 20  ldbe.      }.   
1980: 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20   }.    set res. 
1990: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
19a0: 70 61 67 65 72 32 2d 34 2e 35 2e 24 69 2e 31 20  pager2-4.5.$i.1 
19b0: 7b 0a 20 20 20 20 70 61 67 65 5f 77 72 69 74 65  {.    page_write
19c0: 20 24 67 31 20 22 50 61 67 65 2d 31 20 76 24 69   $g1 "Page-1 v$i
19d0: 22 0a 20 20 20 20 6c 72 61 6e 67 65 20 5b 70 61  ".    lrange [pa
19e0: 67 65 72 5f 73 74 61 74 73 20 24 70 31 5d 20 38  ger_stats $p1] 8
19f0: 20 39 0a 20 20 7d 20 7b 73 74 61 74 65 20 33 7d   9.  } {state 3}
1a00: 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72  .  do_test pager
1a10: 32 2d 34 2e 35 2e 24 69 2e 32 20 7b 0a 20 20 20  2-4.5.$i.2 {.   
1a20: 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b   for {set j 2} {
1a30: 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d  $j<=20} {incr j}
1a40: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67 78 20   {.      set gx 
1a50: 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a  [page_get $p1 $j
1a60: 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 77 72 69  ].      page_wri
1a70: 74 65 20 24 67 78 20 22 50 61 67 65 2d 24 6a 20  te $gx "Page-$j 
1a80: 76 24 69 22 0a 20 20 20 20 20 20 70 61 67 65 5f  v$i".      page_
1a90: 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20 20 20  unref $gx.      
1aa0: 69 66 20 7b 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20  if {$j==$i} {.  
1ab0: 20 20 20 20 20 20 70 61 67 65 72 5f 73 74 6d 74        pager_stmt
1ac0: 5f 62 65 67 69 6e 20 24 70 31 0a 20 20 20 20 20  _begin $p1.     
1ad0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a   }.    }.  } {}.
1ae0: 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32    do_test pager2
1af0: 2d 34 2e 35 2e 24 69 2e 33 20 7b 0a 20 20 20 20  -4.5.$i.3 {.    
1b00: 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 66  set res {}.    f
1b10: 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a  or {set j 2} {$j
1b20: 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b  <=20} {incr j} {
1b30: 0a 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70  .      set gx [p
1b40: 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a  age_get $p1 $j].
1b50: 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value 
1b60: 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a  [page_read $gx].
1b70: 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66        page_unref
1b80: 20 24 67 78 0a 20 20 20 20 20 20 73 65 74 20 73   $gx.      set s
1b90: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
1ba0: 20 76 24 69 22 0a 20 20 20 20 20 20 69 66 20 7b   v$i".      if {
1bb0: 24 76 61 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62  $value!=$shouldb
1bc0: 65 7d 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70  e} {.        lap
1bd0: 70 65 6e 64 20 72 65 73 20 24 76 61 6c 75 65 20  pend res $value 
1be0: 24 73 68 6f 75 6c 64 62 65 0a 20 20 20 20 20 20  $shouldbe.      
1bf0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  }.    }.    set 
1c00: 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  res.  } {}.  do_
1c10: 74 65 73 74 20 70 61 67 65 72 32 2d 34 2e 35 2e  test pager2-4.5.
1c20: 24 69 2e 34 20 7b 0a 20 20 20 20 70 61 67 65 72  $i.4 {.    pager
1c30: 5f 72 6f 6c 6c 62 61 63 6b 20 24 70 31 0a 20 20  _rollback $p1.  
1c40: 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20    set res {}.   
1c50: 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b   for {set j 2} {
1c60: 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d  $j<=20} {incr j}
1c70: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67 78 20   {.      set gx 
1c80: 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20 24 6a  [page_get $p1 $j
1c90: 5d 0a 20 20 20 20 20 20 73 65 74 20 76 61 6c 75  ].      set valu
1ca0: 65 20 5b 70 61 67 65 5f 72 65 61 64 20 24 67 78  e [page_read $gx
1cb0: 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72  ].      page_unr
1cc0: 65 66 20 24 67 78 0a 20 20 20 20 20 20 73 65 74  ef $gx.      set
1cd0: 20 73 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d   shouldbe "Page-
1ce0: 24 6a 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d  $j v[expr {$i-1}
1cf0: 5d 22 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61  ]".      if {$va
1d00: 6c 75 65 21 3d 24 73 68 6f 75 6c 64 62 65 7d 20  lue!=$shouldbe} 
1d10: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
1d20: 64 20 72 65 73 20 24 76 61 6c 75 65 20 24 73 68  d res $value $sh
1d30: 6f 75 6c 64 62 65 0a 20 20 20 20 20 20 7d 0a 20  ouldbe.      }. 
1d40: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73     }.    set res
1d50: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
1d60: 74 20 70 61 67 65 72 32 2d 34 2e 35 2e 24 69 2e  t pager2-4.5.$i.
1d70: 35 20 7b 0a 20 20 20 20 70 61 67 65 5f 77 72 69  5 {.    page_wri
1d80: 74 65 20 24 67 31 20 22 50 61 67 65 2d 31 20 76  te $g1 "Page-1 v
1d90: 24 69 22 0a 20 20 20 20 6c 72 61 6e 67 65 20 5b  $i".    lrange [
1da0: 70 61 67 65 72 5f 73 74 61 74 73 20 24 70 31 5d  pager_stats $p1]
1db0: 20 38 20 39 0a 20 20 7d 20 7b 73 74 61 74 65 20   8 9.  } {state 
1dc0: 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67  3}.  do_test pag
1dd0: 65 72 32 2d 34 2e 35 2e 24 69 2e 36 20 7b 0a 20  er2-4.5.$i.6 {. 
1de0: 20 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 32 7d     for {set j 2}
1df0: 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69 6e 63 72 20   {$j<=20} {incr 
1e00: 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 67  j} {.      set g
1e10: 78 20 5b 70 61 67 65 5f 67 65 74 20 24 70 31 20  x [page_get $p1 
1e20: 24 6a 5d 0a 20 20 20 20 20 20 70 61 67 65 5f 77  $j].      page_w
1e30: 72 69 74 65 20 24 67 78 20 22 50 61 67 65 2d 24  rite $gx "Page-$
1e40: 6a 20 76 24 69 22 0a 20 20 20 20 20 20 70 61 67  j v$i".      pag
1e50: 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20 20  e_unref $gx.    
1e60: 20 20 69 66 20 7b 24 6a 3d 3d 24 69 7d 20 7b 0a    if {$j==$i} {.
1e70: 20 20 20 20 20 20 20 20 70 61 67 65 72 5f 73 74          pager_st
1e80: 6d 74 5f 62 65 67 69 6e 20 24 70 31 0a 20 20 20  mt_begin $p1.   
1e90: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b     }.    }.  } {
1ea0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67 65  }.  do_test page
1eb0: 72 32 2d 34 2e 35 2e 24 69 2e 37 20 7b 0a 20 20  r2-4.5.$i.7 {.  
1ec0: 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 72 6f 6c    pager_stmt_rol
1ed0: 6c 62 61 63 6b 20 24 70 31 0a 20 20 20 20 66 6f  lback $p1.    fo
1ee0: 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c  r {set j 2} {$j<
1ef0: 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a  =20} {incr j} {.
1f00: 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61        set gx [pa
1f10: 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20  ge_get $p1 $j]. 
1f20: 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b       set value [
1f30: 70 61 67 65 5f 72 65 61 64 20 24 67 78 5d 0a 20  page_read $gx]. 
1f40: 20 20 20 20 20 70 61 67 65 5f 75 6e 72 65 66 20       page_unref 
1f50: 24 67 78 0a 20 20 20 20 20 20 69 66 20 7b 24 6a  $gx.      if {$j
1f60: 3c 3d 24 69 20 7c 7c 20 24 69 3d 3d 31 7d 20 7b  <=$i || $i==1} {
1f70: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 68 6f  .        set sho
1f80: 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a 20 76  uldbe "Page-$j v
1f90: 24 69 22 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  $i".      } else
1fa0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   {.        set s
1fb0: 68 6f 75 6c 64 62 65 20 22 50 61 67 65 2d 24 6a  houldbe "Page-$j
1fc0: 20 76 5b 65 78 70 72 20 7b 24 69 2d 31 7d 5d 22   v[expr {$i-1}]"
1fd0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1fe0: 66 20 7b 24 76 61 6c 75 65 21 3d 24 73 68 6f 75  f {$value!=$shou
1ff0: 6c 64 62 65 7d 20 7b 0a 20 20 20 20 20 20 20 20  ldbe} {.        
2000: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 76 61 6c  lappend res $val
2010: 75 65 20 24 73 68 6f 75 6c 64 62 65 0a 20 20 20  ue $shouldbe.   
2020: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
2030: 65 74 20 72 65 73 0a 20 20 7d 20 7b 7d 0a 20 20  et res.  } {}.  
2040: 64 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 34  do_test pager2-4
2050: 2e 35 2e 24 69 2e 38 20 7b 0a 20 20 20 20 66 6f  .5.$i.8 {.    fo
2060: 72 20 7b 73 65 74 20 6a 20 32 7d 20 7b 24 6a 3c  r {set j 2} {$j<
2070: 3d 32 30 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b 0a  =20} {incr j} {.
2080: 20 20 20 20 20 20 73 65 74 20 67 78 20 5b 70 61        set gx [pa
2090: 67 65 5f 67 65 74 20 24 70 31 20 24 6a 5d 0a 20  ge_get $p1 $j]. 
20a0: 20 20 20 20 20 70 61 67 65 5f 77 72 69 74 65 20       page_write 
20b0: 24 67 78 20 22 50 61 67 65 2d 24 6a 20 76 24 69  $gx "Page-$j v$i
20c0: 22 0a 20 20 20 20 20 20 70 61 67 65 5f 75 6e 72  ".      page_unr
20d0: 65 66 20 24 67 78 0a 20 20 20 20 20 20 69 66 20  ef $gx.      if 
20e0: 7b 24 6a 3d 3d 24 69 7d 20 7b 0a 20 20 20 20 20  {$j==$i} {.     
20f0: 20 20 20 70 61 67 65 72 5f 73 74 6d 74 5f 62 65     pager_stmt_be
2100: 67 69 6e 20 24 70 31 0a 20 20 20 20 20 20 7d 0a  gin $p1.      }.
2110: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
2120: 6f 5f 74 65 73 74 20 70 61 67 65 72 32 2d 34 2e  o_test pager2-4.
2130: 35 2e 24 69 2e 39 20 7b 0a 20 20 20 20 70 61 67  5.$i.9 {.    pag
2140: 65 72 5f 73 74 6d 74 5f 63 6f 6d 6d 69 74 20 24  er_stmt_commit $
2150: 70 31 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20  p1.    for {set 
2160: 6a 20 32 7d 20 7b 24 6a 3c 3d 32 30 7d 20 7b 69  j 2} {$j<=20} {i
2170: 6e 63 72 20 6a 7d 20 7b 0a 20 20 20 20 20 20 73  ncr j} {.      s
2180: 65 74 20 67 78 20 5b 70 61 67 65 5f 67 65 74 20  et gx [page_get 
2190: 24 70 31 20 24 6a 5d 0a 20 20 20 20 20 20 73 65  $p1 $j].      se
21a0: 74 20 76 61 6c 75 65 20 5b 70 61 67 65 5f 72 65  t value [page_re
21b0: 61 64 20 24 67 78 5d 0a 20 20 20 20 20 20 70 61  ad $gx].      pa
21c0: 67 65 5f 75 6e 72 65 66 20 24 67 78 0a 20 20 20  ge_unref $gx.   
21d0: 20 20 20 73 65 74 20 73 68 6f 75 6c 64 62 65 20     set shouldbe 
21e0: 22 50 61 67 65 2d 24 6a 20 76 24 69 22 0a 20 20  "Page-$j v$i".  
21f0: 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 21 3d      if {$value!=
2200: 24 73 68 6f 75 6c 64 62 65 7d 20 7b 0a 20 20 20  $shouldbe} {.   
2210: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
2220: 20 24 76 61 6c 75 65 20 24 73 68 6f 75 6c 64 62   $value $shouldb
2230: 65 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  e.      }.    }.
2240: 20 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20      set res.  } 
2250: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 61 67  {}.  do_test pag
2260: 65 72 32 2d 34 2e 35 2e 24 69 2e 31 30 20 7b 0a  er2-4.5.$i.10 {.
2270: 20 20 20 20 70 61 67 65 72 5f 63 6f 6d 6d 69 74      pager_commit
2280: 20 24 70 31 0a 20 20 20 20 6c 72 61 6e 67 65 20   $p1.    lrange 
2290: 5b 70 61 67 65 72 5f 73 74 61 74 73 20 24 70 31  [pager_stats $p1
22a0: 5d 20 38 20 39 0a 20 20 7d 20 7b 73 74 61 74 65  ] 8 9.  } {state
22b0: 20 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70   1}.}..do_test p
22c0: 61 67 65 72 32 2d 34 2e 39 39 20 7b 0a 20 20 70  ager2-4.99 {.  p
22d0: 61 67 65 72 5f 63 6c 6f 73 65 20 24 3a 3a 70 31  ager_close $::p1
22e0: 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 65 6e 64 20  .} {}..} ;# end 
22f0: 69 66 28 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64  if( not mem: and
2300: 20 68 61 73 20 70 61 67 65 72 5f 6f 70 65 6e 20   has pager_open 
2310: 63 6f 6d 6d 61 6e 64 20 29 3b 0a 0a 0a 66 69 6e  command );...fin
2320: 69 73 68 5f 74 65 73 74 0a                       ish_test.