/ Hex Artifact Content
Login

Artifact b2f22f3e693a53813aa3f50b812eb609ba6df1ec:


0000: 23 20 32 30 30 38 20 4f 63 74 6f 62 65 72 20 34  # 2008 October 4
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 24 49 64 3a 20  ******.#.# $Id: 
0170: 69 6e 64 65 78 65 64 62 79 2e 74 65 73 74 2c 76  indexedby.test,v
0180: 20 31 2e 35 20 32 30 30 39 2f 30 33 2f 32 32 20   1.5 2009/03/22 
0190: 32 30 3a 33 36 3a 31 39 20 64 72 68 20 45 78 70  20:36:19 drh Exp
01a0: 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20   $..set testdir 
01b0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
01c0: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
01d0: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
01e0: 0a 73 65 74 20 3a 3a 74 65 73 74 70 72 65 66 69  .set ::testprefi
01f0: 78 20 69 6e 64 65 78 65 64 62 79 0a 0a 23 20 43  x indexedby..# C
0200: 72 65 61 74 65 20 61 20 73 63 68 65 6d 61 20 77  reate a schema w
0210: 69 74 68 20 73 6f 6d 65 20 69 6e 64 65 78 65 73  ith some indexes
0220: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65  ..#.do_test inde
0230: 78 65 64 62 79 2d 31 2e 31 20 7b 0a 20 20 65 78  xedby-1.1 {.  ex
0240: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0250: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
0260: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
0270: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 3b  DEX i1 ON t1(a);
0280: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
0290: 58 20 69 32 20 4f 4e 20 74 31 28 62 29 3b 0a 0a  X i2 ON t1(b);..
02a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
02b0: 20 74 32 28 63 2c 20 64 29 3b 0a 20 20 20 20 43   t2(c, d);.    C
02c0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f  REATE INDEX i3 O
02d0: 4e 20 74 32 28 63 29 3b 0a 20 20 20 20 43 52 45  N t2(c);.    CRE
02e0: 41 54 45 20 49 4e 44 45 58 20 69 34 20 4f 4e 20  ATE INDEX i4 ON 
02f0: 74 32 28 64 29 3b 0a 0a 20 20 20 20 43 52 45 41  t2(d);..    CREA
0300: 54 45 20 54 41 42 4c 45 20 74 33 28 65 20 50 52  TE TABLE t3(e PR
0310: 49 4d 41 52 59 20 4b 45 59 2c 20 66 29 3b 0a 0a  IMARY KEY, f);..
0320: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
0330: 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  v1 AS SELECT * F
0340: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  ROM t1;.  }.} {}
0350: 0a 0a 23 20 45 78 70 6c 61 69 6e 20 51 75 65 72  ..# Explain Quer
0360: 79 20 50 6c 61 6e 0a 23 0a 70 72 6f 63 20 45 51  y Plan.#.proc EQ
0370: 50 20 7b 73 71 6c 7d 20 7b 0a 20 20 75 70 6c 65  P {sql} {.  uple
0380: 76 65 6c 20 22 65 78 65 63 73 71 6c 20 7b 45 58  vel "execsql {EX
0390: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
03a0: 20 24 73 71 6c 7d 22 0a 7d 0a 0a 23 20 54 68 65   $sql}".}..# The
03b0: 73 65 20 74 65 73 74 73 20 61 72 65 20 74 6f 20  se tests are to 
03c0: 63 68 65 63 6b 20 74 68 61 74 20 22 45 58 50 4c  check that "EXPL
03d0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 20  AIN QUERY PLAN" 
03e0: 69 73 20 77 6f 72 6b 69 6e 67 20 61 73 20 65 78  is working as ex
03f0: 70 65 63 74 65 64 2e 0a 23 0a 64 6f 5f 65 78 65  pected..#.do_exe
0400: 63 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65  csql_test indexe
0410: 64 62 79 2d 31 2e 32 20 7b 0a 20 20 45 58 50 4c  dby-1.2 {.  EXPL
0420: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73  AIN QUERY PLAN s
0430: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 31 20  elect * from t1 
0440: 57 48 45 52 45 20 61 20 3d 20 31 30 3b 20 0a 7d  WHERE a = 10; .}
0450: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
0460: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
0470: 4e 44 45 58 20 69 31 20 28 61 3d 3f 29 7d 7d 0a  NDEX i1 (a=?)}}.
0480: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0490: 69 6e 64 65 78 65 64 62 79 2d 31 2e 33 20 7b 0a  indexedby-1.3 {.
04a0: 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20    EXPLAIN QUERY 
04b0: 50 4c 41 4e 20 73 65 6c 65 63 74 20 2a 20 66 72  PLAN select * fr
04c0: 6f 6d 20 74 31 20 3b 20 0a 7d 20 7b 30 20 30 20  om t1 ; .} {0 0 
04d0: 30 20 7b 53 43 41 4e 20 54 41 42 4c 45 20 74 31  0 {SCAN TABLE t1
04e0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
04f0: 73 74 20 69 6e 64 65 78 65 64 62 79 2d 31 2e 34  st indexedby-1.4
0500: 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45   {.  EXPLAIN QUE
0510: 52 59 20 50 4c 41 4e 20 73 65 6c 65 63 74 20 2a  RY PLAN select *
0520: 20 66 72 6f 6d 20 74 31 2c 20 74 32 20 57 48 45   from t1, t2 WHE
0530: 52 45 20 63 20 3d 20 31 30 3b 20 0a 7d 20 7b 0a  RE c = 10; .} {.
0540: 20 20 30 20 30 20 31 20 7b 53 45 41 52 43 48 20    0 0 1 {SEARCH 
0550: 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 49  TABLE t2 USING I
0560: 4e 44 45 58 20 69 33 20 28 63 3d 3f 29 7d 20 0a  NDEX i3 (c=?)} .
0570: 20 20 30 20 31 20 30 20 7b 53 43 41 4e 20 54 41    0 1 0 {SCAN TA
0580: 42 4c 45 20 74 31 7d 0a 7d 0a 0a 23 20 50 61 72  BLE t1}.}..# Par
0590: 73 65 72 20 74 65 73 74 73 2e 20 54 65 73 74 20  ser tests. Test 
05a0: 74 68 61 74 20 61 6e 20 49 4e 44 45 58 45 44 20  that an INDEXED 
05b0: 42 59 20 6f 72 20 4e 4f 54 20 49 4e 44 45 58 20  BY or NOT INDEX 
05c0: 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 0a 23  clause can be .#
05d0: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 74   attached to a t
05e0: 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
05f0: 20 63 6c 61 75 73 65 2c 20 62 75 74 20 6e 6f 74   clause, but not
0600: 20 74 6f 20 61 20 73 75 62 2d 73 65 6c 65 63 74   to a sub-select
0610: 20 6f 72 0a 23 20 53 51 4c 20 76 69 65 77 2e 20   or.# SQL view. 
0620: 41 6c 73 6f 20 74 65 73 74 20 74 68 61 74 20 73  Also test that s
0630: 70 65 63 69 66 79 69 6e 67 20 61 6e 20 69 6e 64  pecifying an ind
0640: 65 78 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ex that does not
0650: 20 65 78 69 73 74 20 6f 72 0a 23 20 69 73 20 61   exist or.# is a
0660: 74 74 61 63 68 65 64 20 74 6f 20 61 20 64 69 66  ttached to a dif
0670: 66 65 72 65 6e 74 20 74 61 62 6c 65 20 69 73 20  ferent table is 
0680: 64 65 74 65 63 74 65 64 20 61 73 20 61 6e 20 65  detected as an e
0690: 72 72 6f 72 2e 0a 23 20 0a 64 6f 5f 74 65 73 74  rror..# .do_test
06a0: 20 69 6e 64 65 78 65 64 62 79 2d 32 2e 31 20 7b   indexedby-2.1 {
06b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
06c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4e 4f  ECT * FROM t1 NO
06d0: 54 20 49 4e 44 45 58 45 44 20 57 48 45 52 45 20  T INDEXED WHERE 
06e0: 61 20 3d 20 27 6f 6e 65 27 20 41 4e 44 20 62 20  a = 'one' AND b 
06f0: 3d 20 27 74 77 6f 27 7d 0a 7d 20 7b 7d 0a 64 6f  = 'two'}.} {}.do
0700: 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d  _test indexedby-
0710: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
0720: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0730: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 69 31  t1 INDEXED BY i1
0740: 20 57 48 45 52 45 20 61 20 3d 20 27 6f 6e 65 27   WHERE a = 'one'
0750: 20 41 4e 44 20 62 20 3d 20 27 74 77 6f 27 7d 0a   AND b = 'two'}.
0760: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 64  } {}.do_test ind
0770: 65 78 65 64 62 79 2d 32 2e 33 20 7b 0a 20 20 65  exedby-2.3 {.  e
0780: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
0790: 2a 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45  * FROM t1 INDEXE
07a0: 44 20 42 59 20 69 32 20 57 48 45 52 45 20 61 20  D BY i2 WHERE a 
07b0: 3d 20 27 6f 6e 65 27 20 41 4e 44 20 62 20 3d 20  = 'one' AND b = 
07c0: 27 74 77 6f 27 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  'two'}.} {}..do_
07d0: 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 32  test indexedby-2
07e0: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
07f0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0800: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 69 33  t1 INDEXED BY i3
0810: 20 57 48 45 52 45 20 61 20 3d 20 27 6f 6e 65 27   WHERE a = 'one'
0820: 20 41 4e 44 20 62 20 3d 20 27 74 77 6f 27 7d 0a   AND b = 'two'}.
0830: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 69 6e  } {1 {no such in
0840: 64 65 78 3a 20 69 33 7d 7d 0a 64 6f 5f 74 65 73  dex: i3}}.do_tes
0850: 74 20 69 6e 64 65 78 65 64 62 79 2d 32 2e 35 20  t indexedby-2.5 
0860: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53  {.  catchsql { S
0870: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0880: 49 4e 44 45 58 45 44 20 42 59 20 69 35 20 57 48  INDEXED BY i5 WH
0890: 45 52 45 20 61 20 3d 20 27 6f 6e 65 27 20 41 4e  ERE a = 'one' AN
08a0: 44 20 62 20 3d 20 27 74 77 6f 27 7d 0a 7d 20 7b  D b = 'two'}.} {
08b0: 31 20 7b 6e 6f 20 73 75 63 68 20 69 6e 64 65 78  1 {no such index
08c0: 3a 20 69 35 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  : i5}}.do_test i
08d0: 6e 64 65 78 65 64 62 79 2d 32 2e 36 20 7b 0a 20  ndexedby-2.6 {. 
08e0: 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45   catchsql { SELE
08f0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 49 4e 44  CT * FROM t1 IND
0900: 45 58 45 44 20 42 59 20 57 48 45 52 45 20 61 20  EXED BY WHERE a 
0910: 3d 20 27 6f 6e 65 27 20 41 4e 44 20 62 20 3d 20  = 'one' AND b = 
0920: 27 74 77 6f 27 7d 0a 7d 20 7b 31 20 7b 6e 65 61  'two'}.} {1 {nea
0930: 72 20 22 57 48 45 52 45 22 3a 20 73 79 6e 74 61  r "WHERE": synta
0940: 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73  x error}}.do_tes
0950: 74 20 69 6e 64 65 78 65 64 62 79 2d 32 2e 37 20  t indexedby-2.7 
0960: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53  {.  catchsql { S
0970: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20  ELECT * FROM v1 
0980: 49 4e 44 45 58 45 44 20 42 59 20 69 31 20 57 48  INDEXED BY i1 WH
0990: 45 52 45 20 61 20 3d 20 27 6f 6e 65 27 20 7d 0a  ERE a = 'one' }.
09a0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 69 6e  } {1 {no such in
09b0: 64 65 78 3a 20 69 31 7d 7d 0a 0a 23 20 54 65 73  dex: i1}}..# Tes
09c0: 74 73 20 66 6f 72 20 73 69 6e 67 6c 65 20 74 61  ts for single ta
09d0: 62 6c 65 20 63 61 73 65 73 2e 0a 23 0a 64 6f 5f  ble cases..#.do_
09e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 64  execsql_test ind
09f0: 65 78 65 64 62 79 2d 33 2e 31 20 7b 0a 20 20 45  exedby-3.1 {.  E
0a00: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
0a10: 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  N SELECT * FROM 
0a20: 74 31 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 57  t1 NOT INDEXED W
0a30: 48 45 52 45 20 61 20 3d 20 27 6f 6e 65 27 20 41  HERE a = 'one' A
0a40: 4e 44 20 62 20 3d 20 27 74 77 6f 27 0a 7d 20 7b  ND b = 'two'.} {
0a50: 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42 4c  0 0 0 {SCAN TABL
0a60: 45 20 74 31 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  E t1}}.do_execsq
0a70: 6c 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62 79  l_test indexedby
0a80: 2d 33 2e 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e  -3.2 {.  EXPLAIN
0a90: 20 51 55 45 52 59 20 50 4c 41 4e 20 0a 20 20 53   QUERY PLAN .  S
0aa0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0ab0: 49 4e 44 45 58 45 44 20 42 59 20 69 31 20 57 48  INDEXED BY i1 WH
0ac0: 45 52 45 20 61 20 3d 20 27 6f 6e 65 27 20 41 4e  ERE a = 'one' AN
0ad0: 44 20 62 20 3d 20 27 74 77 6f 27 0a 7d 20 7b 30  D b = 'two'.} {0
0ae0: 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42   0 0 {SEARCH TAB
0af0: 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45  LE t1 USING INDE
0b00: 58 20 69 31 20 28 61 3d 3f 29 7d 7d 0a 64 6f 5f  X i1 (a=?)}}.do_
0b10: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 64  execsql_test ind
0b20: 65 78 65 64 62 79 2d 33 2e 33 20 7b 0a 20 20 45  exedby-3.3 {.  E
0b30: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
0b40: 4e 20 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  N .  SELECT * FR
0b50: 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20 42 59  OM t1 INDEXED BY
0b60: 20 69 32 20 57 48 45 52 45 20 61 20 3d 20 27 6f   i2 WHERE a = 'o
0b70: 6e 65 27 20 41 4e 44 20 62 20 3d 20 27 74 77 6f  ne' AND b = 'two
0b80: 27 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52  '.} {0 0 0 {SEAR
0b90: 43 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e  CH TABLE t1 USIN
0ba0: 47 20 49 4e 44 45 58 20 69 32 20 28 62 3d 3f 29  G INDEX i2 (b=?)
0bb0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65 78  }}.do_test index
0bc0: 65 64 62 79 2d 33 2e 34 20 7b 0a 20 20 63 61 74  edby-3.4 {.  cat
0bd0: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
0be0: 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44   FROM t1 INDEXED
0bf0: 20 42 59 20 69 32 20 57 48 45 52 45 20 61 20 3d   BY i2 WHERE a =
0c00: 20 27 6f 6e 65 27 20 7d 0a 7d 20 7b 31 20 7b 6e   'one' }.} {1 {n
0c10: 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e  o query solution
0c20: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65 78  }}.do_test index
0c30: 65 64 62 79 2d 33 2e 35 20 7b 0a 20 20 63 61 74  edby-3.5 {.  cat
0c40: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
0c50: 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44   FROM t1 INDEXED
0c60: 20 42 59 20 69 32 20 4f 52 44 45 52 20 42 59 20   BY i2 ORDER BY 
0c70: 61 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65  a }.} {1 {no que
0c80: 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 64 6f  ry solution}}.do
0c90: 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d  _test indexedby-
0ca0: 33 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  3.6 {.  catchsql
0cb0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
0cc0: 20 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 69   t1 INDEXED BY i
0cd0: 31 20 57 48 45 52 45 20 61 20 3d 20 27 6f 6e 65  1 WHERE a = 'one
0ce0: 27 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ' }.} {0 {}}.do_
0cf0: 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 33  test indexedby-3
0d00: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
0d10: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0d20: 74 31 20 49 4e 44 45 58 45 44 20 42 59 20 69 31  t1 INDEXED BY i1
0d30: 20 4f 52 44 45 52 20 42 59 20 61 20 7d 0a 7d 20   ORDER BY a }.} 
0d40: 7b 30 20 7b 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73  {0 {}}..do_execs
0d50: 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62  ql_test indexedb
0d60: 79 2d 33 2e 38 20 7b 0a 20 20 45 58 50 4c 41 49  y-3.8 {.  EXPLAI
0d70: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 0a 20 20  N QUERY PLAN .  
0d80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
0d90: 20 49 4e 44 45 58 45 44 20 42 59 20 73 71 6c 69   INDEXED BY sqli
0da0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
0db0: 31 20 4f 52 44 45 52 20 42 59 20 65 20 0a 7d 20  1 ORDER BY e .} 
0dc0: 7b 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42  {0 0 0 {SCAN TAB
0dd0: 4c 45 20 74 33 20 55 53 49 4e 47 20 49 4e 44 45  LE t3 USING INDE
0de0: 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  X sqlite_autoind
0df0: 65 78 5f 74 33 5f 31 7d 7d 0a 64 6f 5f 65 78 65  ex_t3_1}}.do_exe
0e00: 63 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65  csql_test indexe
0e10: 64 62 79 2d 33 2e 39 20 7b 0a 20 20 45 58 50 4c  dby-3.9 {.  EXPL
0e20: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 0a  AIN QUERY PLAN .
0e30: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0e40: 74 33 20 49 4e 44 45 58 45 44 20 42 59 20 73 71  t3 INDEXED BY sq
0e50: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
0e60: 33 5f 31 20 57 48 45 52 45 20 65 20 3d 20 31 30  3_1 WHERE e = 10
0e70: 20 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52   .} {0 0 0 {SEAR
0e80: 43 48 20 54 41 42 4c 45 20 74 33 20 55 53 49 4e  CH TABLE t3 USIN
0e90: 47 20 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61  G INDEX sqlite_a
0ea0: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 28 65  utoindex_t3_1 (e
0eb0: 3d 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  =?)}}.do_test in
0ec0: 64 65 78 65 64 62 79 2d 33 2e 31 30 20 7b 0a 20  dexedby-3.10 {. 
0ed0: 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45   catchsql { SELE
0ee0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 49 4e 44  CT * FROM t3 IND
0ef0: 45 58 45 44 20 42 59 20 73 71 6c 69 74 65 5f 61  EXED BY sqlite_a
0f00: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 57 48  utoindex_t3_1 WH
0f10: 45 52 45 20 66 20 3d 20 31 30 20 7d 0a 7d 20 7b  ERE f = 10 }.} {
0f20: 31 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75  1 {no query solu
0f30: 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  tion}}.do_test i
0f40: 6e 64 65 78 65 64 62 79 2d 33 2e 31 31 20 7b 0a  ndexedby-3.11 {.
0f50: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
0f60: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 49 4e  ECT * FROM t3 IN
0f70: 44 45 58 45 44 20 42 59 20 73 71 6c 69 74 65 5f  DEXED BY sqlite_
0f80: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 32 20 57  autoindex_t3_2 W
0f90: 48 45 52 45 20 66 20 3d 20 31 30 20 7d 0a 7d 20  HERE f = 10 }.} 
0fa0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 69 6e 64 65  {1 {no such inde
0fb0: 78 3a 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  x: sqlite_autoin
0fc0: 64 65 78 5f 74 33 5f 32 7d 7d 0a 0a 23 20 54 65  dex_t3_2}}..# Te
0fd0: 73 74 73 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  sts for multiple
0fe0: 20 74 61 62 6c 65 20 63 61 73 65 73 2e 0a 23 0a   table cases..#.
0ff0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1000: 69 6e 64 65 78 65 64 62 79 2d 34 2e 31 20 7b 0a  indexedby-4.1 {.
1010: 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20    EXPLAIN QUERY 
1020: 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52  PLAN SELECT * FR
1030: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
1040: 61 20 3d 20 63 20 0a 7d 20 7b 0a 20 20 30 20 30  a = c .} {.  0 0
1050: 20 30 20 7b 53 43 41 4e 20 54 41 42 4c 45 20 74   0 {SCAN TABLE t
1060: 31 7d 20 0a 20 20 30 20 31 20 31 20 7b 53 45 41  1} .  0 1 1 {SEA
1070: 52 43 48 20 54 41 42 4c 45 20 74 32 20 55 53 49  RCH TABLE t2 USI
1080: 4e 47 20 49 4e 44 45 58 20 69 33 20 28 63 3d 3f  NG INDEX i3 (c=?
1090: 29 7d 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  )}.}.do_execsql_
10a0: 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 34  test indexedby-4
10b0: 2e 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51  .2 {.  EXPLAIN Q
10c0: 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54  UERY PLAN SELECT
10d0: 20 2a 20 46 52 4f 4d 20 74 31 20 49 4e 44 45 58   * FROM t1 INDEX
10e0: 45 44 20 42 59 20 69 31 2c 20 74 32 20 57 48 45  ED BY i1, t2 WHE
10f0: 52 45 20 61 20 3d 20 63 20 0a 7d 20 7b 0a 20 20  RE a = c .} {.  
1100: 30 20 30 20 31 20 7b 53 43 41 4e 20 54 41 42 4c  0 0 1 {SCAN TABL
1110: 45 20 74 32 7d 20 0a 20 20 30 20 31 20 30 20 7b  E t2} .  0 1 0 {
1120: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
1130: 55 53 49 4e 47 20 49 4e 44 45 58 20 69 31 20 28  USING INDEX i1 (
1140: 61 3d 3f 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  a=?)}.}.do_test 
1150: 69 6e 64 65 78 65 64 62 79 2d 34 2e 33 20 7b 0a  indexedby-4.3 {.
1160: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1170: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1180: 31 20 49 4e 44 45 58 45 44 20 42 59 20 69 31 2c  1 INDEXED BY i1,
1190: 20 74 32 20 49 4e 44 45 58 45 44 20 42 59 20 69   t2 INDEXED BY i
11a0: 33 20 57 48 45 52 45 20 61 3d 63 0a 20 20 7d 0a  3 WHERE a=c.  }.
11b0: 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73  } {1 {no query s
11c0: 6f 6c 75 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  olution}}.do_tes
11d0: 74 20 69 6e 64 65 78 65 64 62 79 2d 34 2e 34 20  t indexedby-4.4 
11e0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
11f0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1200: 20 74 32 20 49 4e 44 45 58 45 44 20 42 59 20 69   t2 INDEXED BY i
1210: 33 2c 20 74 31 20 49 4e 44 45 58 45 44 20 42 59  3, t1 INDEXED BY
1220: 20 69 31 20 57 48 45 52 45 20 61 3d 63 0a 20 20   i1 WHERE a=c.  
1230: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79  }.} {1 {no query
1240: 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a 23 20 54   solution}}..# T
1250: 65 73 74 20 65 6d 62 65 64 64 69 6e 67 20 61 6e  est embedding an
1260: 20 49 4e 44 45 58 45 44 20 42 59 20 69 6e 20 61   INDEXED BY in a
1270: 20 43 52 45 41 54 45 20 56 49 45 57 20 73 74 61   CREATE VIEW sta
1280: 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 62 6c 6f  tement. This blo
1290: 63 6b 0a 23 20 61 6c 73 6f 20 74 65 73 74 73 20  ck.# also tests 
12a0: 74 68 61 74 20 6e 6f 74 68 69 6e 67 20 62 61 64  that nothing bad
12b0: 20 68 61 70 70 65 6e 73 20 69 66 20 61 6e 20 69   happens if an i
12c0: 6e 64 65 78 20 72 65 66 65 72 65 64 20 74 6f 20  ndex refered to 
12d0: 62 79 0a 23 20 61 20 43 52 45 41 54 45 20 56 49  by.# a CREATE VI
12e0: 45 57 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  EW statement is 
12f0: 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72  dropped and recr
1300: 65 61 74 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63  eated..#.do_exec
1310: 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65 64  sql_test indexed
1320: 62 79 2d 35 2e 31 20 7b 0a 20 20 43 52 45 41 54  by-5.1 {.  CREAT
1330: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
1340: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 49 4e  ECT * FROM t1 IN
1350: 44 45 58 45 44 20 42 59 20 69 31 20 57 48 45 52  DEXED BY i1 WHER
1360: 45 20 61 20 3e 20 35 3b 0a 20 20 45 58 50 4c 41  E a > 5;.  EXPLA
1370: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
1380: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 20 0a  LECT * FROM v2 .
1390: 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48  } {0 0 0 {SEARCH
13a0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
13b0: 49 4e 44 45 58 20 69 31 20 28 61 3e 3f 29 7d 7d  INDEX i1 (a>?)}}
13c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
13d0: 20 69 6e 64 65 78 65 64 62 79 2d 35 2e 32 20 7b   indexedby-5.2 {
13e0: 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  .  EXPLAIN QUERY
13f0: 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46   PLAN SELECT * F
1400: 52 4f 4d 20 76 32 20 57 48 45 52 45 20 62 20 3d  ROM v2 WHERE b =
1410: 20 31 30 20 0a 7d 20 7b 30 20 30 20 30 20 7b 53   10 .} {0 0 0 {S
1420: 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55  EARCH TABLE t1 U
1430: 53 49 4e 47 20 49 4e 44 45 58 20 69 31 20 28 61  SING INDEX i1 (a
1440: 3e 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  >?)}}.do_test in
1450: 64 65 78 65 64 62 79 2d 35 2e 33 20 7b 0a 20 20  dexedby-5.3 {.  
1460: 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50 20 49  execsql { DROP I
1470: 4e 44 45 58 20 69 31 20 7d 0a 20 20 63 61 74 63  NDEX i1 }.  catc
1480: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  hsql { SELECT * 
1490: 46 52 4f 4d 20 76 32 20 7d 0a 7d 20 7b 31 20 7b  FROM v2 }.} {1 {
14a0: 6e 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 69  no such index: i
14b0: 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65  1}}.do_test inde
14c0: 78 65 64 62 79 2d 35 2e 34 20 7b 0a 20 20 23 20  xedby-5.4 {.  # 
14d0: 52 65 63 72 65 61 74 65 20 69 6e 64 65 78 20 69  Recreate index i
14e0: 31 20 69 6e 20 73 75 63 68 20 61 20 77 61 79 20  1 in such a way 
14f0: 61 73 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  as it cannot be 
1500: 75 73 65 64 20 62 79 20 74 68 65 20 76 69 65 77  used by the view
1510: 20 71 75 65 72 79 2e 0a 20 20 65 78 65 63 73 71   query..  execsq
1520: 6c 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58  l { CREATE INDEX
1530: 20 69 31 20 4f 4e 20 74 31 28 62 29 20 7d 0a 20   i1 ON t1(b) }. 
1540: 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45   catchsql { SELE
1550: 43 54 20 2a 20 46 52 4f 4d 20 76 32 20 7d 0a 7d  CT * FROM v2 }.}
1560: 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73 6f   {1 {no query so
1570: 6c 75 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  lution}}.do_test
1580: 20 69 6e 64 65 78 65 64 62 79 2d 35 2e 35 20 7b   indexedby-5.5 {
1590: 0a 20 20 23 20 44 72 6f 70 20 61 6e 64 20 72 65  .  # Drop and re
15a0: 63 72 65 61 74 65 20 69 6e 64 65 78 20 69 31 20  create index i1 
15b0: 61 67 61 69 6e 2e 20 54 68 69 73 20 74 69 6d 65  again. This time
15c0: 2c 20 63 72 65 61 74 65 20 69 74 20 73 6f 20 74  , create it so t
15d0: 68 61 74 20 69 74 20 63 61 6e 0a 20 20 23 20 62  hat it can.  # b
15e0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  e used by the qu
15f0: 65 72 79 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b  ery..  execsql {
1600: 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 20 3b   DROP INDEX i1 ;
1610: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31   CREATE INDEX i1
1620: 20 4f 4e 20 74 31 28 61 29 20 7d 0a 20 20 63 61   ON t1(a) }.  ca
1630: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
1640: 2a 20 46 52 4f 4d 20 76 32 20 7d 0a 7d 20 7b 30  * FROM v2 }.} {0
1650: 20 7b 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 61   {}}..# Test tha
1660: 74 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  t "NOT INDEXED" 
1670: 6d 61 79 20 75 73 65 20 74 68 65 20 72 6f 77 69  may use the rowi
1680: 64 20 69 6e 64 65 78 2c 20 62 75 74 20 6e 6f 74  d index, but not
1690: 20 6f 74 68 65 72 73 2e 0a 23 20 0a 64 6f 5f 65   others..# .do_e
16a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 64 65  xecsql_test inde
16b0: 78 65 64 62 79 2d 36 2e 31 20 7b 0a 20 20 45 58  xedby-6.1 {.  EX
16c0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
16d0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
16e0: 31 20 57 48 45 52 45 20 62 20 3d 20 31 30 20 4f  1 WHERE b = 10 O
16f0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 0a 7d  RDER BY rowid .}
1700: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
1710: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
1720: 4e 44 45 58 20 69 32 20 28 62 3d 3f 29 7d 7d 0a  NDEX i2 (b=?)}}.
1730: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1740: 69 6e 64 65 78 65 64 62 79 2d 36 2e 32 20 7b 0a  indexedby-6.2 {.
1750: 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20    EXPLAIN QUERY 
1760: 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52  PLAN SELECT * FR
1770: 4f 4d 20 74 31 20 4e 4f 54 20 49 4e 44 45 58 45  OM t1 NOT INDEXE
1780: 44 20 57 48 45 52 45 20 62 20 3d 20 31 30 20 4f  D WHERE b = 10 O
1790: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 0a 7d  RDER BY rowid .}
17a0: 20 7b 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41   {0 0 0 {SCAN TA
17b0: 42 4c 45 20 74 31 7d 7d 0a 0a 23 20 54 65 73 74  BLE t1}}..# Test
17c0: 20 74 68 61 74 20 22 49 4e 44 45 58 45 44 20 42   that "INDEXED B
17d0: 59 22 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  Y" can be used i
17e0: 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65  n a DELETE state
17f0: 6d 65 6e 74 2e 0a 23 20 0a 64 6f 5f 65 78 65 63  ment..# .do_exec
1800: 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65 64  sql_test indexed
1810: 62 79 2d 37 2e 31 20 7b 0a 20 20 45 58 50 4c 41  by-7.1 {.  EXPLA
1820: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 44 45  IN QUERY PLAN DE
1830: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1840: 52 45 20 61 20 3d 20 35 20 0a 7d 20 7b 30 20 30  RE a = 5 .} {0 0
1850: 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45   0 {SEARCH TABLE
1860: 20 74 31 20 55 53 49 4e 47 20 43 4f 56 45 52 49   t1 USING COVERI
1870: 4e 47 20 49 4e 44 45 58 20 69 31 20 28 61 3d 3f  NG INDEX i1 (a=?
1880: 29 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  )}}.do_execsql_t
1890: 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 37 2e  est indexedby-7.
18a0: 32 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55  2 {.  EXPLAIN QU
18b0: 45 52 59 20 50 4c 41 4e 20 44 45 4c 45 54 45 20  ERY PLAN DELETE 
18c0: 46 52 4f 4d 20 74 31 20 4e 4f 54 20 49 4e 44 45  FROM t1 NOT INDE
18d0: 58 45 44 20 57 48 45 52 45 20 61 20 3d 20 35 20  XED WHERE a = 5 
18e0: 0a 7d 20 7b 30 20 30 20 30 20 7b 53 43 41 4e 20  .} {0 0 0 {SCAN 
18f0: 54 41 42 4c 45 20 74 31 7d 7d 0a 64 6f 5f 65 78  TABLE t1}}.do_ex
1900: 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78  ecsql_test index
1910: 65 64 62 79 2d 37 2e 33 20 7b 0a 20 20 45 58 50  edby-7.3 {.  EXP
1920: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
1930: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 49  DELETE FROM t1 I
1940: 4e 44 45 58 45 44 20 42 59 20 69 31 20 57 48 45  NDEXED BY i1 WHE
1950: 52 45 20 61 20 3d 20 35 20 0a 7d 20 7b 30 20 30  RE a = 5 .} {0 0
1960: 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45   0 {SEARCH TABLE
1970: 20 74 31 20 55 53 49 4e 47 20 43 4f 56 45 52 49   t1 USING COVERI
1980: 4e 47 20 49 4e 44 45 58 20 69 31 20 28 61 3d 3f  NG INDEX i1 (a=?
1990: 29 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  )}}.do_execsql_t
19a0: 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 37 2e  est indexedby-7.
19b0: 34 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55  4 {.  EXPLAIN QU
19c0: 45 52 59 20 50 4c 41 4e 20 44 45 4c 45 54 45 20  ERY PLAN DELETE 
19d0: 46 52 4f 4d 20 74 31 20 49 4e 44 45 58 45 44 20  FROM t1 INDEXED 
19e0: 42 59 20 69 31 20 57 48 45 52 45 20 61 20 3d 20  BY i1 WHERE a = 
19f0: 35 20 41 4e 44 20 62 20 3d 20 31 30 0a 7d 20 7b  5 AND b = 10.} {
1a00: 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41  0 0 0 {SEARCH TA
1a10: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
1a20: 45 58 20 69 31 20 28 61 3d 3f 29 7d 7d 0a 64 6f  EX i1 (a=?)}}.do
1a30: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e  _execsql_test in
1a40: 64 65 78 65 64 62 79 2d 37 2e 35 20 7b 0a 20 20  dexedby-7.5 {.  
1a50: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
1a60: 41 4e 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  AN DELETE FROM t
1a70: 31 20 49 4e 44 45 58 45 44 20 42 59 20 69 32 20  1 INDEXED BY i2 
1a80: 57 48 45 52 45 20 61 20 3d 20 35 20 41 4e 44 20  WHERE a = 5 AND 
1a90: 62 20 3d 20 31 30 0a 7d 20 7b 30 20 30 20 30 20  b = 10.} {0 0 0 
1aa0: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  {SEARCH TABLE t1
1ab0: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 69 32 20   USING INDEX i2 
1ac0: 28 62 3d 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  (b=?)}}.do_test 
1ad0: 69 6e 64 65 78 65 64 62 79 2d 37 2e 36 20 7b 0a  indexedby-7.6 {.
1ae0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 45 4c    catchsql { DEL
1af0: 45 54 45 20 46 52 4f 4d 20 74 31 20 49 4e 44 45  ETE FROM t1 INDE
1b00: 58 45 44 20 42 59 20 69 32 20 57 48 45 52 45 20  XED BY i2 WHERE 
1b10: 61 20 3d 20 35 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  a = 5}.} {1 {no 
1b20: 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d  query solution}}
1b30: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 22 49  ..# Test that "I
1b40: 4e 44 45 58 45 44 20 42 59 22 20 63 61 6e 20 62  NDEXED BY" can b
1b50: 65 20 75 73 65 64 20 69 6e 20 61 6e 20 55 50 44  e used in an UPD
1b60: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ATE statement..#
1b70: 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73   .do_execsql_tes
1b80: 74 20 69 6e 64 65 78 65 64 62 79 2d 38 2e 31 20  t indexedby-8.1 
1b90: 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52  {.  EXPLAIN QUER
1ba0: 59 20 50 4c 41 4e 20 55 50 44 41 54 45 20 74 31  Y PLAN UPDATE t1
1bb0: 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64   SET rowid=rowid
1bc0: 2b 31 20 57 48 45 52 45 20 61 20 3d 20 35 20 0a  +1 WHERE a = 5 .
1bd0: 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48  } {0 0 0 {SEARCH
1be0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
1bf0: 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 20 69  COVERING INDEX i
1c00: 31 20 28 61 3d 3f 29 7d 7d 0a 64 6f 5f 65 78 65  1 (a=?)}}.do_exe
1c10: 63 73 71 6c 5f 74 65 73 74 20 69 6e 64 65 78 65  csql_test indexe
1c20: 64 62 79 2d 38 2e 32 20 7b 0a 20 20 45 58 50 4c  dby-8.2 {.  EXPL
1c30: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 55  AIN QUERY PLAN U
1c40: 50 44 41 54 45 20 74 31 20 4e 4f 54 20 49 4e 44  PDATE t1 NOT IND
1c50: 45 58 45 44 20 53 45 54 20 72 6f 77 69 64 3d 72  EXED SET rowid=r
1c60: 6f 77 69 64 2b 31 20 57 48 45 52 45 20 61 20 3d  owid+1 WHERE a =
1c70: 20 35 20 0a 7d 20 7b 30 20 30 20 30 20 7b 53 43   5 .} {0 0 0 {SC
1c80: 41 4e 20 54 41 42 4c 45 20 74 31 7d 7d 0a 64 6f  AN TABLE t1}}.do
1c90: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e  _execsql_test in
1ca0: 64 65 78 65 64 62 79 2d 38 2e 33 20 7b 0a 20 20  dexedby-8.3 {.  
1cb0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
1cc0: 41 4e 20 55 50 44 41 54 45 20 74 31 20 49 4e 44  AN UPDATE t1 IND
1cd0: 45 58 45 44 20 42 59 20 69 31 20 53 45 54 20 72  EXED BY i1 SET r
1ce0: 6f 77 69 64 3d 72 6f 77 69 64 2b 31 20 57 48 45  owid=rowid+1 WHE
1cf0: 52 45 20 61 20 3d 20 35 20 0a 7d 20 7b 30 20 30  RE a = 5 .} {0 0
1d00: 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45   0 {SEARCH TABLE
1d10: 20 74 31 20 55 53 49 4e 47 20 43 4f 56 45 52 49   t1 USING COVERI
1d20: 4e 47 20 49 4e 44 45 58 20 69 31 20 28 61 3d 3f  NG INDEX i1 (a=?
1d30: 29 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  )}}.do_execsql_t
1d40: 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 38 2e  est indexedby-8.
1d50: 34 20 7b 0a 20 20 45 58 50 4c 41 49 4e 20 51 55  4 {.  EXPLAIN QU
1d60: 45 52 59 20 50 4c 41 4e 20 0a 20 20 55 50 44 41  ERY PLAN .  UPDA
1d70: 54 45 20 74 31 20 49 4e 44 45 58 45 44 20 42 59  TE t1 INDEXED BY
1d80: 20 69 31 20 53 45 54 20 72 6f 77 69 64 3d 72 6f   i1 SET rowid=ro
1d90: 77 69 64 2b 31 20 57 48 45 52 45 20 61 20 3d 20  wid+1 WHERE a = 
1da0: 35 20 41 4e 44 20 62 20 3d 20 31 30 0a 7d 20 7b  5 AND b = 10.} {
1db0: 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41  0 0 0 {SEARCH TA
1dc0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
1dd0: 45 58 20 69 31 20 28 61 3d 3f 29 7d 7d 0a 64 6f  EX i1 (a=?)}}.do
1de0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e  _execsql_test in
1df0: 64 65 78 65 64 62 79 2d 38 2e 35 20 7b 0a 20 20  dexedby-8.5 {.  
1e00: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
1e10: 41 4e 20 0a 20 20 55 50 44 41 54 45 20 74 31 20  AN .  UPDATE t1 
1e20: 49 4e 44 45 58 45 44 20 42 59 20 69 32 20 53 45  INDEXED BY i2 SE
1e30: 54 20 72 6f 77 69 64 3d 72 6f 77 69 64 2b 31 20  T rowid=rowid+1 
1e40: 57 48 45 52 45 20 61 20 3d 20 35 20 41 4e 44 20  WHERE a = 5 AND 
1e50: 62 20 3d 20 31 30 0a 7d 20 7b 30 20 30 20 30 20  b = 10.} {0 0 0 
1e60: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  {SEARCH TABLE t1
1e70: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 69 32 20   USING INDEX i2 
1e80: 28 62 3d 3f 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  (b=?)}}.do_test 
1e90: 69 6e 64 65 78 65 64 62 79 2d 38 2e 36 20 7b 0a  indexedby-8.6 {.
1ea0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 55 50 44    catchsql { UPD
1eb0: 41 54 45 20 74 31 20 49 4e 44 45 58 45 44 20 42  ATE t1 INDEXED B
1ec0: 59 20 69 32 20 53 45 54 20 72 6f 77 69 64 3d 72  Y i2 SET rowid=r
1ed0: 6f 77 69 64 2b 31 20 57 48 45 52 45 20 61 20 3d  owid+1 WHERE a =
1ee0: 20 35 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 71 75 65   5}.} {1 {no que
1ef0: 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a 23  ry solution}}..#
1f00: 20 54 65 73 74 20 74 68 61 74 20 62 75 67 20 23   Test that bug #
1f10: 33 35 36 30 20 69 73 20 66 69 78 65 64 2e 0a 23  3560 is fixed..#
1f20: 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65 78 65 64  .do_test indexed
1f30: 62 79 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  by-9.1 {.  execs
1f40: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1f50: 54 41 42 4c 45 20 6d 61 69 6e 74 61 62 6c 65 28  TABLE maintable(
1f60: 20 69 64 20 69 6e 74 65 67 65 72 29 3b 0a 20 20   id integer);.  
1f70: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6a    CREATE TABLE j
1f80: 6f 69 6e 6d 65 28 69 64 5f 69 6e 74 20 69 6e 74  oinme(id_int int
1f90: 65 67 65 72 2c 20 69 64 5f 74 65 78 74 20 74 65  eger, id_text te
1fa0: 78 74 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  xt);.    CREATE 
1fb0: 49 4e 44 45 58 20 6a 6f 69 6e 6d 65 5f 69 64 5f  INDEX joinme_id_
1fc0: 74 65 78 74 5f 69 64 78 20 6f 6e 20 6a 6f 69 6e  text_idx on join
1fd0: 6d 65 28 69 64 5f 74 65 78 74 29 3b 0a 20 20 20  me(id_text);.   
1fe0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 6a 6f   CREATE INDEX jo
1ff0: 69 6e 6d 65 5f 69 64 5f 69 6e 74 5f 69 64 78 20  inme_id_int_idx 
2000: 6f 6e 20 6a 6f 69 6e 6d 65 28 69 64 5f 69 6e 74  on joinme(id_int
2010: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
2020: 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d 39 2e  est indexedby-9.
2030: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
2040: 0a 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72  .    select * fr
2050: 6f 6d 20 6d 61 69 6e 74 61 62 6c 65 20 61 73 20  om maintable as 
2060: 6d 20 69 6e 6e 65 72 20 6a 6f 69 6e 0a 20 20 20  m inner join.   
2070: 20 6a 6f 69 6e 6d 65 20 61 73 20 6a 20 69 6e 64   joinme as j ind
2080: 65 78 65 64 20 62 79 20 6a 6f 69 6e 6d 65 5f 69  exed by joinme_i
2090: 64 5f 74 65 78 74 5f 69 64 78 0a 20 20 20 20 6f  d_text_idx.    o
20a0: 6e 20 28 20 6d 2e 69 64 20 20 3d 20 6a 2e 69 64  n ( m.id  = j.id
20b0: 5f 69 6e 74 29 0a 20 20 7d 0a 7d 20 7b 31 20 7b  _int).  }.} {1 {
20c0: 6e 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f  no query solutio
20d0: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 64 65  n}}.do_test inde
20e0: 78 65 64 62 79 2d 39 2e 33 20 7b 0a 20 20 63 61  xedby-9.3 {.  ca
20f0: 74 63 68 73 71 6c 20 7b 20 73 65 6c 65 63 74 20  tchsql { select 
2100: 2a 20 66 72 6f 6d 20 6d 61 69 6e 74 61 62 6c 65  * from maintable
2110: 2c 20 6a 6f 69 6e 6d 65 20 49 4e 44 45 58 45 44  , joinme INDEXED
2120: 20 62 79 20 6a 6f 69 6e 6d 65 5f 69 64 5f 74 65   by joinme_id_te
2130: 78 74 5f 69 64 78 20 7d 0a 7d 20 7b 31 20 7b 6e  xt_idx }.} {1 {n
2140: 6f 20 71 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e  o query solution
2150: 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  }}..# Make sure 
2160: 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 63 72 65  we can still cre
2170: 61 74 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 69  ate tables, indi
2180: 63 65 73 2c 20 61 6e 64 20 63 6f 6c 75 6d 6e 73  ces, and columns
2190: 20 77 68 6f 73 65 20 6e 61 6d 65 0a 23 20 69 73   whose name.# is
21a0: 20 22 69 6e 64 65 78 65 64 22 2e 0a 23 0a 64 6f   "indexed"..#.do
21b0: 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d  _test indexedby-
21c0: 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.1 {.  execsql
21d0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
21e0: 42 4c 45 20 69 6e 64 65 78 65 64 28 78 2c 79 29  BLE indexed(x,y)
21f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2200: 4f 20 69 6e 64 65 78 65 64 20 56 41 4c 55 45 53  O indexed VALUES
2210: 28 31 2c 32 29 3b 0a 20 20 20 20 53 45 4c 45 43  (1,2);.    SELEC
2220: 54 20 2a 20 46 52 4f 4d 20 69 6e 64 65 78 65 64  T * FROM indexed
2230: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f  ;.  }.} {1 2}.do
2240: 5f 74 65 73 74 20 69 6e 64 65 78 65 64 62 79 2d  _test indexedby-
2250: 31 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.2 {.  execsql
2260: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e   {.    CREATE IN
2270: 44 45 58 20 69 31 30 20 4f 4e 20 69 6e 64 65 78  DEX i10 ON index
2280: 65 64 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43  ed(x);.    SELEC
2290: 54 20 2a 20 46 52 4f 4d 20 69 6e 64 65 78 65 64  T * FROM indexed
22a0: 20 69 6e 64 65 78 65 64 20 62 79 20 69 31 30 20   indexed by i10 
22b0: 77 68 65 72 65 20 78 3e 30 3b 0a 20 20 7d 0a 7d  where x>0;.  }.}
22c0: 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 69   {1 2}.do_test i
22d0: 6e 64 65 78 65 64 62 79 2d 31 30 2e 33 20 7b 0a  ndexedby-10.3 {.
22e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
22f0: 44 52 4f 50 20 54 41 42 4c 45 20 69 6e 64 65 78  DROP TABLE index
2300: 65 64 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ed;.    CREATE T
2310: 41 42 4c 45 20 74 31 30 28 69 6e 64 65 78 65 64  ABLE t10(indexed
2320: 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20 49   INTEGER);.    I
2330: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 20 56  NSERT INTO t10 V
2340: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 43 52  ALUES(1);.    CR
2350: 45 41 54 45 20 49 4e 44 45 58 20 69 6e 64 65 78  EATE INDEX index
2360: 65 64 20 4f 4e 20 74 31 30 28 69 6e 64 65 78 65  ed ON t10(indexe
2370: 64 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  d);.    SELECT *
2380: 20 46 52 4f 4d 20 74 31 30 20 69 6e 64 65 78 65   FROM t10 indexe
2390: 64 20 62 79 20 69 6e 64 65 78 65 64 20 57 48 45  d by indexed WHE
23a0: 52 45 20 69 6e 64 65 78 65 64 3e 30 0a 20 20 7d  RE indexed>0.  }
23b0: 0a 7d 20 7b 31 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  .} {1}..#-------
23c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2400: 2d 2d 0a 23 20 45 6e 73 75 72 65 20 74 68 61 74  --.# Ensure that
2410: 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
2420: 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 69 6e  e end of each in
2430: 64 65 78 20 65 6e 74 72 79 20 6d 61 79 20 62 65  dex entry may be
2440: 20 75 73 65 64 0a 23 20 66 6f 72 20 65 71 75 61   used.# for equa
2450: 6c 69 74 79 20 63 6f 6e 73 74 72 61 69 6e 74 73  lity constraints
2460: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
2470: 20 61 73 20 6f 74 68 65 72 20 69 6e 64 65 78 65   as other indexe
2480: 64 20 66 69 65 6c 64 73 2e 0a 23 0a 64 6f 5f 65  d fields..#.do_e
2490: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 31 2e 31  xecsql_test 11.1
24a0: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
24b0: 45 20 78 31 28 61 2c 20 62 20 54 45 58 54 29 3b  E x1(a, b TEXT);
24c0: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
24d0: 78 31 69 20 4f 4e 20 78 31 28 61 2c 20 62 29 3b  x1i ON x1(a, b);
24e0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
24f0: 31 20 56 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a  1 VALUES(1, 1);.
2500: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31    INSERT INTO x1
2510: 20 56 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20   VALUES(1, 1);. 
2520: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20   INSERT INTO x1 
2530: 56 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20 20  VALUES(1, 1);.  
2540: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56  INSERT INTO x1 V
2550: 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 7d 0a 64  ALUES(1, 1);.}.d
2560: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
2570: 31 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  1.2 {.  SELECT a
2580: 2c 62 2c 72 6f 77 69 64 20 46 52 4f 4d 20 78 31  ,b,rowid FROM x1
2590: 20 49 4e 44 45 58 45 44 20 42 59 20 78 31 69 20   INDEXED BY x1i 
25a0: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 62 3d  WHERE a=1 AND b=
25b0: 31 20 41 4e 44 20 72 6f 77 69 64 3d 33 3b 0a 7d  1 AND rowid=3;.}
25c0: 20 7b 31 20 31 20 33 7d 0a 64 6f 5f 65 78 65 63   {1 1 3}.do_exec
25d0: 73 71 6c 5f 74 65 73 74 20 31 31 2e 33 20 7b 0a  sql_test 11.3 {.
25e0: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 72 6f 77    SELECT a,b,row
25f0: 69 64 20 46 52 4f 4d 20 78 31 20 49 4e 44 45 58  id FROM x1 INDEX
2600: 45 44 20 42 59 20 78 31 69 20 57 48 45 52 45 20  ED BY x1i WHERE 
2610: 61 3d 31 20 41 4e 44 20 62 3d 31 20 41 4e 44 20  a=1 AND b=1 AND 
2620: 72 6f 77 69 64 3d 27 33 27 3b 0a 7d 20 7b 31 20  rowid='3';.} {1 
2630: 31 20 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1 3}.do_execsql_
2640: 74 65 73 74 20 31 31 2e 34 20 7b 0a 20 20 53 45  test 11.4 {.  SE
2650: 4c 45 43 54 20 61 2c 62 2c 72 6f 77 69 64 20 46  LECT a,b,rowid F
2660: 52 4f 4d 20 78 31 20 49 4e 44 45 58 45 44 20 42  ROM x1 INDEXED B
2670: 59 20 78 31 69 20 57 48 45 52 45 20 61 3d 31 20  Y x1i WHERE a=1 
2680: 41 4e 44 20 62 3d 31 20 41 4e 44 20 72 6f 77 69  AND b=1 AND rowi
2690: 64 3d 27 33 2e 30 27 3b 0a 7d 20 7b 31 20 31 20  d='3.0';.} {1 1 
26a0: 33 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 31  3}.do_eqp_test 1
26b0: 31 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  1.5 {.  SELECT a
26c0: 2c 62 2c 72 6f 77 69 64 20 46 52 4f 4d 20 78 31  ,b,rowid FROM x1
26d0: 20 49 4e 44 45 58 45 44 20 42 59 20 78 31 69 20   INDEXED BY x1i 
26e0: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 62 3d  WHERE a=1 AND b=
26f0: 31 20 41 4e 44 20 72 6f 77 69 64 3d 27 33 2e 30  1 AND rowid='3.0
2700: 27 3b 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41  ';.} {0 0 0 {SEA
2710: 52 43 48 20 54 41 42 4c 45 20 78 31 20 55 53 49  RCH TABLE x1 USI
2720: 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45  NG COVERING INDE
2730: 58 20 78 31 69 20 28 61 3d 3f 20 41 4e 44 20 62  X x1i (a=? AND b
2740: 3d 3f 20 41 4e 44 20 72 6f 77 69 64 3d 3f 29 7d  =? AND rowid=?)}
2750: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
2760: 73 74 20 31 31 2e 36 20 7b 0a 20 20 43 52 45 41  st 11.6 {.  CREA
2770: 54 45 20 54 41 42 4c 45 20 78 32 28 63 20 49 4e  TE TABLE x2(c IN
2780: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
2790: 59 2c 20 61 2c 20 62 20 54 45 58 54 29 3b 0a 20  Y, a, b TEXT);. 
27a0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 78 32   CREATE INDEX x2
27b0: 69 20 4f 4e 20 78 32 28 61 2c 20 62 29 3b 0a 20  i ON x2(a, b);. 
27c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20   INSERT INTO x2 
27d0: 56 41 4c 55 45 53 28 31 2c 20 31 2c 20 31 29 3b  VALUES(1, 1, 1);
27e0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
27f0: 32 20 56 41 4c 55 45 53 28 32 2c 20 31 2c 20 31  2 VALUES(2, 1, 1
2800: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
2810: 20 78 32 20 56 41 4c 55 45 53 28 33 2c 20 31 2c   x2 VALUES(3, 1,
2820: 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   1);.  INSERT IN
2830: 54 4f 20 78 32 20 56 41 4c 55 45 53 28 34 2c 20  TO x2 VALUES(4, 
2840: 31 2c 20 31 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63  1, 1);.}.do_exec
2850: 73 71 6c 5f 74 65 73 74 20 31 31 2e 37 20 7b 0a  sql_test 11.7 {.
2860: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46    SELECT a,b,c F
2870: 52 4f 4d 20 78 32 20 49 4e 44 45 58 45 44 20 42  ROM x2 INDEXED B
2880: 59 20 78 32 69 20 57 48 45 52 45 20 61 3d 31 20  Y x2i WHERE a=1 
2890: 41 4e 44 20 62 3d 31 20 41 4e 44 20 63 3d 33 3b  AND b=1 AND c=3;
28a0: 0a 7d 20 7b 31 20 31 20 33 7d 0a 64 6f 5f 65 78  .} {1 1 3}.do_ex
28b0: 65 63 73 71 6c 5f 74 65 73 74 20 31 31 2e 38 20  ecsql_test 11.8 
28c0: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63  {.  SELECT a,b,c
28d0: 20 46 52 4f 4d 20 78 32 20 49 4e 44 45 58 45 44   FROM x2 INDEXED
28e0: 20 42 59 20 78 32 69 20 57 48 45 52 45 20 61 3d   BY x2i WHERE a=
28f0: 31 20 41 4e 44 20 62 3d 31 20 41 4e 44 20 63 3d  1 AND b=1 AND c=
2900: 27 33 27 3b 0a 7d 20 7b 31 20 31 20 33 7d 0a 64  '3';.} {1 1 3}.d
2910: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
2920: 31 2e 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  1.9 {.  SELECT a
2930: 2c 62 2c 63 20 46 52 4f 4d 20 78 32 20 49 4e 44  ,b,c FROM x2 IND
2940: 45 58 45 44 20 42 59 20 78 32 69 20 57 48 45 52  EXED BY x2i WHER
2950: 45 20 61 3d 31 20 41 4e 44 20 62 3d 31 20 41 4e  E a=1 AND b=1 AN
2960: 44 20 63 3d 27 33 2e 30 27 3b 0a 7d 20 7b 31 20  D c='3.0';.} {1 
2970: 31 20 33 7d 0a 64 6f 5f 65 71 70 5f 74 65 73 74  1 3}.do_eqp_test
2980: 20 31 31 2e 31 30 20 7b 0a 20 20 53 45 4c 45 43   11.10 {.  SELEC
2990: 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 78 32 20  T a,b,c FROM x2 
29a0: 49 4e 44 45 58 45 44 20 42 59 20 78 32 69 20 57  INDEXED BY x2i W
29b0: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 31  HERE a=1 AND b=1
29c0: 20 41 4e 44 20 63 3d 27 33 2e 30 27 3b 0a 7d 20   AND c='3.0';.} 
29d0: 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54  {0 0 0 {SEARCH T
29e0: 41 42 4c 45 20 78 32 20 55 53 49 4e 47 20 43 4f  ABLE x2 USING CO
29f0: 56 45 52 49 4e 47 20 49 4e 44 45 58 20 78 32 69  VERING INDEX x2i
2a00: 20 28 61 3d 3f 20 41 4e 44 20 62 3d 3f 20 41 4e   (a=? AND b=? AN
2a10: 44 20 72 6f 77 69 64 3d 3f 29 7d 7d 0a 0a 66 69  D rowid=?)}}..fi
2a20: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.