/ Hex Artifact Content
Login

Artifact 1e3463c7838e7e71bbf37c9c6e45beee9c8975ba:


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 62 74 72 65 65 20 64 61 74 61 62  t is btree datab
01d0: 61 73 65 20 62 61 63 6b 65 6e 64 0a 23 0a 23 20  ase backend.#.# 
01e0: 24 49 64 3a 20 62 74 72 65 65 2e 74 65 73 74 2c  $Id: btree.test,
01f0: 76 20 31 2e 31 34 20 32 30 30 33 2f 30 32 2f 31  v 1.14 2003/02/1
0200: 32 20 31 34 3a 30 39 3a 34 35 20 64 72 68 20 45  2 14:09:45 drh E
0210: 78 70 20 24 0a 0a 0a 73 65 74 20 74 65 73 74 64  xp $...set testd
0220: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0230: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0240: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0250: 74 63 6c 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 63  tcl..if {[info c
0260: 6f 6d 6d 61 6e 64 73 20 62 74 72 65 65 5f 6f 70  ommands btree_op
0270: 65 6e 5d 21 3d 22 22 7d 20 7b 0a 0a 23 20 42 61  en]!=""} {..# Ba
0280: 73 69 63 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  sic functionalit
0290: 79 2e 20 20 4f 70 65 6e 20 61 6e 64 20 63 6c 6f  y.  Open and clo
02a0: 73 65 20 61 20 64 61 74 61 62 61 73 65 2e 0a 23  se a database..#
02b0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
02c0: 2e 31 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65  .1 {.  file dele
02d0: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 31 2e  te -force test1.
02e0: 62 74 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  bt.  file delete
02f0: 20 2d 66 6f 72 63 65 20 74 65 73 74 31 2e 62 74   -force test1.bt
0300: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73 65 74 20 72  -journal.  set r
0310: 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65 5f  c [catch {btree_
0320: 6f 70 65 6e 20 74 65 73 74 31 2e 62 74 7d 20 3a  open test1.bt} :
0330: 3a 62 31 5d 0a 7d 20 7b 30 7d 0a 0a 23 20 54 68  :b1].} {0}..# Th
0340: 65 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74  e second element
0350: 20 6f 66 20 74 68 65 20 6c 69 73 74 20 72 65 74   of the list ret
0360: 75 72 6e 65 64 20 62 79 20 62 74 72 65 65 5f 70  urned by btree_p
0370: 61 67 65 72 5f 73 74 61 74 73 20 69 73 20 74 68  ager_stats is th
0380: 65 0a 23 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  e.# number of pa
0390: 67 65 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ges currently ch
03a0: 65 63 6b 65 64 20 6f 75 74 2e 20 20 57 65 27 6c  ecked out.  We'l
03b0: 6c 20 62 65 20 63 68 65 63 6b 69 6e 67 20 74 68  l be checking th
03c0: 69 73 20 76 61 6c 75 65 0a 23 20 66 72 65 71 75  is value.# frequ
03d0: 65 6e 74 6c 79 20 64 75 72 69 6e 67 20 74 68 69  ently during thi
03e0: 73 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 74  s test script, t
03f0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  o make sure the 
0400: 62 74 72 65 65 20 6c 69 62 72 61 72 79 0a 23 20  btree library.# 
0410: 69 73 20 70 72 6f 70 65 72 6c 79 20 72 65 6c 65  is properly rele
0420: 61 73 69 6e 67 20 74 68 65 20 70 61 67 65 73 20  asing the pages 
0430: 69 74 20 63 68 65 63 6b 73 20 6f 75 74 2c 20 61  it checks out, a
0440: 6e 64 20 74 68 75 73 20 61 76 6f 69 64 69 6e 67  nd thus avoiding
0450: 0a 23 20 70 61 67 65 20 6c 65 61 6b 73 2e 0a 23  .# page leaks..#
0460: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
0470: 2e 31 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20  .1.1 {.  lindex 
0480: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
0490: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30  ts $::b1] 1.} {0
04a0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
04b0: 31 2e 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  1.2 {.  set rc [
04c0: 63 61 74 63 68 20 7b 62 74 72 65 65 5f 6f 70 65  catch {btree_ope
04d0: 6e 20 74 65 73 74 31 2e 62 74 7d 20 3a 3a 62 32  n test1.bt} ::b2
04e0: 5d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  ].} {0}.do_test 
04f0: 62 74 72 65 65 2d 31 2e 33 20 7b 0a 20 20 73 65  btree-1.3 {.  se
0500: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
0510: 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 32 7d 20  ee_close $::b2} 
0520: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72  msg].  lappend r
0530: 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a  c $msg.} {0 {}}.
0540: 0a 23 20 44 6f 20 61 6e 20 69 6e 73 65 72 74 20  .# Do an insert 
0550: 61 6e 64 20 76 65 72 69 66 79 20 74 68 61 74 20  and verify that 
0560: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0570: 65 20 67 72 6f 77 73 20 69 6e 20 73 69 7a 65 2e  e grows in size.
0580: 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .#.do_test btree
0590: 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20 72 63 20  -1.4 {.  set rc 
05a0: 5b 63 61 74 63 68 20 7b 62 74 72 65 65 5f 62 65  [catch {btree_be
05b0: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20  gin_transaction 
05c0: 24 3a 3a 62 31 7d 20 6d 73 67 5d 0a 20 20 6c 61  $::b1} msg].  la
05d0: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20  ppend rc $msg.} 
05e0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62  {0 {}}.do_test b
05f0: 74 72 65 65 2d 31 2e 34 2e 31 20 7b 0a 20 20 6c  tree-1.4.1 {.  l
0600: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
0610: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
0620: 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  1.} {1}.do_test 
0630: 62 74 72 65 65 2d 31 2e 35 20 7b 0a 20 20 73 65  btree-1.5 {.  se
0640: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
0650: 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20  ee_cursor $::b1 
0660: 32 20 31 7d 20 3a 3a 63 31 5d 0a 20 20 69 66 20  2 1} ::c1].  if 
0670: 7b 24 72 63 7d 20 7b 6c 61 70 70 65 6e 64 20 72  {$rc} {lappend r
0680: 63 20 24 3a 3a 63 31 7d 0a 20 20 73 65 74 20 72  c $::c1}.  set r
0690: 63 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  c.} {0}.do_test 
06a0: 62 74 72 65 65 2d 31 2e 36 20 7b 0a 20 20 73 65  btree-1.6 {.  se
06b0: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
06c0: 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20  ee_insert $::c1 
06d0: 6f 6e 65 20 31 2e 30 30 7d 20 6d 73 67 5d 0a 20  one 1.00} msg]. 
06e0: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
06f0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0700: 74 20 62 74 72 65 65 2d 31 2e 37 20 7b 0a 20 20  t btree-1.7 {.  
0710: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
0720: 7d 20 7b 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20  } {one}.do_test 
0730: 62 74 72 65 65 2d 31 2e 38 20 7b 0a 20 20 62 74  btree-1.8 {.  bt
0740: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d  ree_data $::c1.}
0750: 20 7b 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {1.00}.do_test 
0760: 62 74 72 65 65 2d 31 2e 39 20 7b 0a 20 20 73 65  btree-1.9 {.  se
0770: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
0780: 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20  ee_close_cursor 
0790: 24 3a 3a 63 31 7d 20 6d 73 67 5d 0a 20 20 6c 61  $::c1} msg].  la
07a0: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20  ppend rc $msg.} 
07b0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62  {0 {}}.do_test b
07c0: 74 72 65 65 2d 31 2e 31 30 20 7b 0a 20 20 73 65  tree-1.10 {.  se
07d0: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
07e0: 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31 7d  ee_commit $::b1}
07f0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0800: 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d  rc $msg.} {0 {}}
0810: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
0820: 2e 31 31 20 7b 0a 20 20 66 69 6c 65 20 73 69 7a  .11 {.  file siz
0830: 65 20 74 65 73 74 31 2e 62 74 0a 7d 20 7b 32 30  e test1.bt.} {20
0840: 34 38 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  48}.do_test btre
0850: 65 2d 31 2e 31 32 20 7b 0a 20 20 6c 69 6e 64 65  e-1.12 {.  linde
0860: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
0870: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
0880: 7b 30 7d 0a 0a 23 20 52 65 6f 70 65 6e 20 74 68  {0}..# Reopen th
0890: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 61  e database and a
08a0: 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74  ttempt to read t
08b0: 68 65 20 72 65 63 6f 72 64 20 74 68 61 74 20 77  he record that w
08c0: 65 20 77 72 6f 74 65 2e 0a 23 0a 64 6f 5f 74 65  e wrote..#.do_te
08d0: 73 74 20 62 74 72 65 65 2d 32 2e 31 20 7b 0a 20  st btree-2.1 {. 
08e0: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
08f0: 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a  btree_cursor $::
0900: 62 31 20 32 20 31 7d 20 3a 3a 63 31 5d 0a 20 20  b1 2 1} ::c1].  
0910: 69 66 20 7b 24 72 63 7d 20 7b 6c 61 70 70 65 6e  if {$rc} {lappen
0920: 64 20 72 63 20 24 3a 3a 63 31 7d 0a 20 20 73 65  d rc $::c1}.  se
0930: 74 20 72 63 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  t rc.} {0}.do_te
0940: 73 74 20 62 74 72 65 65 2d 32 2e 32 20 7b 0a 20  st btree-2.2 {. 
0950: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
0960: 3a 3a 63 31 20 61 62 63 0a 7d 20 7b 31 7d 0a 64  ::c1 abc.} {1}.d
0970: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 32 2e 33  o_test btree-2.3
0980: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
0990: 74 6f 20 24 3a 3a 63 31 20 78 79 7a 0a 7d 20 7b  to $::c1 xyz.} {
09a0: 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  -1}.do_test btre
09b0: 65 2d 32 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f  e-2.4 {.  btree_
09c0: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 6f 6e  move_to $::c1 on
09d0: 65 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  e.} {0}.do_test 
09e0: 62 74 72 65 65 2d 32 2e 35 20 7b 0a 20 20 62 74  btree-2.5 {.  bt
09f0: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
0a00: 7b 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {one}.do_test bt
0a10: 72 65 65 2d 32 2e 36 20 7b 0a 20 20 62 74 72 65  ree-2.6 {.  btre
0a20: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b  e_data $::c1.} {
0a30: 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  1.00}.do_test bt
0a40: 72 65 65 2d 32 2e 37 20 7b 0a 20 20 6c 69 6e 64  ree-2.7 {.  lind
0a50: 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f  ex [btree_pager_
0a60: 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d  stats $::b1] 1.}
0a70: 20 7b 32 7d 0a 0a 23 20 44 6f 20 73 6f 6d 65 20   {2}..# Do some 
0a80: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 73 65 72  additional inser
0a90: 74 73 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72  ts.#.do_test btr
0aa0: 65 65 2d 33 2e 31 20 7b 0a 20 20 62 74 72 65 65  ee-3.1 {.  btree
0ab0: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
0ac0: 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65  on $::b1.  btree
0ad0: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 74 77  _insert $::c1 tw
0ae0: 6f 20 32 2e 30 30 0a 20 20 62 74 72 65 65 5f 6b  o 2.00.  btree_k
0af0: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 74 77 6f 7d  ey $::c1.} {two}
0b00: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
0b10: 2e 31 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20  .1.1 {.  lindex 
0b20: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
0b30: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32  ts $::b1] 1.} {2
0b40: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0b50: 33 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e  3.2 {.  btree_in
0b60: 73 65 72 74 20 24 3a 3a 63 31 20 74 68 72 65 65  sert $::c1 three
0b70: 20 33 2e 30 30 0a 20 20 62 74 72 65 65 5f 6b 65   3.00.  btree_ke
0b80: 79 20 24 3a 3a 63 31 0a 7d 20 7b 74 68 72 65 65  y $::c1.} {three
0b90: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0ba0: 33 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e  3.4 {.  btree_in
0bb0: 73 65 72 74 20 24 3a 3a 63 31 20 66 6f 75 72 20  sert $::c1 four 
0bc0: 34 2e 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79  4.00.  btree_key
0bd0: 20 24 3a 3a 63 31 0a 7d 20 7b 66 6f 75 72 7d 0a   $::c1.} {four}.
0be0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
0bf0: 35 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65  5 {.  btree_inse
0c00: 72 74 20 24 3a 3a 63 31 20 66 69 76 65 20 35 2e  rt $::c1 five 5.
0c10: 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  00.  btree_key $
0c20: 3a 3a 63 31 0a 7d 20 7b 66 69 76 65 7d 0a 64 6f  ::c1.} {five}.do
0c30: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 36 20  _test btree-3.6 
0c40: 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74  {.  btree_insert
0c50: 20 24 3a 3a 63 31 20 73 69 78 20 36 2e 30 30 0a   $::c1 six 6.00.
0c60: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
0c70: 31 0a 7d 20 7b 73 69 78 7d 0a 23 62 74 72 65 65  1.} {six}.#btree
0c80: 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31  _page_dump $::b1
0c90: 20 32 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65   2.do_test btree
0ca0: 2d 33 2e 37 20 7b 0a 20 20 73 65 74 20 72 63 20  -3.7 {.  set rc 
0cb0: 5b 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24  [btree_move_to $
0cc0: 3a 3a 63 31 20 7b 7d 5d 0a 20 20 65 78 70 72 20  ::c1 {}].  expr 
0cd0: 7b 24 72 63 3e 30 7d 0a 7d 20 7b 31 7d 0a 64 6f  {$rc>0}.} {1}.do
0ce0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 38 20  _test btree-3.8 
0cf0: 7b 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  {.  btree_key $:
0d00: 3a 63 31 0a 7d 20 7b 66 69 76 65 7d 0a 64 6f 5f  :c1.} {five}.do_
0d10: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 39 20 7b  test btree-3.9 {
0d20: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
0d30: 3a 63 31 0a 7d 20 7b 35 2e 30 30 7d 0a 64 6f 5f  :c1.} {5.00}.do_
0d40: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31 30 20  test btree-3.10 
0d50: 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24  {.  btree_next $
0d60: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79  ::c1.  btree_key
0d70: 20 24 3a 3a 63 31 0a 7d 20 7b 66 6f 75 72 7d 0a   $::c1.} {four}.
0d80: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
0d90: 31 31 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74  11 {.  btree_dat
0da0: 61 20 24 3a 3a 63 31 0a 7d 20 7b 34 2e 30 30 7d  a $::c1.} {4.00}
0db0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
0dc0: 2e 31 32 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65  .12 {.  btree_ne
0dd0: 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65  xt $::c1.  btree
0de0: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 6f 6e  _key $::c1.} {on
0df0: 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  e}.do_test btree
0e00: 2d 33 2e 31 33 20 7b 0a 20 20 62 74 72 65 65 5f  -3.13 {.  btree_
0e10: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31 2e  data $::c1.} {1.
0e20: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
0e30: 65 2d 33 2e 31 34 20 7b 0a 20 20 62 74 72 65 65  e-3.14 {.  btree
0e40: 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74  _next $::c1.  bt
0e50: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
0e60: 7b 73 69 78 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {six}.do_test bt
0e70: 72 65 65 2d 33 2e 31 35 20 7b 0a 20 20 62 74 72  ree-3.15 {.  btr
0e80: 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20  ee_data $::c1.} 
0e90: 7b 36 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62  {6.00}.do_test b
0ea0: 74 72 65 65 2d 33 2e 31 36 20 7b 0a 20 20 62 74  tree-3.16 {.  bt
0eb0: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
0ec0: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
0ed0: 0a 7d 20 7b 74 68 72 65 65 7d 0a 64 6f 5f 74 65  .} {three}.do_te
0ee0: 73 74 20 62 74 72 65 65 2d 33 2e 31 37 20 7b 0a  st btree-3.17 {.
0ef0: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
0f00: 63 31 0a 7d 20 7b 33 2e 30 30 7d 0a 64 6f 5f 74  c1.} {3.00}.do_t
0f10: 65 73 74 20 62 74 72 65 65 2d 33 2e 31 38 20 7b  est btree-3.18 {
0f20: 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a  .  btree_next $:
0f30: 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  :c1.  btree_key 
0f40: 24 3a 3a 63 31 0a 7d 20 7b 74 77 6f 7d 0a 64 6f  $::c1.} {two}.do
0f50: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31 39  _test btree-3.19
0f60: 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20   {.  btree_data 
0f70: 24 3a 3a 63 31 0a 7d 20 7b 32 2e 30 30 7d 0a 64  $::c1.} {2.00}.d
0f80: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
0f90: 30 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74  0 {.  btree_next
0fa0: 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b   $::c1.  btree_k
0fb0: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f  ey $::c1.} {}.do
0fc0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 31  _test btree-3.21
0fd0: 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20   {.  btree_data 
0fe0: 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 0a 23 20 43 6f  $::c1.} {}..# Co
0ff0: 6d 6d 69 74 20 74 68 65 20 63 68 61 6e 67 65 73  mmit the changes
1000: 2c 20 72 65 6f 70 65 6e 20 61 6e 64 20 72 65 72  , reopen and rer
1010: 65 61 64 20 74 68 65 20 64 61 74 61 0a 23 0a 64  ead the data.#.d
1020: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
1030: 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  2 {.  set rc [ca
1040: 74 63 68 20 7b 62 74 72 65 65 5f 63 6c 6f 73 65  tch {btree_close
1050: 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 7d 20 6d  _cursor $::c1} m
1060: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
1070: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
1080: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
1090: 32 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b  2.1 {.  lindex [
10a0: 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74  btree_pager_stat
10b0: 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d  s $::b1] 1.} {1}
10c0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
10d0: 2e 32 33 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  .23 {.  set rc [
10e0: 63 61 74 63 68 20 7b 62 74 72 65 65 5f 63 6f 6d  catch {btree_com
10f0: 6d 69 74 20 24 3a 3a 62 31 7d 20 6d 73 67 5d 0a  mit $::b1} msg].
1100: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
1110: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
1120: 73 74 20 62 74 72 65 65 2d 33 2e 32 33 2e 31 20  st btree-3.23.1 
1130: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  {.  lindex [btre
1140: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
1150: 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64 6f 5f  :b1] 1.} {0}.do_
1160: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 34 20  test btree-3.24 
1170: 7b 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65  {.  file size te
1180: 73 74 31 2e 62 74 0a 7d 20 7b 32 30 34 38 7d 0a  st1.bt.} {2048}.
1190: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
11a0: 32 35 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63  25 {.  set rc [c
11b0: 61 74 63 68 20 7b 62 74 72 65 65 5f 63 75 72 73  atch {btree_curs
11c0: 6f 72 20 24 3a 3a 62 31 20 32 20 31 7d 20 3a 3a  or $::b1 2 1} ::
11d0: 63 31 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b  c1].  if {$rc} {
11e0: 6c 61 70 70 65 6e 64 20 72 63 20 24 3a 3a 63 31  lappend rc $::c1
11f0: 7d 0a 20 20 73 65 74 20 72 63 0a 7d 20 7b 30 7d  }.  set rc.} {0}
1200: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1210: 2e 32 35 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78  .25.1 {.  lindex
1220: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
1230: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
1240: 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  2}.do_test btree
1250: 2d 33 2e 32 36 20 7b 0a 20 20 73 65 74 20 72 63  -3.26 {.  set rc
1260: 20 5b 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20   [btree_move_to 
1270: 24 3a 3a 63 31 20 7b 7d 5d 0a 20 20 65 78 70 72  $::c1 {}].  expr
1280: 20 7b 24 72 63 3e 30 7d 0a 7d 20 7b 31 7d 0a 64   {$rc>0}.} {1}.d
1290: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
12a0: 37 20 7b 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  7 {.  btree_key 
12b0: 24 3a 3a 63 31 0a 7d 20 7b 66 69 76 65 7d 0a 64  $::c1.} {five}.d
12c0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
12d0: 38 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61  8 {.  btree_data
12e0: 20 24 3a 3a 63 31 0a 7d 20 7b 35 2e 30 30 7d 0a   $::c1.} {5.00}.
12f0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
1300: 32 39 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78  29 {.  btree_nex
1310: 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  t $::c1.  btree_
1320: 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 66 6f 75  key $::c1.} {fou
1330: 72 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  r}.do_test btree
1340: 2d 33 2e 33 30 20 7b 0a 20 20 62 74 72 65 65 5f  -3.30 {.  btree_
1350: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 34 2e  data $::c1.} {4.
1360: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
1370: 65 2d 33 2e 33 31 20 7b 0a 20 20 62 74 72 65 65  e-3.31 {.  btree
1380: 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74  _next $::c1.  bt
1390: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
13a0: 7b 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {one}.do_test bt
13b0: 72 65 65 2d 33 2e 33 32 20 7b 0a 20 20 62 74 72  ree-3.32 {.  btr
13c0: 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20  ee_data $::c1.} 
13d0: 7b 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62  {1.00}.do_test b
13e0: 74 72 65 65 2d 33 2e 33 33 20 7b 0a 20 20 62 74  tree-3.33 {.  bt
13f0: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
1400: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
1410: 0a 7d 20 7b 73 69 78 7d 0a 64 6f 5f 74 65 73 74  .} {six}.do_test
1420: 20 62 74 72 65 65 2d 33 2e 33 34 20 7b 0a 20 20   btree-3.34 {.  
1430: 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31  btree_data $::c1
1440: 0a 7d 20 7b 36 2e 30 30 7d 0a 64 6f 5f 74 65 73  .} {6.00}.do_tes
1450: 74 20 62 74 72 65 65 2d 33 2e 33 35 20 7b 0a 20  t btree-3.35 {. 
1460: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
1470: 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  1.  btree_key $:
1480: 3a 63 31 0a 7d 20 7b 74 68 72 65 65 7d 0a 64 6f  :c1.} {three}.do
1490: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33 36  _test btree-3.36
14a0: 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20   {.  btree_data 
14b0: 24 3a 3a 63 31 0a 7d 20 7b 33 2e 30 30 7d 0a 64  $::c1.} {3.00}.d
14c0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33  o_test btree-3.3
14d0: 37 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74  7 {.  btree_next
14e0: 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b   $::c1.  btree_k
14f0: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 74 77 6f 7d  ey $::c1.} {two}
1500: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1510: 2e 33 38 20 7b 0a 20 20 62 74 72 65 65 5f 64 61  .38 {.  btree_da
1520: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 32 2e 30 30  ta $::c1.} {2.00
1530: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
1540: 33 2e 33 39 20 7b 0a 20 20 62 74 72 65 65 5f 6e  3.39 {.  btree_n
1550: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
1560: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 7d  e_key $::c1.} {}
1570: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1580: 2e 34 30 20 7b 0a 20 20 62 74 72 65 65 5f 64 61  .40 {.  btree_da
1590: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f  ta $::c1.} {}.do
15a0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 34 31  _test btree-3.41
15b0: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
15c0: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
15d0: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 0a 0a  ::b1] 1.} {2}...
15e0: 23 20 4e 6f 77 20 74 72 79 20 61 20 64 65 6c 65  # Now try a dele
15f0: 74 65 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72  te.#.do_test btr
1600: 65 65 2d 34 2e 31 20 7b 0a 20 20 62 74 72 65 65  ee-4.1 {.  btree
1610: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
1620: 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65  on $::b1.  btree
1630: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 6f  _move_to $::c1 o
1640: 6e 65 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  ne.  btree_key $
1650: 3a 3a 63 31 0a 7d 20 7b 6f 6e 65 7d 0a 64 6f 5f  ::c1.} {one}.do_
1660: 74 65 73 74 20 62 74 72 65 65 2d 34 2e 31 2e 31  test btree-4.1.1
1670: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
1680: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
1690: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64 6f  ::b1] 1.} {2}.do
16a0: 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 32 20  _test btree-4.2 
16b0: 7b 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65  {.  btree_delete
16c0: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
16d0: 65 73 74 20 62 74 72 65 65 2d 34 2e 33 20 7b 0a  est btree-4.3 {.
16e0: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
16f0: 31 0a 7d 20 7b 73 69 78 7d 0a 64 6f 5f 74 65 73  1.} {six}.do_tes
1700: 74 20 62 74 72 65 65 2d 34 2e 34 20 7b 0a 20 20  t btree-4.4 {.  
1710: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
1720: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
1730: 63 31 0a 7d 20 7b 73 69 78 7d 0a 64 6f 5f 74 65  c1.} {six}.do_te
1740: 73 74 20 62 74 72 65 65 2d 34 2e 35 20 7b 0a 20  st btree-4.5 {. 
1750: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
1760: 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  1.  btree_key $:
1770: 3a 63 31 0a 7d 20 7b 74 68 72 65 65 7d 0a 64 6f  :c1.} {three}.do
1780: 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 34 20  _test btree-4.4 
1790: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
17a0: 6f 20 24 3a 3a 63 31 20 7b 7d 0a 20 20 73 65 74  o $::c1 {}.  set
17b0: 20 72 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31 20   r {}.  while 1 
17c0: 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b 62  {.    set key [b
17d0: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a  tree_key $::c1].
17e0: 20 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d 22 22      if {$key==""
17f0: 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70  } break.    lapp
1800: 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c  end r $key.    l
1810: 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f  append r [btree_
1820: 64 61 74 61 20 24 3a 3a 63 31 5d 0a 20 20 20 20  data $::c1].    
1830: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
1840: 0a 20 20 7d 0a 20 20 73 65 74 20 72 20 20 20 0a  .  }.  set r   .
1850: 7d 20 7b 66 69 76 65 20 35 2e 30 30 20 66 6f 75  } {five 5.00 fou
1860: 72 20 34 2e 30 30 20 73 69 78 20 36 2e 30 30 20  r 4.00 six 6.00 
1870: 74 68 72 65 65 20 33 2e 30 30 20 74 77 6f 20 32  three 3.00 two 2
1880: 2e 30 30 7d 0a 0a 23 20 43 6f 6d 6d 69 74 20 61  .00}..# Commit a
1890: 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  nd make sure the
18a0: 20 64 65 6c 65 74 65 20 69 73 20 73 74 69 6c 6c   delete is still
18b0: 20 74 68 65 72 65 2e 0a 23 0a 64 6f 5f 74 65 73   there..#.do_tes
18c0: 74 20 62 74 72 65 65 2d 34 2e 35 20 7b 0a 20 20  t btree-4.5 {.  
18d0: 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a  btree_commit $::
18e0: 62 31 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f  b1.  btree_move_
18f0: 74 6f 20 24 3a 3a 63 31 20 7b 7d 0a 20 20 73 65  to $::c1 {}.  se
1900: 74 20 72 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31  t r {}.  while 1
1910: 20 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b   {.    set key [
1920: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d  btree_key $::c1]
1930: 0a 20 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d 22  .    if {$key=="
1940: 22 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61 70  "} break.    lap
1950: 70 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20  pend r $key.    
1960: 6c 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65  lappend r [btree
1970: 5f 64 61 74 61 20 24 3a 3a 63 31 5d 0a 20 20 20  _data $::c1].   
1980: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
1990: 31 0a 20 20 7d 0a 20 20 73 65 74 20 72 20 20 20  1.  }.  set r   
19a0: 0a 7d 20 7b 66 69 76 65 20 35 2e 30 30 20 66 6f  .} {five 5.00 fo
19b0: 75 72 20 34 2e 30 30 20 73 69 78 20 36 2e 30 30  ur 4.00 six 6.00
19c0: 20 74 68 72 65 65 20 33 2e 30 30 20 74 77 6f 20   three 3.00 two 
19d0: 32 2e 30 30 7d 0a 0a 23 20 43 6f 6d 70 6c 65 74  2.00}..# Complet
19e0: 65 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  ely close the da
19f0: 74 61 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65  tabase and reope
1a00: 6e 20 69 74 2e 20 20 54 68 65 6e 20 63 68 65 63  n it.  Then chec
1a10: 6b 0a 23 20 74 68 65 20 64 61 74 61 20 61 67 61  k.# the data aga
1a20: 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  in..#.do_test bt
1a30: 72 65 65 2d 34 2e 36 20 7b 0a 20 20 6c 69 6e 64  ree-4.6 {.  lind
1a40: 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f  ex [btree_pager_
1a50: 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d  stats $::b1] 1.}
1a60: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {2}.do_test btr
1a70: 65 65 2d 34 2e 37 20 7b 0a 20 20 62 74 72 65 65  ee-4.7 {.  btree
1a80: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
1a90: 3a 63 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  :c1.  lindex [bt
1aa0: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
1ab0: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64  $::b1] 1.} {0}.d
1ac0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 38  o_test btree-4.8
1ad0: 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65   {.  btree_close
1ae0: 20 24 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 62   $::b1.  set ::b
1af0: 31 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65  1 [btree_open te
1b00: 73 74 31 2e 62 74 5d 0a 20 20 73 65 74 20 3a 3a  st1.bt].  set ::
1b10: 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c1 [btree_cursor
1b20: 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69   $::b1 2 1].  li
1b30: 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65  ndex [btree_page
1b40: 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31  r_stats $::b1] 1
1b50: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {2}.do_test b
1b60: 74 72 65 65 2d 34 2e 39 20 7b 0a 20 20 73 65 74  tree-4.9 {.  set
1b70: 20 72 20 7b 7d 0a 20 20 62 74 72 65 65 5f 66 69   r {}.  btree_fi
1b80: 72 73 74 20 24 3a 3a 63 31 0a 20 20 77 68 69 6c  rst $::c1.  whil
1b90: 65 20 31 20 7b 0a 20 20 20 20 73 65 74 20 6b 65  e 1 {.    set ke
1ba0: 79 20 5b 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  y [btree_key $::
1bb0: 63 31 5d 0a 20 20 20 20 69 66 20 7b 24 6b 65 79  c1].    if {$key
1bc0: 3d 3d 22 22 7d 20 62 72 65 61 6b 0a 20 20 20 20  ==""} break.    
1bd0: 6c 61 70 70 65 6e 64 20 72 20 24 6b 65 79 0a 20  lappend r $key. 
1be0: 20 20 20 6c 61 70 70 65 6e 64 20 72 20 5b 62 74     lappend r [bt
1bf0: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d 0a  ree_data $::c1].
1c00: 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24      btree_next $
1c10: 3a 3a 63 31 0a 20 20 7d 0a 20 20 73 65 74 20 72  ::c1.  }.  set r
1c20: 20 20 20 0a 7d 20 7b 66 69 76 65 20 35 2e 30 30     .} {five 5.00
1c30: 20 66 6f 75 72 20 34 2e 30 30 20 73 69 78 20 36   four 4.00 six 6
1c40: 2e 30 30 20 74 68 72 65 65 20 33 2e 30 30 20 74  .00 three 3.00 t
1c50: 77 6f 20 32 2e 30 30 7d 0a 0a 23 20 54 72 79 20  wo 2.00}..# Try 
1c60: 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
1c70: 65 20 6d 65 74 61 20 64 61 74 61 0a 23 0a 64 6f  e meta data.#.do
1c80: 5f 74 65 73 74 20 62 74 72 65 65 2d 35 2e 31 20  _test btree-5.1 
1c90: 7b 0a 20 20 62 74 72 65 65 5f 67 65 74 5f 6d 65  {.  btree_get_me
1ca0: 74 61 20 24 3a 3a 62 31 0a 7d 20 7b 30 20 30 20  ta $::b1.} {0 0 
1cb0: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 7d  0 0 0 0 0 0 0 0}
1cc0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 35  .do_test btree-5
1cd0: 2e 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63  .2 {.  set rc [c
1ce0: 61 74 63 68 20 7b 62 74 72 65 65 5f 75 70 64 61  atch {btree_upda
1cf0: 74 65 5f 6d 65 74 61 20 24 3a 3a 62 31 20 31 20  te_meta $::b1 1 
1d00: 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 20  2 3 4 5 6 7 8 9 
1d10: 31 30 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  10} msg].  lappe
1d20: 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20  nd rc $msg.} {1 
1d30: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
1d40: 5f 74 65 73 74 20 62 74 72 65 65 2d 35 2e 33 20  _test btree-5.3 
1d50: 7b 0a 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f  {.  btree_begin_
1d60: 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62  transaction $::b
1d70: 31 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  1.  set rc [catc
1d80: 68 20 7b 62 74 72 65 65 5f 75 70 64 61 74 65 5f  h {btree_update_
1d90: 6d 65 74 61 20 24 3a 3a 62 31 20 31 20 32 20 33  meta $::b1 1 2 3
1da0: 20 34 20 35 20 36 20 37 20 38 20 39 20 31 30 7d   4 5 6 7 8 9 10}
1db0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1dc0: 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d  rc $msg.} {0 {}}
1dd0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 35  .do_test btree-5
1de0: 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 67 65 74  .4 {.  btree_get
1df0: 5f 6d 65 74 61 20 24 3a 3a 62 31 0a 7d 20 7b 30  _meta $::b1.} {0
1e00: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39   2 3 4 5 6 7 8 9
1e10: 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   10}.do_test btr
1e20: 65 65 2d 35 2e 35 20 7b 0a 20 20 62 74 72 65 65  ee-5.5 {.  btree
1e30: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
1e40: 3a 63 31 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c  :c1.  btree_roll
1e50: 62 61 63 6b 20 24 3a 3a 62 31 0a 20 20 62 74 72  back $::b1.  btr
1e60: 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62  ee_get_meta $::b
1e70: 31 0a 7d 20 7b 30 20 30 20 30 20 30 20 30 20 30  1.} {0 0 0 0 0 0
1e80: 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73   0 0 0 0}.do_tes
1e90: 74 20 62 74 72 65 65 2d 35 2e 36 20 7b 0a 20 20  t btree-5.6 {.  
1ea0: 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e  btree_begin_tran
1eb0: 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20  saction $::b1.  
1ec0: 62 74 72 65 65 5f 75 70 64 61 74 65 5f 6d 65 74  btree_update_met
1ed0: 61 20 24 3a 3a 62 31 20 39 39 39 20 31 30 20 32  a $::b1 999 10 2
1ee0: 30 20 33 30 20 34 30 20 35 30 20 36 30 20 37 30  0 30 40 50 60 70
1ef0: 20 38 30 20 39 30 0a 20 20 62 74 72 65 65 5f 63   80 90.  btree_c
1f00: 6f 6d 6d 69 74 20 24 3a 3a 62 31 0a 20 20 62 74  ommit $::b1.  bt
1f10: 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a  ree_get_meta $::
1f20: 62 31 0a 7d 20 7b 30 20 31 30 20 32 30 20 33 30  b1.} {0 10 20 30
1f30: 20 34 30 20 35 30 20 36 30 20 37 30 20 38 30 20   40 50 60 70 80 
1f40: 39 30 7d 0a 0a 70 72 6f 63 20 73 65 6c 65 63 74  90}..proc select
1f50: 5f 61 6c 6c 20 7b 63 75 72 73 6f 72 7d 20 7b 0a  _all {cursor} {.
1f60: 20 20 73 65 74 20 72 20 7b 7d 0a 20 20 62 74 72    set r {}.  btr
1f70: 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 63 75 72 73  ee_move_to $curs
1f80: 6f 72 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31 20  or {}.  while 1 
1f90: 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b 62  {.    set key [b
1fa0: 74 72 65 65 5f 6b 65 79 20 24 63 75 72 73 6f 72  tree_key $cursor
1fb0: 5d 0a 20 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d  ].    if {$key==
1fc0: 22 22 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61  ""} break.    la
1fd0: 70 70 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20  ppend r $key.   
1fe0: 20 6c 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65   lappend r [btre
1ff0: 65 5f 64 61 74 61 20 24 63 75 72 73 6f 72 5d 0a  e_data $cursor].
2000: 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24      btree_next $
2010: 63 75 72 73 6f 72 0a 20 20 7d 0a 20 20 72 65 74  cursor.  }.  ret
2020: 75 72 6e 20 24 72 0a 7d 0a 70 72 6f 63 20 73 65  urn $r.}.proc se
2030: 6c 65 63 74 5f 6b 65 79 73 20 7b 63 75 72 73 6f  lect_keys {curso
2040: 72 7d 20 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a  r} {.  set r {}.
2050: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
2060: 24 63 75 72 73 6f 72 20 7b 7d 0a 20 20 77 68 69  $cursor {}.  whi
2070: 6c 65 20 31 20 7b 0a 20 20 20 20 73 65 74 20 6b  le 1 {.    set k
2080: 65 79 20 5b 62 74 72 65 65 5f 6b 65 79 20 24 63  ey [btree_key $c
2090: 75 72 73 6f 72 5d 0a 20 20 20 20 69 66 20 7b 24  ursor].    if {$
20a0: 6b 65 79 3d 3d 22 22 7d 20 62 72 65 61 6b 0a 20  key==""} break. 
20b0: 20 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6b 65     lappend r $ke
20c0: 79 0a 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74  y.    btree_next
20d0: 20 24 63 75 72 73 6f 72 0a 20 20 7d 0a 20 20 72   $cursor.  }.  r
20e0: 65 74 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 72  eturn $r.}..# Tr
20f0: 79 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  y to create a ne
2100: 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  w table in the d
2110: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 23 0a 64  atabase file.#.d
2120: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 31  o_test btree-6.1
2130: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
2140: 63 68 20 7b 62 74 72 65 65 5f 63 72 65 61 74 65  ch {btree_create
2150: 5f 74 61 62 6c 65 20 24 3a 3a 62 31 7d 20 6d 73  _table $::b1} ms
2160: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20  g].  lappend rc 
2170: 24 6d 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54 45  $msg.} {1 SQLITE
2180: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
2190: 62 74 72 65 65 2d 36 2e 32 20 7b 0a 20 20 62 74  btree-6.2 {.  bt
21a0: 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61  ree_begin_transa
21b0: 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 73 65  ction $::b1.  se
21c0: 74 20 3a 3a 74 32 20 5b 62 74 72 65 65 5f 63 72  t ::t2 [btree_cr
21d0: 65 61 74 65 5f 74 61 62 6c 65 20 24 3a 3a 62 31  eate_table $::b1
21e0: 5d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20  ].} {3}.do_test 
21f0: 62 74 72 65 65 2d 36 2e 32 2e 31 20 7b 0a 20 20  btree-6.2.1 {.  
2200: 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61  lindex [btree_pa
2210: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d  ger_stats $::b1]
2220: 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   1.} {1}.do_test
2230: 20 62 74 72 65 65 2d 36 2e 32 2e 32 20 7b 0a 20   btree-6.2.2 {. 
2240: 20 73 65 74 20 3a 3a 63 32 20 5b 62 74 72 65 65   set ::c2 [btree
2250: 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 24 3a  _cursor $::b1 $:
2260: 3a 74 32 20 31 5d 0a 20 20 6c 69 6e 64 65 78 20  :t2 1].  lindex 
2270: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
2280: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32  ts $::b1] 1.} {2
2290: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
22a0: 36 2e 32 2e 33 20 7b 0a 20 20 62 74 72 65 65 5f  6.2.3 {.  btree_
22b0: 69 6e 73 65 72 74 20 24 3a 3a 63 32 20 74 65 6e  insert $::c2 ten
22c0: 20 31 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20   10.  btree_key 
22d0: 24 3a 3a 63 32 0a 7d 20 7b 74 65 6e 7d 0a 64 6f  $::c2.} {ten}.do
22e0: 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 33 20  _test btree-6.3 
22f0: 7b 0a 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74  {.  btree_commit
2300: 20 24 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 63   $::b1.  set ::c
2310: 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20  1 [btree_cursor 
2320: 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69 6e  $::b1 2 1].  lin
2330: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
2340: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
2350: 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {3}.do_test bt
2360: 72 65 65 2d 36 2e 33 2e 31 20 7b 0a 20 20 73 65  ree-6.3.1 {.  se
2370: 6c 65 63 74 5f 61 6c 6c 20 24 3a 3a 63 31 0a 7d  lect_all $::c1.}
2380: 20 7b 66 69 76 65 20 35 2e 30 30 20 66 6f 75 72   {five 5.00 four
2390: 20 34 2e 30 30 20 73 69 78 20 36 2e 30 30 20 74   4.00 six 6.00 t
23a0: 68 72 65 65 20 33 2e 30 30 20 74 77 6f 20 32 2e  hree 3.00 two 2.
23b0: 30 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f  00}.#btree_page_
23c0: 64 75 6d 70 20 24 3a 3a 62 31 20 33 0a 64 6f 5f  dump $::b1 3.do_
23d0: 74 65 73 74 20 62 74 72 65 65 2d 36 2e 34 20 7b  test btree-6.4 {
23e0: 0a 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a  .  select_all $:
23f0: 3a 63 32 0a 7d 20 7b 74 65 6e 20 31 30 7d 0a 0a  :c2.} {ten 10}..
2400: 23 20 44 72 6f 70 20 74 68 65 20 6e 65 77 20 74  # Drop the new t
2410: 61 62 6c 65 2c 20 74 68 65 6e 20 63 72 65 61 74  able, then creat
2420: 65 20 69 74 20 61 67 61 69 6e 20 61 6e 65 77 2e  e it again anew.
2430: 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .#.do_test btree
2440: 2d 36 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f 62  -6.5 {.  btree_b
2450: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e  egin_transaction
2460: 20 24 3a 3a 62 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::b1.} {}.do_t
2470: 65 73 74 20 62 74 72 65 65 2d 36 2e 36 20 7b 0a  est btree-6.6 {.
2480: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75    btree_close_cu
2490: 72 73 6f 72 20 24 3a 3a 63 32 0a 7d 20 7b 7d 0a  rsor $::c2.} {}.
24a0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e  do_test btree-6.
24b0: 36 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b  6.1 {.  lindex [
24c0: 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74  btree_pager_stat
24d0: 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d  s $::b1] 1.} {2}
24e0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
24f0: 2e 37 20 7b 0a 20 20 62 74 72 65 65 5f 64 72 6f  .7 {.  btree_dro
2500: 70 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20 24 3a  p_table $::b1 $:
2510: 3a 74 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  :t2.} {}.do_test
2520: 20 62 74 72 65 65 2d 36 2e 37 2e 31 20 7b 0a 20   btree-6.7.1 {. 
2530: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67   lindex [btree_g
2540: 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30  et_meta $::b1] 0
2550: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {1}.do_test b
2560: 74 72 65 65 2d 36 2e 38 20 7b 0a 20 20 73 65 74  tree-6.8 {.  set
2570: 20 3a 3a 74 32 20 5b 62 74 72 65 65 5f 63 72 65   ::t2 [btree_cre
2580: 61 74 65 5f 74 61 62 6c 65 20 24 3a 3a 62 31 5d  ate_table $::b1]
2590: 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {3}.do_test b
25a0: 74 72 65 65 2d 36 2e 38 2e 31 20 7b 0a 20 20 6c  tree-6.8.1 {.  l
25b0: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67 65 74  index [btree_get
25c0: 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a 7d  _meta $::b1] 0.}
25d0: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {0}.do_test btr
25e0: 65 65 2d 36 2e 39 20 7b 0a 20 20 73 65 74 20 3a  ee-6.9 {.  set :
25f0: 3a 63 32 20 5b 62 74 72 65 65 5f 63 75 72 73 6f  :c2 [btree_curso
2600: 72 20 24 3a 3a 62 31 20 24 3a 3a 74 32 20 31 5d  r $::b1 $::t2 1]
2610: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
2620: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
2630: 62 31 5d 20 31 0a 7d 20 7b 33 7d 0a 0a 64 6f 5f  b1] 1.} {3}..do_
2640: 74 65 73 74 20 62 74 72 65 65 2d 36 2e 39 2e 31  test btree-6.9.1
2650: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
2660: 74 6f 20 24 3a 3a 63 32 20 7b 7d 0a 20 20 62 74  to $::c2 {}.  bt
2670: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 32 0a 7d 20  ree_key $::c2.} 
2680: 7b 7d 0a 0a 23 20 49 66 20 77 65 20 64 72 6f 70  {}..# If we drop
2690: 20 74 61 62 6c 65 20 32 20 69 74 20 6a 75 73 74   table 2 it just
26a0: 20 63 6c 65 61 72 73 20 74 68 65 20 74 61 62 6c   clears the tabl
26b0: 65 2e 20 20 54 61 62 6c 65 20 32 20 61 6c 77 61  e.  Table 2 alwa
26c0: 79 73 20 65 78 69 73 74 73 2e 0a 23 0a 64 6f 5f  ys exists..#.do_
26d0: 74 65 73 74 20 62 74 72 65 65 2d 36 2e 31 30 20  test btree-6.10 
26e0: 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  {.  btree_close_
26f0: 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62  cursor $::c1.  b
2700: 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20  tree_drop_table 
2710: 24 3a 3a 62 31 20 32 0a 20 20 73 65 74 20 3a 3a  $::b1 2.  set ::
2720: 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c1 [btree_cursor
2730: 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74   $::b1 2 1].  bt
2740: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
2750: 31 20 7b 7d 0a 20 20 62 74 72 65 65 5f 6b 65 79  1 {}.  btree_key
2760: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
2770: 65 73 74 20 62 74 72 65 65 2d 36 2e 31 31 20 7b  est btree-6.11 {
2780: 0a 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20  .  btree_commit 
2790: 24 3a 3a 62 31 0a 20 20 73 65 6c 65 63 74 5f 61  $::b1.  select_a
27a0: 6c 6c 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f  ll $::c1.} {}.do
27b0: 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 31 32  _test btree-6.12
27c0: 20 7b 0a 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20   {.  select_all 
27d0: 24 3a 3a 63 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  $::c2.} {}.do_te
27e0: 73 74 20 62 74 72 65 65 2d 36 2e 31 33 20 7b 0a  st btree-6.13 {.
27f0: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75    btree_close_cu
2800: 72 73 6f 72 20 24 3a 3a 63 32 0a 20 20 6c 69 6e  rsor $::c2.  lin
2810: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
2820: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
2830: 7d 20 7b 32 7d 0a 0a 23 20 43 68 65 63 6b 20 74  } {2}..# Check t
2840: 6f 20 73 65 65 20 74 68 61 74 20 70 61 67 65 73  o see that pages
2850: 20 64 65 66 72 61 67 6d 65 6e 74 20 70 72 6f 70   defragment prop
2860: 65 72 6c 79 2e 20 20 54 6f 20 64 6f 20 74 68 69  erly.  To do thi
2870: 73 20 74 65 73 74 20 77 65 20 77 69 6c 6c 0a 23  s test we will.#
2880: 20 0a 23 20 20 20 31 2e 20 20 46 69 6c 6c 20 74   .#   1.  Fill t
2890: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 74 61  he first page ta
28a0: 62 6c 65 20 32 20 77 69 74 68 20 64 61 74 61 2e  ble 2 with data.
28b0: 0a 23 20 20 20 32 2e 20 20 44 65 6c 65 74 65 20  .#   2.  Delete 
28c0: 65 76 65 72 79 20 6f 74 68 65 72 20 65 6e 74 72  every other entr
28d0: 79 20 6f 66 20 74 61 62 6c 65 20 32 2e 20 0a 23  y of table 2. .#
28e0: 20 20 20 33 2e 20 20 49 6e 73 65 72 74 20 61 20     3.  Insert a 
28f0: 73 69 6e 67 6c 65 20 65 6e 74 72 79 20 74 68 61  single entry tha
2900: 74 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20  t requires more 
2910: 63 6f 6e 74 69 67 75 6f 75 73 0a 23 20 20 20 20  contiguous.#    
2920: 20 20 20 73 70 61 63 65 20 74 68 61 6e 20 69 73     space than is
2930: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 23 0a 64 6f   available..#.do
2940: 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e 31 20  _test btree-7.1 
2950: 7b 0a 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f  {.  btree_begin_
2960: 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62  transaction $::b
2970: 31 0a 7d 20 7b 7d 0a 63 61 74 63 68 20 7b 75 6e  1.} {}.catch {un
2980: 73 65 74 20 6b 65 79 7d 0a 63 61 74 63 68 20 7b  set key}.catch {
2990: 75 6e 73 65 74 20 64 61 74 61 7d 0a 64 6f 5f 74  unset data}.do_t
29a0: 65 73 74 20 62 74 72 65 65 2d 37 2e 32 20 7b 0a  est btree-7.2 {.
29b0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
29c0: 7b 24 69 3c 33 36 7d 20 7b 69 6e 63 72 20 69 7d  {$i<36} {incr i}
29d0: 20 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b   {.    set key [
29e0: 66 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a  format %03d $i].
29f0: 20 20 20 20 73 65 74 20 64 61 74 61 20 22 2a 2a      set data "**
2a00: 2a 20 24 6b 65 79 20 2a 2a 2a 22 0a 20 20 20 20  * $key ***".    
2a10: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
2a20: 63 31 20 24 6b 65 79 20 24 64 61 74 61 0a 20 20  c1 $key $data.  
2a30: 7d 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65  }.  lrange [btre
2a40: 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a  e_cursor_dump $:
2a50: 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 38 20 31 7d  :c1] 4 5.} {8 1}
2a60: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37  .do_test btree-7
2a70: 2e 33 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76  .3 {.  btree_mov
2a80: 65 5f 74 6f 20 24 3a 3a 63 31 20 30 30 30 0a 20  e_to $::c1 000. 
2a90: 20 77 68 69 6c 65 20 7b 5b 62 74 72 65 65 5f 6b   while {[btree_k
2aa0: 65 79 20 24 3a 3a 63 31 5d 21 3d 22 22 7d 20 7b  ey $::c1]!=""} {
2ab0: 0a 20 20 20 20 62 74 72 65 65 5f 64 65 6c 65 74  .    btree_delet
2ac0: 65 20 24 3a 3a 63 31 0a 20 20 20 20 62 74 72 65  e $::c1.    btre
2ad0: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 20  e_next $::c1.   
2ae0: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
2af0: 31 0a 20 20 7d 0a 20 20 6c 72 61 6e 67 65 20 5b  1.  }.  lrange [
2b00: 62 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d  btree_cursor_dum
2b10: 70 20 24 3a 3a 63 31 5d 20 34 20 35 0a 7d 20 7b  p $::c1] 4 5.} {
2b20: 35 31 32 20 31 39 7d 0a 23 62 74 72 65 65 5f 70  512 19}.#btree_p
2b30: 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32  age_dump $::b1 2
2b40: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37  .do_test btree-7
2b50: 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73  .4 {.  btree_ins
2b60: 65 72 74 20 24 3a 3a 63 31 20 30 31 38 20 7b 2a  ert $::c1 018 {*
2b70: 2a 2a 20 30 31 38 20 2a 2a 2a 2b 2b 2b 7d 0a 20  ** 018 ***+++}. 
2b80: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
2b90: 0a 7d 20 7b 30 31 38 7d 0a 64 6f 5f 74 65 73 74  .} {018}.do_test
2ba0: 20 62 74 72 65 65 2d 37 2e 35 20 7b 0a 20 20 6c   btree-7.5 {.  l
2bb0: 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72  range [btree_cur
2bc0: 73 6f 72 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20  sor_dump $::c1] 
2bd0: 34 20 35 0a 7d 20 7b 34 38 30 20 31 7d 0a 23 62  4 5.} {480 1}.#b
2be0: 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24  tree_page_dump $
2bf0: 3a 3a 62 31 20 32 0a 0a 23 20 44 65 6c 65 74 65  ::b1 2..# Delete
2c00: 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 6d 61 6b   an entry to mak
2c10: 65 20 61 20 68 6f 6c 65 20 6f 66 20 61 20 6b 6e  e a hole of a kn
2c20: 6f 77 6e 20 73 69 7a 65 2c 20 74 68 65 6e 20 69  own size, then i
2c30: 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 63 72 65  mmediately recre
2c40: 61 74 65 0a 23 20 74 68 61 74 20 65 6e 74 72 79  ate.# that entry
2c50: 2e 20 20 54 68 69 73 20 74 65 73 74 73 20 74 68  .  This tests th
2c60: 65 20 70 61 74 68 20 69 6e 74 6f 20 61 6c 6c 6f  e path into allo
2c70: 63 61 74 65 53 70 61 63 65 20 77 68 65 72 65 20  cateSpace where 
2c80: 74 68 65 20 68 6f 6c 65 20 65 78 61 63 74 6c 79  the hole exactly
2c90: 0a 23 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  .# matches the s
2ca0: 69 7a 65 20 6f 66 20 74 68 65 20 64 65 73 69 72  ize of the desir
2cb0: 65 64 20 73 70 61 63 65 2e 0a 23 0a 64 6f 5f 74  ed space..#.do_t
2cc0: 65 73 74 20 62 74 72 65 65 2d 37 2e 36 20 7b 0a  est btree-7.6 {.
2cd0: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
2ce0: 24 3a 3a 63 31 20 30 30 37 0a 20 20 62 74 72 65  $::c1 007.  btre
2cf0: 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20  e_delete $::c1. 
2d00: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
2d10: 3a 3a 63 31 20 30 31 31 0a 20 20 62 74 72 65 65  ::c1 011.  btree
2d20: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 7d 20  _delete $::c1.} 
2d30: 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  {}.do_test btree
2d40: 2d 37 2e 37 20 7b 0a 20 20 6c 69 6e 64 65 78 20  -7.7 {.  lindex 
2d50: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75  [btree_cursor_du
2d60: 6d 70 20 24 3a 3a 63 31 5d 20 35 0a 7d 20 7b 33  mp $::c1] 5.} {3
2d70: 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75  }.#btree_page_du
2d80: 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f 5f 74 65  mp $::b1 2.do_te
2d90: 73 74 20 62 74 72 65 65 2d 37 2e 38 20 7b 0a 20  st btree-7.8 {. 
2da0: 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a   btree_insert $:
2db0: 3a 63 31 20 30 30 37 20 7b 2a 2a 2a 20 30 30 37  :c1 007 {*** 007
2dc0: 20 2a 2a 2a 7d 0a 20 20 6c 69 6e 64 65 78 20 5b   ***}.  lindex [
2dd0: 62 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d  btree_cursor_dum
2de0: 70 20 24 3a 3a 63 31 5d 20 35 0a 7d 20 7b 32 7d  p $::c1] 5.} {2}
2df0: 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d  .#btree_page_dum
2e00: 70 20 24 3a 3a 62 31 20 32 0a 0a 23 20 4d 61 6b  p $::b1 2..# Mak
2e10: 65 20 73 75 72 65 20 74 68 65 20 66 72 65 65 53  e sure the freeS
2e20: 70 61 63 65 28 29 20 72 6f 75 74 69 6e 65 20 70  pace() routine p
2e30: 72 6f 70 65 72 6c 79 20 63 6f 61 6c 65 73 65 73  roperly coaleses
2e40: 20 61 64 6a 61 63 65 6e 74 20 6d 65 6d 6f 72 79   adjacent memory
2e50: 20 62 6c 6f 63 6b 73 0a 23 0a 64 6f 5f 74 65 73   blocks.#.do_tes
2e60: 74 20 62 74 72 65 65 2d 37 2e 39 20 7b 0a 20 20  t btree-7.9 {.  
2e70: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
2e80: 3a 63 31 20 30 31 33 0a 20 20 62 74 72 65 65 5f  :c1 013.  btree_
2e90: 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c  delete $::c1.  l
2ea0: 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72  range [btree_cur
2eb0: 73 6f 72 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20  sor_dump $::c1] 
2ec0: 34 20 35 0a 7d 20 7b 35 33 36 20 32 7d 0a 64 6f  4 5.} {536 2}.do
2ed0: 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e 31 30  _test btree-7.10
2ee0: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
2ef0: 74 6f 20 24 3a 3a 63 31 20 30 30 39 0a 20 20 62  to $::c1 009.  b
2f00: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
2f10: 31 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65  1.  lrange [btre
2f20: 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a  e_cursor_dump $:
2f30: 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 35 36 34 20  :c1] 4 5.} {564 
2f40: 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  2}.do_test btree
2f50: 2d 37 2e 31 31 20 7b 0a 20 20 62 74 72 65 65 5f  -7.11 {.  btree_
2f60: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 30 31  move_to $::c1 01
2f70: 38 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65  8.  btree_delete
2f80: 20 24 3a 3a 63 31 0a 20 20 6c 72 61 6e 67 65 20   $::c1.  lrange 
2f90: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75  [btree_cursor_du
2fa0: 6d 70 20 24 3a 3a 63 31 5d 20 34 20 35 0a 7d 20  mp $::c1] 4 5.} 
2fb0: 7b 35 39 36 20 32 7d 0a 64 6f 5f 74 65 73 74 20  {596 2}.do_test 
2fc0: 62 74 72 65 65 2d 37 2e 31 33 20 7b 0a 20 20 62  btree-7.13 {.  b
2fd0: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
2fe0: 63 31 20 30 33 33 0a 20 20 62 74 72 65 65 5f 64  c1 033.  btree_d
2ff0: 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c 72  elete $::c1.  lr
3000: 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73  ange [btree_curs
3010: 6f 72 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20 34  or_dump $::c1] 4
3020: 20 35 0a 7d 20 7b 36 32 34 20 33 7d 0a 64 6f 5f   5.} {624 3}.do_
3030: 74 65 73 74 20 62 74 72 65 65 2d 37 2e 31 34 20  test btree-7.14 
3040: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
3050: 6f 20 24 3a 3a 63 31 20 30 33 35 0a 20 20 62 74  o $::c1 035.  bt
3060: 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31  ree_delete $::c1
3070: 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65 65  .  lrange [btree
3080: 5f 63 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a 3a  _cursor_dump $::
3090: 63 31 5d 20 34 20 35 0a 7d 20 7b 36 35 32 20 32  c1] 4 5.} {652 2
30a0: 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75  }.#btree_page_du
30b0: 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f 5f 74 65  mp $::b1 2.do_te
30c0: 73 74 20 62 74 72 65 65 2d 37 2e 31 35 20 7b 0a  st btree-7.15 {.
30d0: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
30e0: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
30f0: 31 5d 20 31 0a 7d 20 7b 32 7d 0a 0a 23 20 43 68  1] 1.} {2}..# Ch
3100: 65 63 6b 20 74 6f 20 73 65 65 20 74 68 61 74 20  eck to see that 
3110: 64 61 74 61 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  data on overflow
3120: 20 70 61 67 65 73 20 77 6f 72 6b 20 63 6f 72 72   pages work corr
3130: 65 63 74 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74  ectly..#.do_test
3140: 20 62 74 72 65 65 2d 38 2e 31 20 7b 0a 20 20 73   btree-8.1 {.  s
3150: 65 74 20 64 61 74 61 20 22 2a 2a 2a 20 54 68 69  et data "*** Thi
3160: 73 20 69 73 20 61 20 76 65 72 79 20 6c 6f 6e 67  s is a very long
3170: 20 6b 65 79 20 22 0a 20 20 77 68 69 6c 65 20 7b   key ".  while {
3180: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
3190: 64 61 74 61 5d 3c 32 35 36 7d 20 7b 61 70 70 65  data]<256} {appe
31a0: 6e 64 20 64 61 74 61 20 24 64 61 74 61 7d 0a 20  nd data $data}. 
31b0: 20 73 65 74 20 3a 3a 64 61 74 61 20 24 64 61 74   set ::data $dat
31c0: 61 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74  a.  btree_insert
31d0: 20 24 3a 3a 63 31 20 30 32 30 20 24 64 61 74 61   $::c1 020 $data
31e0: 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f 70 61 67  .} {}.#btree_pag
31f0: 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64  e_dump $::b1 2.d
3200: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31  o_test btree-8.1
3210: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
3220: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
3230: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a   $::b1] 1.} {2}.
3240: 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66  #btree_pager_ref
3250: 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 64 6f 5f 74  _dump $::b1.do_t
3260: 65 73 74 20 62 74 72 65 65 2d 38 2e 32 20 7b 0a  est btree-8.2 {.
3270: 20 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20    string length 
3280: 5b 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63  [btree_data $::c
3290: 31 5d 0a 7d 20 5b 73 74 72 69 6e 67 20 6c 65 6e  1].} [string len
32a0: 67 74 68 20 24 3a 3a 64 61 74 61 5d 0a 64 6f 5f  gth $::data].do_
32b0: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 33 20 7b  test btree-8.3 {
32c0: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
32d0: 3a 63 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f  :c1.} $::data.do
32e0: 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 34 20  _test btree-8.4 
32f0: 7b 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65  {.  btree_delete
3300: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
3310: 65 73 74 20 62 74 72 65 65 2d 38 2e 34 2e 31 20  est btree-8.4.1 
3320: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  {.  lindex [btre
3330: 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31  e_get_meta $::b1
3340: 5d 20 30 0a 7d 20 5b 65 78 70 72 20 7b 69 6e 74  ] 0.} [expr {int
3350: 28 28 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  (([string length
3360: 20 24 3a 3a 64 61 74 61 5d 2d 32 33 38 2b 31 30   $::data]-238+10
3370: 31 39 29 2f 31 30 32 30 29 7d 5d 0a 64 6f 5f 74  19)/1020)}].do_t
3380: 65 73 74 20 62 74 72 65 65 2d 38 2e 35 20 7b 0a  est btree-8.5 {.
3390: 20 20 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20    set data "*** 
33a0: 54 68 69 73 20 69 73 20 61 6e 20 65 76 65 6e 20  This is an even 
33b0: 6c 6f 6e 67 65 72 20 6b 65 79 22 0a 20 20 77 68  longer key".  wh
33c0: 69 6c 65 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  ile {[string len
33d0: 67 74 68 20 24 64 61 74 61 5d 3c 32 30 30 30 7d  gth $data]<2000}
33e0: 20 7b 61 70 70 65 6e 64 20 64 61 74 61 20 24 64   {append data $d
33f0: 61 74 61 7d 0a 20 20 73 65 74 20 3a 3a 64 61 74  ata}.  set ::dat
3400: 61 20 24 64 61 74 61 0a 20 20 62 74 72 65 65 5f  a $data.  btree_
3410: 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 30 32 30  insert $::c1 020
3420: 20 24 64 61 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74   $data.} {}.do_t
3430: 65 73 74 20 62 74 72 65 65 2d 38 2e 36 20 7b 0a  est btree-8.6 {.
3440: 20 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20    string length 
3450: 5b 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63  [btree_data $::c
3460: 31 5d 0a 7d 20 5b 73 74 72 69 6e 67 20 6c 65 6e  1].} [string len
3470: 67 74 68 20 24 3a 3a 64 61 74 61 5d 0a 64 6f 5f  gth $::data].do_
3480: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 37 20 7b  test btree-8.7 {
3490: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
34a0: 3a 63 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f  :c1.} $::data.do
34b0: 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 38 20  _test btree-8.8 
34c0: 7b 0a 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74  {.  btree_commit
34d0: 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 64   $::b1.  btree_d
34e0: 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64  ata $::c1.} $::d
34f0: 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ata.do_test btre
3500: 65 2d 38 2e 39 20 7b 0a 20 20 62 74 72 65 65 5f  e-8.9 {.  btree_
3510: 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a  close_cursor $::
3520: 63 31 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65  c1.  btree_close
3530: 20 24 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 62   $::b1.  set ::b
3540: 31 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65  1 [btree_open te
3550: 73 74 31 2e 62 74 5d 0a 20 20 73 65 74 20 3a 3a  st1.bt].  set ::
3560: 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c1 [btree_cursor
3570: 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74   $::b1 2 1].  bt
3580: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
3590: 31 20 30 32 30 0a 20 20 62 74 72 65 65 5f 64 61  1 020.  btree_da
35a0: 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61  ta $::c1.} $::da
35b0: 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  ta.do_test btree
35c0: 2d 38 2e 31 30 20 7b 0a 20 20 62 74 72 65 65 5f  -8.10 {.  btree_
35d0: 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f  begin_transactio
35e0: 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f  n $::b1.  btree_
35f0: 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 7d 20 7b  delete $::c1.} {
3600: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
3610: 38 2e 31 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20  8.11 {.  lindex 
3620: 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20  [btree_get_meta 
3630: 24 3a 3a 62 31 5d 20 30 0a 7d 20 5b 65 78 70 72  $::b1] 0.} [expr
3640: 20 7b 69 6e 74 28 28 5b 73 74 72 69 6e 67 20 6c   {int(([string l
3650: 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 5d 2d 32  ength $::data]-2
3660: 33 38 2b 31 30 31 39 29 2f 31 30 32 30 29 7d 5d  38+1019)/1020)}]
3670: 0a 0a 23 20 4e 6f 77 20 63 68 65 63 6b 20 6f 75  ..# Now check ou
3680: 74 20 6b 65 79 73 20 6f 6e 20 6f 76 65 72 66 6c  t keys on overfl
3690: 6f 77 20 70 61 67 65 73 2e 0a 23 0a 64 6f 5f 74  ow pages..#.do_t
36a0: 65 73 74 20 62 74 72 65 65 2d 38 2e 31 32 20 7b  est btree-8.12 {
36b0: 0a 20 20 73 65 74 20 3a 3a 6b 65 79 70 72 65 66  .  set ::keypref
36c0: 69 78 20 22 54 68 69 73 20 69 73 20 61 20 6c 6f  ix "This is a lo
36d0: 6e 67 20 70 72 65 66 69 78 20 74 6f 20 61 20 6b  ng prefix to a k
36e0: 65 79 20 22 0a 20 20 77 68 69 6c 65 20 7b 5b 73  ey ".  while {[s
36f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $::
3700: 6b 65 79 70 72 65 66 69 78 5d 3c 32 35 36 7d 20  keyprefix]<256} 
3710: 7b 61 70 70 65 6e 64 20 3a 3a 6b 65 79 70 72 65  {append ::keypre
3720: 66 69 78 20 24 3a 3a 6b 65 79 70 72 65 66 69 78  fix $::keyprefix
3730: 7d 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  }.  btree_close_
3740: 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62  cursor $::c1.  b
3750: 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20  tree_drop_table 
3760: 24 3a 3a 62 31 20 32 0a 20 20 6c 69 6e 64 65 78  $::b1 2.  lindex
3770: 20 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61   [btree_get_meta
3780: 20 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b 34 7d 0a   $::b1] 0.} {4}.
3790: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
37a0: 31 32 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 63  12.1 {.  set ::c
37b0: 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20  1 [btree_cursor 
37c0: 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74 72  $::b1 2 1].  btr
37d0: 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20  ee_insert $::c1 
37e0: 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d 31 20  ${::keyprefix}1 
37f0: 31 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24  1.  btree_data $
3800: 3a 3a 63 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  ::c1.} {1}.do_te
3810: 73 74 20 62 74 72 65 65 2d 38 2e 31 33 20 7b 0a  st btree-8.13 {.
3820: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
3830: 31 0a 7d 20 24 7b 6b 65 79 70 72 65 66 69 78 7d  1.} ${keyprefix}
3840: 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  1.do_test btree-
3850: 38 2e 31 34 20 7b 0a 20 20 62 74 72 65 65 5f 69  8.14 {.  btree_i
3860: 6e 73 65 72 74 20 24 3a 3a 63 31 20 24 7b 3a 3a  nsert $::c1 ${::
3870: 6b 65 79 70 72 65 66 69 78 7d 32 20 32 0a 20 20  keyprefix}2 2.  
3880: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
3890: 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78  c1 ${::keyprefix
38a0: 7d 33 20 33 0a 20 20 62 74 72 65 65 5f 6b 65 79  }3 3.  btree_key
38b0: 20 24 3a 3a 63 31 0a 7d 20 24 7b 6b 65 79 70 72   $::c1.} ${keypr
38c0: 65 66 69 78 7d 33 0a 64 6f 5f 74 65 73 74 20 62  efix}3.do_test b
38d0: 74 72 65 65 2d 38 2e 31 35 20 7b 0a 20 20 62 74  tree-8.15 {.  bt
38e0: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
38f0: 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d  1 ${::keyprefix}
3900: 32 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24  2.  btree_data $
3910: 3a 3a 63 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  ::c1.} {2}.do_te
3920: 73 74 20 62 74 72 65 65 2d 38 2e 31 36 20 7b 0a  st btree-8.16 {.
3930: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
3940: 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65  $::c1 ${::keypre
3950: 66 69 78 7d 31 0a 20 20 62 74 72 65 65 5f 64 61  fix}1.  btree_da
3960: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31 7d 0a 64  ta $::c1.} {1}.d
3970: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31  o_test btree-8.1
3980: 37 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  7 {.  btree_move
3990: 5f 74 6f 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65  _to $::c1 ${::ke
39a0: 79 70 72 65 66 69 78 7d 33 0a 20 20 62 74 72 65  yprefix}3.  btre
39b0: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b  e_data $::c1.} {
39c0: 33 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  3}.do_test btree
39d0: 2d 38 2e 31 38 20 7b 0a 20 20 6c 69 6e 64 65 78  -8.18 {.  lindex
39e0: 20 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61   [btree_get_meta
39f0: 20 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b 31 7d 0a   $::b1] 0.} {1}.
3a00: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3a10: 31 39 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76  19 {.  btree_mov
3a20: 65 5f 74 6f 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b  e_to $::c1 ${::k
3a30: 65 79 70 72 65 66 69 78 7d 32 0a 20 20 62 74 72  eyprefix}2.  btr
3a40: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 24  ee_key $::c1.} $
3a50: 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d 32 0a 23  {::keyprefix}2.#
3a60: 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20  btree_page_dump 
3a70: 24 3a 3a 62 31 20 32 0a 64 6f 5f 74 65 73 74 20  $::b1 2.do_test 
3a80: 62 74 72 65 65 2d 38 2e 32 30 20 7b 0a 20 20 62  btree-8.20 {.  b
3a90: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
3aa0: 31 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24  1.  btree_next $
3ab0: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79  ::c1.  btree_key
3ac0: 20 24 3a 3a 63 31 0a 7d 20 24 7b 3a 3a 6b 65 79   $::c1.} ${::key
3ad0: 70 72 65 66 69 78 7d 33 0a 23 62 74 72 65 65 5f  prefix}3.#btree_
3ae0: 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  page_dump $::b1 
3af0: 32 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  2.do_test btree-
3b00: 38 2e 32 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20  8.21 {.  lindex 
3b10: 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20  [btree_get_meta 
3b20: 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b 32 7d 0a 64  $::b1] 0.} {2}.d
3b30: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32  o_test btree-8.2
3b40: 32 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  2 {.  lindex [bt
3b50: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
3b60: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64  $::b1] 1.} {2}.d
3b70: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32  o_test btree-8.2
3b80: 33 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73  3 {.  btree_clos
3b90: 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20  e_cursor $::c1. 
3ba0: 20 62 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c   btree_drop_tabl
3bb0: 65 20 24 3a 3a 62 31 20 32 0a 20 20 73 65 74 20  e $::b1 2.  set 
3bc0: 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73  ::c1 [btree_curs
3bd0: 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20  or $::b1 2 1].  
3be0: 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67 65  lindex [btree_ge
3bf0: 74 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a  t_meta $::b1] 0.
3c00: 7d 20 7b 34 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {4}.do_test bt
3c10: 72 65 65 2d 38 2e 32 34 20 7b 0a 20 20 6c 69 6e  ree-8.24 {.  lin
3c20: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
3c30: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
3c40: 7d 20 7b 32 7d 0a 23 62 74 72 65 65 5f 70 61 67  } {2}.#btree_pag
3c50: 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62  er_ref_dump $::b
3c60: 31 0a 0a 23 20 43 68 65 63 6b 20 70 61 67 65 20  1..# Check page 
3c70: 73 70 6c 69 74 74 69 6e 67 20 6c 6f 67 69 63 0a  splitting logic.
3c80: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
3c90: 39 2e 31 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74  9.1 {.  for {set
3ca0: 20 69 20 31 7d 20 7b 24 69 3c 3d 31 39 7d 20 7b   i 1} {$i<=19} {
3cb0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65  incr i} {.    se
3cc0: 74 20 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25 30  t key [format %0
3cd0: 33 64 20 24 69 5d 0a 20 20 20 20 73 65 74 20 64  3d $i].    set d
3ce0: 61 74 61 20 22 2a 2a 2a 20 24 6b 65 79 20 2a 2a  ata "*** $key **
3cf0: 2a 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20  * $key *** $key 
3d00: 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 22 0a 20 20  *** $key ***".  
3d10: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
3d20: 3a 3a 63 31 20 24 6b 65 79 20 24 64 61 74 61 0a  ::c1 $key $data.
3d30: 20 20 7d 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f    }.} {}.#btree_
3d40: 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  tree_dump $::b1 
3d50: 32 0a 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72  2.#btree_pager_r
3d60: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 23 73  ef_dump $::b1.#s
3d70: 65 74 20 70 61 67 65 72 5f 72 65 66 69 6e 66 6f  et pager_refinfo
3d80: 5f 65 6e 61 62 6c 65 20 31 0a 64 6f 5f 74 65 73  _enable 1.do_tes
3d90: 74 20 62 74 72 65 65 2d 39 2e 32 20 7b 0a 20 20  t btree-9.2 {.  
3da0: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
3db0: 63 31 20 30 32 30 20 7b 2a 2a 2a 20 30 32 30 20  c1 020 {*** 020 
3dc0: 2a 2a 2a 20 30 32 30 20 2a 2a 2a 20 30 32 30 20  *** 020 *** 020 
3dd0: 2a 2a 2a 20 30 32 30 20 2a 2a 2a 7d 0a 20 20 73  *** 020 ***}.  s
3de0: 65 6c 65 63 74 5f 6b 65 79 73 20 24 3a 3a 63 31  elect_keys $::c1
3df0: 0a 7d 20 7b 30 30 31 20 30 30 32 20 30 30 33 20  .} {001 002 003 
3e00: 30 30 34 20 30 30 35 20 30 30 36 20 30 30 37 20  004 005 006 007 
3e10: 30 30 38 20 30 30 39 20 30 31 30 20 30 31 31 20  008 009 010 011 
3e20: 30 31 32 20 30 31 33 20 30 31 34 20 30 31 35 20  012 013 014 015 
3e30: 30 31 36 20 30 31 37 20 30 31 38 20 30 31 39 20  016 017 018 019 
3e40: 30 32 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65  020}.#btree_page
3e50: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 35 0a 23 62  _dump $::b1 5.#b
3e60: 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24  tree_page_dump $
3e70: 3a 3a 62 31 20 32 0a 23 62 74 72 65 65 5f 70 61  ::b1 2.#btree_pa
3e80: 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 37 0a  ge_dump $::b1 7.
3e90: 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66  #btree_pager_ref
3ea0: 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 23 73 65 74  _dump $::b1.#set
3eb0: 20 70 61 67 65 72 5f 72 65 66 69 6e 66 6f 5f 65   pager_refinfo_e
3ec0: 6e 61 62 6c 65 20 30 0a 0a 23 20 54 68 65 20 70  nable 0..# The p
3ed0: 72 65 76 69 6f 75 73 20 22 73 65 6c 65 63 74 5f  revious "select_
3ee0: 6b 65 79 73 22 20 63 6f 6d 6d 61 6e 64 20 6c 65  keys" command le
3ef0: 66 74 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ft the cursor po
3f00: 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 72 6f  inting at the ro
3f10: 6f 74 0a 23 20 70 61 67 65 2e 20 20 53 6f 20 74  ot.# page.  So t
3f20: 68 65 72 65 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  here should only
3f30: 20 62 65 20 74 77 6f 20 70 61 67 65 73 20 63 68   be two pages ch
3f40: 65 63 6b 65 64 20 6f 75 74 2e 20 20 32 20 28 74  ecked out.  2 (t
3f50: 68 65 20 72 6f 6f 74 29 20 61 6e 64 0a 23 20 70  he root) and.# p
3f60: 61 67 65 20 31 2e 0a 64 6f 5f 74 65 73 74 20 62  age 1..do_test b
3f70: 74 72 65 65 2d 39 2e 32 2e 31 20 7b 0a 20 20 6c  tree-9.2.1 {.  l
3f80: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
3f90: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
3fa0: 31 0a 7d 20 7b 32 7d 0a 66 6f 72 20 7b 73 65 74  1.} {2}.for {set
3fb0: 20 69 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b   i 1} {$i<=20} {
3fc0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74  incr i} {.  do_t
3fd0: 65 73 74 20 62 74 72 65 65 2d 39 2e 33 2e 24 69  est btree-9.3.$i
3fe0: 2e 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20  .1 [subst {.    
3ff0: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
4000: 3a 63 31 20 5b 66 6f 72 6d 61 74 20 25 30 33 64  :c1 [format %03d
4010: 20 24 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 6b   $i].    btree_k
4020: 65 79 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b 66  ey $::c1.  }] [f
4030: 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20  ormat %03d $i]. 
4040: 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39   do_test btree-9
4050: 2e 33 2e 24 69 2e 32 20 5b 73 75 62 73 74 20 7b  .3.$i.2 [subst {
4060: 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f  .    btree_move_
4070: 74 6f 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61 74  to $::c1 [format
4080: 20 25 30 33 64 20 24 69 5d 0a 20 20 20 20 73 74   %03d $i].    st
4090: 72 69 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74 72  ring range \[btr
40a0: 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d 20  ee_data $::c1\] 
40b0: 30 20 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20 5b  0 10.  }] "*** [
40c0: 66 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 20  format %03d $i] 
40d0: 2a 2a 2a 22 0a 7d 0a 64 6f 5f 74 65 73 74 20 62  ***".}.do_test b
40e0: 74 72 65 65 2d 39 2e 34 2e 31 20 7b 0a 20 20 6c  tree-9.4.1 {.  l
40f0: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
4100: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
4110: 31 0a 7d 20 7b 33 7d 0a 0a 23 20 43 68 65 63 6b  1.} {3}..# Check
4120: 20 74 68 65 20 70 61 67 65 20 6a 6f 69 6e 69 6e   the page joinin
4130: 67 20 6c 6f 67 69 63 2e 0a 23 0a 23 62 74 72 65  g logic..#.#btre
4140: 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62  e_page_dump $::b
4150: 31 20 32 0a 23 62 74 72 65 65 5f 70 61 67 65 72  1 2.#btree_pager
4160: 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a  _ref_dump $::b1.
4170: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e  do_test btree-9.
4180: 34 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  4.2 {.  btree_mo
4190: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 30 30 35 0a  ve_to $::c1 005.
41a0: 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24    btree_delete $
41b0: 3a 3a 63 31 0a 7d 20 7b 7d 0a 23 62 74 72 65 65  ::c1.} {}.#btree
41c0: 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31  _page_dump $::b1
41d0: 20 32 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d   2.for {set i 1}
41e0: 20 7b 24 69 3c 3d 31 39 7d 20 7b 69 6e 63 72 20   {$i<=19} {incr 
41f0: 69 7d 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 35  i} {.  if {$i==5
4200: 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 64 6f 5f  } continue.  do_
4210: 74 65 73 74 20 62 74 72 65 65 2d 39 2e 35 2e 24  test btree-9.5.$
4220: 69 2e 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20  i.1 [subst {.   
4230: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
4240: 3a 3a 63 31 20 5b 66 6f 72 6d 61 74 20 25 30 33  ::c1 [format %03
4250: 64 20 24 69 5d 0a 20 20 20 20 62 74 72 65 65 5f  d $i].    btree_
4260: 6b 65 79 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b  key $::c1.  }] [
4270: 66 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a  format %03d $i].
4280: 20 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d    do_test btree-
4290: 39 2e 35 2e 24 69 2e 32 20 5b 73 75 62 73 74 20  9.5.$i.2 [subst 
42a0: 7b 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65  {.    btree_move
42b0: 5f 74 6f 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61  _to $::c1 [forma
42c0: 74 20 25 30 33 64 20 24 69 5d 0a 20 20 20 20 73  t %03d $i].    s
42d0: 74 72 69 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74  tring range \[bt
42e0: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d  ree_data $::c1\]
42f0: 20 30 20 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20   0 10.  }] "*** 
4300: 5b 66 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d  [format %03d $i]
4310: 20 2a 2a 2a 22 0a 7d 0a 23 62 74 72 65 65 5f 70   ***".}.#btree_p
4320: 61 67 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a  ager_ref_dump $:
4330: 3a 62 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  :b1.do_test btre
4340: 65 2d 39 2e 36 20 7b 0a 20 20 62 74 72 65 65 5f  e-9.6 {.  btree_
4350: 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a  close_cursor $::
4360: 63 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72  c1.  lindex [btr
4370: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
4380: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f  ::b1] 1.} {1}.do
4390: 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e 37 20  _test btree-9.7 
43a0: 7b 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c 62 61  {.  btree_rollba
43b0: 63 6b 20 24 3a 3a 62 31 0a 20 20 6c 69 6e 64 65  ck $::b1.  linde
43c0: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
43d0: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
43e0: 7b 30 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 20  {0}..# Create a 
43f0: 74 72 65 65 20 6f 66 20 64 65 70 74 68 20 74 77  tree of depth tw
4400: 6f 2e 20 20 54 68 61 74 20 69 73 2c 20 74 68 65  o.  That is, the
4410: 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 64  re is a single d
4420: 69 76 69 64 65 72 20 65 6e 74 72 79 0a 23 20 6f  ivider entry.# o
4430: 6e 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73  n the root pages
4440: 20 61 6e 64 20 74 77 6f 20 6c 65 61 66 20 70 61   and two leaf pa
4450: 67 65 73 2e 20 20 54 68 65 6e 20 64 65 6c 65 74  ges.  Then delet
4460: 65 20 74 68 65 20 64 69 76 69 64 65 72 20 65 6e  e the divider en
4470: 74 72 79 0a 23 20 73 65 65 20 77 68 61 74 20 68  try.# see what h
4480: 61 70 70 65 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73  appens..#.do_tes
4490: 74 20 62 74 72 65 65 2d 31 30 2e 31 20 7b 0a 20  t btree-10.1 {. 
44a0: 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61   btree_begin_tra
44b0: 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20  nsaction $::b1. 
44c0: 20 62 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c   btree_drop_tabl
44d0: 65 20 24 3a 3a 62 31 20 32 0a 20 20 6c 69 6e 64  e $::b1 2.  lind
44e0: 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f  ex [btree_pager_
44f0: 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d  stats $::b1] 1.}
4500: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {1}.do_test btr
4510: 65 65 2d 31 30 2e 32 20 7b 0a 20 20 73 65 74 20  ee-10.2 {.  set 
4520: 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73  ::c1 [btree_curs
4530: 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20  or $::b1 2 1].  
4540: 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61  lindex [btree_pa
4550: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d  ger_stats $::b1]
4560: 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   1.} {2}.do_test
4570: 20 62 74 72 65 65 2d 31 30 2e 33 20 7b 0a 20 20   btree-10.3 {.  
4580: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
4590: 69 3c 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20  i<=20} {incr i} 
45a0: 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b 66  {.    set key [f
45b0: 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20  ormat %03d $i]. 
45c0: 20 20 20 73 65 74 20 64 61 74 61 20 22 2a 2a 2a     set data "***
45d0: 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a   $key *** $key *
45e0: 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79  ** $key *** $key
45f0: 20 2a 2a 2a 22 0a 20 20 20 20 62 74 72 65 65 5f   ***".    btree_
4600: 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 24 6b 65  insert $::c1 $ke
4610: 79 20 24 64 61 74 61 0a 20 20 7d 0a 20 20 73 65  y $data.  }.  se
4620: 6c 65 63 74 5f 6b 65 79 73 20 24 3a 3a 63 31 0a  lect_keys $::c1.
4630: 7d 20 7b 30 30 31 20 30 30 32 20 30 30 33 20 30  } {001 002 003 0
4640: 30 34 20 30 30 35 20 30 30 36 20 30 30 37 20 30  04 005 006 007 0
4650: 30 38 20 30 30 39 20 30 31 30 20 30 31 31 20 30  08 009 010 011 0
4660: 31 32 20 30 31 33 20 30 31 34 20 30 31 35 20 30  12 013 014 015 0
4670: 31 36 20 30 31 37 20 30 31 38 20 30 31 39 20 30  16 017 018 019 0
4680: 32 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f  20}.#btree_page_
4690: 64 75 6d 70 20 24 3a 3a 62 31 20 37 0a 23 62 74  dump $::b1 7.#bt
46a0: 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a  ree_page_dump $:
46b0: 3a 62 31 20 32 0a 23 62 74 72 65 65 5f 70 61 67  :b1 2.#btree_pag
46c0: 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 36 0a 64  e_dump $::b1 6.d
46d0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 30 2e  o_test btree-10.
46e0: 34 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  4 {.  btree_move
46f0: 5f 74 6f 20 24 3a 3a 63 31 20 30 31 31 0a 20 20  _to $::c1 011.  
4700: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a  btree_delete $::
4710: 63 31 0a 20 20 73 65 6c 65 63 74 5f 6b 65 79 73  c1.  select_keys
4720: 20 24 3a 3a 63 31 0a 7d 20 7b 30 30 31 20 30 30   $::c1.} {001 00
4730: 32 20 30 30 33 20 30 30 34 20 30 30 35 20 30 30  2 003 004 005 00
4740: 36 20 30 30 37 20 30 30 38 20 30 30 39 20 30 31  6 007 008 009 01
4750: 30 20 30 31 32 20 30 31 33 20 30 31 34 20 30 31  0 012 013 014 01
4760: 35 20 30 31 36 20 30 31 37 20 30 31 38 20 30 31  5 016 017 018 01
4770: 39 20 30 32 30 7d 0a 23 62 74 72 65 65 5f 74 72  9 020}.#btree_tr
4780: 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a  ee_dump $::b1 2.
4790: 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66  #btree_pager_ref
47a0: 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 66 6f 72 20  _dump $::b1.for 
47b0: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 32  {set i 1} {$i<=2
47c0: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
47d0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 30  do_test btree-10
47e0: 2e 35 2e 24 69 20 7b 0a 20 20 20 20 62 74 72 65  .5.$i {.    btre
47f0: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
4800: 5b 66 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d  [format %03d $i]
4810: 0a 20 20 20 20 6c 69 6e 64 65 78 20 5b 62 74 72  .    lindex [btr
4820: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
4830: 3a 3a 62 31 5d 20 31 0a 20 20 7d 20 7b 32 7d 0a  ::b1] 1.  } {2}.
4840: 20 20 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72    #btree_pager_r
4850: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 20 20  ef_dump $::b1.  
4860: 23 62 74 72 65 65 5f 74 72 65 65 5f 64 75 6d 70  #btree_tree_dump
4870: 20 24 3a 3a 62 31 20 32 0a 7d 0a 0a 23 20 43 72   $::b1 2.}..# Cr
4880: 65 61 74 65 20 61 20 74 72 65 65 20 77 69 74 68  eate a tree with
4890: 20 6c 6f 74 73 20 6d 6f 72 65 20 70 61 67 65 73   lots more pages
48a0: 0a 23 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20  .#.catch {unset 
48b0: 3a 3a 64 61 74 61 7d 0a 63 61 74 63 68 20 7b 75  ::data}.catch {u
48c0: 6e 73 65 74 20 3a 3a 6b 65 79 7d 0a 66 6f 72 20  nset ::key}.for 
48d0: 7b 73 65 74 20 69 20 32 31 7d 20 7b 24 69 3c 3d  {set i 21} {$i<=
48e0: 31 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  1000} {incr i} {
48f0: 0a 20 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .  do_test btree
4900: 2d 31 31 2e 31 2e 24 69 2e 31 20 7b 0a 20 20 20  -11.1.$i.1 {.   
4910: 20 73 65 74 20 6b 65 79 20 5b 66 6f 72 6d 61 74   set key [format
4920: 20 25 30 33 64 20 24 69 5d 0a 20 20 20 20 73 65   %03d $i].    se
4930: 74 20 3a 3a 64 61 74 61 20 22 2a 2a 2a 20 24 6b  t ::data "*** $k
4940: 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20  ey *** $key *** 
4950: 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a  $key *** $key **
4960: 2a 22 0a 20 20 20 20 62 74 72 65 65 5f 69 6e 73  *".    btree_ins
4970: 65 72 74 20 24 3a 3a 63 31 20 24 6b 65 79 20 24  ert $::c1 $key $
4980: 64 61 74 61 0a 20 20 20 20 62 74 72 65 65 5f 6b  data.    btree_k
4990: 65 79 20 24 3a 3a 63 31 0a 20 20 7d 20 5b 66 6f  ey $::c1.  } [fo
49a0: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20  rmat %03d $i].  
49b0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31  do_test btree-11
49c0: 2e 31 2e 24 69 2e 32 20 7b 0a 20 20 20 20 62 74  .1.$i.2 {.    bt
49d0: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 20  ree_data $::c1. 
49e0: 20 7d 20 24 3a 3a 64 61 74 61 0a 20 20 73 65 74   } $::data.  set
49f0: 20 3a 3a 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25   ::key [format %
4a00: 30 33 64 20 5b 65 78 70 72 20 7b 24 69 2f 32 7d  03d [expr {$i/2}
4a10: 5d 5d 0a 20 20 69 66 20 7b 24 3a 3a 6b 65 79 3d  ]].  if {$::key=
4a20: 3d 22 30 31 31 22 7d 20 7b 73 65 74 20 3a 3a 6b  ="011"} {set ::k
4a30: 65 79 20 30 31 30 7d 0a 20 20 64 6f 5f 74 65 73  ey 010}.  do_tes
4a40: 74 20 62 74 72 65 65 2d 31 31 2e 31 2e 24 69 2e  t btree-11.1.$i.
4a50: 33 20 7b 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f  3 {.    btree_mo
4a60: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 24 3a 3a 6b  ve_to $::c1 $::k
4a70: 65 79 0a 20 20 20 20 62 74 72 65 65 5f 6b 65 79  ey.    btree_key
4a80: 20 24 3a 3a 63 31 0a 20 20 7d 20 24 3a 3a 6b 65   $::c1.  } $::ke
4a90: 79 0a 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74  y.}.catch {unset
4aa0: 20 3a 3a 64 61 74 61 7d 0a 63 61 74 63 68 20 7b   ::data}.catch {
4ab0: 75 6e 73 65 74 20 3a 3a 6b 65 79 7d 0a 0a 23 20  unset ::key}..# 
4ac0: 4d 61 6b 65 20 73 75 72 65 20 6f 75 72 20 72 65  Make sure our re
4ad0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 20 69 73  ference count is
4ae0: 20 73 74 69 6c 6c 20 63 6f 72 72 65 63 74 2e 0a   still correct..
4af0: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
4b00: 31 31 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 63  11.2 {.  btree_c
4b10: 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63  lose_cursor $::c
4b20: 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  1.  lindex [btre
4b30: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
4b40: 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f  :b1] 1.} {1}.do_
4b50: 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 33 20  test btree-11.3 
4b60: 7b 0a 20 20 73 65 74 20 3a 3a 63 31 20 5b 62 74  {.  set ::c1 [bt
4b70: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31  ree_cursor $::b1
4b80: 20 32 20 31 5d 0a 20 20 6c 69 6e 64 65 78 20 5b   2 1].  lindex [
4b90: 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74  btree_pager_stat
4ba0: 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d  s $::b1] 1.} {2}
4bb0: 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d  .#btree_page_dum
4bc0: 70 20 24 3a 3a 62 31 20 32 0a 0a 23 20 44 65 6c  p $::b1 2..# Del
4bd0: 65 74 65 20 74 68 65 20 64 69 76 69 64 65 72 73  ete the dividers
4be0: 20 6f 6e 20 74 68 65 20 72 6f 6f 74 20 70 61 67   on the root pag
4bf0: 65 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  e.#.do_test btre
4c00: 65 2d 31 31 2e 34 20 7b 0a 20 20 62 74 72 65 65  e-11.4 {.  btree
4c10: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 32  _move_to $::c1 2
4c20: 35 37 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74  57.  btree_delet
4c30: 65 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  e $::c1.  btree_
4c40: 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72  next $::c1.  btr
4c50: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b  ee_key $::c1.} {
4c60: 32 35 38 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  258}.do_test btr
4c70: 65 65 2d 31 31 2e 34 2e 31 20 7b 0a 20 20 62 74  ee-11.4.1 {.  bt
4c80: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
4c90: 31 20 32 35 36 0a 20 20 62 74 72 65 65 5f 6b 65  1 256.  btree_ke
4ca0: 79 20 24 3a 3a 63 31 0a 7d 20 7b 32 35 36 7d 0a  y $::c1.} {256}.
4cb0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31  do_test btree-11
4cc0: 2e 34 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d  .4.2 {.  btree_m
4cd0: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 32 35 38  ove_to $::c1 258
4ce0: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
4cf0: 63 31 0a 7d 20 7b 32 35 38 7d 0a 64 6f 5f 74 65  c1.} {258}.do_te
4d00: 73 74 20 62 74 72 65 65 2d 31 31 2e 34 2e 33 20  st btree-11.4.3 
4d10: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
4d20: 6f 20 24 3a 3a 63 31 20 32 35 39 0a 20 20 62 74  o $::c1 259.  bt
4d30: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
4d40: 7b 32 35 39 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {259}.do_test bt
4d50: 72 65 65 2d 31 31 2e 34 2e 34 20 7b 0a 20 20 62  ree-11.4.4 {.  b
4d60: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
4d70: 63 31 20 32 35 37 0a 20 20 73 65 74 20 6e 20 5b  c1 257.  set n [
4d80: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d  btree_key $::c1]
4d90: 0a 20 20 65 78 70 72 20 7b 24 6e 3d 3d 32 35 36  .  expr {$n==256
4da0: 7c 7c 24 6e 3d 3d 32 35 38 7d 0a 7d 20 7b 31 7d  ||$n==258}.} {1}
4db0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
4dc0: 31 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  1.5 {.  btree_mo
4dd0: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 35 31 33 0a  ve_to $::c1 513.
4de0: 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24    btree_delete $
4df0: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6e 65 78  ::c1.  btree_nex
4e00: 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  t $::c1.  btree_
4e10: 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 31 34  key $::c1.} {514
4e20: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
4e30: 31 31 2e 35 2e 31 20 7b 0a 20 20 62 74 72 65 65  11.5.1 {.  btree
4e40: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 35  _move_to $::c1 5
4e50: 31 32 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  12.  btree_key $
4e60: 3a 3a 63 31 0a 7d 20 7b 35 31 32 7d 0a 64 6f 5f  ::c1.} {512}.do_
4e70: 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 35 2e  test btree-11.5.
4e80: 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  2 {.  btree_move
4e90: 5f 74 6f 20 24 3a 3a 63 31 20 35 31 34 0a 20 20  _to $::c1 514.  
4ea0: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
4eb0: 7d 20 7b 35 31 34 7d 0a 64 6f 5f 74 65 73 74 20  } {514}.do_test 
4ec0: 62 74 72 65 65 2d 31 31 2e 35 2e 33 20 7b 0a 20  btree-11.5.3 {. 
4ed0: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
4ee0: 3a 3a 63 31 20 35 31 35 0a 20 20 62 74 72 65 65  ::c1 515.  btree
4ef0: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 31  _key $::c1.} {51
4f00: 35 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  5}.do_test btree
4f10: 2d 31 31 2e 35 2e 34 20 7b 0a 20 20 62 74 72 65  -11.5.4 {.  btre
4f20: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
4f30: 35 31 33 0a 20 20 73 65 74 20 6e 20 5b 62 74 72  513.  set n [btr
4f40: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20  ee_key $::c1].  
4f50: 65 78 70 72 20 7b 24 6e 3d 3d 35 31 32 7c 7c 24  expr {$n==512||$
4f60: 6e 3d 3d 35 31 34 7d 0a 7d 20 7b 31 7d 0a 64 6f  n==514}.} {1}.do
4f70: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 36  _test btree-11.6
4f80: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
4f90: 74 6f 20 24 3a 3a 63 31 20 37 36 39 0a 20 20 62  to $::c1 769.  b
4fa0: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
4fb0: 31 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24  1.  btree_next $
4fc0: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79  ::c1.  btree_key
4fd0: 20 24 3a 3a 63 31 0a 7d 20 7b 37 37 30 7d 0a 64   $::c1.} {770}.d
4fe0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e  o_test btree-11.
4ff0: 36 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  6.1 {.  btree_mo
5000: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 37 36 38 0a  ve_to $::c1 768.
5010: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
5020: 31 0a 7d 20 7b 37 36 38 7d 0a 64 6f 5f 74 65 73  1.} {768}.do_tes
5030: 74 20 62 74 72 65 65 2d 31 31 2e 36 2e 32 20 7b  t btree-11.6.2 {
5040: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
5050: 20 24 3a 3a 63 31 20 37 37 31 0a 20 20 62 74 72   $::c1 771.  btr
5060: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b  ee_key $::c1.} {
5070: 37 37 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  771}.do_test btr
5080: 65 65 2d 31 31 2e 36 2e 33 20 7b 0a 20 20 62 74  ee-11.6.3 {.  bt
5090: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
50a0: 31 20 37 37 30 0a 20 20 62 74 72 65 65 5f 6b 65  1 770.  btree_ke
50b0: 79 20 24 3a 3a 63 31 0a 7d 20 7b 37 37 30 7d 0a  y $::c1.} {770}.
50c0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31  do_test btree-11
50d0: 2e 36 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 6d  .6.4 {.  btree_m
50e0: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 37 36 39  ove_to $::c1 769
50f0: 0a 20 20 73 65 74 20 6e 20 5b 62 74 72 65 65 5f  .  set n [btree_
5100: 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20 65 78 70  key $::c1].  exp
5110: 72 20 7b 24 6e 3d 3d 37 36 38 7c 7c 24 6e 3d 3d  r {$n==768||$n==
5120: 37 37 30 7d 0a 7d 20 7b 31 7d 0a 23 62 74 72 65  770}.} {1}.#btre
5130: 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62  e_page_dump $::b
5140: 31 20 32 0a 23 62 74 72 65 65 5f 70 61 67 65 5f  1 2.#btree_page_
5150: 64 75 6d 70 20 24 3a 3a 62 31 20 32 35 0a 0a 23  dump $::b1 25..#
5160: 20 43 68 61 6e 67 65 20 74 68 65 20 64 61 74 61   Change the data
5170: 20 6f 6e 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   on an intermedi
5180: 61 74 65 20 6e 6f 64 65 20 73 75 63 68 20 74 68  ate node such th
5190: 61 74 20 74 68 65 20 6e 6f 64 65 20 62 65 63 6f  at the node beco
51a0: 6d 65 73 20 6f 76 65 72 66 75 6c 6c 0a 23 20 61  mes overfull.# a
51b0: 6e 64 20 68 61 73 20 74 6f 20 73 70 6c 69 74 2e  nd has to split.
51c0: 20 20 57 65 20 68 61 70 70 65 6e 20 74 6f 20 6b    We happen to k
51d0: 6e 6f 77 20 74 68 61 74 20 69 6e 74 65 72 6d 65  now that interme
51e0: 64 69 61 74 65 20 6e 6f 64 65 73 20 65 78 69 73  diate nodes exis
51f0: 74 20 6f 6e 0a 23 20 33 33 37 2c 20 34 30 31 20  t on.# 337, 401 
5200: 61 6e 64 20 34 36 35 20 62 79 20 74 68 65 20 62  and 465 by the b
5210: 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 73 20  tree_page_dumps 
5220: 61 62 6f 76 65 0a 23 0a 63 61 74 63 68 20 7b 75  above.#.catch {u
5230: 6e 73 65 74 20 3a 3a 64 61 74 61 7d 0a 73 65 74  nset ::data}.set
5240: 20 3a 3a 64 61 74 61 20 7b 54 68 69 73 20 69 73   ::data {This is
5250: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 61 20 76   going to be a v
5260: 65 72 79 20 6c 6f 6e 67 20 64 61 74 61 20 73 65  ery long data se
5270: 67 6d 65 6e 74 7d 0a 61 70 70 65 6e 64 20 3a 3a  gment}.append ::
5280: 64 61 74 61 20 24 3a 3a 64 61 74 61 0a 61 70 70  data $::data.app
5290: 65 6e 64 20 3a 3a 64 61 74 61 20 24 3a 3a 64 61  end ::data $::da
52a0: 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  ta.do_test btree
52b0: 2d 31 32 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f  -12.1 {.  btree_
52c0: 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 33 33 37  insert $::c1 337
52d0: 20 24 3a 3a 64 61 74 61 0a 20 20 62 74 72 65 65   $::data.  btree
52e0: 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a  _data $::c1.} $:
52f0: 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74  :data.do_test bt
5300: 72 65 65 2d 31 32 2e 32 20 7b 0a 20 20 62 74 72  ree-12.2 {.  btr
5310: 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20  ee_insert $::c1 
5320: 34 30 31 20 24 3a 3a 64 61 74 61 0a 20 20 62 74  401 $::data.  bt
5330: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d  ree_data $::c1.}
5340: 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74   $::data.do_test
5350: 20 62 74 72 65 65 2d 31 32 2e 33 20 7b 0a 20 20   btree-12.3 {.  
5360: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
5370: 63 31 20 34 36 35 20 24 3a 3a 64 61 74 61 0a 20  c1 465 $::data. 
5380: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
5390: 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74  1.} $::data.do_t
53a0: 65 73 74 20 62 74 72 65 65 2d 31 32 2e 34 20 7b  est btree-12.4 {
53b0: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
53c0: 20 24 3a 3a 63 31 20 33 33 37 0a 20 20 62 74 72   $::c1 337.  btr
53d0: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b  ee_key $::c1.} {
53e0: 33 33 37 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  337}.do_test btr
53f0: 65 65 2d 31 32 2e 35 20 7b 0a 20 20 62 74 72 65  ee-12.5 {.  btre
5400: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24  e_data $::c1.} $
5410: 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62  ::data.do_test b
5420: 74 72 65 65 2d 31 32 2e 36 20 7b 0a 20 20 62 74  tree-12.6 {.  bt
5430: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
5440: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
5450: 0a 7d 20 7b 33 33 38 7d 0a 64 6f 5f 74 65 73 74  .} {338}.do_test
5460: 20 62 74 72 65 65 2d 31 32 2e 37 20 7b 0a 20 20   btree-12.7 {.  
5470: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
5480: 3a 63 31 20 34 36 34 0a 20 20 62 74 72 65 65 5f  :c1 464.  btree_
5490: 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 36 34  key $::c1.} {464
54a0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
54b0: 31 32 2e 38 20 7b 0a 20 20 62 74 72 65 65 5f 6e  12.8 {.  btree_n
54c0: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
54d0: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24  e_data $::c1.} $
54e0: 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62  ::data.do_test b
54f0: 74 72 65 65 2d 31 32 2e 39 20 7b 0a 20 20 62 74  tree-12.9 {.  bt
5500: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
5510: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
5520: 0a 7d 20 7b 34 36 36 7d 0a 64 6f 5f 74 65 73 74  .} {466}.do_test
5530: 20 62 74 72 65 65 2d 31 32 2e 31 30 20 7b 0a 20   btree-12.10 {. 
5540: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
5550: 3a 3a 63 31 20 34 30 30 0a 20 20 62 74 72 65 65  ::c1 400.  btree
5560: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 30  _key $::c1.} {40
5570: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
5580: 2d 31 32 2e 31 31 20 7b 0a 20 20 62 74 72 65 65  -12.11 {.  btree
5590: 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74  _next $::c1.  bt
55a0: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d  ree_data $::c1.}
55b0: 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74   $::data.do_test
55c0: 20 62 74 72 65 65 2d 31 32 2e 31 32 20 7b 0a 20   btree-12.12 {. 
55d0: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
55e0: 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  1.  btree_key $:
55f0: 3a 63 31 0a 7d 20 7b 34 30 32 7d 0a 64 6f 5f 74  :c1.} {402}.do_t
5600: 65 73 74 20 62 74 72 65 65 2d 31 33 2e 31 20 7b  est btree-13.1 {
5610: 0a 20 20 62 74 72 65 65 5f 69 6e 74 65 67 72 69  .  btree_integri
5620: 74 79 5f 63 68 65 63 6b 20 24 3a 3a 62 31 20 32  ty_check $::b1 2
5630: 20 33 0a 7d 20 7b 7d 0a 0a 23 20 54 6f 20 44 6f   3.} {}..# To Do
5640: 3a 0a 23 0a 23 20 20 20 31 2e 20 20 44 6f 20 73  :.#.#   1.  Do s
5650: 6f 6d 65 20 64 65 6c 65 74 65 73 20 66 72 6f 6d  ome deletes from
5660: 20 74 68 65 20 33 2d 6c 61 79 65 72 20 74 72 65   the 3-layer tre
5670: 65 0a 23 20 20 20 32 2e 20 20 43 6f 6d 6d 69 74  e.#   2.  Commit
5680: 20 61 6e 64 20 72 65 6f 70 65 6e 20 74 68 65 20   and reopen the 
5690: 64 61 74 61 62 61 73 65 0a 23 20 20 20 33 2e 20  database.#   3. 
56a0: 20 52 65 61 64 20 65 76 65 72 79 20 31 35 74 68   Read every 15th
56b0: 20 65 6e 74 72 79 20 61 6e 64 20 6d 61 6b 65 20   entry and make 
56c0: 73 75 72 65 20 69 74 20 77 6f 72 6b 73 0a 23 20  sure it works.# 
56d0: 20 20 34 2e 20 20 49 6d 70 6c 65 6d 65 6e 74 20    4.  Implement 
56e0: 62 74 72 65 65 5f 73 61 6e 69 74 79 20 61 6e 64  btree_sanity and
56f0: 20 70 75 74 20 69 74 20 74 68 72 6f 75 67 68 6f   put it througho
5700: 75 74 20 74 68 69 73 20 73 63 72 69 70 74 0a 23  ut this script.#
5710: 0a 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  ..do_test btree-
5720: 31 35 2e 39 38 20 7b 0a 20 20 62 74 72 65 65 5f  15.98 {.  btree_
5730: 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a  close_cursor $::
5740: 63 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72  c1.  lindex [btr
5750: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
5760: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f  ::b1] 1.} {1}.do
5770: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 35 2e 39  _test btree-15.9
5780: 39 20 7b 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c  9 {.  btree_roll
5790: 62 61 63 6b 20 24 3a 3a 62 31 0a 20 20 6c 69 6e  back $::b1.  lin
57a0: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
57b0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
57c0: 7d 20 7b 30 7d 0a 62 74 72 65 65 5f 70 61 67 65  } {0}.btree_page
57d0: 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31  r_ref_dump $::b1
57e0: 0a 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  ..do_test btree-
57f0: 39 39 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 63  99.1 {.  btree_c
5800: 6c 6f 73 65 20 24 3a 3a 62 31 0a 7d 20 7b 7d 0a  lose $::b1.} {}.
5810: 63 61 74 63 68 20 7b 75 6e 73 65 74 20 64 61 74  catch {unset dat
5820: 61 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20  a}.catch {unset 
5830: 6b 65 79 7d 0a 0a 7d 20 3b 23 20 65 6e 64 20 69  key}..} ;# end i
5840: 66 28 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64 20  f( not mem: and 
5850: 68 61 73 20 70 61 67 65 72 5f 6f 70 65 6e 20 63  has pager_open c
5860: 6f 6d 6d 61 6e 64 20 29 3b 0a 0a 66 69 6e 69 73  ommand );..finis
5870: 68 5f 74 65 73 74 0a                             h_test.