/ Hex Artifact Content
Login

Artifact 7b2667b879976ac4b90d8df80d5456328684f1f6f6fdef9469d6e53401f2f469:


0000: 23 20 32 30 31 31 20 4d 61 72 63 68 20 33 0a 23  # 2011 March 3.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 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 0a 23 0a 23 20 54 68 69 73 20 66 69  ****.#.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65  le implements te
0180: 73 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c  sts for SQLite l
0190: 69 62 72 61 72 79 2e 20 20 54 68 65 20 66 6f 63  ibrary.  The foc
01a0: 75 73 20 6f 66 20 74 68 65 20 74 65 73 74 73 0a  us of the tests.
01b0: 23 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61  # in this file a
01c0: 20 63 6f 72 6e 65 72 2d 63 61 73 65 20 71 75 65   corner-case que
01d0: 72 79 20 70 6c 61 6e 6e 65 72 20 6f 70 74 69 6d  ry planner optim
01e0: 69 7a 61 74 69 6f 6e 20 69 6e 76 6f 6c 76 69 6e  ization involvin
01f0: 67 20 74 68 65 0a 23 20 6a 6f 69 6e 20 6f 72 64  g the.# join ord
0200: 65 72 20 6f 66 20 74 77 6f 20 74 61 62 6c 65 73  er of two tables
0210: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 73 69   of different si
0220: 7a 65 73 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74  zes..#..set test
0230: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0240: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0250: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0260: 2e 74 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20  .tcl..ifcapable 
0270: 21 73 74 61 74 34 26 26 21 73 74 61 74 33 20 7b  !stat4&&!stat3 {
0280: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0290: 20 72 65 74 75 72 6e 0a 7d 0a 0a 73 65 74 20 74   return.}..set t
02a0: 65 73 74 70 72 65 66 69 78 20 61 6e 61 6c 79 7a  estprefix analyz
02b0: 65 36 0a 0a 70 72 6f 63 20 65 71 70 20 7b 73 71  e6..proc eqp {sq
02c0: 6c 20 7b 64 62 20 64 62 7d 7d 20 7b 0a 20 20 75  l {db db}} {.  u
02d0: 70 6c 65 76 65 6c 20 65 78 65 63 73 71 6c 20 5b  plevel execsql [
02e0: 6c 69 73 74 20 22 45 58 50 4c 41 49 4e 20 51 55  list "EXPLAIN QU
02f0: 45 52 59 20 50 4c 41 4e 20 24 73 71 6c 22 5d 20  ERY PLAN $sql"] 
0300: 24 64 62 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  $db.}..do_test a
0310: 6e 61 6c 79 7a 65 36 2d 31 2e 30 20 7b 0a 20 20  nalyze6-1.0 {.  
0320: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52  db eval {.    CR
0330: 45 41 54 45 20 54 41 42 4c 45 20 63 61 74 28 78  EATE TABLE cat(x
0340: 20 49 4e 54 2c 20 79 7a 20 54 45 58 54 29 3b 0a   INT, yz TEXT);.
0350: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
0360: 45 20 49 4e 44 45 58 20 63 61 74 78 20 4f 4e 20  E INDEX catx ON 
0370: 63 61 74 28 78 29 3b 0a 20 20 20 20 2f 2a 20 47  cat(x);.    /* G
0380: 69 76 65 20 63 61 74 20 31 36 20 75 6e 69 71 75  ive cat 16 uniqu
0390: 65 20 69 6e 74 65 67 65 72 73 20 2a 2f 0a 20 20  e integers */.  
03a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 61    INSERT INTO ca
03b0: 74 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0a  t(x) VALUES(1);.
03c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
03d0: 63 61 74 28 78 29 20 56 41 4c 55 45 53 28 32 29  cat(x) VALUES(2)
03e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
03f0: 4f 20 63 61 74 28 78 29 20 53 45 4c 45 43 54 20  O cat(x) SELECT 
0400: 78 2b 32 20 46 52 4f 4d 20 63 61 74 3b 0a 20 20  x+2 FROM cat;.  
0410: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 61    INSERT INTO ca
0420: 74 28 78 29 20 53 45 4c 45 43 54 20 78 2b 34 20  t(x) SELECT x+4 
0430: 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20 20 49 4e  FROM cat;.    IN
0440: 53 45 52 54 20 49 4e 54 4f 20 63 61 74 28 78 29  SERT INTO cat(x)
0450: 20 53 45 4c 45 43 54 20 78 2b 38 20 46 52 4f 4d   SELECT x+8 FROM
0460: 20 63 61 74 3b 0a 0a 20 20 20 20 43 52 45 41 54   cat;..    CREAT
0470: 45 20 54 41 42 4c 45 20 65 76 28 79 20 49 4e 54  E TABLE ev(y INT
0480: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
0490: 44 45 58 20 65 76 79 20 4f 4e 20 65 76 28 79 29  DEX evy ON ev(y)
04a0: 3b 0a 20 20 20 20 2f 2a 20 65 76 20 77 69 6c 6c  ;.    /* ev will
04b0: 20 68 6f 6c 64 20 33 32 20 63 6f 70 69 65 73 20   hold 32 copies 
04c0: 6f 66 20 31 36 20 69 6e 74 65 67 65 72 73 20 66  of 16 integers f
04d0: 6f 75 6e 64 20 69 6e 20 63 61 74 20 2a 2f 0a 20  ound in cat */. 
04e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 65     INSERT INTO e
04f0: 76 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  v SELECT x FROM 
0500: 63 61 74 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  cat;.    INSERT 
0510: 49 4e 54 4f 20 65 76 20 53 45 4c 45 43 54 20 78  INTO ev SELECT x
0520: 20 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20 20 49   FROM cat;.    I
0530: 4e 53 45 52 54 20 49 4e 54 4f 20 65 76 20 53 45  NSERT INTO ev SE
0540: 4c 45 43 54 20 79 20 46 52 4f 4d 20 65 76 3b 0a  LECT y FROM ev;.
0550: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0560: 65 76 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d  ev SELECT y FROM
0570: 20 65 76 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   ev;.    INSERT 
0580: 49 4e 54 4f 20 65 76 20 53 45 4c 45 43 54 20 79  INTO ev SELECT y
0590: 20 46 52 4f 4d 20 65 76 3b 0a 20 20 20 20 49 4e   FROM ev;.    IN
05a0: 53 45 52 54 20 49 4e 54 4f 20 65 76 20 53 45 4c  SERT INTO ev SEL
05b0: 45 43 54 20 79 20 46 52 4f 4d 20 65 76 3b 0a 20  ECT y FROM ev;. 
05c0: 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20     ANALYZE;.    
05d0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
05e0: 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20 20 53 45  FROM cat;.    SE
05f0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
0600: 4f 4d 20 65 76 3b 0a 20 20 7d 0a 7d 20 7b 31 36  OM ev;.  }.} {16
0610: 20 35 31 32 7d 0a 0a 23 20 54 68 65 20 6c 6f 77   512}..# The low
0620: 65 73 74 20 63 6f 73 74 20 70 6c 61 6e 20 69 73  est cost plan is
0630: 20 74 6f 20 73 63 61 6e 20 43 41 54 20 61 6e 64   to scan CAT and
0640: 20 66 6f 72 20 65 61 63 68 20 69 6e 74 65 67 65   for each intege
0650: 72 20 74 68 65 72 65 2c 20 64 6f 20 61 20 73 69  r there, do a si
0660: 6e 67 6c 65 0a 23 20 6c 6f 6f 6b 75 70 20 6f 66  ngle.# lookup of
0670: 20 74 68 65 20 66 69 72 73 74 20 63 6f 72 72 65   the first corre
0680: 73 70 6f 6e 64 69 6e 67 20 65 6e 74 72 79 20 69  sponding entry i
0690: 6e 20 45 56 20 74 68 65 6e 20 72 65 61 64 20 6f  n EV then read o
06a0: 66 66 20 74 68 65 20 65 71 75 61 6c 20 76 61 6c  ff the equal val
06b0: 75 65 73 0a 23 20 69 6e 20 45 56 2e 20 20 28 50  ues.# in EV.  (P
06c0: 72 69 6f 72 20 74 6f 20 74 68 65 20 32 30 31 31  rior to the 2011
06d0: 2d 30 33 2d 30 34 20 65 6e 68 61 6e 63 65 6d 65  -03-04 enhanceme
06e0: 6e 74 20 74 6f 20 77 68 65 72 65 2e 63 2c 20 74  nt to where.c, t
06f0: 68 69 73 20 71 75 65 72 79 20 77 6f 75 6c 64 0a  his query would.
0700: 23 20 68 61 76 65 20 75 73 65 64 20 45 56 20 66  # have used EV f
0710: 6f 72 20 74 68 65 20 6f 75 74 65 72 20 6c 6f 6f  or the outer loo
0720: 70 20 69 6e 73 74 65 61 64 20 6f 66 20 43 41 54  p instead of CAT
0730: 20 2d 20 77 68 69 63 68 20 77 61 73 20 61 62 6f   - which was abo
0740: 75 74 20 33 78 20 73 6c 6f 77 65 72 2e 29 0a 23  ut 3x slower.).#
0750: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0760: 36 2d 31 2e 31 20 7b 0a 20 20 65 71 70 20 7b 53  6-1.1 {.  eqp {S
0770: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0780: 52 4f 4d 20 65 76 2c 20 63 61 74 20 57 48 45 52  ROM ev, cat WHER
0790: 45 20 78 3d 79 7d 0a 7d 20 7b 2f 2a 53 43 41 4e  E x=y}.} {/*SCAN
07a0: 20 54 41 42 4c 45 20 63 61 74 20 55 53 49 4e 47   TABLE cat USING
07b0: 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 20   COVERING INDEX 
07c0: 63 61 74 78 2a 53 45 41 52 43 48 20 54 41 42 4c  catx*SEARCH TABL
07d0: 45 20 65 76 20 55 53 49 4e 47 20 43 4f 56 45 52  E ev USING COVER
07e0: 49 4e 47 20 49 4e 44 45 58 20 65 76 79 20 28 79  ING INDEX evy (y
07f0: 3d 3f 29 2a 2f 7d 0a 0a 23 20 54 68 65 20 73 61  =?)*/}..# The sa
0800: 6d 65 20 70 6c 61 6e 20 69 73 20 63 68 6f 73 65  me plan is chose
0810: 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  n regardless of 
0820: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  the order of the
0830: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 0a 23   tables in the.#
0840: 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 23 0a   FROM clause..#.
0850: 64 6f 5f 65 71 70 5f 74 65 73 74 20 61 6e 61 6c  do_eqp_test anal
0860: 79 7a 65 36 2d 31 2e 32 20 7b 0a 20 20 53 45 4c  yze6-1.2 {.  SEL
0870: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
0880: 4d 20 63 61 74 2c 20 65 76 20 57 48 45 52 45 20  M cat, ev WHERE 
0890: 78 3d 79 0a 7d 20 7b 0a 20 20 51 55 45 52 59 20  x=y.} {.  QUERY 
08a0: 50 4c 41 4e 0a 20 20 7c 2d 2d 53 43 41 4e 20 54  PLAN.  |--SCAN T
08b0: 41 42 4c 45 20 63 61 74 20 55 53 49 4e 47 20 43  ABLE cat USING C
08c0: 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 20 63 61  OVERING INDEX ca
08d0: 74 78 0a 20 20 60 2d 2d 53 45 41 52 43 48 20 54  tx.  `--SEARCH T
08e0: 41 42 4c 45 20 65 76 20 55 53 49 4e 47 20 43 4f  ABLE ev USING CO
08f0: 56 45 52 49 4e 47 20 49 4e 44 45 58 20 65 76 79  VERING INDEX evy
0900: 20 28 79 3d 3f 29 0a 7d 0a 0a 0a 23 20 54 69 63   (y=?).}...# Tic
0910: 6b 65 74 20 5b 38 33 65 61 39 37 36 32 30 62 64  ket [83ea97620bd
0920: 33 31 30 31 36 34 35 31 33 38 62 37 62 30 65 37  3101645138b7b0e7
0930: 31 63 31 32 63 35 34 39 38 66 65 33 64 5d 20 32  1c12c5498fe3d] 2
0940: 30 31 31 2d 30 33 2d 33 30 0a 23 20 49 66 20 41  011-03-30.# If A
0950: 4e 41 4c 59 5a 45 20 69 73 20 72 75 6e 20 6f 6e  NALYZE is run on
0960: 20 61 6e 20 65 6d 70 74 79 20 74 61 62 6c 65 2c   an empty table,
0970: 20 6d 61 6b 65 20 73 75 72 65 20 69 6e 64 69 63   make sure indic
0980: 65 73 20 61 72 65 20 75 73 65 64 0a 23 20 6f 6e  es are used.# on
0990: 20 74 68 65 20 74 61 62 6c 65 2e 0a 23 0a 64 6f   the table..#.do
09a0: 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 36 2d 32  _test analyze6-2
09b0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
09c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
09d0: 45 20 74 32 30 31 28 78 20 49 4e 54 45 47 45 52  E t201(x INTEGER
09e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 20   PRIMARY KEY, y 
09f0: 55 4e 49 51 55 45 2c 20 7a 29 3b 0a 20 20 20 20  UNIQUE, z);.    
0a00: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 32 30  CREATE INDEX t20
0a10: 31 7a 20 4f 4e 20 74 32 30 31 28 7a 29 3b 0a 20  1z ON t201(z);. 
0a20: 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 7d 0a     ANALYZE;.  }.
0a30: 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20    eqp {SELECT * 
0a40: 46 52 4f 4d 20 74 32 30 31 20 57 48 45 52 45 20  FROM t201 WHERE 
0a50: 7a 3d 35 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48  z=5}.} {/*SEARCH
0a60: 20 54 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e   TABLE t201 USIN
0a70: 47 20 49 4e 44 45 58 20 74 32 30 31 7a 20 28 7a  G INDEX t201z (z
0a80: 3d 3f 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61  =?)*/}.do_test a
0a90: 6e 61 6c 79 7a 65 36 2d 32 2e 32 20 7b 0a 20 20  nalyze6-2.2 {.  
0aa0: 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  eqp {SELECT * FR
0ab0: 4f 4d 20 74 32 30 31 20 57 48 45 52 45 20 79 3d  OM t201 WHERE y=
0ac0: 35 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54  5}.} {/*SEARCH T
0ad0: 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20  ABLE t201 USING 
0ae0: 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74  INDEX sqlite_aut
0af0: 6f 69 6e 64 65 78 5f 74 32 30 31 5f 31 20 28 79  oindex_t201_1 (y
0b00: 3d 3f 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61  =?)*/}.do_test a
0b10: 6e 61 6c 79 7a 65 36 2d 32 2e 33 20 7b 0a 20 20  nalyze6-2.3 {.  
0b20: 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  eqp {SELECT * FR
0b30: 4f 4d 20 74 32 30 31 20 57 48 45 52 45 20 78 3d  OM t201 WHERE x=
0b40: 35 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54  5}.} {/*SEARCH T
0b50: 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20  ABLE t201 USING 
0b60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0b70: 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 2a 2f 7d  KEY (rowid=?)*/}
0b80: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0b90: 36 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  6-2.4 {.  execsq
0ba0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
0bb0: 4e 54 4f 20 74 32 30 31 20 56 41 4c 55 45 53 28  NTO t201 VALUES(
0bc0: 31 2c 32 2c 33 29 2c 28 32 2c 33 2c 34 29 2c 28  1,2,3),(2,3,4),(
0bd0: 33 2c 34 2c 35 29 3b 0a 20 20 20 20 41 4e 41 4c  3,4,5);.    ANAL
0be0: 59 5a 45 20 74 32 30 31 3b 0a 20 20 7d 0a 20 20  YZE t201;.  }.  
0bf0: 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  eqp {SELECT * FR
0c00: 4f 4d 20 74 32 30 31 20 57 48 45 52 45 20 7a 3d  OM t201 WHERE z=
0c10: 35 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54  5}.} {/*SEARCH T
0c20: 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20  ABLE t201 USING 
0c30: 49 4e 44 45 58 20 74 32 30 31 7a 20 28 7a 3d 3f  INDEX t201z (z=?
0c40: 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  )*/}.do_test ana
0c50: 6c 79 7a 65 36 2d 32 2e 35 20 7b 0a 20 20 65 71  lyze6-2.5 {.  eq
0c60: 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  p {SELECT * FROM
0c70: 20 74 32 30 31 20 57 48 45 52 45 20 79 3d 35 7d   t201 WHERE y=5}
0c80: 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42  .} {/*SEARCH TAB
0c90: 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20 49 4e  LE t201 USING IN
0ca0: 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69  DEX sqlite_autoi
0cb0: 6e 64 65 78 5f 74 32 30 31 5f 31 20 28 79 3d 3f  ndex_t201_1 (y=?
0cc0: 29 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  )*/}.do_test ana
0cd0: 6c 79 7a 65 36 2d 32 2e 36 20 7b 0a 20 20 65 71  lyze6-2.6 {.  eq
0ce0: 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  p {SELECT * FROM
0cf0: 20 74 32 30 31 20 57 48 45 52 45 20 78 3d 35 7d   t201 WHERE x=5}
0d00: 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42  .} {/*SEARCH TAB
0d10: 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20 49 4e  LE t201 USING IN
0d20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
0d30: 59 20 28 72 6f 77 69 64 3d 3f 29 2a 2f 7d 0a 64  Y (rowid=?)*/}.d
0d40: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 36 2d  o_test analyze6-
0d50: 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.7 {.  execsql 
0d60: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
0d70: 4f 20 74 32 30 31 20 56 41 4c 55 45 53 28 34 2c  O t201 VALUES(4,
0d80: 35 2c 37 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  5,7);.    INSERT
0d90: 20 49 4e 54 4f 20 74 32 30 31 20 53 45 4c 45 43   INTO t201 SELEC
0da0: 54 20 78 2b 31 30 30 2c 20 79 2b 31 30 30 2c 20  T x+100, y+100, 
0db0: 7a 2b 31 30 30 20 46 52 4f 4d 20 74 32 30 31 3b  z+100 FROM t201;
0dc0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0dd0: 20 74 32 30 31 20 53 45 4c 45 43 54 20 78 2b 32   t201 SELECT x+2
0de0: 30 30 2c 20 79 2b 32 30 30 2c 20 7a 2b 32 30 30  00, y+200, z+200
0df0: 20 46 52 4f 4d 20 74 32 30 31 3b 0a 20 20 20 20   FROM t201;.    
0e00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 30 31  INSERT INTO t201
0e10: 20 53 45 4c 45 43 54 20 78 2b 34 30 30 2c 20 79   SELECT x+400, y
0e20: 2b 34 30 30 2c 20 7a 2b 34 30 30 20 46 52 4f 4d  +400, z+400 FROM
0e30: 20 74 32 30 31 3b 0a 20 20 20 20 41 4e 41 4c 59   t201;.    ANALY
0e40: 5a 45 20 74 32 30 31 3b 0a 20 20 7d 0a 20 20 65  ZE t201;.  }.  e
0e50: 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  qp {SELECT * FRO
0e60: 4d 20 74 32 30 31 20 57 48 45 52 45 20 7a 3d 35  M t201 WHERE z=5
0e70: 7d 0a 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41  }.} {/*SEARCH TA
0e80: 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20 49  BLE t201 USING I
0e90: 4e 44 45 58 20 74 32 30 31 7a 20 28 7a 3d 3f 29  NDEX t201z (z=?)
0ea0: 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c  */}.do_test anal
0eb0: 79 7a 65 36 2d 32 2e 38 20 7b 0a 20 20 65 71 70  yze6-2.8 {.  eqp
0ec0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0ed0: 74 32 30 31 20 57 48 45 52 45 20 79 3d 35 7d 0a  t201 WHERE y=5}.
0ee0: 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c  } {/*SEARCH TABL
0ef0: 45 20 74 32 30 31 20 55 53 49 4e 47 20 49 4e 44  E t201 USING IND
0f00: 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  EX sqlite_autoin
0f10: 64 65 78 5f 74 32 30 31 5f 31 20 28 79 3d 3f 29  dex_t201_1 (y=?)
0f20: 2a 2f 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c  */}.do_test anal
0f30: 79 7a 65 36 2d 32 2e 39 20 7b 0a 20 20 65 71 70  yze6-2.9 {.  eqp
0f40: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0f50: 74 32 30 31 20 57 48 45 52 45 20 78 3d 35 7d 0a  t201 WHERE x=5}.
0f60: 7d 20 7b 2f 2a 53 45 41 52 43 48 20 54 41 42 4c  } {/*SEARCH TABL
0f70: 45 20 74 32 30 31 20 55 53 49 4e 47 20 49 4e 54  E t201 USING INT
0f80: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0f90: 20 28 72 6f 77 69 64 3d 3f 29 2a 2f 7d 0a 0a 66   (rowid=?)*/}..f
0fa0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.