/ Hex Artifact Content
Login

Artifact c05a461d0a6b05991106467d0c47480f2e709c82:


0000: 23 20 32 30 31 31 20 41 75 67 75 73 74 20 31 33  # 2011 August 13
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n 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 2a 0a 23 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: 74 65 73 74 73 20 66 6f 72 20 53 51 4c 69 74 65  tests for SQLite
0190: 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65 20 66   library.  The f
01a0: 6f 63 75 73 20 6f 66 20 74 68 65 20 74 65 73 74  ocus of the test
01b0: 73 0a 23 20 69 6e 20 74 68 69 73 20 66 69 6c 65  s.# in this file
01c0: 20 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20   is testing the 
01d0: 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20  capabilities of 
01e0: 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 0a 23 0a  sqlite_stat3..#.
01f0: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0200: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0210: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0220: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69  ir/tester.tcl..i
0230: 66 63 61 70 61 62 6c 65 20 21 73 74 61 74 34 26  fcapable !stat4&
0240: 26 21 73 74 61 74 33 20 7b 0a 20 20 66 69 6e 69  &!stat3 {.  fini
0250: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
0260: 0a 7d 0a 0a 73 65 74 20 74 65 73 74 70 72 65 66  .}..set testpref
0270: 69 78 20 61 6e 61 6c 79 7a 65 38 0a 0a 70 72 6f  ix analyze8..pro
0280: 63 20 65 71 70 20 7b 73 71 6c 20 7b 64 62 20 64  c eqp {sql {db d
0290: 62 7d 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c 20  b}} {.  uplevel 
02a0: 65 78 65 63 73 71 6c 20 5b 6c 69 73 74 20 22 45  execsql [list "E
02b0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
02c0: 4e 20 24 73 71 6c 22 5d 20 24 64 62 0a 7d 0a 0a  N $sql"] $db.}..
02d0: 23 20 53 63 65 6e 61 72 69 6f 3a 0a 23 0a 23 20  # Scenario:.#.# 
02e0: 20 20 20 54 77 6f 20 69 6e 64 69 63 65 73 2e 20     Two indices. 
02f0: 20 4f 6e 65 20 68 61 73 20 6d 6f 73 74 6c 79 20   One has mostly 
0300: 73 69 6e 67 6c 65 74 6f 6e 20 65 6e 74 72 69 65  singleton entrie
0310: 73 2c 20 62 75 74 20 66 6f 72 20 61 20 66 65 77  s, but for a few
0320: 0a 23 20 20 20 20 76 61 6c 75 65 73 20 74 68 65  .#    values the
0330: 72 65 20 61 72 65 20 68 75 6e 64 72 65 64 73 20  re are hundreds 
0340: 6f 66 20 65 6e 74 72 69 65 73 2e 20 20 54 68 65  of entries.  The
0350: 20 6f 74 68 65 72 20 68 61 73 20 31 30 2d 32 30   other has 10-20
0360: 0a 23 20 20 20 20 65 6e 74 72 69 65 73 20 70 65  .#    entries pe
0370: 72 20 76 61 6c 75 65 2e 0a 23 0a 23 20 56 65 72  r value..#.# Ver
0380: 69 66 79 20 74 68 61 74 20 74 68 65 20 71 75 65  ify that the que
0390: 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 6f 6f 73  ry planner choos
03a0: 65 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 64  es the first ind
03b0: 65 78 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c  ex for the singl
03c0: 65 74 6f 6e 0a 23 20 65 6e 74 72 69 65 73 20 61  eton.# entries a
03d0: 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e  nd the second in
03e0: 64 65 78 20 66 6f 72 20 74 68 65 20 6f 74 68 65  dex for the othe
03f0: 72 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 31 2e  rs..#.do_test 1.
0400: 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  0 {.  db eval {.
0410: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0420: 20 74 31 28 61 2c 62 2c 63 2c 64 29 3b 0a 20 20   t1(a,b,c,d);.  
0430: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
0440: 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20  1a ON t1(a);.   
0450: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
0460: 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20 20  b ON t1(b);.    
0470: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 63  CREATE INDEX t1c
0480: 20 4f 4e 20 74 31 28 63 29 3b 0a 20 20 7d 0a 20   ON t1(c);.  }. 
0490: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
04a0: 24 69 3c 31 30 30 30 7d 20 7b 69 6e 63 72 20 69  $i<1000} {incr i
04b0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 69 25 32  } {.    if {$i%2
04c0: 3d 3d 30 7d 20 7b 73 65 74 20 61 20 24 69 7d 20  ==0} {set a $i} 
04d0: 7b 73 65 74 20 61 20 5b 65 78 70 72 20 7b 28 24  {set a [expr {($
04e0: 69 25 38 29 2a 31 30 30 7d 5d 7d 0a 20 20 20 20  i%8)*100}]}.    
04f0: 73 65 74 20 62 20 5b 65 78 70 72 20 7b 24 69 2f  set b [expr {$i/
0500: 31 30 7d 5d 0a 20 20 20 20 73 65 74 20 63 20 5b  10}].    set c [
0510: 65 78 70 72 20 7b 24 69 2f 38 7d 5d 0a 20 20 20  expr {$i/8}].   
0520: 20 73 65 74 20 63 20 5b 65 78 70 72 20 7b 24 63   set c [expr {$c
0530: 2a 24 63 2a 24 63 7d 5d 0a 20 20 20 20 64 62 20  *$c*$c}].    db 
0540: 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  eval {INSERT INT
0550: 4f 20 74 31 20 56 41 4c 55 45 53 28 24 61 2c 24  O t1 VALUES($a,$
0560: 62 2c 24 63 2c 24 69 29 7d 0a 20 20 7d 0a 20 20  b,$c,$i)}.  }.  
0570: 64 62 20 65 76 61 6c 20 7b 41 4e 41 4c 59 5a 45  db eval {ANALYZE
0580: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 68 65 20 61 3d  }.} {}..# The a=
0590: 3d 31 30 30 20 63 6f 6d 70 61 72 69 73 6f 6e 20  =100 comparison 
05a0: 69 73 20 65 78 70 65 6e 73 69 76 65 20 62 65 63  is expensive bec
05b0: 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 6d  ause there are m
05c0: 61 6e 79 20 72 6f 77 73 0a 23 20 77 69 74 68 20  any rows.# with 
05d0: 61 3d 3d 31 30 30 2e 20 20 41 6e 64 20 73 6f 20  a==100.  And so 
05e0: 66 6f 72 20 74 68 6f 73 65 20 63 61 73 65 73 2c  for those cases,
05f0: 20 63 68 6f 6f 73 65 20 74 68 65 20 74 31 62 20   choose the t1b 
0600: 69 6e 64 65 78 2e 0a 23 0a 23 20 42 75 66 20 72  index..#.# Buf r
0610: 6f 20 61 3d 3d 39 39 20 61 6e 64 20 61 3d 3d 31  o a==99 and a==1
0620: 30 31 2c 20 74 68 65 72 65 20 61 72 65 20 66 61  01, there are fa
0630: 72 20 66 65 77 65 72 20 72 6f 77 73 20 73 6f 20  r fewer rows so 
0640: 63 68 6f 6f 73 65 0a 23 20 74 68 65 20 74 31 61  choose.# the t1a
0650: 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65 73   index..#.do_tes
0660: 74 20 31 2e 31 20 7b 0a 20 20 65 71 70 20 7b 53  t 1.1 {.  eqp {S
0670: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0680: 57 48 45 52 45 20 61 3d 31 30 30 20 41 4e 44 20  WHERE a=100 AND 
0690: 62 3d 35 35 7d 0a 7d 20 7b 30 20 30 20 30 20 7b  b=55}.} {0 0 0 {
06a0: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
06b0: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 62 20  USING INDEX t1b 
06c0: 28 62 3d 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  (b=?)}}.do_test 
06d0: 31 2e 32 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c  1.2 {.  eqp {SEL
06e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
06f0: 45 52 45 20 61 3d 39 39 20 41 4e 44 20 62 3d 35  ERE a=99 AND b=5
0700: 35 7d 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41  5}.} {0 0 0 {SEA
0710: 52 43 48 20 54 41 42 4c 45 20 74 31 20 55 53 49  RCH TABLE t1 USI
0720: 4e 47 20 49 4e 44 45 58 20 74 31 61 20 28 61 3d  NG INDEX t1a (a=
0730: 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 33  ?)}}.do_test 1.3
0740: 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54   {.  eqp {SELECT
0750: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0760: 20 61 3d 31 30 31 20 41 4e 44 20 62 3d 35 35 7d   a=101 AND b=55}
0770: 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43  .} {0 0 0 {SEARC
0780: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
0790: 20 49 4e 44 45 58 20 74 31 61 20 28 61 3d 3f 29   INDEX t1a (a=?)
07a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 34 20 7b  }}.do_test 1.4 {
07b0: 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a  .  eqp {SELECT *
07c0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
07d0: 3d 31 30 30 20 41 4e 44 20 62 3d 35 36 7d 0a 7d  =100 AND b=56}.}
07e0: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
07f0: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
0800: 4e 44 45 58 20 74 31 62 20 28 62 3d 3f 29 7d 7d  NDEX t1b (b=?)}}
0810: 0a 64 6f 5f 74 65 73 74 20 31 2e 35 20 7b 0a 20  .do_test 1.5 {. 
0820: 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46   eqp {SELECT * F
0830: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 39  ROM t1 WHERE a=9
0840: 39 20 41 4e 44 20 62 3d 35 36 7d 0a 7d 20 7b 30  9 AND b=56}.} {0
0850: 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42   0 0 {SEARCH TAB
0860: 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45  LE t1 USING INDE
0870: 58 20 74 31 61 20 28 61 3d 3f 29 7d 7d 0a 64 6f  X t1a (a=?)}}.do
0880: 5f 74 65 73 74 20 31 2e 36 20 7b 0a 20 20 65 71  _test 1.6 {.  eq
0890: 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  p {SELECT * FROM
08a0: 20 74 31 20 57 48 45 52 45 20 61 3d 31 30 31 20   t1 WHERE a=101 
08b0: 41 4e 44 20 62 3d 35 36 7d 0a 7d 20 7b 30 20 30  AND b=56}.} {0 0
08c0: 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45   0 {SEARCH TABLE
08d0: 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t1 USING INDEX 
08e0: 74 31 61 20 28 61 3d 3f 29 7d 7d 0a 64 6f 5f 74  t1a (a=?)}}.do_t
08f0: 65 73 74 20 32 2e 31 20 7b 0a 20 20 65 71 70 20  est 2.1 {.  eqp 
0900: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0910: 31 20 57 48 45 52 45 20 61 3d 31 30 30 20 41 4e  1 WHERE a=100 AN
0920: 44 20 62 20 42 45 54 57 45 45 4e 20 35 30 20 41  D b BETWEEN 50 A
0930: 4e 44 20 35 34 7d 0a 7d 20 7b 30 20 30 20 30 20  ND 54}.} {0 0 0 
0940: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  {SEARCH TABLE t1
0950: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 62   USING INDEX t1b
0960: 20 28 62 3e 3f 20 41 4e 44 20 62 3c 3f 29 7d 7d   (b>? AND b<?)}}
0970: 0a 0a 23 20 54 68 65 72 65 20 61 72 65 20 6d 61  ..# There are ma
0980: 6e 79 20 6d 6f 72 65 20 76 61 6c 75 65 73 20 6f  ny more values o
0990: 66 20 63 20 62 65 74 77 65 65 6e 20 30 20 61 6e  f c between 0 an
09a0: 64 20 31 30 30 30 30 30 20 74 68 61 6e 20 74 68  d 100000 than th
09b0: 65 72 65 20 61 72 65 0a 23 20 62 65 74 77 65 65  ere are.# betwee
09c0: 6e 20 38 30 30 30 30 30 20 61 6e 64 20 39 30 30  n 800000 and 900
09d0: 30 30 30 2e 20 20 53 6f 20 74 31 63 20 69 73 20  000.  So t1c is 
09e0: 6d 6f 72 65 20 73 65 6c 65 63 74 69 76 65 20 66  more selective f
09f0: 6f 72 20 74 68 65 20 6c 61 74 74 65 72 0a 23 20  or the latter.# 
0a00: 72 61 6e 67 65 2e 0a 23 20 0a 23 20 54 65 73 74  range..# .# Test
0a10: 20 33 2e 32 20 69 73 20 61 20 6c 69 74 74 6c 65   3.2 is a little
0a20: 20 75 6e 73 74 61 62 6c 65 2e 20 49 74 20 64 65   unstable. It de
0a30: 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 70 6c 61  pends on the pla
0a40: 6e 6e 65 72 20 65 73 74 69 6d 61 74 69 6e 67 0a  nner estimating.
0a50: 23 20 74 68 61 74 20 28 62 20 42 45 54 57 45 45  # that (b BETWEE
0a60: 4e 20 33 30 20 41 4e 44 20 33 34 29 20 77 69 6c  N 30 AND 34) wil
0a70: 6c 20 6d 61 74 63 68 20 6d 6f 72 65 20 72 6f 77  l match more row
0a80: 73 20 74 68 61 6e 20 28 63 20 42 45 54 57 45 45  s than (c BETWEE
0a90: 4e 0a 23 20 38 30 30 30 30 30 20 41 4e 44 20 39  N.# 800000 AND 9
0aa0: 30 30 30 30 30 29 2e 20 57 68 69 63 68 20 69 73  00000). Which is
0ab0: 20 61 20 70 72 65 74 74 79 20 63 6c 6f 73 65 20   a pretty close 
0ac0: 63 61 6c 6c 20 28 35 30 20 76 73 2e 20 33 32 29  call (50 vs. 32)
0ad0: 2c 20 73 6f 0a 23 20 74 68 65 20 70 6c 61 6e 6e  , so.# the plann
0ae0: 65 72 20 63 6f 75 6c 64 20 67 65 74 20 69 74 20  er could get it 
0af0: 77 72 6f 6e 67 20 77 69 74 68 20 61 6e 20 75 6e  wrong with an un
0b00: 6c 75 63 6b 79 20 73 65 74 20 6f 66 20 73 61 6d  lucky set of sam
0b10: 70 6c 65 73 2e 20 54 68 69 73 0a 23 20 63 61 73  ples. This.# cas
0b20: 65 20 68 61 70 70 65 6e 73 20 74 6f 20 77 6f 72  e happens to wor
0b30: 6b 2c 20 62 75 74 20 6f 74 68 65 72 73 20 28 22  k, but others ("
0b40: 62 20 42 45 54 57 45 45 4e 20 34 30 20 41 4e 44  b BETWEEN 40 AND
0b50: 20 34 34 22 20 66 6f 72 20 65 78 61 6d 70 6c 65   44" for example
0b60: 29 20 0a 23 20 77 69 6c 6c 20 66 61 69 6c 2e 0a  ) .# will fail..
0b70: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
0b80: 74 20 33 2e 30 20 7b 0a 20 20 53 45 4c 45 43 54  t 3.0 {.  SELECT
0b90: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
0ba0: 31 20 57 48 45 52 45 20 62 20 42 45 54 57 45 45  1 WHERE b BETWEE
0bb0: 4e 20 33 30 20 41 4e 44 20 33 34 3b 0a 20 20 53  N 30 AND 34;.  S
0bc0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0bd0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 20 42  ROM t1 WHERE c B
0be0: 45 54 57 45 45 4e 20 30 20 41 4e 44 20 31 30 30  ETWEEN 0 AND 100
0bf0: 30 30 30 3b 0a 20 20 53 45 4c 45 43 54 20 63 6f  000;.  SELECT co
0c00: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57  unt(*) FROM t1 W
0c10: 48 45 52 45 20 63 20 42 45 54 57 45 45 4e 20 38  HERE c BETWEEN 8
0c20: 30 30 30 30 30 20 41 4e 44 20 39 30 30 30 30 30  00000 AND 900000
0c30: 3b 0a 7d 20 7b 35 30 20 33 37 36 20 33 32 7d 0a  ;.} {50 376 32}.
0c40: 64 6f 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20  do_test 3.1 {.  
0c50: 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  eqp {SELECT * FR
0c60: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 42 45  OM t1 WHERE b BE
0c70: 54 57 45 45 4e 20 33 30 20 41 4e 44 20 33 34 20  TWEEN 30 AND 34 
0c80: 41 4e 44 20 63 20 42 45 54 57 45 45 4e 20 30 20  AND c BETWEEN 0 
0c90: 41 4e 44 20 31 30 30 30 30 30 7d 0a 7d 20 7b 30  AND 100000}.} {0
0ca0: 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42   0 0 {SEARCH TAB
0cb0: 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45  LE t1 USING INDE
0cc0: 58 20 74 31 62 20 28 62 3e 3f 20 41 4e 44 20 62  X t1b (b>? AND b
0cd0: 3c 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 33 2e  <?)}}.do_test 3.
0ce0: 32 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43  2 {.  eqp {SELEC
0cf0: 54 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  T * FROM t1.    
0d00: 20 20 20 57 48 45 52 45 20 62 20 42 45 54 57 45     WHERE b BETWE
0d10: 45 4e 20 33 30 20 41 4e 44 20 33 34 20 41 4e 44  EN 30 AND 34 AND
0d20: 20 63 20 42 45 54 57 45 45 4e 20 38 30 30 30 30   c BETWEEN 80000
0d30: 30 20 41 4e 44 20 39 30 30 30 30 30 7d 0a 7d 20  0 AND 900000}.} 
0d40: 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54  {0 0 0 {SEARCH T
0d50: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
0d60: 44 45 58 20 74 31 63 20 28 63 3e 3f 20 41 4e 44  DEX t1c (c>? AND
0d70: 20 63 3c 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20   c<?)}}.do_test 
0d80: 33 2e 33 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c  3.3 {.  eqp {SEL
0d90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
0da0: 45 52 45 20 61 3d 31 30 30 20 41 4e 44 20 63 20  ERE a=100 AND c 
0db0: 42 45 54 57 45 45 4e 20 30 20 41 4e 44 20 31 30  BETWEEN 0 AND 10
0dc0: 30 30 30 30 7d 0a 7d 20 7b 30 20 30 20 30 20 7b  0000}.} {0 0 0 {
0dd0: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
0de0: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 61 20  USING INDEX t1a 
0df0: 28 61 3d 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  (a=?)}}.do_test 
0e00: 33 2e 34 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c  3.4 {.  eqp {SEL
0e10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20  ECT * FROM t1.  
0e20: 20 20 20 20 20 57 48 45 52 45 20 61 3d 31 30 30       WHERE a=100
0e30: 20 41 4e 44 20 63 20 42 45 54 57 45 45 4e 20 38   AND c BETWEEN 8
0e40: 30 30 30 30 30 20 41 4e 44 20 39 30 30 30 30 30  00000 AND 900000
0e50: 7d 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52  }.} {0 0 0 {SEAR
0e60: 43 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e  CH TABLE t1 USIN
0e70: 47 20 49 4e 44 45 58 20 74 31 63 20 28 63 3e 3f  G INDEX t1c (c>?
0e80: 20 41 4e 44 20 63 3c 3f 29 7d 7d 0a 0a 66 69 6e   AND c<?)}}..fin
0e90: 69 73 68 5f 74 65 73 74 0a                       ish_test.