/ Hex Artifact Content
Login

Artifact 677aeaac7b7b81980b446ca9cab15aa0cc5550d5:


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 35 20 32 30 30 34 2f 30 32 2f 31  v 1.15 2004/02/1
0200: 30 20 30 31 3a 35 34 3a 32 38 20 64 72 68 20 45  0 01:54:28 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 20 26 26 20 24 53 51 4c 49  en]!="" && $SQLI
0280: 54 45 5f 50 41 47 45 5f 53 49 5a 45 3d 3d 31 30  TE_PAGE_SIZE==10
0290: 32 34 20 0a 20 20 20 20 20 26 26 20 24 53 51 4c  24 .     && $SQL
02a0: 49 54 45 5f 55 53 41 42 4c 45 5f 53 49 5a 45 3d  ITE_USABLE_SIZE=
02b0: 3d 31 30 32 34 7d 20 7b 0a 0a 23 20 42 61 73 69  =1024} {..# Basi
02c0: 63 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e  c functionality.
02d0: 20 20 4f 70 65 6e 20 61 6e 64 20 63 6c 6f 73 65    Open and close
02e0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 23 0a 64   a database..#.d
02f0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e 31  o_test btree-1.1
0300: 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65   {.  file delete
0310: 20 2d 66 6f 72 63 65 20 74 65 73 74 31 2e 62 74   -force test1.bt
0320: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  .  file delete -
0330: 66 6f 72 63 65 20 74 65 73 74 31 2e 62 74 2d 6a  force test1.bt-j
0340: 6f 75 72 6e 61 6c 0a 20 20 73 65 74 20 72 63 20  ournal.  set rc 
0350: 5b 63 61 74 63 68 20 7b 62 74 72 65 65 5f 6f 70  [catch {btree_op
0360: 65 6e 20 74 65 73 74 31 2e 62 74 7d 20 3a 3a 62  en test1.bt} ::b
0370: 31 5d 0a 7d 20 7b 30 7d 0a 0a 23 20 54 68 65 20  1].} {0}..# The 
0380: 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 6f  second element o
0390: 66 20 74 68 65 20 6c 69 73 74 20 72 65 74 75 72  f the list retur
03a0: 6e 65 64 20 62 79 20 62 74 72 65 65 5f 70 61 67  ned by btree_pag
03b0: 65 72 5f 73 74 61 74 73 20 69 73 20 74 68 65 0a  er_stats is the.
03c0: 23 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  # number of page
03d0: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
03e0: 6b 65 64 20 6f 75 74 2e 20 20 57 65 27 6c 6c 20  ked out.  We'll 
03f0: 62 65 20 63 68 65 63 6b 69 6e 67 20 74 68 69 73  be checking this
0400: 20 76 61 6c 75 65 0a 23 20 66 72 65 71 75 65 6e   value.# frequen
0410: 74 6c 79 20 64 75 72 69 6e 67 20 74 68 69 73 20  tly during this 
0420: 74 65 73 74 20 73 63 72 69 70 74 2c 20 74 6f 20  test script, to 
0430: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 62 74  make sure the bt
0440: 72 65 65 20 6c 69 62 72 61 72 79 0a 23 20 69 73  ree library.# is
0450: 20 70 72 6f 70 65 72 6c 79 20 72 65 6c 65 61 73   properly releas
0460: 69 6e 67 20 74 68 65 20 70 61 67 65 73 20 69 74  ing the pages it
0470: 20 63 68 65 63 6b 73 20 6f 75 74 2c 20 61 6e 64   checks out, and
0480: 20 74 68 75 73 20 61 76 6f 69 64 69 6e 67 0a 23   thus avoiding.#
0490: 20 70 61 67 65 20 6c 65 61 6b 73 2e 0a 23 0a 64   page leaks..#.d
04a0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e 31  o_test btree-1.1
04b0: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
04c0: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
04d0: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a   $::b1] 1.} {0}.
04e0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e  do_test btree-1.
04f0: 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  2 {.  set rc [ca
0500: 74 63 68 20 7b 62 74 72 65 65 5f 6f 70 65 6e 20  tch {btree_open 
0510: 74 65 73 74 31 2e 62 74 7d 20 3a 3a 62 32 5d 0a  test1.bt} ::b2].
0520: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {0}.do_test bt
0530: 72 65 65 2d 31 2e 33 20 7b 0a 20 20 73 65 74 20  ree-1.3 {.  set 
0540: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
0550: 5f 63 6c 6f 73 65 20 24 3a 3a 62 32 7d 20 6d 73  _close $::b2} ms
0560: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20  g].  lappend rc 
0570: 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23  $msg.} {0 {}}..#
0580: 20 44 6f 20 61 6e 20 69 6e 73 65 72 74 20 61 6e   Do an insert an
0590: 64 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  d verify that th
05a0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
05b0: 67 72 6f 77 73 20 69 6e 20 73 69 7a 65 2e 0a 23  grows in size..#
05c0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
05d0: 2e 34 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63  .4 {.  set rc [c
05e0: 61 74 63 68 20 7b 62 74 72 65 65 5f 62 65 67 69  atch {btree_begi
05f0: 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a  n_transaction $:
0600: 3a 62 31 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  :b1} msg].  lapp
0610: 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30  end rc $msg.} {0
0620: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {}}.do_test btr
0630: 65 65 2d 31 2e 34 2e 31 20 7b 0a 20 20 6c 69 6e  ee-1.4.1 {.  lin
0640: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
0650: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
0660: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {1}.do_test bt
0670: 72 65 65 2d 31 2e 35 20 7b 0a 20 20 73 65 74 20  ree-1.5 {.  set 
0680: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
0690: 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 32 20  _cursor $::b1 2 
06a0: 31 7d 20 3a 3a 63 31 5d 0a 20 20 69 66 20 7b 24  1} ::c1].  if {$
06b0: 72 63 7d 20 7b 6c 61 70 70 65 6e 64 20 72 63 20  rc} {lappend rc 
06c0: 24 3a 3a 63 31 7d 0a 20 20 73 65 74 20 72 63 0a  $::c1}.  set rc.
06d0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {0}.do_test bt
06e0: 72 65 65 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20  ree-1.6 {.  set 
06f0: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
0700: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 6f 6e  _insert $::c1 on
0710: 65 20 31 2e 30 30 7d 20 6d 73 67 5d 0a 20 20 6c  e 1.00} msg].  l
0720: 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d  append rc $msg.}
0730: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0740: 62 74 72 65 65 2d 31 2e 37 20 7b 0a 20 20 62 74  btree-1.7 {.  bt
0750: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
0760: 7b 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {one}.do_test bt
0770: 72 65 65 2d 31 2e 38 20 7b 0a 20 20 62 74 72 65  ree-1.8 {.  btre
0780: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b  e_data $::c1.} {
0790: 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  1.00}.do_test bt
07a0: 72 65 65 2d 31 2e 39 20 7b 0a 20 20 73 65 74 20  ree-1.9 {.  set 
07b0: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
07c0: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
07d0: 3a 63 31 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  :c1} msg].  lapp
07e0: 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30  end rc $msg.} {0
07f0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {}}.do_test btr
0800: 65 65 2d 31 2e 31 30 20 7b 0a 20 20 73 65 74 20  ee-1.10 {.  set 
0810: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
0820: 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31 7d 20 6d  _commit $::b1} m
0830: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
0840: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
0850: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e 31  o_test btree-1.1
0860: 31 20 7b 0a 20 20 66 69 6c 65 20 73 69 7a 65 20  1 {.  file size 
0870: 74 65 73 74 31 2e 62 74 0a 7d 20 7b 32 30 34 38  test1.bt.} {2048
0880: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0890: 31 2e 31 32 20 7b 0a 20 20 6c 69 6e 64 65 78 20  1.12 {.  lindex 
08a0: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
08b0: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30  ts $::b1] 1.} {0
08c0: 7d 0a 0a 23 20 52 65 6f 70 65 6e 20 74 68 65 20  }..# Reopen the 
08d0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 61 74 74  database and att
08e0: 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65  empt to read the
08f0: 20 72 65 63 6f 72 64 20 74 68 61 74 20 77 65 20   record that we 
0900: 77 72 6f 74 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  wrote..#.do_test
0910: 20 62 74 72 65 65 2d 32 2e 31 20 7b 0a 20 20 73   btree-2.1 {.  s
0920: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74  et rc [catch {bt
0930: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31  ree_cursor $::b1
0940: 20 32 20 31 7d 20 3a 3a 63 31 5d 0a 20 20 69 66   2 1} ::c1].  if
0950: 20 7b 24 72 63 7d 20 7b 6c 61 70 70 65 6e 64 20   {$rc} {lappend 
0960: 72 63 20 24 3a 3a 63 31 7d 0a 20 20 73 65 74 20  rc $::c1}.  set 
0970: 72 63 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  rc.} {0}.do_test
0980: 20 62 74 72 65 65 2d 32 2e 32 20 7b 0a 20 20 62   btree-2.2 {.  b
0990: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
09a0: 63 31 20 61 62 63 0a 7d 20 7b 31 7d 0a 64 6f 5f  c1 abc.} {1}.do_
09b0: 74 65 73 74 20 62 74 72 65 65 2d 32 2e 33 20 7b  test btree-2.3 {
09c0: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
09d0: 20 24 3a 3a 63 31 20 78 79 7a 0a 7d 20 7b 2d 31   $::c1 xyz.} {-1
09e0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
09f0: 32 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  2.4 {.  btree_mo
0a00: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 6f 6e 65 0a  ve_to $::c1 one.
0a10: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {0}.do_test bt
0a20: 72 65 65 2d 32 2e 35 20 7b 0a 20 20 62 74 72 65  ree-2.5 {.  btre
0a30: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 6f  e_key $::c1.} {o
0a40: 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ne}.do_test btre
0a50: 65 2d 32 2e 36 20 7b 0a 20 20 62 74 72 65 65 5f  e-2.6 {.  btree_
0a60: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31 2e  data $::c1.} {1.
0a70: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
0a80: 65 2d 32 2e 37 20 7b 0a 20 20 6c 69 6e 64 65 78  e-2.7 {.  lindex
0a90: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
0aa0: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
0ab0: 32 7d 0a 0a 23 20 44 6f 20 73 6f 6d 65 20 61 64  2}..# Do some ad
0ac0: 64 69 74 69 6f 6e 61 6c 20 69 6e 73 65 72 74 73  ditional inserts
0ad0: 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .#.do_test btree
0ae0: 2d 33 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 62  -3.1 {.  btree_b
0af0: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e  egin_transaction
0b00: 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 69   $::b1.  btree_i
0b10: 6e 73 65 72 74 20 24 3a 3a 63 31 20 74 77 6f 20  nsert $::c1 two 
0b20: 32 2e 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79  2.00.  btree_key
0b30: 20 24 3a 3a 63 31 0a 7d 20 7b 74 77 6f 7d 0a 64   $::c1.} {two}.d
0b40: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31  o_test btree-3.1
0b50: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
0b60: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
0b70: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a   $::b1] 1.} {2}.
0b80: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
0b90: 32 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65  2 {.  btree_inse
0ba0: 72 74 20 24 3a 3a 63 31 20 74 68 72 65 65 20 33  rt $::c1 three 3
0bb0: 2e 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  .00.  btree_key 
0bc0: 24 3a 3a 63 31 0a 7d 20 7b 74 68 72 65 65 7d 0a  $::c1.} {three}.
0bd0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
0be0: 34 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65  4 {.  btree_inse
0bf0: 72 74 20 24 3a 3a 63 31 20 66 6f 75 72 20 34 2e  rt $::c1 four 4.
0c00: 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  00.  btree_key $
0c10: 3a 3a 63 31 0a 7d 20 7b 66 6f 75 72 7d 0a 64 6f  ::c1.} {four}.do
0c20: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 35 20  _test btree-3.5 
0c30: 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74  {.  btree_insert
0c40: 20 24 3a 3a 63 31 20 66 69 76 65 20 35 2e 30 30   $::c1 five 5.00
0c50: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
0c60: 63 31 0a 7d 20 7b 66 69 76 65 7d 0a 64 6f 5f 74  c1.} {five}.do_t
0c70: 65 73 74 20 62 74 72 65 65 2d 33 2e 36 20 7b 0a  est btree-3.6 {.
0c80: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
0c90: 3a 3a 63 31 20 73 69 78 20 36 2e 30 30 0a 20 20  ::c1 six 6.00.  
0ca0: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
0cb0: 7d 20 7b 73 69 78 7d 0a 23 62 74 72 65 65 5f 70  } {six}.#btree_p
0cc0: 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32  age_dump $::b1 2
0cd0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
0ce0: 2e 37 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 62  .7 {.  set rc [b
0cf0: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
0d00: 63 31 20 7b 7d 5d 0a 20 20 65 78 70 72 20 7b 24  c1 {}].  expr {$
0d10: 72 63 3e 30 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  rc>0}.} {1}.do_t
0d20: 65 73 74 20 62 74 72 65 65 2d 33 2e 38 20 7b 0a  est btree-3.8 {.
0d30: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
0d40: 31 0a 7d 20 7b 66 69 76 65 7d 0a 64 6f 5f 74 65  1.} {five}.do_te
0d50: 73 74 20 62 74 72 65 65 2d 33 2e 39 20 7b 0a 20  st btree-3.9 {. 
0d60: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
0d70: 31 0a 7d 20 7b 35 2e 30 30 7d 0a 64 6f 5f 74 65  1.} {5.00}.do_te
0d80: 73 74 20 62 74 72 65 65 2d 33 2e 31 30 20 7b 0a  st btree-3.10 {.
0d90: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a    btree_next $::
0da0: 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  c1.  btree_key $
0db0: 3a 3a 63 31 0a 7d 20 7b 66 6f 75 72 7d 0a 64 6f  ::c1.} {four}.do
0dc0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31 31  _test btree-3.11
0dd0: 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20   {.  btree_data 
0de0: 24 3a 3a 63 31 0a 7d 20 7b 34 2e 30 30 7d 0a 64  $::c1.} {4.00}.d
0df0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31  o_test btree-3.1
0e00: 32 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74  2 {.  btree_next
0e10: 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b   $::c1.  btree_k
0e20: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 6f 6e 65 7d  ey $::c1.} {one}
0e30: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
0e40: 2e 31 33 20 7b 0a 20 20 62 74 72 65 65 5f 64 61  .13 {.  btree_da
0e50: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31 2e 30 30  ta $::c1.} {1.00
0e60: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0e70: 33 2e 31 34 20 7b 0a 20 20 62 74 72 65 65 5f 6e  3.14 {.  btree_n
0e80: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
0e90: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 73  e_key $::c1.} {s
0ea0: 69 78 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ix}.do_test btre
0eb0: 65 2d 33 2e 31 35 20 7b 0a 20 20 62 74 72 65 65  e-3.15 {.  btree
0ec0: 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 36  _data $::c1.} {6
0ed0: 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  .00}.do_test btr
0ee0: 65 65 2d 33 2e 31 36 20 7b 0a 20 20 62 74 72 65  ee-3.16 {.  btre
0ef0: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
0f00: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
0f10: 20 7b 74 68 72 65 65 7d 0a 64 6f 5f 74 65 73 74   {three}.do_test
0f20: 20 62 74 72 65 65 2d 33 2e 31 37 20 7b 0a 20 20   btree-3.17 {.  
0f30: 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31  btree_data $::c1
0f40: 0a 7d 20 7b 33 2e 30 30 7d 0a 64 6f 5f 74 65 73  .} {3.00}.do_tes
0f50: 74 20 62 74 72 65 65 2d 33 2e 31 38 20 7b 0a 20  t btree-3.18 {. 
0f60: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63   btree_next $::c
0f70: 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  1.  btree_key $:
0f80: 3a 63 31 0a 7d 20 7b 74 77 6f 7d 0a 64 6f 5f 74  :c1.} {two}.do_t
0f90: 65 73 74 20 62 74 72 65 65 2d 33 2e 31 39 20 7b  est btree-3.19 {
0fa0: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
0fb0: 3a 63 31 0a 7d 20 7b 32 2e 30 30 7d 0a 64 6f 5f  :c1.} {2.00}.do_
0fc0: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 30 20  test btree-3.20 
0fd0: 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24  {.  btree_next $
0fe0: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79  ::c1.  btree_key
0ff0: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
1000: 65 73 74 20 62 74 72 65 65 2d 33 2e 32 31 20 7b  est btree-3.21 {
1010: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
1020: 3a 63 31 0a 7d 20 7b 7d 0a 0a 23 20 43 6f 6d 6d  :c1.} {}..# Comm
1030: 69 74 20 74 68 65 20 63 68 61 6e 67 65 73 2c 20  it the changes, 
1040: 72 65 6f 70 65 6e 20 61 6e 64 20 72 65 72 65 61  reopen and rerea
1050: 64 20 74 68 65 20 64 61 74 61 0a 23 0a 64 6f 5f  d the data.#.do_
1060: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 32 20  test btree-3.22 
1070: 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  {.  set rc [catc
1080: 68 20 7b 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63  h {btree_close_c
1090: 75 72 73 6f 72 20 24 3a 3a 63 31 7d 20 6d 73 67  ursor $::c1} msg
10a0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24  ].  lappend rc $
10b0: 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  msg.} {0 {}}.do_
10c0: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 32 2e  test btree-3.22.
10d0: 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  1 {.  lindex [bt
10e0: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
10f0: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64  $::b1] 1.} {1}.d
1100: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
1110: 33 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  3 {.  set rc [ca
1120: 74 63 68 20 7b 62 74 72 65 65 5f 63 6f 6d 6d 69  tch {btree_commi
1130: 74 20 24 3a 3a 62 31 7d 20 6d 73 67 5d 0a 20 20  t $::b1} msg].  
1140: 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a  lappend rc $msg.
1150: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1160: 20 62 74 72 65 65 2d 33 2e 32 33 2e 31 20 7b 0a   btree-3.23.1 {.
1170: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
1180: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
1190: 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  1] 1.} {0}.do_te
11a0: 73 74 20 62 74 72 65 65 2d 33 2e 32 34 20 7b 0a  st btree-3.24 {.
11b0: 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74    file size test
11c0: 31 2e 62 74 0a 7d 20 7b 32 30 34 38 7d 0a 64 6f  1.bt.} {2048}.do
11d0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 35  _test btree-3.25
11e0: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
11f0: 63 68 20 7b 62 74 72 65 65 5f 63 75 72 73 6f 72  ch {btree_cursor
1200: 20 24 3a 3a 62 31 20 32 20 31 7d 20 3a 3a 63 31   $::b1 2 1} ::c1
1210: 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 6c 61  ].  if {$rc} {la
1220: 70 70 65 6e 64 20 72 63 20 24 3a 3a 63 31 7d 0a  ppend rc $::c1}.
1230: 20 20 73 65 74 20 72 63 0a 7d 20 7b 30 7d 0a 64    set rc.} {0}.d
1240: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32  o_test btree-3.2
1250: 35 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b  5.1 {.  lindex [
1260: 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74  btree_pager_stat
1270: 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d  s $::b1] 1.} {2}
1280: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1290: 2e 32 36 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  .26 {.  set rc [
12a0: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
12b0: 3a 63 31 20 7b 7d 5d 0a 20 20 65 78 70 72 20 7b  :c1 {}].  expr {
12c0: 24 72 63 3e 30 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  $rc>0}.} {1}.do_
12d0: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 37 20  test btree-3.27 
12e0: 7b 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  {.  btree_key $:
12f0: 3a 63 31 0a 7d 20 7b 66 69 76 65 7d 0a 64 6f 5f  :c1.} {five}.do_
1300: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 38 20  test btree-3.28 
1310: 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24  {.  btree_data $
1320: 3a 3a 63 31 0a 7d 20 7b 35 2e 30 30 7d 0a 64 6f  ::c1.} {5.00}.do
1330: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 39  _test btree-3.29
1340: 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20   {.  btree_next 
1350: 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65  $::c1.  btree_ke
1360: 79 20 24 3a 3a 63 31 0a 7d 20 7b 66 6f 75 72 7d  y $::c1.} {four}
1370: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1380: 2e 33 30 20 7b 0a 20 20 62 74 72 65 65 5f 64 61  .30 {.  btree_da
1390: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 34 2e 30 30  ta $::c1.} {4.00
13a0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
13b0: 33 2e 33 31 20 7b 0a 20 20 62 74 72 65 65 5f 6e  3.31 {.  btree_n
13c0: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
13d0: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 6f  e_key $::c1.} {o
13e0: 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ne}.do_test btre
13f0: 65 2d 33 2e 33 32 20 7b 0a 20 20 62 74 72 65 65  e-3.32 {.  btree
1400: 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31  _data $::c1.} {1
1410: 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  .00}.do_test btr
1420: 65 65 2d 33 2e 33 33 20 7b 0a 20 20 62 74 72 65  ee-3.33 {.  btre
1430: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
1440: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
1450: 20 7b 73 69 78 7d 0a 64 6f 5f 74 65 73 74 20 62   {six}.do_test b
1460: 74 72 65 65 2d 33 2e 33 34 20 7b 0a 20 20 62 74  tree-3.34 {.  bt
1470: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d  ree_data $::c1.}
1480: 20 7b 36 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {6.00}.do_test 
1490: 62 74 72 65 65 2d 33 2e 33 35 20 7b 0a 20 20 62  btree-3.35 {.  b
14a0: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
14b0: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
14c0: 31 0a 7d 20 7b 74 68 72 65 65 7d 0a 64 6f 5f 74  1.} {three}.do_t
14d0: 65 73 74 20 62 74 72 65 65 2d 33 2e 33 36 20 7b  est btree-3.36 {
14e0: 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a  .  btree_data $:
14f0: 3a 63 31 0a 7d 20 7b 33 2e 30 30 7d 0a 64 6f 5f  :c1.} {3.00}.do_
1500: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33 37 20  test btree-3.37 
1510: 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24  {.  btree_next $
1520: 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79  ::c1.  btree_key
1530: 20 24 3a 3a 63 31 0a 7d 20 7b 74 77 6f 7d 0a 64   $::c1.} {two}.d
1540: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33  o_test btree-3.3
1550: 38 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61  8 {.  btree_data
1560: 20 24 3a 3a 63 31 0a 7d 20 7b 32 2e 30 30 7d 0a   $::c1.} {2.00}.
1570: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
1580: 33 39 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78  39 {.  btree_nex
1590: 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  t $::c1.  btree_
15a0: 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64  key $::c1.} {}.d
15b0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 34  o_test btree-3.4
15c0: 30 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61  0 {.  btree_data
15d0: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
15e0: 65 73 74 20 62 74 72 65 65 2d 33 2e 34 31 20 7b  est btree-3.41 {
15f0: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
1600: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
1610: 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 0a 0a 23 20  b1] 1.} {2}...# 
1620: 4e 6f 77 20 74 72 79 20 61 20 64 65 6c 65 74 65  Now try a delete
1630: 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .#.do_test btree
1640: 2d 34 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 62  -4.1 {.  btree_b
1650: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e  egin_transaction
1660: 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 6d   $::b1.  btree_m
1670: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 6f 6e 65  ove_to $::c1 one
1680: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
1690: 63 31 0a 7d 20 7b 6f 6e 65 7d 0a 64 6f 5f 74 65  c1.} {one}.do_te
16a0: 73 74 20 62 74 72 65 65 2d 34 2e 31 2e 31 20 7b  st btree-4.1.1 {
16b0: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
16c0: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
16d0: 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  b1] 1.} {2}.do_t
16e0: 65 73 74 20 62 74 72 65 65 2d 34 2e 32 20 7b 0a  est btree-4.2 {.
16f0: 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24    btree_delete $
1700: 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ::c1.} {}.do_tes
1710: 74 20 62 74 72 65 65 2d 34 2e 33 20 7b 0a 20 20  t btree-4.3 {.  
1720: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
1730: 7d 20 7b 73 69 78 7d 0a 64 6f 5f 74 65 73 74 20  } {six}.do_test 
1740: 62 74 72 65 65 2d 34 2e 34 20 7b 0a 20 20 62 74  btree-4.4 {.  bt
1750: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
1760: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
1770: 0a 7d 20 7b 73 69 78 7d 0a 64 6f 5f 74 65 73 74  .} {six}.do_test
1780: 20 62 74 72 65 65 2d 34 2e 35 20 7b 0a 20 20 62   btree-4.5 {.  b
1790: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
17a0: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
17b0: 31 0a 7d 20 7b 74 68 72 65 65 7d 0a 64 6f 5f 74  1.} {three}.do_t
17c0: 65 73 74 20 62 74 72 65 65 2d 34 2e 34 20 7b 0a  est btree-4.4 {.
17d0: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
17e0: 24 3a 3a 63 31 20 7b 7d 0a 20 20 73 65 74 20 72  $::c1 {}.  set r
17f0: 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31 20 7b 0a   {}.  while 1 {.
1800: 20 20 20 20 73 65 74 20 6b 65 79 20 5b 62 74 72      set key [btr
1810: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20  ee_key $::c1].  
1820: 20 20 69 66 20 7b 24 6b 65 79 3d 3d 22 22 7d 20    if {$key==""} 
1830: 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70 65 6e  break.    lappen
1840: 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c 61 70  d r $key.    lap
1850: 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f 64 61  pend r [btree_da
1860: 74 61 20 24 3a 3a 63 31 5d 0a 20 20 20 20 62 74  ta $::c1].    bt
1870: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
1880: 20 7d 0a 20 20 73 65 74 20 72 20 20 20 0a 7d 20   }.  set r   .} 
1890: 7b 66 69 76 65 20 35 2e 30 30 20 66 6f 75 72 20  {five 5.00 four 
18a0: 34 2e 30 30 20 73 69 78 20 36 2e 30 30 20 74 68  4.00 six 6.00 th
18b0: 72 65 65 20 33 2e 30 30 20 74 77 6f 20 32 2e 30  ree 3.00 two 2.0
18c0: 30 7d 0a 0a 23 20 43 6f 6d 6d 69 74 20 61 6e 64  0}..# Commit and
18d0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
18e0: 65 6c 65 74 65 20 69 73 20 73 74 69 6c 6c 20 74  elete is still t
18f0: 68 65 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  here..#.do_test 
1900: 62 74 72 65 65 2d 34 2e 35 20 7b 0a 20 20 62 74  btree-4.5 {.  bt
1910: 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31  ree_commit $::b1
1920: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
1930: 20 24 3a 3a 63 31 20 7b 7d 0a 20 20 73 65 74 20   $::c1 {}.  set 
1940: 72 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31 20 7b  r {}.  while 1 {
1950: 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b 62 74  .    set key [bt
1960: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20  ree_key $::c1]. 
1970: 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d 22 22 7d     if {$key==""}
1980: 20 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70 65   break.    lappe
1990: 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c 61  nd r $key.    la
19a0: 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f 64  ppend r [btree_d
19b0: 61 74 61 20 24 3a 3a 63 31 5d 0a 20 20 20 20 62  ata $::c1].    b
19c0: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
19d0: 20 20 7d 0a 20 20 73 65 74 20 72 20 20 20 0a 7d    }.  set r   .}
19e0: 20 7b 66 69 76 65 20 35 2e 30 30 20 66 6f 75 72   {five 5.00 four
19f0: 20 34 2e 30 30 20 73 69 78 20 36 2e 30 30 20 74   4.00 six 6.00 t
1a00: 68 72 65 65 20 33 2e 30 30 20 74 77 6f 20 32 2e  hree 3.00 two 2.
1a10: 30 30 7d 0a 0a 23 20 43 6f 6d 70 6c 65 74 65 6c  00}..# Completel
1a20: 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61  y close the data
1a30: 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65 6e 20  base and reopen 
1a40: 69 74 2e 20 20 54 68 65 6e 20 63 68 65 63 6b 0a  it.  Then check.
1a50: 23 20 74 68 65 20 64 61 74 61 20 61 67 61 69 6e  # the data again
1a60: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ..#.do_test btre
1a70: 65 2d 34 2e 36 20 7b 0a 20 20 6c 69 6e 64 65 78  e-4.6 {.  lindex
1a80: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
1a90: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
1aa0: 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  2}.do_test btree
1ab0: 2d 34 2e 37 20 7b 0a 20 20 62 74 72 65 65 5f 63  -4.7 {.  btree_c
1ac0: 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63  lose_cursor $::c
1ad0: 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  1.  lindex [btre
1ae0: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
1af0: 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64 6f 5f  :b1] 1.} {0}.do_
1b00: 74 65 73 74 20 62 74 72 65 65 2d 34 2e 38 20 7b  test btree-4.8 {
1b10: 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 20 24  .  btree_close $
1b20: 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 62 31 20  ::b1.  set ::b1 
1b30: 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65 73 74  [btree_open test
1b40: 31 2e 62 74 5d 0a 20 20 73 65 74 20 3a 3a 63 31  1.bt].  set ::c1
1b50: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
1b60: 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69 6e 64  ::b1 2 1].  lind
1b70: 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f  ex [btree_pager_
1b80: 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d  stats $::b1] 1.}
1b90: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {2}.do_test btr
1ba0: 65 65 2d 34 2e 39 20 7b 0a 20 20 73 65 74 20 72  ee-4.9 {.  set r
1bb0: 20 7b 7d 0a 20 20 62 74 72 65 65 5f 66 69 72 73   {}.  btree_firs
1bc0: 74 20 24 3a 3a 63 31 0a 20 20 77 68 69 6c 65 20  t $::c1.  while 
1bd0: 31 20 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20  1 {.    set key 
1be0: 5b 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31  [btree_key $::c1
1bf0: 5d 0a 20 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d  ].    if {$key==
1c00: 22 22 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61  ""} break.    la
1c10: 70 70 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20  ppend r $key.   
1c20: 20 6c 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65   lappend r [btre
1c30: 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d 0a 20 20  e_data $::c1].  
1c40: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a    btree_next $::
1c50: 63 31 0a 20 20 7d 0a 20 20 73 65 74 20 72 20 20  c1.  }.  set r  
1c60: 20 0a 7d 20 7b 66 69 76 65 20 35 2e 30 30 20 66   .} {five 5.00 f
1c70: 6f 75 72 20 34 2e 30 30 20 73 69 78 20 36 2e 30  our 4.00 six 6.0
1c80: 30 20 74 68 72 65 65 20 33 2e 30 30 20 74 77 6f  0 three 3.00 two
1c90: 20 32 2e 30 30 7d 0a 0a 23 20 54 72 79 20 74 6f   2.00}..# Try to
1ca0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
1cb0: 6d 65 74 61 20 64 61 74 61 0a 23 0a 64 6f 5f 74  meta data.#.do_t
1cc0: 65 73 74 20 62 74 72 65 65 2d 35 2e 31 20 7b 0a  est btree-5.1 {.
1cd0: 20 20 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61    btree_get_meta
1ce0: 20 24 3a 3a 62 31 0a 7d 20 7b 30 20 30 20 30 20   $::b1.} {0 0 0 
1cf0: 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a 64  0 0 0 0 0 0 0}.d
1d00: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 35 2e 32  o_test btree-5.2
1d10: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
1d20: 63 68 20 7b 62 74 72 65 65 5f 75 70 64 61 74 65  ch {btree_update
1d30: 5f 6d 65 74 61 20 24 3a 3a 62 31 20 31 20 32 20  _meta $::b1 1 2 
1d40: 33 20 34 20 35 20 36 20 37 20 38 20 39 20 31 30  3 4 5 6 7 8 9 10
1d50: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
1d60: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 53 51   rc $msg.} {1 SQ
1d70: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74  LITE_ERROR}.do_t
1d80: 65 73 74 20 62 74 72 65 65 2d 35 2e 33 20 7b 0a  est btree-5.3 {.
1d90: 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72    btree_begin_tr
1da0: 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a  ansaction $::b1.
1db0: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
1dc0: 7b 62 74 72 65 65 5f 75 70 64 61 74 65 5f 6d 65  {btree_update_me
1dd0: 74 61 20 24 3a 3a 62 31 20 31 20 32 20 33 20 34  ta $::b1 1 2 3 4
1de0: 20 35 20 36 20 37 20 38 20 39 20 31 30 7d 20 6d   5 6 7 8 9 10} m
1df0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
1e00: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
1e10: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 35 2e 34  o_test btree-5.4
1e20: 20 7b 0a 20 20 62 74 72 65 65 5f 67 65 74 5f 6d   {.  btree_get_m
1e30: 65 74 61 20 24 3a 3a 62 31 0a 7d 20 7b 30 20 32  eta $::b1.} {0 2
1e40: 20 33 20 34 20 35 20 36 20 37 20 38 20 39 20 31   3 4 5 6 7 8 9 1
1e50: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
1e60: 2d 35 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f 63  -5.5 {.  btree_c
1e70: 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63  lose_cursor $::c
1e80: 31 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c 62 61  1.  btree_rollba
1e90: 63 6b 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65  ck $::b1.  btree
1ea0: 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31 0a  _get_meta $::b1.
1eb0: 7d 20 7b 30 20 30 20 30 20 30 20 30 20 30 20 30  } {0 0 0 0 0 0 0
1ec0: 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20   0 0 0}.do_test 
1ed0: 62 74 72 65 65 2d 35 2e 36 20 7b 0a 20 20 62 74  btree-5.6 {.  bt
1ee0: 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61  ree_begin_transa
1ef0: 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74  ction $::b1.  bt
1f00: 72 65 65 5f 75 70 64 61 74 65 5f 6d 65 74 61 20  ree_update_meta 
1f10: 24 3a 3a 62 31 20 39 39 39 20 31 30 20 32 30 20  $::b1 999 10 20 
1f20: 33 30 20 34 30 20 35 30 20 36 30 20 37 30 20 38  30 40 50 60 70 8
1f30: 30 20 39 30 0a 20 20 62 74 72 65 65 5f 63 6f 6d  0 90.  btree_com
1f40: 6d 69 74 20 24 3a 3a 62 31 0a 20 20 62 74 72 65  mit $::b1.  btre
1f50: 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31  e_get_meta $::b1
1f60: 0a 7d 20 7b 30 20 31 30 20 32 30 20 33 30 20 34  .} {0 10 20 30 4
1f70: 30 20 35 30 20 36 30 20 37 30 20 38 30 20 39 30  0 50 60 70 80 90
1f80: 7d 0a 0a 70 72 6f 63 20 73 65 6c 65 63 74 5f 61  }..proc select_a
1f90: 6c 6c 20 7b 63 75 72 73 6f 72 7d 20 7b 0a 20 20  ll {cursor} {.  
1fa0: 73 65 74 20 72 20 7b 7d 0a 20 20 62 74 72 65 65  set r {}.  btree
1fb0: 5f 6d 6f 76 65 5f 74 6f 20 24 63 75 72 73 6f 72  _move_to $cursor
1fc0: 20 7b 7d 0a 20 20 77 68 69 6c 65 20 31 20 7b 0a   {}.  while 1 {.
1fd0: 20 20 20 20 73 65 74 20 6b 65 79 20 5b 62 74 72      set key [btr
1fe0: 65 65 5f 6b 65 79 20 24 63 75 72 73 6f 72 5d 0a  ee_key $cursor].
1ff0: 20 20 20 20 69 66 20 7b 24 6b 65 79 3d 3d 22 22      if {$key==""
2000: 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70  } break.    lapp
2010: 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c  end r $key.    l
2020: 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f  append r [btree_
2030: 64 61 74 61 20 24 63 75 72 73 6f 72 5d 0a 20 20  data $cursor].  
2040: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 63 75    btree_next $cu
2050: 72 73 6f 72 0a 20 20 7d 0a 20 20 72 65 74 75 72  rsor.  }.  retur
2060: 6e 20 24 72 0a 7d 0a 70 72 6f 63 20 73 65 6c 65  n $r.}.proc sele
2070: 63 74 5f 6b 65 79 73 20 7b 63 75 72 73 6f 72 7d  ct_keys {cursor}
2080: 20 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a 20 20   {.  set r {}.  
2090: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 63  btree_move_to $c
20a0: 75 72 73 6f 72 20 7b 7d 0a 20 20 77 68 69 6c 65  ursor {}.  while
20b0: 20 31 20 7b 0a 20 20 20 20 73 65 74 20 6b 65 79   1 {.    set key
20c0: 20 5b 62 74 72 65 65 5f 6b 65 79 20 24 63 75 72   [btree_key $cur
20d0: 73 6f 72 5d 0a 20 20 20 20 69 66 20 7b 24 6b 65  sor].    if {$ke
20e0: 79 3d 3d 22 22 7d 20 62 72 65 61 6b 0a 20 20 20  y==""} break.   
20f0: 20 6c 61 70 70 65 6e 64 20 72 20 24 6b 65 79 0a   lappend r $key.
2100: 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24      btree_next $
2110: 63 75 72 73 6f 72 0a 20 20 7d 0a 20 20 72 65 74  cursor.  }.  ret
2120: 75 72 6e 20 24 72 0a 7d 0a 0a 23 20 54 72 79 20  urn $r.}..# Try 
2130: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
2140: 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74  table in the dat
2150: 61 62 61 73 65 20 66 69 6c 65 0a 23 0a 64 6f 5f  abase file.#.do_
2160: 74 65 73 74 20 62 74 72 65 65 2d 36 2e 31 20 7b  test btree-6.1 {
2170: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
2180: 20 7b 62 74 72 65 65 5f 63 72 65 61 74 65 5f 74   {btree_create_t
2190: 61 62 6c 65 20 24 3a 3a 62 31 7d 20 6d 73 67 5d  able $::b1} msg]
21a0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d  .  lappend rc $m
21b0: 73 67 0a 7d 20 7b 31 20 53 51 4c 49 54 45 5f 45  sg.} {1 SQLITE_E
21c0: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 62 74  RROR}.do_test bt
21d0: 72 65 65 2d 36 2e 32 20 7b 0a 20 20 62 74 72 65  ree-6.2 {.  btre
21e0: 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74  e_begin_transact
21f0: 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 73 65 74 20  ion $::b1.  set 
2200: 3a 3a 74 32 20 5b 62 74 72 65 65 5f 63 72 65 61  ::t2 [btree_crea
2210: 74 65 5f 74 61 62 6c 65 20 24 3a 3a 62 31 5d 0a  te_table $::b1].
2220: 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {3}.do_test bt
2230: 72 65 65 2d 36 2e 32 2e 31 20 7b 0a 20 20 6c 69  ree-6.2.1 {.  li
2240: 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65  ndex [btree_page
2250: 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31  r_stats $::b1] 1
2260: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {1}.do_test b
2270: 74 72 65 65 2d 36 2e 32 2e 32 20 7b 0a 20 20 73  tree-6.2.2 {.  s
2280: 65 74 20 3a 3a 63 32 20 5b 62 74 72 65 65 5f 63  et ::c2 [btree_c
2290: 75 72 73 6f 72 20 24 3a 3a 62 31 20 24 3a 3a 74  ursor $::b1 $::t
22a0: 32 20 31 5d 0a 20 20 6c 69 6e 64 65 78 20 5b 62  2 1].  lindex [b
22b0: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
22c0: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a   $::b1] 1.} {2}.
22d0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e  do_test btree-6.
22e0: 32 2e 33 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e  2.3 {.  btree_in
22f0: 73 65 72 74 20 24 3a 3a 63 32 20 74 65 6e 20 31  sert $::c2 ten 1
2300: 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  0.  btree_key $:
2310: 3a 63 32 0a 7d 20 7b 74 65 6e 7d 0a 64 6f 5f 74  :c2.} {ten}.do_t
2320: 65 73 74 20 62 74 72 65 65 2d 36 2e 33 20 7b 0a  est btree-6.3 {.
2330: 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24    btree_commit $
2340: 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 63 31 20  ::b1.  set ::c1 
2350: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a  [btree_cursor $:
2360: 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69 6e 64 65  :b1 2 1].  linde
2370: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
2380: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
2390: 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  {3}.do_test btre
23a0: 65 2d 36 2e 33 2e 31 20 7b 0a 20 20 73 65 6c 65  e-6.3.1 {.  sele
23b0: 63 74 5f 61 6c 6c 20 24 3a 3a 63 31 0a 7d 20 7b  ct_all $::c1.} {
23c0: 66 69 76 65 20 35 2e 30 30 20 66 6f 75 72 20 34  five 5.00 four 4
23d0: 2e 30 30 20 73 69 78 20 36 2e 30 30 20 74 68 72  .00 six 6.00 thr
23e0: 65 65 20 33 2e 30 30 20 74 77 6f 20 32 2e 30 30  ee 3.00 two 2.00
23f0: 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75  }.#btree_page_du
2400: 6d 70 20 24 3a 3a 62 31 20 33 0a 64 6f 5f 74 65  mp $::b1 3.do_te
2410: 73 74 20 62 74 72 65 65 2d 36 2e 34 20 7b 0a 20  st btree-6.4 {. 
2420: 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a 3a 63   select_all $::c
2430: 32 0a 7d 20 7b 74 65 6e 20 31 30 7d 0a 0a 23 20  2.} {ten 10}..# 
2440: 44 72 6f 70 20 74 68 65 20 6e 65 77 20 74 61 62  Drop the new tab
2450: 6c 65 2c 20 74 68 65 6e 20 63 72 65 61 74 65 20  le, then create 
2460: 69 74 20 61 67 61 69 6e 20 61 6e 65 77 2e 0a 23  it again anew..#
2470: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
2480: 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f 62 65 67  .5 {.  btree_beg
2490: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24  in_transaction $
24a0: 3a 3a 62 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ::b1.} {}.do_tes
24b0: 74 20 62 74 72 65 65 2d 36 2e 36 20 7b 0a 20 20  t btree-6.6 {.  
24c0: 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73  btree_close_curs
24d0: 6f 72 20 24 3a 3a 63 32 0a 7d 20 7b 7d 0a 64 6f  or $::c2.} {}.do
24e0: 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 36 2e  _test btree-6.6.
24f0: 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  1 {.  lindex [bt
2500: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
2510: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64  $::b1] 1.} {2}.d
2520: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 37  o_test btree-6.7
2530: 20 7b 0a 20 20 62 74 72 65 65 5f 64 72 6f 70 5f   {.  btree_drop_
2540: 74 61 62 6c 65 20 24 3a 3a 62 31 20 24 3a 3a 74  table $::b1 $::t
2550: 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62  2.} {}.do_test b
2560: 74 72 65 65 2d 36 2e 37 2e 31 20 7b 0a 20 20 6c  tree-6.7.1 {.  l
2570: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67 65 74  index [btree_get
2580: 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a 7d  _meta $::b1] 0.}
2590: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {1}.do_test btr
25a0: 65 65 2d 36 2e 38 20 7b 0a 20 20 73 65 74 20 3a  ee-6.8 {.  set :
25b0: 3a 74 32 20 5b 62 74 72 65 65 5f 63 72 65 61 74  :t2 [btree_creat
25c0: 65 5f 74 61 62 6c 65 20 24 3a 3a 62 31 5d 0a 7d  e_table $::b1].}
25d0: 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {3}.do_test btr
25e0: 65 65 2d 36 2e 38 2e 31 20 7b 0a 20 20 6c 69 6e  ee-6.8.1 {.  lin
25f0: 64 65 78 20 5b 62 74 72 65 65 5f 67 65 74 5f 6d  dex [btree_get_m
2600: 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b  eta $::b1] 0.} {
2610: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
2620: 2d 36 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 63  -6.9 {.  set ::c
2630: 32 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20  2 [btree_cursor 
2640: 24 3a 3a 62 31 20 24 3a 3a 74 32 20 31 5d 0a 20  $::b1 $::t2 1]. 
2650: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70   lindex [btree_p
2660: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31  ager_stats $::b1
2670: 5d 20 31 0a 7d 20 7b 33 7d 0a 0a 64 6f 5f 74 65  ] 1.} {3}..do_te
2680: 73 74 20 62 74 72 65 65 2d 36 2e 39 2e 31 20 7b  st btree-6.9.1 {
2690: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
26a0: 20 24 3a 3a 63 32 20 7b 7d 0a 20 20 62 74 72 65   $::c2 {}.  btre
26b0: 65 5f 6b 65 79 20 24 3a 3a 63 32 0a 7d 20 7b 7d  e_key $::c2.} {}
26c0: 0a 0a 23 20 49 66 20 77 65 20 64 72 6f 70 20 74  ..# If we drop t
26d0: 61 62 6c 65 20 32 20 69 74 20 6a 75 73 74 20 63  able 2 it just c
26e0: 6c 65 61 72 73 20 74 68 65 20 74 61 62 6c 65 2e  lears the table.
26f0: 20 20 54 61 62 6c 65 20 32 20 61 6c 77 61 79 73    Table 2 always
2700: 20 65 78 69 73 74 73 2e 0a 23 0a 64 6f 5f 74 65   exists..#.do_te
2710: 73 74 20 62 74 72 65 65 2d 36 2e 31 30 20 7b 0a  st btree-6.10 {.
2720: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75    btree_close_cu
2730: 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62 74 72  rsor $::c1.  btr
2740: 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20 24 3a  ee_drop_table $:
2750: 3a 62 31 20 32 0a 20 20 73 65 74 20 3a 3a 63 31  :b1 2.  set ::c1
2760: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
2770: 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74 72 65  ::b1 2 1].  btre
2780: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
2790: 7b 7d 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  {}.  btree_key $
27a0: 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ::c1.} {}.do_tes
27b0: 74 20 62 74 72 65 65 2d 36 2e 31 31 20 7b 0a 20  t btree-6.11 {. 
27c0: 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a   btree_commit $:
27d0: 3a 62 31 0a 20 20 73 65 6c 65 63 74 5f 61 6c 6c  :b1.  select_all
27e0: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
27f0: 65 73 74 20 62 74 72 65 65 2d 36 2e 31 32 20 7b  est btree-6.12 {
2800: 0a 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a  .  select_all $:
2810: 3a 63 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  :c2.} {}.do_test
2820: 20 62 74 72 65 65 2d 36 2e 31 33 20 7b 0a 20 20   btree-6.13 {.  
2830: 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73  btree_close_curs
2840: 6f 72 20 24 3a 3a 63 32 0a 20 20 6c 69 6e 64 65  or $::c2.  linde
2850: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
2860: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
2870: 7b 32 7d 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20  {2}..# Check to 
2880: 73 65 65 20 74 68 61 74 20 70 61 67 65 73 20 64  see that pages d
2890: 65 66 72 61 67 6d 65 6e 74 20 70 72 6f 70 65 72  efragment proper
28a0: 6c 79 2e 20 20 54 6f 20 64 6f 20 74 68 69 73 20  ly.  To do this 
28b0: 74 65 73 74 20 77 65 20 77 69 6c 6c 0a 23 20 0a  test we will.# .
28c0: 23 20 20 20 31 2e 20 20 46 69 6c 6c 20 74 68 65  #   1.  Fill the
28d0: 20 66 69 72 73 74 20 70 61 67 65 20 74 61 62 6c   first page tabl
28e0: 65 20 32 20 77 69 74 68 20 64 61 74 61 2e 0a 23  e 2 with data..#
28f0: 20 20 20 32 2e 20 20 44 65 6c 65 74 65 20 65 76     2.  Delete ev
2900: 65 72 79 20 6f 74 68 65 72 20 65 6e 74 72 79 20  ery other entry 
2910: 6f 66 20 74 61 62 6c 65 20 32 2e 20 0a 23 20 20  of table 2. .#  
2920: 20 33 2e 20 20 49 6e 73 65 72 74 20 61 20 73 69   3.  Insert a si
2930: 6e 67 6c 65 20 65 6e 74 72 79 20 74 68 61 74 20  ngle entry that 
2940: 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20 63 6f  requires more co
2950: 6e 74 69 67 75 6f 75 73 0a 23 20 20 20 20 20 20  ntiguous.#      
2960: 20 73 70 61 63 65 20 74 68 61 6e 20 69 73 20 61   space than is a
2970: 76 61 69 6c 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74  vailable..#.do_t
2980: 65 73 74 20 62 74 72 65 65 2d 37 2e 31 20 7b 0a  est btree-7.1 {.
2990: 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72    btree_begin_tr
29a0: 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a  ansaction $::b1.
29b0: 7d 20 7b 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65  } {}.catch {unse
29c0: 74 20 6b 65 79 7d 0a 63 61 74 63 68 20 7b 75 6e  t key}.catch {un
29d0: 73 65 74 20 64 61 74 61 7d 0a 64 6f 5f 74 65 73  set data}.do_tes
29e0: 74 20 62 74 72 65 65 2d 37 2e 32 20 7b 0a 20 20  t btree-7.2 {.  
29f0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
2a00: 69 3c 33 36 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  i<36} {incr i} {
2a10: 0a 20 20 20 20 73 65 74 20 6b 65 79 20 5b 66 6f  .    set key [fo
2a20: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20  rmat %03d $i].  
2a30: 20 20 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20    set data "*** 
2a40: 24 6b 65 79 20 2a 2a 2a 22 0a 20 20 20 20 62 74  $key ***".    bt
2a50: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
2a60: 20 24 6b 65 79 20 24 64 61 74 61 0a 20 20 7d 0a   $key $data.  }.
2a70: 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65 65 5f    lrange [btree_
2a80: 63 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a 3a 63  cursor_dump $::c
2a90: 31 5d 20 34 20 35 0a 7d 20 7b 38 20 31 7d 0a 64  1] 4 5.} {8 1}.d
2aa0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e 33  o_test btree-7.3
2ab0: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
2ac0: 74 6f 20 24 3a 3a 63 31 20 30 30 30 0a 20 20 77  to $::c1 000.  w
2ad0: 68 69 6c 65 20 7b 5b 62 74 72 65 65 5f 6b 65 79  hile {[btree_key
2ae0: 20 24 3a 3a 63 31 5d 21 3d 22 22 7d 20 7b 0a 20   $::c1]!=""} {. 
2af0: 20 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20     btree_delete 
2b00: 24 3a 3a 63 31 0a 20 20 20 20 62 74 72 65 65 5f  $::c1.    btree_
2b10: 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 20 20 62  next $::c1.    b
2b20: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
2b30: 20 20 7d 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74    }.  lrange [bt
2b40: 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70 20  ree_cursor_dump 
2b50: 24 3a 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 35 31  $::c1] 4 5.} {51
2b60: 32 20 31 39 7d 0a 23 62 74 72 65 65 5f 70 61 67  2 19}.#btree_pag
2b70: 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64  e_dump $::b1 2.d
2b80: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e 34  o_test btree-7.4
2b90: 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72   {.  btree_inser
2ba0: 74 20 24 3a 3a 63 31 20 30 31 38 20 7b 2a 2a 2a  t $::c1 018 {***
2bb0: 20 30 31 38 20 2a 2a 2a 2b 2b 2b 7d 0a 20 20 62   018 ***+++}.  b
2bc0: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
2bd0: 20 7b 30 31 38 7d 0a 64 6f 5f 74 65 73 74 20 62   {018}.do_test b
2be0: 74 72 65 65 2d 37 2e 35 20 7b 0a 20 20 6c 72 61  tree-7.5 {.  lra
2bf0: 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f  nge [btree_curso
2c00: 72 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20 34 20  r_dump $::c1] 4 
2c10: 35 0a 7d 20 7b 34 38 30 20 31 7d 0a 23 62 74 72  5.} {480 1}.#btr
2c20: 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a  ee_page_dump $::
2c30: 62 31 20 32 0a 0a 23 20 44 65 6c 65 74 65 20 61  b1 2..# Delete a
2c40: 6e 20 65 6e 74 72 79 20 74 6f 20 6d 61 6b 65 20  n entry to make 
2c50: 61 20 68 6f 6c 65 20 6f 66 20 61 20 6b 6e 6f 77  a hole of a know
2c60: 6e 20 73 69 7a 65 2c 20 74 68 65 6e 20 69 6d 6d  n size, then imm
2c70: 65 64 69 61 74 65 6c 79 20 72 65 63 72 65 61 74  ediately recreat
2c80: 65 0a 23 20 74 68 61 74 20 65 6e 74 72 79 2e 20  e.# that entry. 
2c90: 20 54 68 69 73 20 74 65 73 74 73 20 74 68 65 20   This tests the 
2ca0: 70 61 74 68 20 69 6e 74 6f 20 61 6c 6c 6f 63 61  path into alloca
2cb0: 74 65 53 70 61 63 65 20 77 68 65 72 65 20 74 68  teSpace where th
2cc0: 65 20 68 6f 6c 65 20 65 78 61 63 74 6c 79 0a 23  e hole exactly.#
2cd0: 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 69 7a   matches the siz
2ce0: 65 20 6f 66 20 74 68 65 20 64 65 73 69 72 65 64  e of the desired
2cf0: 20 73 70 61 63 65 2e 0a 23 0a 64 6f 5f 74 65 73   space..#.do_tes
2d00: 74 20 62 74 72 65 65 2d 37 2e 36 20 7b 0a 20 20  t btree-7.6 {.  
2d10: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
2d20: 3a 63 31 20 30 30 37 0a 20 20 62 74 72 65 65 5f  :c1 007.  btree_
2d30: 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20 62  delete $::c1.  b
2d40: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
2d50: 63 31 20 30 31 31 0a 20 20 62 74 72 65 65 5f 64  c1 011.  btree_d
2d60: 65 6c 65 74 65 20 24 3a 3a 63 31 0a 7d 20 7b 7d  elete $::c1.} {}
2d70: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37  .do_test btree-7
2d80: 2e 37 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .7 {.  lindex [b
2d90: 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70  tree_cursor_dump
2da0: 20 24 3a 3a 63 31 5d 20 35 0a 7d 20 7b 33 7d 0a   $::c1] 5.} {3}.
2db0: 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70  #btree_page_dump
2dc0: 20 24 3a 3a 62 31 20 32 0a 64 6f 5f 74 65 73 74   $::b1 2.do_test
2dd0: 20 62 74 72 65 65 2d 37 2e 38 20 7b 0a 20 20 62   btree-7.8 {.  b
2de0: 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63  tree_insert $::c
2df0: 31 20 30 30 37 20 7b 2a 2a 2a 20 30 30 37 20 2a  1 007 {*** 007 *
2e00: 2a 2a 7d 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  **}.  lindex [bt
2e10: 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70 20  ree_cursor_dump 
2e20: 24 3a 3a 63 31 5d 20 35 0a 7d 20 7b 32 7d 0a 23  $::c1] 5.} {2}.#
2e30: 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20  btree_page_dump 
2e40: 24 3a 3a 62 31 20 32 0a 0a 23 20 4d 61 6b 65 20  $::b1 2..# Make 
2e50: 73 75 72 65 20 74 68 65 20 66 72 65 65 53 70 61  sure the freeSpa
2e60: 63 65 28 29 20 72 6f 75 74 69 6e 65 20 70 72 6f  ce() routine pro
2e70: 70 65 72 6c 79 20 63 6f 61 6c 65 73 65 73 20 61  perly coaleses a
2e80: 64 6a 61 63 65 6e 74 20 6d 65 6d 6f 72 79 20 62  djacent memory b
2e90: 6c 6f 63 6b 73 0a 23 0a 64 6f 5f 74 65 73 74 20  locks.#.do_test 
2ea0: 62 74 72 65 65 2d 37 2e 39 20 7b 0a 20 20 62 74  btree-7.9 {.  bt
2eb0: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
2ec0: 31 20 30 31 33 0a 20 20 62 74 72 65 65 5f 64 65  1 013.  btree_de
2ed0: 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c 72 61  lete $::c1.  lra
2ee0: 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f  nge [btree_curso
2ef0: 72 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20 34 20  r_dump $::c1] 4 
2f00: 35 0a 7d 20 7b 35 33 36 20 32 7d 0a 64 6f 5f 74  5.} {536 2}.do_t
2f10: 65 73 74 20 62 74 72 65 65 2d 37 2e 31 30 20 7b  est btree-7.10 {
2f20: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
2f30: 20 24 3a 3a 63 31 20 30 30 39 0a 20 20 62 74 72   $::c1 009.  btr
2f40: 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a  ee_delete $::c1.
2f50: 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65 65 5f    lrange [btree_
2f60: 63 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a 3a 63  cursor_dump $::c
2f70: 31 5d 20 34 20 35 0a 7d 20 7b 35 36 34 20 32 7d  1] 4 5.} {564 2}
2f80: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37  .do_test btree-7
2f90: 2e 31 31 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  .11 {.  btree_mo
2fa0: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 30 31 38 0a  ve_to $::c1 018.
2fb0: 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24    btree_delete $
2fc0: 3a 3a 63 31 0a 20 20 6c 72 61 6e 67 65 20 5b 62  ::c1.  lrange [b
2fd0: 74 72 65 65 5f 63 75 72 73 6f 72 5f 64 75 6d 70  tree_cursor_dump
2fe0: 20 24 3a 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 35   $::c1] 4 5.} {5
2ff0: 39 36 20 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74  96 2}.do_test bt
3000: 72 65 65 2d 37 2e 31 33 20 7b 0a 20 20 62 74 72  ree-7.13 {.  btr
3010: 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31  ee_move_to $::c1
3020: 20 30 33 33 0a 20 20 62 74 72 65 65 5f 64 65 6c   033.  btree_del
3030: 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c 72 61 6e  ete $::c1.  lran
3040: 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  ge [btree_cursor
3050: 5f 64 75 6d 70 20 24 3a 3a 63 31 5d 20 34 20 35  _dump $::c1] 4 5
3060: 0a 7d 20 7b 36 32 34 20 33 7d 0a 64 6f 5f 74 65  .} {624 3}.do_te
3070: 73 74 20 62 74 72 65 65 2d 37 2e 31 34 20 7b 0a  st btree-7.14 {.
3080: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
3090: 24 3a 3a 63 31 20 30 33 35 0a 20 20 62 74 72 65  $::c1 035.  btre
30a0: 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20  e_delete $::c1. 
30b0: 20 6c 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63   lrange [btree_c
30c0: 75 72 73 6f 72 5f 64 75 6d 70 20 24 3a 3a 63 31  ursor_dump $::c1
30d0: 5d 20 34 20 35 0a 7d 20 7b 36 35 32 20 32 7d 0a  ] 4 5.} {652 2}.
30e0: 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70  #btree_page_dump
30f0: 20 24 3a 3a 62 31 20 32 0a 64 6f 5f 74 65 73 74   $::b1 2.do_test
3100: 20 62 74 72 65 65 2d 37 2e 31 35 20 7b 0a 20 20   btree-7.15 {.  
3110: 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61  lindex [btree_pa
3120: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d  ger_stats $::b1]
3130: 20 31 0a 7d 20 7b 32 7d 0a 0a 23 20 43 68 65 63   1.} {2}..# Chec
3140: 6b 20 74 6f 20 73 65 65 20 74 68 61 74 20 64 61  k to see that da
3150: 74 61 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  ta on overflow p
3160: 61 67 65 73 20 77 6f 72 6b 20 63 6f 72 72 65 63  ages work correc
3170: 74 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62  tly..#.do_test b
3180: 74 72 65 65 2d 38 2e 31 20 7b 0a 20 20 73 65 74  tree-8.1 {.  set
3190: 20 64 61 74 61 20 22 2a 2a 2a 20 54 68 69 73 20   data "*** This 
31a0: 69 73 20 61 20 76 65 72 79 20 6c 6f 6e 67 20 6b  is a very long k
31b0: 65 79 20 22 0a 20 20 77 68 69 6c 65 20 7b 5b 73  ey ".  while {[s
31c0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da
31d0: 74 61 5d 3c 32 35 36 7d 20 7b 61 70 70 65 6e 64  ta]<256} {append
31e0: 20 64 61 74 61 20 24 64 61 74 61 7d 0a 20 20 73   data $data}.  s
31f0: 65 74 20 3a 3a 64 61 74 61 20 24 64 61 74 61 0a  et ::data $data.
3200: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
3210: 3a 3a 63 31 20 30 32 30 20 24 64 61 74 61 0a 7d  ::c1 020 $data.}
3220: 20 7b 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f   {}.#btree_page_
3230: 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f 5f  dump $::b1 2.do_
3240: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31 2e 31  test btree-8.1.1
3250: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
3260: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
3270: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 23 62  ::b1] 1.} {2}.#b
3280: 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66 5f 64  tree_pager_ref_d
3290: 75 6d 70 20 24 3a 3a 62 31 0a 64 6f 5f 74 65 73  ump $::b1.do_tes
32a0: 74 20 62 74 72 65 65 2d 38 2e 32 20 7b 0a 20 20  t btree-8.2 {.  
32b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 62  string length [b
32c0: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d  tree_data $::c1]
32d0: 0a 7d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  .} [string lengt
32e0: 68 20 24 3a 3a 64 61 74 61 5d 0a 64 6f 5f 74 65  h $::data].do_te
32f0: 73 74 20 62 74 72 65 65 2d 38 2e 33 20 7b 0a 20  st btree-8.3 {. 
3300: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
3310: 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74  1.} $::data.do_t
3320: 65 73 74 20 62 74 72 65 65 2d 38 2e 34 20 7b 0a  est btree-8.4 {.
3330: 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24    btree_delete $
3340: 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ::c1.} {}.do_tes
3350: 74 20 62 74 72 65 65 2d 38 2e 34 2e 31 20 7b 0a  t btree-8.4.1 {.
3360: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
3370: 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20  get_meta $::b1] 
3380: 30 0a 7d 20 5b 65 78 70 72 20 7b 69 6e 74 28 28  0.} [expr {int((
3390: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
33a0: 3a 3a 64 61 74 61 5d 2d 32 33 38 2b 31 30 31 39  ::data]-238+1019
33b0: 29 2f 31 30 32 30 29 7d 5d 0a 64 6f 5f 74 65 73  )/1020)}].do_tes
33c0: 74 20 62 74 72 65 65 2d 38 2e 35 20 7b 0a 20 20  t btree-8.5 {.  
33d0: 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20 54 68  set data "*** Th
33e0: 69 73 20 69 73 20 61 6e 20 65 76 65 6e 20 6c 6f  is is an even lo
33f0: 6e 67 65 72 20 6b 65 79 22 0a 20 20 77 68 69 6c  nger key".  whil
3400: 65 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  e {[string lengt
3410: 68 20 24 64 61 74 61 5d 3c 32 30 30 30 7d 20 7b  h $data]<2000} {
3420: 61 70 70 65 6e 64 20 64 61 74 61 20 24 64 61 74  append data $dat
3430: 61 7d 0a 20 20 73 65 74 20 3a 3a 64 61 74 61 20  a}.  set ::data 
3440: 24 64 61 74 61 0a 20 20 62 74 72 65 65 5f 69 6e  $data.  btree_in
3450: 73 65 72 74 20 24 3a 3a 63 31 20 30 32 30 20 24  sert $::c1 020 $
3460: 64 61 74 61 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  data.} {}.do_tes
3470: 74 20 62 74 72 65 65 2d 38 2e 36 20 7b 0a 20 20  t btree-8.6 {.  
3480: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 62  string length [b
3490: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d  tree_data $::c1]
34a0: 0a 7d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  .} [string lengt
34b0: 68 20 24 3a 3a 64 61 74 61 5d 0a 64 6f 5f 74 65  h $::data].do_te
34c0: 73 74 20 62 74 72 65 65 2d 38 2e 37 20 7b 0a 20  st btree-8.7 {. 
34d0: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
34e0: 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74  1.} $::data.do_t
34f0: 65 73 74 20 62 74 72 65 65 2d 38 2e 38 20 7b 0a  est btree-8.8 {.
3500: 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24    btree_commit $
3510: 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 64 61 74  ::b1.  btree_dat
3520: 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61 74  a $::c1.} $::dat
3530: 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  a.do_test btree-
3540: 38 2e 39 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c  8.9 {.  btree_cl
3550: 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31  ose_cursor $::c1
3560: 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 20 24  .  btree_close $
3570: 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 62 31 20  ::b1.  set ::b1 
3580: 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65 73 74  [btree_open test
3590: 31 2e 62 74 5d 0a 20 20 73 65 74 20 3a 3a 63 31  1.bt].  set ::c1
35a0: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
35b0: 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74 72 65  ::b1 2 1].  btre
35c0: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
35d0: 30 32 30 0a 20 20 62 74 72 65 65 5f 64 61 74 61  020.  btree_data
35e0: 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61 74 61   $::c1.} $::data
35f0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38  .do_test btree-8
3600: 2e 31 30 20 7b 0a 20 20 62 74 72 65 65 5f 62 65  .10 {.  btree_be
3610: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20  gin_transaction 
3620: 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 64 65  $::b1.  btree_de
3630: 6c 65 74 65 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a  lete $::c1.} {}.
3640: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3650: 31 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  11 {.  lindex [b
3660: 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a  tree_get_meta $:
3670: 3a 62 31 5d 20 30 0a 7d 20 5b 65 78 70 72 20 7b  :b1] 0.} [expr {
3680: 69 6e 74 28 28 5b 73 74 72 69 6e 67 20 6c 65 6e  int(([string len
3690: 67 74 68 20 24 3a 3a 64 61 74 61 5d 2d 32 33 38  gth $::data]-238
36a0: 2b 31 30 31 39 29 2f 31 30 32 30 29 7d 5d 0a 0a  +1019)/1020)}]..
36b0: 23 20 4e 6f 77 20 63 68 65 63 6b 20 6f 75 74 20  # Now check out 
36c0: 6b 65 79 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  keys on overflow
36d0: 20 70 61 67 65 73 2e 0a 23 0a 64 6f 5f 74 65 73   pages..#.do_tes
36e0: 74 20 62 74 72 65 65 2d 38 2e 31 32 20 7b 0a 20  t btree-8.12 {. 
36f0: 20 73 65 74 20 3a 3a 6b 65 79 70 72 65 66 69 78   set ::keyprefix
3700: 20 22 54 68 69 73 20 69 73 20 61 20 6c 6f 6e 67   "This is a long
3710: 20 70 72 65 66 69 78 20 74 6f 20 61 20 6b 65 79   prefix to a key
3720: 20 22 0a 20 20 77 68 69 6c 65 20 7b 5b 73 74 72   ".  while {[str
3730: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 6b 65  ing length $::ke
3740: 79 70 72 65 66 69 78 5d 3c 32 35 36 7d 20 7b 61  yprefix]<256} {a
3750: 70 70 65 6e 64 20 3a 3a 6b 65 79 70 72 65 66 69  ppend ::keyprefi
3760: 78 20 24 3a 3a 6b 65 79 70 72 65 66 69 78 7d 0a  x $::keyprefix}.
3770: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75    btree_close_cu
3780: 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62 74 72  rsor $::c1.  btr
3790: 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20 24 3a  ee_drop_table $:
37a0: 3a 62 31 20 32 0a 20 20 6c 69 6e 64 65 78 20 5b  :b1 2.  lindex [
37b0: 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24  btree_get_meta $
37c0: 3a 3a 62 31 5d 20 30 0a 7d 20 7b 34 7d 0a 64 6f  ::b1] 0.} {4}.do
37d0: 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31 32  _test btree-8.12
37e0: 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 63 31 20  .1 {.  set ::c1 
37f0: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a  [btree_cursor $:
3800: 3a 62 31 20 32 20 31 5d 0a 20 20 62 74 72 65 65  :b1 2 1].  btree
3810: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 24 7b  _insert $::c1 ${
3820: 3a 3a 6b 65 79 70 72 65 66 69 78 7d 31 20 31 0a  ::keyprefix}1 1.
3830: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
3840: 63 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  c1.} {1}.do_test
3850: 20 62 74 72 65 65 2d 38 2e 31 33 20 7b 0a 20 20   btree-8.13 {.  
3860: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
3870: 7d 20 24 7b 6b 65 79 70 72 65 66 69 78 7d 31 0a  } ${keyprefix}1.
3880: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3890: 31 34 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73  14 {.  btree_ins
38a0: 65 72 74 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65  ert $::c1 ${::ke
38b0: 79 70 72 65 66 69 78 7d 32 20 32 0a 20 20 62 74  yprefix}2 2.  bt
38c0: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
38d0: 20 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d 33   ${::keyprefix}3
38e0: 20 33 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24   3.  btree_key $
38f0: 3a 3a 63 31 0a 7d 20 24 7b 6b 65 79 70 72 65 66  ::c1.} ${keypref
3900: 69 78 7d 33 0a 64 6f 5f 74 65 73 74 20 62 74 72  ix}3.do_test btr
3910: 65 65 2d 38 2e 31 35 20 7b 0a 20 20 62 74 72 65  ee-8.15 {.  btre
3920: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
3930: 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d 32 0a  ${::keyprefix}2.
3940: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
3950: 63 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74  c1.} {2}.do_test
3960: 20 62 74 72 65 65 2d 38 2e 31 36 20 7b 0a 20 20   btree-8.16 {.  
3970: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
3980: 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66 69  :c1 ${::keyprefi
3990: 78 7d 31 0a 20 20 62 74 72 65 65 5f 64 61 74 61  x}1.  btree_data
39a0: 20 24 3a 3a 63 31 0a 7d 20 7b 31 7d 0a 64 6f 5f   $::c1.} {1}.do_
39b0: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31 37 20  test btree-8.17 
39c0: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
39d0: 6f 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70  o $::c1 ${::keyp
39e0: 72 65 66 69 78 7d 33 0a 20 20 62 74 72 65 65 5f  refix}3.  btree_
39f0: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 33 7d  data $::c1.} {3}
3a00: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38  .do_test btree-8
3a10: 2e 31 38 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b  .18 {.  lindex [
3a20: 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24  btree_get_meta $
3a30: 3a 3a 62 31 5d 20 30 0a 7d 20 7b 31 7d 0a 64 6f  ::b1] 0.} {1}.do
3a40: 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31 39  _test btree-8.19
3a50: 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f   {.  btree_move_
3a60: 74 6f 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79  to $::c1 ${::key
3a70: 70 72 65 66 69 78 7d 32 0a 20 20 62 74 72 65 65  prefix}2.  btree
3a80: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 24 7b 3a  _key $::c1.} ${:
3a90: 3a 6b 65 79 70 72 65 66 69 78 7d 32 0a 23 62 74  :keyprefix}2.#bt
3aa0: 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a  ree_page_dump $:
3ab0: 3a 62 31 20 32 0a 64 6f 5f 74 65 73 74 20 62 74  :b1 2.do_test bt
3ac0: 72 65 65 2d 38 2e 32 30 20 7b 0a 20 20 62 74 72  ree-8.20 {.  btr
3ad0: 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a  ee_delete $::c1.
3ae0: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a    btree_next $::
3af0: 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  c1.  btree_key $
3b00: 3a 3a 63 31 0a 7d 20 24 7b 3a 3a 6b 65 79 70 72  ::c1.} ${::keypr
3b10: 65 66 69 78 7d 33 0a 23 62 74 72 65 65 5f 70 61  efix}3.#btree_pa
3b20: 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a  ge_dump $::b1 2.
3b30: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3b40: 32 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  21 {.  lindex [b
3b50: 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a  tree_get_meta $:
3b60: 3a 62 31 5d 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f  :b1] 0.} {2}.do_
3b70: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32 32 20  test btree-8.22 
3b80: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  {.  lindex [btre
3b90: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
3ba0: 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f  :b1] 1.} {2}.do_
3bb0: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32 33 20  test btree-8.23 
3bc0: 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  {.  btree_close_
3bd0: 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62  cursor $::c1.  b
3be0: 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20  tree_drop_table 
3bf0: 24 3a 3a 62 31 20 32 0a 20 20 73 65 74 20 3a 3a  $::b1 2.  set ::
3c00: 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c1 [btree_cursor
3c10: 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69   $::b1 2 1].  li
3c20: 6e 64 65 78 20 5b 62 74 72 65 65 5f 67 65 74 5f  ndex [btree_get_
3c30: 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a 7d 20  meta $::b1] 0.} 
3c40: 7b 34 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  {4}.do_test btre
3c50: 65 2d 38 2e 32 34 20 7b 0a 20 20 6c 69 6e 64 65  e-8.24 {.  linde
3c60: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
3c70: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
3c80: 7b 32 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 72  {2}.#btree_pager
3c90: 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a  _ref_dump $::b1.
3ca0: 0a 23 20 43 68 65 63 6b 20 70 61 67 65 20 73 70  .# Check page sp
3cb0: 6c 69 74 74 69 6e 67 20 6c 6f 67 69 63 0a 23 0a  litting logic.#.
3cc0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e  do_test btree-9.
3cd0: 31 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  1 {.  for {set i
3ce0: 20 31 7d 20 7b 24 69 3c 3d 31 39 7d 20 7b 69 6e   1} {$i<=19} {in
3cf0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
3d00: 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25 30 33 64  key [format %03d
3d10: 20 24 69 5d 0a 20 20 20 20 73 65 74 20 64 61 74   $i].    set dat
3d20: 61 20 22 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20  a "*** $key *** 
3d30: 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a  $key *** $key **
3d40: 2a 20 24 6b 65 79 20 2a 2a 2a 22 0a 20 20 20 20  * $key ***".    
3d50: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
3d60: 63 31 20 24 6b 65 79 20 24 64 61 74 61 0a 20 20  c1 $key $data.  
3d70: 7d 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f 74 72  }.} {}.#btree_tr
3d80: 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a  ee_dump $::b1 2.
3d90: 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66  #btree_pager_ref
3da0: 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 23 73 65 74  _dump $::b1.#set
3db0: 20 70 61 67 65 72 5f 72 65 66 69 6e 66 6f 5f 65   pager_refinfo_e
3dc0: 6e 61 62 6c 65 20 31 0a 64 6f 5f 74 65 73 74 20  nable 1.do_test 
3dd0: 62 74 72 65 65 2d 39 2e 32 20 7b 0a 20 20 62 74  btree-9.2 {.  bt
3de0: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
3df0: 20 30 32 30 20 7b 2a 2a 2a 20 30 32 30 20 2a 2a   020 {*** 020 **
3e00: 2a 20 30 32 30 20 2a 2a 2a 20 30 32 30 20 2a 2a  * 020 *** 020 **
3e10: 2a 20 30 32 30 20 2a 2a 2a 7d 0a 20 20 73 65 6c  * 020 ***}.  sel
3e20: 65 63 74 5f 6b 65 79 73 20 24 3a 3a 63 31 0a 7d  ect_keys $::c1.}
3e30: 20 7b 30 30 31 20 30 30 32 20 30 30 33 20 30 30   {001 002 003 00
3e40: 34 20 30 30 35 20 30 30 36 20 30 30 37 20 30 30  4 005 006 007 00
3e50: 38 20 30 30 39 20 30 31 30 20 30 31 31 20 30 31  8 009 010 011 01
3e60: 32 20 30 31 33 20 30 31 34 20 30 31 35 20 30 31  2 013 014 015 01
3e70: 36 20 30 31 37 20 30 31 38 20 30 31 39 20 30 32  6 017 018 019 02
3e80: 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64  0}.#btree_page_d
3e90: 75 6d 70 20 24 3a 3a 62 31 20 35 0a 23 62 74 72  ump $::b1 5.#btr
3ea0: 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a  ee_page_dump $::
3eb0: 62 31 20 32 0a 23 62 74 72 65 65 5f 70 61 67 65  b1 2.#btree_page
3ec0: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 37 0a 23 62  _dump $::b1 7.#b
3ed0: 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66 5f 64  tree_pager_ref_d
3ee0: 75 6d 70 20 24 3a 3a 62 31 0a 23 73 65 74 20 70  ump $::b1.#set p
3ef0: 61 67 65 72 5f 72 65 66 69 6e 66 6f 5f 65 6e 61  ager_refinfo_ena
3f00: 62 6c 65 20 30 0a 0a 23 20 54 68 65 20 70 72 65  ble 0..# The pre
3f10: 76 69 6f 75 73 20 22 73 65 6c 65 63 74 5f 6b 65  vious "select_ke
3f20: 79 73 22 20 63 6f 6d 6d 61 6e 64 20 6c 65 66 74  ys" command left
3f30: 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
3f40: 74 69 6e 67 20 61 74 20 74 68 65 20 72 6f 6f 74  ting at the root
3f50: 0a 23 20 70 61 67 65 2e 20 20 53 6f 20 74 68 65  .# page.  So the
3f60: 72 65 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  re should only b
3f70: 65 20 74 77 6f 20 70 61 67 65 73 20 63 68 65 63  e two pages chec
3f80: 6b 65 64 20 6f 75 74 2e 20 20 32 20 28 74 68 65  ked out.  2 (the
3f90: 20 72 6f 6f 74 29 20 61 6e 64 0a 23 20 70 61 67   root) and.# pag
3fa0: 65 20 31 2e 0a 64 6f 5f 74 65 73 74 20 62 74 72  e 1..do_test btr
3fb0: 65 65 2d 39 2e 32 2e 31 20 7b 0a 20 20 6c 69 6e  ee-9.2.1 {.  lin
3fc0: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
3fd0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
3fe0: 7d 20 7b 32 7d 0a 66 6f 72 20 7b 73 65 74 20 69  } {2}.for {set i
3ff0: 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e   1} {$i<=20} {in
4000: 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  cr i} {.  do_tes
4010: 74 20 62 74 72 65 65 2d 39 2e 33 2e 24 69 2e 31  t btree-9.3.$i.1
4020: 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 62 74   [subst {.    bt
4030: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
4040: 31 20 5b 66 6f 72 6d 61 74 20 25 30 33 64 20 24  1 [format %03d $
4050: 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 6b 65 79  i].    btree_key
4060: 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b 66 6f 72   $::c1.  }] [for
4070: 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 64  mat %03d $i].  d
4080: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e 33  o_test btree-9.3
4090: 2e 24 69 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20  .$i.2 [subst {. 
40a0: 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f     btree_move_to
40b0: 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61 74 20 25   $::c1 [format %
40c0: 30 33 64 20 24 69 5d 0a 20 20 20 20 73 74 72 69  03d $i].    stri
40d0: 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74 72 65 65  ng range \[btree
40e0: 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d 20 30 20  _data $::c1\] 0 
40f0: 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20 5b 66 6f  10.  }] "*** [fo
4100: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 20 2a 2a  rmat %03d $i] **
4110: 2a 22 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  *".}.do_test btr
4120: 65 65 2d 39 2e 34 2e 31 20 7b 0a 20 20 6c 69 6e  ee-9.4.1 {.  lin
4130: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
4140: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
4150: 7d 20 7b 33 7d 0a 0a 23 20 43 68 65 63 6b 20 74  } {3}..# Check t
4160: 68 65 20 70 61 67 65 20 6a 6f 69 6e 69 6e 67 20  he page joining 
4170: 6c 6f 67 69 63 2e 0a 23 0a 23 62 74 72 65 65 5f  logic..#.#btree_
4180: 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  page_dump $::b1 
4190: 32 0a 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72  2.#btree_pager_r
41a0: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 64 6f  ef_dump $::b1.do
41b0: 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e 34 2e  _test btree-9.4.
41c0: 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  2 {.  btree_move
41d0: 5f 74 6f 20 24 3a 3a 63 31 20 30 30 35 0a 20 20  _to $::c1 005.  
41e0: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a  btree_delete $::
41f0: 63 31 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f 70  c1.} {}.#btree_p
4200: 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32  age_dump $::b1 2
4210: 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b  .for {set i 1} {
4220: 24 69 3c 3d 31 39 7d 20 7b 69 6e 63 72 20 69 7d  $i<=19} {incr i}
4230: 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 35 7d 20   {.  if {$i==5} 
4240: 63 6f 6e 74 69 6e 75 65 0a 20 20 64 6f 5f 74 65  continue.  do_te
4250: 73 74 20 62 74 72 65 65 2d 39 2e 35 2e 24 69 2e  st btree-9.5.$i.
4260: 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 62  1 [subst {.    b
4270: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
4280: 63 31 20 5b 66 6f 72 6d 61 74 20 25 30 33 64 20  c1 [format %03d 
4290: 24 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 6b 65  $i].    btree_ke
42a0: 79 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b 66 6f  y $::c1.  }] [fo
42b0: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20  rmat %03d $i].  
42c0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e  do_test btree-9.
42d0: 35 2e 24 69 2e 32 20 5b 73 75 62 73 74 20 7b 0a  5.$i.2 [subst {.
42e0: 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74      btree_move_t
42f0: 6f 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61 74 20  o $::c1 [format 
4300: 25 30 33 64 20 24 69 5d 0a 20 20 20 20 73 74 72  %03d $i].    str
4310: 69 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74 72 65  ing range \[btre
4320: 65 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d 20 30  e_data $::c1\] 0
4330: 20 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20 5b 66   10.  }] "*** [f
4340: 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 20 2a  ormat %03d $i] *
4350: 2a 2a 22 0a 7d 0a 23 62 74 72 65 65 5f 70 61 67  **".}.#btree_pag
4360: 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62  er_ref_dump $::b
4370: 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  1.do_test btree-
4380: 39 2e 36 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c  9.6 {.  btree_cl
4390: 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31  ose_cursor $::c1
43a0: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
43b0: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
43c0: 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  b1] 1.} {1}.do_t
43d0: 65 73 74 20 62 74 72 65 65 2d 39 2e 37 20 7b 0a  est btree-9.7 {.
43e0: 20 20 62 74 72 65 65 5f 72 6f 6c 6c 62 61 63 6b    btree_rollback
43f0: 20 24 3a 3a 62 31 0a 20 20 6c 69 6e 64 65 78 20   $::b1.  lindex 
4400: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
4410: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30  ts $::b1] 1.} {0
4420: 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 20 74 72  }..# Create a tr
4430: 65 65 20 6f 66 20 64 65 70 74 68 20 74 77 6f 2e  ee of depth two.
4440: 20 20 54 68 61 74 20 69 73 2c 20 74 68 65 72 65    That is, there
4450: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 64 69 76   is a single div
4460: 69 64 65 72 20 65 6e 74 72 79 0a 23 20 6f 6e 20  ider entry.# on 
4470: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 61  the root pages a
4480: 6e 64 20 74 77 6f 20 6c 65 61 66 20 70 61 67 65  nd two leaf page
4490: 73 2e 20 20 54 68 65 6e 20 64 65 6c 65 74 65 20  s.  Then delete 
44a0: 74 68 65 20 64 69 76 69 64 65 72 20 65 6e 74 72  the divider entr
44b0: 79 0a 23 20 73 65 65 20 77 68 61 74 20 68 61 70  y.# see what hap
44c0: 70 65 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  pens..#.do_test 
44d0: 62 74 72 65 65 2d 31 30 2e 31 20 7b 0a 20 20 62  btree-10.1 {.  b
44e0: 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73  tree_begin_trans
44f0: 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 62  action $::b1.  b
4500: 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20  tree_drop_table 
4510: 24 3a 3a 62 31 20 32 0a 20 20 6c 69 6e 64 65 78  $::b1 2.  lindex
4520: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
4530: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
4540: 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  1}.do_test btree
4550: 2d 31 30 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a  -10.2 {.  set ::
4560: 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c1 [btree_cursor
4570: 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69   $::b1 2 1].  li
4580: 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65  ndex [btree_page
4590: 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31  r_stats $::b1] 1
45a0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {2}.do_test b
45b0: 74 72 65 65 2d 31 30 2e 33 20 7b 0a 20 20 66 6f  tree-10.3 {.  fo
45c0: 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c  r {set i 1} {$i<
45d0: 3d 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  =20} {incr i} {.
45e0: 20 20 20 20 73 65 74 20 6b 65 79 20 5b 66 6f 72      set key [for
45f0: 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 20  mat %03d $i].   
4600: 20 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20 24   set data "*** $
4610: 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a  key *** $key ***
4620: 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a   $key *** $key *
4630: 2a 2a 22 0a 20 20 20 20 62 74 72 65 65 5f 69 6e  **".    btree_in
4640: 73 65 72 74 20 24 3a 3a 63 31 20 24 6b 65 79 20  sert $::c1 $key 
4650: 24 64 61 74 61 0a 20 20 7d 0a 20 20 73 65 6c 65  $data.  }.  sele
4660: 63 74 5f 6b 65 79 73 20 24 3a 3a 63 31 0a 7d 20  ct_keys $::c1.} 
4670: 7b 30 30 31 20 30 30 32 20 30 30 33 20 30 30 34  {001 002 003 004
4680: 20 30 30 35 20 30 30 36 20 30 30 37 20 30 30 38   005 006 007 008
4690: 20 30 30 39 20 30 31 30 20 30 31 31 20 30 31 32   009 010 011 012
46a0: 20 30 31 33 20 30 31 34 20 30 31 35 20 30 31 36   013 014 015 016
46b0: 20 30 31 37 20 30 31 38 20 30 31 39 20 30 32 30   017 018 019 020
46c0: 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75  }.#btree_page_du
46d0: 6d 70 20 24 3a 3a 62 31 20 37 0a 23 62 74 72 65  mp $::b1 7.#btre
46e0: 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62  e_page_dump $::b
46f0: 31 20 32 0a 23 62 74 72 65 65 5f 70 61 67 65 5f  1 2.#btree_page_
4700: 64 75 6d 70 20 24 3a 3a 62 31 20 36 0a 64 6f 5f  dump $::b1 6.do_
4710: 74 65 73 74 20 62 74 72 65 65 2d 31 30 2e 34 20  test btree-10.4 
4720: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
4730: 6f 20 24 3a 3a 63 31 20 30 31 31 0a 20 20 62 74  o $::c1 011.  bt
4740: 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31  ree_delete $::c1
4750: 0a 20 20 73 65 6c 65 63 74 5f 6b 65 79 73 20 24  .  select_keys $
4760: 3a 3a 63 31 0a 7d 20 7b 30 30 31 20 30 30 32 20  ::c1.} {001 002 
4770: 30 30 33 20 30 30 34 20 30 30 35 20 30 30 36 20  003 004 005 006 
4780: 30 30 37 20 30 30 38 20 30 30 39 20 30 31 30 20  007 008 009 010 
4790: 30 31 32 20 30 31 33 20 30 31 34 20 30 31 35 20  012 013 014 015 
47a0: 30 31 36 20 30 31 37 20 30 31 38 20 30 31 39 20  016 017 018 019 
47b0: 30 32 30 7d 0a 23 62 74 72 65 65 5f 74 72 65 65  020}.#btree_tree
47c0: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 23 62  _dump $::b1 2.#b
47d0: 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66 5f 64  tree_pager_ref_d
47e0: 75 6d 70 20 24 3a 3a 62 31 0a 66 6f 72 20 7b 73  ump $::b1.for {s
47f0: 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 32 30 7d  et i 1} {$i<=20}
4800: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f   {incr i} {.  do
4810: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 30 2e 35  _test btree-10.5
4820: 2e 24 69 20 7b 0a 20 20 20 20 62 74 72 65 65 5f  .$i {.    btree_
4830: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 5b 66  move_to $::c1 [f
4840: 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20  ormat %03d $i]. 
4850: 20 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65     lindex [btree
4860: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
4870: 62 31 5d 20 31 0a 20 20 7d 20 7b 32 7d 0a 20 20  b1] 1.  } {2}.  
4880: 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66  #btree_pager_ref
4890: 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 20 20 23 62  _dump $::b1.  #b
48a0: 74 72 65 65 5f 74 72 65 65 5f 64 75 6d 70 20 24  tree_tree_dump $
48b0: 3a 3a 62 31 20 32 0a 7d 0a 0a 23 20 43 72 65 61  ::b1 2.}..# Crea
48c0: 74 65 20 61 20 74 72 65 65 20 77 69 74 68 20 6c  te a tree with l
48d0: 6f 74 73 20 6d 6f 72 65 20 70 61 67 65 73 0a 23  ots more pages.#
48e0: 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a  .catch {unset ::
48f0: 64 61 74 61 7d 0a 63 61 74 63 68 20 7b 75 6e 73  data}.catch {uns
4900: 65 74 20 3a 3a 6b 65 79 7d 0a 66 6f 72 20 7b 73  et ::key}.for {s
4910: 65 74 20 69 20 32 31 7d 20 7b 24 69 3c 3d 31 30  et i 21} {$i<=10
4920: 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  00} {incr i} {. 
4930: 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31   do_test btree-1
4940: 31 2e 31 2e 24 69 2e 31 20 7b 0a 20 20 20 20 73  1.1.$i.1 {.    s
4950: 65 74 20 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25  et key [format %
4960: 30 33 64 20 24 69 5d 0a 20 20 20 20 73 65 74 20  03d $i].    set 
4970: 3a 3a 64 61 74 61 20 22 2a 2a 2a 20 24 6b 65 79  ::data "*** $key
4980: 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20 24 6b   *** $key *** $k
4990: 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 22  ey *** $key ***"
49a0: 0a 20 20 20 20 62 74 72 65 65 5f 69 6e 73 65 72  .    btree_inser
49b0: 74 20 24 3a 3a 63 31 20 24 6b 65 79 20 24 64 61  t $::c1 $key $da
49c0: 74 61 0a 20 20 20 20 62 74 72 65 65 5f 6b 65 79  ta.    btree_key
49d0: 20 24 3a 3a 63 31 0a 20 20 7d 20 5b 66 6f 72 6d   $::c1.  } [form
49e0: 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 64 6f  at %03d $i].  do
49f0: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 31  _test btree-11.1
4a00: 2e 24 69 2e 32 20 7b 0a 20 20 20 20 62 74 72 65  .$i.2 {.    btre
4a10: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 20 20 7d  e_data $::c1.  }
4a20: 20 24 3a 3a 64 61 74 61 0a 20 20 73 65 74 20 3a   $::data.  set :
4a30: 3a 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25 30 33  :key [format %03
4a40: 64 20 5b 65 78 70 72 20 7b 24 69 2f 32 7d 5d 5d  d [expr {$i/2}]]
4a50: 0a 20 20 69 66 20 7b 24 3a 3a 6b 65 79 3d 3d 22  .  if {$::key=="
4a60: 30 31 31 22 7d 20 7b 73 65 74 20 3a 3a 6b 65 79  011"} {set ::key
4a70: 20 30 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20   010}.  do_test 
4a80: 62 74 72 65 65 2d 31 31 2e 31 2e 24 69 2e 33 20  btree-11.1.$i.3 
4a90: 7b 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65  {.    btree_move
4aa0: 5f 74 6f 20 24 3a 3a 63 31 20 24 3a 3a 6b 65 79  _to $::c1 $::key
4ab0: 0a 20 20 20 20 62 74 72 65 65 5f 6b 65 79 20 24  .    btree_key $
4ac0: 3a 3a 63 31 0a 20 20 7d 20 24 3a 3a 6b 65 79 0a  ::c1.  } $::key.
4ad0: 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a  }.catch {unset :
4ae0: 3a 64 61 74 61 7d 0a 63 61 74 63 68 20 7b 75 6e  :data}.catch {un
4af0: 73 65 74 20 3a 3a 6b 65 79 7d 0a 0a 23 20 4d 61  set ::key}..# Ma
4b00: 6b 65 20 73 75 72 65 20 6f 75 72 20 72 65 66 65  ke sure our refe
4b10: 72 65 6e 63 65 20 63 6f 75 6e 74 20 69 73 20 73  rence count is s
4b20: 74 69 6c 6c 20 63 6f 72 72 65 63 74 2e 0a 23 0a  till correct..#.
4b30: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31  do_test btree-11
4b40: 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f  .2 {.  btree_clo
4b50: 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a  se_cursor $::c1.
4b60: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
4b70: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
4b80: 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  1] 1.} {1}.do_te
4b90: 73 74 20 62 74 72 65 65 2d 31 31 2e 33 20 7b 0a  st btree-11.3 {.
4ba0: 20 20 73 65 74 20 3a 3a 63 31 20 5b 62 74 72 65    set ::c1 [btre
4bb0: 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 32  e_cursor $::b1 2
4bc0: 20 31 5d 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74   1].  lindex [bt
4bd0: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
4be0: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 32 7d 0a 23  $::b1] 1.} {2}.#
4bf0: 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20  btree_page_dump 
4c00: 24 3a 3a 62 31 20 32 0a 0a 23 20 44 65 6c 65 74  $::b1 2..# Delet
4c10: 65 20 74 68 65 20 64 69 76 69 64 65 72 73 20 6f  e the dividers o
4c20: 6e 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 0a  n the root page.
4c30: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
4c40: 31 31 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 6d  11.4 {.  btree_m
4c50: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 32 35 37  ove_to $::c1 257
4c60: 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65 20  .  btree_delete 
4c70: 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6e 65  $::c1.  btree_ne
4c80: 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65  xt $::c1.  btree
4c90: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 32 35  _key $::c1.} {25
4ca0: 38 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  8}.do_test btree
4cb0: 2d 31 31 2e 34 2e 31 20 7b 0a 20 20 62 74 72 65  -11.4.1 {.  btre
4cc0: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
4cd0: 32 35 36 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  256.  btree_key 
4ce0: 24 3a 3a 63 31 0a 7d 20 7b 32 35 36 7d 0a 64 6f  $::c1.} {256}.do
4cf0: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 34  _test btree-11.4
4d00: 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76  .2 {.  btree_mov
4d10: 65 5f 74 6f 20 24 3a 3a 63 31 20 32 35 38 0a 20  e_to $::c1 258. 
4d20: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
4d30: 0a 7d 20 7b 32 35 38 7d 0a 64 6f 5f 74 65 73 74  .} {258}.do_test
4d40: 20 62 74 72 65 65 2d 31 31 2e 34 2e 33 20 7b 0a   btree-11.4.3 {.
4d50: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
4d60: 24 3a 3a 63 31 20 32 35 39 0a 20 20 62 74 72 65  $::c1 259.  btre
4d70: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 32  e_key $::c1.} {2
4d80: 35 39 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  59}.do_test btre
4d90: 65 2d 31 31 2e 34 2e 34 20 7b 0a 20 20 62 74 72  e-11.4.4 {.  btr
4da0: 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31  ee_move_to $::c1
4db0: 20 32 35 37 0a 20 20 73 65 74 20 6e 20 5b 62 74   257.  set n [bt
4dc0: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20  ree_key $::c1]. 
4dd0: 20 65 78 70 72 20 7b 24 6e 3d 3d 32 35 36 7c 7c   expr {$n==256||
4de0: 24 6e 3d 3d 32 35 38 7d 0a 7d 20 7b 31 7d 0a 64  $n==258}.} {1}.d
4df0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e  o_test btree-11.
4e00: 35 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  5 {.  btree_move
4e10: 5f 74 6f 20 24 3a 3a 63 31 20 35 31 33 0a 20 20  _to $::c1 513.  
4e20: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a  btree_delete $::
4e30: 63 31 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20  c1.  btree_next 
4e40: 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65  $::c1.  btree_ke
4e50: 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 31 34 7d 0a  y $::c1.} {514}.
4e60: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31  do_test btree-11
4e70: 2e 35 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 6d  .5.1 {.  btree_m
4e80: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 35 31 32  ove_to $::c1 512
4e90: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
4ea0: 63 31 0a 7d 20 7b 35 31 32 7d 0a 64 6f 5f 74 65  c1.} {512}.do_te
4eb0: 73 74 20 62 74 72 65 65 2d 31 31 2e 35 2e 32 20  st btree-11.5.2 
4ec0: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
4ed0: 6f 20 24 3a 3a 63 31 20 35 31 34 0a 20 20 62 74  o $::c1 514.  bt
4ee0: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
4ef0: 7b 35 31 34 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {514}.do_test bt
4f00: 72 65 65 2d 31 31 2e 35 2e 33 20 7b 0a 20 20 62  ree-11.5.3 {.  b
4f10: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
4f20: 63 31 20 35 31 35 0a 20 20 62 74 72 65 65 5f 6b  c1 515.  btree_k
4f30: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 31 35 7d  ey $::c1.} {515}
4f40: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
4f50: 31 2e 35 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f  1.5.4 {.  btree_
4f60: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 35 31  move_to $::c1 51
4f70: 33 0a 20 20 73 65 74 20 6e 20 5b 62 74 72 65 65  3.  set n [btree
4f80: 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20 65 78  _key $::c1].  ex
4f90: 70 72 20 7b 24 6e 3d 3d 35 31 32 7c 7c 24 6e 3d  pr {$n==512||$n=
4fa0: 3d 35 31 34 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  =514}.} {1}.do_t
4fb0: 65 73 74 20 62 74 72 65 65 2d 31 31 2e 36 20 7b  est btree-11.6 {
4fc0: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
4fd0: 20 24 3a 3a 63 31 20 37 36 39 0a 20 20 62 74 72   $::c1 769.  btr
4fe0: 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a  ee_delete $::c1.
4ff0: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a    btree_next $::
5000: 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  c1.  btree_key $
5010: 3a 3a 63 31 0a 7d 20 7b 37 37 30 7d 0a 64 6f 5f  ::c1.} {770}.do_
5020: 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 36 2e  test btree-11.6.
5030: 31 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  1 {.  btree_move
5040: 5f 74 6f 20 24 3a 3a 63 31 20 37 36 38 0a 20 20  _to $::c1 768.  
5050: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
5060: 7d 20 7b 37 36 38 7d 0a 64 6f 5f 74 65 73 74 20  } {768}.do_test 
5070: 62 74 72 65 65 2d 31 31 2e 36 2e 32 20 7b 0a 20  btree-11.6.2 {. 
5080: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
5090: 3a 3a 63 31 20 37 37 31 0a 20 20 62 74 72 65 65  ::c1 771.  btree
50a0: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 37 37  _key $::c1.} {77
50b0: 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  1}.do_test btree
50c0: 2d 31 31 2e 36 2e 33 20 7b 0a 20 20 62 74 72 65  -11.6.3 {.  btre
50d0: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
50e0: 37 37 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  770.  btree_key 
50f0: 24 3a 3a 63 31 0a 7d 20 7b 37 37 30 7d 0a 64 6f  $::c1.} {770}.do
5100: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 36  _test btree-11.6
5110: 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76  .4 {.  btree_mov
5120: 65 5f 74 6f 20 24 3a 3a 63 31 20 37 36 39 0a 20  e_to $::c1 769. 
5130: 20 73 65 74 20 6e 20 5b 62 74 72 65 65 5f 6b 65   set n [btree_ke
5140: 79 20 24 3a 3a 63 31 5d 0a 20 20 65 78 70 72 20  y $::c1].  expr 
5150: 7b 24 6e 3d 3d 37 36 38 7c 7c 24 6e 3d 3d 37 37  {$n==768||$n==77
5160: 30 7d 0a 7d 20 7b 31 7d 0a 23 62 74 72 65 65 5f  0}.} {1}.#btree_
5170: 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  page_dump $::b1 
5180: 32 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64 75  2.#btree_page_du
5190: 6d 70 20 24 3a 3a 62 31 20 32 35 0a 0a 23 20 43  mp $::b1 25..# C
51a0: 68 61 6e 67 65 20 74 68 65 20 64 61 74 61 20 6f  hange the data o
51b0: 6e 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  n an intermediat
51c0: 65 20 6e 6f 64 65 20 73 75 63 68 20 74 68 61 74  e node such that
51d0: 20 74 68 65 20 6e 6f 64 65 20 62 65 63 6f 6d 65   the node become
51e0: 73 20 6f 76 65 72 66 75 6c 6c 0a 23 20 61 6e 64  s overfull.# and
51f0: 20 68 61 73 20 74 6f 20 73 70 6c 69 74 2e 20 20   has to split.  
5200: 57 65 20 68 61 70 70 65 6e 20 74 6f 20 6b 6e 6f  We happen to kno
5210: 77 20 74 68 61 74 20 69 6e 74 65 72 6d 65 64 69  w that intermedi
5220: 61 74 65 20 6e 6f 64 65 73 20 65 78 69 73 74 20  ate nodes exist 
5230: 6f 6e 0a 23 20 33 33 37 2c 20 34 30 31 20 61 6e  on.# 337, 401 an
5240: 64 20 34 36 35 20 62 79 20 74 68 65 20 62 74 72  d 465 by the btr
5250: 65 65 5f 70 61 67 65 5f 64 75 6d 70 73 20 61 62  ee_page_dumps ab
5260: 6f 76 65 0a 23 0a 63 61 74 63 68 20 7b 75 6e 73  ove.#.catch {uns
5270: 65 74 20 3a 3a 64 61 74 61 7d 0a 73 65 74 20 3a  et ::data}.set :
5280: 3a 64 61 74 61 20 7b 54 68 69 73 20 69 73 20 67  :data {This is g
5290: 6f 69 6e 67 20 74 6f 20 62 65 20 61 20 76 65 72  oing to be a ver
52a0: 79 20 6c 6f 6e 67 20 64 61 74 61 20 73 65 67 6d  y long data segm
52b0: 65 6e 74 7d 0a 61 70 70 65 6e 64 20 3a 3a 64 61  ent}.append ::da
52c0: 74 61 20 24 3a 3a 64 61 74 61 0a 61 70 70 65 6e  ta $::data.appen
52d0: 64 20 3a 3a 64 61 74 61 20 24 3a 3a 64 61 74 61  d ::data $::data
52e0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
52f0: 32 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e  2.1 {.  btree_in
5300: 73 65 72 74 20 24 3a 3a 63 31 20 33 33 37 20 24  sert $::c1 337 $
5310: 3a 3a 64 61 74 61 0a 20 20 62 74 72 65 65 5f 64  ::data.  btree_d
5320: 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64  ata $::c1.} $::d
5330: 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  ata.do_test btre
5340: 65 2d 31 32 2e 32 20 7b 0a 20 20 62 74 72 65 65  e-12.2 {.  btree
5350: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 34 30  _insert $::c1 40
5360: 31 20 24 3a 3a 64 61 74 61 0a 20 20 62 74 72 65  1 $::data.  btre
5370: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24  e_data $::c1.} $
5380: 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62  ::data.do_test b
5390: 74 72 65 65 2d 31 32 2e 33 20 7b 0a 20 20 62 74  tree-12.3 {.  bt
53a0: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
53b0: 20 34 36 35 20 24 3a 3a 64 61 74 61 0a 20 20 62   465 $::data.  b
53c0: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a  tree_data $::c1.
53d0: 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73  } $::data.do_tes
53e0: 74 20 62 74 72 65 65 2d 31 32 2e 34 20 7b 0a 20  t btree-12.4 {. 
53f0: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
5400: 3a 3a 63 31 20 33 33 37 0a 20 20 62 74 72 65 65  ::c1 337.  btree
5410: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 33 33  _key $::c1.} {33
5420: 37 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  7}.do_test btree
5430: 2d 31 32 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f  -12.5 {.  btree_
5440: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a  data $::c1.} $::
5450: 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72  data.do_test btr
5460: 65 65 2d 31 32 2e 36 20 7b 0a 20 20 62 74 72 65  ee-12.6 {.  btre
5470: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
5480: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
5490: 20 7b 33 33 38 7d 0a 64 6f 5f 74 65 73 74 20 62   {338}.do_test b
54a0: 74 72 65 65 2d 31 32 2e 37 20 7b 0a 20 20 62 74  tree-12.7 {.  bt
54b0: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
54c0: 31 20 34 36 34 0a 20 20 62 74 72 65 65 5f 6b 65  1 464.  btree_ke
54d0: 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 36 34 7d 0a  y $::c1.} {464}.
54e0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 32  do_test btree-12
54f0: 2e 38 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78  .8 {.  btree_nex
5500: 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  t $::c1.  btree_
5510: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a  data $::c1.} $::
5520: 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72  data.do_test btr
5530: 65 65 2d 31 32 2e 39 20 7b 0a 20 20 62 74 72 65  ee-12.9 {.  btre
5540: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
5550: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
5560: 20 7b 34 36 36 7d 0a 64 6f 5f 74 65 73 74 20 62   {466}.do_test b
5570: 74 72 65 65 2d 31 32 2e 31 30 20 7b 0a 20 20 62  tree-12.10 {.  b
5580: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
5590: 63 31 20 34 30 30 0a 20 20 62 74 72 65 65 5f 6b  c1 400.  btree_k
55a0: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 30 30 7d  ey $::c1.} {400}
55b0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
55c0: 32 2e 31 31 20 7b 0a 20 20 62 74 72 65 65 5f 6e  2.11 {.  btree_n
55d0: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
55e0: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24  e_data $::c1.} $
55f0: 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62  ::data.do_test b
5600: 74 72 65 65 2d 31 32 2e 31 32 20 7b 0a 20 20 62  tree-12.12 {.  b
5610: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
5620: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
5630: 31 0a 7d 20 7b 34 30 32 7d 0a 64 6f 5f 74 65 73  1.} {402}.do_tes
5640: 74 20 62 74 72 65 65 2d 31 33 2e 31 20 7b 0a 20  t btree-13.1 {. 
5650: 20 62 74 72 65 65 5f 69 6e 74 65 67 72 69 74 79   btree_integrity
5660: 5f 63 68 65 63 6b 20 24 3a 3a 62 31 20 32 20 33  _check $::b1 2 3
5670: 0a 7d 20 7b 7d 0a 0a 23 20 54 6f 20 44 6f 3a 0a  .} {}..# To Do:.
5680: 23 0a 23 20 20 20 31 2e 20 20 44 6f 20 73 6f 6d  #.#   1.  Do som
5690: 65 20 64 65 6c 65 74 65 73 20 66 72 6f 6d 20 74  e deletes from t
56a0: 68 65 20 33 2d 6c 61 79 65 72 20 74 72 65 65 0a  he 3-layer tree.
56b0: 23 20 20 20 32 2e 20 20 43 6f 6d 6d 69 74 20 61  #   2.  Commit a
56c0: 6e 64 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61  nd reopen the da
56d0: 74 61 62 61 73 65 0a 23 20 20 20 33 2e 20 20 52  tabase.#   3.  R
56e0: 65 61 64 20 65 76 65 72 79 20 31 35 74 68 20 65  ead every 15th e
56f0: 6e 74 72 79 20 61 6e 64 20 6d 61 6b 65 20 73 75  ntry and make su
5700: 72 65 20 69 74 20 77 6f 72 6b 73 0a 23 20 20 20  re it works.#   
5710: 34 2e 20 20 49 6d 70 6c 65 6d 65 6e 74 20 62 74  4.  Implement bt
5720: 72 65 65 5f 73 61 6e 69 74 79 20 61 6e 64 20 70  ree_sanity and p
5730: 75 74 20 69 74 20 74 68 72 6f 75 67 68 6f 75 74  ut it throughout
5740: 20 74 68 69 73 20 73 63 72 69 70 74 0a 23 0a 0a   this script.#..
5750: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 35  do_test btree-15
5760: 2e 39 38 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c  .98 {.  btree_cl
5770: 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31  ose_cursor $::c1
5780: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
5790: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
57a0: 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  b1] 1.} {1}.do_t
57b0: 65 73 74 20 62 74 72 65 65 2d 31 35 2e 39 39 20  est btree-15.99 
57c0: 7b 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c 62 61  {.  btree_rollba
57d0: 63 6b 20 24 3a 3a 62 31 0a 20 20 6c 69 6e 64 65  ck $::b1.  linde
57e0: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
57f0: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
5800: 7b 30 7d 0a 62 74 72 65 65 5f 70 61 67 65 72 5f  {0}.btree_pager_
5810: 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 0a  ref_dump $::b1..
5820: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 39  do_test btree-99
5830: 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f  .1 {.  btree_clo
5840: 73 65 20 24 3a 3a 62 31 0a 7d 20 7b 7d 0a 63 61  se $::b1.} {}.ca
5850: 74 63 68 20 7b 75 6e 73 65 74 20 64 61 74 61 7d  tch {unset data}
5860: 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20 6b 65  .catch {unset ke
5870: 79 7d 0a 0a 7d 20 3b 23 20 65 6e 64 20 69 66 28  y}..} ;# end if(
5880: 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64 20 68 61   not mem: and ha
5890: 73 20 70 61 67 65 72 5f 6f 70 65 6e 20 63 6f 6d  s pager_open com
58a0: 6d 61 6e 64 20 29 3b 0a 0a 66 69 6e 69 73 68 5f  mand );..finish_
58b0: 74 65 73 74 0a                                   test.