/ Hex Artifact Content
Login

Artifact fc07c14193c0430814e7a08b5da46888ee795c33:


0000: 23 20 32 30 31 32 20 41 75 67 75 73 74 20 36 0a  # 2012 August 6.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   you give..#.#**
0120: 2a 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 0a 23 0a 0a 0a 73 65 74 20 74 65  *****.#...set te
0170: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0180: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0190: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
01a0: 65 72 2e 74 63 6c 0a 73 65 74 20 3a 3a 74 65 73  er.tcl.set ::tes
01b0: 74 70 72 65 66 69 78 20 69 6e 64 65 78 35 0a 0a  tprefix index5..
01c0: 64 6f 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20  do_test 1.1 {.  
01d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
01e0: 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d  AGMA page_size =
01f0: 20 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41 54   1024;.    CREAT
0200: 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20  E TABLE t1(x);. 
0210: 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d 0a 20 20     BEGIN;.  }.  
0220: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
0230: 69 20 3c 20 31 30 30 30 30 30 7d 20 7b 69 6e 63  i < 100000} {inc
0240: 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  r i} {.    execs
0250: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
0260: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
0270: 74 72 28 31 30 30 2c 31 30 30 29 29 20 7d 0a 20  tr(100,100)) }. 
0280: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 43 4f 4d   }.  execsql COM
0290: 4d 49 54 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  MIT.  execsql { 
02a0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
02b0: 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a 20  X i1 ON t1(x);. 
02c0: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 49 31     DROP INDEX I1
02d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69  ;.    PRAGMA mai
02e0: 6e 2e 70 61 67 65 5f 73 69 7a 65 3b 0a 20 20 7d  n.page_size;.  }
02f0: 0a 7d 20 7b 31 30 32 34 7d 0a 0a 64 62 20 63 6c  .} {1024}..db cl
0300: 6f 73 65 0a 74 65 73 74 76 66 73 20 74 76 66 73  ose.testvfs tvfs
0310: 0a 74 76 66 73 20 66 69 6c 74 65 72 20 78 57 72  .tvfs filter xWr
0320: 69 74 65 0a 74 76 66 73 20 73 63 72 69 70 74 20  ite.tvfs script 
0330: 77 72 69 74 65 5f 63 62 0a 70 72 6f 63 20 77 72  write_cb.proc wr
0340: 69 74 65 5f 63 62 20 7b 78 43 61 6c 6c 20 66 69  ite_cb {xCall fi
0350: 6c 65 20 68 61 6e 64 6c 65 20 69 4f 66 73 74 20  le handle iOfst 
0360: 61 72 67 73 7d 20 7b 0a 20 20 69 66 20 7b 5b 66  args} {.  if {[f
0370: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 5d 3d  ile tail $file]=
0380: 3d 22 74 65 73 74 2e 64 62 22 7d 20 7b 0a 20 20  ="test.db"} {.  
0390: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 77 72 69 74    lappend ::writ
03a0: 65 5f 6c 69 73 74 20 5b 65 78 70 72 20 24 69 4f  e_list [expr $iO
03b0: 66 73 74 2f 31 30 32 34 5d 0a 20 20 7d 0a 7d 0a  fst/1024].  }.}.
03c0: 0a 64 6f 5f 74 65 73 74 20 31 2e 32 20 7b 0a 20  .do_test 1.2 {. 
03d0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
03e0: 2e 64 62 20 2d 76 66 73 20 74 76 66 73 0a 20 20  .db -vfs tvfs.  
03f0: 73 65 74 20 3a 3a 77 72 69 74 65 5f 6c 69 73 74  set ::write_list
0400: 20 5b 6c 69 73 74 5d 0a 20 20 65 78 65 63 73 71   [list].  execsq
0410: 6c 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58  l { CREATE INDEX
0420: 20 69 31 20 4f 4e 20 74 31 28 78 29 20 7d 0a 7d   i1 ON t1(x) }.}
0430: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 33   {}..do_test 1.3
0440: 20 7b 0a 20 20 73 65 74 20 6e 46 6f 72 77 61 72   {.  set nForwar
0450: 64 20 30 0a 20 20 73 65 74 20 6e 42 61 63 6b 77  d 0.  set nBackw
0460: 61 72 64 20 30 0a 20 20 73 65 74 20 6e 4e 6f 6e  ard 0.  set nNon
0470: 63 6f 6e 74 20 30 0a 20 20 73 65 74 20 69 50 72  cont 0.  set iPr
0480: 65 76 20 5b 6c 69 6e 64 65 78 20 24 3a 3a 77 72  ev [lindex $::wr
0490: 69 74 65 5f 6c 69 73 74 20 30 5d 0a 20 20 66 6f  ite_list 0].  fo
04a0: 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20  r {set i 1} {$i 
04b0: 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 77 72  < [llength $::wr
04c0: 69 74 65 5f 6c 69 73 74 5d 7d 20 7b 69 6e 63 72  ite_list]} {incr
04d0: 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 69 4e   i} {.    set iN
04e0: 65 78 74 20 5b 6c 69 6e 64 65 78 20 24 3a 3a 77  ext [lindex $::w
04f0: 72 69 74 65 5f 6c 69 73 74 20 24 69 5d 0a 20 20  rite_list $i].  
0500: 20 20 69 66 20 7b 24 69 4e 65 78 74 3d 3d 28 24    if {$iNext==($
0510: 69 50 72 65 76 2b 31 29 7d 20 7b 0a 20 20 20 20  iPrev+1)} {.    
0520: 20 20 69 6e 63 72 20 6e 46 6f 72 77 61 72 64 0a    incr nForward.
0530: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 69      } elseif {$i
0540: 4e 65 78 74 3d 3d 28 24 69 50 72 65 76 2d 31 29  Next==($iPrev-1)
0550: 7d 20 7b 20 0a 20 20 20 20 20 20 69 6e 63 72 20  } { .      incr 
0560: 6e 42 61 63 6b 77 61 72 64 20 0a 20 20 20 20 7d  nBackward .    }
0570: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 6e   else {.      in
0580: 63 72 20 6e 4e 6f 6e 63 6f 6e 74 0a 20 20 20 20  cr nNoncont.    
0590: 7d 0a 20 20 20 20 73 65 74 20 69 50 72 65 76 20  }.    set iPrev 
05a0: 24 69 4e 65 78 74 0a 20 20 7d 0a 20 20 70 75 74  $iNext.  }.  put
05b0: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 5c 0a 20  s -nonewline \. 
05c0: 20 20 20 20 20 22 20 28 66 6f 72 77 61 72 64 3d       " (forward=
05d0: 24 6e 46 6f 72 77 61 72 64 2c 20 62 61 63 6b 3d  $nForward, back=
05e0: 24 6e 42 61 63 6b 77 61 72 64 2c 20 6e 6f 6e 63  $nBackward, nonc
05f0: 6f 6e 74 69 67 75 6f 75 73 3d 24 6e 4e 6f 6e 63  ontiguous=$nNonc
0600: 6f 6e 74 29 22 0a 0a 20 20 65 78 70 72 20 7b 24  ont)"..  expr {$
0610: 6e 46 6f 72 77 61 72 64 20 3e 20 32 2a 28 24 6e  nForward > 2*($n
0620: 42 61 63 6b 77 61 72 64 20 2b 20 24 6e 4e 6f 6e  Backward + $nNon
0630: 63 6f 6e 74 29 7d 0a 7d 20 7b 31 7d 0a 64 62 20  cont)}.} {1}.db 
0640: 63 6c 6f 73 65 0a 74 76 66 73 20 64 65 6c 65 74  close.tvfs delet
0650: 65 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     e..finish_test.