/ Hex Artifact Content
Login

Artifact 8aa7424aeec844df990273fe36447e5d7e407261:


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 33 35 20 32 30 30 35 2f 30 31 2f 31  v 1.35 2005/01/1
0200: 31 20 31 30 3a 32 35 3a 30 37 20 64 61 6e 69 65  1 10:25:07 danie
0210: 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 0a 0a 73  lk1977 Exp $...s
0220: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0230: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0240: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0250: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63  /tester.tcl..ifc
0260: 61 70 61 62 6c 65 20 64 65 66 61 75 6c 74 5f 61  apable default_a
0270: 75 74 6f 76 61 63 75 75 6d 20 7b 0a 20 20 66 69  utovacuum {.  fi
0280: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
0290: 72 6e 0a 7d 0a 0a 23 20 42 61 73 69 63 20 66 75  rn.}..# Basic fu
02a0: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 4f 70  nctionality.  Op
02b0: 65 6e 20 61 6e 64 20 63 6c 6f 73 65 20 61 20 64  en and close a d
02c0: 61 74 61 62 61 73 65 2e 0a 23 0a 64 6f 5f 74 65  atabase..#.do_te
02d0: 73 74 20 62 74 72 65 65 2d 31 2e 31 20 7b 0a 20  st btree-1.1 {. 
02e0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
02f0: 72 63 65 20 74 65 73 74 31 2e 62 74 0a 20 20 66  rce test1.bt.  f
0300: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
0310: 65 20 74 65 73 74 31 2e 62 74 2d 6a 6f 75 72 6e  e test1.bt-journ
0320: 61 6c 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74  al.  set rc [cat
0330: 63 68 20 7b 62 74 72 65 65 5f 6f 70 65 6e 20 74  ch {btree_open t
0340: 65 73 74 31 2e 62 74 20 32 30 30 30 20 30 7d 20  est1.bt 2000 0} 
0350: 3a 3a 62 31 5d 0a 7d 20 7b 30 7d 0a 0a 23 20 54  ::b1].} {0}..# T
0360: 68 65 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e  he second elemen
0370: 74 20 6f 66 20 74 68 65 20 6c 69 73 74 20 72 65  t of the list re
0380: 74 75 72 6e 65 64 20 62 79 20 62 74 72 65 65 5f  turned by btree_
0390: 70 61 67 65 72 5f 73 74 61 74 73 20 69 73 20 74  pager_stats is t
03a0: 68 65 0a 23 20 6e 75 6d 62 65 72 20 6f 66 20 70  he.# number of p
03b0: 61 67 65 73 20 63 75 72 72 65 6e 74 6c 79 20 63  ages currently c
03c0: 68 65 63 6b 65 64 20 6f 75 74 2e 20 20 57 65 27  hecked out.  We'
03d0: 6c 6c 20 62 65 20 63 68 65 63 6b 69 6e 67 20 74  ll be checking t
03e0: 68 69 73 20 76 61 6c 75 65 0a 23 20 66 72 65 71  his value.# freq
03f0: 75 65 6e 74 6c 79 20 64 75 72 69 6e 67 20 74 68  uently during th
0400: 69 73 20 74 65 73 74 20 73 63 72 69 70 74 2c 20  is test script, 
0410: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
0420: 20 62 74 72 65 65 20 6c 69 62 72 61 72 79 0a 23   btree library.#
0430: 20 69 73 20 70 72 6f 70 65 72 6c 79 20 72 65 6c   is properly rel
0440: 65 61 73 69 6e 67 20 74 68 65 20 70 61 67 65 73  easing the pages
0450: 20 69 74 20 63 68 65 63 6b 73 20 6f 75 74 2c 20   it checks out, 
0460: 61 6e 64 20 74 68 75 73 20 61 76 6f 69 64 69 6e  and thus avoidin
0470: 67 0a 23 20 70 61 67 65 20 6c 65 61 6b 73 2e 0a  g.# page leaks..
0480: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
0490: 31 2e 31 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78  1.1.1 {.  lindex
04a0: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
04b0: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
04c0: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
04d0: 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20 72 63 20  -1.2 {.  set rc 
04e0: 5b 63 61 74 63 68 20 7b 62 74 72 65 65 5f 6f 70  [catch {btree_op
04f0: 65 6e 20 74 65 73 74 31 2e 62 74 20 32 30 30 30  en test1.bt 2000
0500: 20 30 7d 20 3a 3a 62 32 5d 0a 7d 20 7b 30 7d 0a   0} ::b2].} {0}.
0510: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e  do_test btree-1.
0520: 33 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  3 {.  set rc [ca
0530: 74 63 68 20 7b 62 74 72 65 65 5f 63 6c 6f 73 65  tch {btree_close
0540: 20 24 3a 3a 62 32 7d 20 6d 73 67 5d 0a 20 20 6c   $::b2} msg].  l
0550: 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d  append rc $msg.}
0560: 20 7b 30 20 7b 7d 7d 0a 0a 23 20 44 6f 20 61 6e   {0 {}}..# Do an
0570: 20 69 6e 73 65 72 74 20 61 6e 64 20 76 65 72 69   insert and veri
0580: 66 79 20 74 68 61 74 20 74 68 65 20 64 61 74 61  fy that the data
0590: 62 61 73 65 20 66 69 6c 65 20 67 72 6f 77 73 20  base file grows 
05a0: 69 6e 20 73 69 7a 65 2e 0a 23 0a 64 6f 5f 74 65  in size..#.do_te
05b0: 73 74 20 62 74 72 65 65 2d 31 2e 34 20 7b 0a 20  st btree-1.4 {. 
05c0: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
05d0: 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e  btree_begin_tran
05e0: 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 7d 20 6d  saction $::b1} m
05f0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
0600: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
0610: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e 34  o_test btree-1.4
0620: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
0630: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
0640: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a   $::b1] 1.} {1}.
0650: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e  do_test btree-1.
0660: 35 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  5 {.  set rc [ca
0670: 74 63 68 20 7b 62 74 72 65 65 5f 63 75 72 73 6f  tch {btree_curso
0680: 72 20 24 3a 3a 62 31 20 31 20 31 7d 20 3a 3a 63  r $::b1 1 1} ::c
0690: 31 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 6c  1].  if {$rc} {l
06a0: 61 70 70 65 6e 64 20 72 63 20 24 3a 3a 63 31 7d  append rc $::c1}
06b0: 0a 20 20 73 65 74 20 72 63 0a 7d 20 7b 30 7d 0a  .  set rc.} {0}.
06c0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 2e  do_test btree-1.
06d0: 36 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  6 {.  set rc [ca
06e0: 74 63 68 20 7b 62 74 72 65 65 5f 69 6e 73 65 72  tch {btree_inser
06f0: 74 20 24 3a 3a 63 31 20 31 30 30 20 31 2e 30 30  t $::c1 100 1.00
0700: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0710: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d   rc $msg.} {0 {}
0720: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0730: 31 2e 37 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f  1.7 {.  btree_mo
0740: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 31 30 30 0a  ve_to $::c1 100.
0750: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
0760: 31 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73  1.} {100}.do_tes
0770: 74 20 62 74 72 65 65 2d 31 2e 38 20 7b 0a 20 20  t btree-1.8 {.  
0780: 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31  btree_data $::c1
0790: 0a 7d 20 7b 31 2e 30 30 7d 0a 64 6f 5f 74 65 73  .} {1.00}.do_tes
07a0: 74 20 62 74 72 65 65 2d 31 2e 39 20 7b 0a 20 20  t btree-1.9 {.  
07b0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62  set rc [catch {b
07c0: 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f  tree_close_curso
07d0: 72 20 24 3a 3a 63 31 7d 20 6d 73 67 5d 0a 20 20  r $::c1} msg].  
07e0: 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a  lappend rc $msg.
07f0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0800: 20 62 74 72 65 65 2d 31 2e 31 30 20 7b 0a 20 20   btree-1.10 {.  
0810: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62  set rc [catch {b
0820: 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62  tree_commit $::b
0830: 31 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  1} msg].  lappen
0840: 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  d rc $msg.} {0 {
0850: 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  }}.do_test btree
0860: 2d 31 2e 31 31 20 7b 0a 20 20 66 69 6c 65 20 73  -1.11 {.  file s
0870: 69 7a 65 20 74 65 73 74 31 2e 62 74 0a 7d 20 7b  ize test1.bt.} {
0880: 31 30 32 34 7d 0a 64 6f 5f 74 65 73 74 20 62 74  1024}.do_test bt
0890: 72 65 65 2d 31 2e 31 32 20 7b 0a 20 20 6c 69 6e  ree-1.12 {.  lin
08a0: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
08b0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
08c0: 7d 20 7b 30 7d 0a 0a 23 20 52 65 6f 70 65 6e 20  } {0}..# Reopen 
08d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
08e0: 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64   attempt to read
08f0: 20 74 68 65 20 72 65 63 6f 72 64 20 74 68 61 74   the record that
0900: 20 77 65 20 77 72 6f 74 65 2e 0a 23 0a 64 6f 5f   we wrote..#.do_
0910: 74 65 73 74 20 62 74 72 65 65 2d 32 2e 31 20 7b  test btree-2.1 {
0920: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
0930: 20 7b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   {btree_cursor $
0940: 3a 3a 62 31 20 31 20 31 7d 20 3a 3a 63 31 5d 0a  ::b1 1 1} ::c1].
0950: 20 20 69 66 20 7b 24 72 63 7d 20 7b 6c 61 70 70    if {$rc} {lapp
0960: 65 6e 64 20 72 63 20 24 3a 3a 63 31 7d 0a 20 20  end rc $::c1}.  
0970: 73 65 74 20 72 63 0a 7d 20 7b 30 7d 0a 64 6f 5f  set rc.} {0}.do_
0980: 74 65 73 74 20 62 74 72 65 65 2d 32 2e 32 20 7b  test btree-2.2 {
0990: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
09a0: 20 24 3a 3a 63 31 20 39 39 0a 7d 20 7b 31 7d 0a   $::c1 99.} {1}.
09b0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 32 2e  do_test btree-2.
09c0: 33 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  3 {.  btree_move
09d0: 5f 74 6f 20 24 3a 3a 63 31 20 31 30 31 0a 7d 20  _to $::c1 101.} 
09e0: 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  {-1}.do_test btr
09f0: 65 65 2d 32 2e 34 20 7b 0a 20 20 62 74 72 65 65  ee-2.4 {.  btree
0a00: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 31  _move_to $::c1 1
0a10: 30 30 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  00.} {0}.do_test
0a20: 20 62 74 72 65 65 2d 32 2e 35 20 7b 0a 20 20 62   btree-2.5 {.  b
0a30: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
0a40: 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62   {100}.do_test b
0a50: 74 72 65 65 2d 32 2e 36 20 7b 0a 20 20 62 74 72  tree-2.6 {.  btr
0a60: 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20  ee_data $::c1.} 
0a70: 7b 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62  {1.00}.do_test b
0a80: 74 72 65 65 2d 32 2e 37 20 7b 0a 20 20 6c 69 6e  tree-2.7 {.  lin
0a90: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
0aa0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
0ab0: 7d 20 7b 31 7d 0a 0a 23 20 44 6f 20 73 6f 6d 65  } {1}..# Do some
0ac0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 73 65   additional inse
0ad0: 72 74 73 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  rts.#.do_test bt
0ae0: 72 65 65 2d 33 2e 31 20 7b 0a 20 20 62 74 72 65  ree-3.1 {.  btre
0af0: 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74  e_begin_transact
0b00: 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72 65  ion $::b1.  btre
0b10: 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 32  e_insert $::c1 2
0b20: 30 30 20 32 2e 30 30 0a 20 20 62 74 72 65 65 5f  00 2.00.  btree_
0b30: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 32 30  move_to $::c1 20
0b40: 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a  0.  btree_key $:
0b50: 3a 63 31 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74  :c1.} {200}.do_t
0b60: 65 73 74 20 62 74 72 65 65 2d 33 2e 31 2e 31 20  est btree-3.1.1 
0b70: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  {.  lindex [btre
0b80: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
0b90: 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f  :b1] 1.} {1}.do_
0ba0: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 32 20 7b  test btree-3.2 {
0bb0: 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20  .  btree_insert 
0bc0: 24 3a 3a 63 31 20 33 30 30 20 33 2e 30 30 0a 20  $::c1 300 3.00. 
0bd0: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
0be0: 3a 3a 63 31 20 33 30 30 0a 20 20 62 74 72 65 65  ::c1 300.  btree
0bf0: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 33 30  _key $::c1.} {30
0c00: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
0c10: 2d 33 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 69  -3.4 {.  btree_i
0c20: 6e 73 65 72 74 20 24 3a 3a 63 31 20 34 30 30 20  nsert $::c1 400 
0c30: 34 2e 30 30 0a 20 20 62 74 72 65 65 5f 6d 6f 76  4.00.  btree_mov
0c40: 65 5f 74 6f 20 24 3a 3a 63 31 20 34 30 30 0a 20  e_to $::c1 400. 
0c50: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
0c60: 0a 7d 20 7b 34 30 30 7d 0a 64 6f 5f 74 65 73 74  .} {400}.do_test
0c70: 20 62 74 72 65 65 2d 33 2e 35 20 7b 0a 20 20 62   btree-3.5 {.  b
0c80: 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63  tree_insert $::c
0c90: 31 20 35 30 30 20 35 2e 30 30 0a 20 20 62 74 72  1 500 5.00.  btr
0ca0: 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31  ee_move_to $::c1
0cb0: 20 35 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79   500.  btree_key
0cc0: 20 24 3a 3a 63 31 0a 7d 20 7b 35 30 30 7d 0a 64   $::c1.} {500}.d
0cd0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 36  o_test btree-3.6
0ce0: 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72   {.  btree_inser
0cf0: 74 20 24 3a 3a 63 31 20 36 30 30 20 36 2e 30 30  t $::c1 600 6.00
0d00: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
0d10: 20 24 3a 3a 63 31 20 36 30 30 0a 20 20 62 74 72   $::c1 600.  btr
0d20: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b  ee_key $::c1.} {
0d30: 36 30 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65  600}.#btree_page
0d40: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f  _dump $::b1 2.do
0d50: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 37 20  _test btree-3.7 
0d60: 7b 0a 20 20 73 65 74 20 72 63 20 5b 62 74 72 65  {.  set rc [btre
0d70: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
0d80: 30 5d 0a 20 20 65 78 70 72 20 7b 24 72 63 3e 30  0].  expr {$rc>0
0d90: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
0da0: 62 74 72 65 65 2d 33 2e 38 20 7b 0a 20 20 62 74  btree-3.8 {.  bt
0db0: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
0dc0: 7b 31 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {100}.do_test bt
0dd0: 72 65 65 2d 33 2e 39 20 7b 0a 20 20 62 74 72 65  ree-3.9 {.  btre
0de0: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b  e_data $::c1.} {
0df0: 31 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  1.00}.do_test bt
0e00: 72 65 65 2d 33 2e 31 30 20 7b 0a 20 20 62 74 72  ree-3.10 {.  btr
0e10: 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20  ee_next $::c1.  
0e20: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
0e30: 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20  } {200}.do_test 
0e40: 62 74 72 65 65 2d 33 2e 31 31 20 7b 0a 20 20 62  btree-3.11 {.  b
0e50: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a  tree_data $::c1.
0e60: 7d 20 7b 32 2e 30 30 7d 0a 64 6f 5f 74 65 73 74  } {2.00}.do_test
0e70: 20 62 74 72 65 65 2d 33 2e 31 32 20 7b 0a 20 20   btree-3.12 {.  
0e80: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
0e90: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
0ea0: 63 31 0a 7d 20 7b 33 30 30 7d 0a 64 6f 5f 74 65  c1.} {300}.do_te
0eb0: 73 74 20 62 74 72 65 65 2d 33 2e 31 33 20 7b 0a  st btree-3.13 {.
0ec0: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
0ed0: 63 31 0a 7d 20 7b 33 2e 30 30 7d 0a 64 6f 5f 74  c1.} {3.00}.do_t
0ee0: 65 73 74 20 62 74 72 65 65 2d 33 2e 31 34 20 7b  est btree-3.14 {
0ef0: 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a  .  btree_next $:
0f00: 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20  :c1.  btree_key 
0f10: 24 3a 3a 63 31 0a 7d 20 7b 34 30 30 7d 0a 64 6f  $::c1.} {400}.do
0f20: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31 35  _test btree-3.15
0f30: 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20   {.  btree_data 
0f40: 24 3a 3a 63 31 0a 7d 20 7b 34 2e 30 30 7d 0a 64  $::c1.} {4.00}.d
0f50: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 31  o_test btree-3.1
0f60: 36 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74  6 {.  btree_next
0f70: 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b   $::c1.  btree_k
0f80: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 30 30 7d  ey $::c1.} {500}
0f90: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
0fa0: 2e 31 37 20 7b 0a 20 20 62 74 72 65 65 5f 64 61  .17 {.  btree_da
0fb0: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 35 2e 30 30  ta $::c1.} {5.00
0fc0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
0fd0: 33 2e 31 38 20 7b 0a 20 20 62 74 72 65 65 5f 6e  3.18 {.  btree_n
0fe0: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
0ff0: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 36  e_key $::c1.} {6
1000: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
1010: 65 2d 33 2e 31 39 20 7b 0a 20 20 62 74 72 65 65  e-3.19 {.  btree
1020: 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 36  _data $::c1.} {6
1030: 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  .00}.do_test btr
1040: 65 65 2d 33 2e 32 30 2e 31 20 7b 0a 20 20 62 74  ee-3.20.1 {.  bt
1050: 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20  ree_next $::c1. 
1060: 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31   btree_key $::c1
1070: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {0}.do_test b
1080: 74 72 65 65 2d 33 2e 32 30 2e 32 20 7b 0a 20 20  tree-3.20.2 {.  
1090: 62 74 72 65 65 5f 65 6f 66 20 24 3a 3a 63 31 0a  btree_eof $::c1.
10a0: 7d 20 7b 31 7d 0a 23 20 54 68 69 73 20 74 65 73  } {1}.# This tes
10b0: 74 20 63 61 73 65 20 75 73 65 64 20 74 6f 20 74  t case used to t
10c0: 65 73 74 20 74 68 61 74 20 6f 6e 65 20 63 6f 75  est that one cou
10d0: 6c 64 6e 27 74 20 72 65 71 75 65 73 74 20 64 61  ldn't request da
10e0: 74 61 20 66 72 6f 6d 20 61 6e 20 0a 23 20 69 6e  ta from an .# in
10f0: 76 61 6c 69 64 20 63 75 72 73 6f 72 2e 20 54 68  valid cursor. Th
1100: 61 74 20 69 73 20 6e 6f 77 20 61 6e 20 61 73 73  at is now an ass
1110: 65 72 74 28 29 65 64 20 63 6f 6e 64 69 74 69 6f  ert()ed conditio
1120: 6e 2e 0a 23 0a 23 20 64 6f 5f 74 65 73 74 20 62  n..#.# do_test b
1130: 74 72 65 65 2d 33 2e 32 31 20 7b 0a 23 20 20 20  tree-3.21 {.#   
1140: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62  set rc [catch {b
1150: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 7d  tree_data $::c1}
1160: 20 72 65 73 5d 0a 23 20 20 20 6c 61 70 70 65 6e   res].#   lappen
1170: 64 20 72 63 20 24 72 65 73 0a 23 20 7d 20 7b 31  d rc $res.# } {1
1180: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c   SQLITE_INTERNAL
1190: 7d 0a 0a 23 20 43 6f 6d 6d 69 74 20 74 68 65 20  }..# Commit the 
11a0: 63 68 61 6e 67 65 73 2c 20 72 65 6f 70 65 6e 20  changes, reopen 
11b0: 61 6e 64 20 72 65 72 65 61 64 20 74 68 65 20 64  and reread the d
11c0: 61 74 61 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  ata.#.do_test bt
11d0: 72 65 65 2d 33 2e 32 32 20 7b 0a 20 20 73 65 74  ree-3.22 {.  set
11e0: 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65   rc [catch {btre
11f0: 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24  e_close_cursor $
1200: 3a 3a 63 31 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  ::c1} msg].  lap
1210: 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b  pend rc $msg.} {
1220: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 62 74  0 {}}.do_test bt
1230: 72 65 65 2d 33 2e 32 32 2e 31 20 7b 0a 20 20 6c  ree-3.22.1 {.  l
1240: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
1250: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
1260: 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  1.} {1}.do_test 
1270: 62 74 72 65 65 2d 33 2e 32 33 20 7b 0a 20 20 73  btree-3.23 {.  s
1280: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74  et rc [catch {bt
1290: 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31  ree_commit $::b1
12a0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
12b0: 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d   rc $msg.} {0 {}
12c0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
12d0: 33 2e 32 33 2e 31 20 7b 0a 20 20 6c 69 6e 64 65  3.23.1 {.  linde
12e0: 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  x [btree_pager_s
12f0: 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20  tats $::b1] 1.} 
1300: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  {0}.do_test btre
1310: 65 2d 33 2e 32 34 20 7b 0a 20 20 66 69 6c 65 20  e-3.24 {.  file 
1320: 73 69 7a 65 20 74 65 73 74 31 2e 62 74 0a 7d 20  size test1.bt.} 
1330: 7b 31 30 32 34 7d 0a 64 6f 5f 74 65 73 74 20 62  {1024}.do_test b
1340: 74 72 65 65 2d 33 2e 32 35 20 7b 0a 20 20 73 65  tree-3.25 {.  se
1350: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72  t rc [catch {btr
1360: 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20  ee_cursor $::b1 
1370: 31 20 31 7d 20 3a 3a 63 31 5d 0a 20 20 69 66 20  1 1} ::c1].  if 
1380: 7b 24 72 63 7d 20 7b 6c 61 70 70 65 6e 64 20 72  {$rc} {lappend r
1390: 63 20 24 3a 3a 63 31 7d 0a 20 20 73 65 74 20 72  c $::c1}.  set r
13a0: 63 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  c.} {0}.do_test 
13b0: 62 74 72 65 65 2d 33 2e 32 35 2e 31 20 7b 0a 20  btree-3.25.1 {. 
13c0: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70   lindex [btree_p
13d0: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31  ager_stats $::b1
13e0: 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  ] 1.} {1}.do_tes
13f0: 74 20 62 74 72 65 65 2d 33 2e 32 36 20 7b 0a 20  t btree-3.26 {. 
1400: 20 73 65 74 20 72 63 20 5b 62 74 72 65 65 5f 6d   set rc [btree_m
1410: 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 30 5d 0a  ove_to $::c1 0].
1420: 20 20 65 78 70 72 20 7b 24 72 63 3e 30 7d 0a 7d    expr {$rc>0}.}
1430: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {1}.do_test btr
1440: 65 65 2d 33 2e 32 37 20 7b 0a 20 20 62 74 72 65  ee-3.27 {.  btre
1450: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 31  e_key $::c1.} {1
1460: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
1470: 65 2d 33 2e 32 38 20 7b 0a 20 20 62 74 72 65 65  e-3.28 {.  btree
1480: 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 31  _data $::c1.} {1
1490: 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  .00}.do_test btr
14a0: 65 65 2d 33 2e 32 39 20 7b 0a 20 20 62 74 72 65  ee-3.29 {.  btre
14b0: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
14c0: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
14d0: 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62   {200}.do_test b
14e0: 74 72 65 65 2d 33 2e 33 30 20 7b 0a 20 20 62 74  tree-3.30 {.  bt
14f0: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d  ree_data $::c1.}
1500: 20 7b 32 2e 30 30 7d 0a 64 6f 5f 74 65 73 74 20   {2.00}.do_test 
1510: 62 74 72 65 65 2d 33 2e 33 31 20 7b 0a 20 20 62  btree-3.31 {.  b
1520: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
1530: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
1540: 31 0a 7d 20 7b 33 30 30 7d 0a 64 6f 5f 74 65 73  1.} {300}.do_tes
1550: 74 20 62 74 72 65 65 2d 33 2e 33 32 20 7b 0a 20  t btree-3.32 {. 
1560: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
1570: 31 0a 7d 20 7b 33 2e 30 30 7d 0a 64 6f 5f 74 65  1.} {3.00}.do_te
1580: 73 74 20 62 74 72 65 65 2d 33 2e 33 33 20 7b 0a  st btree-3.33 {.
1590: 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a    btree_next $::
15a0: 63 31 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  c1.  btree_key $
15b0: 3a 3a 63 31 0a 7d 20 7b 34 30 30 7d 0a 64 6f 5f  ::c1.} {400}.do_
15c0: 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33 34 20  test btree-3.34 
15d0: 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24  {.  btree_data $
15e0: 3a 3a 63 31 0a 7d 20 7b 34 2e 30 30 7d 0a 64 6f  ::c1.} {4.00}.do
15f0: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 33 35  _test btree-3.35
1600: 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78 74 20   {.  btree_next 
1610: 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f 6b 65  $::c1.  btree_ke
1620: 79 20 24 3a 3a 63 31 0a 7d 20 7b 35 30 30 7d 0a  y $::c1.} {500}.
1630: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e  do_test btree-3.
1640: 33 36 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74  36 {.  btree_dat
1650: 61 20 24 3a 3a 63 31 0a 7d 20 7b 35 2e 30 30 7d  a $::c1.} {5.00}
1660: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 33  .do_test btree-3
1670: 2e 33 37 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65  .37 {.  btree_ne
1680: 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65  xt $::c1.  btree
1690: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 36 30  _key $::c1.} {60
16a0: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
16b0: 2d 33 2e 33 38 20 7b 0a 20 20 62 74 72 65 65 5f  -3.38 {.  btree_
16c0: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 36 2e  data $::c1.} {6.
16d0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
16e0: 65 2d 33 2e 33 39 20 7b 0a 20 20 62 74 72 65 65  e-3.39 {.  btree
16f0: 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74  _next $::c1.  bt
1700: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
1710: 7b 30 7d 0a 23 20 54 68 69 73 20 74 65 73 74 20  {0}.# This test 
1720: 63 61 73 65 20 75 73 65 64 20 74 6f 20 74 65 73  case used to tes
1730: 74 20 74 68 61 74 20 72 65 71 75 65 73 74 69 6e  t that requestin
1740: 67 20 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 69  g data from an i
1750: 6e 76 61 6c 69 64 20 63 75 72 73 6f 72 0a 23 20  nvalid cursor.# 
1760: 72 65 74 75 72 6e 65 64 20 53 51 4c 49 54 45 5f  returned SQLITE_
1770: 49 4e 54 45 52 4e 41 4c 2e 20 54 68 61 74 20 69  INTERNAL. That i
1780: 73 20 6e 6f 77 20 61 6e 20 61 73 73 65 72 74 28  s now an assert(
1790: 29 65 64 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 23  )ed condition..#
17a0: 0a 23 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .# do_test btree
17b0: 2d 33 2e 34 30 20 7b 0a 23 20 20 20 73 65 74 20  -3.40 {.#   set 
17c0: 72 63 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65  rc [catch {btree
17d0: 5f 64 61 74 61 20 24 3a 3a 63 31 7d 20 72 65 73  _data $::c1} res
17e0: 5d 0a 23 20 20 20 6c 61 70 70 65 6e 64 20 72 63  ].#   lappend rc
17f0: 20 24 72 65 73 0a 23 20 7d 20 7b 31 20 53 51 4c   $res.# } {1 SQL
1800: 49 54 45 5f 49 4e 54 45 52 4e 41 4c 7d 0a 64 6f  ITE_INTERNAL}.do
1810: 5f 74 65 73 74 20 62 74 72 65 65 2d 33 2e 34 31  _test btree-3.41
1820: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
1830: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
1840: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 0a 0a  ::b1] 1.} {1}...
1850: 23 20 4e 6f 77 20 74 72 79 20 61 20 64 65 6c 65  # Now try a dele
1860: 74 65 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72  te.#.do_test btr
1870: 65 65 2d 34 2e 31 20 7b 0a 20 20 62 74 72 65 65  ee-4.1 {.  btree
1880: 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69  _begin_transacti
1890: 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65  on $::b1.  btree
18a0: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 31  _move_to $::c1 1
18b0: 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24  00.  btree_key $
18c0: 3a 3a 63 31 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f  ::c1.} {100}.do_
18d0: 74 65 73 74 20 62 74 72 65 65 2d 34 2e 31 2e 31  test btree-4.1.1
18e0: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
18f0: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
1900: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f  ::b1] 1.} {1}.do
1910: 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 32 20  _test btree-4.2 
1920: 7b 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74 65  {.  btree_delete
1930: 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74   $::c1.} {}.do_t
1940: 65 73 74 20 62 74 72 65 65 2d 34 2e 33 20 7b 0a  est btree-4.3 {.
1950: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
1960: 24 3a 3a 63 31 20 31 30 30 0a 20 20 62 74 72 65  $::c1 100.  btre
1970: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 32  e_key $::c1.} {2
1980: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  00}.do_test btre
1990: 65 2d 34 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f  e-4.4 {.  btree_
19a0: 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72  next $::c1.  btr
19b0: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b  ee_key $::c1.} {
19c0: 33 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  300}.do_test btr
19d0: 65 65 2d 34 2e 35 20 7b 0a 20 20 62 74 72 65 65  ee-4.5 {.  btree
19e0: 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74  _next $::c1.  bt
19f0: 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20  ree_key $::c1.} 
1a00: 7b 34 30 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74  {400}.do_test bt
1a10: 72 65 65 2d 34 2e 34 20 7b 0a 20 20 62 74 72 65  ree-4.4 {.  btre
1a20: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
1a30: 30 0a 20 20 73 65 74 20 72 20 7b 7d 0a 20 20 77  0.  set r {}.  w
1a40: 68 69 6c 65 20 31 20 7b 0a 20 20 20 20 73 65 74  hile 1 {.    set
1a50: 20 6b 65 79 20 5b 62 74 72 65 65 5f 6b 65 79 20   key [btree_key 
1a60: 24 3a 3a 63 31 5d 0a 20 20 20 20 69 66 20 7b 5b  $::c1].    if {[
1a70: 62 74 72 65 65 5f 65 6f 66 20 24 3a 3a 63 31 5d  btree_eof $::c1]
1a80: 7d 20 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70  } break.    lapp
1a90: 65 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c  end r $key.    l
1aa0: 61 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f  append r [btree_
1ab0: 64 61 74 61 20 24 3a 3a 63 31 5d 0a 20 20 20 20  data $::c1].    
1ac0: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
1ad0: 0a 20 20 7d 0a 20 20 73 65 74 20 72 20 20 20 0a  .  }.  set r   .
1ae0: 7d 20 7b 32 30 30 20 32 2e 30 30 20 33 30 30 20  } {200 2.00 300 
1af0: 33 2e 30 30 20 34 30 30 20 34 2e 30 30 20 35 30  3.00 400 4.00 50
1b00: 30 20 35 2e 30 30 20 36 30 30 20 36 2e 30 30 7d  0 5.00 600 6.00}
1b10: 0a 0a 23 20 43 6f 6d 6d 69 74 20 61 6e 64 20 6d  ..# Commit and m
1b20: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 65 6c  ake sure the del
1b30: 65 74 65 20 69 73 20 73 74 69 6c 6c 20 74 68 65  ete is still the
1b40: 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  re..#.do_test bt
1b50: 72 65 65 2d 34 2e 35 20 7b 0a 20 20 62 74 72 65  ree-4.5 {.  btre
1b60: 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31 0a 20  e_commit $::b1. 
1b70: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
1b80: 3a 3a 63 31 20 30 0a 20 20 73 65 74 20 72 20 7b  ::c1 0.  set r {
1b90: 7d 0a 20 20 77 68 69 6c 65 20 31 20 7b 0a 20 20  }.  while 1 {.  
1ba0: 20 20 73 65 74 20 6b 65 79 20 5b 62 74 72 65 65    set key [btree
1bb0: 5f 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20 20 20  _key $::c1].    
1bc0: 69 66 20 7b 5b 62 74 72 65 65 5f 65 6f 66 20 24  if {[btree_eof $
1bd0: 3a 3a 63 31 5d 7d 20 62 72 65 61 6b 0a 20 20 20  ::c1]} break.   
1be0: 20 6c 61 70 70 65 6e 64 20 72 20 24 6b 65 79 0a   lappend r $key.
1bf0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 20 5b 62      lappend r [b
1c00: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d  tree_data $::c1]
1c10: 0a 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74 20  .    btree_next 
1c20: 24 3a 3a 63 31 0a 20 20 7d 0a 20 20 73 65 74 20  $::c1.  }.  set 
1c30: 72 20 20 20 0a 7d 20 7b 32 30 30 20 32 2e 30 30  r   .} {200 2.00
1c40: 20 33 30 30 20 33 2e 30 30 20 34 30 30 20 34 2e   300 3.00 400 4.
1c50: 30 30 20 35 30 30 20 35 2e 30 30 20 36 30 30 20  00 500 5.00 600 
1c60: 36 2e 30 30 7d 0a 0a 23 20 43 6f 6d 70 6c 65 74  6.00}..# Complet
1c70: 65 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  ely close the da
1c80: 74 61 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65  tabase and reope
1c90: 6e 20 69 74 2e 20 20 54 68 65 6e 20 63 68 65 63  n it.  Then chec
1ca0: 6b 0a 23 20 74 68 65 20 64 61 74 61 20 61 67 61  k.# the data aga
1cb0: 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  in..#.do_test bt
1cc0: 72 65 65 2d 34 2e 36 20 7b 0a 20 20 6c 69 6e 64  ree-4.6 {.  lind
1cd0: 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f  ex [btree_pager_
1ce0: 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d  stats $::b1] 1.}
1cf0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72   {1}.do_test btr
1d00: 65 65 2d 34 2e 37 20 7b 0a 20 20 62 74 72 65 65  ee-4.7 {.  btree
1d10: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
1d20: 3a 63 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  :c1.  lindex [bt
1d30: 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20  ree_pager_stats 
1d40: 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64  $::b1] 1.} {0}.d
1d50: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 38  o_test btree-4.8
1d60: 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65   {.  btree_close
1d70: 20 24 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 62   $::b1.  set ::b
1d80: 31 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65  1 [btree_open te
1d90: 73 74 31 2e 62 74 20 32 30 30 30 20 30 5d 0a 20  st1.bt 2000 0]. 
1da0: 20 73 65 74 20 3a 3a 63 31 20 5b 62 74 72 65 65   set ::c1 [btree
1db0: 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 31 20  _cursor $::b1 1 
1dc0: 31 5d 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72  1].  lindex [btr
1dd0: 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24  ee_pager_stats $
1de0: 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f  ::b1] 1.} {1}.do
1df0: 5f 74 65 73 74 20 62 74 72 65 65 2d 34 2e 39 20  _test btree-4.9 
1e00: 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a 20 20 62  {.  set r {}.  b
1e10: 74 72 65 65 5f 66 69 72 73 74 20 24 3a 3a 63 31  tree_first $::c1
1e20: 0a 20 20 77 68 69 6c 65 20 31 20 7b 0a 20 20 20  .  while 1 {.   
1e30: 20 73 65 74 20 6b 65 79 20 5b 62 74 72 65 65 5f   set key [btree_
1e40: 6b 65 79 20 24 3a 3a 63 31 5d 0a 20 20 20 20 69  key $::c1].    i
1e50: 66 20 7b 5b 62 74 72 65 65 5f 65 6f 66 20 24 3a  f {[btree_eof $:
1e60: 3a 63 31 5d 7d 20 62 72 65 61 6b 0a 20 20 20 20  :c1]} break.    
1e70: 6c 61 70 70 65 6e 64 20 72 20 24 6b 65 79 0a 20  lappend r $key. 
1e80: 20 20 20 6c 61 70 70 65 6e 64 20 72 20 5b 62 74     lappend r [bt
1e90: 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 5d 0a  ree_data $::c1].
1ea0: 20 20 20 20 62 74 72 65 65 5f 6e 65 78 74 20 24      btree_next $
1eb0: 3a 3a 63 31 0a 20 20 7d 0a 20 20 73 65 74 20 72  ::c1.  }.  set r
1ec0: 20 20 20 0a 7d 20 7b 32 30 30 20 32 2e 30 30 20     .} {200 2.00 
1ed0: 33 30 30 20 33 2e 30 30 20 34 30 30 20 34 2e 30  300 3.00 400 4.0
1ee0: 30 20 35 30 30 20 35 2e 30 30 20 36 30 30 20 36  0 500 5.00 600 6
1ef0: 2e 30 30 7d 0a 0a 23 20 54 72 79 20 74 6f 20 72  .00}..# Try to r
1f00: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 6d 65  ead and write me
1f10: 74 61 20 64 61 74 61 0a 23 0a 64 6f 5f 74 65 73  ta data.#.do_tes
1f20: 74 20 62 74 72 65 65 2d 35 2e 31 20 7b 0a 20 20  t btree-5.1 {.  
1f30: 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24  btree_get_meta $
1f40: 3a 3a 62 31 0a 7d 20 7b 30 20 30 20 30 20 30 20  ::b1.} {0 0 0 0 
1f50: 30 20 30 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f  0 0 0 0 0 0}.do_
1f60: 74 65 73 74 20 62 74 72 65 65 2d 35 2e 32 20 7b  test btree-5.2 {
1f70: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
1f80: 20 7b 0a 20 20 20 20 62 74 72 65 65 5f 75 70 64   {.    btree_upd
1f90: 61 74 65 5f 6d 65 74 61 20 24 3a 3a 62 31 20 30  ate_meta $::b1 0
1fa0: 20 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38   1 2 3 4 5 6 7 8
1fb0: 20 39 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61   9.  } msg].  la
1fc0: 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20  ppend rc $msg.} 
1fd0: 7b 31 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  {1 SQLITE_ERROR}
1fe0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 35  .do_test btree-5
1ff0: 2e 33 20 7b 0a 20 20 62 74 72 65 65 5f 62 65 67  .3 {.  btree_beg
2000: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24  in_transaction $
2010: 3a 3a 62 31 0a 20 20 73 65 74 20 72 63 20 5b 63  ::b1.  set rc [c
2020: 61 74 63 68 20 7b 0a 20 20 20 20 62 74 72 65 65  atch {.    btree
2030: 5f 75 70 64 61 74 65 5f 6d 65 74 61 20 24 3a 3a  _update_meta $::
2040: 62 31 20 30 20 31 20 32 20 33 20 30 20 35 20 36  b1 0 1 2 3 0 5 6
2050: 20 37 20 38 20 39 0a 20 20 7d 20 6d 73 67 5d 0a   7 8 9.  } msg].
2060: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
2070: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
2080: 73 74 20 62 74 72 65 65 2d 35 2e 34 20 7b 0a 20  st btree-5.4 {. 
2090: 20 62 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20   btree_get_meta 
20a0: 24 3a 3a 62 31 0a 7d 20 7b 30 20 31 20 32 20 33  $::b1.} {0 1 2 3
20b0: 20 30 20 35 20 36 20 37 20 38 20 39 7d 0a 64 6f   0 5 6 7 8 9}.do
20c0: 5f 74 65 73 74 20 62 74 72 65 65 2d 35 2e 35 20  _test btree-5.5 
20d0: 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  {.  btree_close_
20e0: 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62  cursor $::c1.  b
20f0: 74 72 65 65 5f 72 6f 6c 6c 62 61 63 6b 20 24 3a  tree_rollback $:
2100: 3a 62 31 0a 20 20 62 74 72 65 65 5f 67 65 74 5f  :b1.  btree_get_
2110: 6d 65 74 61 20 24 3a 3a 62 31 0a 7d 20 7b 30 20  meta $::b1.} {0 
2120: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
2130: 30 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  0}.do_test btree
2140: 2d 35 2e 36 20 7b 0a 20 20 62 74 72 65 65 5f 62  -5.6 {.  btree_b
2150: 65 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e  egin_transaction
2160: 20 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 75   $::b1.  btree_u
2170: 70 64 61 74 65 5f 6d 65 74 61 20 24 3a 3a 62 31  pdate_meta $::b1
2180: 20 30 20 31 30 20 32 30 20 33 30 20 30 20 35 30   0 10 20 30 0 50
2190: 20 36 30 20 37 30 20 38 30 20 39 30 0a 20 20 62   60 70 80 90.  b
21a0: 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62  tree_commit $::b
21b0: 31 0a 20 20 62 74 72 65 65 5f 67 65 74 5f 6d 65  1.  btree_get_me
21c0: 74 61 20 24 3a 3a 62 31 0a 7d 20 7b 30 20 31 30  ta $::b1.} {0 10
21d0: 20 32 30 20 33 30 20 30 20 35 30 20 36 30 20 37   20 30 0 50 60 7
21e0: 30 20 38 30 20 39 30 7d 0a 0a 70 72 6f 63 20 73  0 80 90}..proc s
21f0: 65 6c 65 63 74 5f 61 6c 6c 20 7b 63 75 72 73 6f  elect_all {curso
2200: 72 7d 20 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a  r} {.  set r {}.
2210: 20 20 62 74 72 65 65 5f 66 69 72 73 74 20 24 63    btree_first $c
2220: 75 72 73 6f 72 0a 20 20 77 68 69 6c 65 20 7b 21  ursor.  while {!
2230: 5b 62 74 72 65 65 5f 65 6f 66 20 24 63 75 72 73  [btree_eof $curs
2240: 6f 72 5d 7d 20 7b 0a 20 20 20 20 73 65 74 20 6b  or]} {.    set k
2250: 65 79 20 5b 62 74 72 65 65 5f 6b 65 79 20 24 63  ey [btree_key $c
2260: 75 72 73 6f 72 5d 0a 20 20 20 20 6c 61 70 70 65  ursor].    lappe
2270: 6e 64 20 72 20 24 6b 65 79 0a 20 20 20 20 6c 61  nd r $key.    la
2280: 70 70 65 6e 64 20 72 20 5b 62 74 72 65 65 5f 64  ppend r [btree_d
2290: 61 74 61 20 24 63 75 72 73 6f 72 5d 0a 20 20 20  ata $cursor].   
22a0: 20 62 74 72 65 65 5f 6e 65 78 74 20 24 63 75 72   btree_next $cur
22b0: 73 6f 72 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  sor.  }.  return
22c0: 20 24 72 0a 7d 0a 70 72 6f 63 20 73 65 6c 65 63   $r.}.proc selec
22d0: 74 5f 6b 65 79 73 20 7b 63 75 72 73 6f 72 7d 20  t_keys {cursor} 
22e0: 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a 20 20 62  {.  set r {}.  b
22f0: 74 72 65 65 5f 66 69 72 73 74 20 24 63 75 72 73  tree_first $curs
2300: 6f 72 0a 20 20 77 68 69 6c 65 20 7b 21 5b 62 74  or.  while {![bt
2310: 72 65 65 5f 65 6f 66 20 24 63 75 72 73 6f 72 5d  ree_eof $cursor]
2320: 7d 20 7b 0a 20 20 20 20 73 65 74 20 6b 65 79 20  } {.    set key 
2330: 5b 62 74 72 65 65 5f 6b 65 79 20 24 63 75 72 73  [btree_key $curs
2340: 6f 72 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  or].    lappend 
2350: 72 20 24 6b 65 79 0a 20 20 20 20 62 74 72 65 65  r $key.    btree
2360: 5f 6e 65 78 74 20 24 63 75 72 73 6f 72 0a 20 20  _next $cursor.  
2370: 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 0a 7d 0a  }.  return $r.}.
2380: 0a 23 20 54 72 79 20 74 6f 20 63 72 65 61 74 65  .# Try to create
2390: 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
23a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23b0: 65 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  e.#.do_test btre
23c0: 65 2d 36 2e 31 20 7b 0a 20 20 73 65 74 20 72 63  e-6.1 {.  set rc
23d0: 20 5b 63 61 74 63 68 20 7b 62 74 72 65 65 5f 63   [catch {btree_c
23e0: 72 65 61 74 65 5f 74 61 62 6c 65 20 24 3a 3a 62  reate_table $::b
23f0: 31 20 30 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  1 0} msg].  lapp
2400: 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 31  end rc $msg.} {1
2410: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64   SQLITE_ERROR}.d
2420: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 32  o_test btree-6.2
2430: 20 7b 0a 20 20 62 74 72 65 65 5f 62 65 67 69 6e   {.  btree_begin
2440: 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a  _transaction $::
2450: 62 31 0a 20 20 73 65 74 20 3a 3a 74 32 20 5b 62  b1.  set ::t2 [b
2460: 74 72 65 65 5f 63 72 65 61 74 65 5f 74 61 62 6c  tree_create_tabl
2470: 65 20 24 3a 3a 62 31 20 30 5d 0a 7d 20 7b 32 7d  e $::b1 0].} {2}
2480: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
2490: 2e 32 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20  .2.1 {.  lindex 
24a0: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
24b0: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31  ts $::b1] 1.} {1
24c0: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
24d0: 36 2e 32 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a  6.2.2 {.  set ::
24e0: 63 32 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  c2 [btree_cursor
24f0: 20 24 3a 3a 62 31 20 24 3a 3a 74 32 20 31 5d 0a   $::b1 $::t2 1].
2500: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
2510: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
2520: 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  1] 1.} {2}.do_te
2530: 73 74 20 62 74 72 65 65 2d 36 2e 32 2e 33 20 7b  st btree-6.2.3 {
2540: 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20  .  btree_insert 
2550: 24 3a 3a 63 32 20 74 65 6e 20 31 30 0a 20 20 62  $::c2 ten 10.  b
2560: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
2570: 63 32 20 74 65 6e 0a 20 20 62 74 72 65 65 5f 6b  c2 ten.  btree_k
2580: 65 79 20 24 3a 3a 63 32 0a 7d 20 7b 74 65 6e 7d  ey $::c2.} {ten}
2590: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
25a0: 2e 33 20 7b 0a 20 20 62 74 72 65 65 5f 63 6f 6d  .3 {.  btree_com
25b0: 6d 69 74 20 24 3a 3a 62 31 0a 20 20 73 65 74 20  mit $::b1.  set 
25c0: 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73  ::c1 [btree_curs
25d0: 6f 72 20 24 3a 3a 62 31 20 31 20 31 5d 0a 20 20  or $::b1 1 1].  
25e0: 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61  lindex [btree_pa
25f0: 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d  ger_stats $::b1]
2600: 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   1.} {2}.do_test
2610: 20 62 74 72 65 65 2d 36 2e 33 2e 31 20 7b 0a 20   btree-6.3.1 {. 
2620: 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a 3a 63   select_all $::c
2630: 31 0a 7d 20 7b 32 30 30 20 32 2e 30 30 20 33 30  1.} {200 2.00 30
2640: 30 20 33 2e 30 30 20 34 30 30 20 34 2e 30 30 20  0 3.00 400 4.00 
2650: 35 30 30 20 35 2e 30 30 20 36 30 30 20 36 2e 30  500 5.00 600 6.0
2660: 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65 5f 64  0}.#btree_page_d
2670: 75 6d 70 20 24 3a 3a 62 31 20 33 0a 64 6f 5f 74  ump $::b1 3.do_t
2680: 65 73 74 20 62 74 72 65 65 2d 36 2e 34 20 7b 0a  est btree-6.4 {.
2690: 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a 3a    select_all $::
26a0: 63 32 0a 7d 20 7b 74 65 6e 20 31 30 7d 0a 0a 23  c2.} {ten 10}..#
26b0: 20 44 72 6f 70 20 74 68 65 20 6e 65 77 20 74 61   Drop the new ta
26c0: 62 6c 65 2c 20 74 68 65 6e 20 63 72 65 61 74 65  ble, then create
26d0: 20 69 74 20 61 67 61 69 6e 20 61 6e 65 77 2e 0a   it again anew..
26e0: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
26f0: 36 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f 62 65  6.5 {.  btree_be
2700: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20  gin_transaction 
2710: 24 3a 3a 62 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  $::b1.} {}.do_te
2720: 73 74 20 62 74 72 65 65 2d 36 2e 36 20 7b 0a 20  st btree-6.6 {. 
2730: 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72   btree_close_cur
2740: 73 6f 72 20 24 3a 3a 63 32 0a 7d 20 7b 7d 0a 64  sor $::c2.} {}.d
2750: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e 36  o_test btree-6.6
2760: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
2770: 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61 74 73  tree_pager_stats
2780: 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a   $::b1] 1.} {1}.
2790: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e  do_test btree-6.
27a0: 37 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73  7 {.  btree_clos
27b0: 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20  e_cursor $::c1. 
27c0: 20 62 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c   btree_drop_tabl
27d0: 65 20 24 3a 3a 62 31 20 24 3a 3a 74 32 0a 7d 20  e $::b1 $::t2.} 
27e0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  {}.do_test btree
27f0: 2d 36 2e 37 2e 31 20 7b 0a 20 20 6c 69 6e 64 65  -6.7.1 {.  linde
2800: 78 20 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74  x [btree_get_met
2810: 61 20 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b 31 7d  a $::b1] 0.} {1}
2820: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
2830: 2e 38 20 7b 0a 20 20 73 65 74 20 3a 3a 74 32 20  .8 {.  set ::t2 
2840: 5b 62 74 72 65 65 5f 63 72 65 61 74 65 5f 74 61  [btree_create_ta
2850: 62 6c 65 20 24 3a 3a 62 31 20 30 5d 0a 7d 20 7b  ble $::b1 0].} {
2860: 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  2}.do_test btree
2870: 2d 36 2e 38 2e 31 20 7b 0a 20 20 6c 69 6e 64 65  -6.8.1 {.  linde
2880: 78 20 5b 62 74 72 65 65 5f 67 65 74 5f 6d 65 74  x [btree_get_met
2890: 61 20 24 3a 3a 62 31 5d 20 30 0a 7d 20 7b 30 7d  a $::b1] 0.} {0}
28a0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36  .do_test btree-6
28b0: 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 63 32 20  .9 {.  set ::c2 
28c0: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a  [btree_cursor $:
28d0: 3a 62 31 20 24 3a 3a 74 32 20 31 5d 0a 20 20 6c  :b1 $::t2 1].  l
28e0: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
28f0: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
2900: 31 0a 7d 20 7b 32 7d 0a 0a 23 20 54 68 69 73 20  1.} {2}..# This 
2910: 74 65 73 74 20 63 61 73 65 20 75 73 65 64 20 74  test case used t
2920: 6f 20 74 65 73 74 20 74 68 61 74 20 72 65 71 75  o test that requ
2930: 65 73 74 69 6e 67 20 74 68 65 20 6b 65 79 20 66  esting the key f
2940: 72 6f 6d 20 61 6e 20 69 6e 76 61 6c 69 64 20 63  rom an invalid c
2950: 75 72 73 6f 72 0a 23 20 72 65 74 75 72 6e 65 64  ursor.# returned
2960: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
2970: 2e 20 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  .  But that is n
2980: 6f 77 20 61 6e 20 61 73 73 65 72 74 28 29 65 64  ow an assert()ed
2990: 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 23 0a 23 20   condition..#.# 
29a0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 36 2e  do_test btree-6.
29b0: 39 2e 31 20 7b 0a 23 20 20 20 62 74 72 65 65 5f  9.1 {.#   btree_
29c0: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 32 20 7b 7d  move_to $::c2 {}
29d0: 0a 23 20 20 20 62 74 72 65 65 5f 6b 65 79 20 24  .#   btree_key $
29e0: 3a 3a 63 32 0a 23 20 7d 20 7b 7d 0a 0a 23 20 49  ::c2.# } {}..# I
29f0: 66 20 77 65 20 64 72 6f 70 20 74 61 62 6c 65 20  f we drop table 
2a00: 31 20 69 74 20 6a 75 73 74 20 63 6c 65 61 72 73  1 it just clears
2a10: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 61 62   the table.  Tab
2a20: 6c 65 20 31 20 61 6c 77 61 79 73 20 65 78 69 73  le 1 always exis
2a30: 74 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  ts..#.do_test bt
2a40: 72 65 65 2d 36 2e 31 30 20 7b 0a 20 20 62 74 72  ree-6.10 {.  btr
2a50: 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20  ee_close_cursor 
2a60: 24 3a 3a 63 32 0a 20 20 62 74 72 65 65 5f 64 72  $::c2.  btree_dr
2a70: 6f 70 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20 31  op_table $::b1 1
2a80: 0a 20 20 73 65 74 20 3a 3a 63 32 20 5b 62 74 72  .  set ::c2 [btr
2a90: 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20  ee_cursor $::b1 
2aa0: 24 3a 3a 74 32 20 31 5d 0a 20 20 73 65 74 20 3a  $::t2 1].  set :
2ab0: 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f  :c1 [btree_curso
2ac0: 72 20 24 3a 3a 62 31 20 31 20 31 5d 0a 20 20 62  r $::b1 1 1].  b
2ad0: 74 72 65 65 5f 66 69 72 73 74 20 24 3a 3a 63 31  tree_first $::c1
2ae0: 0a 20 20 62 74 72 65 65 5f 65 6f 66 20 24 3a 3a  .  btree_eof $::
2af0: 63 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  c1.} {1}.do_test
2b00: 20 62 74 72 65 65 2d 36 2e 31 31 20 7b 0a 20 20   btree-6.11 {.  
2b10: 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a  btree_commit $::
2b20: 62 31 0a 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20  b1.  select_all 
2b30: 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  $::c1.} {}.do_te
2b40: 73 74 20 62 74 72 65 65 2d 36 2e 31 32 20 7b 0a  st btree-6.12 {.
2b50: 20 20 73 65 6c 65 63 74 5f 61 6c 6c 20 24 3a 3a    select_all $::
2b60: 63 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  c2.} {}.do_test 
2b70: 62 74 72 65 65 2d 36 2e 31 33 20 7b 0a 20 20 62  btree-6.13 {.  b
2b80: 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f  tree_close_curso
2b90: 72 20 24 3a 3a 63 32 0a 20 20 6c 69 6e 64 65 78  r $::c2.  lindex
2ba0: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
2bb0: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
2bc0: 31 7d 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73  1}..# Check to s
2bd0: 65 65 20 74 68 61 74 20 70 61 67 65 73 20 64 65  ee that pages de
2be0: 66 72 61 67 6d 65 6e 74 20 70 72 6f 70 65 72 6c  fragment properl
2bf0: 79 2e 20 20 54 6f 20 64 6f 20 74 68 69 73 20 74  y.  To do this t
2c00: 65 73 74 20 77 65 20 77 69 6c 6c 0a 23 20 0a 23  est we will.# .#
2c10: 20 20 20 31 2e 20 20 46 69 6c 6c 20 74 68 65 20     1.  Fill the 
2c20: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 61  first page of ta
2c30: 62 6c 65 20 31 20 77 69 74 68 20 64 61 74 61 2e  ble 1 with data.
2c40: 0a 23 20 20 20 32 2e 20 20 44 65 6c 65 74 65 20  .#   2.  Delete 
2c50: 65 76 65 72 79 20 6f 74 68 65 72 20 65 6e 74 72  every other entr
2c60: 79 20 6f 66 20 74 61 62 6c 65 20 31 2e 0a 23 20  y of table 1..# 
2c70: 20 20 33 2e 20 20 49 6e 73 65 72 74 20 61 20 73    3.  Insert a s
2c80: 69 6e 67 6c 65 20 65 6e 74 72 79 20 74 68 61 74  ingle entry that
2c90: 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20 63   requires more c
2ca0: 6f 6e 74 69 67 75 6f 75 73 0a 23 20 20 20 20 20  ontiguous.#     
2cb0: 20 20 73 70 61 63 65 20 74 68 61 6e 20 69 73 20    space than is 
2cc0: 61 76 61 69 6c 61 62 6c 65 2e 0a 23 0a 64 6f 5f  available..#.do_
2cd0: 74 65 73 74 20 62 74 72 65 65 2d 37 2e 31 20 7b  test btree-7.1 {
2ce0: 0a 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f 74  .  btree_begin_t
2cf0: 72 61 6e 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31  ransaction $::b1
2d00: 0a 7d 20 7b 7d 0a 63 61 74 63 68 20 7b 75 6e 73  .} {}.catch {uns
2d10: 65 74 20 6b 65 79 7d 0a 63 61 74 63 68 20 7b 75  et key}.catch {u
2d20: 6e 73 65 74 20 64 61 74 61 7d 0a 69 66 20 30 20  nset data}.if 0 
2d30: 7b 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  {.do_test btree-
2d40: 37 2e 32 20 7b 0a 20 20 23 20 45 61 63 68 20 72  7.2 {.  # Each r
2d50: 65 63 6f 72 64 20 77 69 6c 6c 20 62 65 20 31 30  ecord will be 10
2d60: 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a   bytes in size..
2d70: 20 20 23 20 20 20 2b 20 31 30 30 20 62 79 74 65    #   + 100 byte
2d80: 73 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 65  s of database he
2d90: 61 64 65 72 0a 20 20 23 20 20 20 2b 20 38 20 62  ader.  #   + 8 b
2da0: 79 74 65 73 20 6f 66 20 74 61 62 6c 65 20 68 65  ytes of table he
2db0: 61 64 65 72 0a 20 20 23 20 20 20 2b 20 39 31 2a  ader.  #   + 91*
2dc0: 31 30 3d 39 31 30 20 62 79 74 65 73 20 6f 66 20  10=910 bytes of 
2dd0: 63 65 6c 6c 73 0a 20 20 23 20 54 6f 74 61 6c 73  cells.  # Totals
2de0: 20 31 30 31 38 20 62 79 74 65 73 2e 20 20 36 20   1018 bytes.  6 
2df0: 62 79 74 65 73 20 6c 65 66 74 20 6f 76 65 72 0a  bytes left over.
2e00: 20 20 23 20 4b 65 79 73 20 61 72 65 20 31 30 30    # Keys are 100
2e10: 30 20 74 68 72 6f 75 67 68 20 31 30 39 30 2e 0a  0 through 1090..
2e20: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 30 30    for {set i 100
2e30: 30 7d 20 7b 24 69 3c 31 30 39 31 7d 20 7b 69 6e  0} {$i<1091} {in
2e40: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
2e50: 6b 65 79 20 24 69 0a 20 20 20 20 73 65 74 20 64  key $i.    set d
2e60: 61 74 61 20 5b 66 6f 72 6d 61 74 20 25 35 64 20  ata [format %5d 
2e70: 24 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 69 6e  $i].    btree_in
2e80: 73 65 72 74 20 24 3a 3a 63 31 20 24 6b 65 79 20  sert $::c1 $key 
2e90: 24 64 61 74 61 0a 20 20 7d 0a 20 20 6c 72 61 6e  $data.  }.  lran
2ea0: 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  ge [btree_cursor
2eb0: 5f 69 6e 66 6f 20 24 3a 3a 63 31 5d 20 34 20 35  _info $::c1] 4 5
2ec0: 0a 7d 20 7b 36 20 30 7d 0a 23 62 74 72 65 65 5f  .} {6 0}.#btree_
2ed0: 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  tree_dump $::b1 
2ee0: 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  1.do_test btree-
2ef0: 37 2e 33 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74  7.3 {.  for {set
2f00: 20 69 20 31 30 30 31 7d 20 7b 24 69 3c 31 30 39   i 1001} {$i<109
2f10: 31 7d 20 7b 69 6e 63 72 20 69 20 32 7d 20 7b 0a  1} {incr i 2} {.
2f20: 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74      btree_move_t
2f30: 6f 20 24 3a 3a 63 31 20 24 69 0a 20 20 20 20 62  o $::c1 $i.    b
2f40: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
2f50: 31 0a 20 20 7d 0a 20 20 23 20 46 72 65 65 64 20  1.  }.  # Freed 
2f60: 34 35 20 62 6c 6f 63 6b 73 2e 20 20 54 6f 74 61  45 blocks.  Tota
2f70: 6c 20 66 72 65 65 73 70 61 63 65 20 69 73 20 34  l freespace is 4
2f80: 35 36 0a 20 20 23 20 4b 65 79 73 20 72 65 6d 61  56.  # Keys rema
2f90: 69 6e 69 6e 67 20 61 72 65 20 65 76 65 6e 20 6e  ining are even n
2fa0: 75 6d 62 65 72 73 20 62 65 74 77 65 65 6e 20 31  umbers between 1
2fb0: 30 30 30 20 61 6e 64 20 31 30 39 30 2c 20 69 6e  000 and 1090, in
2fc0: 63 6c 75 73 69 76 65 0a 20 20 6c 72 61 6e 67 65  clusive.  lrange
2fd0: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 5f 69   [btree_cursor_i
2fe0: 6e 66 6f 20 24 3a 3a 63 31 5d 20 34 20 35 0a 7d  nfo $::c1] 4 5.}
2ff0: 20 7b 34 35 36 20 34 35 7d 0a 23 62 74 72 65 65   {456 45}.#btree
3000: 5f 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31  _tree_dump $::b1
3010: 20 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65   1.do_test btree
3020: 2d 37 2e 34 20 7b 0a 20 20 23 20 54 68 65 20 6c  -7.4 {.  # The l
3030: 61 72 67 65 73 74 20 66 72 65 65 20 62 6c 6f 63  argest free bloc
3040: 6b 20 69 73 20 38 20 62 79 74 65 73 20 6c 6f 6e  k is 8 bytes lon
3050: 67 2e 20 20 42 75 74 20 74 68 65 72 65 20 69 73  g.  But there is
3060: 20 61 6c 73 6f 20 61 0a 20 20 23 20 68 75 67 65   also a.  # huge
3070: 20 68 6f 6c 65 20 62 65 74 77 65 65 6e 20 74 68   hole between th
3080: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61  e cell pointer a
3090: 72 72 61 79 20 61 6e 64 20 74 68 65 20 63 65 6c  rray and the cel
30a0: 6c 63 6f 6e 74 65 6e 74 2e 0a 20 20 23 20 42 75  lcontent..  # Bu
30b0: 74 20 69 66 20 77 65 20 69 6e 73 65 72 74 20 61  t if we insert a
30c0: 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 72 65   large enough re
30d0: 63 6f 72 64 2c 20 69 74 20 73 68 6f 75 6c 64 20  cord, it should 
30e0: 66 6f 72 63 65 20 61 20 64 65 66 72 61 67 2e 0a  force a defrag..
30f0: 20 20 73 65 74 20 64 61 74 61 20 31 32 33 34 35    set data 12345
3100: 36 37 38 39 5f 0a 20 20 61 70 70 65 6e 64 20 64  6789_.  append d
3110: 61 74 61 20 24 64 61 74 61 0a 20 20 61 70 70 65  ata $data.  appe
3120: 6e 64 20 64 61 74 61 20 24 64 61 74 61 0a 20 20  nd data $data.  
3130: 61 70 70 65 6e 64 20 64 61 74 61 20 24 64 61 74  append data $dat
3140: 61 0a 20 20 61 70 70 65 6e 64 20 64 61 74 61 20  a.  append data 
3150: 24 64 61 74 61 0a 20 20 61 70 70 65 6e 64 20 64  $data.  append d
3160: 61 74 61 20 24 64 61 74 61 0a 20 20 62 74 72 65  ata $data.  btre
3170: 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 32  e_insert $::c1 2
3180: 30 30 30 20 24 64 61 74 61 0a 20 20 62 74 72 65  000 $data.  btre
3190: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
31a0: 32 30 30 30 0a 20 20 62 74 72 65 65 5f 6b 65 79  2000.  btree_key
31b0: 20 24 3a 3a 63 31 0a 7d 20 7b 32 30 30 30 7d 0a   $::c1.} {2000}.
31c0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e  do_test btree-7.
31d0: 35 20 7b 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74  5 {.  lrange [bt
31e0: 72 65 65 5f 63 75 72 73 6f 72 5f 69 6e 66 6f 20  ree_cursor_info 
31f0: 24 3a 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 33 34  $::c1] 4 5.} {34
3200: 33 20 30 7d 0a 23 62 74 72 65 65 5f 74 72 65 65  3 0}.#btree_tree
3210: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 31 0a 0a 23  _dump $::b1 1..#
3220: 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 72 79   Delete an entry
3230: 20 74 6f 20 6d 61 6b 65 20 61 20 68 6f 6c 65 20   to make a hole 
3240: 6f 66 20 61 20 6b 6e 6f 77 6e 20 73 69 7a 65 2c  of a known size,
3250: 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
3260: 79 20 72 65 63 72 65 61 74 65 0a 23 20 74 68 61  y recreate.# tha
3270: 74 20 65 6e 74 72 79 2e 20 20 54 68 69 73 20 74  t entry.  This t
3280: 65 73 74 73 20 74 68 65 20 70 61 74 68 20 69 6e  ests the path in
3290: 74 6f 20 61 6c 6c 6f 63 61 74 65 53 70 61 63 65  to allocateSpace
32a0: 20 77 68 65 72 65 20 74 68 65 20 68 6f 6c 65 20   where the hole 
32b0: 65 78 61 63 74 6c 79 0a 23 20 6d 61 74 63 68 65  exactly.# matche
32c0: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
32d0: 65 20 64 65 73 69 72 65 64 20 73 70 61 63 65 2e  e desired space.
32e0: 0a 23 0a 23 20 4b 65 79 73 20 61 72 65 20 65 76  .#.# Keys are ev
32f0: 65 6e 20 6e 75 6d 62 65 72 73 20 62 65 74 77 65  en numbers betwe
3300: 65 6e 20 31 30 30 30 20 61 6e 64 20 31 30 39 30  en 1000 and 1090
3310: 20 61 6e 64 20 6f 6e 65 20 72 65 63 6f 72 64 20   and one record 
3320: 6f 66 20 32 30 30 30 2e 0a 23 20 54 68 65 72 65  of 2000..# There
3330: 20 61 72 65 20 34 37 20 6b 65 79 73 20 74 6f 74   are 47 keys tot
3340: 61 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  al..#.do_test bt
3350: 72 65 65 2d 37 2e 36 20 7b 0a 20 20 62 74 72 65  ree-7.6 {.  btre
3360: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
3370: 31 30 30 36 0a 20 20 62 74 72 65 65 5f 64 65 6c  1006.  btree_del
3380: 65 74 65 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ete $::c1.  btre
3390: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
33a0: 31 30 31 30 0a 20 20 62 74 72 65 65 5f 64 65 6c  1010.  btree_del
33b0: 65 74 65 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64  ete $::c1.} {}.d
33c0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 37 2e 37  o_test btree-7.7
33d0: 20 7b 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74 72   {.  lrange [btr
33e0: 65 65 5f 63 75 72 73 6f 72 5f 69 6e 66 6f 20 24  ee_cursor_info $
33f0: 3a 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 33 36 33  ::c1] 4 5.} {363
3400: 20 32 7d 20 20 20 3b 23 20 43 72 65 61 74 65 20   2}   ;# Create 
3410: 74 77 6f 20 6e 65 77 20 68 6f 6c 65 73 20 6f 66  two new holes of
3420: 20 31 30 20 62 79 74 65 73 20 65 61 63 68 0a 23   10 bytes each.#
3430: 62 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20  btree_page_dump 
3440: 24 3a 3a 62 31 20 31 0a 64 6f 5f 74 65 73 74 20  $::b1 1.do_test 
3450: 62 74 72 65 65 2d 37 2e 38 20 7b 0a 20 20 62 74  btree-7.8 {.  bt
3460: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
3470: 20 31 30 30 36 20 7b 20 31 30 30 36 7d 0a 20 20   1006 { 1006}.  
3480: 6c 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75  lrange [btree_cu
3490: 72 73 6f 72 5f 69 6e 66 6f 20 24 3a 3a 63 31 5d  rsor_info $::c1]
34a0: 20 34 20 35 0a 7d 20 7b 33 35 33 20 31 7d 20 20   4 5.} {353 1}  
34b0: 20 3b 23 20 46 69 6c 6c 65 64 20 69 6e 20 74 68   ;# Filled in th
34c0: 65 20 66 69 72 73 74 20 68 6f 6c 65 0a 62 74 72  e first hole.btr
34d0: 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a  ee_page_dump $::
34e0: 62 31 20 31 0a 0a 23 20 4d 61 6b 65 20 73 75 72  b1 1..# Make sur
34f0: 65 20 74 68 65 20 66 72 65 65 53 70 61 63 65 28  e the freeSpace(
3500: 29 20 72 6f 75 74 69 6e 65 20 70 72 6f 70 65 72  ) routine proper
3510: 6c 79 20 63 6f 61 6c 65 73 65 73 20 61 64 6a 61  ly coaleses adja
3520: 63 65 6e 74 20 6d 65 6d 6f 72 79 20 62 6c 6f 63  cent memory bloc
3530: 6b 73 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74 72  ks.#.do_test btr
3540: 65 65 2d 37 2e 39 20 7b 0a 20 20 62 74 72 65 65  ee-7.9 {.  btree
3550: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 31  _move_to $::c1 1
3560: 30 31 32 0a 20 20 62 74 72 65 65 5f 64 65 6c 65  012.  btree_dele
3570: 74 65 20 24 3a 3a 63 31 0a 20 20 6c 72 61 6e 67  te $::c1.  lrang
3580: 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 5f  e [btree_cursor_
3590: 69 6e 66 6f 20 24 3a 3a 63 31 5d 20 34 20 35 0a  info $::c1] 4 5.
35a0: 7d 20 7b 33 36 33 20 32 7d 20 20 3b 23 20 43 6f  } {363 2}  ;# Co
35b0: 61 6c 65 73 63 65 20 77 69 74 68 20 74 68 65 20  alesce with the 
35c0: 68 6f 6c 65 20 62 65 66 6f 72 65 0a 62 74 72 65  hole before.btre
35d0: 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62  e_page_dump $::b
35e0: 31 20 31 0a 65 78 69 74 0a 64 6f 5f 74 65 73 74  1 1.exit.do_test
35f0: 20 62 74 72 65 65 2d 37 2e 31 30 20 7b 0a 20 20   btree-7.10 {.  
3600: 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a  btree_move_to $:
3610: 3a 63 31 20 31 30 30 38 0a 20 20 62 74 72 65 65  :c1 1008.  btree
3620: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20  _delete $::c1.  
3630: 6c 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75  lrange [btree_cu
3640: 72 73 6f 72 5f 69 6e 66 6f 20 24 3a 3a 63 31 5d  rsor_info $::c1]
3650: 20 34 20 35 0a 7d 20 7b 34 36 38 20 32 7d 20 20   4 5.} {468 2}  
3660: 3b 23 20 43 6f 61 6c 65 73 63 65 20 77 69 74 68  ;# Coalesce with
3670: 20 77 68 6f 6c 65 20 61 66 74 65 72 0a 64 6f 5f   whole after.do_
3680: 74 65 73 74 20 62 74 72 65 65 2d 37 2e 31 31 20  test btree-7.11 
3690: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
36a0: 6f 20 24 3a 3a 63 31 20 31 30 33 30 0a 20 20 62  o $::c1 1030.  b
36b0: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
36c0: 31 0a 20 20 6c 72 61 6e 67 65 20 5b 62 74 72 65  1.  lrange [btre
36d0: 65 5f 63 75 72 73 6f 72 5f 69 6e 66 6f 20 24 3a  e_cursor_info $:
36e0: 3a 63 31 5d 20 34 20 35 0a 7d 20 7b 34 37 38 20  :c1] 4 5.} {478 
36f0: 33 7d 20 20 20 3b 23 20 4d 61 6b 65 20 61 20 6e  3}   ;# Make a n
3700: 65 77 20 68 6f 6c 65 0a 64 6f 5f 74 65 73 74 20  ew hole.do_test 
3710: 62 74 72 65 65 2d 37 2e 31 33 20 7b 0a 20 20 62  btree-7.13 {.  b
3720: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
3730: 63 31 20 31 30 33 34 0a 20 20 62 74 72 65 65 5f  c1 1034.  btree_
3740: 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c  delete $::c1.  l
3750: 72 61 6e 67 65 20 5b 62 74 72 65 65 5f 63 75 72  range [btree_cur
3760: 73 6f 72 5f 69 6e 66 6f 20 24 3a 3a 63 31 5d 20  sor_info $::c1] 
3770: 34 20 35 0a 7d 20 7b 34 38 38 20 34 7d 20 20 20  4 5.} {488 4}   
3780: 3b 23 20 4d 61 6b 65 20 61 6e 6f 74 68 65 72 20  ;# Make another 
3790: 68 6f 6c 65 0a 64 6f 5f 74 65 73 74 20 62 74 72  hole.do_test btr
37a0: 65 65 2d 37 2e 31 34 20 7b 0a 20 20 62 74 72 65  ee-7.14 {.  btre
37b0: 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20  e_move_to $::c1 
37c0: 31 30 33 32 0a 20 20 62 74 72 65 65 5f 64 65 6c  1032.  btree_del
37d0: 65 74 65 20 24 3a 3a 63 31 0a 20 20 6c 72 61 6e  ete $::c1.  lran
37e0: 67 65 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72  ge [btree_cursor
37f0: 5f 69 6e 66 6f 20 24 3a 3a 63 31 5d 20 34 20 35  _info $::c1] 4 5
3800: 0a 7d 20 7b 34 39 38 20 33 7d 20 20 20 3b 23 20  .} {498 3}   ;# 
3810: 54 68 65 20 66 72 65 65 64 20 73 70 61 63 65 20  The freed space 
3820: 73 68 6f 75 6c 64 20 63 6f 61 6c 65 73 63 65 20  should coalesce 
3830: 6f 6e 20 62 6f 74 68 20 65 6e 64 73 0a 23 62 74  on both ends.#bt
3840: 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a  ree_page_dump $:
3850: 3a 62 31 20 32 0a 64 6f 5f 74 65 73 74 20 62 74  :b1 2.do_test bt
3860: 72 65 65 2d 37 2e 31 35 20 7b 0a 20 20 6c 69 6e  ree-7.15 {.  lin
3870: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
3880: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
3890: 7d 20 7b 31 7d 0a 7d 20 3b 23 20 65 6e 64 69 66  } {1}.} ;# endif
38a0: 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65  ..# Check to see
38b0: 20 74 68 61 74 20 64 61 74 61 20 6f 6e 20 6f 76   that data on ov
38c0: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 77 6f 72  erflow pages wor
38d0: 6b 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64  k correctly..#.d
38e0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31  o_test btree-8.1
38f0: 20 7b 0a 20 20 73 65 74 20 64 61 74 61 20 22 2a   {.  set data "*
3900: 2a 2a 20 54 68 69 73 20 69 73 20 61 20 76 65 72  ** This is a ver
3910: 79 20 6c 6f 6e 67 20 6b 65 79 20 22 0a 20 20 77  y long key ".  w
3920: 68 69 6c 65 20 7b 5b 73 74 72 69 6e 67 20 6c 65  hile {[string le
3930: 6e 67 74 68 20 24 64 61 74 61 5d 3c 31 32 33 34  ngth $data]<1234
3940: 7d 20 7b 61 70 70 65 6e 64 20 64 61 74 61 20 24  } {append data $
3950: 64 61 74 61 7d 0a 20 20 73 65 74 20 3a 3a 64 61  data}.  set ::da
3960: 74 61 20 24 64 61 74 61 0a 20 20 62 74 72 65 65  ta $data.  btree
3970: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 32 30  _insert $::c1 20
3980: 32 30 20 24 64 61 74 61 0a 7d 20 7b 7d 0a 23 62  20 $data.} {}.#b
3990: 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 20 24  tree_page_dump $
39a0: 3a 3a 62 31 20 31 0a 64 6f 5f 74 65 73 74 20 62  ::b1 1.do_test b
39b0: 74 72 65 65 2d 38 2e 31 2e 31 20 7b 0a 20 20 6c  tree-8.1.1 {.  l
39c0: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67  index [btree_pag
39d0: 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20  er_stats $::b1] 
39e0: 31 0a 7d 20 7b 31 7d 0a 23 62 74 72 65 65 5f 70  1.} {1}.#btree_p
39f0: 61 67 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a  ager_ref_dump $:
3a00: 3a 62 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  :b1.do_test btre
3a10: 65 2d 38 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f  e-8.2 {.  btree_
3a20: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 32 30  move_to $::c1 20
3a30: 32 30 0a 20 20 73 74 72 69 6e 67 20 6c 65 6e 67  20.  string leng
3a40: 74 68 20 5b 62 74 72 65 65 5f 64 61 74 61 20 24  th [btree_data $
3a50: 3a 3a 63 31 5d 0a 7d 20 5b 73 74 72 69 6e 67 20  ::c1].} [string 
3a60: 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 5d 0a  length $::data].
3a70: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3a80: 33 20 7b 0a 20 20 62 74 72 65 65 5f 64 61 74 61  3 {.  btree_data
3a90: 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61 74 61   $::c1.} $::data
3aa0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38  .do_test btree-8
3ab0: 2e 34 20 7b 0a 20 20 62 74 72 65 65 5f 64 65 6c  .4 {.  btree_del
3ac0: 65 74 65 20 24 3a 3a 63 31 0a 7d 20 7b 7d 0a 64  ete $::c1.} {}.d
3ad0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 34  o_test btree-8.4
3ae0: 2e 31 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62  .1 {.  lindex [b
3af0: 74 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a  tree_get_meta $:
3b00: 3a 62 31 5d 20 30 0a 7d 20 5b 65 78 70 72 20 7b  :b1] 0.} [expr {
3b10: 69 6e 74 28 28 5b 73 74 72 69 6e 67 20 6c 65 6e  int(([string len
3b20: 67 74 68 20 24 3a 3a 64 61 74 61 5d 2d 32 33 38  gth $::data]-238
3b30: 2b 31 30 31 39 29 2f 31 30 32 30 29 7d 5d 0a 64  +1019)/1020)}].d
3b40: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 34  o_test btree-8.4
3b50: 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 74  .2 {.  btree_int
3b60: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 24 3a 3a  egrity_check $::
3b70: 62 31 20 31 20 32 0a 7d 20 7b 7d 0a 64 6f 5f 74  b1 1 2.} {}.do_t
3b80: 65 73 74 20 62 74 72 65 65 2d 38 2e 35 20 7b 0a  est btree-8.5 {.
3b90: 20 20 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20    set data "*** 
3ba0: 54 68 69 73 20 69 73 20 61 6e 20 65 76 65 6e 20  This is an even 
3bb0: 6c 6f 6e 67 65 72 20 6b 65 79 20 22 0a 20 20 77  longer key ".  w
3bc0: 68 69 6c 65 20 7b 5b 73 74 72 69 6e 67 20 6c 65  hile {[string le
3bd0: 6e 67 74 68 20 24 64 61 74 61 5d 3c 32 30 30 30  ngth $data]<2000
3be0: 7d 20 7b 61 70 70 65 6e 64 20 64 61 74 61 20 24  } {append data $
3bf0: 64 61 74 61 7d 0a 20 20 61 70 70 65 6e 64 20 64  data}.  append d
3c00: 61 74 61 20 45 4e 44 0a 20 20 73 65 74 20 3a 3a  ata END.  set ::
3c10: 64 61 74 61 20 24 64 61 74 61 0a 20 20 62 74 72  data $data.  btr
3c20: 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20  ee_insert $::c1 
3c30: 32 30 33 30 20 24 64 61 74 61 0a 7d 20 7b 7d 0a  2030 $data.} {}.
3c40: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3c50: 36 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  6 {.  btree_move
3c60: 5f 74 6f 20 24 3a 3a 63 31 20 32 30 33 30 0a 20  _to $::c1 2030. 
3c70: 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b   string length [
3c80: 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31  btree_data $::c1
3c90: 5d 0a 7d 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  ].} [string leng
3ca0: 74 68 20 24 3a 3a 64 61 74 61 5d 0a 64 6f 5f 74  th $::data].do_t
3cb0: 65 73 74 20 62 74 72 65 65 2d 38 2e 37 20 7b 0a  est btree-8.7 {.
3cc0: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
3cd0: 63 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f  c1.} $::data.do_
3ce0: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 38 20 7b  test btree-8.8 {
3cf0: 0a 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20  .  btree_commit 
3d00: 24 3a 3a 62 31 0a 20 20 62 74 72 65 65 5f 64 61  $::b1.  btree_da
3d10: 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61  ta $::c1.} $::da
3d20: 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  ta.do_test btree
3d30: 2d 38 2e 39 2e 31 20 7b 0a 20 20 62 74 72 65 65  -8.9.1 {.  btree
3d40: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
3d50: 3a 63 31 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73  :c1.  btree_clos
3d60: 65 20 24 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a  e $::b1.  set ::
3d70: 62 31 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74  b1 [btree_open t
3d80: 65 73 74 31 2e 62 74 20 32 30 30 30 20 30 5d 0a  est1.bt 2000 0].
3d90: 20 20 73 65 74 20 3a 3a 63 31 20 5b 62 74 72 65    set ::c1 [btre
3da0: 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 31  e_cursor $::b1 1
3db0: 20 31 5d 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65   1].  btree_move
3dc0: 5f 74 6f 20 24 3a 3a 63 31 20 32 30 33 30 0a 20  _to $::c1 2030. 
3dd0: 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63   btree_data $::c
3de0: 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74  1.} $::data.do_t
3df0: 65 73 74 20 62 74 72 65 65 2d 38 2e 39 2e 32 20  est btree-8.9.2 
3e00: 7b 0a 20 20 62 74 72 65 65 5f 69 6e 74 65 67 72  {.  btree_integr
3e10: 69 74 79 5f 63 68 65 63 6b 20 24 3a 3a 62 31 20  ity_check $::b1 
3e20: 31 20 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  1 2.} {}.do_test
3e30: 20 62 74 72 65 65 2d 38 2e 31 30 20 7b 0a 20 20   btree-8.10 {.  
3e40: 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e  btree_begin_tran
3e50: 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20  saction $::b1.  
3e60: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a  btree_delete $::
3e70: 63 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  c1.} {}.do_test 
3e80: 62 74 72 65 65 2d 38 2e 31 31 20 7b 0a 20 20 6c  btree-8.11 {.  l
3e90: 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67 65 74  index [btree_get
3ea0: 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30 0a 7d  _meta $::b1] 0.}
3eb0: 20 7b 34 7d 0a 0a 23 20 4e 6f 77 20 63 68 65 63   {4}..# Now chec
3ec0: 6b 20 6f 75 74 20 6b 65 79 73 20 6f 6e 20 6f 76  k out keys on ov
3ed0: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 0a 23 0a  erflow pages..#.
3ee0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e  do_test btree-8.
3ef0: 31 32 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 6b  12.1 {.  set ::k
3f00: 65 79 70 72 65 66 69 78 20 22 54 68 69 73 20 69  eyprefix "This i
3f10: 73 20 61 20 6c 6f 6e 67 20 70 72 65 66 69 78 20  s a long prefix 
3f20: 74 6f 20 61 20 6b 65 79 20 22 0a 20 20 77 68 69  to a key ".  whi
3f30: 6c 65 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  le {[string leng
3f40: 74 68 20 24 3a 3a 6b 65 79 70 72 65 66 69 78 5d  th $::keyprefix]
3f50: 3c 32 35 36 7d 20 7b 61 70 70 65 6e 64 20 3a 3a  <256} {append ::
3f60: 6b 65 79 70 72 65 66 69 78 20 24 3a 3a 6b 65 79  keyprefix $::key
3f70: 70 72 65 66 69 78 7d 0a 20 20 62 74 72 65 65 5f  prefix}.  btree_
3f80: 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a  close_cursor $::
3f90: 63 31 0a 20 20 62 74 72 65 65 5f 63 6c 65 61 72  c1.  btree_clear
3fa0: 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20 32 0a 20  _table $::b1 2. 
3fb0: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 67   lindex [btree_g
3fc0: 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31 5d 20 30  et_meta $::b1] 0
3fd0: 0a 7d 20 7b 34 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {4}.do_test b
3fe0: 74 72 65 65 2d 38 2e 31 32 2e 32 20 7b 0a 20 20  tree-8.12.2 {.  
3ff0: 62 74 72 65 65 5f 69 6e 74 65 67 72 69 74 79 5f  btree_integrity_
4000: 63 68 65 63 6b 20 24 3a 3a 62 31 20 31 20 32 0a  check $::b1 1 2.
4010: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  } {}.do_test btr
4020: 65 65 2d 38 2e 31 32 2e 33 20 7b 0a 20 20 73 65  ee-8.12.3 {.  se
4030: 74 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75  t ::c1 [btree_cu
4040: 72 73 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a  rsor $::b1 2 1].
4050: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
4060: 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66  ::c1 ${::keypref
4070: 69 78 7d 31 20 31 0a 20 20 62 74 72 65 65 5f 66  ix}1 1.  btree_f
4080: 69 72 73 74 20 24 3a 3a 63 31 0a 20 20 62 74 72  irst $::c1.  btr
4090: 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20  ee_data $::c1.} 
40a0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  {1}.do_test btre
40b0: 65 2d 38 2e 31 33 20 7b 0a 20 20 62 74 72 65 65  e-8.13 {.  btree
40c0: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 24 7b 6b  _key $::c1.} ${k
40d0: 65 79 70 72 65 66 69 78 7d 31 0a 64 6f 5f 74 65  eyprefix}1.do_te
40e0: 73 74 20 62 74 72 65 65 2d 38 2e 31 34 20 7b 0a  st btree-8.14 {.
40f0: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
4100: 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66  ::c1 ${::keypref
4110: 69 78 7d 32 20 32 0a 20 20 62 74 72 65 65 5f 69  ix}2 2.  btree_i
4120: 6e 73 65 72 74 20 24 3a 3a 63 31 20 24 7b 3a 3a  nsert $::c1 ${::
4130: 6b 65 79 70 72 65 66 69 78 7d 33 20 33 0a 20 20  keyprefix}3 3.  
4140: 62 74 72 65 65 5f 6c 61 73 74 20 24 3a 3a 63 31  btree_last $::c1
4150: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
4160: 63 31 0a 7d 20 24 7b 6b 65 79 70 72 65 66 69 78  c1.} ${keyprefix
4170: 7d 33 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  }3.do_test btree
4180: 2d 38 2e 31 35 20 7b 0a 20 20 62 74 72 65 65 5f  -8.15 {.  btree_
4190: 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 24 7b  move_to $::c1 ${
41a0: 3a 3a 6b 65 79 70 72 65 66 69 78 7d 32 0a 20 20  ::keyprefix}2.  
41b0: 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31  btree_data $::c1
41c0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {2}.do_test b
41d0: 74 72 65 65 2d 38 2e 31 36 20 7b 0a 20 20 62 74  tree-8.16 {.  bt
41e0: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
41f0: 31 20 24 7b 3a 3a 6b 65 79 70 72 65 66 69 78 7d  1 ${::keyprefix}
4200: 31 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20 24  1.  btree_data $
4210: 3a 3a 63 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  ::c1.} {1}.do_te
4220: 73 74 20 62 74 72 65 65 2d 38 2e 31 37 20 7b 0a  st btree-8.17 {.
4230: 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20    btree_move_to 
4240: 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72 65  $::c1 ${::keypre
4250: 66 69 78 7d 33 0a 20 20 62 74 72 65 65 5f 64 61  fix}3.  btree_da
4260: 74 61 20 24 3a 3a 63 31 0a 7d 20 7b 33 7d 0a 64  ta $::c1.} {3}.d
4270: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 31  o_test btree-8.1
4280: 38 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74  8 {.  lindex [bt
4290: 72 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a  ree_get_meta $::
42a0: 62 31 5d 20 30 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  b1] 0.} {1}.do_t
42b0: 65 73 74 20 62 74 72 65 65 2d 38 2e 31 39 20 7b  est btree-8.19 {
42c0: 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f  .  btree_move_to
42d0: 20 24 3a 3a 63 31 20 24 7b 3a 3a 6b 65 79 70 72   $::c1 ${::keypr
42e0: 65 66 69 78 7d 32 0a 20 20 62 74 72 65 65 5f 6b  efix}2.  btree_k
42f0: 65 79 20 24 3a 3a 63 31 0a 7d 20 24 7b 3a 3a 6b  ey $::c1.} ${::k
4300: 65 79 70 72 65 66 69 78 7d 32 0a 23 62 74 72 65  eyprefix}2.#btre
4310: 65 5f 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62  e_page_dump $::b
4320: 31 20 32 0a 64 6f 5f 74 65 73 74 20 62 74 72 65  1 2.do_test btre
4330: 65 2d 38 2e 32 30 20 7b 0a 20 20 62 74 72 65 65  e-8.20 {.  btree
4340: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20  _delete $::c1.  
4350: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
4360: 0a 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a  .  btree_key $::
4370: 63 31 0a 7d 20 24 7b 3a 3a 6b 65 79 70 72 65 66  c1.} ${::keypref
4380: 69 78 7d 33 0a 23 62 74 72 65 65 5f 70 61 67 65  ix}3.#btree_page
4390: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f  _dump $::b1 2.do
43a0: 5f 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32 31  _test btree-8.21
43b0: 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72   {.  lindex [btr
43c0: 65 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62  ee_get_meta $::b
43d0: 31 5d 20 30 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  1] 0.} {2}.do_te
43e0: 73 74 20 62 74 72 65 65 2d 38 2e 32 32 20 7b 0a  st btree-8.22 {.
43f0: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
4400: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
4410: 31 5d 20 31 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  1] 1.} {2}.do_te
4420: 73 74 20 62 74 72 65 65 2d 38 2e 32 33 2e 31 20  st btree-8.23.1 
4430: 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  {.  btree_close_
4440: 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62  cursor $::c1.  b
4450: 74 72 65 65 5f 64 72 6f 70 5f 74 61 62 6c 65 20  tree_drop_table 
4460: 24 3a 3a 62 31 20 32 0a 20 20 62 74 72 65 65 5f  $::b1 2.  btree_
4470: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
4480: 24 3a 3a 62 31 20 31 0a 7d 20 7b 7d 0a 64 6f 5f  $::b1 1.} {}.do_
4490: 74 65 73 74 20 62 74 72 65 65 2d 38 2e 32 33 2e  test btree-8.23.
44a0: 32 20 7b 0a 20 20 62 74 72 65 65 5f 63 72 65 61  2 {.  btree_crea
44b0: 74 65 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20 30  te_table $::b1 0
44c0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62  .} {2}.do_test b
44d0: 74 72 65 65 2d 38 2e 32 33 2e 33 20 7b 0a 20 20  tree-8.23.3 {.  
44e0: 73 65 74 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f  set ::c1 [btree_
44f0: 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 32 20 31  cursor $::b1 2 1
4500: 5d 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  ].  lindex [btre
4510: 65 5f 67 65 74 5f 6d 65 74 61 20 24 3a 3a 62 31  e_get_meta $::b1
4520: 5d 20 30 0a 7d 20 7b 34 7d 0a 64 6f 5f 74 65 73  ] 0.} {4}.do_tes
4530: 74 20 62 74 72 65 65 2d 38 2e 32 34 20 7b 0a 20  t btree-8.24 {. 
4540: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70   lindex [btree_p
4550: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31  ager_stats $::b1
4560: 5d 20 31 0a 7d 20 7b 32 7d 0a 23 62 74 72 65 65  ] 1.} {2}.#btree
4570: 5f 70 61 67 65 72 5f 72 65 66 5f 64 75 6d 70 20  _pager_ref_dump 
4580: 24 3a 3a 62 31 0a 64 6f 5f 74 65 73 74 20 62 74  $::b1.do_test bt
4590: 72 65 65 2d 38 2e 32 35 20 7b 0a 20 20 62 74 72  ree-8.25 {.  btr
45a0: 65 65 5f 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ee_integrity_che
45b0: 63 6b 20 24 3a 3a 62 31 20 31 20 32 0a 7d 20 7b  ck $::b1 1 2.} {
45c0: 7d 0a 0a 23 20 43 68 65 63 6b 20 70 61 67 65 20  }..# Check page 
45d0: 73 70 6c 69 74 74 69 6e 67 20 6c 6f 67 69 63 0a  splitting logic.
45e0: 23 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  #.do_test btree-
45f0: 39 2e 31 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74  9.1 {.  for {set
4600: 20 69 20 31 7d 20 7b 24 69 3c 3d 31 39 7d 20 7b   i 1} {$i<=19} {
4610: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65  incr i} {.    se
4620: 74 20 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25 30  t key [format %0
4630: 33 64 20 24 69 5d 0a 20 20 20 20 73 65 74 20 64  3d $i].    set d
4640: 61 74 61 20 22 2a 2a 2a 20 24 6b 65 79 20 2a 2a  ata "*** $key **
4650: 2a 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20  * $key *** $key 
4660: 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 22 0a 20 20  *** $key ***".  
4670: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
4680: 3a 3a 63 31 20 24 6b 65 79 20 24 64 61 74 61 0a  ::c1 $key $data.
4690: 20 20 7d 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f    }.} {}.#btree_
46a0: 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  tree_dump $::b1 
46b0: 32 0a 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72  2.#btree_pager_r
46c0: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 23 73  ef_dump $::b1.#s
46d0: 65 74 20 70 61 67 65 72 5f 72 65 66 69 6e 66 6f  et pager_refinfo
46e0: 5f 65 6e 61 62 6c 65 20 31 0a 64 6f 5f 74 65 73  _enable 1.do_tes
46f0: 74 20 62 74 72 65 65 2d 39 2e 32 20 7b 0a 20 20  t btree-9.2 {.  
4700: 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a  btree_insert $::
4710: 63 31 20 30 32 30 20 7b 2a 2a 2a 20 30 32 30 20  c1 020 {*** 020 
4720: 2a 2a 2a 20 30 32 30 20 2a 2a 2a 20 30 32 30 20  *** 020 *** 020 
4730: 2a 2a 2a 20 30 32 30 20 2a 2a 2a 7d 0a 20 20 73  *** 020 ***}.  s
4740: 65 6c 65 63 74 5f 6b 65 79 73 20 24 3a 3a 63 31  elect_keys $::c1
4750: 0a 7d 20 7b 30 30 31 20 30 30 32 20 30 30 33 20  .} {001 002 003 
4760: 30 30 34 20 30 30 35 20 30 30 36 20 30 30 37 20  004 005 006 007 
4770: 30 30 38 20 30 30 39 20 30 31 30 20 30 31 31 20  008 009 010 011 
4780: 30 31 32 20 30 31 33 20 30 31 34 20 30 31 35 20  012 013 014 015 
4790: 30 31 36 20 30 31 37 20 30 31 38 20 30 31 39 20  016 017 018 019 
47a0: 30 32 30 7d 0a 23 62 74 72 65 65 5f 70 61 67 65  020}.#btree_page
47b0: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 23 62  _dump $::b1 2.#b
47c0: 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66 5f 64  tree_pager_ref_d
47d0: 75 6d 70 20 24 3a 3a 62 31 0a 23 73 65 74 20 70  ump $::b1.#set p
47e0: 61 67 65 72 5f 72 65 66 69 6e 66 6f 5f 65 6e 61  ager_refinfo_ena
47f0: 62 6c 65 20 30 0a 0a 23 20 54 68 65 20 70 72 65  ble 0..# The pre
4800: 76 69 6f 75 73 20 22 73 65 6c 65 63 74 5f 6b 65  vious "select_ke
4810: 79 73 22 20 63 6f 6d 6d 61 6e 64 20 6c 65 66 74  ys" command left
4820: 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
4830: 74 69 6e 67 20 61 74 20 74 68 65 20 72 6f 6f 74  ting at the root
4840: 0a 23 20 70 61 67 65 2e 20 20 53 6f 20 74 68 65  .# page.  So the
4850: 72 65 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  re should only b
4860: 65 20 74 77 6f 20 70 61 67 65 73 20 63 68 65 63  e two pages chec
4870: 6b 65 64 20 6f 75 74 2e 20 20 32 20 28 74 68 65  ked out.  2 (the
4880: 20 72 6f 6f 74 29 20 61 6e 64 0a 23 20 70 61 67   root) and.# pag
4890: 65 20 31 2e 0a 64 6f 5f 74 65 73 74 20 62 74 72  e 1..do_test btr
48a0: 65 65 2d 39 2e 32 2e 31 20 7b 0a 20 20 6c 69 6e  ee-9.2.1 {.  lin
48b0: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
48c0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
48d0: 7d 20 7b 32 7d 0a 66 6f 72 20 7b 73 65 74 20 69  } {2}.for {set i
48e0: 20 31 7d 20 7b 24 69 3c 3d 32 30 7d 20 7b 69 6e   1} {$i<=20} {in
48f0: 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  cr i} {.  do_tes
4900: 74 20 62 74 72 65 65 2d 39 2e 33 2e 24 69 2e 31  t btree-9.3.$i.1
4910: 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 62 74   [subst {.    bt
4920: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
4930: 31 20 5b 66 6f 72 6d 61 74 20 25 30 33 64 20 24  1 [format %03d $
4940: 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 6b 65 79  i].    btree_key
4950: 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b 66 6f 72   $::c1.  }] [for
4960: 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 64  mat %03d $i].  d
4970: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e 33  o_test btree-9.3
4980: 2e 24 69 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20  .$i.2 [subst {. 
4990: 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f     btree_move_to
49a0: 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61 74 20 25   $::c1 [format %
49b0: 30 33 64 20 24 69 5d 0a 20 20 20 20 73 74 72 69  03d $i].    stri
49c0: 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74 72 65 65  ng range \[btree
49d0: 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d 20 30 20  _data $::c1\] 0 
49e0: 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20 5b 66 6f  10.  }] "*** [fo
49f0: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 20 2a 2a  rmat %03d $i] **
4a00: 2a 22 0a 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72  *".}.do_test btr
4a10: 65 65 2d 39 2e 34 2e 31 20 7b 0a 20 20 6c 69 6e  ee-9.4.1 {.  lin
4a20: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
4a30: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
4a40: 7d 20 7b 32 7d 0a 0a 23 20 43 68 65 63 6b 20 74  } {2}..# Check t
4a50: 68 65 20 70 61 67 65 20 6a 6f 69 6e 69 6e 67 20  he page joining 
4a60: 6c 6f 67 69 63 2e 0a 23 0a 23 62 74 72 65 65 5f  logic..#.#btree_
4a70: 70 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  page_dump $::b1 
4a80: 32 0a 23 62 74 72 65 65 5f 70 61 67 65 72 5f 72  2.#btree_pager_r
4a90: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 64 6f  ef_dump $::b1.do
4aa0: 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e 34 2e  _test btree-9.4.
4ab0: 32 20 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65  2 {.  btree_move
4ac0: 5f 74 6f 20 24 3a 3a 63 31 20 30 30 35 0a 20 20  _to $::c1 005.  
4ad0: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a  btree_delete $::
4ae0: 63 31 0a 7d 20 7b 7d 0a 23 62 74 72 65 65 5f 70  c1.} {}.#btree_p
4af0: 61 67 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32  age_dump $::b1 2
4b00: 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b  .for {set i 1} {
4b10: 24 69 3c 3d 31 39 7d 20 7b 69 6e 63 72 20 69 7d  $i<=19} {incr i}
4b20: 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 35 7d 20   {.  if {$i==5} 
4b30: 63 6f 6e 74 69 6e 75 65 0a 20 20 64 6f 5f 74 65  continue.  do_te
4b40: 73 74 20 62 74 72 65 65 2d 39 2e 35 2e 24 69 2e  st btree-9.5.$i.
4b50: 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 62  1 [subst {.    b
4b60: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
4b70: 63 31 20 5b 66 6f 72 6d 61 74 20 25 30 33 64 20  c1 [format %03d 
4b80: 24 69 5d 0a 20 20 20 20 62 74 72 65 65 5f 6b 65  $i].    btree_ke
4b90: 79 20 24 3a 3a 63 31 0a 20 20 7d 5d 20 5b 66 6f  y $::c1.  }] [fo
4ba0: 72 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20  rmat %03d $i].  
4bb0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 39 2e  do_test btree-9.
4bc0: 35 2e 24 69 2e 32 20 5b 73 75 62 73 74 20 7b 0a  5.$i.2 [subst {.
4bd0: 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74      btree_move_t
4be0: 6f 20 24 3a 3a 63 31 20 5b 66 6f 72 6d 61 74 20  o $::c1 [format 
4bf0: 25 30 33 64 20 24 69 5d 0a 20 20 20 20 73 74 72  %03d $i].    str
4c00: 69 6e 67 20 72 61 6e 67 65 20 5c 5b 62 74 72 65  ing range \[btre
4c10: 65 5f 64 61 74 61 20 24 3a 3a 63 31 5c 5d 20 30  e_data $::c1\] 0
4c20: 20 31 30 0a 20 20 7d 5d 20 22 2a 2a 2a 20 5b 66   10.  }] "*** [f
4c30: 6f 72 6d 61 74 20 25 30 33 64 20 24 69 5d 20 2a  ormat %03d $i] *
4c40: 2a 2a 22 0a 7d 0a 23 62 74 72 65 65 5f 70 61 67  **".}.#btree_pag
4c50: 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a 62  er_ref_dump $::b
4c60: 31 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  1.do_test btree-
4c70: 39 2e 36 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c  9.6 {.  btree_cl
4c80: 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31  ose_cursor $::c1
4c90: 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65  .  lindex [btree
4ca0: 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a  _pager_stats $::
4cb0: 62 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  b1] 1.} {1}.do_t
4cc0: 65 73 74 20 62 74 72 65 65 2d 39 2e 37 20 7b 0a  est btree-9.7 {.
4cd0: 20 20 62 74 72 65 65 5f 69 6e 74 65 67 72 69 74    btree_integrit
4ce0: 79 5f 63 68 65 63 6b 20 24 3a 3a 62 31 20 31 20  y_check $::b1 1 
4cf0: 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62  2.} {}.do_test b
4d00: 74 72 65 65 2d 39 2e 38 20 7b 0a 20 20 62 74 72  tree-9.8 {.  btr
4d10: 65 65 5f 72 6f 6c 6c 62 61 63 6b 20 24 3a 3a 62  ee_rollback $::b
4d20: 31 0a 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65  1.  lindex [btre
4d30: 65 5f 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a  e_pager_stats $:
4d40: 3a 62 31 5d 20 31 0a 7d 20 7b 30 7d 0a 64 6f 5f  :b1] 1.} {0}.do_
4d50: 74 65 73 74 20 62 74 72 65 65 2d 39 2e 39 20 7b  test btree-9.9 {
4d60: 0a 20 20 62 74 72 65 65 5f 69 6e 74 65 67 72 69  .  btree_integri
4d70: 74 79 5f 63 68 65 63 6b 20 24 3a 3a 62 31 20 31  ty_check $::b1 1
4d80: 20 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   2.} {}.do_test 
4d90: 62 74 72 65 65 2d 39 2e 31 30 20 7b 0a 20 20 62  btree-9.10 {.  b
4da0: 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 31  tree_close $::b1
4db0: 0a 20 20 73 65 74 20 3a 3a 62 31 20 5b 62 74 72  .  set ::b1 [btr
4dc0: 65 65 5f 6f 70 65 6e 20 74 65 73 74 31 2e 62 74  ee_open test1.bt
4dd0: 20 32 30 30 30 20 30 5d 0a 20 20 62 74 72 65 65   2000 0].  btree
4de0: 5f 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  _integrity_check
4df0: 20 24 3a 3a 62 31 20 31 20 32 0a 7d 20 7b 7d 0a   $::b1 1 2.} {}.
4e00: 0a 23 20 43 72 65 61 74 65 20 61 20 74 72 65 65  .# Create a tree
4e10: 20 6f 66 20 64 65 70 74 68 20 74 77 6f 2e 20 20   of depth two.  
4e20: 54 68 61 74 20 69 73 2c 20 74 68 65 72 65 20 69  That is, there i
4e30: 73 20 61 20 73 69 6e 67 6c 65 20 64 69 76 69 64  s a single divid
4e40: 65 72 20 65 6e 74 72 79 0a 23 20 6f 6e 20 74 68  er entry.# on th
4e50: 65 20 72 6f 6f 74 20 70 61 67 65 73 20 61 6e 64  e root pages and
4e60: 20 74 77 6f 20 6c 65 61 66 20 70 61 67 65 73 2e   two leaf pages.
4e70: 20 20 54 68 65 6e 20 64 65 6c 65 74 65 20 74 68    Then delete th
4e80: 65 20 64 69 76 69 64 65 72 20 65 6e 74 72 79 0a  e divider entry.
4e90: 23 20 73 65 65 20 77 68 61 74 20 68 61 70 70 65  # see what happe
4ea0: 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 62 74  ns..#.do_test bt
4eb0: 72 65 65 2d 31 30 2e 31 20 7b 0a 20 20 62 74 72  ree-10.1 {.  btr
4ec0: 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  ee_begin_transac
4ed0: 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 62 74 72  tion $::b1.  btr
4ee0: 65 65 5f 63 6c 65 61 72 5f 74 61 62 6c 65 20 24  ee_clear_table $
4ef0: 3a 3a 62 31 20 32 0a 20 20 6c 69 6e 64 65 78 20  ::b1 2.  lindex 
4f00: 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74 61  [btree_pager_sta
4f10: 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b 31  ts $::b1] 1.} {1
4f20: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
4f30: 31 30 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 63  10.2 {.  set ::c
4f40: 31 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20  1 [btree_cursor 
4f50: 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20 6c 69 6e  $::b1 2 1].  lin
4f60: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
4f70: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
4f80: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {2}.do_test bt
4f90: 72 65 65 2d 31 30 2e 33 20 7b 0a 20 20 66 6f 72  ree-10.3 {.  for
4fa0: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
4fb0: 33 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  30} {incr i} {. 
4fc0: 20 20 20 73 65 74 20 6b 65 79 20 5b 66 6f 72 6d     set key [form
4fd0: 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 20 20  at %03d $i].    
4fe0: 73 65 74 20 64 61 74 61 20 22 2a 2a 2a 20 24 6b  set data "*** $k
4ff0: 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20  ey *** $key *** 
5000: 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a  $key *** $key **
5010: 2a 22 0a 20 20 20 20 62 74 72 65 65 5f 69 6e 73  *".    btree_ins
5020: 65 72 74 20 24 3a 3a 63 31 20 24 6b 65 79 20 24  ert $::c1 $key $
5030: 64 61 74 61 0a 20 20 7d 0a 20 20 73 65 6c 65 63  data.  }.  selec
5040: 74 5f 6b 65 79 73 20 24 3a 3a 63 31 0a 7d 20 7b  t_keys $::c1.} {
5050: 30 30 31 20 30 30 32 20 30 30 33 20 30 30 34 20  001 002 003 004 
5060: 30 30 35 20 30 30 36 20 30 30 37 20 30 30 38 20  005 006 007 008 
5070: 30 30 39 20 30 31 30 20 30 31 31 20 30 31 32 20  009 010 011 012 
5080: 30 31 33 20 30 31 34 20 30 31 35 20 30 31 36 20  013 014 015 016 
5090: 30 31 37 20 30 31 38 20 30 31 39 20 30 32 30 20  017 018 019 020 
50a0: 30 32 31 20 30 32 32 20 30 32 33 20 30 32 34 20  021 022 023 024 
50b0: 30 32 35 20 30 32 36 20 30 32 37 20 30 32 38 20  025 026 027 028 
50c0: 30 32 39 20 30 33 30 7d 0a 23 62 74 72 65 65 5f  029 030}.#btree_
50d0: 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20  tree_dump $::b1 
50e0: 32 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  2.do_test btree-
50f0: 31 30 2e 34 20 7b 0a 20 20 23 20 54 68 65 20 64  10.4 {.  # The d
5100: 69 76 69 64 65 72 20 65 6e 74 72 79 20 69 73 20  ivider entry is 
5110: 30 31 32 2e 20 20 54 68 69 73 20 69 73 20 66 6f  012.  This is fo
5120: 75 6e 64 20 62 79 20 75 6e 63 6f 6d 6d 65 6e 74  und by uncomment
5130: 69 6e 67 20 74 68 65 20 0a 20 20 23 20 62 74 72  ing the .  # btr
5140: 65 65 5f 74 72 65 65 5f 64 75 6d 70 20 63 61 6c  ee_tree_dump cal
5150: 6c 20 61 62 6f 76 65 20 61 6e 64 20 6c 6f 6f 6b  l above and look
5160: 69 6e 67 20 61 74 20 74 68 65 20 74 72 65 65 2e  ing at the tree.
5170: 20 20 49 66 20 74 68 65 20 70 61 67 65 20 73 69    If the page si
5180: 7a 65 0a 20 20 23 20 63 68 61 6e 67 65 73 2c 20  ze.  # changes, 
5190: 74 68 69 73 20 74 65 73 74 20 77 69 6c 6c 20 6e  this test will n
51a0: 6f 20 6c 6f 6e 67 65 72 20 77 6f 72 6b 2e 0a 20  o longer work.. 
51b0: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
51c0: 3a 3a 63 31 20 30 31 32 0a 20 20 62 74 72 65 65  ::c1 012.  btree
51d0: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 0a 20 20  _delete $::c1.  
51e0: 73 65 6c 65 63 74 5f 6b 65 79 73 20 24 3a 3a 63  select_keys $::c
51f0: 31 0a 7d 20 7b 30 30 31 20 30 30 32 20 30 30 33  1.} {001 002 003
5200: 20 30 30 34 20 30 30 35 20 30 30 36 20 30 30 37   004 005 006 007
5210: 20 30 30 38 20 30 30 39 20 30 31 30 20 30 31 31   008 009 010 011
5220: 20 30 31 33 20 30 31 34 20 30 31 35 20 30 31 36   013 014 015 016
5230: 20 30 31 37 20 30 31 38 20 30 31 39 20 30 32 30   017 018 019 020
5240: 20 30 32 31 20 30 32 32 20 30 32 33 20 30 32 34   021 022 023 024
5250: 20 30 32 35 20 30 32 36 20 30 32 37 20 30 32 38   025 026 027 028
5260: 20 30 32 39 20 30 33 30 7d 0a 23 62 74 72 65 65   029 030}.#btree
5270: 5f 70 61 67 65 72 5f 72 65 66 5f 64 75 6d 70 20  _pager_ref_dump 
5280: 24 3a 3a 62 31 0a 23 62 74 72 65 65 5f 74 72 65  $::b1.#btree_tre
5290: 65 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 66  e_dump $::b1 2.f
52a0: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
52b0: 3c 3d 33 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=30} {incr i} {
52c0: 0a 20 20 23 20 43 68 65 63 6b 20 74 68 65 20 6e  .  # Check the n
52d0: 75 6d 62 65 72 20 6f 66 20 75 6e 72 65 66 65 72  umber of unrefer
52e0: 65 6e 63 65 20 70 61 67 65 73 2e 20 20 54 68 69  ence pages.  Thi
52f0: 73 20 73 68 6f 75 6c 64 20 62 65 20 33 20 69 6e  s should be 3 in
5300: 20 6d 6f 73 74 20 63 61 73 65 73 2c 0a 20 20 23   most cases,.  #
5310: 20 62 75 74 20 32 20 77 68 65 6e 20 74 68 65 20   but 2 when the 
5320: 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
5330: 6e 67 20 74 6f 20 74 68 65 20 64 69 76 69 64 65  ng to the divide
5340: 72 20 65 6e 74 72 79 20 77 68 69 63 68 20 69 73  r entry which is
5350: 20 6e 6f 77 20 30 31 33 2e 0a 20 20 64 6f 5f 74   now 013..  do_t
5360: 65 73 74 20 62 74 72 65 65 2d 31 30 2e 35 2e 24  est btree-10.5.$
5370: 69 20 7b 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f  i {.    btree_mo
5380: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 5b 66 6f 72  ve_to $::c1 [for
5390: 6d 61 74 20 25 30 33 64 20 24 69 5d 0a 20 20 20  mat %03d $i].   
53a0: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70   lindex [btree_p
53b0: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31  ager_stats $::b1
53c0: 5d 20 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24  ] 1.  } [expr {$
53d0: 69 3d 3d 31 33 3f 32 3a 33 7d 5d 0a 20 20 23 62  i==13?2:3}].  #b
53e0: 74 72 65 65 5f 70 61 67 65 72 5f 72 65 66 5f 64  tree_pager_ref_d
53f0: 75 6d 70 20 24 3a 3a 62 31 0a 20 20 23 62 74 72  ump $::b1.  #btr
5400: 65 65 5f 74 72 65 65 5f 64 75 6d 70 20 24 3a 3a  ee_tree_dump $::
5410: 62 31 20 32 0a 7d 0a 0a 23 20 43 72 65 61 74 65  b1 2.}..# Create
5420: 20 61 20 74 72 65 65 20 77 69 74 68 20 6c 6f 74   a tree with lot
5430: 73 20 6d 6f 72 65 20 70 61 67 65 73 0a 23 0a 63  s more pages.#.c
5440: 61 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a 64 61  atch {unset ::da
5450: 74 61 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74  ta}.catch {unset
5460: 20 3a 3a 6b 65 79 7d 0a 66 6f 72 20 7b 73 65 74   ::key}.for {set
5470: 20 69 20 33 31 7d 20 7b 24 69 3c 3d 32 30 30 30   i 31} {$i<=2000
5480: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 64  } {incr i} {.  d
5490: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e  o_test btree-11.
54a0: 31 2e 24 69 2e 31 20 7b 0a 20 20 20 20 73 65 74  1.$i.1 {.    set
54b0: 20 6b 65 79 20 5b 66 6f 72 6d 61 74 20 25 30 33   key [format %03
54c0: 64 20 24 69 5d 0a 20 20 20 20 73 65 74 20 3a 3a  d $i].    set ::
54d0: 64 61 74 61 20 22 2a 2a 2a 20 24 6b 65 79 20 2a  data "*** $key *
54e0: 2a 2a 20 24 6b 65 79 20 2a 2a 2a 20 24 6b 65 79  ** $key *** $key
54f0: 20 2a 2a 2a 20 24 6b 65 79 20 2a 2a 2a 22 0a 20   *** $key ***". 
5500: 20 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20     btree_insert 
5510: 24 3a 3a 63 31 20 24 6b 65 79 20 24 64 61 74 61  $::c1 $key $data
5520: 0a 20 20 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f  .    btree_move_
5530: 74 6f 20 24 3a 3a 63 31 20 24 6b 65 79 0a 20 20  to $::c1 $key.  
5540: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
5550: 31 0a 20 20 7d 20 5b 66 6f 72 6d 61 74 20 25 30  1.  } [format %0
5560: 33 64 20 24 69 5d 0a 20 20 64 6f 5f 74 65 73 74  3d $i].  do_test
5570: 20 62 74 72 65 65 2d 31 31 2e 31 2e 24 69 2e 32   btree-11.1.$i.2
5580: 20 7b 0a 20 20 20 20 62 74 72 65 65 5f 64 61 74   {.    btree_dat
5590: 61 20 24 3a 3a 63 31 0a 20 20 7d 20 24 3a 3a 64  a $::c1.  } $::d
55a0: 61 74 61 0a 20 20 73 65 74 20 3a 3a 6b 65 79 20  ata.  set ::key 
55b0: 5b 66 6f 72 6d 61 74 20 25 30 33 64 20 5b 65 78  [format %03d [ex
55c0: 70 72 20 7b 24 69 2f 32 7d 5d 5d 0a 20 20 69 66  pr {$i/2}]].  if
55d0: 20 7b 24 3a 3a 6b 65 79 3d 3d 22 30 31 32 22 7d   {$::key=="012"}
55e0: 20 7b 73 65 74 20 3a 3a 6b 65 79 20 30 31 33 7d   {set ::key 013}
55f0: 0a 20 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65  .  do_test btree
5600: 2d 31 31 2e 31 2e 24 69 2e 33 20 7b 0a 20 20 20  -11.1.$i.3 {.   
5610: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
5620: 3a 3a 63 31 20 24 3a 3a 6b 65 79 0a 20 20 20 20  ::c1 $::key.    
5630: 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a  btree_key $::c1.
5640: 20 20 7d 20 24 3a 3a 6b 65 79 0a 7d 0a 63 61 74    } $::key.}.cat
5650: 63 68 20 7b 75 6e 73 65 74 20 3a 3a 64 61 74 61  ch {unset ::data
5660: 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a  }.catch {unset :
5670: 3a 6b 65 79 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  :key}..# Make su
5680: 72 65 20 6f 75 72 20 72 65 66 65 72 65 6e 63 65  re our reference
5690: 20 63 6f 75 6e 74 20 69 73 20 73 74 69 6c 6c 20   count is still 
56a0: 63 6f 72 72 65 63 74 2e 0a 23 0a 64 6f 5f 74 65  correct..#.do_te
56b0: 73 74 20 62 74 72 65 65 2d 31 31 2e 32 20 7b 0a  st btree-11.2 {.
56c0: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75    btree_close_cu
56d0: 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 6c 69 6e  rsor $::c1.  lin
56e0: 64 65 78 20 5b 62 74 72 65 65 5f 70 61 67 65 72  dex [btree_pager
56f0: 5f 73 74 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a  _stats $::b1] 1.
5700: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 62 74  } {1}.do_test bt
5710: 72 65 65 2d 31 31 2e 33 20 7b 0a 20 20 73 65 74  ree-11.3 {.  set
5720: 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72   ::c1 [btree_cur
5730: 73 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20  sor $::b1 2 1]. 
5740: 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f 70   lindex [btree_p
5750: 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62 31  ager_stats $::b1
5760: 5d 20 31 0a 7d 20 7b 32 7d 0a 0a 23 20 44 65 6c  ] 1.} {2}..# Del
5770: 65 74 65 20 74 68 65 20 64 69 76 69 64 65 72 73  ete the dividers
5780: 20 6f 6e 20 74 68 65 20 72 6f 6f 74 20 70 61 67   on the root pag
5790: 65 0a 23 0a 23 62 74 72 65 65 5f 70 61 67 65 5f  e.#.#btree_page_
57a0: 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 64 6f 5f  dump $::b1 2.do_
57b0: 74 65 73 74 20 62 74 72 65 65 2d 31 31 2e 34 20  test btree-11.4 
57c0: 7b 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  {.  btree_move_t
57d0: 6f 20 24 3a 3a 63 31 20 31 36 36 37 0a 20 20 62  o $::c1 1667.  b
57e0: 74 72 65 65 5f 64 65 6c 65 74 65 20 24 3a 3a 63  tree_delete $::c
57f0: 31 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74  1.  btree_move_t
5800: 6f 20 24 3a 3a 63 31 20 31 36 36 37 0a 20 20 73  o $::c1 1667.  s
5810: 65 74 20 6b 20 5b 62 74 72 65 65 5f 6b 65 79 20  et k [btree_key 
5820: 24 3a 3a 63 31 5d 0a 20 20 69 66 20 7b 24 6b 3d  $::c1].  if {$k=
5830: 3d 31 36 36 36 7d 20 7b 0a 20 20 20 20 73 65 74  =1666} {.    set
5840: 20 6b 20 5b 62 74 72 65 65 5f 6e 65 78 74 20 24   k [btree_next $
5850: 3a 3a 63 31 5d 0a 20 20 7d 0a 20 20 62 74 72 65  ::c1].  }.  btre
5860: 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 31  e_key $::c1.} {1
5870: 36 36 38 7d 0a 23 62 74 72 65 65 5f 70 61 67 65  668}.#btree_page
5880: 5f 64 75 6d 70 20 24 3a 3a 62 31 20 32 0a 0a 23  _dump $::b1 2..#
5890: 20 43 68 61 6e 67 65 20 74 68 65 20 64 61 74 61   Change the data
58a0: 20 6f 6e 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   on an intermedi
58b0: 61 74 65 20 6e 6f 64 65 20 73 75 63 68 20 74 68  ate node such th
58c0: 61 74 20 74 68 65 20 6e 6f 64 65 20 62 65 63 6f  at the node beco
58d0: 6d 65 73 20 6f 76 65 72 66 75 6c 6c 0a 23 20 61  mes overfull.# a
58e0: 6e 64 20 68 61 73 20 74 6f 20 73 70 6c 69 74 2e  nd has to split.
58f0: 20 20 57 65 20 68 61 70 70 65 6e 20 74 6f 20 6b    We happen to k
5900: 6e 6f 77 20 74 68 61 74 20 69 6e 74 65 72 6d 65  now that interme
5910: 64 69 61 74 65 20 6e 6f 64 65 73 20 65 78 69 73  diate nodes exis
5920: 74 20 6f 6e 0a 23 20 33 33 37 2c 20 34 30 31 20  t on.# 337, 401 
5930: 61 6e 64 20 34 36 35 20 62 79 20 74 68 65 20 62  and 465 by the b
5940: 74 72 65 65 5f 70 61 67 65 5f 64 75 6d 70 73 20  tree_page_dumps 
5950: 61 62 6f 76 65 0a 23 0a 63 61 74 63 68 20 7b 75  above.#.catch {u
5960: 6e 73 65 74 20 3a 3a 64 61 74 61 7d 0a 73 65 74  nset ::data}.set
5970: 20 3a 3a 64 61 74 61 20 7b 54 68 69 73 20 69 73   ::data {This is
5980: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 61 20 76   going to be a v
5990: 65 72 79 20 6c 6f 6e 67 20 64 61 74 61 20 73 65  ery long data se
59a0: 67 6d 65 6e 74 7d 0a 61 70 70 65 6e 64 20 3a 3a  gment}.append ::
59b0: 64 61 74 61 20 24 3a 3a 64 61 74 61 0a 61 70 70  data $::data.app
59c0: 65 6e 64 20 3a 3a 64 61 74 61 20 24 3a 3a 64 61  end ::data $::da
59d0: 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  ta.do_test btree
59e0: 2d 31 32 2e 31 20 7b 0a 20 20 62 74 72 65 65 5f  -12.1 {.  btree_
59f0: 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 33 33 37  insert $::c1 337
5a00: 20 24 3a 3a 64 61 74 61 0a 20 20 62 74 72 65 65   $::data.  btree
5a10: 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63 31 20 33  _move_to $::c1 3
5a20: 33 37 0a 20 20 62 74 72 65 65 5f 64 61 74 61 20  37.  btree_data 
5a30: 24 3a 3a 63 31 0a 7d 20 24 3a 3a 64 61 74 61 0a  $::c1.} $::data.
5a40: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 32  do_test btree-12
5a50: 2e 32 20 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73  .2 {.  btree_ins
5a60: 65 72 74 20 24 3a 3a 63 31 20 34 30 31 20 24 3a  ert $::c1 401 $:
5a70: 3a 64 61 74 61 0a 20 20 62 74 72 65 65 5f 6d 6f  :data.  btree_mo
5a80: 76 65 5f 74 6f 20 24 3a 3a 63 31 20 34 30 31 0a  ve_to $::c1 401.
5a90: 20 20 62 74 72 65 65 5f 64 61 74 61 20 24 3a 3a    btree_data $::
5aa0: 63 31 0a 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f  c1.} $::data.do_
5ab0: 74 65 73 74 20 62 74 72 65 65 2d 31 32 2e 33 20  test btree-12.3 
5ac0: 7b 0a 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74  {.  btree_insert
5ad0: 20 24 3a 3a 63 31 20 34 36 35 20 24 3a 3a 64 61   $::c1 465 $::da
5ae0: 74 61 0a 20 20 62 74 72 65 65 5f 6d 6f 76 65 5f  ta.  btree_move_
5af0: 74 6f 20 24 3a 3a 63 31 20 34 36 35 0a 20 20 62  to $::c1 465.  b
5b00: 74 72 65 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a  tree_data $::c1.
5b10: 7d 20 24 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73  } $::data.do_tes
5b20: 74 20 62 74 72 65 65 2d 31 32 2e 34 20 7b 0a 20  t btree-12.4 {. 
5b30: 20 62 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24   btree_move_to $
5b40: 3a 3a 63 31 20 33 33 37 0a 20 20 62 74 72 65 65  ::c1 337.  btree
5b50: 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 33 33  _key $::c1.} {33
5b60: 37 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  7}.do_test btree
5b70: 2d 31 32 2e 35 20 7b 0a 20 20 62 74 72 65 65 5f  -12.5 {.  btree_
5b80: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a  data $::c1.} $::
5b90: 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72  data.do_test btr
5ba0: 65 65 2d 31 32 2e 36 20 7b 0a 20 20 62 74 72 65  ee-12.6 {.  btre
5bb0: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
5bc0: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
5bd0: 20 7b 33 33 38 7d 0a 64 6f 5f 74 65 73 74 20 62   {338}.do_test b
5be0: 74 72 65 65 2d 31 32 2e 37 20 7b 0a 20 20 62 74  tree-12.7 {.  bt
5bf0: 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a 63  ree_move_to $::c
5c00: 31 20 34 36 34 0a 20 20 62 74 72 65 65 5f 6b 65  1 464.  btree_ke
5c10: 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 36 34 7d 0a  y $::c1.} {464}.
5c20: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 32  do_test btree-12
5c30: 2e 38 20 7b 0a 20 20 62 74 72 65 65 5f 6e 65 78  .8 {.  btree_nex
5c40: 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65 65 5f  t $::c1.  btree_
5c50: 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24 3a 3a  data $::c1.} $::
5c60: 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62 74 72  data.do_test btr
5c70: 65 65 2d 31 32 2e 39 20 7b 0a 20 20 62 74 72 65  ee-12.9 {.  btre
5c80: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 62  e_next $::c1.  b
5c90: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 7d  tree_key $::c1.}
5ca0: 20 7b 34 36 36 7d 0a 64 6f 5f 74 65 73 74 20 62   {466}.do_test b
5cb0: 74 72 65 65 2d 31 32 2e 31 30 20 7b 0a 20 20 62  tree-12.10 {.  b
5cc0: 74 72 65 65 5f 6d 6f 76 65 5f 74 6f 20 24 3a 3a  tree_move_to $::
5cd0: 63 31 20 34 30 30 0a 20 20 62 74 72 65 65 5f 6b  c1 400.  btree_k
5ce0: 65 79 20 24 3a 3a 63 31 0a 7d 20 7b 34 30 30 7d  ey $::c1.} {400}
5cf0: 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31  .do_test btree-1
5d00: 32 2e 31 31 20 7b 0a 20 20 62 74 72 65 65 5f 6e  2.11 {.  btree_n
5d10: 65 78 74 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  ext $::c1.  btre
5d20: 65 5f 64 61 74 61 20 24 3a 3a 63 31 0a 7d 20 24  e_data $::c1.} $
5d30: 3a 3a 64 61 74 61 0a 64 6f 5f 74 65 73 74 20 62  ::data.do_test b
5d40: 74 72 65 65 2d 31 32 2e 31 32 20 7b 0a 20 20 62  tree-12.12 {.  b
5d50: 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a  tree_next $::c1.
5d60: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
5d70: 31 0a 7d 20 7b 34 30 32 7d 0a 23 20 62 74 72 65  1.} {402}.# btre
5d80: 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31 0a 23  e_commit $::b1.#
5d90: 20 62 74 72 65 65 5f 74 72 65 65 5f 64 75 6d 70   btree_tree_dump
5da0: 20 24 3a 3a 62 31 20 31 0a 64 6f 5f 74 65 73 74   $::b1 1.do_test
5db0: 20 62 74 72 65 65 2d 31 33 2e 31 20 7b 0a 20 20   btree-13.1 {.  
5dc0: 62 74 72 65 65 5f 69 6e 74 65 67 72 69 74 79 5f  btree_integrity_
5dd0: 63 68 65 63 6b 20 24 3a 3a 62 31 20 31 20 32 0a  check $::b1 1 2.
5de0: 7d 20 7b 7d 0a 0a 23 20 54 6f 20 44 6f 3a 0a 23  } {}..# To Do:.#
5df0: 0a 23 20 20 20 31 2e 20 20 44 6f 20 73 6f 6d 65  .#   1.  Do some
5e00: 20 64 65 6c 65 74 65 73 20 66 72 6f 6d 20 74 68   deletes from th
5e10: 65 20 33 2d 6c 61 79 65 72 20 74 72 65 65 0a 23  e 3-layer tree.#
5e20: 20 20 20 32 2e 20 20 43 6f 6d 6d 69 74 20 61 6e     2.  Commit an
5e30: 64 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61 74  d reopen the dat
5e40: 61 62 61 73 65 0a 23 20 20 20 33 2e 20 20 52 65  abase.#   3.  Re
5e50: 61 64 20 65 76 65 72 79 20 31 35 74 68 20 65 6e  ad every 15th en
5e60: 74 72 79 20 61 6e 64 20 6d 61 6b 65 20 73 75 72  try and make sur
5e70: 65 20 69 74 20 77 6f 72 6b 73 0a 23 20 20 20 34  e it works.#   4
5e80: 2e 20 20 49 6d 70 6c 65 6d 65 6e 74 20 62 74 72  .  Implement btr
5e90: 65 65 5f 73 61 6e 69 74 79 20 61 6e 64 20 70 75  ee_sanity and pu
5ea0: 74 20 69 74 20 74 68 72 6f 75 67 68 6f 75 74 20  t it throughout 
5eb0: 74 68 69 73 20 73 63 72 69 70 74 0a 23 0a 0a 64  this script.#..d
5ec0: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 35 2e  o_test btree-15.
5ed0: 39 38 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f  98 {.  btree_clo
5ee0: 73 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a  se_cursor $::c1.
5ef0: 20 20 6c 69 6e 64 65 78 20 5b 62 74 72 65 65 5f    lindex [btree_
5f00: 70 61 67 65 72 5f 73 74 61 74 73 20 24 3a 3a 62  pager_stats $::b
5f10: 31 5d 20 31 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  1] 1.} {1}.do_te
5f20: 73 74 20 62 74 72 65 65 2d 31 35 2e 39 39 20 7b  st btree-15.99 {
5f30: 0a 20 20 62 74 72 65 65 5f 72 6f 6c 6c 62 61 63  .  btree_rollbac
5f40: 6b 20 24 3a 3a 62 31 0a 20 20 6c 69 6e 64 65 78  k $::b1.  lindex
5f50: 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73 74   [btree_pager_st
5f60: 61 74 73 20 24 3a 3a 62 31 5d 20 31 0a 7d 20 7b  ats $::b1] 1.} {
5f70: 30 7d 0a 62 74 72 65 65 5f 70 61 67 65 72 5f 72  0}.btree_pager_r
5f80: 65 66 5f 64 75 6d 70 20 24 3a 3a 62 31 0a 0a 23  ef_dump $::b1..#
5f90: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74   Miscellaneous t
5fa0: 65 73 74 73 2e 0a 23 0a 23 20 62 74 72 65 65 2d  ests..#.# btree-
5fb0: 31 36 2e 31 20 2d 20 43 68 65 63 6b 20 74 68 61  16.1 - Check tha
5fc0: 74 20 61 20 73 74 61 74 65 6d 65 6e 74 20 63 61  t a statement ca
5fd0: 6e 6e 6f 74 20 62 65 20 73 74 61 72 74 65 64 20  nnot be started 
5fe0: 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
5ff0: 20 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20   .#             
6000: 20 69 73 20 6e 6f 74 20 61 63 74 69 76 65 2e 0a   is not active..
6010: 23 20 62 74 72 65 65 2d 31 36 2e 32 20 2d 20 43  # btree-16.2 - C
6020: 68 65 63 6b 20 74 68 61 74 20 69 74 20 69 73 20  heck that it is 
6030: 61 6e 20 65 72 72 6f 72 20 74 6f 20 72 65 71 75  an error to requ
6040: 65 73 74 20 6d 6f 72 65 20 70 61 79 6c 6f 61 64  est more payload
6050: 20 66 72 6f 6d 20 61 20 0a 23 20 20 20 20 20 20   from a .#      
6060: 20 20 20 20 20 20 20 20 62 74 72 65 65 20 65 6e          btree en
6070: 74 72 79 20 74 68 61 6e 20 74 68 65 20 65 6e 74  try than the ent
6080: 72 79 20 63 6f 6e 74 61 69 6e 73 2e 0a 64 6f 5f  ry contains..do_
6090: 74 65 73 74 20 62 74 72 65 65 2d 31 36 2e 31 20  test btree-16.1 
60a0: 7b 0a 20 20 63 61 74 63 68 20 7b 62 74 72 65 65  {.  catch {btree
60b0: 5f 62 65 67 69 6e 5f 73 74 61 74 65 6d 65 6e 74  _begin_statement
60c0: 20 24 3a 3a 62 31 7d 20 6d 73 67 0a 20 20 73 65   $::b1} msg.  se
60d0: 74 20 6d 73 67 0a 7d 20 53 51 4c 49 54 45 5f 45  t msg.} SQLITE_E
60e0: 52 52 4f 52 0a 0a 64 6f 5f 74 65 73 74 20 62 74  RROR..do_test bt
60f0: 72 65 65 2d 31 36 2e 32 20 7b 0a 20 20 62 74 72  ree-16.2 {.  btr
6100: 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  ee_begin_transac
6110: 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 73 65 74  tion $::b1.  set
6120: 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72   ::c1 [btree_cur
6130: 73 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20  sor $::b1 2 1]. 
6140: 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a   btree_insert $:
6150: 3a 63 31 20 31 20 68 65 6c 6c 6f 77 6f 72 6c 64  :c1 1 helloworld
6160: 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63  .  btree_close_c
6170: 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62 74  ursor $::c1.  bt
6180: 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 31  ree_commit $::b1
6190: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 62 74  .} {}.do_test bt
61a0: 72 65 65 2d 31 36 2e 33 20 7b 0a 20 20 73 65 74  ree-16.3 {.  set
61b0: 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72   ::c1 [btree_cur
61c0: 73 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20  sor $::b1 2 1]. 
61d0: 20 62 74 72 65 65 5f 66 69 72 73 74 20 24 3a 3a   btree_first $::
61e0: 63 31 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 62  c1.} 0.do_test b
61f0: 74 72 65 65 2d 31 36 2e 34 20 7b 0a 20 20 63 61  tree-16.4 {.  ca
6200: 74 63 68 20 7b 62 74 72 65 65 5f 64 61 74 61 20  tch {btree_data 
6210: 24 3a 3a 63 31 20 5b 65 78 70 72 20 5b 62 74 72  $::c1 [expr [btr
6220: 65 65 5f 70 61 79 6c 6f 61 64 5f 73 69 7a 65 20  ee_payload_size 
6230: 24 3a 3a 63 31 5d 20 2b 20 31 30 5d 7d 20 6d 73  $::c1] + 10]} ms
6240: 67 0a 20 20 73 65 74 20 6d 73 67 0a 7d 20 53 51  g.  set msg.} SQ
6250: 4c 49 54 45 5f 45 52 52 4f 52 0a 0a 69 66 20 7b  LITE_ERROR..if {
6260: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  $tcl_platform(pl
6270: 61 74 66 6f 72 6d 29 3d 3d 22 75 6e 69 78 22 7d  atform)=="unix"}
6280: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 62 74 72   {.  do_test btr
6290: 65 65 2d 31 36 2e 35 20 7b 0a 20 20 20 20 62 74  ee-16.5 {.    bt
62a0: 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 31 0a  ree_close $::b1.
62b0: 20 20 20 20 73 65 74 20 3a 3a 6f 72 69 67 70 65      set ::origpe
62c0: 72 6d 20 5b 66 69 6c 65 20 61 74 74 72 69 62 75  rm [file attribu
62d0: 74 65 73 20 74 65 73 74 31 2e 62 74 20 2d 70 65  tes test1.bt -pe
62e0: 72 6d 69 73 73 69 6f 6e 73 5d 0a 20 20 20 20 66  rmissions].    f
62f0: 69 6c 65 20 61 74 74 72 69 62 75 74 65 73 20 74  ile attributes t
6300: 65 73 74 31 2e 62 74 20 2d 70 65 72 6d 69 73 73  est1.bt -permiss
6310: 69 6f 6e 73 20 6f 2d 77 2c 67 2d 77 2c 61 2d 77  ions o-w,g-w,a-w
6320: 0a 20 20 20 20 73 65 74 20 3a 3a 62 31 20 5b 62  .    set ::b1 [b
6330: 74 72 65 65 5f 6f 70 65 6e 20 74 65 73 74 31 2e  tree_open test1.
6340: 62 74 20 32 30 30 30 20 30 5d 0a 20 20 20 20 63  bt 2000 0].    c
6350: 61 74 63 68 20 7b 62 74 72 65 65 5f 63 75 72 73  atch {btree_curs
6360: 6f 72 20 24 3a 3a 62 31 20 32 20 31 7d 20 6d 73  or $::b1 2 1} ms
6370: 67 0a 20 20 20 20 66 69 6c 65 20 61 74 74 72 69  g.    file attri
6380: 62 75 74 65 73 20 74 65 73 74 31 2e 62 74 20 2d  butes test1.bt -
6390: 70 65 72 6d 69 73 73 69 6f 6e 73 20 24 3a 3a 6f  permissions $::o
63a0: 72 69 67 70 65 72 6d 0a 20 20 20 20 62 74 72 65  rigperm.    btre
63b0: 65 5f 63 6c 6f 73 65 20 24 3a 3a 62 31 0a 20 20  e_close $::b1.  
63c0: 20 20 73 65 74 20 3a 3a 62 31 20 5b 62 74 72 65    set ::b1 [btre
63d0: 65 5f 6f 70 65 6e 20 74 65 73 74 31 2e 62 74 20  e_open test1.bt 
63e0: 32 30 30 30 20 30 5d 0a 20 20 20 20 73 65 74 20  2000 0].    set 
63f0: 6d 73 67 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  msg.  } {SQLITE_
6400: 52 45 41 44 4f 4e 4c 59 7d 0a 7d 0a 0a 64 6f 5f  READONLY}.}..do_
6410: 74 65 73 74 20 62 74 72 65 65 2d 31 36 2e 36 20  test btree-16.6 
6420: 7b 0a 20 20 73 65 74 20 3a 3a 63 31 20 5b 62 74  {.  set ::c1 [bt
6430: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31  ree_cursor $::b1
6440: 20 32 20 31 5d 0a 20 20 73 65 74 20 3a 3a 63 32   2 1].  set ::c2
6450: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
6460: 3a 3a 62 31 20 32 20 31 5d 0a 20 20 62 74 72 65  ::b1 2 1].  btre
6470: 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63 74  e_begin_transact
6480: 69 6f 6e 20 24 3a 3a 62 31 0a 20 20 66 6f 72 20  ion $::b1.  for 
6490: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 31 30  {set i 0} {$i<10
64a0: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
64b0: 20 20 62 74 72 65 65 5f 69 6e 73 65 72 74 20 24    btree_insert $
64c0: 3a 3a 63 31 20 24 69 20 5b 73 74 72 69 6e 67 20  ::c1 $i [string 
64d0: 72 65 70 65 61 74 20 68 65 6c 6c 6f 77 6f 72 6c  repeat helloworl
64e0: 64 20 31 30 5d 0a 20 20 7d 0a 20 20 62 74 72 65  d 10].  }.  btre
64f0: 65 5f 6c 61 73 74 20 24 3a 3a 63 32 0a 20 20 62  e_last $::c2.  b
6500: 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63  tree_insert $::c
6510: 31 20 31 30 30 20 5b 73 74 72 69 6e 67 20 72 65  1 100 [string re
6520: 70 65 61 74 20 68 65 6c 6c 6f 77 6f 72 6c 64 20  peat helloworld 
6530: 31 30 5d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73  10].} {}..do_tes
6540: 74 20 62 74 72 65 65 2d 31 36 2e 37 20 7b 0a 20  t btree-16.7 {. 
6550: 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63 75 72   btree_close_cur
6560: 73 6f 72 20 24 3a 3a 63 31 0a 20 20 62 74 72 65  sor $::c1.  btre
6570: 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24  e_close_cursor $
6580: 3a 3a 63 32 0a 20 20 62 74 72 65 65 5f 63 6f 6d  ::c2.  btree_com
6590: 6d 69 74 20 24 3a 3a 62 31 0a 20 20 73 65 74 20  mit $::b1.  set 
65a0: 3a 3a 63 31 20 5b 62 74 72 65 65 5f 63 75 72 73  ::c1 [btree_curs
65b0: 6f 72 20 24 3a 3a 62 31 20 32 20 31 5d 0a 20 20  or $::b1 2 1].  
65c0: 63 61 74 63 68 20 7b 62 74 72 65 65 5f 69 6e 73  catch {btree_ins
65d0: 65 72 74 20 24 3a 3a 63 31 20 31 30 31 20 68 65  ert $::c1 101 he
65e0: 6c 6c 6f 77 6f 72 6c 64 7d 20 6d 73 67 0a 20 20  lloworld} msg.  
65f0: 73 65 74 20 6d 73 67 0a 7d 20 7b 53 51 4c 49 54  set msg.} {SQLIT
6600: 45 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74  E_ERROR}.do_test
6610: 20 62 74 72 65 65 2d 31 36 2e 38 20 7b 0a 20 20   btree-16.8 {.  
6620: 62 74 72 65 65 5f 66 69 72 73 74 20 24 3a 3a 63  btree_first $::c
6630: 31 0a 20 20 63 61 74 63 68 20 7b 62 74 72 65 65  1.  catch {btree
6640: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 7d 20 6d  _delete $::c1} m
6650: 73 67 0a 20 20 73 65 74 20 6d 73 67 0a 7d 20 7b  sg.  set msg.} {
6660: 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64 6f  SQLITE_ERROR}.do
6670: 5f 74 65 73 74 20 62 74 72 65 65 2d 31 36 2e 39  _test btree-16.9
6680: 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65   {.  btree_close
6690: 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20  _cursor $::c1.  
66a0: 62 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e  btree_begin_tran
66b0: 73 61 63 74 69 6f 6e 20 24 3a 3a 62 31 0a 20 20  saction $::b1.  
66c0: 73 65 74 20 3a 3a 63 31 20 5b 62 74 72 65 65 5f  set ::c1 [btree_
66d0: 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 32 20 30  cursor $::b1 2 0
66e0: 5d 0a 20 20 63 61 74 63 68 20 7b 62 74 72 65 65  ].  catch {btree
66f0: 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31 20 31 30  _insert $::c1 10
6700: 31 20 68 65 6c 6c 6f 77 6f 72 6c 64 7d 20 6d 73  1 helloworld} ms
6710: 67 0a 20 20 73 65 74 20 6d 73 67 0a 7d 20 7b 53  g.  set msg.} {S
6720: 51 4c 49 54 45 5f 50 45 52 4d 7d 0a 64 6f 5f 74  QLITE_PERM}.do_t
6730: 65 73 74 20 62 74 72 65 65 2d 31 36 2e 31 30 20  est btree-16.10 
6740: 7b 0a 20 20 63 61 74 63 68 20 7b 62 74 72 65 65  {.  catch {btree
6750: 5f 64 65 6c 65 74 65 20 24 3a 3a 63 31 7d 20 6d  _delete $::c1} m
6760: 73 67 0a 20 20 73 65 74 20 6d 73 67 0a 7d 20 7b  sg.  set msg.} {
6770: 53 51 4c 49 54 45 5f 50 45 52 4d 7d 0a 64 6f 5f  SQLITE_PERM}.do_
6780: 74 65 73 74 20 62 74 72 65 65 2d 31 36 2e 31 31  test btree-16.11
6790: 20 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65   {.  btree_close
67a0: 5f 63 75 72 73 6f 72 20 24 3a 3a 63 31 0a 20 20  _cursor $::c1.  
67b0: 73 65 74 20 3a 3a 63 32 20 5b 62 74 72 65 65 5f  set ::c2 [btree_
67c0: 63 75 72 73 6f 72 20 24 3a 3a 62 31 20 32 20 31  cursor $::b1 2 1
67d0: 5d 0a 20 20 73 65 74 20 3a 3a 63 31 20 5b 62 74  ].  set ::c1 [bt
67e0: 72 65 65 5f 63 75 72 73 6f 72 20 24 3a 3a 62 31  ree_cursor $::b1
67f0: 20 32 20 30 5d 0a 20 20 63 61 74 63 68 20 7b 62   2 0].  catch {b
6800: 74 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63  tree_insert $::c
6810: 32 20 31 30 31 20 68 65 6c 6c 6f 77 6f 72 6c 64  2 101 helloworld
6820: 7d 20 6d 73 67 0a 20 20 73 65 74 20 6d 73 67 0a  } msg.  set msg.
6830: 7d 20 7b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  } {SQLITE_LOCKED
6840: 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d  }.do_test btree-
6850: 31 36 2e 31 32 20 7b 0a 20 20 62 74 72 65 65 5f  16.12 {.  btree_
6860: 66 69 72 73 74 20 24 3a 3a 63 32 0a 20 20 63 61  first $::c2.  ca
6870: 74 63 68 20 7b 62 74 72 65 65 5f 64 65 6c 65 74  tch {btree_delet
6880: 65 20 24 3a 3a 63 32 7d 20 6d 73 67 0a 20 20 73  e $::c2} msg.  s
6890: 65 74 20 6d 73 67 0a 7d 20 7b 53 51 4c 49 54 45  et msg.} {SQLITE
68a0: 5f 4c 4f 43 4b 45 44 7d 0a 64 6f 5f 74 65 73 74  _LOCKED}.do_test
68b0: 20 62 74 72 65 65 2d 31 36 2e 31 33 20 7b 0a 20   btree-16.13 {. 
68c0: 20 63 61 74 63 68 20 7b 62 74 72 65 65 5f 63 6c   catch {btree_cl
68d0: 65 61 72 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20  ear_table $::b1 
68e0: 32 7d 20 6d 73 67 0a 20 20 73 65 74 20 6d 73 67  2} msg.  set msg
68f0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  .} {SQLITE_LOCKE
6900: 44 7d 0a 64 6f 5f 74 65 73 74 20 62 74 72 65 65  D}.do_test btree
6910: 2d 31 36 2e 31 34 20 7b 0a 20 20 62 74 72 65 65  -16.14 {.  btree
6920: 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20 24 3a  _close_cursor $:
6930: 3a 63 31 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73  :c1.  btree_clos
6940: 65 5f 63 75 72 73 6f 72 20 24 3a 3a 63 32 0a 20  e_cursor $::c2. 
6950: 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74 20 24 3a   btree_commit $:
6960: 3a 62 31 0a 20 20 63 61 74 63 68 20 7b 62 74 72  :b1.  catch {btr
6970: 65 65 5f 63 6c 65 61 72 5f 74 61 62 6c 65 20 24  ee_clear_table $
6980: 3a 3a 62 31 20 32 7d 20 6d 73 67 0a 20 20 73 65  ::b1 2} msg.  se
6990: 74 20 6d 73 67 0a 7d 20 7b 53 51 4c 49 54 45 5f  t msg.} {SQLITE_
69a0: 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 62  ERROR}.do_test b
69b0: 74 72 65 65 2d 31 36 2e 31 35 20 7b 0a 20 20 63  tree-16.15 {.  c
69c0: 61 74 63 68 20 7b 62 74 72 65 65 5f 64 72 6f 70  atch {btree_drop
69d0: 5f 74 61 62 6c 65 20 24 3a 3a 62 31 20 32 7d 20  _table $::b1 2} 
69e0: 6d 73 67 0a 20 20 73 65 74 20 6d 73 67 0a 7d 20  msg.  set msg.} 
69f0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
6a00: 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 31 36 2e  o_test btree-16.
6a10: 31 36 20 7b 0a 20 20 62 74 72 65 65 5f 62 65 67  16 {.  btree_beg
6a20: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24  in_transaction $
6a30: 3a 3a 62 31 0a 20 20 73 65 74 20 3a 3a 63 31 20  ::b1.  set ::c1 
6a40: 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24 3a  [btree_cursor $:
6a50: 3a 62 31 20 32 20 30 5d 0a 20 20 63 61 74 63 68  :b1 2 0].  catch
6a60: 20 7b 62 74 72 65 65 5f 64 72 6f 70 5f 74 61 62   {btree_drop_tab
6a70: 6c 65 20 24 3a 3a 62 31 20 32 7d 20 6d 73 67 0a  le $::b1 2} msg.
6a80: 20 20 73 65 74 20 6d 73 67 0a 7d 20 7b 53 51 4c    set msg.} {SQL
6a90: 49 54 45 5f 4c 4f 43 4b 45 44 7d 0a 0a 64 6f 5f  ITE_LOCKED}..do_
6aa0: 74 65 73 74 20 62 74 72 65 65 2d 39 39 2e 31 20  test btree-99.1 
6ab0: 7b 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 20  {.  btree_close 
6ac0: 24 3a 3a 62 31 0a 7d 20 7b 7d 0a 63 61 74 63 68  $::b1.} {}.catch
6ad0: 20 7b 75 6e 73 65 74 20 64 61 74 61 7d 0a 63 61   {unset data}.ca
6ae0: 74 63 68 20 7b 75 6e 73 65 74 20 6b 65 79 7d 0a  tch {unset key}.
6af0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.