/ Hex Artifact Content
Login

Artifact b37db8a10d467a69e71a9f3d40bbb266c2f587742b37c6912f6e3f7185a0e216:


0000: 23 20 32 30 31 34 2d 30 34 2d 32 36 0a 23 0a 23  # 2014-04-26.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 0a 0a 73 65 74 20 74 65 73 74 64  **.# ..set testd
0170: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0180: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0190: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
01a0: 74 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65 66  tcl.set testpref
01b0: 69 78 20 63 6f 73 74 0a 0a 0a 64 6f 5f 65 78 65  ix cost...do_exe
01c0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a  csql_test 1.1 {.
01d0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
01e0: 33 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  3(id INTEGER PRI
01f0: 4d 41 52 59 20 4b 45 59 2c 20 62 20 4e 4f 54 20  MARY KEY, b NOT 
0200: 4e 55 4c 4c 29 3b 0a 20 20 43 52 45 41 54 45 20  NULL);.  CREATE 
0210: 54 41 42 4c 45 20 74 34 28 63 2c 20 64 2c 20 65  TABLE t4(c, d, e
0220: 29 3b 0a 20 20 43 52 45 41 54 45 20 55 4e 49 51  );.  CREATE UNIQ
0230: 55 45 20 49 4e 44 45 58 20 69 33 20 4f 4e 20 74  UE INDEX i3 ON t
0240: 33 28 62 29 3b 0a 20 20 43 52 45 41 54 45 20 55  3(b);.  CREATE U
0250: 4e 49 51 55 45 20 49 4e 44 45 58 20 69 34 20 4f  NIQUE INDEX i4 O
0260: 4e 20 74 34 28 63 2c 20 64 29 3b 0a 7d 0a 64 6f  N t4(c, d);.}.do
0270: 5f 65 71 70 5f 74 65 73 74 20 31 2e 32 20 7b 0a  _eqp_test 1.2 {.
0280: 20 20 53 45 4c 45 43 54 20 65 20 46 52 4f 4d 20    SELECT e FROM 
0290: 74 33 2c 20 74 34 20 57 48 45 52 45 20 62 3d 63  t3, t4 WHERE b=c
02a0: 20 4f 52 44 45 52 20 42 59 20 62 2c 20 64 3b 0a   ORDER BY b, d;.
02b0: 7d 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e  } {.  QUERY PLAN
02c0: 0a 20 20 7c 2d 2d 53 43 41 4e 20 54 41 42 4c 45  .  |--SCAN TABLE
02d0: 20 74 33 20 55 53 49 4e 47 20 43 4f 56 45 52 49   t3 USING COVERI
02e0: 4e 47 20 49 4e 44 45 58 20 69 33 0a 20 20 60 2d  NG INDEX i3.  `-
02f0: 2d 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 34  -SEARCH TABLE t4
0300: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 69 34 20   USING INDEX i4 
0310: 28 63 3d 3f 29 0a 7d 0a 0a 0a 64 6f 5f 65 78 65  (c=?).}...do_exe
0320: 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a  csql_test 2.1 {.
0330: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0340: 31 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  1(a, b);.  CREAT
0350: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
0360: 28 61 29 3b 0a 7d 0a 0a 23 20 49 74 20 69 73 20  (a);.}..# It is 
0370: 62 65 74 74 65 72 20 74 6f 20 75 73 65 20 61 6e  better to use an
0380: 20 69 6e 64 65 78 20 66 6f 72 20 4f 52 44 45 52   index for ORDER
0390: 20 42 59 20 74 68 61 6e 20 73 6f 72 74 20 65 78   BY than sort ex
03a0: 74 65 72 6e 61 6c 6c 79 2c 20 65 76 65 6e 20 0a  ternally, even .
03b0: 23 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 69  # if the index i
03c0: 73 20 61 20 6e 6f 6e 2d 63 6f 76 65 72 69 6e 67  s a non-covering
03d0: 20 69 6e 64 65 78 2e 0a 64 6f 5f 65 71 70 5f 74   index..do_eqp_t
03e0: 65 73 74 20 32 2e 32 20 7b 0a 20 20 53 45 4c 45  est 2.2 {.  SELE
03f0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT * FROM t1 ORD
0400: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 53 43 41 4e  ER BY a;.} {SCAN
0410: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0420: 49 4e 44 45 58 20 69 31 7d 0a 0a 64 6f 5f 65 78  INDEX i1}..do_ex
0430: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b  ecsql_test 3.1 {
0440: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0450: 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t5(a INTEGER PRI
0460: 4d 41 52 59 20 4b 45 59 2c 62 2c 63 2c 64 2c 65  MARY KEY,b,c,d,e
0470: 2c 66 2c 67 29 3b 0a 20 20 43 52 45 41 54 45 20  ,f,g);.  CREATE 
0480: 49 4e 44 45 58 20 74 35 62 20 4f 4e 20 74 35 28  INDEX t5b ON t5(
0490: 62 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  b);.  CREATE IND
04a0: 45 58 20 74 35 63 20 4f 4e 20 74 35 28 63 29 3b  EX t5c ON t5(c);
04b0: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
04c0: 74 35 64 20 4f 4e 20 74 35 28 64 29 3b 0a 20 20  t5d ON t5(d);.  
04d0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 65  CREATE INDEX t5e
04e0: 20 4f 4e 20 74 35 28 65 29 3b 0a 20 20 43 52 45   ON t5(e);.  CRE
04f0: 41 54 45 20 49 4e 44 45 58 20 74 35 66 20 4f 4e  ATE INDEX t5f ON
0500: 20 74 35 28 66 29 3b 0a 20 20 43 52 45 41 54 45   t5(f);.  CREATE
0510: 20 49 4e 44 45 58 20 74 35 67 20 4f 4e 20 74 35   INDEX t5g ON t5
0520: 28 67 29 3b 0a 7d 0a 0a 64 6f 5f 65 71 70 5f 74  (g);.}..do_eqp_t
0530: 65 73 74 20 33 2e 32 20 7b 0a 20 20 53 45 4c 45  est 3.2 {.  SELE
0540: 43 54 20 61 20 46 52 4f 4d 20 74 35 20 0a 20 20  CT a FROM t5 .  
0550: 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 20  WHERE b IS NULL 
0560: 4f 52 20 63 20 49 53 20 4e 55 4c 4c 20 4f 52 20  OR c IS NULL OR 
0570: 64 20 49 53 20 4e 55 4c 4c 20 0a 20 20 4f 52 44  d IS NULL .  ORD
0580: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 0a 20 20 51  ER BY a;.} {.  Q
0590: 55 45 52 59 20 50 4c 41 4e 0a 20 20 7c 2d 2d 4d  UERY PLAN.  |--M
05a0: 55 4c 54 49 2d 49 4e 44 45 58 20 4f 52 0a 20 20  ULTI-INDEX OR.  
05b0: 7c 20 20 7c 2d 2d 53 45 41 52 43 48 20 54 41 42  |  |--SEARCH TAB
05c0: 4c 45 20 74 35 20 55 53 49 4e 47 20 49 4e 44 45  LE t5 USING INDE
05d0: 58 20 74 35 62 20 28 62 3d 3f 29 0a 20 20 7c 20  X t5b (b=?).  | 
05e0: 20 7c 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45   |--SEARCH TABLE
05f0: 20 74 35 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t5 USING INDEX 
0600: 74 35 63 20 28 63 3d 3f 29 0a 20 20 7c 20 20 60  t5c (c=?).  |  `
0610: 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45 20 74  --SEARCH TABLE t
0620: 35 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 35  5 USING INDEX t5
0630: 64 20 28 64 3d 3f 29 0a 20 20 60 2d 2d 55 53 45  d (d=?).  `--USE
0640: 20 54 45 4d 50 20 42 2d 54 52 45 45 20 46 4f 52   TEMP B-TREE FOR
0650: 20 4f 52 44 45 52 20 42 59 0a 7d 0a 0a 23 2d 2d   ORDER BY.}..#--
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 49 66 20 74 68 65  -------.# If the
06b0: 72 65 20 69 73 20 6e 6f 20 6c 69 6b 65 6c 69 68  re is no likelih
06c0: 6f 6f 64 28 29 20 6f 72 20 73 74 61 74 33 20 64  ood() or stat3 d
06d0: 61 74 61 2c 20 53 51 4c 69 74 65 20 61 73 73 75  ata, SQLite assu
06e0: 6d 65 73 20 74 68 61 74 20 61 20 63 6c 6f 73 65  mes that a close
06f0: 64 0a 23 20 72 61 6e 67 65 20 73 63 61 6e 20 28  d.# range scan (
0700: 65 2e 67 2e 20 6f 6e 65 20 63 6f 6e 73 74 72 61  e.g. one constra
0710: 69 6e 65 64 20 62 79 20 22 63 6f 6c 20 42 45 54  ined by "col BET
0720: 57 45 45 4e 20 3f 20 41 4e 44 20 3f 22 20 63 6f  WEEN ? AND ?" co
0730: 6e 73 74 72 61 69 6e 74 29 0a 23 20 76 69 73 69  nstraint).# visi
0740: 74 73 20 31 2f 36 34 20 6f 66 20 74 68 65 20 72  ts 1/64 of the r
0750: 6f 77 73 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  ows in a table..
0760: 23 0a 23 20 4e 6f 74 65 3a 20 31 2f 36 33 20 3d  #.# Note: 1/63 =
0770: 7e 20 30 2e 30 31 36 0a 23 20 4e 6f 74 65 3a 20  ~ 0.016.# Note: 
0780: 31 2f 36 35 20 3d 7e 20 30 2e 30 31 35 0a 23 0a  1/65 =~ 0.015.#.
0790: 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63  reset_db.do_exec
07a0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 20 7b 0a 20  sql_test 4.1 {. 
07b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
07c0: 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  (a, b);.  CREATE
07d0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
07e0: 61 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  a);.  CREATE IND
07f0: 45 58 20 69 32 20 4f 4e 20 74 31 28 62 29 3b 0a  EX i2 ON t1(b);.
0800: 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 34 2e  }.do_eqp_test 4.
0810: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  2 {.  SELECT * F
0820: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 6c 69 6b  ROM t1 WHERE lik
0830: 65 6c 69 68 6f 6f 64 28 61 3d 3f 2c 20 30 2e 30  elihood(a=?, 0.0
0840: 31 34 29 20 41 4e 44 20 62 20 42 45 54 57 45 45  14) AND b BETWEE
0850: 4e 20 3f 20 41 4e 44 20 3f 3b 0a 7d 20 7b 53 45  N ? AND ?;.} {SE
0860: 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55 53  ARCH TABLE t1 US
0870: 49 4e 47 20 49 4e 44 45 58 20 69 31 20 28 61 3d  ING INDEX i1 (a=
0880: 3f 29 7d 0a 0a 64 6f 5f 65 71 70 5f 74 65 73 74  ?)}..do_eqp_test
0890: 20 34 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20   4.3 {.  SELECT 
08a0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
08b0: 6c 69 6b 65 6c 69 68 6f 6f 64 28 61 3d 3f 2c 20  likelihood(a=?, 
08c0: 30 2e 30 31 36 29 20 41 4e 44 20 62 20 42 45 54  0.016) AND b BET
08d0: 57 45 45 4e 20 3f 20 41 4e 44 20 3f 3b 0a 7d 20  WEEN ? AND ?;.} 
08e0: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  {SEARCH TABLE t1
08f0: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 69 32 20   USING INDEX i2 
0900: 28 62 3e 3f 20 41 4e 44 20 62 3c 3f 29 7d 0a 0a  (b>? AND b<?)}..
0910: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
0920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65  -----------.#.re
0960: 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71  set_db.do_execsq
0970: 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20 43  l_test 5.1 {.  C
0980: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78  REATE TABLE t2(x
0990: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
09a0: 4e 44 45 58 20 74 32 69 31 20 4f 4e 20 74 32 28  NDEX t2i1 ON t2(
09b0: 78 29 3b 0a 7d 0a 0a 64 6f 5f 65 71 70 5f 74 65  x);.}..do_eqp_te
09c0: 73 74 20 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43  st 5.2 {.  SELEC
09d0: 54 20 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  T * FROM t2 ORDE
09e0: 52 20 42 59 20 78 2c 20 79 3b 0a 7d 20 7b 0a 20  R BY x, y;.} {. 
09f0: 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 7c 2d   QUERY PLAN.  |-
0a00: 2d 53 43 41 4e 20 54 41 42 4c 45 20 74 32 20 55  -SCAN TABLE t2 U
0a10: 53 49 4e 47 20 49 4e 44 45 58 20 74 32 69 31 0a  SING INDEX t2i1.
0a20: 20 20 60 2d 2d 55 53 45 20 54 45 4d 50 20 42 2d    `--USE TEMP B-
0a30: 54 52 45 45 20 46 4f 52 20 52 49 47 48 54 20 50  TREE FOR RIGHT P
0a40: 41 52 54 20 4f 46 20 4f 52 44 45 52 20 42 59 0a  ART OF ORDER BY.
0a50: 7d 0a 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 35  }..do_eqp_test 5
0a60: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20  .3 {.  SELECT * 
0a70: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78 20  FROM t2 WHERE x 
0a80: 42 45 54 57 45 45 4e 20 3f 20 41 4e 44 20 3f 20  BETWEEN ? AND ? 
0a90: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a  ORDER BY rowid;.
0aa0: 7d 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e  } {.  QUERY PLAN
0ab0: 0a 20 20 7c 2d 2d 53 45 41 52 43 48 20 54 41 42  .  |--SEARCH TAB
0ac0: 4c 45 20 74 32 20 55 53 49 4e 47 20 49 4e 44 45  LE t2 USING INDE
0ad0: 58 20 74 32 69 31 20 28 78 3e 3f 20 41 4e 44 20  X t2i1 (x>? AND 
0ae0: 78 3c 3f 29 0a 20 20 60 2d 2d 55 53 45 20 54 45  x<?).  `--USE TE
0af0: 4d 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f 52  MP B-TREE FOR OR
0b00: 44 45 52 20 42 59 0a 7d 0a 0a 23 20 77 68 65 72  DER BY.}..# wher
0b10: 65 37 2e 74 65 73 74 2c 20 77 68 65 72 65 38 2e  e7.test, where8.
0b20: 74 65 73 74 3a 0a 23 0a 64 6f 5f 65 78 65 63 73  test:.#.do_execs
0b30: 71 6c 5f 74 65 73 74 20 36 2e 31 20 7b 0a 20 20  ql_test 6.1 {.  
0b40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
0b50: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
0b60: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
0b70: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69  CREATE INDEX t3i
0b80: 31 20 4f 4e 20 74 33 28 62 29 3b 0a 20 20 43 52  1 ON t3(b);.  CR
0b90: 45 41 54 45 20 49 4e 44 45 58 20 74 33 69 32 20  EATE INDEX t3i2 
0ba0: 4f 4e 20 74 33 28 63 29 3b 0a 7d 0a 0a 64 6f 5f  ON t3(c);.}..do_
0bb0: 65 71 70 5f 74 65 73 74 20 36 2e 32 20 7b 0a 20  eqp_test 6.2 {. 
0bc0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
0bd0: 33 20 57 48 45 52 45 20 28 62 20 42 45 54 57 45  3 WHERE (b BETWE
0be0: 45 4e 20 32 20 41 4e 44 20 34 29 20 4f 52 20 63  EN 2 AND 4) OR c
0bf0: 3d 31 30 30 20 4f 52 44 45 52 20 42 59 20 61 0a  =100 ORDER BY a.
0c00: 7d 20 7b 0a 20 20 51 55 45 52 59 20 50 4c 41 4e  } {.  QUERY PLAN
0c10: 0a 20 20 7c 2d 2d 4d 55 4c 54 49 2d 49 4e 44 45  .  |--MULTI-INDE
0c20: 58 20 4f 52 0a 20 20 7c 20 20 7c 2d 2d 53 45 41  X OR.  |  |--SEA
0c30: 52 43 48 20 54 41 42 4c 45 20 74 33 20 55 53 49  RCH TABLE t3 USI
0c40: 4e 47 20 49 4e 44 45 58 20 74 33 69 31 20 28 62  NG INDEX t3i1 (b
0c50: 3e 3f 20 41 4e 44 20 62 3c 3f 29 0a 20 20 7c 20  >? AND b<?).  | 
0c60: 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45   `--SEARCH TABLE
0c70: 20 74 33 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t3 USING INDEX 
0c80: 74 33 69 32 20 28 63 3d 3f 29 0a 20 20 60 2d 2d  t3i2 (c=?).  `--
0c90: 55 53 45 20 54 45 4d 50 20 42 2d 54 52 45 45 20  USE TEMP B-TREE 
0ca0: 46 4f 52 20 4f 52 44 45 52 20 42 59 0a 7d 0a 0a  FOR ORDER BY.}..
0cb0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
0cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73  ----------.#.res
0d00: 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c  et_db.do_execsql
0d10: 5f 74 65 73 74 20 37 2e 31 20 7b 0a 20 20 43 52  _test 7.1 {.  CR
0d20: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
0d30: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0d40: 4b 45 59 2c 62 2c 63 2c 64 2c 65 2c 66 2c 67 29  KEY,b,c,d,e,f,g)
0d50: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
0d60: 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20   t1b ON t1(b);. 
0d70: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
0d80: 63 20 4f 4e 20 74 31 28 63 29 3b 0a 20 20 43 52  c ON t1(c);.  CR
0d90: 45 41 54 45 20 49 4e 44 45 58 20 74 31 64 20 4f  EATE INDEX t1d O
0da0: 4e 20 74 31 28 64 29 3b 0a 20 20 43 52 45 41 54  N t1(d);.  CREAT
0db0: 45 20 49 4e 44 45 58 20 74 31 65 20 4f 4e 20 74  E INDEX t1e ON t
0dc0: 31 28 65 29 3b 0a 20 20 43 52 45 41 54 45 20 49  1(e);.  CREATE I
0dd0: 4e 44 45 58 20 74 31 66 20 4f 4e 20 74 31 28 66  NDEX t1f ON t1(f
0de0: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
0df0: 58 20 74 31 67 20 4f 4e 20 74 31 28 67 29 3b 0a  X t1g ON t1(g);.
0e00: 7d 0a 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 37  }..do_eqp_test 7
0e10: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 20  .2 {.  SELECT a 
0e20: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 57 48 45  FROM t1.     WHE
0e30: 52 45 20 28 62 3e 3d 39 35 30 20 41 4e 44 20 62  RE (b>=950 AND b
0e40: 3c 3d 31 30 31 30 29 20 4f 52 20 28 62 20 49 53  <=1010) OR (b IS
0e50: 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20   NULL AND c NOT 
0e60: 4e 55 4c 4c 29 0a 20 20 4f 52 44 45 52 20 42 59  NULL).  ORDER BY
0e70: 20 61 0a 7d 20 7b 0a 20 20 51 55 45 52 59 20 50   a.} {.  QUERY P
0e80: 4c 41 4e 0a 20 20 7c 2d 2d 4d 55 4c 54 49 2d 49  LAN.  |--MULTI-I
0e90: 4e 44 45 58 20 4f 52 0a 20 20 7c 20 20 7c 2d 2d  NDEX OR.  |  |--
0ea0: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
0eb0: 55 53 49 4e 47 20 49 4e 44 45 58 20 74 31 62 20  USING INDEX t1b 
0ec0: 28 62 3e 3f 20 41 4e 44 20 62 3c 3f 29 0a 20 20  (b>? AND b<?).  
0ed0: 7c 20 20 60 2d 2d 53 45 41 52 43 48 20 54 41 42  |  `--SEARCH TAB
0ee0: 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45  LE t1 USING INDE
0ef0: 58 20 74 31 62 20 28 62 3d 3f 29 0a 20 20 60 2d  X t1b (b=?).  `-
0f00: 2d 55 53 45 20 54 45 4d 50 20 42 2d 54 52 45 45  -USE TEMP B-TREE
0f10: 20 46 4f 52 20 4f 52 44 45 52 20 42 59 0a 7d 0a   FOR ORDER BY.}.
0f20: 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 37 2e 33  .do_eqp_test 7.3
0f30: 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69   {.  SELECT rowi
0f40: 64 20 46 52 4f 4d 20 74 31 0a 20 20 57 48 45 52  d FROM t1.  WHER
0f50: 45 20 28 2b 62 20 49 53 20 4e 55 4c 4c 20 41 4e  E (+b IS NULL AN
0f60: 44 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  D c NOT NULL AND
0f70: 20 64 20 4e 4f 54 20 4e 55 4c 4c 29 0a 20 20 20   d NOT NULL).   
0f80: 20 20 20 20 20 4f 52 20 28 62 20 4e 4f 54 20 4e       OR (b NOT N
0f90: 55 4c 4c 20 41 4e 44 20 63 20 49 53 20 4e 55 4c  ULL AND c IS NUL
0fa0: 4c 20 41 4e 44 20 64 20 4e 4f 54 20 4e 55 4c 4c  L AND d NOT NULL
0fb0: 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 62 20  ).        OR (b 
0fc0: 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 63 20 4e  NOT NULL AND c N
0fd0: 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 64 20 49 53  OT NULL AND d IS
0fe0: 20 4e 55 4c 4c 29 0a 7d 20 7b 53 43 41 4e 20 54   NULL).} {SCAN T
0ff0: 41 42 4c 45 20 74 31 7d 0a 0a 64 6f 5f 65 71 70  ABLE t1}..do_eqp
1000: 5f 74 65 73 74 20 37 2e 34 20 7b 0a 20 20 53 45  _test 7.4 {.  SE
1010: 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
1020: 74 31 20 57 48 45 52 45 20 28 2b 62 20 49 53 20  t1 WHERE (+b IS 
1030: 4e 55 4c 4c 20 41 4e 44 20 63 20 4e 4f 54 20 4e  NULL AND c NOT N
1040: 55 4c 4c 29 20 4f 52 20 63 20 49 53 20 4e 55 4c  ULL) OR c IS NUL
1050: 4c 0a 7d 20 7b 53 43 41 4e 20 54 41 42 4c 45 20  L.} {SCAN TABLE 
1060: 74 31 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  t1}..#----------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
10b0: 23 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78  #.reset_db.do_ex
10c0: 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 31 20 7b  ecsql_test 8.1 {
10d0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
10e0: 63 6f 6d 70 6f 73 65 72 28 0a 20 20 20 20 63 69  composer(.    ci
10f0: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
1100: 59 20 4b 45 59 2c 0a 20 20 20 20 63 6e 61 6d 65  Y KEY,.    cname
1110: 20 54 45 58 54 0a 20 20 29 3b 0a 20 20 43 52 45   TEXT.  );.  CRE
1120: 41 54 45 20 54 41 42 4c 45 20 61 6c 62 75 6d 28  ATE TABLE album(
1130: 0a 20 20 20 20 61 69 64 20 49 4e 54 45 47 45 52  .    aid INTEGER
1140: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
1150: 20 20 61 6e 61 6d 65 20 54 45 58 54 0a 20 20 29    aname TEXT.  )
1160: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
1170: 20 74 72 61 63 6b 28 0a 20 20 20 20 74 69 64 20   track(.    tid 
1180: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1190: 4b 45 59 2c 0a 20 20 20 20 63 69 64 20 49 4e 54  KEY,.    cid INT
11a0: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
11b0: 63 6f 6d 70 6f 73 65 72 2c 0a 20 20 20 20 61 69  composer,.    ai
11c0: 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  d INTEGER REFERE
11d0: 4e 43 45 53 20 61 6c 62 75 6d 2c 0a 20 20 20 20  NCES album,.    
11e0: 74 69 74 6c 65 20 54 45 58 54 0a 20 20 29 3b 0a  title TEXT.  );.
11f0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
1200: 72 61 63 6b 5f 69 31 20 4f 4e 20 74 72 61 63 6b  rack_i1 ON track
1210: 28 63 69 64 29 3b 0a 20 20 43 52 45 41 54 45 20  (cid);.  CREATE 
1220: 49 4e 44 45 58 20 74 72 61 63 6b 5f 69 32 20 4f  INDEX track_i2 O
1230: 4e 20 74 72 61 63 6b 28 61 69 64 29 3b 0a 7d 0a  N track(aid);.}.
1240: 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 38 2e 32  .do_eqp_test 8.2
1250: 20 7b 0a 20 20 53 45 4c 45 43 54 20 44 49 53 54   {.  SELECT DIST
1260: 49 4e 43 54 20 61 6e 61 6d 65 0a 20 20 20 20 46  INCT aname.    F
1270: 52 4f 4d 20 61 6c 62 75 6d 2c 20 63 6f 6d 70 6f  ROM album, compo
1280: 73 65 72 2c 20 74 72 61 63 6b 0a 20 20 20 57 48  ser, track.   WH
1290: 45 52 45 20 63 6e 61 6d 65 20 4c 49 4b 45 20 27  ERE cname LIKE '
12a0: 25 62 61 63 68 25 27 0a 20 20 20 20 20 41 4e 44  %bach%'.     AND
12b0: 20 75 6e 6c 69 6b 65 6c 79 28 63 6f 6d 70 6f 73   unlikely(compos
12c0: 65 72 2e 63 69 64 3d 74 72 61 63 6b 2e 63 69 64  er.cid=track.cid
12d0: 29 0a 20 20 20 20 20 41 4e 44 20 75 6e 6c 69 6b  ).     AND unlik
12e0: 65 6c 79 28 61 6c 62 75 6d 2e 61 69 64 3d 74 72  ely(album.aid=tr
12f0: 61 63 6b 2e 61 69 64 29 3b 0a 7d 20 7b 0a 20 20  ack.aid);.} {.  
1300: 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 7c 2d 2d  QUERY PLAN.  |--
1310: 53 43 41 4e 20 54 41 42 4c 45 20 74 72 61 63 6b  SCAN TABLE track
1320: 0a 20 20 7c 2d 2d 53 45 41 52 43 48 20 54 41 42  .  |--SEARCH TAB
1330: 4c 45 20 61 6c 62 75 6d 20 55 53 49 4e 47 20 49  LE album USING I
1340: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1350: 45 59 20 28 72 6f 77 69 64 3d 3f 29 0a 20 20 7c  EY (rowid=?).  |
1360: 2d 2d 53 45 41 52 43 48 20 54 41 42 4c 45 20 63  --SEARCH TABLE c
1370: 6f 6d 70 6f 73 65 72 20 55 53 49 4e 47 20 49 4e  omposer USING IN
1380: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1390: 59 20 28 72 6f 77 69 64 3d 3f 29 0a 20 20 60 2d  Y (rowid=?).  `-
13a0: 2d 55 53 45 20 54 45 4d 50 20 42 2d 54 52 45 45  -USE TEMP B-TREE
13b0: 20 46 4f 52 20 44 49 53 54 49 4e 43 54 0a 7d 0a   FOR DISTINCT.}.
13c0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f  -----------.#.do
1410: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 39 2e  _execsql_test 9.
1420: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
1430: 4c 45 20 74 31 28 0a 20 20 20 20 61 2c 62 2c 63  LE t1(.    a,b,c
1440: 2c 64 2c 65 2c 20 66 2c 67 2c 68 2c 69 2c 6a 2c  ,d,e, f,g,h,i,j,
1450: 0a 20 20 20 20 6b 2c 6c 2c 6d 2c 6e 2c 6f 2c 20  .    k,l,m,n,o, 
1460: 70 2c 71 2c 72 2c 73 2c 74 0a 20 20 29 3b 0a 20  p,q,r,s,t.  );. 
1470: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31   CREATE INDEX i1
1480: 20 4f 4e 20 74 31 28 6b 2c 6c 2c 6d 2c 6e 2c 6f   ON t1(k,l,m,n,o
1490: 2c 70 2c 71 2c 72 2c 73 2c 74 29 3b 0a 7d 0a 64  ,p,q,r,s,t);.}.d
14a0: 6f 5f 74 65 73 74 20 39 2e 32 20 7b 0a 20 20 66  o_test 9.2 {.  f
14b0: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
14c0: 20 3c 20 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d   < 100} {incr i}
14d0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
14e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
14f0: 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 7d  DEFAULT VALUES }
1500: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
1510: 0a 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20  .    ANALYZE;.  
1520: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
1530: 32 20 4f 4e 20 74 31 28 61 2c 62 2c 63 2c 64 2c  2 ON t1(a,b,c,d,
1540: 65 2c 66 2c 67 2c 68 2c 69 2c 6a 29 3b 0a 20 20  e,f,g,h,i,j);.  
1550: 7d 0a 7d 20 7b 7d 0a 0a 73 65 74 20 4c 20 5b 6c  }.} {}..set L [l
1560: 69 73 74 20 61 3d 3f 20 62 3d 3f 20 63 3d 3f 20  ist a=? b=? c=? 
1570: 64 3d 3f 20 65 3d 3f 20 66 3d 3f 20 67 3d 3f 20  d=? e=? f=? g=? 
1580: 68 3d 3f 20 69 3d 3f 20 6a 3d 3f 5d 0a 66 6f 72  h=? i=? j=?].for
1590: 65 61 63 68 20 7b 74 6e 20 6e 54 65 72 6d 20 6e  each {tn nTerm n
15a0: 52 6f 77 7d 20 7b 0a 20 20 31 20 20 20 31 20 31  Row} {.  1   1 1
15b0: 30 0a 20 20 32 20 20 20 32 20 20 39 0a 20 20 33  0.  2   2  9.  3
15c0: 20 20 20 33 20 20 38 0a 20 20 34 20 20 20 34 20     3  8.  4   4 
15d0: 20 37 0a 20 20 35 20 20 20 35 20 20 36 0a 20 20   7.  5   5  6.  
15e0: 36 20 20 20 36 20 20 35 0a 20 20 37 20 20 20 37  6   6  5.  7   7
15f0: 20 20 35 0a 20 20 38 20 20 20 38 20 20 35 0a 20    5.  8   8  5. 
1600: 20 39 20 20 20 39 20 20 35 0a 20 20 31 30 20 31   9   9  5.  10 1
1610: 30 20 20 35 0a 7d 20 7b 0a 20 20 73 65 74 20 77  0  5.} {.  set w
1620: 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 24   [join [lrange $
1630: 4c 20 30 20 5b 65 78 70 72 20 24 6e 54 65 72 6d  L 0 [expr $nTerm
1640: 2d 31 5d 5d 20 22 20 41 4e 44 20 22 5d 0a 20 20  -1]] " AND "].  
1650: 73 65 74 20 70 31 20 5b 65 78 70 72 20 28 24 6e  set p1 [expr ($n
1660: 52 6f 77 2d 31 29 20 2f 20 31 30 30 2e 30 5d 0a  Row-1) / 100.0].
1670: 20 20 73 65 74 20 70 32 20 5b 65 78 70 72 20 28    set p2 [expr (
1680: 24 6e 52 6f 77 2b 31 29 20 2f 20 31 30 30 2e 30  $nRow+1) / 100.0
1690: 5d 0a 0a 20 20 73 65 74 20 73 71 6c 31 20 22 53  ]..  set sql1 "S
16a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
16b0: 57 48 45 52 45 20 6c 69 6b 65 6c 69 68 6f 6f 64  WHERE likelihood
16c0: 28 6b 3d 3f 2c 20 24 70 31 29 20 41 4e 44 20 24  (k=?, $p1) AND $
16d0: 77 22 0a 20 20 73 65 74 20 73 71 6c 32 20 22 53  w".  set sql2 "S
16e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
16f0: 57 48 45 52 45 20 6c 69 6b 65 6c 69 68 6f 6f 64  WHERE likelihood
1700: 28 6b 3d 3f 2c 20 24 70 32 29 20 41 4e 44 20 24  (k=?, $p2) AND $
1710: 77 22 0a 0a 20 20 64 6f 5f 65 71 70 5f 74 65 73  w"..  do_eqp_tes
1720: 74 20 39 2e 33 2e 24 74 6e 2e 31 20 24 73 71 6c  t 9.3.$tn.1 $sql
1730: 31 20 7b 2f 49 4e 44 45 58 20 69 31 2f 7d 0a 20  1 {/INDEX i1/}. 
1740: 20 64 6f 5f 65 71 70 5f 74 65 73 74 20 39 2e 33   do_eqp_test 9.3
1750: 2e 24 74 6e 2e 32 20 24 73 71 6c 32 20 7b 2f 49  .$tn.2 $sql2 {/I
1760: 4e 44 45 58 20 69 32 2f 7d 0a 7d 0a 0a 0a 23 2d  NDEX i2/}.}...#-
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 69 66 63 61  --------.#..ifca
17c0: 70 61 62 6c 65 20 73 74 61 74 34 20 7b 0a 20 20  pable stat4 {.  
17d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
17e0: 31 30 2e 31 20 7b 0a 20 20 20 20 43 52 45 41 54  10.1 {.    CREAT
17f0: 45 20 54 41 42 4c 45 20 74 36 28 61 2c 20 62 2c  E TABLE t6(a, b,
1800: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
1810: 49 4e 44 45 58 20 74 36 69 31 20 4f 4e 20 74 36  INDEX t6i1 ON t6
1820: 28 61 2c 20 62 29 3b 0a 20 20 20 20 43 52 45 41  (a, b);.    CREA
1830: 54 45 20 49 4e 44 45 58 20 74 36 69 32 20 4f 4e  TE INDEX t6i2 ON
1840: 20 74 36 28 63 29 3b 0a 20 20 7d 0a 20 20 0a 20   t6(c);.  }.  . 
1850: 20 64 6f 5f 74 65 73 74 20 31 30 2e 32 20 7b 0a   do_test 10.2 {.
1860: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
1870: 7d 20 7b 24 69 20 3c 20 31 36 7d 20 7b 69 6e 63  } {$i < 16} {inc
1880: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 65 78 65  r i} {.      exe
1890: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
18a0: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 24 69 25  TO t6 VALUES($i%
18b0: 34 2c 20 27 78 79 7a 27 2c 20 24 69 25 38 29 20  4, 'xyz', $i%8) 
18c0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63  }.    }.    exec
18d0: 73 71 6c 20 41 4e 41 4c 59 5a 45 0a 20 20 7d 20  sql ANALYZE.  } 
18e0: 7b 7d 0a 0a 20 20 64 6f 5f 65 71 70 5f 74 65 73  {}..  do_eqp_tes
18f0: 74 20 31 30 2e 33 20 7b 0a 20 20 20 20 53 45 4c  t 10.3 {.    SEL
1900: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
1910: 36 20 57 48 45 52 45 20 61 3d 30 20 41 4e 44 20  6 WHERE a=0 AND 
1920: 63 3d 30 0a 20 20 7d 20 7b 53 45 41 52 43 48 20  c=0.  } {SEARCH 
1930: 54 41 42 4c 45 20 74 36 20 55 53 49 4e 47 20 49  TABLE t6 USING I
1940: 4e 44 45 58 20 74 36 69 32 20 28 63 3d 3f 29 7d  NDEX t6i2 (c=?)}
1950: 0a 0a 20 20 64 6f 5f 65 71 70 5f 74 65 73 74 20  ..  do_eqp_test 
1960: 31 30 2e 34 20 7b 0a 20 20 20 20 53 45 4c 45 43  10.4 {.    SELEC
1970: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 36 20  T rowid FROM t6 
1980: 57 48 45 52 45 20 61 3d 30 20 41 4e 44 20 62 3d  WHERE a=0 AND b=
1990: 27 78 79 7a 27 20 41 4e 44 20 63 3d 30 0a 20 20  'xyz' AND c=0.  
19a0: 7d 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20  } {SEARCH TABLE 
19b0: 74 36 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74  t6 USING INDEX t
19c0: 36 69 32 20 28 63 3d 3f 29 7d 0a 0a 20 20 64 6f  6i2 (c=?)}..  do
19d0: 5f 65 71 70 5f 74 65 73 74 20 31 30 2e 35 20 7b  _eqp_test 10.5 {
19e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
19f0: 64 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20  d FROM t6 WHERE 
1a00: 6c 69 6b 65 6c 69 68 6f 6f 64 28 61 3d 30 2c 20  likelihood(a=0, 
1a10: 30 2e 31 29 20 41 4e 44 20 63 3d 30 0a 20 20 7d  0.1) AND c=0.  }
1a20: 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74   {SEARCH TABLE t
1a30: 36 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 36  6 USING INDEX t6
1a40: 69 31 20 28 61 3d 3f 29 7d 0a 0a 20 20 64 6f 5f  i1 (a=?)}..  do_
1a50: 65 71 70 5f 74 65 73 74 20 31 30 2e 36 20 7b 0a  eqp_test 10.6 {.
1a60: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
1a70: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 6c   FROM t6 WHERE l
1a80: 69 6b 65 6c 69 68 6f 6f 64 28 61 3d 30 2c 20 30  ikelihood(a=0, 0
1a90: 2e 31 29 20 41 4e 44 20 62 3d 27 78 79 7a 27 20  .1) AND b='xyz' 
1aa0: 41 4e 44 20 63 3d 30 0a 20 20 7d 20 7b 53 45 41  AND c=0.  } {SEA
1ab0: 52 43 48 20 54 41 42 4c 45 20 74 36 20 55 53 49  RCH TABLE t6 USI
1ac0: 4e 47 20 49 4e 44 45 58 20 74 36 69 31 20 28 61  NG INDEX t6i1 (a
1ad0: 3d 3f 20 41 4e 44 20 62 3d 3f 29 7d 0a 7d 0a 0a  =? AND b=?)}.}..
1ae0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.