/ Hex Artifact Content
Login

Artifact 762ff3f8e25d852aae55c6462ca166a80c0cde61:


0000: 23 20 32 30 31 30 20 41 70 72 69 6c 20 30 37 0a  # 2010 April 07.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   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 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 61 75 74 6f 6d  is testing autom
01d0: 61 74 69 63 20 69 6e 64 65 78 20 63 72 65 61 74  atic index creat
01e0: 69 6f 6e 20 6c 6f 67 69 63 2e 0a 23 0a 0a 73 65  ion logic..#..se
01f0: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0200: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0210: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0220: 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66  tester.tcl..# If
0230: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
0240: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
0250: 68 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65  h automatic inde
0260: 78 20 73 75 70 70 6f 72 74 20 74 68 65 6e 0a 23  x support then.#
0270: 20 73 6b 69 70 20 61 6c 6c 20 74 65 73 74 73 20   skip all tests 
0280: 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 23 0a  in this file..#.
0290: 69 66 63 61 70 61 62 6c 65 20 7b 21 61 75 74 6f  ifcapable {!auto
02a0: 69 6e 64 65 78 7d 20 7b 0a 20 20 66 69 6e 69 73  index} {.  finis
02b0: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
02c0: 7d 0a 0a 23 20 53 65 74 75 70 20 66 6f 72 20 6c  }..# Setup for l
02d0: 6f 67 67 69 6e 67 20 0a 64 62 20 63 6c 6f 73 65  ogging .db close
02e0: 0a 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
02f0: 6e 0a 74 65 73 74 5f 73 71 6c 69 74 65 33 5f 6c  n.test_sqlite3_l
0300: 6f 67 20 5b 6c 69 73 74 20 6c 61 70 70 65 6e 64  og [list lappend
0310: 20 3a 3a 6c 6f 67 5d 0a 73 65 74 20 3a 3a 6c 6f   ::log].set ::lo
0320: 67 20 5b 6c 69 73 74 5d 0a 73 71 6c 69 74 65 33  g [list].sqlite3
0330: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 0a 23 20   db test.db...# 
0340: 57 69 74 68 20 61 75 74 6f 6d 61 74 69 63 20 69  With automatic i
0350: 6e 64 65 78 20 74 75 72 6e 65 64 20 6f 66 66 2c  ndex turned off,
0360: 20 77 65 20 64 6f 20 61 20 66 75 6c 6c 20 73 63   we do a full sc
0370: 61 6e 20 6f 66 20 74 68 65 20 54 32 20 74 61 62  an of the T2 tab
0380: 6c 65 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69  le.do_test autoi
0390: 6e 64 65 78 31 2d 31 30 30 20 7b 0a 20 20 64 62  ndex1-100 {.  db
03a0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
03b0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29  TE TABLE t1(a,b)
03c0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
03d0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 31 31  O t1 VALUES(1,11
03e0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
03f0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 32  TO t1 VALUES(2,2
0400: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
0410: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 2b  NTO t1 SELECT a+
0420: 32 2c 20 62 2b 32 32 20 46 52 4f 4d 20 74 31 3b  2, b+22 FROM t1;
0430: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0440: 20 74 31 20 53 45 4c 45 43 54 20 61 2b 34 2c 20   t1 SELECT a+4, 
0450: 62 2b 34 34 20 46 52 4f 4d 20 74 31 3b 0a 20 20  b+44 FROM t1;.  
0460: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0470: 32 28 63 2c 64 29 3b 0a 20 20 20 20 49 4e 53 45  2(c,d);.    INSE
0480: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
0490: 54 20 61 2c 20 39 30 30 2b 62 20 46 52 4f 4d 20  T a, 900+b FROM 
04a0: 74 31 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76 61  t1;.  }.  db eva
04b0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  l {.    PRAGMA a
04c0: 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 3d 4f  utomatic_index=O
04d0: 46 46 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  FF;.    SELECT b
04e0: 2c 20 64 20 46 52 4f 4d 20 74 31 20 4a 4f 49 4e  , d FROM t1 JOIN
04f0: 20 74 32 20 4f 4e 20 61 3d 63 20 4f 52 44 45 52   t2 ON a=c ORDER
0500: 20 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 31 31   BY b;.  }.} {11
0510: 20 39 31 31 20 32 32 20 39 32 32 20 33 33 20 39   911 22 922 33 9
0520: 33 33 20 34 34 20 39 34 34 20 35 35 20 39 35 35  33 44 944 55 955
0530: 20 36 36 20 39 36 36 20 37 37 20 39 37 37 20 38   66 966 77 977 8
0540: 38 20 39 38 38 7d 0a 64 6f 5f 74 65 73 74 20 61  8 988}.do_test a
0550: 75 74 6f 69 6e 64 65 78 31 2d 31 30 31 20 7b 0a  utoindex1-101 {.
0560: 20 20 64 62 20 73 74 61 74 75 73 20 73 74 65 70    db status step
0570: 0a 7d 20 7b 36 33 7d 0a 64 6f 5f 74 65 73 74 20  .} {63}.do_test 
0580: 61 75 74 6f 69 6e 64 65 78 31 2d 31 30 32 20 7b  autoindex1-102 {
0590: 0a 20 20 64 62 20 73 74 61 74 75 73 20 61 75 74  .  db status aut
05a0: 6f 69 6e 64 65 78 0a 7d 20 7b 30 7d 0a 0a 23 20  oindex.} {0}..# 
05b0: 57 69 74 68 20 61 75 74 6f 69 6e 64 65 78 20 74  With autoindex t
05c0: 75 72 6e 65 64 20 6f 6e 2c 20 77 65 20 62 75 69  urned on, we bui
05d0: 6c 64 20 61 6e 20 69 6e 64 65 78 20 6f 6e 63 65  ld an index once
05e0: 20 61 6e 64 20 74 68 65 6e 20 75 73 65 20 74 68   and then use th
05f0: 61 74 20 69 6e 64 65 78 0a 23 20 74 6f 20 66 69  at index.# to fi
0600: 6e 64 20 54 32 20 76 61 6c 75 65 73 2e 0a 64 6f  nd T2 values..do
0610: 5f 74 65 73 74 20 61 75 74 6f 69 6e 64 65 78 31  _test autoindex1
0620: 2d 31 31 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  -110 {.  db eval
0630: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75   {.    PRAGMA au
0640: 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 3d 4f 4e  tomatic_index=ON
0650: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 2c 20  ;.    SELECT b, 
0660: 64 20 46 52 4f 4d 20 74 31 20 4a 4f 49 4e 20 74  d FROM t1 JOIN t
0670: 32 20 4f 4e 20 61 3d 63 20 4f 52 44 45 52 20 42  2 ON a=c ORDER B
0680: 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 39  Y b;.  }.} {11 9
0690: 31 31 20 32 32 20 39 32 32 20 33 33 20 39 33 33  11 22 922 33 933
06a0: 20 34 34 20 39 34 34 20 35 35 20 39 35 35 20 36   44 944 55 955 6
06b0: 36 20 39 36 36 20 37 37 20 39 37 37 20 38 38 20  6 966 77 977 88 
06c0: 39 38 38 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  988}.do_test aut
06d0: 6f 69 6e 64 65 78 31 2d 31 31 31 20 7b 0a 20 20  oindex1-111 {.  
06e0: 64 62 20 73 74 61 74 75 73 20 73 74 65 70 0a 7d  db status step.}
06f0: 20 7b 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {7}.do_test aut
0700: 6f 69 6e 64 65 78 31 2d 31 31 32 20 7b 0a 20 20  oindex1-112 {.  
0710: 64 62 20 73 74 61 74 75 73 20 61 75 74 6f 69 6e  db status autoin
0720: 64 65 78 0a 7d 20 7b 37 7d 0a 64 6f 5f 74 65 73  dex.} {7}.do_tes
0730: 74 20 61 75 74 6f 69 6e 64 65 78 31 2d 31 31 33  t autoindex1-113
0740: 20 7b 0a 20 20 73 65 74 20 3a 3a 6c 6f 67 0a 7d   {.  set ::log.}
0750: 20 7b 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47   {SQLITE_WARNING
0760: 5f 41 55 54 4f 49 4e 44 45 58 20 7b 61 75 74 6f  _AUTOINDEX {auto
0770: 6d 61 74 69 63 20 69 6e 64 65 78 20 6f 6e 20 74  matic index on t
0780: 32 28 63 29 7d 7d 0a 0a 64 62 20 63 6c 6f 73 65  2(c)}}..db close
0790: 0a 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
07a0: 6e 0a 74 65 73 74 5f 73 71 6c 69 74 65 33 5f 6c  n.test_sqlite3_l
07b0: 6f 67 0a 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  og.sqlite3_initi
07c0: 61 6c 69 7a 65 0a 73 71 6c 69 74 65 33 20 64 62  alize.sqlite3 db
07d0: 20 74 65 73 74 2e 64 62 0a 0a 23 20 54 68 65 20   test.db..# The 
07e0: 73 61 6d 65 20 74 65 73 74 20 61 73 20 61 62 6f  same test as abo
07f0: 76 65 2c 20 62 75 74 20 74 68 69 73 20 74 69 6d  ve, but this tim
0800: 65 20 74 68 65 20 54 32 20 71 75 65 72 79 20 69  e the T2 query i
0810: 73 20 61 20 73 75 62 71 75 65 72 79 20 72 61 74  s a subquery rat
0820: 68 65 72 0a 23 20 74 68 61 6e 20 61 20 6a 6f 69  her.# than a joi
0830: 6e 2e 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69  n..do_test autoi
0840: 6e 64 65 78 31 2d 32 30 30 20 7b 0a 20 20 64 62  ndex1-200 {.  db
0850: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
0860: 4d 41 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64  MA automatic_ind
0870: 65 78 3d 4f 46 46 3b 0a 20 20 20 20 53 45 4c 45  ex=OFF;.    SELE
0880: 43 54 20 62 2c 20 28 53 45 4c 45 43 54 20 64 20  CT b, (SELECT d 
0890: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 63 3d  FROM t2 WHERE c=
08a0: 61 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a  a) FROM t1;.  }.
08b0: 7d 20 7b 31 31 20 39 31 31 20 32 32 20 39 32 32  } {11 911 22 922
08c0: 20 33 33 20 39 33 33 20 34 34 20 39 34 34 20 35   33 933 44 944 5
08d0: 35 20 39 35 35 20 36 36 20 39 36 36 20 37 37 20  5 955 66 966 77 
08e0: 39 37 37 20 38 38 20 39 38 38 7d 0a 64 6f 5f 74  977 88 988}.do_t
08f0: 65 73 74 20 61 75 74 6f 69 6e 64 65 78 31 2d 32  est autoindex1-2
0900: 30 31 20 7b 0a 20 20 64 62 20 73 74 61 74 75 73  01 {.  db status
0910: 20 73 74 65 70 0a 7d 20 7b 33 35 7d 0a 64 6f 5f   step.} {35}.do_
0920: 74 65 73 74 20 61 75 74 6f 69 6e 64 65 78 31 2d  test autoindex1-
0930: 32 30 32 20 7b 0a 20 20 64 62 20 73 74 61 74 75  202 {.  db statu
0940: 73 20 61 75 74 6f 69 6e 64 65 78 0a 7d 20 7b 30  s autoindex.} {0
0950: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  }.do_test autoin
0960: 64 65 78 31 2d 32 31 30 20 7b 0a 20 20 64 62 20  dex1-210 {.  db 
0970: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
0980: 41 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65  A automatic_inde
0990: 78 3d 4f 4e 3b 0a 20 20 20 20 41 4e 41 4c 59 5a  x=ON;.    ANALYZ
09a0: 45 3b 0a 20 20 20 20 55 50 44 41 54 45 20 73 71  E;.    UPDATE sq
09b0: 6c 69 74 65 5f 73 74 61 74 31 20 53 45 54 20 73  lite_stat1 SET s
09c0: 74 61 74 3d 27 31 30 30 30 30 27 20 57 48 45 52  tat='10000' WHER
09d0: 45 20 74 62 6c 3d 27 74 31 27 3b 0a 20 20 20 20  E tbl='t1';.    
09e0: 2d 2d 20 54 61 62 6c 65 20 74 32 20 61 63 74 75  -- Table t2 actu
09f0: 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 73 20 38 20  ally contains 8 
0a00: 72 6f 77 73 2e 0a 20 20 20 20 55 50 44 41 54 45  rows..    UPDATE
0a10: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 53 45   sqlite_stat1 SE
0a20: 54 20 73 74 61 74 3d 27 31 36 27 20 57 48 45 52  T stat='16' WHER
0a30: 45 20 74 62 6c 3d 27 74 32 27 3b 0a 20 20 20 20  E tbl='t2';.    
0a40: 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d  ANALYZE sqlite_m
0a50: 61 73 74 65 72 3b 0a 20 20 20 20 53 45 4c 45 43  aster;.    SELEC
0a60: 54 20 62 2c 20 28 53 45 4c 45 43 54 20 64 20 46  T b, (SELECT d F
0a70: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 63 3d 61  ROM t2 WHERE c=a
0a80: 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  ) FROM t1;.  }.}
0a90: 20 7b 31 31 20 39 31 31 20 32 32 20 39 32 32 20   {11 911 22 922 
0aa0: 33 33 20 39 33 33 20 34 34 20 39 34 34 20 35 35  33 933 44 944 55
0ab0: 20 39 35 35 20 36 36 20 39 36 36 20 37 37 20 39   955 66 966 77 9
0ac0: 37 37 20 38 38 20 39 38 38 7d 0a 64 6f 5f 74 65  77 88 988}.do_te
0ad0: 73 74 20 61 75 74 6f 69 6e 64 65 78 31 2d 32 31  st autoindex1-21
0ae0: 31 20 7b 0a 20 20 64 62 20 73 74 61 74 75 73 20  1 {.  db status 
0af0: 73 74 65 70 0a 7d 20 7b 37 7d 0a 64 6f 5f 74 65  step.} {7}.do_te
0b00: 73 74 20 61 75 74 6f 69 6e 64 65 78 31 2d 32 31  st autoindex1-21
0b10: 32 20 7b 0a 20 20 64 62 20 73 74 61 74 75 73 20  2 {.  db status 
0b20: 61 75 74 6f 69 6e 64 65 78 0a 7d 20 7b 37 7d 0a  autoindex.} {7}.
0b30: 0a 0a 23 20 4d 6f 64 69 66 79 20 74 68 65 20 73  ..# Modify the s
0b40: 65 63 6f 6e 64 20 74 61 62 6c 65 20 6f 66 20 74  econd table of t
0b50: 68 65 20 6a 6f 69 6e 20 77 68 69 6c 65 20 74 68  he join while th
0b60: 65 20 6a 6f 69 6e 20 69 73 20 69 6e 20 70 72 6f  e join is in pro
0b70: 67 72 65 73 73 0a 23 0a 64 6f 5f 65 78 65 63 73  gress.#.do_execs
0b80: 71 6c 5f 74 65 73 74 20 61 75 74 6f 69 6e 64 65  ql_test autoinde
0b90: 78 31 2d 32 39 39 20 7b 0a 20 20 55 50 44 41 54  x1-299 {.  UPDAT
0ba0: 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 53  E sqlite_stat1 S
0bb0: 45 54 20 73 74 61 74 3d 27 31 30 30 30 30 27 20  ET stat='10000' 
0bc0: 57 48 45 52 45 20 74 62 6c 3d 27 74 32 27 3b 0a  WHERE tbl='t2';.
0bd0: 20 20 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65    ANALYZE sqlite
0be0: 5f 6d 61 73 74 65 72 3b 0a 20 20 45 58 50 4c 41  _master;.  EXPLA
0bf0: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20  IN QUERY PLAN.  
0c00: 53 45 4c 45 43 54 20 62 2c 20 64 20 46 52 4f 4d  SELECT b, d FROM
0c10: 20 74 31 20 43 52 4f 53 53 20 4a 4f 49 4e 20 74   t1 CROSS JOIN t
0c20: 32 20 4f 4e 20 28 63 3d 61 29 3b 0a 7d 20 7b 2f  2 ON (c=a);.} {/
0c30: 41 55 54 4f 4d 41 54 49 43 20 43 4f 56 45 52 49  AUTOMATIC COVERI
0c40: 4e 47 20 49 4e 44 45 58 2f 7d 0a 64 6f 5f 74 65  NG INDEX/}.do_te
0c50: 73 74 20 61 75 74 6f 69 6e 64 65 78 31 2d 33 30  st autoindex1-30
0c60: 30 20 7b 0a 20 20 73 65 74 20 72 20 7b 7d 0a 20  0 {.  set r {}. 
0c70: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
0c80: 20 62 2c 20 64 20 46 52 4f 4d 20 74 31 20 43 52   b, d FROM t1 CR
0c90: 4f 53 53 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 28  OSS JOIN t2 ON (
0ca0: 63 3d 61 29 7d 20 7b 0a 20 20 20 20 6c 61 70 70  c=a)} {.    lapp
0cb0: 65 6e 64 20 72 20 24 62 20 24 64 0a 20 20 20 20  end r $b $d.    
0cc0: 64 62 20 65 76 61 6c 20 7b 55 50 44 41 54 45 20  db eval {UPDATE 
0cd0: 74 32 20 53 45 54 20 64 3d 64 2b 31 7d 0a 20 20  t2 SET d=d+1}.  
0ce0: 7d 0a 20 20 73 65 74 20 72 0a 7d 20 7b 31 31 20  }.  set r.} {11 
0cf0: 39 31 31 20 32 32 20 39 32 32 20 33 33 20 39 33  911 22 922 33 93
0d00: 33 20 34 34 20 39 34 34 20 35 35 20 39 35 35 20  3 44 944 55 955 
0d10: 36 36 20 39 36 36 20 37 37 20 39 37 37 20 38 38  66 966 77 977 88
0d20: 20 39 38 38 7d 0a 64 6f 5f 74 65 73 74 20 61 75   988}.do_test au
0d30: 74 6f 69 6e 64 65 78 31 2d 33 31 30 20 7b 0a 20  toindex1-310 {. 
0d40: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
0d50: 20 64 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52   d FROM t2 ORDER
0d60: 20 42 59 20 64 7d 0a 7d 20 7b 39 31 39 20 39 33   BY d}.} {919 93
0d70: 30 20 39 34 31 20 39 35 32 20 39 36 33 20 39 37  0 941 952 963 97
0d80: 34 20 39 38 35 20 39 39 36 7d 0a 0a 23 20 54 68  4 985 996}..# Th
0d90: 65 20 6e 65 78 74 20 74 65 73 74 20 64 6f 65 73  e next test does
0da0: 20 61 20 31 30 2d 77 61 79 20 6a 6f 69 6e 20 6f   a 10-way join o
0db0: 6e 20 75 6e 69 6e 64 65 78 65 64 20 74 61 62 6c  n unindexed tabl
0dc0: 65 73 2e 20 20 57 69 74 68 6f 75 74 0a 23 20 61  es.  Without.# a
0dd0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 69 63 65 73  utomatic indices
0de0: 2c 20 74 68 65 20 6a 6f 69 6e 20 77 69 6c 6c 20  , the join will 
0df0: 74 61 6b 65 20 61 20 6c 6f 6e 67 20 74 69 6d 65  take a long time
0e00: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 2e 0a 23 20   to complete..# 
0e10: 57 69 74 68 20 61 75 74 6f 6d 61 74 69 63 20 69  With automatic i
0e20: 6e 64 69 63 65 73 2c 20 69 74 20 73 68 6f 75 6c  ndices, it shoul
0e30: 64 20 6f 6e 6c 79 20 74 61 6b 65 20 61 62 6f 75  d only take abou
0e40: 74 20 61 20 73 65 63 6f 6e 64 2e 0a 23 0a 64 6f  t a second..#.do
0e50: 5f 74 65 73 74 20 61 75 74 6f 69 6e 64 65 78 31  _test autoindex1
0e60: 2d 34 30 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  -400 {.  db eval
0e70: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0e80: 42 4c 45 20 74 34 28 61 2c 20 62 29 3b 0a 20 20  BLE t4(a, b);.  
0e90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
0ea0: 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20   VALUES(1,2);.  
0eb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
0ec0: 20 56 41 4c 55 45 53 28 32 2c 33 29 3b 0a 20 20   VALUES(2,3);.  
0ed0: 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 6e 20 32  }.  for {set n 2
0ee0: 7d 20 7b 24 6e 3c 34 30 39 36 7d 20 7b 73 65 74  } {$n<4096} {set
0ef0: 20 6e 20 5b 65 78 70 72 20 7b 24 6e 2b 24 6e 7d   n [expr {$n+$n}
0f00: 5d 7d 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  ]} {.    db eval
0f10: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34   {INSERT INTO t4
0f20: 20 53 45 4c 45 43 54 20 61 2b 24 6e 2c 20 62 2b   SELECT a+$n, b+
0f30: 24 6e 20 46 52 4f 4d 20 74 34 7d 0a 20 20 7d 0a  $n FROM t4}.  }.
0f40: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
0f50: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0f60: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  FROM t4;.  }.} {
0f70: 34 30 39 36 7d 0a 64 6f 5f 74 65 73 74 20 61 75  4096}.do_test au
0f80: 74 6f 69 6e 64 65 78 31 2d 34 30 31 20 7b 0a 20  toindex1-401 {. 
0f90: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
0fa0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 0a 20  ELECT count(*). 
0fb0: 20 20 20 20 20 46 52 4f 4d 20 74 34 20 41 53 20       FROM t4 AS 
0fc0: 78 31 0a 20 20 20 20 20 20 4a 4f 49 4e 20 74 34  x1.      JOIN t4
0fd0: 20 41 53 20 78 32 20 4f 4e 20 78 32 2e 61 3d 78   AS x2 ON x2.a=x
0fe0: 31 2e 62 0a 20 20 20 20 20 20 4a 4f 49 4e 20 74  1.b.      JOIN t
0ff0: 34 20 41 53 20 78 33 20 4f 4e 20 78 33 2e 61 3d  4 AS x3 ON x3.a=
1000: 78 32 2e 62 0a 20 20 20 20 20 20 4a 4f 49 4e 20  x2.b.      JOIN 
1010: 74 34 20 41 53 20 78 34 20 4f 4e 20 78 34 2e 61  t4 AS x4 ON x4.a
1020: 3d 78 33 2e 62 0a 20 20 20 20 20 20 4a 4f 49 4e  =x3.b.      JOIN
1030: 20 74 34 20 41 53 20 78 35 20 4f 4e 20 78 35 2e   t4 AS x5 ON x5.
1040: 61 3d 78 34 2e 62 0a 20 20 20 20 20 20 4a 4f 49  a=x4.b.      JOI
1050: 4e 20 74 34 20 41 53 20 78 36 20 4f 4e 20 78 36  N t4 AS x6 ON x6
1060: 2e 61 3d 78 35 2e 62 0a 20 20 20 20 20 20 4a 4f  .a=x5.b.      JO
1070: 49 4e 20 74 34 20 41 53 20 78 37 20 4f 4e 20 78  IN t4 AS x7 ON x
1080: 37 2e 61 3d 78 36 2e 62 0a 20 20 20 20 20 20 4a  7.a=x6.b.      J
1090: 4f 49 4e 20 74 34 20 41 53 20 78 38 20 4f 4e 20  OIN t4 AS x8 ON 
10a0: 78 38 2e 61 3d 78 37 2e 62 0a 20 20 20 20 20 20  x8.a=x7.b.      
10b0: 4a 4f 49 4e 20 74 34 20 41 53 20 78 39 20 4f 4e  JOIN t4 AS x9 ON
10c0: 20 78 39 2e 61 3d 78 38 2e 62 0a 20 20 20 20 20   x9.a=x8.b.     
10d0: 20 4a 4f 49 4e 20 74 34 20 41 53 20 78 31 30 20   JOIN t4 AS x10 
10e0: 4f 4e 20 78 31 30 2e 61 3d 78 39 2e 62 3b 0a 20  ON x10.a=x9.b;. 
10f0: 20 7d 0a 7d 20 7b 34 30 38 37 7d 0a 0a 23 20 54   }.} {4087}..# T
1100: 69 63 6b 65 74 20 5b 38 30 31 31 30 38 36 63 38  icket [8011086c8
1110: 35 63 36 63 34 30 34 30 31 34 63 39 34 37 66 63  5c6c404014c947fc
1120: 66 33 65 62 39 66 34 32 62 31 38 34 61 30 64 5d  f3eb9f42b184a0d]
1130: 20 66 72 6f 6d 20 32 30 31 30 2d 30 37 2d 30 38   from 2010-07-08
1140: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 75 74  .# Make sure aut
1150: 6f 6d 61 74 69 63 20 69 6e 64 69 63 65 73 20 61  omatic indices a
1160: 72 65 20 6e 6f 74 20 63 72 65 61 74 65 64 20 66  re not created f
1170: 6f 72 20 74 68 65 20 52 48 53 20 6f 66 20 61 6e  or the RHS of an
1180: 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 0a 23   IN expression.#
1190: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 61 20 63   that is not a c
11a0: 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
11b0: 72 79 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ry..#.do_execsql
11c0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 64 65 78 31  _test autoindex1
11d0: 2d 35 30 30 20 7b 0a 20 20 43 52 45 41 54 45 20  -500 {.  CREATE 
11e0: 54 41 42 4c 45 20 74 35 30 31 28 61 20 49 4e 54  TABLE t501(a INT
11f0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1200: 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , b);.  CREATE T
1210: 41 42 4c 45 20 74 35 30 32 28 78 20 49 4e 54 45  ABLE t502(x INTE
1220: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
1230: 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   y);.  INSERT IN
1240: 54 4f 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28  TO sqlite_stat1(
1250: 74 62 6c 2c 69 64 78 2c 73 74 61 74 29 20 56 41  tbl,idx,stat) VA
1260: 4c 55 45 53 28 27 74 35 30 31 27 2c 6e 75 6c 6c  LUES('t501',null
1270: 2c 27 31 30 30 30 30 30 30 27 29 3b 0a 20 20 49  ,'1000000');.  I
1280: 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74  NSERT INTO sqlit
1290: 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64 78 2c  e_stat1(tbl,idx,
12a0: 73 74 61 74 29 20 56 41 4c 55 45 53 28 27 74 35  stat) VALUES('t5
12b0: 30 32 27 2c 6e 75 6c 6c 2c 27 31 30 30 30 27 29  02',null,'1000')
12c0: 3b 0a 20 20 41 4e 41 4c 59 5a 45 20 73 71 6c 69  ;.  ANALYZE sqli
12d0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 45 58 50  te_master;.  EXP
12e0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a  LAIN QUERY PLAN.
12f0: 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20    SELECT b FROM 
1300: 74 35 30 31 0a 20 20 20 57 48 45 52 45 20 74 35  t501.   WHERE t5
1310: 30 31 2e 61 20 49 4e 20 28 53 45 4c 45 43 54 20  01.a IN (SELECT 
1320: 78 20 46 52 4f 4d 20 74 35 30 32 20 57 48 45 52  x FROM t502 WHER
1330: 45 20 79 3d 3f 29 3b 0a 7d 20 7b 0a 20 20 30 20  E y=?);.} {.  0 
1340: 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c  0 0 {SEARCH TABL
1350: 45 20 74 35 30 31 20 55 53 49 4e 47 20 49 4e 54  E t501 USING INT
1360: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1370: 20 28 72 6f 77 69 64 3d 3f 29 7d 20 0a 20 20 30   (rowid=?)} .  0
1380: 20 30 20 30 20 7b 45 58 45 43 55 54 45 20 4c 49   0 0 {EXECUTE LI
1390: 53 54 20 53 55 42 51 55 45 52 59 20 31 7d 20 0a  ST SUBQUERY 1} .
13a0: 20 20 31 20 30 20 30 20 7b 53 43 41 4e 20 54 41    1 0 0 {SCAN TA
13b0: 42 4c 45 20 74 35 30 32 7d 0a 7d 0a 64 6f 5f 65  BLE t502}.}.do_e
13c0: 78 65 63 73 71 6c 5f 74 65 73 74 20 61 75 74 6f  xecsql_test auto
13d0: 69 6e 64 65 78 31 2d 35 30 31 20 7b 0a 20 20 45  index1-501 {.  E
13e0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
13f0: 4e 0a 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f  N.  SELECT b FRO
1400: 4d 20 74 35 30 31 0a 20 20 20 57 48 45 52 45 20  M t501.   WHERE 
1410: 74 35 30 31 2e 61 20 49 4e 20 28 53 45 4c 45 43  t501.a IN (SELEC
1420: 54 20 78 20 46 52 4f 4d 20 74 35 30 32 20 57 48  T x FROM t502 WH
1430: 45 52 45 20 79 3d 74 35 30 31 2e 62 29 3b 0a 7d  ERE y=t501.b);.}
1440: 20 7b 0a 20 20 30 20 30 20 30 20 7b 53 43 41 4e   {.  0 0 0 {SCAN
1450: 20 54 41 42 4c 45 20 74 35 30 31 7d 20 0a 20 20   TABLE t501} .  
1460: 30 20 30 20 30 20 7b 45 58 45 43 55 54 45 20 43  0 0 0 {EXECUTE C
1470: 4f 52 52 45 4c 41 54 45 44 20 4c 49 53 54 20 53  ORRELATED LIST S
1480: 55 42 51 55 45 52 59 20 31 7d 20 0a 20 20 31 20  UBQUERY 1} .  1 
1490: 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c  0 0 {SEARCH TABL
14a0: 45 20 74 35 30 32 20 55 53 49 4e 47 20 41 55 54  E t502 USING AUT
14b0: 4f 4d 41 54 49 43 20 43 4f 56 45 52 49 4e 47 20  OMATIC COVERING 
14c0: 49 4e 44 45 58 20 28 79 3d 3f 29 7d 0a 7d 0a 64  INDEX (y=?)}.}.d
14d0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 61  o_execsql_test a
14e0: 75 74 6f 69 6e 64 65 78 31 2d 35 30 32 20 7b 0a  utoindex1-502 {.
14f0: 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20    EXPLAIN QUERY 
1500: 50 4c 41 4e 0a 20 20 53 45 4c 45 43 54 20 62 20  PLAN.  SELECT b 
1510: 46 52 4f 4d 20 74 35 30 31 0a 20 20 20 57 48 45  FROM t501.   WHE
1520: 52 45 20 74 35 30 31 2e 61 3d 31 32 33 0a 20 20  RE t501.a=123.  
1530: 20 20 20 41 4e 44 20 74 35 30 31 2e 61 20 49 4e     AND t501.a IN
1540: 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   (SELECT x FROM 
1550: 74 35 30 32 20 57 48 45 52 45 20 79 3d 74 35 30  t502 WHERE y=t50
1560: 31 2e 62 29 3b 0a 7d 20 7b 0a 20 20 30 20 30 20  1.b);.} {.  0 0 
1570: 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20  0 {SEARCH TABLE 
1580: 74 35 30 31 20 55 53 49 4e 47 20 49 4e 54 45 47  t501 USING INTEG
1590: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 28  ER PRIMARY KEY (
15a0: 72 6f 77 69 64 3d 3f 29 7d 20 0a 20 20 30 20 30  rowid=?)} .  0 0
15b0: 20 30 20 7b 45 58 45 43 55 54 45 20 43 4f 52 52   0 {EXECUTE CORR
15c0: 45 4c 41 54 45 44 20 4c 49 53 54 20 53 55 42 51  ELATED LIST SUBQ
15d0: 55 45 52 59 20 31 7d 20 0a 20 20 31 20 30 20 30  UERY 1} .  1 0 0
15e0: 20 7b 53 43 41 4e 20 54 41 42 4c 45 20 74 35 30   {SCAN TABLE t50
15f0: 32 7d 0a 7d 0a 0a 0a 23 20 54 68 65 20 66 6f 6c  2}.}...# The fol
1600: 6c 6f 77 69 6e 67 20 63 6f 64 65 20 63 68 65 63  lowing code chec
1610: 6b 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65  ks a performance
1620: 20 72 65 67 72 65 73 73 69 6f 6e 20 72 65 70 6f   regression repo
1630: 72 74 65 64 20 6f 6e 20 74 68 65 0a 23 20 6d 61  rted on the.# ma
1640: 69 6c 69 6e 67 20 6c 69 73 74 20 6f 6e 20 32 30  iling list on 20
1650: 31 30 2d 31 30 2d 31 39 2e 20 20 54 68 65 20 70  10-10-19.  The p
1660: 72 6f 62 6c 65 6d 20 69 73 20 74 68 61 74 20 74  roblem is that t
1670: 68 65 20 6e 52 6f 77 45 73 74 20 66 69 65 6c 64  he nRowEst field
1680: 0a 23 20 6f 66 20 65 70 68 65 72 6d 65 72 61 6c  .# of ephermeral
1690: 20 74 61 62 6c 65 73 20 77 61 73 20 6e 6f 74 20   tables was not 
16a0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
16b0: 64 20 63 6f 72 72 65 63 74 6c 79 20 61 6e 64 20  d correctly and 
16c0: 73 6f 20 6e 6f 0a 23 20 61 75 74 6f 6d 61 74 69  so no.# automati
16d0: 63 20 69 6e 64 65 78 20 77 61 73 20 62 65 69 6e  c index was bein
16e0: 67 20 63 72 65 61 74 65 64 20 66 6f 72 20 74 68  g created for th
16f0: 65 20 65 6d 70 68 65 6d 65 72 61 6c 20 74 61 62  e emphemeral tab
1700: 6c 65 20 77 68 65 6e 20 69 74 20 77 61 73 0a 23  le when it was.#
1710: 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
1720: 20 61 20 6a 6f 69 6e 2e 0a 23 0a 64 6f 5f 65 78   a join..#.do_ex
1730: 65 63 73 71 6c 5f 74 65 73 74 20 61 75 74 6f 69  ecsql_test autoi
1740: 6e 64 65 78 31 2d 36 30 30 20 7b 0a 20 20 43 52  ndex1-600 {.  CR
1750: 45 41 54 45 20 54 41 42 4c 45 20 66 6c 6f 63 6b  EATE TABLE flock
1760: 5f 6f 77 6e 65 72 28 0a 20 20 20 20 6f 77 6e 65  _owner(.    owne
1770: 72 5f 72 65 63 5f 69 64 20 49 4e 54 45 47 45 52  r_rec_id INTEGER
1780: 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6c 6f 63   CONSTRAINT floc
1790: 6b 5f 6f 77 6e 65 72 5f 6b 65 79 20 50 52 49 4d  k_owner_key PRIM
17a0: 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 66 6c 6f  ARY KEY,.    flo
17b0: 63 6b 5f 6e 6f 20 56 41 52 43 48 41 52 28 36 29  ck_no VARCHAR(6)
17c0: 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45   NOT NULL REFERE
17d0: 4e 43 45 53 20 66 6c 6f 63 6b 20 28 66 6c 6f 63  NCES flock (floc
17e0: 6b 5f 6e 6f 29 2c 0a 20 20 20 20 6f 77 6e 65 72  k_no),.    owner
17f0: 5f 70 65 72 73 6f 6e 5f 69 64 20 49 4e 54 45 47  _person_id INTEG
1800: 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45  ER NOT NULL REFE
1810: 52 45 4e 43 45 53 20 70 65 72 73 6f 6e 20 28 70  RENCES person (p
1820: 65 72 73 6f 6e 5f 69 64 29 2c 0a 20 20 20 20 6f  erson_id),.    o
1830: 77 6e 65 72 5f 63 68 61 6e 67 65 5f 64 61 74 65  wner_change_date
1840: 20 54 45 58 54 2c 20 6c 61 73 74 5f 63 68 61 6e   TEXT, last_chan
1850: 67 65 64 20 54 45 58 54 20 4e 4f 54 20 4e 55 4c  ged TEXT NOT NUL
1860: 4c 2c 0a 20 20 20 20 43 4f 4e 53 54 52 41 49 4e  L,.    CONSTRAIN
1870: 54 20 66 6f 5f 6f 77 6e 65 72 5f 64 61 74 65 20  T fo_owner_date 
1880: 55 4e 49 51 55 45 20 28 66 6c 6f 63 6b 5f 6e 6f  UNIQUE (flock_no
1890: 2c 20 6f 77 6e 65 72 5f 63 68 61 6e 67 65 5f 64  , owner_change_d
18a0: 61 74 65 29 0a 20 20 29 3b 0a 20 20 43 52 45 41  ate).  );.  CREA
18b0: 54 45 20 54 41 42 4c 45 20 73 68 65 65 70 20 28  TE TABLE sheep (
18c0: 0a 20 20 20 20 53 68 65 65 70 5f 4e 6f 20 63 68  .    Sheep_No ch
18d0: 61 72 28 37 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a  ar(7) NOT NULL,.
18e0: 20 20 20 20 44 61 74 65 5f 6f 66 5f 42 69 72 74      Date_of_Birt
18f0: 68 20 63 68 61 72 28 38 29 2c 0a 20 20 20 20 53  h char(8),.    S
1900: 6f 72 74 5f 44 6f 42 20 74 65 78 74 2c 0a 20 20  ort_DoB text,.  
1910: 20 20 46 6c 6f 63 6b 5f 42 6f 6f 6b 5f 56 6f 6c    Flock_Book_Vol
1920: 20 63 68 61 72 28 32 29 2c 0a 20 20 20 20 42 72   char(2),.    Br
1930: 65 65 64 65 72 5f 4e 6f 20 63 68 61 72 28 36 29  eeder_No char(6)
1940: 2c 0a 20 20 20 20 42 72 65 65 64 65 72 5f 50 65  ,.    Breeder_Pe
1950: 72 73 6f 6e 20 69 6e 74 65 67 65 72 2c 0a 20 20  rson integer,.  
1960: 20 20 4f 72 69 67 69 6e 61 74 69 6e 67 5f 46 6c    Originating_Fl
1970: 6f 63 6b 20 63 68 61 72 28 36 29 2c 0a 20 20 20  ock char(6),.   
1980: 20 52 65 67 69 73 74 65 72 69 6e 67 5f 46 6c 6f   Registering_Flo
1990: 63 6b 20 63 68 61 72 28 36 29 2c 0a 20 20 20 20  ck char(6),.    
19a0: 54 61 67 5f 50 72 65 66 69 78 20 63 68 61 72 28  Tag_Prefix char(
19b0: 39 29 2c 0a 20 20 20 20 54 61 67 5f 4e 6f 20 63  9),.    Tag_No c
19c0: 68 61 72 28 31 35 29 2c 0a 20 20 20 20 53 6f 72  har(15),.    Sor
19d0: 74 5f 54 61 67 5f 4e 6f 20 69 6e 74 65 67 65 72  t_Tag_No integer
19e0: 2c 0a 20 20 20 20 42 72 65 65 64 65 72 73 5f 54  ,.    Breeders_T
19f0: 65 6d 70 5f 54 61 67 20 63 68 61 72 28 31 35 29  emp_Tag char(15)
1a00: 2c 0a 20 20 20 20 53 65 78 20 63 68 61 72 28 31  ,.    Sex char(1
1a10: 29 2c 0a 20 20 20 20 53 68 65 65 70 5f 4e 61 6d  ),.    Sheep_Nam
1a20: 65 20 63 68 61 72 28 33 32 29 2c 0a 20 20 20 20  e char(32),.    
1a30: 53 69 72 65 5f 4e 6f 20 63 68 61 72 28 37 29 2c  Sire_No char(7),
1a40: 0a 20 20 20 20 44 61 6d 5f 4e 6f 20 63 68 61 72  .    Dam_No char
1a50: 28 37 29 2c 0a 20 20 20 20 52 65 67 69 73 74 65  (7),.    Registe
1a60: 72 5f 43 6f 64 65 20 63 68 61 72 28 31 29 2c 0a  r_Code char(1),.
1a70: 20 20 20 20 43 6f 6c 6f 75 72 20 63 68 61 72 28      Colour char(
1a80: 34 38 29 2c 0a 20 20 20 20 43 6f 6c 6f 75 72 5f  48),.    Colour_
1a90: 43 6f 64 65 20 63 68 61 72 28 32 29 2c 0a 20 20  Code char(2),.  
1aa0: 20 20 50 61 74 74 65 72 6e 5f 43 6f 64 65 20 63    Pattern_Code c
1ab0: 68 61 72 28 38 29 2c 0a 20 20 20 20 48 6f 72 6e  har(8),.    Horn
1ac0: 73 20 63 68 61 72 28 31 29 2c 0a 20 20 20 20 4c  s char(1),.    L
1ad0: 69 74 74 65 72 5f 53 69 7a 65 20 63 68 61 72 28  itter_Size char(
1ae0: 31 29 2c 0a 20 20 20 20 43 6f 65 66 66 5f 6f 66  1),.    Coeff_of
1af0: 5f 49 6e 62 72 65 65 64 69 6e 67 20 72 65 61 6c  _Inbreeding real
1b00: 2c 0a 20 20 20 20 44 61 74 65 5f 6f 66 5f 52 65  ,.    Date_of_Re
1b10: 67 69 73 74 72 61 74 69 6f 6e 20 74 65 78 74 2c  gistration text,
1b20: 0a 20 20 20 20 44 61 74 65 5f 4c 61 73 74 5f 43  .    Date_Last_C
1b30: 68 61 6e 67 65 64 20 74 65 78 74 2c 0a 20 20 20  hanged text,.   
1b40: 20 55 4e 49 51 55 45 28 53 68 65 65 70 5f 4e 6f   UNIQUE(Sheep_No
1b50: 29 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  ));.  CREATE IND
1b60: 45 58 20 66 6f 5f 66 6c 6f 63 6b 5f 6e 6f 5f 69  EX fo_flock_no_i
1b70: 6e 64 65 78 20 20 0a 20 20 20 20 20 20 20 20 20  ndex  .         
1b80: 20 20 20 20 20 4f 4e 20 66 6c 6f 63 6b 5f 6f 77       ON flock_ow
1b90: 6e 65 72 20 28 66 6c 6f 63 6b 5f 6e 6f 29 3b 0a  ner (flock_no);.
1ba0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 66    CREATE INDEX f
1bb0: 6f 5f 6f 77 6e 65 72 5f 63 68 61 6e 67 65 5f 64  o_owner_change_d
1bc0: 61 74 65 5f 69 6e 64 65 78 20 20 0a 20 20 20 20  ate_index  .    
1bd0: 20 20 20 20 20 20 20 20 20 20 4f 4e 20 66 6c 6f            ON flo
1be0: 63 6b 5f 6f 77 6e 65 72 20 28 6f 77 6e 65 72 5f  ck_owner (owner_
1bf0: 63 68 61 6e 67 65 5f 64 61 74 65 29 3b 0a 20 20  change_date);.  
1c00: 43 52 45 41 54 45 20 49 4e 44 45 58 20 66 6f 5f  CREATE INDEX fo_
1c10: 6f 77 6e 65 72 5f 70 65 72 73 6f 6e 5f 69 64 5f  owner_person_id_
1c20: 69 6e 64 65 78 20 20 0a 20 20 20 20 20 20 20 20  index  .        
1c30: 20 20 20 20 20 20 4f 4e 20 66 6c 6f 63 6b 5f 6f        ON flock_o
1c40: 77 6e 65 72 20 28 6f 77 6e 65 72 5f 70 65 72 73  wner (owner_pers
1c50: 6f 6e 5f 69 64 29 3b 0a 20 20 43 52 45 41 54 45  on_id);.  CREATE
1c60: 20 49 4e 44 45 58 20 73 68 65 65 70 5f 6f 72 67   INDEX sheep_org
1c70: 5f 66 6c 6f 63 6b 5f 69 6e 64 65 78 20 20 0a 20  _flock_index  . 
1c80: 20 20 20 20 20 20 20 20 20 20 4f 4e 20 73 68 65            ON she
1c90: 65 70 20 28 6f 72 69 67 69 6e 61 74 69 6e 67 5f  ep (originating_
1ca0: 66 6c 6f 63 6b 29 3b 0a 20 20 43 52 45 41 54 45  flock);.  CREATE
1cb0: 20 49 4e 44 45 58 20 73 68 65 65 70 5f 72 65 67   INDEX sheep_reg
1cc0: 5f 66 6c 6f 63 6b 5f 69 6e 64 65 78 20 20 0a 20  _flock_index  . 
1cd0: 20 20 20 20 20 20 20 20 20 20 4f 4e 20 73 68 65            ON she
1ce0: 65 70 20 28 72 65 67 69 73 74 65 72 69 6e 67 5f  ep (registering_
1cf0: 66 6c 6f 63 6b 29 3b 0a 20 20 45 58 50 4c 41 49  flock);.  EXPLAI
1d00: 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a 20 20 53  N QUERY PLAN.  S
1d10: 45 4c 45 43 54 20 78 2e 73 68 65 65 70 5f 6e 6f  ELECT x.sheep_no
1d20: 2c 20 78 2e 72 65 67 69 73 74 65 72 69 6e 67 5f  , x.registering_
1d30: 66 6c 6f 63 6b 2c 20 78 2e 64 61 74 65 5f 6f 66  flock, x.date_of
1d40: 5f 72 65 67 69 73 74 72 61 74 69 6f 6e 0a 20 20  _registration.  
1d50: 20 46 52 4f 4d 20 73 68 65 65 70 20 78 20 4c 45   FROM sheep x LE
1d60: 46 54 20 4a 4f 49 4e 0a 20 20 20 20 20 20 20 28  FT JOIN.       (
1d70: 53 45 4c 45 43 54 20 73 2e 73 68 65 65 70 5f 6e  SELECT s.sheep_n
1d80: 6f 2c 20 70 72 65 76 2e 66 6c 6f 63 6b 5f 6e 6f  o, prev.flock_no
1d90: 2c 20 70 72 65 76 2e 6f 77 6e 65 72 5f 70 65 72  , prev.owner_per
1da0: 73 6f 6e 5f 69 64 2c 0a 20 20 20 20 20 20 20 73  son_id,.       s
1db0: 2e 64 61 74 65 5f 6f 66 5f 72 65 67 69 73 74 72  .date_of_registr
1dc0: 61 74 69 6f 6e 2c 20 70 72 65 76 2e 6f 77 6e 65  ation, prev.owne
1dd0: 72 5f 63 68 61 6e 67 65 5f 64 61 74 65 0a 20 20  r_change_date.  
1de0: 20 20 20 20 20 46 52 4f 4d 20 73 68 65 65 70 20       FROM sheep 
1df0: 73 20 4a 4f 49 4e 20 66 6c 6f 63 6b 5f 6f 77 6e  s JOIN flock_own
1e00: 65 72 20 70 72 65 76 20 4f 4e 20 73 2e 72 65 67  er prev ON s.reg
1e10: 69 73 74 65 72 69 6e 67 5f 66 6c 6f 63 6b 20 3d  istering_flock =
1e20: 0a 20 20 20 70 72 65 76 2e 66 6c 6f 63 6b 5f 6e  .   prev.flock_n
1e30: 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 28 70 72  o.       AND (pr
1e40: 65 76 2e 6f 77 6e 65 72 5f 63 68 61 6e 67 65 5f  ev.owner_change_
1e50: 64 61 74 65 20 3c 3d 20 73 2e 64 61 74 65 5f 6f  date <= s.date_o
1e60: 66 5f 72 65 67 69 73 74 72 61 74 69 6f 6e 20 7c  f_registration |
1e70: 7c 20 27 20 30 30 3a 30 30 3a 30 30 27 29 0a 20  | ' 00:00:00'). 
1e80: 20 20 20 20 20 20 57 48 45 52 45 20 4e 4f 54 20        WHERE NOT 
1e90: 45 58 49 53 54 53 0a 20 20 20 20 20 20 20 20 20  EXISTS.         
1ea0: 20 20 28 53 45 4c 45 43 54 20 27 78 27 20 46 52    (SELECT 'x' FR
1eb0: 4f 4d 20 66 6c 6f 63 6b 5f 6f 77 6e 65 72 20 6c  OM flock_owner l
1ec0: 61 74 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ater.           
1ed0: 57 48 45 52 45 20 70 72 65 76 2e 66 6c 6f 63 6b  WHERE prev.flock
1ee0: 5f 6e 6f 20 3d 20 6c 61 74 65 72 2e 66 6c 6f 63  _no = later.floc
1ef0: 6b 5f 6e 6f 0a 20 20 20 20 20 20 20 20 20 20 20  k_no.           
1f00: 41 4e 44 20 6c 61 74 65 72 2e 6f 77 6e 65 72 5f  AND later.owner_
1f10: 63 68 61 6e 67 65 5f 64 61 74 65 20 3e 20 70 72  change_date > pr
1f20: 65 76 2e 6f 77 6e 65 72 5f 63 68 61 6e 67 65 5f  ev.owner_change_
1f30: 64 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20  date.           
1f40: 41 4e 44 20 6c 61 74 65 72 2e 6f 77 6e 65 72 5f  AND later.owner_
1f50: 63 68 61 6e 67 65 5f 64 61 74 65 20 3c 3d 20 73  change_date <= s
1f60: 2e 64 61 74 65 5f 6f 66 5f 72 65 67 69 73 74 72  .date_of_registr
1f70: 61 74 69 6f 6e 7c 7c 27 20 30 30 3a 30 30 3a 30  ation||' 00:00:0
1f80: 30 27 29 0a 20 20 20 20 20 20 20 29 20 79 20 4f  0').       ) y O
1f90: 4e 20 78 2e 73 68 65 65 70 5f 6e 6f 20 3d 20 79  N x.sheep_no = y
1fa0: 2e 73 68 65 65 70 5f 6e 6f 0a 20 20 20 57 48 45  .sheep_no.   WHE
1fb0: 52 45 20 79 2e 73 68 65 65 70 5f 6e 6f 20 49 53  RE y.sheep_no IS
1fc0: 20 4e 55 4c 4c 0a 20 20 20 4f 52 44 45 52 20 42   NULL.   ORDER B
1fd0: 59 20 78 2e 72 65 67 69 73 74 65 72 69 6e 67 5f  Y x.registering_
1fe0: 66 6c 6f 63 6b 3b 0a 7d 20 7b 0a 20 20 31 20 30  flock;.} {.  1 0
1ff0: 20 30 20 7b 53 43 41 4e 20 54 41 42 4c 45 20 73   0 {SCAN TABLE s
2000: 68 65 65 70 20 41 53 20 73 7d 20 0a 20 20 31 20  heep AS s} .  1 
2010: 31 20 31 20 7b 53 45 41 52 43 48 20 54 41 42 4c  1 1 {SEARCH TABL
2020: 45 20 66 6c 6f 63 6b 5f 6f 77 6e 65 72 20 41 53  E flock_owner AS
2030: 20 70 72 65 76 20 55 53 49 4e 47 20 49 4e 44 45   prev USING INDE
2040: 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  X sqlite_autoind
2050: 65 78 5f 66 6c 6f 63 6b 5f 6f 77 6e 65 72 5f 31  ex_flock_owner_1
2060: 20 28 66 6c 6f 63 6b 5f 6e 6f 3d 3f 20 41 4e 44   (flock_no=? AND
2070: 20 6f 77 6e 65 72 5f 63 68 61 6e 67 65 5f 64 61   owner_change_da
2080: 74 65 3c 3f 29 7d 20 0a 20 20 31 20 30 20 30 20  te<?)} .  1 0 0 
2090: 7b 45 58 45 43 55 54 45 20 43 4f 52 52 45 4c 41  {EXECUTE CORRELA
20a0: 54 45 44 20 53 43 41 4c 41 52 20 53 55 42 51 55  TED SCALAR SUBQU
20b0: 45 52 59 20 32 7d 20 0a 20 20 32 20 30 20 30 20  ERY 2} .  2 0 0 
20c0: 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 66 6c  {SEARCH TABLE fl
20d0: 6f 63 6b 5f 6f 77 6e 65 72 20 41 53 20 6c 61 74  ock_owner AS lat
20e0: 65 72 20 55 53 49 4e 47 20 43 4f 56 45 52 49 4e  er USING COVERIN
20f0: 47 20 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61  G INDEX sqlite_a
2100: 75 74 6f 69 6e 64 65 78 5f 66 6c 6f 63 6b 5f 6f  utoindex_flock_o
2110: 77 6e 65 72 5f 31 20 28 66 6c 6f 63 6b 5f 6e 6f  wner_1 (flock_no
2120: 3d 3f 20 41 4e 44 20 6f 77 6e 65 72 5f 63 68 61  =? AND owner_cha
2130: 6e 67 65 5f 64 61 74 65 3e 3f 20 41 4e 44 20 6f  nge_date>? AND o
2140: 77 6e 65 72 5f 63 68 61 6e 67 65 5f 64 61 74 65  wner_change_date
2150: 3c 3f 29 7d 20 0a 20 20 30 20 30 20 30 20 7b 53  <?)} .  0 0 0 {S
2160: 43 41 4e 20 54 41 42 4c 45 20 73 68 65 65 70 20  CAN TABLE sheep 
2170: 41 53 20 78 20 55 53 49 4e 47 20 49 4e 44 45 58  AS x USING INDEX
2180: 20 73 68 65 65 70 5f 72 65 67 5f 66 6c 6f 63 6b   sheep_reg_flock
2190: 5f 69 6e 64 65 78 7d 20 0a 20 20 30 20 31 20 31  _index} .  0 1 1
21a0: 20 7b 53 45 41 52 43 48 20 53 55 42 51 55 45 52   {SEARCH SUBQUER
21b0: 59 20 31 20 41 53 20 79 20 55 53 49 4e 47 20 41  Y 1 AS y USING A
21c0: 55 54 4f 4d 41 54 49 43 20 43 4f 56 45 52 49 4e  UTOMATIC COVERIN
21d0: 47 20 49 4e 44 45 58 20 28 73 68 65 65 70 5f 6e  G INDEX (sheep_n
21e0: 6f 3d 3f 29 7d 0a 7d 0a 0a 0a 64 6f 5f 65 78 65  o=?)}.}...do_exe
21f0: 63 73 71 6c 5f 74 65 73 74 20 61 75 74 6f 69 6e  csql_test autoin
2200: 64 65 78 31 2d 37 30 30 20 7b 0a 20 20 43 52 45  dex1-700 {.  CRE
2210: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20  ATE TABLE t5(a, 
2220: 62 2c 20 63 29 3b 0a 20 20 45 58 50 4c 41 49 4e  b, c);.  EXPLAIN
2230: 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45   QUERY PLAN SELE
2240: 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45  CT a FROM t5 WHE
2250: 52 45 20 62 3d 31 30 20 4f 52 44 45 52 20 42 59  RE b=10 ORDER BY
2260: 20 63 3b 0a 7d 20 7b 0a 20 20 30 20 30 20 30 20   c;.} {.  0 0 0 
2270: 7b 53 43 41 4e 20 54 41 42 4c 45 20 74 35 7d 20  {SCAN TABLE t5} 
2280: 0a 20 20 30 20 30 20 30 20 7b 55 53 45 20 54 45  .  0 0 0 {USE TE
2290: 4d 50 20 42 2d 54 52 45 45 20 46 4f 52 20 4f 52  MP B-TREE FOR OR
22a0: 44 45 52 20 42 59 7d 0a 7d 0a 0a 23 20 54 68 65  DER BY}.}..# The
22b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 65 63 6b   following check
22c0: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
22d0: 69 73 73 75 65 20 72 65 70 6f 72 74 65 64 20 6f  issue reported o
22e0: 6e 20 74 68 65 20 73 71 6c 69 74 65 2d 64 65 76  n the sqlite-dev
22f0: 0a 23 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20  .# mailing list 
2300: 6f 6e 20 32 30 31 33 2d 30 31 2d 31 30 0a 23 0a  on 2013-01-10.#.
2310: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2320: 61 75 74 6f 69 6e 64 65 78 31 2d 38 30 30 20 7b  autoindex1-800 {
2330: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
2340: 61 63 63 6f 75 6e 74 73 28 0a 20 20 20 20 5f 69  accounts(.    _i
2350: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
2360: 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d  Y KEY AUTOINCREM
2370: 45 4e 54 2c 0a 20 20 20 20 61 63 63 6f 75 6e 74  ENT,.    account
2380: 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 20 20  _name TEXT,.    
2390: 61 63 63 6f 75 6e 74 5f 74 79 70 65 20 54 45 58  account_type TEX
23a0: 54 2c 0a 20 20 20 20 64 61 74 61 5f 73 65 74 20  T,.    data_set 
23b0: 54 45 58 54 0a 20 20 29 3b 0a 20 20 43 52 45 41  TEXT.  );.  CREA
23c0: 54 45 20 54 41 42 4c 45 20 64 61 74 61 28 0a 20  TE TABLE data(. 
23d0: 20 20 20 5f 69 64 20 49 4e 54 45 47 45 52 20 50     _id INTEGER P
23e0: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
23f0: 4e 43 52 45 4d 45 4e 54 2c 0a 20 20 20 20 70 61  NCREMENT,.    pa
2400: 63 6b 61 67 65 5f 69 64 20 49 4e 54 45 47 45 52  ckage_id INTEGER
2410: 20 52 45 46 45 52 45 4e 43 45 53 20 70 61 63 6b   REFERENCES pack
2420: 61 67 65 28 5f 69 64 29 2c 0a 20 20 20 20 6d 69  age(_id),.    mi
2430: 6d 65 74 79 70 65 5f 69 64 20 49 4e 54 45 47 45  metype_id INTEGE
2440: 52 20 52 45 46 45 52 45 4e 43 45 53 20 6d 69 6d  R REFERENCES mim
2450: 65 74 79 70 65 28 5f 69 64 29 20 4e 4f 54 20 4e  etype(_id) NOT N
2460: 55 4c 4c 2c 0a 20 20 20 20 72 61 77 5f 63 6f 6e  ULL,.    raw_con
2470: 74 61 63 74 5f 69 64 20 49 4e 54 45 47 45 52 20  tact_id INTEGER 
2480: 52 45 46 45 52 45 4e 43 45 53 20 72 61 77 5f 63  REFERENCES raw_c
2490: 6f 6e 74 61 63 74 73 28 5f 69 64 29 20 4e 4f 54  ontacts(_id) NOT
24a0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 69 73 5f 72 65   NULL,.    is_re
24b0: 61 64 5f 6f 6e 6c 79 20 49 4e 54 45 47 45 52 20  ad_only INTEGER 
24c0: 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54  NOT NULL DEFAULT
24d0: 20 30 2c 0a 20 20 20 20 69 73 5f 70 72 69 6d 61   0,.    is_prima
24e0: 72 79 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e  ry INTEGER NOT N
24f0: 55 4c 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20  ULL DEFAULT 0,. 
2500: 20 20 20 69 73 5f 73 75 70 65 72 5f 70 72 69 6d     is_super_prim
2510: 61 72 79 20 49 4e 54 45 47 45 52 20 4e 4f 54 20  ary INTEGER NOT 
2520: 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a  NULL DEFAULT 0,.
2530: 20 20 20 20 64 61 74 61 5f 76 65 72 73 69 6f 6e      data_version
2540: 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
2550: 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20  L DEFAULT 0,.   
2560: 20 64 61 74 61 31 20 54 45 58 54 2c 0a 20 20 20   data1 TEXT,.   
2570: 20 64 61 74 61 32 20 54 45 58 54 2c 0a 20 20 20   data2 TEXT,.   
2580: 20 64 61 74 61 33 20 54 45 58 54 2c 0a 20 20 20   data3 TEXT,.   
2590: 20 64 61 74 61 34 20 54 45 58 54 2c 0a 20 20 20   data4 TEXT,.   
25a0: 20 64 61 74 61 35 20 54 45 58 54 2c 0a 20 20 20   data5 TEXT,.   
25b0: 20 64 61 74 61 36 20 54 45 58 54 2c 0a 20 20 20   data6 TEXT,.   
25c0: 20 64 61 74 61 37 20 54 45 58 54 2c 0a 20 20 20   data7 TEXT,.   
25d0: 20 64 61 74 61 38 20 54 45 58 54 2c 0a 20 20 20   data8 TEXT,.   
25e0: 20 64 61 74 61 39 20 54 45 58 54 2c 0a 20 20 20   data9 TEXT,.   
25f0: 20 64 61 74 61 31 30 20 54 45 58 54 2c 0a 20 20   data10 TEXT,.  
2600: 20 20 64 61 74 61 31 31 20 54 45 58 54 2c 0a 20    data11 TEXT,. 
2610: 20 20 20 64 61 74 61 31 32 20 54 45 58 54 2c 0a     data12 TEXT,.
2620: 20 20 20 20 64 61 74 61 31 33 20 54 45 58 54 2c      data13 TEXT,
2630: 0a 20 20 20 20 64 61 74 61 31 34 20 54 45 58 54  .    data14 TEXT
2640: 2c 0a 20 20 20 20 64 61 74 61 31 35 20 54 45 58  ,.    data15 TEX
2650: 54 2c 0a 20 20 20 20 64 61 74 61 5f 73 79 6e 63  T,.    data_sync
2660: 31 20 54 45 58 54 2c 0a 20 20 20 20 64 61 74 61  1 TEXT,.    data
2670: 5f 73 79 6e 63 32 20 54 45 58 54 2c 0a 20 20 20  _sync2 TEXT,.   
2680: 20 64 61 74 61 5f 73 79 6e 63 33 20 54 45 58 54   data_sync3 TEXT
2690: 2c 0a 20 20 20 20 64 61 74 61 5f 73 79 6e 63 34  ,.    data_sync4
26a0: 20 54 45 58 54 20 0a 20 20 29 3b 0a 20 20 43 52   TEXT .  );.  CR
26b0: 45 41 54 45 20 54 41 42 4c 45 20 6d 69 6d 65 74  EATE TABLE mimet
26c0: 79 70 65 73 28 0a 20 20 20 20 5f 69 64 20 49 4e  ypes(.    _id IN
26d0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
26e0: 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c  Y AUTOINCREMENT,
26f0: 0a 20 20 20 20 6d 69 6d 65 74 79 70 65 20 54 45  .    mimetype TE
2700: 58 54 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 29 3b  XT NOT NULL.  );
2710: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
2720: 72 61 77 5f 63 6f 6e 74 61 63 74 73 28 0a 20 20  raw_contacts(.  
2730: 20 20 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52    _id INTEGER PR
2740: 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e  IMARY KEY AUTOIN
2750: 43 52 45 4d 45 4e 54 2c 0a 20 20 20 20 61 63 63  CREMENT,.    acc
2760: 6f 75 6e 74 5f 69 64 20 49 4e 54 45 47 45 52 20  ount_id INTEGER 
2770: 52 45 46 45 52 45 4e 43 45 53 20 61 63 63 6f 75  REFERENCES accou
2780: 6e 74 73 28 5f 69 64 29 2c 0a 20 20 20 20 73 6f  nts(_id),.    so
2790: 75 72 63 65 69 64 20 54 45 58 54 2c 0a 20 20 20  urceid TEXT,.   
27a0: 20 72 61 77 5f 63 6f 6e 74 61 63 74 5f 69 73 5f   raw_contact_is_
27b0: 72 65 61 64 5f 6f 6e 6c 79 20 49 4e 54 45 47 45  read_only INTEGE
27c0: 52 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55  R NOT NULL DEFAU
27d0: 4c 54 20 30 2c 0a 20 20 20 20 76 65 72 73 69 6f  LT 0,.    versio
27e0: 6e 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  n INTEGER NOT NU
27f0: 4c 4c 20 44 45 46 41 55 4c 54 20 31 2c 0a 20 20  LL DEFAULT 1,.  
2800: 20 20 64 69 72 74 79 20 49 4e 54 45 47 45 52 20    dirty INTEGER 
2810: 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54  NOT NULL DEFAULT
2820: 20 30 2c 0a 20 20 20 20 64 65 6c 65 74 65 64 20   0,.    deleted 
2830: 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
2840: 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20   DEFAULT 0,.    
2850: 63 6f 6e 74 61 63 74 5f 69 64 20 49 4e 54 45 47  contact_id INTEG
2860: 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 63 6f  ER REFERENCES co
2870: 6e 74 61 63 74 73 28 5f 69 64 29 2c 0a 20 20 20  ntacts(_id),.   
2880: 20 61 67 67 72 65 67 61 74 69 6f 6e 5f 6d 6f 64   aggregation_mod
2890: 65 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  e INTEGER NOT NU
28a0: 4c 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20  LL DEFAULT 0,.  
28b0: 20 20 61 67 67 72 65 67 61 74 69 6f 6e 5f 6e 65    aggregation_ne
28c0: 65 64 65 64 20 49 4e 54 45 47 45 52 20 4e 4f 54  eded INTEGER NOT
28d0: 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 31 2c   NULL DEFAULT 1,
28e0: 0a 20 20 20 20 63 75 73 74 6f 6d 5f 72 69 6e 67  .    custom_ring
28f0: 74 6f 6e 65 20 54 45 58 54 2c 0a 20 20 20 20 73  tone TEXT,.    s
2900: 65 6e 64 5f 74 6f 5f 76 6f 69 63 65 6d 61 69 6c  end_to_voicemail
2910: 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
2920: 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20  L DEFAULT 0,.   
2930: 20 74 69 6d 65 73 5f 63 6f 6e 74 61 63 74 65 64   times_contacted
2940: 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
2950: 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20  L DEFAULT 0,.   
2960: 20 6c 61 73 74 5f 74 69 6d 65 5f 63 6f 6e 74 61   last_time_conta
2970: 63 74 65 64 20 49 4e 54 45 47 45 52 2c 0a 20 20  cted INTEGER,.  
2980: 20 20 73 74 61 72 72 65 64 20 49 4e 54 45 47 45    starred INTEGE
2990: 52 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55  R NOT NULL DEFAU
29a0: 4c 54 20 30 2c 0a 20 20 20 20 64 69 73 70 6c 61  LT 0,.    displa
29b0: 79 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 20  y_name TEXT,.   
29c0: 20 64 69 73 70 6c 61 79 5f 6e 61 6d 65 5f 61 6c   display_name_al
29d0: 74 20 54 45 58 54 2c 0a 20 20 20 20 64 69 73 70  t TEXT,.    disp
29e0: 6c 61 79 5f 6e 61 6d 65 5f 73 6f 75 72 63 65 20  lay_name_source 
29f0: 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
2a00: 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20   DEFAULT 0,.    
2a10: 70 68 6f 6e 65 74 69 63 5f 6e 61 6d 65 20 54 45  phonetic_name TE
2a20: 58 54 2c 0a 20 20 20 20 70 68 6f 6e 65 74 69 63  XT,.    phonetic
2a30: 5f 6e 61 6d 65 5f 73 74 79 6c 65 20 54 45 58 54  _name_style TEXT
2a40: 2c 0a 20 20 20 20 73 6f 72 74 5f 6b 65 79 20 54  ,.    sort_key T
2a50: 45 58 54 2c 0a 20 20 20 20 73 6f 72 74 5f 6b 65  EXT,.    sort_ke
2a60: 79 5f 61 6c 74 20 54 45 58 54 2c 0a 20 20 20 20  y_alt TEXT,.    
2a70: 6e 61 6d 65 5f 76 65 72 69 66 69 65 64 20 49 4e  name_verified IN
2a80: 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 44  TEGER NOT NULL D
2a90: 45 46 41 55 4c 54 20 30 2c 0a 20 20 20 20 73 79  EFAULT 0,.    sy
2aa0: 6e 63 31 20 54 45 58 54 2c 0a 20 20 20 20 73 79  nc1 TEXT,.    sy
2ab0: 6e 63 32 20 54 45 58 54 2c 0a 20 20 20 20 73 79  nc2 TEXT,.    sy
2ac0: 6e 63 33 20 54 45 58 54 2c 0a 20 20 20 20 73 79  nc3 TEXT,.    sy
2ad0: 6e 63 34 20 54 45 58 54 2c 0a 20 20 20 20 73 79  nc4 TEXT,.    sy
2ae0: 6e 63 5f 75 69 64 20 54 45 58 54 2c 0a 20 20 20  nc_uid TEXT,.   
2af0: 20 73 79 6e 63 5f 76 65 72 73 69 6f 6e 20 49 4e   sync_version IN
2b00: 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 44  TEGER NOT NULL D
2b10: 45 46 41 55 4c 54 20 31 2c 0a 20 20 20 20 68 61  EFAULT 1,.    ha
2b20: 73 5f 63 61 6c 65 6e 64 61 72 5f 65 76 65 6e 74  s_calendar_event
2b30: 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
2b40: 4c 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20  L DEFAULT 0,.   
2b50: 20 6d 6f 64 69 66 69 65 64 5f 74 69 6d 65 20 49   modified_time I
2b60: 4e 54 45 47 45 52 2c 0a 20 20 20 20 69 73 5f 72  NTEGER,.    is_r
2b70: 65 73 74 72 69 63 74 65 64 20 49 4e 54 45 47 45  estricted INTEGE
2b80: 52 20 44 45 46 41 55 4c 54 20 30 2c 0a 20 20 20  R DEFAULT 0,.   
2b90: 20 79 70 5f 73 6f 75 72 63 65 20 54 45 58 54 2c   yp_source TEXT,
2ba0: 0a 20 20 20 20 6d 65 74 68 6f 64 5f 73 65 6c 65  .    method_sele
2bb0: 63 74 65 64 20 49 4e 54 45 47 45 52 20 44 45 46  cted INTEGER DEF
2bc0: 41 55 4c 54 20 30 2c 0a 20 20 20 20 63 75 73 74  AULT 0,.    cust
2bd0: 6f 6d 5f 76 69 62 72 61 74 69 6f 6e 5f 74 79 70  om_vibration_typ
2be0: 65 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c  e INTEGER DEFAUL
2bf0: 54 20 30 2c 0a 20 20 20 20 63 75 73 74 6f 6d 5f  T 0,.    custom_
2c00: 72 69 6e 67 74 6f 6e 65 5f 70 61 74 68 20 54 45  ringtone_path TE
2c10: 58 54 2c 0a 20 20 20 20 6d 65 73 73 61 67 65 5f  XT,.    message_
2c20: 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 54 45 58  notification TEX
2c30: 54 2c 0a 20 20 20 20 6d 65 73 73 61 67 65 5f 6e  T,.    message_n
2c40: 6f 74 69 66 69 63 61 74 69 6f 6e 5f 70 61 74 68  otification_path
2c50: 20 54 45 58 54 0a 20 20 29 3b 0a 20 20 43 52 45   TEXT.  );.  CRE
2c60: 41 54 45 20 49 4e 44 45 58 20 64 61 74 61 5f 6d  ATE INDEX data_m
2c70: 69 6d 65 74 79 70 65 5f 64 61 74 61 31 5f 69 6e  imetype_data1_in
2c80: 64 65 78 20 4f 4e 20 64 61 74 61 20 28 6d 69 6d  dex ON data (mim
2c90: 65 74 79 70 65 5f 69 64 2c 64 61 74 61 31 29 3b  etype_id,data1);
2ca0: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
2cb0: 64 61 74 61 5f 72 61 77 5f 63 6f 6e 74 61 63 74  data_raw_contact
2cc0: 5f 69 64 20 4f 4e 20 64 61 74 61 20 28 72 61 77  _id ON data (raw
2cd0: 5f 63 6f 6e 74 61 63 74 5f 69 64 29 3b 0a 20 20  _contact_id);.  
2ce0: 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e  CREATE UNIQUE IN
2cf0: 44 45 58 20 6d 69 6d 65 5f 74 79 70 65 20 4f 4e  DEX mime_type ON
2d00: 20 6d 69 6d 65 74 79 70 65 73 20 28 6d 69 6d 65   mimetypes (mime
2d10: 74 79 70 65 29 3b 0a 20 20 43 52 45 41 54 45 20  type);.  CREATE 
2d20: 49 4e 44 45 58 20 72 61 77 5f 63 6f 6e 74 61 63  INDEX raw_contac
2d30: 74 5f 73 6f 72 74 5f 6b 65 79 31 5f 69 6e 64 65  t_sort_key1_inde
2d40: 78 20 4f 4e 20 72 61 77 5f 63 6f 6e 74 61 63 74  x ON raw_contact
2d50: 73 20 28 73 6f 72 74 5f 6b 65 79 29 3b 0a 20 20  s (sort_key);.  
2d60: 43 52 45 41 54 45 20 49 4e 44 45 58 20 72 61 77  CREATE INDEX raw
2d70: 5f 63 6f 6e 74 61 63 74 5f 73 6f 72 74 5f 6b 65  _contact_sort_ke
2d80: 79 32 5f 69 6e 64 65 78 20 4f 4e 20 72 61 77 5f  y2_index ON raw_
2d90: 63 6f 6e 74 61 63 74 73 20 28 73 6f 72 74 5f 6b  contacts (sort_k
2da0: 65 79 5f 61 6c 74 29 3b 0a 20 20 43 52 45 41 54  ey_alt);.  CREAT
2db0: 45 20 49 4e 44 45 58 20 72 61 77 5f 63 6f 6e 74  E INDEX raw_cont
2dc0: 61 63 74 73 5f 63 6f 6e 74 61 63 74 5f 69 64 5f  acts_contact_id_
2dd0: 69 6e 64 65 78 20 4f 4e 20 72 61 77 5f 63 6f 6e  index ON raw_con
2de0: 74 61 63 74 73 20 28 63 6f 6e 74 61 63 74 5f 69  tacts (contact_i
2df0: 64 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  d);.  CREATE IND
2e00: 45 58 20 72 61 77 5f 63 6f 6e 74 61 63 74 73 5f  EX raw_contacts_
2e10: 73 6f 75 72 63 65 5f 69 64 5f 61 63 63 6f 75 6e  source_id_accoun
2e20: 74 5f 69 64 5f 69 6e 64 65 78 0a 20 20 20 20 20  t_id_index.     
2e30: 20 4f 4e 20 72 61 77 5f 63 6f 6e 74 61 63 74 73   ON raw_contacts
2e40: 20 28 73 6f 75 72 63 65 69 64 2c 20 61 63 63 6f   (sourceid, acco
2e50: 75 6e 74 5f 69 64 29 3b 0a 20 20 41 4e 41 4c 59  unt_id);.  ANALY
2e60: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
2e70: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2e80: 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 20 20 20  sqlite_stat1.   
2e90: 20 20 56 41 4c 55 45 53 28 27 72 61 77 5f 63 6f    VALUES('raw_co
2ea0: 6e 74 61 63 74 73 27 2c 27 72 61 77 5f 63 6f 6e  ntacts','raw_con
2eb0: 74 61 63 74 5f 73 6f 72 74 5f 6b 65 79 32 5f 69  tact_sort_key2_i
2ec0: 6e 64 65 78 27 2c 27 31 36 30 30 20 34 27 29 3b  ndex','1600 4');
2ed0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73  .  INSERT INTO s
2ee0: 71 6c 69 74 65 5f 73 74 61 74 31 0a 20 20 20 20  qlite_stat1.    
2ef0: 20 56 41 4c 55 45 53 28 27 72 61 77 5f 63 6f 6e   VALUES('raw_con
2f00: 74 61 63 74 73 27 2c 27 72 61 77 5f 63 6f 6e 74  tacts','raw_cont
2f10: 61 63 74 5f 73 6f 72 74 5f 6b 65 79 31 5f 69 6e  act_sort_key1_in
2f20: 64 65 78 27 2c 27 31 36 30 30 20 34 27 29 3b 0a  dex','1600 4');.
2f30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71    INSERT INTO sq
2f40: 6c 69 74 65 5f 73 74 61 74 31 0a 20 20 20 20 20  lite_stat1.     
2f50: 56 41 4c 55 45 53 28 27 72 61 77 5f 63 6f 6e 74  VALUES('raw_cont
2f60: 61 63 74 73 27 2c 27 72 61 77 5f 63 6f 6e 74 61  acts','raw_conta
2f70: 63 74 73 5f 73 6f 75 72 63 65 5f 69 64 5f 61 63  cts_source_id_ac
2f80: 63 6f 75 6e 74 5f 69 64 5f 69 6e 64 65 78 27 2c  count_id_index',
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 27 31 36  .            '16
2fa0: 30 30 20 31 36 30 30 20 31 36 30 30 27 29 3b 0a  00 1600 1600');.
2fb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71    INSERT INTO sq
2fc0: 6c 69 74 65 5f 73 74 61 74 31 0a 20 20 20 20 20  lite_stat1.     
2fd0: 56 41 4c 55 45 53 28 27 72 61 77 5f 63 6f 6e 74  VALUES('raw_cont
2fe0: 61 63 74 73 27 2c 27 72 61 77 5f 63 6f 6e 74 61  acts','raw_conta
2ff0: 63 74 73 5f 63 6f 6e 74 61 63 74 5f 69 64 5f 69  cts_contact_id_i
3000: 6e 64 65 78 27 2c 27 31 36 30 30 20 31 27 29 3b  ndex','1600 1');
3010: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73  .  INSERT INTO s
3020: 71 6c 69 74 65 5f 73 74 61 74 31 20 56 41 4c 55  qlite_stat1 VALU
3030: 45 53 28 27 6d 69 6d 65 74 79 70 65 73 27 2c 27  ES('mimetypes','
3040: 6d 69 6d 65 5f 74 79 70 65 27 2c 27 31 32 20 31  mime_type','12 1
3050: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
3060: 4f 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 20  O sqlite_stat1. 
3070: 20 20 20 20 56 41 4c 55 45 53 28 27 64 61 74 61      VALUES('data
3080: 27 2c 27 64 61 74 61 5f 6d 69 6d 65 74 79 70 65  ','data_mimetype
3090: 5f 64 61 74 61 31 5f 69 6e 64 65 78 27 2c 27 39  _data1_index','9
30a0: 38 31 39 20 32 34 35 35 20 33 27 29 3b 0a 20 20  819 2455 3');.  
30b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69  INSERT INTO sqli
30c0: 74 65 5f 73 74 61 74 31 20 56 41 4c 55 45 53 28  te_stat1 VALUES(
30d0: 27 64 61 74 61 27 2c 27 64 61 74 61 5f 72 61 77  'data','data_raw
30e0: 5f 63 6f 6e 74 61 63 74 5f 69 64 27 2c 27 39 38  _contact_id','98
30f0: 31 39 20 37 27 29 3b 0a 20 20 49 4e 53 45 52 54  19 7');.  INSERT
3100: 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 73 74 61   INTO sqlite_sta
3110: 74 31 20 56 41 4c 55 45 53 28 27 61 63 63 6f 75  t1 VALUES('accou
3120: 6e 74 73 27 2c 4e 55 4c 4c 2c 27 31 27 29 3b 0a  nts',NULL,'1');.
3130: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
3140: 45 58 49 53 54 53 20 73 71 6c 69 74 65 5f 73 74  EXISTS sqlite_st
3150: 61 74 33 3b 0a 20 20 41 4e 41 4c 59 5a 45 20 73  at3;.  ANALYZE s
3160: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
3170: 0a 20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  .  EXPLAIN QUERY
3180: 20 50 4c 41 4e 0a 20 20 53 45 4c 45 43 54 20 2a   PLAN.  SELECT *
3190: 20 46 52 4f 4d 20 0a 20 20 20 20 20 20 20 20 64   FROM .        d
31a0: 61 74 61 20 4a 4f 49 4e 20 6d 69 6d 65 74 79 70  ata JOIN mimetyp
31b0: 65 73 20 4f 4e 20 28 64 61 74 61 2e 6d 69 6d 65  es ON (data.mime
31c0: 74 79 70 65 5f 69 64 3d 6d 69 6d 65 74 79 70 65  type_id=mimetype
31d0: 73 2e 5f 69 64 29 20 0a 20 20 20 20 20 20 20 20  s._id) .        
31e0: 20 20 20 20 20 4a 4f 49 4e 20 72 61 77 5f 63 6f       JOIN raw_co
31f0: 6e 74 61 63 74 73 20 4f 4e 20 28 64 61 74 61 2e  ntacts ON (data.
3200: 72 61 77 5f 63 6f 6e 74 61 63 74 5f 69 64 3d 72  raw_contact_id=r
3210: 61 77 5f 63 6f 6e 74 61 63 74 73 2e 5f 69 64 29  aw_contacts._id)
3220: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 4a   .             J
3230: 4f 49 4e 20 61 63 63 6f 75 6e 74 73 20 4f 4e 20  OIN accounts ON 
3240: 28 72 61 77 5f 63 6f 6e 74 61 63 74 73 2e 61 63  (raw_contacts.ac
3250: 63 6f 75 6e 74 5f 69 64 3d 61 63 63 6f 75 6e 74  count_id=account
3260: 73 2e 5f 69 64 29 0a 20 20 20 57 48 45 52 45 20  s._id).   WHERE 
3270: 6d 69 6d 65 74 79 70 65 5f 69 64 3d 31 30 20 41  mimetype_id=10 A
3280: 4e 44 20 64 61 74 61 31 34 20 49 53 20 4e 4f 54  ND data14 IS NOT
3290: 20 4e 55 4c 4c 3b 0a 7d 20 7b 2f 53 45 41 52 43   NULL;.} {/SEARC
32a0: 48 20 54 41 42 4c 45 20 64 61 74 61 20 2e 2a 53  H TABLE data .*S
32b0: 45 41 52 43 48 20 54 41 42 4c 45 20 72 61 77 5f  EARCH TABLE raw_
32c0: 63 6f 6e 74 61 63 74 73 2f 7d 0a 64 6f 5f 65 78  contacts/}.do_ex
32d0: 65 63 73 71 6c 5f 74 65 73 74 20 61 75 74 6f 69  ecsql_test autoi
32e0: 6e 64 65 78 31 2d 38 30 31 20 7b 0a 20 20 45 58  ndex1-801 {.  EX
32f0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
3300: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
3310: 20 0a 20 20 20 20 20 20 20 20 64 61 74 61 20 4a   .        data J
3320: 4f 49 4e 20 6d 69 6d 65 74 79 70 65 73 20 4f 4e  OIN mimetypes ON
3330: 20 28 64 61 74 61 2e 6d 69 6d 65 74 79 70 65 5f   (data.mimetype_
3340: 69 64 3d 6d 69 6d 65 74 79 70 65 73 2e 5f 69 64  id=mimetypes._id
3350: 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ) .             
3360: 4a 4f 49 4e 20 72 61 77 5f 63 6f 6e 74 61 63 74  JOIN raw_contact
3370: 73 20 4f 4e 20 28 64 61 74 61 2e 72 61 77 5f 63  s ON (data.raw_c
3380: 6f 6e 74 61 63 74 5f 69 64 3d 72 61 77 5f 63 6f  ontact_id=raw_co
3390: 6e 74 61 63 74 73 2e 5f 69 64 29 20 0a 20 20 20  ntacts._id) .   
33a0: 20 20 20 20 20 20 20 20 20 20 4a 4f 49 4e 20 61            JOIN a
33b0: 63 63 6f 75 6e 74 73 20 4f 4e 20 28 72 61 77 5f  ccounts ON (raw_
33c0: 63 6f 6e 74 61 63 74 73 2e 61 63 63 6f 75 6e 74  contacts.account
33d0: 5f 69 64 3d 61 63 63 6f 75 6e 74 73 2e 5f 69 64  _id=accounts._id
33e0: 29 0a 20 20 20 57 48 45 52 45 20 6d 69 6d 65 74  ).   WHERE mimet
33f0: 79 70 65 73 2e 5f 69 64 3d 31 30 20 41 4e 44 20  ypes._id=10 AND 
3400: 64 61 74 61 31 34 20 49 53 20 4e 4f 54 20 4e 55  data14 IS NOT NU
3410: 4c 4c 3b 0a 7d 20 7b 2f 53 45 41 52 43 48 20 54  LL;.} {/SEARCH T
3420: 41 42 4c 45 20 64 61 74 61 20 2e 2a 53 45 41 52  ABLE data .*SEAR
3430: 43 48 20 54 41 42 4c 45 20 72 61 77 5f 63 6f 6e  CH TABLE raw_con
3440: 74 61 63 74 73 2f 7d 0a 0a 66 69 6e 69 73 68 5f  tacts/}..finish_
3450: 74 65 73 74 0a                                   test.