/ Hex Artifact Content
Login

Artifact 6c18c1f23cd48e0f948930c98dfdd37dfccb5195:


0000: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0010: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69  le join [file di
0020: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 20 2e 2e  rname $argv0] ..
0030: 20 2e 2e 20 74 65 73 74 5d 0a 73 6f 75 72 63 65   .. test].source
0040: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0050: 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20  .tcl..ifcapable 
0060: 21 72 74 72 65 65 20 7b 0a 20 20 66 69 6e 69 73  !rtree {.  finis
0070: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0080: 7d 0a 0a 73 65 74 20 4e 52 4f 57 20 20 20 31 30  }..set NROW   10
0090: 30 30 30 0a 73 65 74 20 4e 51 55 45 52 59 20 20  000.set NQUERY  
00a0: 20 35 30 30 0a 0a 70 75 74 73 20 22 47 65 6e 65   500..puts "Gene
00b0: 72 61 74 69 6e 67 20 24 4e 52 4f 57 20 72 6f 77  rating $NROW row
00c0: 73 20 6f 66 20 64 61 74 61 2e 2e 2e 22 0a 73 65  s of data...".se
00d0: 74 20 64 61 74 61 20 5b 6c 69 73 74 5d 0a 66 6f  t data [list].fo
00e0: 72 20 7b 73 65 74 20 69 69 20 30 7d 20 7b 24 69  r {set ii 0} {$i
00f0: 69 20 3c 20 24 4e 52 4f 57 7d 20 7b 69 6e 63 72  i < $NROW} {incr
0100: 20 69 69 7d 20 7b 0a 20 20 73 65 74 20 78 31 20   ii} {.  set x1 
0110: 5b 65 78 70 72 20 7b 72 61 6e 64 28 29 2a 31 30  [expr {rand()*10
0120: 30 30 7d 5d 0a 20 20 73 65 74 20 78 32 20 5b 65  00}].  set x2 [e
0130: 78 70 72 20 7b 24 78 31 2b 72 61 6e 64 28 29 2a  xpr {$x1+rand()*
0140: 35 30 7d 5d 0a 20 20 73 65 74 20 79 31 20 5b 65  50}].  set y1 [e
0150: 78 70 72 20 7b 72 61 6e 64 28 29 2a 31 30 30 30  xpr {rand()*1000
0160: 7d 5d 0a 20 20 73 65 74 20 79 32 20 5b 65 78 70  }].  set y2 [exp
0170: 72 20 7b 24 79 31 2b 72 61 6e 64 28 29 2a 35 30  r {$y1+rand()*50
0180: 7d 5d 0a 20 20 6c 61 70 70 65 6e 64 20 64 61 74  }].  lappend dat
0190: 61 20 24 78 31 20 24 78 32 20 24 79 31 20 24 79  a $x1 $x2 $y1 $y
01a0: 32 0a 7d 0a 70 75 74 73 20 22 46 69 6e 69 73 68  2.}.puts "Finish
01b0: 65 64 20 67 65 6e 65 72 61 74 69 6e 67 20 64 61  ed generating da
01c0: 74 61 22 0a 0a 0a 73 65 74 20 73 71 6c 31 20 7b  ta"...set sql1 {
01d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 74 72  CREATE TABLE btr
01e0: 65 65 28 69 69 20 49 4e 54 45 47 45 52 20 50 52  ee(ii INTEGER PR
01f0: 49 4d 41 52 59 20 4b 45 59 2c 20 78 31 2c 20 78  IMARY KEY, x1, x
0200: 32 2c 20 79 31 2c 20 79 32 29 7d 0a 73 65 74 20  2, y1, y2)}.set 
0210: 73 71 6c 32 20 7b 43 52 45 41 54 45 20 56 49 52  sql2 {CREATE VIR
0220: 54 55 41 4c 20 54 41 42 4c 45 20 72 74 72 65 65  TUAL TABLE rtree
0230: 20 55 53 49 4e 47 20 72 74 72 65 65 28 69 69 2c   USING rtree(ii,
0240: 20 78 31 2c 20 78 32 2c 20 79 31 2c 20 79 32 29   x1, x2, y1, y2)
0250: 7d 0a 70 75 74 73 20 22 43 72 65 61 74 69 6e 67  }.puts "Creating
0260: 20 74 61 62 6c 65 73 3a 22 0a 70 75 74 73 20 22   tables:".puts "
0270: 20 20 24 73 71 6c 31 22 0a 70 75 74 73 20 22 20    $sql1".puts " 
0280: 20 24 73 71 6c 32 22 0a 64 62 20 65 76 61 6c 20   $sql2".db eval 
0290: 24 73 71 6c 31 0a 64 62 20 65 76 61 6c 20 24 73  $sql1.db eval $s
02a0: 71 6c 32 0a 0a 64 62 20 65 76 61 6c 20 22 70 72  ql2..db eval "pr
02b0: 61 67 6d 61 20 63 61 63 68 65 5f 73 69 7a 65 3d  agma cache_size=
02c0: 31 30 30 22 0a 0a 70 75 74 73 20 2d 6e 6f 6e 65  100"..puts -none
02d0: 77 6c 69 6e 65 20 22 49 6e 73 65 72 74 69 6e 67  wline "Inserting
02e0: 20 69 6e 74 6f 20 62 74 72 65 65 2e 2e 2e 20 22   into btree... "
02f0: 0a 66 6c 75 73 68 20 73 74 64 6f 75 74 0a 73 65  .flush stdout.se
0300: 74 20 62 74 72 65 65 5f 74 69 6d 65 20 5b 74 69  t btree_time [ti
0310: 6d 65 20 7b 64 62 20 74 72 61 6e 73 61 63 74 69  me {db transacti
0320: 6f 6e 20 7b 0a 20 20 73 65 74 20 69 69 20 31 0a  on {.  set ii 1.
0330: 20 20 66 6f 72 65 61 63 68 20 7b 78 31 20 78 32    foreach {x1 x2
0340: 20 79 31 20 79 32 7d 20 24 64 61 74 61 20 7b 0a   y1 y2} $data {.
0350: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53      db eval {INS
0360: 45 52 54 20 49 4e 54 4f 20 62 74 72 65 65 20 56  ERT INTO btree V
0370: 41 4c 55 45 53 28 24 69 69 2c 20 24 78 31 2c 20  ALUES($ii, $x1, 
0380: 24 78 32 2c 20 24 79 31 2c 20 24 79 32 29 7d 0a  $x2, $y1, $y2)}.
0390: 20 20 20 20 69 6e 63 72 20 69 69 0a 20 20 7d 0a      incr ii.  }.
03a0: 7d 7d 5d 0a 70 75 74 73 20 22 24 62 74 72 65 65  }}].puts "$btree
03b0: 5f 74 69 6d 65 22 0a 0a 70 75 74 73 20 2d 6e 6f  _time"..puts -no
03c0: 6e 65 77 6c 69 6e 65 20 22 49 6e 73 65 72 74 69  newline "Inserti
03d0: 6e 67 20 69 6e 74 6f 20 72 74 72 65 65 2e 2e 2e  ng into rtree...
03e0: 20 22 0a 66 6c 75 73 68 20 73 74 64 6f 75 74 0a   ".flush stdout.
03f0: 73 65 74 20 72 74 72 65 65 5f 74 69 6d 65 20 5b  set rtree_time [
0400: 74 69 6d 65 20 7b 64 62 20 74 72 61 6e 73 61 63  time {db transac
0410: 74 69 6f 6e 20 7b 0a 20 20 73 65 74 20 69 69 20  tion {.  set ii 
0420: 31 0a 20 20 66 6f 72 65 61 63 68 20 7b 78 31 20  1.  foreach {x1 
0430: 78 32 20 79 31 20 79 32 7d 20 24 64 61 74 61 20  x2 y1 y2} $data 
0440: 7b 0a 20 20 20 20 69 6e 63 72 20 69 69 0a 20 20  {.    incr ii.  
0450: 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52    db eval {INSER
0460: 54 20 49 4e 54 4f 20 72 74 72 65 65 20 56 41 4c  T INTO rtree VAL
0470: 55 45 53 28 24 69 69 2c 20 24 78 31 2c 20 24 78  UES($ii, $x1, $x
0480: 32 2c 20 24 79 31 2c 20 24 79 32 29 7d 0a 20 20  2, $y1, $y2)}.  
0490: 7d 0a 7d 7d 5d 0a 70 75 74 73 20 22 24 72 74 72  }.}}].puts "$rtr
04a0: 65 65 5f 74 69 6d 65 22 0a 0a 0a 70 75 74 73 20  ee_time"...puts 
04b0: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 53 65 6c 65  -nonewline "Sele
04c0: 63 74 69 6e 67 20 66 72 6f 6d 20 62 74 72 65 65  cting from btree
04d0: 2e 2e 2e 20 22 0a 66 6c 75 73 68 20 73 74 64 6f  ... ".flush stdo
04e0: 75 74 0a 73 65 74 20 62 74 72 65 65 5f 73 65 6c  ut.set btree_sel
04f0: 65 63 74 5f 74 69 6d 65 20 5b 74 69 6d 65 20 7b  ect_time [time {
0500: 0a 20 20 66 6f 72 65 61 63 68 20 7b 78 31 20 78  .  foreach {x1 x
0510: 32 20 79 31 20 79 32 7d 20 5b 6c 72 61 6e 67 65  2 y1 y2} [lrange
0520: 20 24 64 61 74 61 20 30 20 5b 65 78 70 72 20 24   $data 0 [expr $
0530: 4e 51 55 45 52 59 2a 34 2d 31 5d 5d 20 7b 0a 20  NQUERY*4-1]] {. 
0540: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
0550: 43 54 20 2a 20 46 52 4f 4d 20 62 74 72 65 65 20  CT * FROM btree 
0560: 57 48 45 52 45 20 78 31 3c 24 78 31 20 41 4e 44  WHERE x1<$x1 AND
0570: 20 78 32 3e 24 78 32 20 41 4e 44 20 79 31 3c 24   x2>$x2 AND y1<$
0580: 79 31 20 41 4e 44 20 79 32 3e 24 79 32 7d 0a 20  y1 AND y2>$y2}. 
0590: 7d 0a 7d 5d 0a 70 75 74 73 20 22 24 62 74 72 65  }.}].puts "$btre
05a0: 65 5f 73 65 6c 65 63 74 5f 74 69 6d 65 22 0a 0a  e_select_time"..
05b0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
05c0: 22 53 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 20  "Selecting from 
05d0: 72 74 72 65 65 2e 2e 2e 20 22 0a 66 6c 75 73 68  rtree... ".flush
05e0: 20 73 74 64 6f 75 74 0a 73 65 74 20 72 74 72 65   stdout.set rtre
05f0: 65 5f 73 65 6c 65 63 74 5f 74 69 6d 65 20 5b 74  e_select_time [t
0600: 69 6d 65 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  ime {.  foreach 
0610: 7b 78 31 20 78 32 20 79 31 20 79 32 7d 20 5b 6c  {x1 x2 y1 y2} [l
0620: 72 61 6e 67 65 20 24 64 61 74 61 20 30 20 5b 65  range $data 0 [e
0630: 78 70 72 20 24 4e 51 55 45 52 59 2a 34 2d 31 5d  xpr $NQUERY*4-1]
0640: 5d 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  ] {.    db eval 
0650: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72  {SELECT * FROM r
0660: 74 72 65 65 20 57 48 45 52 45 20 78 31 3c 24 78  tree WHERE x1<$x
0670: 31 20 41 4e 44 20 78 32 3e 24 78 32 20 41 4e 44  1 AND x2>$x2 AND
0680: 20 79 31 3c 24 79 31 20 41 4e 44 20 79 32 3e 24   y1<$y1 AND y2>$
0690: 79 32 7d 0a 20 20 7d 0a 7d 5d 0a 70 75 74 73 20  y2}.  }.}].puts 
06a0: 22 24 72 74 72 65 65 5f 73 65 6c 65 63 74 5f 74  "$rtree_select_t
06b0: 69 6d 65 22 0a                                   ime".