/ Hex Artifact Content
Login

Artifact e4b07f7a3c2f5d31195cd33710054c78667573b2:


0000: 23 20 32 30 31 34 2d 30 33 2d 33 31 0a 23 0a 23  # 2014-03-31.#.#
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 23 20 54 65 73 74 20 63 61 73  **.# .# Test cas
0170: 65 73 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61  es for query pla
0180: 6e 6e 69 6e 67 20 64 65 63 69 73 69 6f 6e 73 20  nning decisions 
0190: 77 68 65 72 65 20 6f 6e 65 20 63 61 6e 64 69 64  where one candid
01a0: 61 74 65 20 69 6e 64 65 78 0a 23 20 63 6f 76 65  ate index.# cove
01b0: 72 73 20 61 20 70 72 6f 70 65 72 20 73 75 70 65  rs a proper supe
01c0: 72 73 65 74 20 6f 66 20 74 68 65 20 57 48 45 52  rset of the WHER
01d0: 45 20 63 6c 61 75 73 65 20 74 65 72 6d 73 20 6f  E clause terms o
01e0: 66 20 61 6e 6f 74 68 65 72 0a 23 20 63 61 6e 64  f another.# cand
01f0: 69 64 61 74 65 20 69 6e 64 65 78 2e 0a 23 0a 0a  idate index..#..
0200: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0210: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0220: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0230: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 64 6f  r/tester.tcl..do
0240: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68  _execsql_test wh
0250: 65 72 65 48 2d 31 2e 31 20 7b 0a 20 20 43 52 45  ereH-1.1 {.  CRE
0260: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0270: 2c 63 2c 64 29 3b 0a 20 20 43 52 45 41 54 45 20  ,c,d);.  CREATE 
0280: 49 4e 44 45 58 20 74 31 61 62 63 20 4f 4e 20 74  INDEX t1abc ON t
0290: 31 28 61 2c 62 2c 63 29 3b 0a 20 20 43 52 45 41  1(a,b,c);.  CREA
02a0: 54 45 20 49 4e 44 45 58 20 74 31 62 63 20 4f 4e  TE INDEX t1bc ON
02b0: 20 74 31 28 62 2c 63 29 3b 0a 0a 20 20 45 58 50   t1(b,c);..  EXP
02c0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a  LAIN QUERY PLAN.
02d0: 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20    SELECT d FROM 
02e0: 74 31 20 57 48 45 52 45 20 61 3d 3f 20 41 4e 44  t1 WHERE a=? AND
02f0: 20 62 3d 3f 20 41 4e 44 20 63 3e 3d 3f 20 4f 52   b=? AND c>=? OR
0300: 44 45 52 20 42 59 20 63 3b 0a 7d 20 7b 2f 49 4e  DER BY c;.} {/IN
0310: 44 45 58 20 74 31 61 62 63 20 2f 7d 0a 64 6f 5f  DEX t1abc /}.do_
0320: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65  execsql_test whe
0330: 72 65 48 2d 31 2e 32 20 7b 0a 20 20 45 58 50 4c  reH-1.2 {.  EXPL
0340: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20  AIN QUERY PLAN. 
0350: 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74   SELECT d FROM t
0360: 31 20 57 48 45 52 45 20 61 3d 3f 20 41 4e 44 20  1 WHERE a=? AND 
0370: 62 3d 3f 20 41 4e 44 20 63 3e 3d 3f 20 4f 52 44  b=? AND c>=? ORD
0380: 45 52 20 42 59 20 63 3b 0a 7d 20 7b 7e 2f 54 45  ER BY c;.} {~/TE
0390: 4d 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f 52  MP B-TREE FOR OR
03a0: 44 45 52 20 42 59 2f 7d 0a 0a 64 6f 5f 65 78 65  DER BY/}..do_exe
03b0: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 48  csql_test whereH
03c0: 2d 32 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41  -2.1 {.  DROP TA
03d0: 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54 45  BLE t1;.  CREATE
03e0: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c   TABLE t1(a,b,c,
03f0: 64 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  d);.  CREATE IND
0400: 45 58 20 74 31 62 63 20 4f 4e 20 74 31 28 62 2c  EX t1bc ON t1(b,
0410: 63 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  c);.  CREATE IND
0420: 45 58 20 74 31 61 62 63 20 4f 4e 20 74 31 28 61  EX t1abc ON t1(a
0430: 2c 62 2c 63 29 3b 0a 0a 20 20 45 58 50 4c 41 49  ,b,c);..  EXPLAI
0440: 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 53  N QUERY PLAN.  S
0450: 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 31 20  ELECT d FROM t1 
0460: 57 48 45 52 45 20 61 3d 3f 20 41 4e 44 20 62 3d  WHERE a=? AND b=
0470: 3f 20 41 4e 44 20 63 3e 3d 3f 20 4f 52 44 45 52  ? AND c>=? ORDER
0480: 20 42 59 20 63 3b 0a 7d 20 7b 2f 49 4e 44 45 58   BY c;.} {/INDEX
0490: 20 74 31 61 62 63 20 2f 7d 0a 64 6f 5f 65 78 65   t1abc /}.do_exe
04a0: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 48  csql_test whereH
04b0: 2d 32 2e 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e  -2.2 {.  EXPLAIN
04c0: 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 53 45   QUERY PLAN.  SE
04d0: 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 31 20 57  LECT d FROM t1 W
04e0: 48 45 52 45 20 61 3d 3f 20 41 4e 44 20 62 3d 3f  HERE a=? AND b=?
04f0: 20 41 4e 44 20 63 3e 3d 3f 20 4f 52 44 45 52 20   AND c>=? ORDER 
0500: 42 59 20 63 3b 0a 7d 20 7b 7e 2f 54 45 4d 50 20  BY c;.} {~/TEMP 
0510: 42 2d 54 52 45 45 20 46 4f 52 20 4f 52 44 45 52  B-TREE FOR ORDER
0520: 20 42 59 2f 7d 0a 0a 64 6f 5f 65 78 65 63 73 71   BY/}..do_execsq
0530: 6c 5f 74 65 73 74 20 77 68 65 72 65 48 2d 33 2e  l_test whereH-3.
0540: 31 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  1 {.  DROP TABLE
0550: 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41   t1;.  CREATE TA
0560: 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 64 2c 65  BLE t1(a,b,c,d,e
0570: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
0580: 58 20 74 31 63 64 20 4f 4e 20 74 31 28 63 2c 64  X t1cd ON t1(c,d
0590: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
05a0: 58 20 74 31 62 63 64 20 4f 4e 20 74 31 28 62 2c  X t1bcd ON t1(b,
05b0: 63 2c 64 29 3b 0a 20 20 43 52 45 41 54 45 20 49  c,d);.  CREATE I
05c0: 4e 44 45 58 20 74 31 61 62 63 64 20 4f 4e 20 74  NDEX t1abcd ON t
05d0: 31 28 61 2c 62 2c 63 2c 64 29 3b 0a 0a 20 20 45  1(a,b,c,d);..  E
05e0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
05f0: 4e 0a 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f  N.  SELECT d FRO
0600: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3f 20 41  M t1 WHERE a=? A
0610: 4e 44 20 62 3d 3f 20 41 4e 44 20 63 3d 3f 20 41  ND b=? AND c=? A
0620: 4e 44 20 64 3e 3d 3f 20 4f 52 44 45 52 20 42 59  ND d>=? ORDER BY
0630: 20 64 3b 0a 7d 20 7b 2f 49 4e 44 45 58 20 74 31   d;.} {/INDEX t1
0640: 61 62 63 64 20 2f 7d 0a 64 6f 5f 65 78 65 63 73  abcd /}.do_execs
0650: 71 6c 5f 74 65 73 74 20 77 68 65 72 65 48 2d 33  ql_test whereH-3
0660: 2e 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51  .2 {.  EXPLAIN Q
0670: 55 45 52 59 20 50 4c 41 4e 0a 20 20 53 45 4c 45  UERY PLAN.  SELE
0680: 43 54 20 64 20 46 52 4f 4d 20 74 31 20 57 48 45  CT d FROM t1 WHE
0690: 52 45 20 61 3d 3f 20 41 4e 44 20 62 3d 3f 20 41  RE a=? AND b=? A
06a0: 4e 44 20 63 3d 3f 20 41 4e 44 20 64 3e 3d 3f 20  ND c=? AND d>=? 
06b0: 4f 52 44 45 52 20 42 59 20 64 3b 0a 7d 20 7b 7e  ORDER BY d;.} {~
06c0: 2f 54 45 4d 50 20 42 2d 54 52 45 45 20 46 4f 52  /TEMP B-TREE FOR
06d0: 20 4f 52 44 45 52 20 42 59 2f 7d 0a 0a 64 6f 5f   ORDER BY/}..do_
06e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65  execsql_test whe
06f0: 72 65 48 2d 34 2e 31 20 7b 0a 20 20 44 52 4f 50  reH-4.1 {.  DROP
0700: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45   TABLE t1;.  CRE
0710: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0720: 2c 63 2c 64 2c 65 29 3b 0a 20 20 43 52 45 41 54  ,c,d,e);.  CREAT
0730: 45 20 49 4e 44 45 58 20 74 31 63 64 20 4f 4e 20  E INDEX t1cd ON 
0740: 74 31 28 63 2c 64 29 3b 0a 20 20 43 52 45 41 54  t1(c,d);.  CREAT
0750: 45 20 49 4e 44 45 58 20 74 31 61 62 63 64 20 4f  E INDEX t1abcd O
0760: 4e 20 74 31 28 61 2c 62 2c 63 2c 64 29 3b 0a 20  N t1(a,b,c,d);. 
0770: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
0780: 62 63 64 20 4f 4e 20 74 31 28 62 2c 63 2c 64 29  bcd ON t1(b,c,d)
0790: 3b 0a 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45  ;..  EXPLAIN QUE
07a0: 52 59 20 50 4c 41 4e 0a 20 20 53 45 4c 45 43 54  RY PLAN.  SELECT
07b0: 20 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   d FROM t1 WHERE
07c0: 20 61 3d 3f 20 41 4e 44 20 62 3d 3f 20 41 4e 44   a=? AND b=? AND
07d0: 20 63 3d 3f 20 41 4e 44 20 64 3e 3d 3f 20 4f 52   c=? AND d>=? OR
07e0: 44 45 52 20 42 59 20 64 3b 0a 7d 20 7b 2f 49 4e  DER BY d;.} {/IN
07f0: 44 45 58 20 74 31 61 62 63 64 20 2f 7d 0a 64 6f  DEX t1abcd /}.do
0800: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68  _execsql_test wh
0810: 65 72 65 48 2d 34 2e 32 20 7b 0a 20 20 45 58 50  ereH-4.2 {.  EXP
0820: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a  LAIN QUERY PLAN.
0830: 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20    SELECT d FROM 
0840: 74 31 20 57 48 45 52 45 20 61 3d 3f 20 41 4e 44  t1 WHERE a=? AND
0850: 20 62 3d 3f 20 41 4e 44 20 63 3d 3f 20 41 4e 44   b=? AND c=? AND
0860: 20 64 3e 3d 3f 20 4f 52 44 45 52 20 42 59 20 64   d>=? ORDER BY d
0870: 3b 0a 7d 20 7b 7e 2f 54 45 4d 50 20 42 2d 54 52  ;.} {~/TEMP B-TR
0880: 45 45 20 46 4f 52 20 4f 52 44 45 52 20 42 59 2f  EE FOR ORDER BY/
0890: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
08a0: 73 74 20 77 68 65 72 65 48 2d 35 2e 31 20 7b 0a  st whereH-5.1 {.
08b0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
08c0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
08d0: 74 31 28 61 2c 62 2c 63 2c 64 2c 65 29 3b 0a 20  t1(a,b,c,d,e);. 
08e0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
08f0: 62 63 64 20 4f 4e 20 74 31 28 62 2c 63 2c 64 29  bcd ON t1(b,c,d)
0900: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
0910: 20 74 31 63 64 20 4f 4e 20 74 31 28 63 2c 64 29   t1cd ON t1(c,d)
0920: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
0930: 20 74 31 61 62 63 64 20 4f 4e 20 74 31 28 61 2c   t1abcd ON t1(a,
0940: 62 2c 63 2c 64 29 3b 0a 0a 20 20 45 58 50 4c 41  b,c,d);..  EXPLA
0950: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20  IN QUERY PLAN.  
0960: 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 31  SELECT d FROM t1
0970: 20 57 48 45 52 45 20 61 3d 3f 20 41 4e 44 20 62   WHERE a=? AND b
0980: 3d 3f 20 41 4e 44 20 63 3d 3f 20 41 4e 44 20 64  =? AND c=? AND d
0990: 3e 3d 3f 20 4f 52 44 45 52 20 42 59 20 64 3b 0a  >=? ORDER BY d;.
09a0: 7d 20 7b 2f 49 4e 44 45 58 20 74 31 61 62 63 64  } {/INDEX t1abcd
09b0: 20 2f 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   /}.do_execsql_t
09c0: 65 73 74 20 77 68 65 72 65 48 2d 35 2e 32 20 7b  est whereH-5.2 {
09d0: 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  .  EXPLAIN QUERY
09e0: 20 50 4c 41 4e 0a 20 20 53 45 4c 45 43 54 20 64   PLAN.  SELECT d
09f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0a00: 3d 3f 20 41 4e 44 20 62 3d 3f 20 41 4e 44 20 63  =? AND b=? AND c
0a10: 3d 3f 20 41 4e 44 20 64 3e 3d 3f 20 4f 52 44 45  =? AND d>=? ORDE
0a20: 52 20 42 59 20 64 3b 0a 7d 20 7b 7e 2f 54 45 4d  R BY d;.} {~/TEM
0a30: 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f 52 44  P B-TREE FOR ORD
0a40: 45 52 20 42 59 2f 7d 0a 0a 64 6f 5f 65 78 65 63  ER BY/}..do_exec
0a50: 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 48 2d  sql_test whereH-
0a60: 36 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41 42  6.1 {.  DROP TAB
0a70: 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20  LE t1;.  CREATE 
0a80: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 64  TABLE t1(a,b,c,d
0a90: 2c 65 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e  ,e);.  CREATE IN
0aa0: 44 45 58 20 74 31 62 63 64 20 4f 4e 20 74 31 28  DEX t1bcd ON t1(
0ab0: 62 2c 63 2c 64 29 3b 0a 20 20 43 52 45 41 54 45  b,c,d);.  CREATE
0ac0: 20 49 4e 44 45 58 20 74 31 61 62 63 64 20 4f 4e   INDEX t1abcd ON
0ad0: 20 74 31 28 61 2c 62 2c 63 2c 64 29 3b 0a 20 20   t1(a,b,c,d);.  
0ae0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 63  CREATE INDEX t1c
0af0: 64 20 4f 4e 20 74 31 28 63 2c 64 29 3b 0a 0a 20  d ON t1(c,d);.. 
0b00: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
0b10: 4c 41 4e 0a 20 20 53 45 4c 45 43 54 20 64 20 46  LAN.  SELECT d F
0b20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3f  ROM t1 WHERE a=?
0b30: 20 41 4e 44 20 62 3d 3f 20 41 4e 44 20 63 3d 3f   AND b=? AND c=?
0b40: 20 41 4e 44 20 64 3e 3d 3f 20 4f 52 44 45 52 20   AND d>=? ORDER 
0b50: 42 59 20 64 3b 0a 7d 20 7b 2f 49 4e 44 45 58 20  BY d;.} {/INDEX 
0b60: 74 31 61 62 63 64 20 2f 7d 0a 64 6f 5f 65 78 65  t1abcd /}.do_exe
0b70: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 48  csql_test whereH
0b80: 2d 36 2e 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e  -6.2 {.  EXPLAIN
0b90: 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 53 45   QUERY PLAN.  SE
0ba0: 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 31 20 57  LECT d FROM t1 W
0bb0: 48 45 52 45 20 61 3d 3f 20 41 4e 44 20 62 3d 3f  HERE a=? AND b=?
0bc0: 20 41 4e 44 20 63 3d 3f 20 41 4e 44 20 64 3e 3d   AND c=? AND d>=
0bd0: 3f 20 4f 52 44 45 52 20 42 59 20 64 3b 0a 7d 20  ? ORDER BY d;.} 
0be0: 7b 7e 2f 54 45 4d 50 20 42 2d 54 52 45 45 20 46  {~/TEMP B-TREE F
0bf0: 4f 52 20 4f 52 44 45 52 20 42 59 2f 7d 0a 0a 64  OR ORDER BY/}..d
0c00: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77  o_execsql_test w
0c10: 68 65 72 65 48 2d 37 2e 31 20 7b 0a 20 20 44 52  hereH-7.1 {.  DR
0c20: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 43  OP TABLE t1;.  C
0c30: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0c40: 2c 62 2c 63 2c 64 2c 65 29 3b 0a 20 20 43 52 45  ,b,c,d,e);.  CRE
0c50: 41 54 45 20 49 4e 44 45 58 20 74 31 61 62 63 64  ATE INDEX t1abcd
0c60: 20 4f 4e 20 74 31 28 61 2c 62 2c 63 2c 64 29 3b   ON t1(a,b,c,d);
0c70: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
0c80: 74 31 62 63 64 20 4f 4e 20 74 31 28 62 2c 63 2c  t1bcd ON t1(b,c,
0c90: 64 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  d);.  CREATE IND
0ca0: 45 58 20 74 31 63 64 20 4f 4e 20 74 31 28 63 2c  EX t1cd ON t1(c,
0cb0: 64 29 3b 0a 0a 20 20 45 58 50 4c 41 49 4e 20 51  d);..  EXPLAIN Q
0cc0: 55 45 52 59 20 50 4c 41 4e 0a 20 20 53 45 4c 45  UERY PLAN.  SELE
0cd0: 43 54 20 64 20 46 52 4f 4d 20 74 31 20 57 48 45  CT d FROM t1 WHE
0ce0: 52 45 20 61 3d 3f 20 41 4e 44 20 62 3d 3f 20 41  RE a=? AND b=? A
0cf0: 4e 44 20 63 3d 3f 20 41 4e 44 20 64 3e 3d 3f 20  ND c=? AND d>=? 
0d00: 4f 52 44 45 52 20 42 59 20 64 3b 0a 7d 20 7b 2f  ORDER BY d;.} {/
0d10: 49 4e 44 45 58 20 74 31 61 62 63 64 20 2f 7d 0a  INDEX t1abcd /}.
0d20: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0d30: 77 68 65 72 65 48 2d 37 2e 32 20 7b 0a 20 20 45  whereH-7.2 {.  E
0d40: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
0d50: 4e 0a 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f  N.  SELECT d FRO
0d60: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3f 20 41  M t1 WHERE a=? A
0d70: 4e 44 20 62 3d 3f 20 41 4e 44 20 63 3d 3f 20 41  ND b=? AND c=? A
0d80: 4e 44 20 64 3e 3d 3f 20 4f 52 44 45 52 20 42 59  ND d>=? ORDER BY
0d90: 20 64 3b 0a 7d 20 7b 7e 2f 54 45 4d 50 20 42 2d   d;.} {~/TEMP B-
0da0: 54 52 45 45 20 46 4f 52 20 4f 52 44 45 52 20 42  TREE FOR ORDER B
0db0: 59 2f 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  Y/}..do_execsql_
0dc0: 74 65 73 74 20 77 68 65 72 65 48 2d 38 2e 31 20  test whereH-8.1 
0dd0: 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74  {.  DROP TABLE t
0de0: 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  1;.  CREATE TABL
0df0: 45 20 74 31 28 61 2c 62 2c 63 2c 64 2c 65 29 3b  E t1(a,b,c,d,e);
0e00: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
0e10: 74 31 61 62 63 64 20 4f 4e 20 74 31 28 61 2c 62  t1abcd ON t1(a,b
0e20: 2c 63 2c 64 29 3b 0a 20 20 43 52 45 41 54 45 20  ,c,d);.  CREATE 
0e30: 49 4e 44 45 58 20 74 31 63 64 20 4f 4e 20 74 31  INDEX t1cd ON t1
0e40: 28 63 2c 64 29 3b 0a 20 20 43 52 45 41 54 45 20  (c,d);.  CREATE 
0e50: 49 4e 44 45 58 20 74 31 62 63 64 20 4f 4e 20 74  INDEX t1bcd ON t
0e60: 31 28 62 2c 63 2c 64 29 3b 0a 0a 20 20 45 58 50  1(b,c,d);..  EXP
0e70: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a  LAIN QUERY PLAN.
0e80: 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20    SELECT d FROM 
0e90: 74 31 20 57 48 45 52 45 20 61 3d 3f 20 41 4e 44  t1 WHERE a=? AND
0ea0: 20 62 3d 3f 20 41 4e 44 20 63 3d 3f 20 41 4e 44   b=? AND c=? AND
0eb0: 20 64 3e 3d 3f 20 4f 52 44 45 52 20 42 59 20 64   d>=? ORDER BY d
0ec0: 3b 0a 7d 20 7b 2f 49 4e 44 45 58 20 74 31 61 62  ;.} {/INDEX t1ab
0ed0: 63 64 20 2f 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  cd /}.do_execsql
0ee0: 5f 74 65 73 74 20 77 68 65 72 65 48 2d 38 2e 32  _test whereH-8.2
0ef0: 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45   {.  EXPLAIN QUE
0f00: 52 59 20 50 4c 41 4e 0a 20 20 53 45 4c 45 43 54  RY PLAN.  SELECT
0f10: 20 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   d FROM t1 WHERE
0f20: 20 61 3d 3f 20 41 4e 44 20 62 3d 3f 20 41 4e 44   a=? AND b=? AND
0f30: 20 63 3d 3f 20 41 4e 44 20 64 3e 3d 3f 20 4f 52   c=? AND d>=? OR
0f40: 44 45 52 20 42 59 20 64 3b 0a 7d 20 7b 7e 2f 54  DER BY d;.} {~/T
0f50: 45 4d 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f  EMP B-TREE FOR O
0f60: 52 44 45 52 20 42 59 2f 7d 0a 0a 0a 0a 66 69 6e  RDER BY/}....fin
0f70: 69 73 68 5f 74 65 73 74 0a                       ish_test.