/ Hex Artifact Content
Login

Artifact e32a970564271114786703750e6939cf81dea4b8580874e38e9213ee092f6936:


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 2f 2a 53 45 41 52 43  b=55}.} {/*SEARC
06a0: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
06b0: 20 49 4e 44 45 58 20 74 31 62 20 28 62 3d 3f 29   INDEX t1b (b=?)
06c0: 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 31 2e 32 20  */}.do_test 1.2 
06d0: 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20  {.  eqp {SELECT 
06e0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
06f0: 61 3d 39 39 20 41 4e 44 20 62 3d 35 35 7d 0a 7d  a=99 AND b=55}.}
0700: 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c 45   {/*SEARCH TABLE
0710: 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t1 USING INDEX 
0720: 74 31 61 20 28 61 3d 3f 29 2a 2f 7d 0a 64 6f 5f  t1a (a=?)*/}.do_
0730: 74 65 73 74 20 31 2e 33 20 7b 0a 20 20 65 71 70  test 1.3 {.  eqp
0740: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0750: 74 31 20 57 48 45 52 45 20 61 3d 31 30 31 20 41  t1 WHERE a=101 A
0760: 4e 44 20 62 3d 35 35 7d 0a 7d 20 7b 2f 2a 53 45  ND b=55}.} {/*SE
0770: 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55 53  ARCH TABLE t1 US
0780: 49 4e 47 20 49 4e 44 45 58 20 74 31 61 20 28 61  ING INDEX t1a (a
0790: 3d 3f 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 31  =?)*/}.do_test 1
07a0: 2e 34 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45  .4 {.  eqp {SELE
07b0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
07c0: 52 45 20 61 3d 31 30 30 20 41 4e 44 20 62 3d 35  RE a=100 AND b=5
07d0: 36 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54  6}.} {/*SEARCH T
07e0: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
07f0: 44 45 58 20 74 31 62 20 28 62 3d 3f 29 2a 2f 7d  DEX t1b (b=?)*/}
0800: 0a 64 6f 5f 74 65 73 74 20 31 2e 35 20 7b 0a 20  .do_test 1.5 {. 
0810: 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46   eqp {SELECT * F
0820: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 39  ROM t1 WHERE a=9
0830: 39 20 41 4e 44 20 62 3d 35 36 7d 0a 7d 20 7b 2f  9 AND b=56}.} {/
0840: 2a 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  *SEARCH TABLE t1
0850: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 61   USING INDEX t1a
0860: 20 28 61 3d 3f 29 2a 2f 7d 0a 64 6f 5f 74 65 73   (a=?)*/}.do_tes
0870: 74 20 31 2e 36 20 7b 0a 20 20 65 71 70 20 7b 53  t 1.6 {.  eqp {S
0880: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0890: 57 48 45 52 45 20 61 3d 31 30 31 20 41 4e 44 20  WHERE a=101 AND 
08a0: 62 3d 35 36 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43  b=56}.} {/*SEARC
08b0: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
08c0: 20 49 4e 44 45 58 20 74 31 61 20 28 61 3d 3f 29   INDEX t1a (a=?)
08d0: 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 32 2e 31 20  */}.do_test 2.1 
08e0: 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20  {.  eqp {SELECT 
08f0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0900: 61 3d 31 30 30 20 41 4e 44 20 62 20 42 45 54 57  a=100 AND b BETW
0910: 45 45 4e 20 35 30 20 41 4e 44 20 35 34 7d 0a 7d  EEN 50 AND 54}.}
0920: 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c 45   {/*SEARCH TABLE
0930: 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t1 USING INDEX 
0940: 74 31 62 20 28 62 3e 3f 20 41 4e 44 20 62 3c 3f  t1b (b>? AND b<?
0950: 29 2a 2f 7d 0a 0a 23 20 54 68 65 72 65 20 61 72  )*/}..# There ar
0960: 65 20 6d 61 6e 79 20 6d 6f 72 65 20 76 61 6c 75  e many more valu
0970: 65 73 20 6f 66 20 63 20 62 65 74 77 65 65 6e 20  es of c between 
0980: 30 20 61 6e 64 20 31 30 30 30 30 30 20 74 68 61  0 and 100000 tha
0990: 6e 20 74 68 65 72 65 20 61 72 65 0a 23 20 62 65  n there are.# be
09a0: 74 77 65 65 6e 20 38 30 30 30 30 30 20 61 6e 64  tween 800000 and
09b0: 20 39 30 30 30 30 30 2e 20 20 53 6f 20 74 31 63   900000.  So t1c
09c0: 20 69 73 20 6d 6f 72 65 20 73 65 6c 65 63 74 69   is more selecti
09d0: 76 65 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65  ve for the latte
09e0: 72 0a 23 20 72 61 6e 67 65 2e 0a 23 20 0a 23 20  r.# range..# .# 
09f0: 54 65 73 74 20 33 2e 32 20 69 73 20 61 20 6c 69  Test 3.2 is a li
0a00: 74 74 6c 65 20 75 6e 73 74 61 62 6c 65 2e 20 49  ttle unstable. I
0a10: 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  t depends on the
0a20: 20 70 6c 61 6e 6e 65 72 20 65 73 74 69 6d 61 74   planner estimat
0a30: 69 6e 67 0a 23 20 74 68 61 74 20 28 62 20 42 45  ing.# that (b BE
0a40: 54 57 45 45 4e 20 33 30 20 41 4e 44 20 33 34 29  TWEEN 30 AND 34)
0a50: 20 77 69 6c 6c 20 6d 61 74 63 68 20 6d 6f 72 65   will match more
0a60: 20 72 6f 77 73 20 74 68 61 6e 20 28 63 20 42 45   rows than (c BE
0a70: 54 57 45 45 4e 0a 23 20 38 30 30 30 30 30 20 41  TWEEN.# 800000 A
0a80: 4e 44 20 39 30 30 30 30 30 29 2e 20 57 68 69 63  ND 900000). Whic
0a90: 68 20 69 73 20 61 20 70 72 65 74 74 79 20 63 6c  h is a pretty cl
0aa0: 6f 73 65 20 63 61 6c 6c 20 28 35 30 20 76 73 2e  ose call (50 vs.
0ab0: 20 33 32 29 2c 20 73 6f 0a 23 20 74 68 65 20 70   32), so.# the p
0ac0: 6c 61 6e 6e 65 72 20 63 6f 75 6c 64 20 67 65 74  lanner could get
0ad0: 20 69 74 20 77 72 6f 6e 67 20 77 69 74 68 20 61   it wrong with a
0ae0: 6e 20 75 6e 6c 75 63 6b 79 20 73 65 74 20 6f 66  n unlucky set of
0af0: 20 73 61 6d 70 6c 65 73 2e 20 54 68 69 73 0a 23   samples. This.#
0b00: 20 63 61 73 65 20 68 61 70 70 65 6e 73 20 74 6f   case happens to
0b10: 20 77 6f 72 6b 2c 20 62 75 74 20 6f 74 68 65 72   work, but other
0b20: 73 20 28 22 62 20 42 45 54 57 45 45 4e 20 34 30  s ("b BETWEEN 40
0b30: 20 41 4e 44 20 34 34 22 20 66 6f 72 20 65 78 61   AND 44" for exa
0b40: 6d 70 6c 65 29 20 0a 23 20 77 69 6c 6c 20 66 61  mple) .# will fa
0b50: 69 6c 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  il..#.do_execsql
0b60: 5f 74 65 73 74 20 33 2e 30 20 7b 0a 20 20 53 45  _test 3.0 {.  SE
0b70: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
0b80: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 42 45  OM t1 WHERE b BE
0b90: 54 57 45 45 4e 20 33 30 20 41 4e 44 20 33 34 3b  TWEEN 30 AND 34;
0ba0: 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  .  SELECT count(
0bb0: 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  *) FROM t1 WHERE
0bc0: 20 63 20 42 45 54 57 45 45 4e 20 30 20 41 4e 44   c BETWEEN 0 AND
0bd0: 20 31 30 30 30 30 30 3b 0a 20 20 53 45 4c 45 43   100000;.  SELEC
0be0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0bf0: 74 31 20 57 48 45 52 45 20 63 20 42 45 54 57 45  t1 WHERE c BETWE
0c00: 45 4e 20 38 30 30 30 30 30 20 41 4e 44 20 39 30  EN 800000 AND 90
0c10: 30 30 30 30 3b 0a 7d 20 7b 35 30 20 33 37 36 20  0000;.} {50 376 
0c20: 33 32 7d 0a 64 6f 5f 74 65 73 74 20 33 2e 31 20  32}.do_test 3.1 
0c30: 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20  {.  eqp {SELECT 
0c40: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0c50: 62 20 42 45 54 57 45 45 4e 20 33 30 20 41 4e 44  b BETWEEN 30 AND
0c60: 20 33 34 20 41 4e 44 20 63 20 42 45 54 57 45 45   34 AND c BETWEE
0c70: 4e 20 30 20 41 4e 44 20 31 30 30 30 30 30 7d 0a  N 0 AND 100000}.
0c80: 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c  } {/*SEARCH TABL
0c90: 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58  E t1 USING INDEX
0ca0: 20 74 31 62 20 28 62 3e 3f 20 41 4e 44 20 62 3c   t1b (b>? AND b<
0cb0: 3f 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 33 2e  ?)*/}.do_test 3.
0cc0: 32 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43  2 {.  eqp {SELEC
0cd0: 54 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  T * FROM t1.    
0ce0: 20 20 20 57 48 45 52 45 20 62 20 42 45 54 57 45     WHERE b BETWE
0cf0: 45 4e 20 33 30 20 41 4e 44 20 33 34 20 41 4e 44  EN 30 AND 34 AND
0d00: 20 63 20 42 45 54 57 45 45 4e 20 38 30 30 30 30   c BETWEEN 80000
0d10: 30 20 41 4e 44 20 39 30 30 30 30 30 7d 0a 7d 20  0 AND 900000}.} 
0d20: 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c 45 20  {/*SEARCH TABLE 
0d30: 74 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74  t1 USING INDEX t
0d40: 31 63 20 28 63 3e 3f 20 41 4e 44 20 63 3c 3f 29  1c (c>? AND c<?)
0d50: 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 33 2e 33 20  */}.do_test 3.3 
0d60: 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20  {.  eqp {SELECT 
0d70: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0d80: 61 3d 31 30 30 20 41 4e 44 20 63 20 42 45 54 57  a=100 AND c BETW
0d90: 45 45 4e 20 30 20 41 4e 44 20 31 30 30 30 30 30  EEN 0 AND 100000
0da0: 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41  }.} {/*SEARCH TA
0db0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
0dc0: 45 58 20 74 31 61 20 28 61 3d 3f 29 2a 2f 7d 0a  EX t1a (a=?)*/}.
0dd0: 64 6f 5f 74 65 73 74 20 33 2e 34 20 7b 0a 20 20  do_test 3.4 {.  
0de0: 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  eqp {SELECT * FR
0df0: 4f 4d 20 74 31 0a 20 20 20 20 20 20 20 57 48 45  OM t1.       WHE
0e00: 52 45 20 61 3d 31 30 30 20 41 4e 44 20 63 20 42  RE a=100 AND c B
0e10: 45 54 57 45 45 4e 20 38 30 30 30 30 30 20 41 4e  ETWEEN 800000 AN
0e20: 44 20 39 30 30 30 30 30 7d 0a 7d 20 7b 2f 2a 53  D 900000}.} {/*S
0e30: 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55  EARCH TABLE t1 U
0e40: 53 49 4e 47 20 49 4e 44 45 58 20 74 31 63 20 28  SING INDEX t1c (
0e50: 63 3e 3f 20 41 4e 44 20 63 3c 3f 29 2a 2f 7d 0a  c>? AND c<?)*/}.
0e60: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.