/ Hex Artifact Content
Login

Artifact bd3625806a5ee6f7bef72d06295bd319f0290af2:


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 33 20 7b 0a 20 20 66 69 6e 69 73  !stat3 {.  finis
0280: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0290: 7d 0a 0a 73 65 74 20 74 65 73 74 70 72 65 66 69  }..set testprefi
02a0: 78 20 61 6e 61 6c 79 7a 65 36 0a 0a 70 72 6f 63  x analyze6..proc
02b0: 20 65 71 70 20 7b 73 71 6c 20 7b 64 62 20 64 62   eqp {sql {db db
02c0: 7d 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c 20 65  }} {.  uplevel e
02d0: 78 65 63 73 71 6c 20 5b 6c 69 73 74 20 22 45 58  xecsql [list "EX
02e0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
02f0: 20 24 73 71 6c 22 5d 20 24 64 62 0a 7d 0a 0a 64   $sql"] $db.}..d
0300: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 36 2d  o_test analyze6-
0310: 31 2e 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  1.0 {.  db eval 
0320: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
0330: 4c 45 20 63 61 74 28 78 20 49 4e 54 29 3b 0a 20  LE cat(x INT);. 
0340: 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45     CREATE UNIQUE
0350: 20 49 4e 44 45 58 20 63 61 74 78 20 4f 4e 20 63   INDEX catx ON c
0360: 61 74 28 78 29 3b 0a 20 20 20 20 2f 2a 20 47 69  at(x);.    /* Gi
0370: 76 65 20 63 61 74 20 31 36 20 75 6e 69 71 75 65  ve cat 16 unique
0380: 20 69 6e 74 65 67 65 72 73 20 2a 2f 0a 20 20 20   integers */.   
0390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 61 74   INSERT INTO cat
03a0: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
03b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 61 74 20  INSERT INTO cat 
03c0: 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 49  VALUES(2);.    I
03d0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 61 74 20 53  NSERT INTO cat S
03e0: 45 4c 45 43 54 20 78 2b 32 20 46 52 4f 4d 20 63  ELECT x+2 FROM c
03f0: 61 74 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  at;.    INSERT I
0400: 4e 54 4f 20 63 61 74 20 53 45 4c 45 43 54 20 78  NTO cat SELECT x
0410: 2b 34 20 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20  +4 FROM cat;.   
0420: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 61 74   INSERT INTO cat
0430: 20 53 45 4c 45 43 54 20 78 2b 38 20 46 52 4f 4d   SELECT x+8 FROM
0440: 20 63 61 74 3b 0a 0a 20 20 20 20 43 52 45 41 54   cat;..    CREAT
0450: 45 20 54 41 42 4c 45 20 65 76 28 79 20 49 4e 54  E TABLE ev(y INT
0460: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
0470: 44 45 58 20 65 76 79 20 4f 4e 20 65 76 28 79 29  DEX evy ON ev(y)
0480: 3b 0a 20 20 20 20 2f 2a 20 65 76 20 77 69 6c 6c  ;.    /* ev will
0490: 20 68 6f 6c 64 20 33 32 20 63 6f 70 69 65 73 20   hold 32 copies 
04a0: 6f 66 20 31 36 20 69 6e 74 65 67 65 72 73 20 66  of 16 integers f
04b0: 6f 75 6e 64 20 69 6e 20 63 61 74 20 2a 2f 0a 20  ound in cat */. 
04c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 65     INSERT INTO e
04d0: 76 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  v SELECT x FROM 
04e0: 63 61 74 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  cat;.    INSERT 
04f0: 49 4e 54 4f 20 65 76 20 53 45 4c 45 43 54 20 78  INTO ev SELECT x
0500: 20 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20 20 49   FROM cat;.    I
0510: 4e 53 45 52 54 20 49 4e 54 4f 20 65 76 20 53 45  NSERT INTO ev SE
0520: 4c 45 43 54 20 79 20 46 52 4f 4d 20 65 76 3b 0a  LECT y FROM ev;.
0530: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0540: 65 76 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d  ev SELECT y FROM
0550: 20 65 76 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   ev;.    INSERT 
0560: 49 4e 54 4f 20 65 76 20 53 45 4c 45 43 54 20 79  INTO ev SELECT y
0570: 20 46 52 4f 4d 20 65 76 3b 0a 20 20 20 20 49 4e   FROM ev;.    IN
0580: 53 45 52 54 20 49 4e 54 4f 20 65 76 20 53 45 4c  SERT INTO ev SEL
0590: 45 43 54 20 79 20 46 52 4f 4d 20 65 76 3b 0a 20  ECT y FROM ev;. 
05a0: 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20     ANALYZE;.    
05b0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
05c0: 46 52 4f 4d 20 63 61 74 3b 0a 20 20 20 20 53 45  FROM cat;.    SE
05d0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
05e0: 4f 4d 20 65 76 3b 0a 20 20 7d 0a 7d 20 7b 31 36  OM ev;.  }.} {16
05f0: 20 35 31 32 7d 0a 0a 23 20 54 68 65 20 6c 6f 77   512}..# The low
0600: 65 73 74 20 63 6f 73 74 20 70 6c 61 6e 20 69 73  est cost plan is
0610: 20 74 6f 20 73 63 61 6e 20 43 41 54 20 61 6e 64   to scan CAT and
0620: 20 66 6f 72 20 65 61 63 68 20 69 6e 74 65 67 65   for each intege
0630: 72 20 74 68 65 72 65 2c 20 64 6f 20 61 20 73 69  r there, do a si
0640: 6e 67 6c 65 0a 23 20 6c 6f 6f 6b 75 70 20 6f 66  ngle.# lookup of
0650: 20 74 68 65 20 66 69 72 73 74 20 63 6f 72 72 65   the first corre
0660: 73 70 6f 6e 64 69 6e 67 20 65 6e 74 72 79 20 69  sponding entry i
0670: 6e 20 45 56 20 74 68 65 6e 20 72 65 61 64 20 6f  n EV then read o
0680: 66 66 20 74 68 65 20 65 71 75 61 6c 20 76 61 6c  ff the equal val
0690: 75 65 73 0a 23 20 69 6e 20 45 56 2e 20 20 28 50  ues.# in EV.  (P
06a0: 72 69 6f 72 20 74 6f 20 74 68 65 20 32 30 31 31  rior to the 2011
06b0: 2d 30 33 2d 30 34 20 65 6e 68 61 6e 63 65 6d 65  -03-04 enhanceme
06c0: 6e 74 20 74 6f 20 77 68 65 72 65 2e 63 2c 20 74  nt to where.c, t
06d0: 68 69 73 20 71 75 65 72 79 20 77 6f 75 6c 64 0a  his query would.
06e0: 23 20 68 61 76 65 20 75 73 65 64 20 45 56 20 66  # have used EV f
06f0: 6f 72 20 74 68 65 20 6f 75 74 65 72 20 6c 6f 6f  or the outer loo
0700: 70 20 69 6e 73 74 65 61 64 20 6f 66 20 43 41 54  p instead of CAT
0710: 20 2d 20 77 68 69 63 68 20 77 61 73 20 61 62 6f   - which was abo
0720: 75 74 20 33 78 20 73 6c 6f 77 65 72 2e 29 0a 23  ut 3x slower.).#
0730: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0740: 36 2d 31 2e 31 20 7b 0a 20 20 65 71 70 20 7b 53  6-1.1 {.  eqp {S
0750: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0760: 52 4f 4d 20 65 76 2c 20 63 61 74 20 57 48 45 52  ROM ev, cat WHER
0770: 45 20 78 3d 79 7d 0a 7d 20 7b 30 20 30 20 31 20  E x=y}.} {0 0 1 
0780: 7b 53 43 41 4e 20 54 41 42 4c 45 20 63 61 74 20  {SCAN TABLE cat 
0790: 28 7e 31 36 20 72 6f 77 73 29 7d 20 30 20 31 20  (~16 rows)} 0 1 
07a0: 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20  0 {SEARCH TABLE 
07b0: 65 76 20 55 53 49 4e 47 20 43 4f 56 45 52 49 4e  ev USING COVERIN
07c0: 47 20 49 4e 44 45 58 20 65 76 79 20 28 79 3d 3f  G INDEX evy (y=?
07d0: 29 20 28 7e 33 32 20 72 6f 77 73 29 7d 7d 0a 0a  ) (~32 rows)}}..
07e0: 23 20 54 68 65 20 73 61 6d 65 20 70 6c 61 6e 20  # The same plan 
07f0: 69 73 20 63 68 6f 73 65 6e 20 72 65 67 61 72 64  is chosen regard
0800: 6c 65 73 73 20 6f 66 20 74 68 65 20 6f 72 64 65  less of the orde
0810: 72 20 6f 66 20 74 68 65 20 74 61 62 6c 65 73 20  r of the tables 
0820: 69 6e 20 74 68 65 0a 23 20 46 52 4f 4d 20 63 6c  in the.# FROM cl
0830: 61 75 73 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ause..#.do_test 
0840: 61 6e 61 6c 79 7a 65 36 2d 31 2e 32 20 7b 0a 20  analyze6-1.2 {. 
0850: 20 65 71 70 20 7b 53 45 4c 45 43 54 20 63 6f 75   eqp {SELECT cou
0860: 6e 74 28 2a 29 20 46 52 4f 4d 20 63 61 74 2c 20  nt(*) FROM cat, 
0870: 65 76 20 57 48 45 52 45 20 78 3d 79 7d 0a 7d 20  ev WHERE x=y}.} 
0880: 7b 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42  {0 0 0 {SCAN TAB
0890: 4c 45 20 63 61 74 20 28 7e 31 36 20 72 6f 77 73  LE cat (~16 rows
08a0: 29 7d 20 30 20 31 20 31 20 7b 53 45 41 52 43 48  )} 0 1 1 {SEARCH
08b0: 20 54 41 42 4c 45 20 65 76 20 55 53 49 4e 47 20   TABLE ev USING 
08c0: 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 20 65  COVERING INDEX e
08d0: 76 79 20 28 79 3d 3f 29 20 28 7e 33 32 20 72 6f  vy (y=?) (~32 ro
08e0: 77 73 29 7d 7d 0a 0a 0a 23 20 54 69 63 6b 65 74  ws)}}...# Ticket
08f0: 20 5b 38 33 65 61 39 37 36 32 30 62 64 33 31 30   [83ea97620bd310
0900: 31 36 34 35 31 33 38 62 37 62 30 65 37 31 63 31  1645138b7b0e71c1
0910: 32 63 35 34 39 38 66 65 33 64 5d 20 32 30 31 31  2c5498fe3d] 2011
0920: 2d 30 33 2d 33 30 0a 23 20 49 66 20 41 4e 41 4c  -03-30.# If ANAL
0930: 59 5a 45 20 69 73 20 72 75 6e 20 6f 6e 20 61 6e  YZE is run on an
0940: 20 65 6d 70 74 79 20 74 61 62 6c 65 2c 20 6d 61   empty table, ma
0950: 6b 65 20 73 75 72 65 20 69 6e 64 69 63 65 73 20  ke sure indices 
0960: 61 72 65 20 75 73 65 64 0a 23 20 6f 6e 20 74 68  are used.# on th
0970: 65 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65  e table..#.do_te
0980: 73 74 20 61 6e 61 6c 79 7a 65 36 2d 32 2e 31 20  st analyze6-2.1 
0990: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
09a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
09b0: 32 30 31 28 78 20 49 4e 54 45 47 45 52 20 50 52  201(x INTEGER PR
09c0: 49 4d 41 52 59 20 4b 45 59 2c 20 79 20 55 4e 49  IMARY KEY, y UNI
09d0: 51 55 45 2c 20 7a 29 3b 0a 20 20 20 20 43 52 45  QUE, z);.    CRE
09e0: 41 54 45 20 49 4e 44 45 58 20 74 32 30 31 7a 20  ATE INDEX t201z 
09f0: 4f 4e 20 74 32 30 31 28 7a 29 3b 0a 20 20 20 20  ON t201(z);.    
0a00: 41 4e 41 4c 59 5a 45 3b 0a 20 20 7d 0a 20 20 65  ANALYZE;.  }.  e
0a10: 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  qp {SELECT * FRO
0a20: 4d 20 74 32 30 31 20 57 48 45 52 45 20 7a 3d 35  M t201 WHERE z=5
0a30: 7d 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52  }.} {0 0 0 {SEAR
0a40: 43 48 20 54 41 42 4c 45 20 74 32 30 31 20 55 53  CH TABLE t201 US
0a50: 49 4e 47 20 49 4e 44 45 58 20 74 32 30 31 7a 20  ING INDEX t201z 
0a60: 28 7a 3d 3f 29 20 28 7e 31 30 20 72 6f 77 73 29  (z=?) (~10 rows)
0a70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  }}.do_test analy
0a80: 7a 65 36 2d 32 2e 32 20 7b 0a 20 20 65 71 70 20  ze6-2.2 {.  eqp 
0a90: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0aa0: 32 30 31 20 57 48 45 52 45 20 79 3d 35 7d 0a 7d  201 WHERE y=5}.}
0ab0: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
0ac0: 54 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47  TABLE t201 USING
0ad0: 20 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75   INDEX sqlite_au
0ae0: 74 6f 69 6e 64 65 78 5f 74 32 30 31 5f 31 20 28  toindex_t201_1 (
0af0: 79 3d 3f 29 20 28 7e 31 20 72 6f 77 73 29 7d 7d  y=?) (~1 rows)}}
0b00: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0b10: 36 2d 32 2e 33 20 7b 0a 20 20 65 71 70 20 7b 53  6-2.3 {.  eqp {S
0b20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 30  ELECT * FROM t20
0b30: 31 20 57 48 45 52 45 20 78 3d 35 7d 0a 7d 20 7b  1 WHERE x=5}.} {
0b40: 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41  0 0 0 {SEARCH TA
0b50: 42 4c 45 20 74 32 30 31 20 55 53 49 4e 47 20 49  BLE t201 USING I
0b60: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0b70: 45 59 20 28 72 6f 77 69 64 3d 3f 29 20 28 7e 31  EY (rowid=?) (~1
0b80: 20 72 6f 77 73 29 7d 7d 0a 64 6f 5f 74 65 73 74   rows)}}.do_test
0b90: 20 61 6e 61 6c 79 7a 65 36 2d 32 2e 34 20 7b 0a   analyze6-2.4 {.
0ba0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0bb0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 30 31  INSERT INTO t201
0bc0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a   VALUES(1,2,3);.
0bd0: 20 20 20 20 41 4e 41 4c 59 5a 45 20 74 32 30 31      ANALYZE t201
0be0: 3b 0a 20 20 7d 0a 20 20 65 71 70 20 7b 53 45 4c  ;.  }.  eqp {SEL
0bf0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 30 31 20  ECT * FROM t201 
0c00: 57 48 45 52 45 20 7a 3d 35 7d 0a 7d 20 7b 30 20  WHERE z=5}.} {0 
0c10: 30 20 30 20 7b 53 45 41 52 43 48 20 54 41 42 4c  0 0 {SEARCH TABL
0c20: 45 20 74 32 30 31 20 55 53 49 4e 47 20 49 4e 44  E t201 USING IND
0c30: 45 58 20 74 32 30 31 7a 20 28 7a 3d 3f 29 20 28  EX t201z (z=?) (
0c40: 7e 31 30 20 72 6f 77 73 29 7d 7d 0a 64 6f 5f 74  ~10 rows)}}.do_t
0c50: 65 73 74 20 61 6e 61 6c 79 7a 65 36 2d 32 2e 35  est analyze6-2.5
0c60: 20 7b 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54   {.  eqp {SELECT
0c70: 20 2a 20 46 52 4f 4d 20 74 32 30 31 20 57 48 45   * FROM t201 WHE
0c80: 52 45 20 79 3d 35 7d 0a 7d 20 7b 30 20 30 20 30  RE y=5}.} {0 0 0
0c90: 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74   {SEARCH TABLE t
0ca0: 32 30 31 20 55 53 49 4e 47 20 49 4e 44 45 58 20  201 USING INDEX 
0cb0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
0cc0: 5f 74 32 30 31 5f 31 20 28 79 3d 3f 29 20 28 7e  _t201_1 (y=?) (~
0cd0: 31 20 72 6f 77 73 29 7d 7d 0a 64 6f 5f 74 65 73  1 rows)}}.do_tes
0ce0: 74 20 61 6e 61 6c 79 7a 65 36 2d 32 2e 36 20 7b  t analyze6-2.6 {
0cf0: 0a 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a  .  eqp {SELECT *
0d00: 20 46 52 4f 4d 20 74 32 30 31 20 57 48 45 52 45   FROM t201 WHERE
0d10: 20 78 3d 35 7d 0a 7d 20 7b 30 20 30 20 30 20 7b   x=5}.} {0 0 0 {
0d20: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 30  SEARCH TABLE t20
0d30: 31 20 55 53 49 4e 47 20 49 4e 54 45 47 45 52 20  1 USING INTEGER 
0d40: 50 52 49 4d 41 52 59 20 4b 45 59 20 28 72 6f 77  PRIMARY KEY (row
0d50: 69 64 3d 3f 29 20 28 7e 31 20 72 6f 77 73 29 7d  id=?) (~1 rows)}
0d60: 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a  }.do_test analyz
0d70: 65 36 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63 73  e6-2.7 {.  execs
0d80: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
0d90: 49 4e 54 4f 20 74 32 30 31 20 56 41 4c 55 45 53  INTO t201 VALUES
0da0: 28 34 2c 35 2c 37 29 3b 0a 20 20 20 20 49 4e 53  (4,5,7);.    INS
0db0: 45 52 54 20 49 4e 54 4f 20 74 32 30 31 20 53 45  ERT INTO t201 SE
0dc0: 4c 45 43 54 20 78 2b 31 30 30 2c 20 79 2b 31 30  LECT x+100, y+10
0dd0: 30 2c 20 7a 2b 31 30 30 20 46 52 4f 4d 20 74 32  0, z+100 FROM t2
0de0: 30 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  01;.    INSERT I
0df0: 4e 54 4f 20 74 32 30 31 20 53 45 4c 45 43 54 20  NTO t201 SELECT 
0e00: 78 2b 32 30 30 2c 20 79 2b 32 30 30 2c 20 7a 2b  x+200, y+200, z+
0e10: 32 30 30 20 46 52 4f 4d 20 74 32 30 31 3b 0a 20  200 FROM t201;. 
0e20: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0e30: 32 30 31 20 53 45 4c 45 43 54 20 78 2b 34 30 30  201 SELECT x+400
0e40: 2c 20 79 2b 34 30 30 2c 20 7a 2b 34 30 30 20 46  , y+400, z+400 F
0e50: 52 4f 4d 20 74 32 30 31 3b 0a 20 20 20 20 41 4e  ROM t201;.    AN
0e60: 41 4c 59 5a 45 20 74 32 30 31 3b 0a 20 20 7d 0a  ALYZE t201;.  }.
0e70: 20 20 65 71 70 20 7b 53 45 4c 45 43 54 20 2a 20    eqp {SELECT * 
0e80: 46 52 4f 4d 20 74 32 30 31 20 57 48 45 52 45 20  FROM t201 WHERE 
0e90: 7a 3d 35 7d 0a 7d 20 7b 30 20 30 20 30 20 7b 53  z=5}.} {0 0 0 {S
0ea0: 45 41 52 43 48 20 54 41 42 4c 45 20 74 32 30 31  EARCH TABLE t201
0eb0: 20 55 53 49 4e 47 20 49 4e 44 45 58 20 74 32 30   USING INDEX t20
0ec0: 31 7a 20 28 7a 3d 3f 29 20 28 7e 31 30 20 72 6f  1z (z=?) (~10 ro
0ed0: 77 73 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e  ws)}}.do_test an
0ee0: 61 6c 79 7a 65 36 2d 32 2e 38 20 7b 0a 20 20 65  alyze6-2.8 {.  e
0ef0: 71 70 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  qp {SELECT * FRO
0f00: 4d 20 74 32 30 31 20 57 48 45 52 45 20 79 3d 35  M t201 WHERE y=5
0f10: 7d 0a 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52  }.} {0 0 0 {SEAR
0f20: 43 48 20 54 41 42 4c 45 20 74 32 30 31 20 55 53  CH TABLE t201 US
0f30: 49 4e 47 20 49 4e 44 45 58 20 73 71 6c 69 74 65  ING INDEX sqlite
0f40: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 32 30 31 5f  _autoindex_t201_
0f50: 31 20 28 79 3d 3f 29 20 28 7e 31 20 72 6f 77 73  1 (y=?) (~1 rows
0f60: 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c  )}}.do_test anal
0f70: 79 7a 65 36 2d 32 2e 39 20 7b 0a 20 20 65 71 70  yze6-2.9 {.  eqp
0f80: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0f90: 74 32 30 31 20 57 48 45 52 45 20 78 3d 35 7d 0a  t201 WHERE x=5}.
0fa0: 7d 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48  } {0 0 0 {SEARCH
0fb0: 20 54 41 42 4c 45 20 74 32 30 31 20 55 53 49 4e   TABLE t201 USIN
0fc0: 47 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  G INTEGER PRIMAR
0fd0: 59 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 20  Y KEY (rowid=?) 
0fe0: 28 7e 31 20 72 6f 77 73 29 7d 7d 0a 0a 66 69 6e  (~1 rows)}}..fin
0ff0: 69 73 68 5f 74 65 73 74 0a                       ish_test.