/ Hex Artifact Content
Login

Artifact fa955a3d7a8bc91d6084b7f494f9e5d1bdfb15b6:


0000: 23 20 32 30 30 32 20 44 65 63 65 6d 62 65 72 20  # 2002 December 
0010: 30 33 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  03.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 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 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74  s of this script
01c0: 20 69 73 20 62 74 72 65 65 20 64 61 74 61 62 61   is btree databa
01d0: 73 65 20 62 61 63 6b 65 6e 64 0a 23 0a 23 20 54  se backend.#.# T
01e0: 68 69 73 20 66 69 6c 65 20 66 6f 63 75 73 65 73  his file focuses
01f0: 20 6f 6e 20 74 65 73 74 69 6e 67 20 74 68 65 20   on testing the 
0200: 73 71 6c 69 74 65 42 74 72 65 65 4e 65 78 74 28  sqliteBtreeNext(
0210: 29 20 61 6e 64 20 0a 23 20 73 71 6c 69 74 65 42  ) and .# sqliteB
0220: 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 20 70  treePrevious() p
0230: 72 6f 63 65 64 75 72 65 73 20 61 6e 64 20 6d 61  rocedures and ma
0240: 6b 69 6e 67 20 73 75 72 65 20 74 68 65 79 20 61  king sure they a
0250: 72 65 20 61 62 6c 65 0a 23 20 74 6f 20 73 74 65  re able.# to ste
0260: 70 20 74 68 72 6f 75 67 68 20 61 6e 20 65 6e 74  p through an ent
0270: 69 72 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 65  ire table from e
0280: 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
0290: 0a 23 0a 23 20 24 49 64 3a 20 62 74 72 65 65 34  .#.# $Id: btree4
02a0: 2e 74 65 73 74 2c 76 20 31 2e 31 20 32 30 30 32  .test,v 1.1 2002
02b0: 2f 31 32 2f 30 34 20 31 33 3a 34 30 3a 32 37 20  /12/04 13:40:27 
02c0: 64 72 68 20 45 78 70 20 24 0a 0a 0a 73 65 74 20  drh Exp $...set 
02d0: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
02e0: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
02f0: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0300: 73 74 65 72 2e 74 63 6c 0a 0a 69 66 20 7b 5b 69  ster.tcl..if {[i
0310: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 62 74 72  nfo commands btr
0320: 65 65 5f 6f 70 65 6e 5d 21 3d 22 22 7d 20 7b 0a  ee_open]!=""} {.
0330: 0a 23 20 4f 70 65 6e 20 61 20 74 65 73 74 20 64  .# Open a test d
0340: 61 74 61 62 61 73 65 2e 0a 23 0a 66 69 6c 65 20  atabase..#.file 
0350: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
0360: 73 74 31 2e 62 74 0a 66 69 6c 65 20 64 65 6c 65  st1.bt.file dele
0370: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 31 2e  te -force test1.
0380: 62 74 2d 6a 6f 75 72 6e 61 6c 0a 73 65 74 20 62  bt-journal.set b
0390: 31 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65  1 [btree_open te
03a0: 73 74 31 2e 62 74 5d 0a 62 74 72 65 65 5f 62 65  st1.bt].btree_be
03b0: 67 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20  gin_transaction 
03c0: 24 3a 3a 62 31 0a 0a 73 65 74 20 64 61 74 61 20  $::b1..set data 
03d0: 7b 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f  {abcdefghijklmno
03e0: 70 71 72 73 74 75 76 77 78 79 7a 30 31 32 33 34  pqrstuvwxyz01234
03f0: 35 36 37 38 39 7d 0a 61 70 70 65 6e 64 20 64 61  56789}.append da
0400: 74 61 20 24 64 61 74 61 0a 61 70 70 65 6e 64 20  ta $data.append 
0410: 64 61 74 61 20 24 64 61 74 61 0a 61 70 70 65 6e  data $data.appen
0420: 64 20 64 61 74 61 20 24 64 61 74 61 0a 61 70 70  d data $data.app
0430: 65 6e 64 20 64 61 74 61 20 24 64 61 74 61 0a 0a  end data $data..
0440: 66 6f 72 65 61 63 68 20 4e 20 7b 31 30 20 31 30  foreach N {10 10
0450: 30 20 31 30 30 30 7d 20 7b 0a 20 20 62 74 72 65  0 1000} {.  btre
0460: 65 5f 63 6c 65 61 72 5f 74 61 62 6c 65 20 24 3a  e_clear_table $:
0470: 3a 62 31 20 32 0a 20 20 73 65 74 20 3a 3a 63 31  :b1 2.  set ::c1
0480: 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72 20 24   [btree_cursor $
0490: 3a 3a 62 31 20 32 20 31 5d 0a 20 20 64 6f 5f 74  ::b1 2 1].  do_t
04a0: 65 73 74 20 62 74 72 65 65 34 2d 24 4e 2e 31 20  est btree4-$N.1 
04b0: 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69  {.    for {set i
04c0: 20 31 7d 20 7b 24 69 3c 3d 24 4e 7d 20 7b 69 6e   1} {$i<=$N} {in
04d0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 62 74  cr i} {.      bt
04e0: 72 65 65 5f 69 6e 73 65 72 74 20 24 3a 3a 63 31  ree_insert $::c1
04f0: 20 5b 66 6f 72 6d 61 74 20 6b 2d 25 30 35 64 20   [format k-%05d 
0500: 24 69 5d 20 24 3a 3a 64 61 74 61 2d 24 69 0a 20  $i] $::data-$i. 
0510: 20 20 20 7d 0a 20 20 20 20 62 74 72 65 65 5f 66     }.    btree_f
0520: 69 72 73 74 20 24 3a 3a 63 31 0a 20 20 20 20 62  irst $::c1.    b
0530: 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 20  tree_key $::c1. 
0540: 20 7d 20 7b 6b 2d 30 30 30 30 31 7d 0a 20 20 64   } {k-00001}.  d
0550: 6f 5f 74 65 73 74 20 62 74 72 65 65 34 2d 24 4e  o_test btree4-$N
0560: 2e 32 20 7b 0a 20 20 20 20 62 74 72 65 65 5f 64  .2 {.    btree_d
0570: 61 74 61 20 24 3a 3a 63 31 0a 20 20 7d 20 24 3a  ata $::c1.  } $:
0580: 3a 64 61 74 61 2d 31 0a 20 20 66 6f 72 20 7b 73  :data-1.  for {s
0590: 65 74 20 69 20 32 7d 20 7b 24 69 3c 3d 24 4e 7d  et i 2} {$i<=$N}
05a0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
05b0: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 2d 24 4e  do_test btree-$N
05c0: 2e 33 2e 24 69 2e 31 20 7b 0a 20 20 20 20 20 20  .3.$i.1 {.      
05d0: 62 74 72 65 65 5f 6e 65 78 74 20 24 3a 3a 63 31  btree_next $::c1
05e0: 0a 20 20 20 20 7d 20 30 0a 20 20 20 20 64 6f 5f  .    } 0.    do_
05f0: 74 65 73 74 20 62 74 72 65 65 2d 24 4e 2e 33 2e  test btree-$N.3.
0600: 24 69 2e 32 20 7b 0a 20 20 20 20 20 20 62 74 72  $i.2 {.      btr
0610: 65 65 5f 6b 65 79 20 24 3a 3a 63 31 0a 20 20 20  ee_key $::c1.   
0620: 20 7d 20 5b 66 6f 72 6d 61 74 20 6b 2d 25 30 35   } [format k-%05
0630: 64 20 24 69 5d 0a 20 20 20 20 64 6f 5f 74 65 73  d $i].    do_tes
0640: 74 20 62 74 72 65 65 2d 24 4e 2e 33 2e 24 69 2e  t btree-$N.3.$i.
0650: 33 20 7b 0a 20 20 20 20 20 20 62 74 72 65 65 5f  3 {.      btree_
0660: 64 61 74 61 20 24 3a 3a 63 31 0a 20 20 20 20 7d  data $::c1.    }
0670: 20 24 3a 3a 64 61 74 61 2d 24 69 0a 20 20 7d 0a   $::data-$i.  }.
0680: 20 20 64 6f 5f 74 65 73 74 20 62 74 72 65 65 34    do_test btree4
0690: 2d 24 4e 2e 34 20 7b 0a 20 20 20 20 62 74 72 65  -$N.4 {.    btre
06a0: 65 5f 6e 65 78 74 20 24 3a 3a 63 31 0a 20 20 7d  e_next $::c1.  }
06b0: 20 31 0a 20 20 64 6f 5f 74 65 73 74 20 62 74 72   1.  do_test btr
06c0: 65 65 34 2d 24 4e 2e 35 20 7b 0a 20 20 20 20 62  ee4-$N.5 {.    b
06d0: 74 72 65 65 5f 6c 61 73 74 20 24 3a 3a 63 31 0a  tree_last $::c1.
06e0: 20 20 7d 20 30 0a 20 20 64 6f 5f 74 65 73 74 20    } 0.  do_test 
06f0: 62 74 72 65 65 34 2d 24 4e 2e 36 20 7b 0a 20 20  btree4-$N.6 {.  
0700: 20 20 62 74 72 65 65 5f 6b 65 79 20 24 3a 3a 63    btree_key $::c
0710: 31 0a 20 20 7d 20 5b 66 6f 72 6d 61 74 20 6b 2d  1.  } [format k-
0720: 25 30 35 64 20 24 4e 5d 0a 20 20 64 6f 5f 74 65  %05d $N].  do_te
0730: 73 74 20 62 74 72 65 65 34 2d 24 4e 2e 37 20 7b  st btree4-$N.7 {
0740: 0a 20 20 20 20 62 74 72 65 65 5f 64 61 74 61 20  .    btree_data 
0750: 24 3a 3a 63 31 0a 20 20 7d 20 24 3a 3a 64 61 74  $::c1.  } $::dat
0760: 61 2d 24 4e 0a 20 20 66 6f 72 20 7b 73 65 74 20  a-$N.  for {set 
0770: 69 20 5b 65 78 70 72 20 7b 24 4e 2d 31 7d 5d 7d  i [expr {$N-1}]}
0780: 20 7b 24 69 3e 3d 31 7d 20 7b 69 6e 63 72 20 69   {$i>=1} {incr i
0790: 20 2d 31 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65   -1} {.    do_te
07a0: 73 74 20 62 74 72 65 65 34 2d 24 4e 2e 38 2e 24  st btree4-$N.8.$
07b0: 69 2e 31 20 7b 0a 20 20 20 20 20 20 62 74 72 65  i.1 {.      btre
07c0: 65 5f 70 72 65 76 20 24 3a 3a 63 31 0a 20 20 20  e_prev $::c1.   
07d0: 20 7d 20 30 0a 20 20 20 20 64 6f 5f 74 65 73 74   } 0.    do_test
07e0: 20 62 74 72 65 65 34 2d 24 4e 2e 38 2e 24 69 2e   btree4-$N.8.$i.
07f0: 32 20 7b 0a 20 20 20 20 20 20 62 74 72 65 65 5f  2 {.      btree_
0800: 6b 65 79 20 24 3a 3a 63 31 0a 20 20 20 20 7d 20  key $::c1.    } 
0810: 5b 66 6f 72 6d 61 74 20 6b 2d 25 30 35 64 20 24  [format k-%05d $
0820: 69 5d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 62  i].    do_test b
0830: 74 72 65 65 34 2d 24 4e 2e 38 2e 24 69 2e 33 20  tree4-$N.8.$i.3 
0840: 7b 0a 20 20 20 20 20 20 62 74 72 65 65 5f 64 61  {.      btree_da
0850: 74 61 20 24 3a 3a 63 31 0a 20 20 20 20 7d 20 24  ta $::c1.    } $
0860: 3a 3a 64 61 74 61 2d 24 69 0a 20 20 7d 0a 20 20  ::data-$i.  }.  
0870: 64 6f 5f 74 65 73 74 20 62 74 72 65 65 34 2d 24  do_test btree4-$
0880: 4e 2e 39 20 7b 0a 20 20 20 20 62 74 72 65 65 5f  N.9 {.    btree_
0890: 70 72 65 76 20 24 3a 3a 63 31 0a 20 20 7d 20 31  prev $::c1.  } 1
08a0: 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f 63  .  btree_close_c
08b0: 75 72 73 6f 72 20 24 3a 3a 63 31 0a 7d 0a 0a 62  ursor $::c1.}..b
08c0: 74 72 65 65 5f 72 6f 6c 6c 62 61 63 6b 20 24 3a  tree_rollback $:
08d0: 3a 62 31 20 20 20 20 0a 62 74 72 65 65 5f 70 61  :b1    .btree_pa
08e0: 67 65 72 5f 72 65 66 5f 64 75 6d 70 20 24 3a 3a  ger_ref_dump $::
08f0: 62 31 0a 62 74 72 65 65 5f 63 6c 6f 73 65 20 24  b1.btree_close $
0900: 3a 3a 62 31 0a 0a 7d 20 3b 23 20 65 6e 64 20 69  ::b1..} ;# end i
0910: 66 28 20 6e 6f 74 20 6d 65 6d 3a 20 61 6e 64 20  f( not mem: and 
0920: 68 61 73 20 70 61 67 65 72 5f 6f 70 65 6e 20 63  has pager_open c
0930: 6f 6d 6d 61 6e 64 20 29 3b 0a 0a 66 69 6e 69 73  ommand );..finis
0940: 68 5f 74 65 73 74 0a                             h_test.