/ Hex Artifact Content
Login

Artifact 297d3d63f2f50976c606227040fe36605745d9dd:


0000: 23 20 32 30 30 39 20 41 75 67 75 73 74 20 30 36  # 2009 August 06
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 0a 23 0a 23 20 54 68 69 73 20  ******.#.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 54 68 69 73 20 66 69 6c 65 20 0a  ary. This file .
01b0: 23 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73  # implements tes
01c0: 74 73 20 66 6f 72 20 74 68 65 20 65 78 74 72 61  ts for the extra
01d0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 70   functionality p
01e0: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 41  rovided by the A
01f0: 4e 41 4c 59 5a 45 20 0a 23 20 63 6f 6d 6d 61 6e  NALYZE .# comman
0200: 64 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61  d when the libra
0210: 72 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  ry is compiled w
0220: 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ith SQLITE_ENABL
0230: 45 5f 53 54 41 54 32 20 64 65 66 69 6e 65 64 2e  E_STAT2 defined.
0240: 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20  .#..set testdir 
0250: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0260: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0270: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0280: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 73 74 61  ..ifcapable !sta
0290: 74 32 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  t2 {.  finish_te
02a0: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23  st.  return.}..#
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 6f 72 67 61  ----.# Test orga
0300: 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 61 6e  nization:.#.# an
0310: 61 6c 79 7a 65 32 2d 31 2e 2a 3a 20 54 65 73 74  alyze2-1.*: Test
0320: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
0330: 20 41 4e 41 4c 59 5a 45 20 63 72 65 61 74 65 73   ANALYZE creates
0340: 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 74   and populates t
0350: 68 65 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  he.#            
0360: 20 20 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20     sqlite_stat2 
0370: 74 61 62 6c 65 20 61 73 20 65 78 70 65 63 74 65  table as expecte
0380: 64 2e 0a 23 0a 23 20 61 6e 61 6c 79 7a 65 32 2d  d..#.# analyze2-
0390: 32 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 77  2.*: Test that w
03a0: 68 65 6e 20 61 20 74 61 62 6c 65 20 68 61 73 20  hen a table has 
03b0: 74 77 6f 20 69 6e 64 65 78 65 73 20 6f 6e 20 69  two indexes on i
03c0: 74 20 61 6e 64 20 65 69 74 68 65 72 0a 23 20 20  t and either.#  
03d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
03e0: 65 78 20 6d 61 79 20 62 65 20 75 73 65 64 20 66  ex may be used f
03f0: 6f 72 20 74 68 65 20 73 63 61 6e 2c 20 74 68 65  or the scan, the
0400: 20 69 6e 64 65 78 20 73 75 67 67 65 73 74 65 64   index suggested
0410: 20 62 79 0a 23 20 20 20 20 20 20 20 20 20 20 20   by.#           
0420: 20 20 20 20 74 68 65 20 63 6f 6e 74 65 6e 74 73      the contents
0430: 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 32   of sqlite_stat2
0440: 20 74 61 62 6c 65 20 69 73 20 70 72 65 66 65 72   table is prefer
0450: 65 64 2e 0a 23 20 0a 23 20 61 6e 61 6c 79 7a 65  ed..# .# analyze
0460: 32 2d 33 2e 2a 3a 20 53 69 6d 69 6c 61 72 20 74  2-3.*: Similar t
0470: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 62  o the previous b
0480: 6c 6f 63 6b 20 6f 66 20 74 65 73 74 73 2c 20 62  lock of tests, b
0490: 75 74 20 75 73 69 6e 67 20 74 61 62 6c 65 73 0a  ut using tables.
04a0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
04b0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 61 20 6d  that contain a m
04c0: 69 78 74 75 72 65 20 6f 66 20 4e 55 4c 4c 2c 20  ixture of NULL, 
04d0: 6e 75 6d 65 72 69 63 2c 20 74 65 78 74 20 61 6e  numeric, text an
04e0: 64 20 62 6c 6f 62 0a 23 20 20 20 20 20 20 20 20  d blob.#        
04f0: 20 20 20 20 20 20 20 76 61 6c 75 65 73 2e 0a 23         values..#
0500: 0a 23 20 61 6e 61 6c 79 7a 65 32 2d 34 2e 2a 3a  .# analyze2-4.*:
0510: 20 43 68 65 63 6b 20 74 68 61 74 20 77 68 65 6e   Check that when
0520: 20 61 6e 20 69 6e 64 65 78 65 64 20 63 6f 6c 75   an indexed colu
0530: 6d 6e 20 75 73 65 73 20 61 20 63 6f 6c 6c 61 74  mn uses a collat
0540: 69 6f 6e 20 6f 74 68 65 72 0a 23 20 20 20 20 20  ion other.#     
0550: 20 20 20 20 20 20 20 20 20 20 74 68 61 6e 20 42            than B
0560: 49 4e 41 52 59 2c 20 74 68 65 20 63 6f 6c 6c 61  INARY, the colla
0570: 74 69 6f 6e 20 69 73 20 74 61 6b 65 6e 20 69 6e  tion is taken in
0580: 74 6f 20 61 63 63 6f 75 6e 74 20 77 68 65 6e 0a  to account when.
0590: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
05a0: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  using the conten
05b0: 74 73 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61  ts of sqlite_sta
05c0: 74 32 20 74 6f 20 65 73 74 69 6d 61 74 65 20 74  t2 to estimate t
05d0: 68 65 20 63 6f 73 74 0a 23 20 20 20 20 20 20 20  he cost.#       
05e0: 20 20 20 20 20 20 20 20 6f 66 20 61 20 72 61 6e          of a ran
05f0: 67 65 20 73 63 61 6e 2e 0a 23 0a 23 20 61 6e 61  ge scan..#.# ana
0600: 6c 79 7a 65 32 2d 35 2e 2a 3a 20 43 68 65 63 6b  lyze2-5.*: Check
0610: 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6f 6e 20   that collation 
0620: 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 75 73  sequences are us
0630: 65 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20  ed as described 
0640: 61 62 6f 76 65 0a 23 20 20 20 20 20 20 20 20 20  above.#         
0650: 20 20 20 20 20 20 65 76 65 6e 20 77 68 65 6e 20        even when 
0660: 74 68 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62  the only availab
0670: 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  le version of th
0680: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 23 20 20  e collation .#  
0690: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e               fun
06a0: 63 74 69 6f 6e 20 72 65 71 75 69 72 65 20 55 54  ction require UT
06b0: 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 61 72 67  F-16 encoded arg
06c0: 75 6d 65 6e 74 73 2e 0a 23 0a 23 20 61 6e 61 6c  uments..#.# anal
06d0: 79 7a 65 32 2d 36 2e 2a 3a 20 43 68 65 63 6b 20  yze2-6.*: Check 
06e0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
06f0: 20 62 65 68 61 76 65 73 20 63 6f 72 72 65 63 74   behaves correct
0700: 6c 79 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  ly when one of t
0710: 68 65 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  he.#            
0720: 20 20 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20     sqlite_stat2 
0730: 6f 72 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  or sqlite_stat1 
0740: 74 61 62 6c 65 73 20 61 72 65 20 6d 69 73 73 69  tables are missi
0750: 6e 67 2e 0a 23 0a 23 20 61 6e 61 6c 79 7a 65 32  ng..#.# analyze2
0760: 2d 37 2e 2a 3a 20 43 68 65 63 6b 20 74 68 61 74  -7.*: Check that
0770: 20 69 6e 20 61 20 73 68 61 72 65 64 2d 73 63 68   in a shared-sch
0780: 65 6d 61 20 73 69 74 75 61 74 69 6f 6e 2c 20 6e  ema situation, n
0790: 6f 74 68 69 6e 67 20 67 6f 65 73 0a 23 20 20 20  othing goes.#   
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 77 72 6f 6e              wron
07b0: 67 20 69 66 20 73 71 6c 69 74 65 5f 73 74 61 74  g if sqlite_stat
07c0: 32 20 64 61 74 61 20 69 73 20 72 65 61 64 20 62  2 data is read b
07d0: 79 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y one connection
07e0: 2c 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.#             
07f0: 20 20 61 6e 64 20 66 72 65 65 64 20 62 79 20 61    and freed by a
0800: 6e 6f 74 68 65 72 2e 0a 23 20 0a 0a 70 72 6f 63  nother..# ..proc
0810: 20 65 71 70 20 7b 73 71 6c 20 7b 64 62 20 64 62   eqp {sql {db db
0820: 7d 7d 20 7b 0a 20 20 75 70 6c 65 76 65 6c 20 65  }} {.  uplevel e
0830: 78 65 63 73 71 6c 20 5b 6c 69 73 74 20 22 45 58  xecsql [list "EX
0840: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
0850: 20 24 73 71 6c 22 5d 20 24 64 62 0a 7d 0a 0a 64   $sql"] $db.}..d
0860: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d  o_test analyze2-
0870: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
0880: 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  { CREATE TABLE t
0890: 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 29  1(x PRIMARY KEY)
08a0: 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20   }.  for {set i 
08b0: 30 7d 20 7b 24 69 20 3c 20 31 30 30 30 7d 20 7b  0} {$i < 1000} {
08c0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
08d0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
08e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 69  NTO t1 VALUES($i
08f0: 29 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  ) }.  }.  execsq
0900: 6c 20 7b 20 0a 20 20 20 20 41 4e 41 4c 59 5a 45  l { .    ANALYZE
0910: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0920: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 32  ROM sqlite_stat2
0930: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 74 31  ;.  }.} [list t1
0940: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
0950: 78 5f 74 31 5f 31 20 30 20 35 30 20 20 5c 0a 20  x_t1_1 0 50  \. 
0960: 20 20 20 20 20 20 20 74 31 20 73 71 6c 69 74 65         t1 sqlite
0970: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f 31 20  _autoindex_t1_1 
0980: 31 20 31 34 39 20 5c 0a 20 20 20 20 20 20 20 20  1 149 \.        
0990: 74 31 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  t1 sqlite_autoin
09a0: 64 65 78 5f 74 31 5f 31 20 32 20 32 34 39 20 5c  dex_t1_1 2 249 \
09b0: 0a 20 20 20 20 20 20 20 20 74 31 20 73 71 6c 69  .        t1 sqli
09c0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f  te_autoindex_t1_
09d0: 31 20 33 20 33 34 39 20 5c 0a 20 20 20 20 20 20  1 3 349 \.      
09e0: 20 20 74 31 20 73 71 6c 69 74 65 5f 61 75 74 6f    t1 sqlite_auto
09f0: 69 6e 64 65 78 5f 74 31 5f 31 20 34 20 34 34 39  index_t1_1 4 449
0a00: 20 5c 0a 20 20 20 20 20 20 20 20 74 31 20 73 71   \.        t1 sq
0a10: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
0a20: 31 5f 31 20 35 20 35 34 39 20 5c 0a 20 20 20 20  1_1 5 549 \.    
0a30: 20 20 20 20 74 31 20 73 71 6c 69 74 65 5f 61 75      t1 sqlite_au
0a40: 74 6f 69 6e 64 65 78 5f 74 31 5f 31 20 36 20 36  toindex_t1_1 6 6
0a50: 34 39 20 5c 0a 20 20 20 20 20 20 20 20 74 31 20  49 \.        t1 
0a60: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
0a70: 5f 74 31 5f 31 20 37 20 37 34 39 20 5c 0a 20 20  _t1_1 7 749 \.  
0a80: 20 20 20 20 20 20 74 31 20 73 71 6c 69 74 65 5f        t1 sqlite_
0a90: 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f 31 20 38  autoindex_t1_1 8
0aa0: 20 38 34 39 20 5c 0a 20 20 20 20 20 20 20 20 74   849 \.        t
0ab0: 31 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  1 sqlite_autoind
0ac0: 65 78 5f 74 31 5f 31 20 39 20 39 34 39 20 5c 0a  ex_t1_1 9 949 \.
0ad0: 5d 0a 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  ]..do_test analy
0ae0: 7a 65 32 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  ze2-1.2 {.  exec
0af0: 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  sql {.    DELETE
0b00: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 65 20 78   FROM t1 WHERe x
0b10: 3e 39 3b 0a 20 20 20 20 41 4e 41 4c 59 5a 45 3b  >9;.    ANALYZE;
0b20: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 62 6c 2c  .    SELECT tbl,
0b30: 20 69 64 78 2c 20 67 72 6f 75 70 5f 63 6f 6e 63   idx, group_conc
0b40: 61 74 28 73 61 6d 70 6c 65 2c 20 27 20 27 29 20  at(sample, ' ') 
0b50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74  FROM sqlite_stat
0b60: 32 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 73 71 6c  2;.  }.} {t1 sql
0b70: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31  ite_autoindex_t1
0b80: 5f 31 20 7b 30 20 31 20 32 20 33 20 34 20 35 20  _1 {0 1 2 3 4 5 
0b90: 36 20 37 20 38 20 39 7d 7d 0a 64 6f 5f 74 65 73  6 7 8 9}}.do_tes
0ba0: 74 20 61 6e 61 6c 79 7a 65 32 2d 31 2e 33 20 7b  t analyze2-1.3 {
0bb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0bc0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
0bd0: 57 48 45 52 45 20 78 3e 38 3b 0a 20 20 20 20 41  WHERE x>8;.    A
0be0: 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 53 45 4c 45  NALYZE;.    SELE
0bf0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
0c00: 5f 73 74 61 74 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  _stat2;.  }.} {}
0c10: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0c20: 32 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  2-1.4 {.  execsq
0c30: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
0c40: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 41 4e 41 4c  ROM t1;.    ANAL
0c50: 59 5a 45 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  YZE;.    SELECT 
0c60: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74  * FROM sqlite_st
0c70: 61 74 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  at2;.  }.} {}..d
0c80: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d  o_test analyze2-
0c90: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
0ca0: 7b 20 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  { .    BEGIN;.  
0cb0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
0cc0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0cd0: 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20  E t1(x, y);.    
0ce0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 5f  CREATE INDEX t1_
0cf0: 78 20 4f 4e 20 74 31 28 78 29 3b 0a 20 20 20 20  x ON t1(x);.    
0d00: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 5f  CREATE INDEX t1_
0d10: 79 20 4f 4e 20 74 31 28 79 29 3b 0a 20 20 7d 0a  y ON t1(y);.  }.
0d20: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
0d30: 7b 24 69 20 3c 20 31 30 30 30 7d 20 7b 69 6e 63  {$i < 1000} {inc
0d40: 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  r i} {.    execs
0d50: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
0d60: 20 74 31 20 56 41 4c 55 45 53 28 24 69 2c 20 24   t1 VALUES($i, $
0d70: 69 29 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  i) }.  }.  execs
0d80: 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 65 78 65 63  ql COMMIT.  exec
0d90: 73 71 6c 20 41 4e 41 4c 59 5a 45 0a 7d 20 7b 7d  sql ANALYZE.} {}
0da0: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
0db0: 32 2d 32 2e 32 20 7b 0a 20 20 65 71 70 20 22 53  2-2.2 {.  eqp "S
0dc0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0dd0: 57 48 45 52 45 20 78 3e 35 30 30 20 41 4e 44 20  WHERE x>500 AND 
0de0: 79 3e 37 30 30 22 0a 7d 20 7b 30 20 30 20 7b 54  y>700".} {0 0 {T
0df0: 41 42 4c 45 20 74 31 20 57 49 54 48 20 49 4e 44  ABLE t1 WITH IND
0e00: 45 58 20 74 31 5f 79 7d 7d 0a 64 6f 5f 74 65 73  EX t1_y}}.do_tes
0e10: 74 20 61 6e 61 6c 79 7a 65 32 2d 32 2e 33 20 7b  t analyze2-2.3 {
0e20: 0a 20 20 65 71 70 20 22 53 45 4c 45 43 54 20 2a  .  eqp "SELECT *
0e30: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
0e40: 3e 37 30 30 20 41 4e 44 20 79 3e 35 30 30 22 0a  >700 AND y>500".
0e50: 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 31  } {0 0 {TABLE t1
0e60: 20 57 49 54 48 20 49 4e 44 45 58 20 74 31 5f 78   WITH INDEX t1_x
0e70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  }}.do_test analy
0e80: 7a 65 32 2d 32 2e 33 20 7b 0a 20 20 65 71 70 20  ze2-2.3 {.  eqp 
0e90: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
0ea0: 31 20 57 48 45 52 45 20 79 3e 37 30 30 20 41 4e  1 WHERE y>700 AN
0eb0: 44 20 78 3e 35 30 30 22 0a 7d 20 7b 30 20 30 20  D x>500".} {0 0 
0ec0: 7b 54 41 42 4c 45 20 74 31 20 57 49 54 48 20 49  {TABLE t1 WITH I
0ed0: 4e 44 45 58 20 74 31 5f 79 7d 7d 0a 64 6f 5f 74  NDEX t1_y}}.do_t
0ee0: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 32 2e 34  est analyze2-2.4
0ef0: 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45 43 54   {.  eqp "SELECT
0f00: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0f10: 20 79 3e 35 30 30 20 41 4e 44 20 78 3e 37 30 30   y>500 AND x>700
0f20: 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20  ".} {0 0 {TABLE 
0f30: 74 31 20 57 49 54 48 20 49 4e 44 45 58 20 74 31  t1 WITH INDEX t1
0f40: 5f 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  _x}}.do_test ana
0f50: 6c 79 7a 65 32 2d 32 2e 35 20 7b 0a 20 20 65 71  lyze2-2.5 {.  eq
0f60: 70 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  p "SELECT * FROM
0f70: 20 74 31 20 57 48 45 52 45 20 78 20 42 45 54 57   t1 WHERE x BETW
0f80: 45 45 4e 20 31 30 30 20 41 4e 44 20 32 30 30 20  EEN 100 AND 200 
0f90: 41 4e 44 20 79 20 42 45 54 57 45 45 4e 20 34 30  AND y BETWEEN 40
0fa0: 30 20 41 4e 44 20 37 30 30 22 0a 7d 20 7b 30 20  0 AND 700".} {0 
0fb0: 30 20 7b 54 41 42 4c 45 20 74 31 20 57 49 54 48  0 {TABLE t1 WITH
0fc0: 20 49 4e 44 45 58 20 74 31 5f 78 7d 7d 0a 64 6f   INDEX t1_x}}.do
0fd0: 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 32  _test analyze2-2
0fe0: 2e 36 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45  .6 {.  eqp "SELE
0ff0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1000: 52 45 20 78 20 42 45 54 57 45 45 4e 20 31 30 30  RE x BETWEEN 100
1010: 20 41 4e 44 20 35 30 30 20 41 4e 44 20 79 20 42   AND 500 AND y B
1020: 45 54 57 45 45 4e 20 34 30 30 20 41 4e 44 20 37  ETWEEN 400 AND 7
1030: 30 30 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c  00".} {0 0 {TABL
1040: 45 20 74 31 20 57 49 54 48 20 49 4e 44 45 58 20  E t1 WITH INDEX 
1050: 74 31 5f 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  t1_y}}.do_test a
1060: 6e 61 6c 79 7a 65 32 2d 32 2e 37 20 7b 0a 20 20  nalyze2-2.7 {.  
1070: 65 71 70 20 22 53 45 4c 45 43 54 20 2a 20 46 52  eqp "SELECT * FR
1080: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 42 45  OM t1 WHERE x BE
1090: 54 57 45 45 4e 20 2d 34 30 30 20 41 4e 44 20 2d  TWEEN -400 AND -
10a0: 33 30 30 20 41 4e 44 20 79 20 42 45 54 57 45 45  300 AND y BETWEE
10b0: 4e 20 31 30 30 20 41 4e 44 20 33 30 30 22 0a 7d  N 100 AND 300".}
10c0: 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 31 20   {0 0 {TABLE t1 
10d0: 57 49 54 48 20 49 4e 44 45 58 20 74 31 5f 78 7d  WITH INDEX t1_x}
10e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a  }.do_test analyz
10f0: 65 32 2d 32 2e 38 20 7b 0a 20 20 65 71 70 20 22  e2-2.8 {.  eqp "
1100: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1110: 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45 4e   WHERE x BETWEEN
1120: 20 31 30 30 20 41 4e 44 20 33 30 30 20 41 4e 44   100 AND 300 AND
1130: 20 79 20 42 45 54 57 45 45 4e 20 2d 34 30 30 20   y BETWEEN -400 
1140: 41 4e 44 20 2d 33 30 30 22 0a 7d 20 7b 30 20 30  AND -300".} {0 0
1150: 20 7b 54 41 42 4c 45 20 74 31 20 57 49 54 48 20   {TABLE t1 WITH 
1160: 49 4e 44 45 58 20 74 31 5f 79 7d 7d 0a 64 6f 5f  INDEX t1_y}}.do_
1170: 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 32 2e  test analyze2-2.
1180: 39 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45 43  9 {.  eqp "SELEC
1190: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
11a0: 45 20 78 20 42 45 54 57 45 45 4e 20 35 30 30 20  E x BETWEEN 500 
11b0: 41 4e 44 20 31 30 30 20 41 4e 44 20 79 20 42 45  AND 100 AND y BE
11c0: 54 57 45 45 4e 20 31 30 30 20 41 4e 44 20 33 30  TWEEN 100 AND 30
11d0: 30 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45  0".} {0 0 {TABLE
11e0: 20 74 31 20 57 49 54 48 20 49 4e 44 45 58 20 74   t1 WITH INDEX t
11f0: 31 5f 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e  1_x}}.do_test an
1200: 61 6c 79 7a 65 32 2d 32 2e 31 30 20 7b 0a 20 20  alyze2-2.10 {.  
1210: 65 71 70 20 22 53 45 4c 45 43 54 20 2a 20 46 52  eqp "SELECT * FR
1220: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 42 45  OM t1 WHERE x BE
1230: 54 57 45 45 4e 20 31 30 30 20 41 4e 44 20 33 30  TWEEN 100 AND 30
1240: 30 20 41 4e 44 20 79 20 42 45 54 57 45 45 4e 20  0 AND y BETWEEN 
1250: 35 30 30 20 41 4e 44 20 31 30 30 22 0a 7d 20 7b  500 AND 100".} {
1260: 30 20 30 20 7b 54 41 42 4c 45 20 74 31 20 57 49  0 0 {TABLE t1 WI
1270: 54 48 20 49 4e 44 45 58 20 74 31 5f 79 7d 7d 0a  TH INDEX t1_y}}.
1280: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
1290: 32 2d 33 2e 31 20 7b 0a 20 20 73 65 74 20 61 6c  2-3.1 {.  set al
12a0: 70 68 61 62 65 74 20 5b 6c 69 73 74 20 61 20 62  phabet [list a b
12b0: 20 63 20 64 20 65 20 66 20 67 20 68 20 69 20 6a   c d e f g h i j
12c0: 5d 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47 49  ].  execsql BEGI
12d0: 4e 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  N.  for {set i 0
12e0: 7d 20 7b 24 69 20 3c 20 31 30 30 30 7d 20 7b 69  } {$i < 1000} {i
12f0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
1300: 20 73 74 72 20 20 20 20 5b 6c 69 6e 64 65 78 20   str    [lindex 
1310: 24 61 6c 70 68 61 62 65 74 20 5b 65 78 70 72 20  $alphabet [expr 
1320: 28 24 69 2f 31 30 30 29 25 31 30 5d 5d 20 0a 20  ($i/100)%10]] . 
1330: 20 20 20 61 70 70 65 6e 64 20 73 74 72 20 5b 6c     append str [l
1340: 69 6e 64 65 78 20 24 61 6c 70 68 61 62 65 74 20  index $alphabet 
1350: 5b 65 78 70 72 20 28 24 69 2f 20 31 30 29 25 31  [expr ($i/ 10)%1
1360: 30 5d 5d 0a 20 20 20 20 61 70 70 65 6e 64 20 73  0]].    append s
1370: 74 72 20 5b 6c 69 6e 64 65 78 20 24 61 6c 70 68  tr [lindex $alph
1380: 61 62 65 74 20 5b 65 78 70 72 20 28 24 69 2f 20  abet [expr ($i/ 
1390: 20 31 29 25 31 30 5d 5d 0a 20 20 20 20 65 78 65   1)%10]].    exe
13a0: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
13b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 73 74  TO t1 VALUES($st
13c0: 72 2c 20 24 73 74 72 29 20 7d 0a 20 20 7d 0a 20  r, $str) }.  }. 
13d0: 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a   execsql COMMIT.
13e0: 20 20 65 78 65 63 73 71 6c 20 41 4e 41 4c 59 5a    execsql ANALYZ
13f0: 45 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20  E.  execsql { . 
1400: 20 20 20 53 45 4c 45 43 54 20 74 62 6c 2c 69 64     SELECT tbl,id
1410: 78 2c 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 73  x,group_concat(s
1420: 61 6d 70 6c 65 2c 27 20 27 29 20 0a 20 20 20 20  ample,' ') .    
1430: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74  FROM sqlite_stat
1440: 32 20 0a 20 20 20 20 57 48 45 52 45 20 69 64 78  2 .    WHERE idx
1450: 20 3d 20 27 74 31 5f 78 27 20 0a 20 20 20 20 47   = 't1_x' .    G
1460: 52 4f 55 50 20 42 59 20 74 62 6c 2c 69 64 78 0a  ROUP BY tbl,idx.
1470: 20 20 7d 0a 7d 20 7b 74 31 20 74 31 5f 78 20 7b    }.} {t1 t1_x {
1480: 31 30 30 20 32 39 39 20 34 39 39 20 36 39 39 20  100 299 499 699 
1490: 38 39 39 20 61 6a 6a 20 63 6a 6a 20 65 6a 6a 20  899 ajj cjj ejj 
14a0: 67 6a 6a 20 69 6a 6a 7d 7d 0a 64 6f 5f 74 65 73  gjj ijj}}.do_tes
14b0: 74 20 61 6e 61 6c 79 7a 65 32 2d 33 2e 32 20 7b  t analyze2-3.2 {
14c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20  .  execsql { .  
14d0: 20 20 53 45 4c 45 43 54 20 74 62 6c 2c 69 64 78    SELECT tbl,idx
14e0: 2c 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 73 61  ,group_concat(sa
14f0: 6d 70 6c 65 2c 27 20 27 29 20 0a 20 20 20 20 46  mple,' ') .    F
1500: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 32  ROM sqlite_stat2
1510: 20 0a 20 20 20 20 57 48 45 52 45 20 69 64 78 20   .    WHERE idx 
1520: 3d 20 27 74 31 5f 79 27 20 0a 20 20 20 20 47 52  = 't1_y' .    GR
1530: 4f 55 50 20 42 59 20 74 62 6c 2c 69 64 78 0a 20  OUP BY tbl,idx. 
1540: 20 7d 0a 7d 20 7b 74 31 20 74 31 5f 79 20 7b 31   }.} {t1 t1_y {1
1550: 30 30 20 32 39 39 20 34 39 39 20 36 39 39 20 38  00 299 499 699 8
1560: 39 39 20 61 6a 6a 20 63 6a 6a 20 65 6a 6a 20 67  99 ajj cjj ejj g
1570: 6a 6a 20 69 6a 6a 7d 7d 0a 0a 64 6f 5f 74 65 73  jj ijj}}..do_tes
1580: 74 20 61 6e 61 6c 79 7a 65 32 2d 33 2e 33 20 7b  t analyze2-3.3 {
1590: 0a 20 20 65 71 70 20 22 53 45 4c 45 43 54 20 2a  .  eqp "SELECT *
15a0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
15b0: 20 42 45 54 57 45 45 4e 20 31 30 30 20 41 4e 44   BETWEEN 100 AND
15c0: 20 35 30 30 20 41 4e 44 20 79 20 42 45 54 57 45   500 AND y BETWE
15d0: 45 4e 20 27 61 27 20 41 4e 44 20 27 62 27 22 0a  EN 'a' AND 'b'".
15e0: 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 31  } {0 0 {TABLE t1
15f0: 20 57 49 54 48 20 49 4e 44 45 58 20 74 31 5f 79   WITH INDEX t1_y
1600: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  }}.do_test analy
1610: 7a 65 32 2d 33 2e 34 20 7b 0a 20 20 65 71 70 20  ze2-3.4 {.  eqp 
1620: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1630: 31 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45  1 WHERE x BETWEE
1640: 4e 20 31 30 30 20 41 4e 44 20 34 30 30 20 41 4e  N 100 AND 400 AN
1650: 44 20 79 20 42 45 54 57 45 45 4e 20 27 61 27 20  D y BETWEEN 'a' 
1660: 41 4e 44 20 27 68 27 22 0a 7d 20 7b 30 20 30 20  AND 'h'".} {0 0 
1670: 7b 54 41 42 4c 45 20 74 31 20 57 49 54 48 20 49  {TABLE t1 WITH I
1680: 4e 44 45 58 20 74 31 5f 78 7d 7d 0a 64 6f 5f 74  NDEX t1_x}}.do_t
1690: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 33 2e 35  est analyze2-3.5
16a0: 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45 43 54   {.  eqp "SELECT
16b0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
16c0: 20 78 3c 27 61 27 20 41 4e 44 20 79 3e 27 68 27   x<'a' AND y>'h'
16d0: 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20  ".} {0 0 {TABLE 
16e0: 74 31 20 57 49 54 48 20 49 4e 44 45 58 20 74 31  t1 WITH INDEX t1
16f0: 5f 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  _y}}.do_test ana
1700: 6c 79 7a 65 32 2d 33 2e 36 20 7b 0a 20 20 65 71  lyze2-3.6 {.  eq
1710: 70 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  p "SELECT * FROM
1720: 20 74 31 20 57 48 45 52 45 20 78 3c 34 34 34 20   t1 WHERE x<444 
1730: 41 4e 44 20 79 3e 27 68 27 22 0a 7d 20 7b 30 20  AND y>'h'".} {0 
1740: 30 20 7b 54 41 42 4c 45 20 74 31 20 57 49 54 48  0 {TABLE t1 WITH
1750: 20 49 4e 44 45 58 20 74 31 5f 79 7d 7d 0a 64 6f   INDEX t1_y}}.do
1760: 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 33  _test analyze2-3
1770: 2e 37 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45  .7 {.  eqp "SELE
1780: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1790: 52 45 20 78 3c 32 32 31 20 41 4e 44 20 79 3e 27  RE x<221 AND y>'
17a0: 67 27 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c  g'".} {0 0 {TABL
17b0: 45 20 74 31 20 57 49 54 48 20 49 4e 44 45 58 20  E t1 WITH INDEX 
17c0: 74 31 5f 78 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  t1_x}}..do_test 
17d0: 61 6e 61 6c 79 7a 65 32 2d 34 2e 31 20 7b 0a 20  analyze2-4.1 {. 
17e0: 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54   execsql { CREAT
17f0: 45 20 54 41 42 4c 45 20 74 33 28 61 20 43 4f 4c  E TABLE t3(a COL
1800: 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20 62 29 20  LATE nocase, b) 
1810: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52  }.  execsql { CR
1820: 45 41 54 45 20 49 4e 44 45 58 20 74 33 61 20 4f  EATE INDEX t3a O
1830: 4e 20 74 33 28 61 29 20 7d 0a 20 20 65 78 65 63  N t3(a) }.  exec
1840: 73 71 6c 20 7b 20 43 52 45 41 54 45 20 49 4e 44  sql { CREATE IND
1850: 45 58 20 74 33 62 20 4f 4e 20 74 33 28 62 29 20  EX t3b ON t3(b) 
1860: 7d 0a 20 20 73 65 74 20 61 6c 70 68 61 62 65 74  }.  set alphabet
1870: 20 5b 6c 69 73 74 20 41 20 62 20 43 20 64 20 45   [list A b C d E
1880: 20 66 20 47 20 68 20 49 20 6a 5d 0a 20 20 65 78   f G h I j].  ex
1890: 65 63 73 71 6c 20 42 45 47 49 4e 0a 20 20 66 6f  ecsql BEGIN.  fo
18a0: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
18b0: 3c 20 31 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d  < 1000} {incr i}
18c0: 20 7b 0a 20 20 20 20 73 65 74 20 73 74 72 20 20   {.    set str  
18d0: 20 20 5b 6c 69 6e 64 65 78 20 24 61 6c 70 68 61    [lindex $alpha
18e0: 62 65 74 20 5b 65 78 70 72 20 28 24 69 2f 31 30  bet [expr ($i/10
18f0: 30 29 25 31 30 5d 5d 20 0a 20 20 20 20 61 70 70  0)%10]] .    app
1900: 65 6e 64 20 73 74 72 20 5b 6c 69 6e 64 65 78 20  end str [lindex 
1910: 24 61 6c 70 68 61 62 65 74 20 5b 65 78 70 72 20  $alphabet [expr 
1920: 28 24 69 2f 20 31 30 29 25 31 30 5d 5d 0a 20 20  ($i/ 10)%10]].  
1930: 20 20 61 70 70 65 6e 64 20 73 74 72 20 5b 6c 69    append str [li
1940: 6e 64 65 78 20 24 61 6c 70 68 61 62 65 74 20 5b  ndex $alphabet [
1950: 65 78 70 72 20 28 24 69 2f 20 20 31 29 25 31 30  expr ($i/  1)%10
1960: 5d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  ]].    execsql {
1970: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
1980: 56 41 4c 55 45 53 28 24 73 74 72 2c 20 24 73 74  VALUES($str, $st
1990: 72 29 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  r) }.  }.  execs
19a0: 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 65 78 65 63  ql COMMIT.  exec
19b0: 73 71 6c 20 41 4e 41 4c 59 5a 45 0a 7d 20 7b 7d  sql ANALYZE.} {}
19c0: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
19d0: 32 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  2-4.2 {.  execsq
19e0: 6c 20 7b 20 0a 20 20 20 20 53 45 4c 45 43 54 20  l { .    SELECT 
19f0: 74 62 6c 2c 69 64 78 2c 67 72 6f 75 70 5f 63 6f  tbl,idx,group_co
1a00: 6e 63 61 74 28 73 61 6d 70 6c 65 2c 27 20 27 29  ncat(sample,' ')
1a10: 20 0a 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74   .    FROM sqlit
1a20: 65 5f 73 74 61 74 32 20 0a 20 20 20 20 57 48 45  e_stat2 .    WHE
1a30: 52 45 20 69 64 78 20 3d 20 27 74 33 61 27 20 0a  RE idx = 't3a' .
1a40: 20 20 20 20 47 52 4f 55 50 20 42 59 20 74 62 6c      GROUP BY tbl
1a50: 2c 69 64 78 0a 20 20 7d 0a 7d 20 7b 74 33 20 74  ,idx.  }.} {t3 t
1a60: 33 61 20 7b 41 66 41 20 62 45 6a 20 43 45 6a 20  3a {AfA bEj CEj 
1a70: 64 45 6a 20 45 45 6a 20 66 45 6a 20 47 45 6a 20  dEj EEj fEj GEj 
1a80: 68 45 6a 20 49 45 6a 20 6a 45 6a 7d 7d 0a 64 6f  hEj IEj jEj}}.do
1a90: 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 34  _test analyze2-4
1aa0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1ab0: 20 0a 20 20 20 20 53 45 4c 45 43 54 20 74 62 6c   .    SELECT tbl
1ac0: 2c 69 64 78 2c 67 72 6f 75 70 5f 63 6f 6e 63 61  ,idx,group_conca
1ad0: 74 28 73 61 6d 70 6c 65 2c 27 20 27 29 20 0a 20  t(sample,' ') . 
1ae0: 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73     FROM sqlite_s
1af0: 74 61 74 32 20 0a 20 20 20 20 57 48 45 52 45 20  tat2 .    WHERE 
1b00: 69 64 78 20 3d 20 27 74 33 62 27 20 0a 20 20 20  idx = 't3b' .   
1b10: 20 47 52 4f 55 50 20 42 59 20 74 62 6c 2c 69 64   GROUP BY tbl,id
1b20: 78 0a 20 20 7d 0a 7d 20 7b 74 33 20 74 33 62 20  x.  }.} {t3 t3b 
1b30: 7b 41 62 41 20 43 49 6a 20 45 49 6a 20 47 49 6a  {AbA CIj EIj GIj
1b40: 20 49 49 6a 20 62 49 6a 20 64 49 6a 20 66 49 6a   IIj bIj dIj fIj
1b50: 20 68 49 6a 20 6a 49 6a 7d 7d 0a 0a 64 6f 5f 74   hIj jIj}}..do_t
1b60: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 34 2e 34  est analyze2-4.4
1b70: 20 7b 0a 20 20 65 71 70 20 22 53 45 4c 45 43 54   {.  eqp "SELECT
1b80: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
1b90: 20 61 20 3e 20 27 41 27 20 41 4e 44 20 61 20 3c   a > 'A' AND a <
1ba0: 20 27 43 27 20 41 4e 44 20 62 20 3e 20 27 41 27   'C' AND b > 'A'
1bb0: 20 41 4e 44 20 62 20 3c 20 27 43 27 22 0a 7d 20   AND b < 'C'".} 
1bc0: 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 33 20 57  {0 0 {TABLE t3 W
1bd0: 49 54 48 20 49 4e 44 45 58 20 74 33 62 7d 7d 0a  ITH INDEX t3b}}.
1be0: 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32  do_test analyze2
1bf0: 2d 34 2e 35 20 7b 0a 20 20 65 71 70 20 22 53 45  -4.5 {.  eqp "SE
1c00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
1c10: 48 45 52 45 20 61 20 3e 20 27 41 27 20 41 4e 44  HERE a > 'A' AND
1c20: 20 61 20 3c 20 27 63 27 20 41 4e 44 20 62 20 3e   a < 'c' AND b >
1c30: 20 27 41 27 20 41 4e 44 20 62 20 3c 20 27 63 27   'A' AND b < 'c'
1c40: 22 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20  ".} {0 0 {TABLE 
1c50: 74 33 20 57 49 54 48 20 49 4e 44 45 58 20 74 33  t3 WITH INDEX t3
1c60: 61 7d 7d 0a 0a 70 72 6f 63 20 74 65 73 74 5f 63  a}}..proc test_c
1c70: 6f 6c 6c 61 74 65 20 7b 65 6e 63 20 6c 68 73 20  ollate {enc lhs 
1c80: 72 68 73 7d 20 7b 0a 20 20 23 20 70 75 74 73 20  rhs} {.  # puts 
1c90: 24 65 6e 63 0a 20 20 72 65 74 75 72 6e 20 5b 73  $enc.  return [s
1ca0: 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 20 24 6c  tring compare $l
1cb0: 68 73 20 24 72 68 73 5d 0a 7d 0a 64 6f 5f 74 65  hs $rhs].}.do_te
1cc0: 73 74 20 61 6e 61 6c 79 7a 65 32 2d 35 2e 31 20  st analyze2-5.1 
1cd0: 7b 0a 20 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c  {.  add_test_col
1ce0: 6c 61 74 65 20 64 62 20 30 20 30 20 31 0a 20 20  late db 0 0 1.  
1cf0: 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45  execsql { CREATE
1d00: 20 54 41 42 4c 45 20 74 34 28 78 20 43 4f 4c 4c   TABLE t4(x COLL
1d10: 41 54 45 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  ATE test_collate
1d20: 29 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  ) }.  execsql { 
1d30: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 34 78  CREATE INDEX t4x
1d40: 20 4f 4e 20 74 34 28 78 29 20 7d 0a 20 20 73 65   ON t4(x) }.  se
1d50: 74 20 61 6c 70 68 61 62 65 74 20 5b 6c 69 73 74  t alphabet [list
1d60: 20 61 20 62 20 63 20 64 20 65 20 66 20 67 20 68   a b c d e f g h
1d70: 20 69 20 6a 5d 0a 20 20 65 78 65 63 73 71 6c 20   i j].  execsql 
1d80: 42 45 47 49 4e 0a 20 20 66 6f 72 20 7b 73 65 74  BEGIN.  for {set
1d90: 20 69 20 30 7d 20 7b 24 69 20 3c 20 31 30 30 30   i 0} {$i < 1000
1da0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
1db0: 20 73 65 74 20 73 74 72 20 20 20 20 5b 6c 69 6e   set str    [lin
1dc0: 64 65 78 20 24 61 6c 70 68 61 62 65 74 20 5b 65  dex $alphabet [e
1dd0: 78 70 72 20 28 24 69 2f 31 30 30 29 25 31 30 5d  xpr ($i/100)%10]
1de0: 5d 20 0a 20 20 20 20 61 70 70 65 6e 64 20 73 74  ] .    append st
1df0: 72 20 5b 6c 69 6e 64 65 78 20 24 61 6c 70 68 61  r [lindex $alpha
1e00: 62 65 74 20 5b 65 78 70 72 20 28 24 69 2f 20 31  bet [expr ($i/ 1
1e10: 30 29 25 31 30 5d 5d 0a 20 20 20 20 61 70 70 65  0)%10]].    appe
1e20: 6e 64 20 73 74 72 20 5b 6c 69 6e 64 65 78 20 24  nd str [lindex $
1e30: 61 6c 70 68 61 62 65 74 20 5b 65 78 70 72 20 28  alphabet [expr (
1e40: 24 69 2f 20 20 31 29 25 31 30 5d 5d 0a 20 20 20  $i/  1)%10]].   
1e50: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
1e60: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1e70: 28 24 73 74 72 29 20 7d 0a 20 20 7d 0a 20 20 65  ($str) }.  }.  e
1e80: 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20  xecsql COMMIT.  
1e90: 65 78 65 63 73 71 6c 20 41 4e 41 4c 59 5a 45 0a  execsql ANALYZE.
1ea0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  } {}.do_test ana
1eb0: 6c 79 7a 65 32 2d 35 2e 32 20 7b 0a 20 20 65 78  lyze2-5.2 {.  ex
1ec0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c  ecsql { .    SEL
1ed0: 45 43 54 20 74 62 6c 2c 69 64 78 2c 67 72 6f 75  ECT tbl,idx,grou
1ee0: 70 5f 63 6f 6e 63 61 74 28 73 61 6d 70 6c 65 2c  p_concat(sample,
1ef0: 27 20 27 29 20 0a 20 20 20 20 46 52 4f 4d 20 73  ' ') .    FROM s
1f00: 71 6c 69 74 65 5f 73 74 61 74 32 20 0a 20 20 20  qlite_stat2 .   
1f10: 20 57 48 45 52 45 20 74 62 6c 20 3d 20 27 74 34   WHERE tbl = 't4
1f20: 27 20 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20  ' .    GROUP BY 
1f30: 74 62 6c 2c 69 64 78 0a 20 20 7d 0a 7d 20 7b 74  tbl,idx.  }.} {t
1f40: 34 20 74 34 78 20 7b 61 66 61 20 62 65 6a 20 63  4 t4x {afa bej c
1f50: 65 6a 20 64 65 6a 20 65 65 6a 20 66 65 6a 20 67  ej dej eej fej g
1f60: 65 6a 20 68 65 6a 20 69 65 6a 20 6a 65 6a 7d 7d  ej hej iej jej}}
1f70: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
1f80: 32 2d 35 2e 33 20 7b 0a 20 20 65 71 70 20 22 53  2-5.3 {.  eqp "S
1f90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
1fa0: 57 48 45 52 45 20 78 3e 27 63 63 63 27 22 0a 7d  WHERE x>'ccc'".}
1fb0: 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 34 20   {0 0 {TABLE t4 
1fc0: 57 49 54 48 20 49 4e 44 45 58 20 74 34 78 7d 7d  WITH INDEX t4x}}
1fd0: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
1fe0: 32 2d 35 2e 34 20 7b 0a 20 20 65 71 70 20 22 53  2-5.4 {.  eqp "S
1ff0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
2000: 41 53 20 74 34 31 2c 20 74 34 20 41 53 20 74 34  AS t41, t4 AS t4
2010: 32 20 57 48 45 52 45 20 74 34 31 2e 78 3e 27 63  2 WHERE t41.x>'c
2020: 63 63 27 20 41 4e 44 20 74 34 32 2e 78 3e 27 67  cc' AND t42.x>'g
2030: 67 67 27 22 0a 7d 20 7b 30 20 31 20 7b 54 41 42  gg'".} {0 1 {TAB
2040: 4c 45 20 74 34 20 41 53 20 74 34 32 20 57 49 54  LE t4 AS t42 WIT
2050: 48 20 49 4e 44 45 58 20 74 34 78 7d 20 31 20 30  H INDEX t4x} 1 0
2060: 20 7b 54 41 42 4c 45 20 74 34 20 41 53 20 74 34   {TABLE t4 AS t4
2070: 31 20 57 49 54 48 20 49 4e 44 45 58 20 74 34 78  1 WITH INDEX t4x
2080: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  }}.do_test analy
2090: 7a 65 32 2d 35 2e 35 20 7b 0a 20 20 65 71 70 20  ze2-5.5 {.  eqp 
20a0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
20b0: 34 20 41 53 20 74 34 31 2c 20 74 34 20 41 53 20  4 AS t41, t4 AS 
20c0: 74 34 32 20 57 48 45 52 45 20 74 34 31 2e 78 3e  t42 WHERE t41.x>
20d0: 27 64 64 64 27 20 41 4e 44 20 74 34 32 2e 78 3e  'ddd' AND t42.x>
20e0: 27 63 63 63 27 22 0a 7d 20 7b 30 20 30 20 7b 54  'ccc'".} {0 0 {T
20f0: 41 42 4c 45 20 74 34 20 41 53 20 74 34 31 20 57  ABLE t4 AS t41 W
2100: 49 54 48 20 49 4e 44 45 58 20 74 34 78 7d 20 31  ITH INDEX t4x} 1
2110: 20 31 20 7b 54 41 42 4c 45 20 74 34 20 41 53 20   1 {TABLE t4 AS 
2120: 74 34 32 20 57 49 54 48 20 49 4e 44 45 58 20 74  t42 WITH INDEX t
2130: 34 78 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  4x}}..#---------
2140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68  -----------.# Th
2180: 65 73 65 20 74 65 73 74 73 2c 20 61 6e 61 6c 79  ese tests, analy
2190: 7a 65 32 2d 36 2e 2a 2c 20 76 65 72 69 66 79 20  ze2-6.*, verify 
21a0: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
21b0: 20 62 65 68 61 76 65 73 20 63 6f 72 72 65 63 74   behaves correct
21c0: 6c 79 0a 23 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ly.# when one of
21d0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
21e0: 31 20 61 6e 64 20 73 71 6c 69 74 65 5f 73 74 61  1 and sqlite_sta
21f0: 74 32 20 74 61 62 6c 65 73 20 69 73 20 6d 69 73  t2 tables is mis
2200: 73 69 6e 67 2e 0a 23 0a 23 20 49 66 20 74 68 65  sing..#.# If the
2210: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
2220: 62 6c 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ble is not prese
2230: 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 71 6c  nt, then the sql
2240: 69 74 65 5f 73 74 61 74 32 0a 23 20 74 61 62 6c  ite_stat2.# tabl
2250: 65 20 69 73 20 6e 6f 74 20 72 65 61 64 2e 20 48  e is not read. H
2260: 6f 77 65 76 65 72 2c 20 69 66 20 69 74 20 69 73  owever, if it is
2270: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
2280: 32 20 74 61 62 6c 65 20 74 68 61 74 0a 23 20 69  2 table that.# i
2290: 73 20 6d 69 73 73 69 6e 67 2c 20 74 68 65 20 64  s missing, the d
22a0: 61 74 61 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ata in the sqlit
22b0: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69 73  e_stat1 table is
22c0: 20 73 74 69 6c 6c 20 75 73 65 64 2e 0a 23 0a 23   still used..#.#
22d0: 20 54 65 73 74 73 20 61 6e 61 6c 79 7a 65 32 2d   Tests analyze2-
22e0: 36 2e 31 2e 2a 20 74 65 73 74 20 74 68 65 20 6c  6.1.* test the l
22f0: 69 62 61 72 79 20 77 68 65 6e 20 74 68 65 20 73  ibary when the s
2300: 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
2310: 65 0a 23 20 69 73 20 6d 69 73 73 69 6e 67 2e 20  e.# is missing. 
2320: 54 65 73 74 73 20 61 6e 61 6c 79 7a 65 32 2d 36  Tests analyze2-6
2330: 2e 32 2e 2a 20 74 65 73 74 20 74 68 65 20 6c 69  .2.* test the li
2340: 62 72 61 72 79 20 77 68 65 6e 20 73 71 6c 69 74  brary when sqlit
2350: 65 5f 73 74 61 74 31 0a 23 20 69 73 20 6e 6f 74  e_stat1.# is not
2360: 20 70 72 65 73 65 6e 74 2e 0a 23 0a 64 6f 5f 74   present..#.do_t
2370: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 36 2e 30  est analyze2-6.0
2380: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2390: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 34     DROP TABLE t4
23a0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
23b0: 4c 45 20 74 35 28 61 2c 20 62 29 3b 20 43 52 45  LE t5(a, b); CRE
23c0: 41 54 45 20 49 4e 44 45 58 20 74 35 69 20 4f 4e  ATE INDEX t5i ON
23d0: 20 74 35 28 61 2c 20 62 29 3b 0a 20 20 20 20 43   t5(a, b);.    C
23e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
23f0: 2c 20 62 29 3b 20 43 52 45 41 54 45 20 49 4e 44  , b); CREATE IND
2400: 45 58 20 74 36 69 20 4f 4e 20 74 36 28 61 2c 20  EX t6i ON t6(a, 
2410: 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73  b);.  }.  for {s
2420: 65 74 20 69 69 20 30 7d 20 7b 24 69 69 20 3c 20  et ii 0} {$ii < 
2430: 32 30 7d 20 7b 69 6e 63 72 20 69 69 7d 20 7b 0a  20} {incr ii} {.
2440: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2450: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2460: 74 35 20 56 41 4c 55 45 53 28 24 69 69 2c 20 24  t5 VALUES($ii, $
2470: 69 69 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  ii);.      INSER
2480: 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53  T INTO t6 VALUES
2490: 28 24 69 69 2f 31 30 2c 20 24 69 69 2f 31 30 29  ($ii/10, $ii/10)
24a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 78  ;.    }.  }.  ex
24b0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 43 52 45  ecsql { .    CRE
24c0: 41 54 45 20 54 41 42 4c 45 20 6d 61 73 74 65 72  ATE TABLE master
24d0: 20 41 53 20 0a 20 20 20 20 53 45 4c 45 43 54 20   AS .    SELECT 
24e0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
24f0: 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20  ster WHERE name 
2500: 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 73 74 61  LIKE 'sqlite_sta
2510: 74 25 27 20 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  t%' .  }.} {}..d
2520: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d  o_test analyze2-
2530: 36 2e 31 2e 31 20 7b 0a 20 20 65 71 70 20 7b 53  6.1.1 {.  eqp {S
2540: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 2c  ELECT * FROM t5,
2550: 74 36 20 57 48 45 52 45 20 74 35 2e 72 6f 77 69  t6 WHERE t5.rowi
2560: 64 3d 74 36 2e 72 6f 77 69 64 20 41 4e 44 20 0a  d=t6.rowid AND .
2570: 20 20 20 20 20 20 20 74 35 2e 61 20 3d 20 31 20         t5.a = 1 
2580: 41 4e 44 0a 20 20 20 20 20 20 20 74 36 2e 61 20  AND.       t6.a 
2590: 3d 20 31 20 41 4e 44 20 74 36 2e 62 20 3d 20 31  = 1 AND t6.b = 1
25a0: 0a 20 20 7d 0a 7d 20 7b 30 20 31 20 7b 54 41 42  .  }.} {0 1 {TAB
25b0: 4c 45 20 74 36 20 57 49 54 48 20 49 4e 44 45 58  LE t6 WITH INDEX
25c0: 20 74 36 69 7d 20 31 20 30 20 7b 54 41 42 4c 45   t6i} 1 0 {TABLE
25d0: 20 74 35 20 55 53 49 4e 47 20 50 52 49 4d 41 52   t5 USING PRIMAR
25e0: 59 20 4b 45 59 7d 7d 0a 64 6f 5f 74 65 73 74 20  Y KEY}}.do_test 
25f0: 61 6e 61 6c 79 7a 65 32 2d 36 2e 31 2e 32 20 7b  analyze2-6.1.2 {
2600: 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75 73  .  db cache flus
2610: 68 0a 20 20 65 78 65 63 73 71 6c 20 41 4e 41 4c  h.  execsql ANAL
2620: 59 5a 45 0a 20 20 65 71 70 20 7b 53 45 4c 45 43  YZE.  eqp {SELEC
2630: 54 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57  T * FROM t5,t6 W
2640: 48 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36  HERE t5.rowid=t6
2650: 2e 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20  .rowid AND .    
2660: 20 20 20 74 35 2e 61 20 3d 20 31 20 41 4e 44 0a     t5.a = 1 AND.
2670: 20 20 20 20 20 20 20 74 36 2e 61 20 3d 20 31 20         t6.a = 1 
2680: 41 4e 44 20 74 36 2e 62 20 3d 20 31 0a 20 20 7d  AND t6.b = 1.  }
2690: 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74  .} {0 0 {TABLE t
26a0: 35 20 57 49 54 48 20 49 4e 44 45 58 20 74 35 69  5 WITH INDEX t5i
26b0: 7d 20 31 20 31 20 7b 54 41 42 4c 45 20 74 36 20  } 1 1 {TABLE t6 
26c0: 55 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b 45  USING PRIMARY KE
26d0: 59 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c  Y}}.do_test anal
26e0: 79 7a 65 32 2d 36 2e 31 2e 33 20 7b 0a 20 20 73  yze2-6.1.3 {.  s
26f0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2700: 62 0a 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54  b.  eqp { SELECT
2710: 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48   * FROM t5,t6 WH
2720: 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e  ERE t5.rowid=t6.
2730: 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20  rowid AND .     
2740: 20 20 74 35 2e 61 20 3d 20 31 20 41 4e 44 0a 20    t5.a = 1 AND. 
2750: 20 20 20 20 20 20 74 36 2e 61 20 3d 20 31 20 41        t6.a = 1 A
2760: 4e 44 20 74 36 2e 62 20 3d 20 31 0a 20 20 7d 0a  ND t6.b = 1.  }.
2770: 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 35  } {0 0 {TABLE t5
2780: 20 57 49 54 48 20 49 4e 44 45 58 20 74 35 69 7d   WITH INDEX t5i}
2790: 20 31 20 31 20 7b 54 41 42 4c 45 20 74 36 20 55   1 1 {TABLE t6 U
27a0: 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b 45 59  SING PRIMARY KEY
27b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79  }}.do_test analy
27c0: 7a 65 32 2d 36 2e 31 2e 34 20 7b 0a 20 20 65 78  ze2-6.1.4 {.  ex
27d0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41  ecsql { .    PRA
27e0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
27f0: 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 44 45 4c  ema = 1;.    DEL
2800: 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ETE FROM sqlite_
2810: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62 6c  master WHERE tbl
2820: 5f 6e 61 6d 65 20 3d 20 27 73 71 6c 69 74 65 5f  _name = 'sqlite_
2830: 73 74 61 74 32 27 3b 0a 20 20 7d 0a 20 20 73 71  stat2';.  }.  sq
2840: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
2850: 0a 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20  .  eqp { SELECT 
2860: 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45  * FROM t5,t6 WHE
2870: 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72  RE t5.rowid=t6.r
2880: 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20  owid AND .      
2890: 20 74 35 2e 61 20 3d 20 31 20 41 4e 44 0a 20 20   t5.a = 1 AND.  
28a0: 20 20 20 20 20 74 36 2e 61 20 3d 20 31 20 41 4e       t6.a = 1 AN
28b0: 44 20 74 36 2e 62 20 3d 20 31 0a 20 20 7d 0a 7d  D t6.b = 1.  }.}
28c0: 20 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 35 20   {0 0 {TABLE t5 
28d0: 57 49 54 48 20 49 4e 44 45 58 20 74 35 69 7d 20  WITH INDEX t5i} 
28e0: 31 20 31 20 7b 54 41 42 4c 45 20 74 36 20 55 53  1 1 {TABLE t6 US
28f0: 49 4e 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d  ING PRIMARY KEY}
2900: 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a  }.do_test analyz
2910: 65 32 2d 36 2e 31 2e 35 20 7b 0a 20 20 65 78 65  e2-6.1.5 {.  exe
2920: 63 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47  csql { .    PRAG
2930: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
2940: 6d 61 20 3d 20 31 3b 0a 20 20 20 20 44 45 4c 45  ma = 1;.    DELE
2950: 54 45 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  TE FROM sqlite_m
2960: 61 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f  aster WHERE tbl_
2970: 6e 61 6d 65 20 3d 20 27 73 71 6c 69 74 65 5f 73  name = 'sqlite_s
2980: 74 61 74 31 27 3b 0a 20 20 7d 0a 20 20 73 71 6c  tat1';.  }.  sql
2990: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
29a0: 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20 2a    eqp { SELECT *
29b0: 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45 52   FROM t5,t6 WHER
29c0: 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72 6f  E t5.rowid=t6.ro
29d0: 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20 20  wid AND .       
29e0: 74 35 2e 61 20 3d 20 31 20 41 4e 44 0a 20 20 20  t5.a = 1 AND.   
29f0: 20 20 20 20 74 36 2e 61 20 3d 20 31 20 41 4e 44      t6.a = 1 AND
2a00: 20 74 36 2e 62 20 3d 20 31 0a 20 20 7d 0a 7d 20   t6.b = 1.  }.} 
2a10: 7b 30 20 31 20 7b 54 41 42 4c 45 20 74 36 20 57  {0 1 {TABLE t6 W
2a20: 49 54 48 20 49 4e 44 45 58 20 74 36 69 7d 20 31  ITH INDEX t6i} 1
2a30: 20 30 20 7b 54 41 42 4c 45 20 74 35 20 55 53 49   0 {TABLE t5 USI
2a40: 4e 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d  NG PRIMARY KEY}}
2a50: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
2a60: 32 2d 36 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63  2-6.1.6 {.  exec
2a70: 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d  sql { .    PRAGM
2a80: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
2a90: 61 20 3d 20 31 3b 0a 20 20 20 20 49 4e 53 45 52  a = 1;.    INSER
2aa0: 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61  T INTO sqlite_ma
2ab0: 73 74 65 72 20 53 45 4c 45 43 54 20 2a 20 46 52  ster SELECT * FR
2ac0: 4f 4d 20 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 20  OM master;.  }. 
2ad0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
2ae0: 2e 64 62 0a 20 20 65 71 70 20 7b 20 53 45 4c 45  .db.  eqp { SELE
2af0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20  CT * FROM t5,t6 
2b00: 57 48 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74  WHERE t5.rowid=t
2b10: 36 2e 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20  6.rowid AND .   
2b20: 20 20 20 20 74 35 2e 61 20 3d 20 31 20 41 4e 44      t5.a = 1 AND
2b30: 0a 20 20 20 20 20 20 20 74 36 2e 61 20 3d 20 31  .       t6.a = 1
2b40: 20 41 4e 44 20 74 36 2e 62 20 3d 20 31 0a 20 20   AND t6.b = 1.  
2b50: 7d 0a 7d 20 7b 30 20 30 20 7b 54 41 42 4c 45 20  }.} {0 0 {TABLE 
2b60: 74 35 20 57 49 54 48 20 49 4e 44 45 58 20 74 35  t5 WITH INDEX t5
2b70: 69 7d 20 31 20 31 20 7b 54 41 42 4c 45 20 74 36  i} 1 1 {TABLE t6
2b80: 20 55 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b   USING PRIMARY K
2b90: 45 59 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6e  EY}}..do_test an
2ba0: 61 6c 79 7a 65 32 2d 36 2e 32 2e 31 20 7b 0a 20  alyze2-6.2.1 {. 
2bb0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
2bc0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69  DELETE FROM sqli
2bd0: 74 65 5f 73 74 61 74 31 3b 0a 20 20 20 20 44 45  te_stat1;.    DE
2be0: 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74 65  LETE FROM sqlite
2bf0: 5f 73 74 61 74 32 3b 0a 20 20 7d 0a 20 20 73 71  _stat2;.  }.  sq
2c00: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
2c10: 0a 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20  .  eqp { SELECT 
2c20: 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45  * FROM t5,t6 WHE
2c30: 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72  RE t5.rowid=t6.r
2c40: 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20  owid AND .      
2c50: 20 20 74 35 2e 61 3e 31 20 41 4e 44 20 74 35 2e    t5.a>1 AND t5.
2c60: 61 3c 31 35 20 41 4e 44 0a 20 20 20 20 20 20 20  a<15 AND.       
2c70: 20 74 36 2e 61 3e 31 0a 20 20 7d 0a 7d 20 7b 30   t6.a>1.  }.} {0
2c80: 20 30 20 7b 54 41 42 4c 45 20 74 35 20 57 49 54   0 {TABLE t5 WIT
2c90: 48 20 49 4e 44 45 58 20 74 35 69 7d 20 31 20 31  H INDEX t5i} 1 1
2ca0: 20 7b 54 41 42 4c 45 20 74 36 20 55 53 49 4e 47   {TABLE t6 USING
2cb0: 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a 64   PRIMARY KEY}}.d
2cc0: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d  o_test analyze2-
2cd0: 36 2e 32 2e 32 20 7b 0a 20 20 64 62 20 63 61 63  6.2.2 {.  db cac
2ce0: 68 65 20 66 6c 75 73 68 0a 20 20 65 78 65 63 73  he flush.  execs
2cf0: 71 6c 20 41 4e 41 4c 59 5a 45 0a 20 20 65 71 70  ql ANALYZE.  eqp
2d00: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2d10: 20 74 35 2c 74 36 20 57 48 45 52 45 20 74 35 2e   t5,t6 WHERE t5.
2d20: 72 6f 77 69 64 3d 74 36 2e 72 6f 77 69 64 20 41  rowid=t6.rowid A
2d30: 4e 44 20 0a 20 20 20 20 20 20 20 20 74 35 2e 61  ND .        t5.a
2d40: 3e 31 20 41 4e 44 20 74 35 2e 61 3c 31 35 20 41  >1 AND t5.a<15 A
2d50: 4e 44 0a 20 20 20 20 20 20 20 20 74 36 2e 61 3e  ND.        t6.a>
2d60: 31 0a 20 20 7d 0a 7d 20 7b 30 20 31 20 7b 54 41  1.  }.} {0 1 {TA
2d70: 42 4c 45 20 74 36 20 57 49 54 48 20 49 4e 44 45  BLE t6 WITH INDE
2d80: 58 20 74 36 69 7d 20 31 20 30 20 7b 54 41 42 4c  X t6i} 1 0 {TABL
2d90: 45 20 74 35 20 55 53 49 4e 47 20 50 52 49 4d 41  E t5 USING PRIMA
2da0: 52 59 20 4b 45 59 7d 7d 0a 64 6f 5f 74 65 73 74  RY KEY}}.do_test
2db0: 20 61 6e 61 6c 79 7a 65 32 2d 36 2e 32 2e 33 20   analyze2-6.2.3 
2dc0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  {.  sqlite3 db t
2dd0: 65 73 74 2e 64 62 0a 20 20 65 71 70 20 7b 20 53  est.db.  eqp { S
2de0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 2c  ELECT * FROM t5,
2df0: 74 36 20 57 48 45 52 45 20 74 35 2e 72 6f 77 69  t6 WHERE t5.rowi
2e00: 64 3d 74 36 2e 72 6f 77 69 64 20 41 4e 44 20 0a  d=t6.rowid AND .
2e10: 20 20 20 20 20 20 20 20 74 35 2e 61 3e 31 20 41          t5.a>1 A
2e20: 4e 44 20 74 35 2e 61 3c 31 35 20 41 4e 44 0a 20  ND t5.a<15 AND. 
2e30: 20 20 20 20 20 20 20 74 36 2e 61 3e 31 0a 20 20         t6.a>1.  
2e40: 7d 0a 7d 20 7b 30 20 31 20 7b 54 41 42 4c 45 20  }.} {0 1 {TABLE 
2e50: 74 36 20 57 49 54 48 20 49 4e 44 45 58 20 74 36  t6 WITH INDEX t6
2e60: 69 7d 20 31 20 30 20 7b 54 41 42 4c 45 20 74 35  i} 1 0 {TABLE t5
2e70: 20 55 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b   USING PRIMARY K
2e80: 45 59 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6e 61  EY}}.do_test ana
2e90: 6c 79 7a 65 32 2d 36 2e 32 2e 34 20 7b 0a 20 20  lyze2-6.2.4 {.  
2ea0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 50  execsql { .    P
2eb0: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
2ec0: 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 44  chema = 1;.    D
2ed0: 45 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74  ELETE FROM sqlit
2ee0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
2ef0: 62 6c 5f 6e 61 6d 65 20 3d 20 27 73 71 6c 69 74  bl_name = 'sqlit
2f00: 65 5f 73 74 61 74 31 27 3b 0a 20 20 7d 0a 20 20  e_stat1';.  }.  
2f10: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
2f20: 64 62 0a 20 20 65 71 70 20 7b 20 53 45 4c 45 43  db.  eqp { SELEC
2f30: 54 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57  T * FROM t5,t6 W
2f40: 48 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36  HERE t5.rowid=t6
2f50: 2e 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20  .rowid AND .    
2f60: 20 20 20 20 74 35 2e 61 3e 31 20 41 4e 44 20 74      t5.a>1 AND t
2f70: 35 2e 61 3c 31 35 20 41 4e 44 0a 20 20 20 20 20  5.a<15 AND.     
2f80: 20 20 20 74 36 2e 61 3e 31 0a 20 20 7d 0a 7d 20     t6.a>1.  }.} 
2f90: 7b 30 20 30 20 7b 54 41 42 4c 45 20 74 35 20 57  {0 0 {TABLE t5 W
2fa0: 49 54 48 20 49 4e 44 45 58 20 74 35 69 7d 20 31  ITH INDEX t5i} 1
2fb0: 20 31 20 7b 54 41 42 4c 45 20 74 36 20 55 53 49   1 {TABLE t6 USI
2fc0: 4e 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d  NG PRIMARY KEY}}
2fd0: 0a 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65  .do_test analyze
2fe0: 32 2d 36 2e 32 2e 35 20 7b 0a 20 20 65 78 65 63  2-6.2.5 {.  exec
2ff0: 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d  sql { .    PRAGM
3000: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
3010: 61 20 3d 20 31 3b 0a 20 20 20 20 44 45 4c 45 54  a = 1;.    DELET
3020: 45 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  E FROM sqlite_ma
3030: 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e  ster WHERE tbl_n
3040: 61 6d 65 20 3d 20 27 73 71 6c 69 74 65 5f 73 74  ame = 'sqlite_st
3050: 61 74 32 27 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  at2';.  }.  sqli
3060: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
3070: 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20 2a 20   eqp { SELECT * 
3080: 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45 52 45  FROM t5,t6 WHERE
3090: 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72 6f 77   t5.rowid=t6.row
30a0: 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20 20 20  id AND .        
30b0: 74 35 2e 61 3e 31 20 41 4e 44 20 74 35 2e 61 3c  t5.a>1 AND t5.a<
30c0: 31 35 20 41 4e 44 0a 20 20 20 20 20 20 20 20 74  15 AND.        t
30d0: 36 2e 61 3e 31 0a 20 20 7d 0a 7d 20 7b 30 20 30  6.a>1.  }.} {0 0
30e0: 20 7b 54 41 42 4c 45 20 74 35 20 57 49 54 48 20   {TABLE t5 WITH 
30f0: 49 4e 44 45 58 20 74 35 69 7d 20 31 20 31 20 7b  INDEX t5i} 1 1 {
3100: 54 41 42 4c 45 20 74 36 20 55 53 49 4e 47 20 50  TABLE t6 USING P
3110: 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a 64 6f 5f  RIMARY KEY}}.do_
3120: 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 36 2e  test analyze2-6.
3130: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.6 {.  execsql 
3140: 7b 20 0a 20 20 20 20 50 52 41 47 4d 41 20 77 72  { .    PRAGMA wr
3150: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20 3d 20  itable_schema = 
3160: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
3170: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
3180: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6d   SELECT * FROM m
3190: 61 73 74 65 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  aster;.  }.  sql
31a0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
31b0: 20 20 65 78 65 63 73 71 6c 20 41 4e 41 4c 59 5a    execsql ANALYZ
31c0: 45 0a 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54  E.  eqp { SELECT
31d0: 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48   * FROM t5,t6 WH
31e0: 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e  ERE t5.rowid=t6.
31f0: 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20  rowid AND .     
3200: 20 20 20 74 35 2e 61 3e 31 20 41 4e 44 20 74 35     t5.a>1 AND t5
3210: 2e 61 3c 31 35 20 41 4e 44 0a 20 20 20 20 20 20  .a<15 AND.      
3220: 20 20 74 36 2e 61 3e 31 0a 20 20 7d 0a 7d 20 7b    t6.a>1.  }.} {
3230: 30 20 31 20 7b 54 41 42 4c 45 20 74 36 20 57 49  0 1 {TABLE t6 WI
3240: 54 48 20 49 4e 44 45 58 20 74 36 69 7d 20 31 20  TH INDEX t6i} 1 
3250: 30 20 7b 54 41 42 4c 45 20 74 35 20 55 53 49 4e  0 {TABLE t5 USIN
3260: 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a  G PRIMARY KEY}}.
3270: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
3280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
32b0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 73 65 20 74  ------.# These t
32c0: 65 73 74 73 2c 20 61 6e 61 6c 79 7a 65 32 2d 37  ests, analyze2-7
32d0: 2e 2a 2c 20 74 65 73 74 20 74 68 61 74 20 74 68  .*, test that th
32e0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 66  e sqlite_stat2 f
32f0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 23 20 77  unctionality.# w
3300: 6f 72 6b 73 20 69 6e 20 73 68 61 72 65 64 2d 63  orks in shared-c
3310: 61 63 68 65 20 6d 6f 64 65 2e 20 4e 6f 74 65 20  ache mode. Note 
3320: 74 68 61 74 20 74 68 65 73 65 20 74 65 73 74 73  that these tests
3330: 20 72 65 75 73 65 20 74 68 65 20 64 61 74 61 62   reuse the datab
3340: 61 73 65 0a 23 20 63 72 65 61 74 65 64 20 66 6f  ase.# created fo
3350: 72 20 74 68 65 20 61 6e 61 6c 79 7a 65 32 2d 36  r the analyze2-6
3360: 2e 2a 20 74 65 73 74 73 2e 0a 23 0a 69 66 63 61  .* tests..#.ifca
3370: 70 61 62 6c 65 20 73 68 61 72 65 64 5f 63 61 63  pable shared_cac
3380: 68 65 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  he {.  db close.
3390: 20 20 73 65 74 20 3a 3a 65 6e 61 62 6c 65 5f 73    set ::enable_s
33a0: 68 61 72 65 64 5f 63 61 63 68 65 20 5b 73 71 6c  hared_cache [sql
33b0: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72  ite3_enable_shar
33c0: 65 64 5f 63 61 63 68 65 20 31 5d 0a 0a 20 20 70  ed_cache 1]..  p
33d0: 72 6f 63 20 69 6e 63 72 5f 73 63 68 65 6d 61 5f  roc incr_schema_
33e0: 63 6f 6f 6b 69 65 20 7b 7a 44 62 7d 20 7b 0a 20  cookie {zDb} {. 
33f0: 20 20 20 66 6f 72 65 61 63 68 20 69 4f 66 66 73     foreach iOffs
3400: 65 74 20 7b 32 34 20 34 30 7d 20 7b 0a 20 20 20  et {24 40} {.   
3410: 20 20 20 73 65 74 20 63 6f 6f 6b 69 65 20 5b 68     set cookie [h
3420: 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65  exio_get_int [he
3430: 78 69 6f 5f 72 65 61 64 20 24 7a 44 62 20 24 69  xio_read $zDb $i
3440: 4f 66 66 73 65 74 20 34 5d 5d 0a 20 20 20 20 20  Offset 4]].     
3450: 20 69 6e 63 72 20 63 6f 6f 6b 69 65 0a 20 20 20   incr cookie.   
3460: 20 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 24     hexio_write $
3470: 7a 44 62 20 24 69 4f 66 66 73 65 74 20 5b 68 65  zDb $iOffset [he
3480: 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74 33 32  xio_render_int32
3490: 20 24 63 6f 6f 6b 69 65 5d 0a 20 20 20 20 7d 0a   $cookie].    }.
34a0: 20 20 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 61    }..  do_test a
34b0: 6e 61 6c 79 7a 65 32 2d 37 2e 31 20 7b 0a 20 20  nalyze2-7.1 {.  
34c0: 20 20 73 71 6c 69 74 65 33 20 64 62 31 20 74 65    sqlite3 db1 te
34d0: 73 74 2e 64 62 0a 20 20 20 20 73 71 6c 69 74 65  st.db.    sqlite
34e0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
34f0: 20 20 64 62 31 20 63 61 63 68 65 20 73 69 7a 65    db1 cache size
3500: 20 30 0a 20 20 20 20 64 62 32 20 63 61 63 68 65   0.    db2 cache
3510: 20 73 69 7a 65 20 30 0a 20 20 20 20 65 78 65 63   size 0.    exec
3520: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 63 6f 75  sql { SELECT cou
3530: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 35 20 7d 20  nt(*) FROM t5 } 
3540: 64 62 31 0a 20 20 7d 20 7b 32 30 7d 0a 20 20 64  db1.  } {20}.  d
3550: 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d  o_test analyze2-
3560: 37 2e 32 20 7b 0a 20 20 20 20 69 6e 63 72 5f 73  7.2 {.    incr_s
3570: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 74 65 73  chema_cookie tes
3580: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
3590: 20 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28   { SELECT count(
35a0: 2a 29 20 46 52 4f 4d 20 74 35 20 7d 20 64 62 32  *) FROM t5 } db2
35b0: 0a 20 20 7d 20 7b 32 30 7d 0a 20 20 64 6f 5f 74  .  } {20}.  do_t
35c0: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 37 2e 33  est analyze2-7.3
35d0: 20 7b 0a 20 20 20 20 69 6e 63 72 5f 73 63 68 65   {.    incr_sche
35e0: 6d 61 5f 63 6f 6f 6b 69 65 20 74 65 73 74 2e 64  ma_cookie test.d
35f0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  b.    execsql { 
3600: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
3610: 46 52 4f 4d 20 74 35 20 7d 20 64 62 31 0a 20 20  FROM t5 } db1.  
3620: 7d 20 7b 32 30 7d 0a 20 20 64 6f 5f 74 65 73 74  } {20}.  do_test
3630: 20 61 6e 61 6c 79 7a 65 32 2d 37 2e 34 20 7b 0a   analyze2-7.4 {.
3640: 20 20 20 20 69 6e 63 72 5f 73 63 68 65 6d 61 5f      incr_schema_
3650: 63 6f 6f 6b 69 65 20 74 65 73 74 2e 64 62 0a 20  cookie test.db. 
3660: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c     execsql { SEL
3670: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
3680: 4d 20 74 35 20 7d 20 64 62 32 0a 20 20 7d 20 7b  M t5 } db2.  } {
3690: 32 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 61  20}..  do_test a
36a0: 6e 61 6c 79 7a 65 32 2d 37 2e 35 20 7b 0a 20 20  nalyze2-7.5 {.  
36b0: 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20 2a    eqp { SELECT *
36c0: 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45 52   FROM t5,t6 WHER
36d0: 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72 6f  E t5.rowid=t6.ro
36e0: 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20 20  wid AND .       
36f0: 20 20 20 74 35 2e 61 3e 31 20 41 4e 44 20 74 35     t5.a>1 AND t5
3700: 2e 61 3c 31 35 20 41 4e 44 0a 20 20 20 20 20 20  .a<15 AND.      
3710: 20 20 20 20 74 36 2e 61 3e 31 0a 20 20 20 20 7d      t6.a>1.    }
3720: 20 64 62 31 0a 20 20 7d 20 7b 30 20 31 20 7b 54   db1.  } {0 1 {T
3730: 41 42 4c 45 20 74 36 20 57 49 54 48 20 49 4e 44  ABLE t6 WITH IND
3740: 45 58 20 74 36 69 7d 20 31 20 30 20 7b 54 41 42  EX t6i} 1 0 {TAB
3750: 4c 45 20 74 35 20 55 53 49 4e 47 20 50 52 49 4d  LE t5 USING PRIM
3760: 41 52 59 20 4b 45 59 7d 7d 0a 20 20 64 6f 5f 74  ARY KEY}}.  do_t
3770: 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 37 2e 36  est analyze2-7.6
3780: 20 7b 0a 20 20 20 20 69 6e 63 72 5f 73 63 68 65   {.    incr_sche
3790: 6d 61 5f 63 6f 6f 6b 69 65 20 74 65 73 74 2e 64  ma_cookie test.d
37a0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  b.    execsql { 
37b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
37c0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 20 64 62  lite_master } db
37d0: 32 0a 20 20 20 20 65 71 70 20 7b 20 53 45 4c 45  2.    eqp { SELE
37e0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 2c 74 36 20  CT * FROM t5,t6 
37f0: 57 48 45 52 45 20 74 35 2e 72 6f 77 69 64 3d 74  WHERE t5.rowid=t
3800: 36 2e 72 6f 77 69 64 20 41 4e 44 20 0a 20 20 20  6.rowid AND .   
3810: 20 20 20 20 20 20 20 74 35 2e 61 3e 31 20 41 4e         t5.a>1 AN
3820: 44 20 74 35 2e 61 3c 31 35 20 41 4e 44 0a 20 20  D t5.a<15 AND.  
3830: 20 20 20 20 20 20 20 20 74 36 2e 61 3e 31 0a 20          t6.a>1. 
3840: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 30 20     } db2.  } {0 
3850: 31 20 7b 54 41 42 4c 45 20 74 36 20 57 49 54 48  1 {TABLE t6 WITH
3860: 20 49 4e 44 45 58 20 74 36 69 7d 20 31 20 30 20   INDEX t6i} 1 0 
3870: 7b 54 41 42 4c 45 20 74 35 20 55 53 49 4e 47 20  {TABLE t5 USING 
3880: 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a 20 20  PRIMARY KEY}}.  
3890: 64 6f 5f 74 65 73 74 20 61 6e 61 6c 79 7a 65 32  do_test analyze2
38a0: 2d 37 2e 37 20 7b 0a 20 20 20 20 69 6e 63 72 5f  -7.7 {.    incr_
38b0: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 74 65  schema_cookie te
38c0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
38d0: 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  l { SELECT * FRO
38e0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
38f0: 7d 20 64 62 31 0a 20 20 20 20 65 71 70 20 7b 20  } db1.    eqp { 
3900: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
3910: 2c 74 36 20 57 48 45 52 45 20 74 35 2e 72 6f 77  ,t6 WHERE t5.row
3920: 69 64 3d 74 36 2e 72 6f 77 69 64 20 41 4e 44 20  id=t6.rowid AND 
3930: 0a 20 20 20 20 20 20 20 20 20 20 74 35 2e 61 3e  .          t5.a>
3940: 31 20 41 4e 44 20 74 35 2e 61 3c 31 35 20 41 4e  1 AND t5.a<15 AN
3950: 44 0a 20 20 20 20 20 20 20 20 20 20 74 36 2e 61  D.          t6.a
3960: 3e 31 0a 20 20 20 20 7d 20 64 62 31 0a 20 20 7d  >1.    } db1.  }
3970: 20 7b 30 20 31 20 7b 54 41 42 4c 45 20 74 36 20   {0 1 {TABLE t6 
3980: 57 49 54 48 20 49 4e 44 45 58 20 74 36 69 7d 20  WITH INDEX t6i} 
3990: 31 20 30 20 7b 54 41 42 4c 45 20 74 35 20 55 53  1 0 {TABLE t5 US
39a0: 49 4e 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d  ING PRIMARY KEY}
39b0: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 61 6e 61  }..  do_test ana
39c0: 6c 79 7a 65 32 2d 37 2e 38 20 7b 0a 20 20 20 20  lyze2-7.8 {.    
39d0: 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45  execsql { DELETE
39e0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61   FROM sqlite_sta
39f0: 74 32 20 7d 20 64 62 32 0a 20 20 20 20 65 78 65  t2 } db2.    exe
3a00: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
3a10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
3a20: 65 72 20 7d 20 64 62 31 0a 20 20 20 20 65 71 70  er } db1.    eqp
3a30: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
3a40: 20 74 35 2c 74 36 20 57 48 45 52 45 20 74 35 2e   t5,t6 WHERE t5.
3a50: 72 6f 77 69 64 3d 74 36 2e 72 6f 77 69 64 20 41  rowid=t6.rowid A
3a60: 4e 44 20 0a 20 20 20 20 20 20 20 20 20 20 74 35  ND .          t5
3a70: 2e 61 3e 31 20 41 4e 44 20 74 35 2e 61 3c 31 35  .a>1 AND t5.a<15
3a80: 20 41 4e 44 0a 20 20 20 20 20 20 20 20 20 20 74   AND.          t
3a90: 36 2e 61 3e 31 0a 20 20 20 20 7d 20 64 62 31 0a  6.a>1.    } db1.
3aa0: 20 20 7d 20 7b 30 20 31 20 7b 54 41 42 4c 45 20    } {0 1 {TABLE 
3ab0: 74 36 20 57 49 54 48 20 49 4e 44 45 58 20 74 36  t6 WITH INDEX t6
3ac0: 69 7d 20 31 20 30 20 7b 54 41 42 4c 45 20 74 35  i} 1 0 {TABLE t5
3ad0: 20 55 53 49 4e 47 20 50 52 49 4d 41 52 59 20 4b   USING PRIMARY K
3ae0: 45 59 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  EY}}.  do_test a
3af0: 6e 61 6c 79 7a 65 32 2d 37 2e 39 20 7b 0a 20 20  nalyze2-7.9 {.  
3b00: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
3b10: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
3b20: 5f 6d 61 73 74 65 72 20 7d 20 64 62 32 0a 20 20  _master } db2.  
3b30: 20 20 65 71 70 20 7b 20 53 45 4c 45 43 54 20 2a    eqp { SELECT *
3b40: 20 46 52 4f 4d 20 74 35 2c 74 36 20 57 48 45 52   FROM t5,t6 WHER
3b50: 45 20 74 35 2e 72 6f 77 69 64 3d 74 36 2e 72 6f  E t5.rowid=t6.ro
3b60: 77 69 64 20 41 4e 44 20 0a 20 20 20 20 20 20 20  wid AND .       
3b70: 20 20 20 74 35 2e 61 3e 31 20 41 4e 44 20 74 35     t5.a>1 AND t5
3b80: 2e 61 3c 31 35 20 41 4e 44 0a 20 20 20 20 20 20  .a<15 AND.      
3b90: 20 20 20 20 74 36 2e 61 3e 31 0a 20 20 20 20 7d      t6.a>1.    }
3ba0: 20 64 62 32 0a 20 20 7d 20 7b 30 20 31 20 7b 54   db2.  } {0 1 {T
3bb0: 41 42 4c 45 20 74 36 20 57 49 54 48 20 49 4e 44  ABLE t6 WITH IND
3bc0: 45 58 20 74 36 69 7d 20 31 20 30 20 7b 54 41 42  EX t6i} 1 0 {TAB
3bd0: 4c 45 20 74 35 20 55 53 49 4e 47 20 50 52 49 4d  LE t5 USING PRIM
3be0: 41 52 59 20 4b 45 59 7d 7d 0a 0a 20 20 64 6f 5f  ARY KEY}}..  do_
3bf0: 74 65 73 74 20 61 6e 61 6c 79 7a 65 32 2d 37 2e  test analyze2-7.
3c00: 31 30 20 7b 0a 20 20 20 20 69 6e 63 72 5f 73 63  10 {.    incr_sc
3c10: 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 74 65 73 74  hema_cookie test
3c20: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
3c30: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
3c40: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 20  sqlite_master } 
3c50: 64 62 31 0a 20 20 20 20 65 71 70 20 7b 20 53 45  db1.    eqp { SE
3c60: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 2c 74  LECT * FROM t5,t
3c70: 36 20 57 48 45 52 45 20 74 35 2e 72 6f 77 69 64  6 WHERE t5.rowid
3c80: 3d 74 36 2e 72 6f 77 69 64 20 41 4e 44 20 0a 20  =t6.rowid AND . 
3c90: 20 20 20 20 20 20 20 20 20 74 35 2e 61 3e 31 20           t5.a>1 
3ca0: 41 4e 44 20 74 35 2e 61 3c 31 35 20 41 4e 44 0a  AND t5.a<15 AND.
3cb0: 20 20 20 20 20 20 20 20 20 20 74 36 2e 61 3e 31            t6.a>1
3cc0: 0a 20 20 20 20 7d 20 64 62 31 0a 20 20 7d 20 7b  .    } db1.  } {
3cd0: 30 20 30 20 7b 54 41 42 4c 45 20 74 35 20 57 49  0 0 {TABLE t5 WI
3ce0: 54 48 20 49 4e 44 45 58 20 74 35 69 7d 20 31 20  TH INDEX t5i} 1 
3cf0: 31 20 7b 54 41 42 4c 45 20 74 36 20 55 53 49 4e  1 {TABLE t6 USIN
3d00: 47 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a  G PRIMARY KEY}}.
3d10: 0a 20 20 64 62 31 20 63 6c 6f 73 65 0a 20 20 64  .  db1 close.  d
3d20: 62 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  b2 close.  sqlit
3d30: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
3d40: 5f 63 61 63 68 65 20 24 3a 3a 65 6e 61 62 6c 65  _cache $::enable
3d50: 5f 73 68 61 72 65 64 5f 63 61 63 68 65 0a 7d 0a  _shared_cache.}.
3d60: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.