/ Hex Artifact Content
Login

Artifact ca5c296989d3045f121be9a67588ff88c64874a8:


0000: 23 20 32 30 30 32 20 46 65 62 72 75 61 72 79 20  # 2002 February 
0010: 32 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  26.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 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 20 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
01c0: 73 20 74 65 73 74 69 6e 67 20 56 49 45 57 20 73  s testing VIEW s
01d0: 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 24  tatements..#.# $
01e0: 49 64 3a 20 76 69 65 77 2e 74 65 73 74 2c 76 20  Id: view.test,v 
01f0: 31 2e 31 38 20 32 30 30 34 2f 30 37 2f 32 30 20  1.18 2004/07/20 
0200: 30 30 3a 32 30 3a 32 33 20 64 72 68 20 45 78 70  00:20:23 drh Exp
0210: 20 24 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b   $.set testdir [
0220: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0230: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0240: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0250: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 2e  .do_test view-1.
0260: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
0270: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0280: 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20   t1(a,b,c);.    
0290: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
02a0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
02b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
02c0: 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29 3b 0a   VALUES(4,5,6);.
02d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
02e0: 74 31 20 56 41 4c 55 45 53 28 37 2c 38 2c 39 29  t1 VALUES(7,8,9)
02f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0300: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
0310: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39   2 3 4 5 6 7 8 9
0320: 7d 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  }..do_test view-
0330: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
0340: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
0350: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20   CREATE VIEW v1 
0360: 41 53 20 53 45 4c 45 43 54 20 61 2c 62 20 46 52  AS SELECT a,b FR
0370: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
0380: 54 20 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44 45  T * FROM v1 ORDE
0390: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY a;.  }.} {1
03a0: 20 32 20 34 20 35 20 37 20 38 7d 0a 64 6f 5f 74   2 4 5 7 8}.do_t
03b0: 65 73 74 20 76 69 65 77 2d 31 2e 32 20 7b 0a 20  est view-1.2 {. 
03c0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
03d0: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45  ROLLBACK;.    SE
03e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 4f  LECT * FROM v1 O
03f0: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
0400: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
0410: 6c 65 3a 20 76 31 7d 7d 0a 64 6f 5f 74 65 73 74  le: v1}}.do_test
0420: 20 76 69 65 77 2d 31 2e 33 20 7b 0a 20 20 65 78   view-1.3 {.  ex
0430: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0440: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
0450: 4c 45 43 54 20 61 2c 62 20 46 52 4f 4d 20 74 31  LECT a,b FROM t1
0460: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0470: 52 4f 4d 20 76 31 20 4f 52 44 45 52 20 42 59 20  ROM v1 ORDER BY 
0480: 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 34 20  a;.  }.} {1 2 4 
0490: 35 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74 20 76  5 7 8}.do_test v
04a0: 69 65 77 2d 31 2e 33 2e 31 20 7b 0a 20 20 64 62  iew-1.3.1 {.  db
04b0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
04c0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
04d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
04e0: 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44  CT * FROM v1 ORD
04f0: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
0500: 31 20 32 20 34 20 35 20 37 20 38 7d 0a 64 6f 5f  1 2 4 5 7 8}.do_
0510: 74 65 73 74 20 76 69 65 77 2d 31 2e 34 20 7b 0a  test view-1.4 {.
0520: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
0530: 20 44 52 4f 50 20 56 49 45 57 20 76 31 3b 0a 20   DROP VIEW v1;. 
0540: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0550: 20 76 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   v1 ORDER BY a;.
0560: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63    }.} {1 {no suc
0570: 68 20 74 61 62 6c 65 3a 20 76 31 7d 7d 0a 64 6f  h table: v1}}.do
0580: 5f 74 65 73 74 20 76 69 65 77 2d 31 2e 35 20 7b  _test view-1.5 {
0590: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
05a0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20   CREATE VIEW v1 
05b0: 41 53 20 53 45 4c 45 43 54 20 61 2c 62 20 46 52  AS SELECT a,b FR
05c0: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
05d0: 54 20 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44 45  T * FROM v1 ORDE
05e0: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY a;.  }.} {1
05f0: 20 32 20 34 20 35 20 37 20 38 7d 0a 64 6f 5f 74   2 4 5 7 8}.do_t
0600: 65 73 74 20 76 69 65 77 2d 31 2e 36 20 7b 0a 20  est view-1.6 {. 
0610: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0620: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
0630: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0640: 20 76 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   v1 ORDER BY a;.
0650: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63    }.} {1 {no suc
0660: 68 20 74 61 62 6c 65 3a 20 6d 61 69 6e 2e 74 31  h table: main.t1
0670: 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  }}.do_test view-
0680: 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.7 {.  execsql 
0690: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
06a0: 4c 45 20 74 31 28 78 2c 61 2c 62 2c 63 29 3b 0a  LE t1(x,a,b,c);.
06b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
06c0: 74 31 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 2c  t1 VALUES(1,2,3,
06d0: 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  4);.    INSERT I
06e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c  NTO t1 VALUES(4,
06f0: 35 2c 36 2c 37 29 3b 0a 20 20 20 20 49 4e 53 45  5,6,7);.    INSE
0700: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0710: 53 28 37 2c 38 2c 39 2c 31 30 29 3b 0a 20 20 20  S(7,8,9,10);.   
0720: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
0730: 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  1 ORDER BY a;.  
0740: 7d 0a 7d 20 7b 32 20 33 20 35 20 36 20 38 20 39  }.} {2 3 5 6 8 9
0750: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31  }.do_test view-1
0760: 2e 38 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .8 {.  db close.
0770: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
0780: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0790: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
07a0: 4f 4d 20 76 31 20 4f 52 44 45 52 20 42 59 20 61  OM v1 ORDER BY a
07b0: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33 20 35 20 36  ;.  }.} {2 3 5 6
07c0: 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 76   8 9}..do_test v
07d0: 69 65 77 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63  iew-2.1 {.  exec
07e0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
07f0: 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c 45   VIEW v2 AS SELE
0800: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
0810: 52 45 20 61 3e 35 0a 20 20 7d 3b 20 20 23 20 4e  RE a>5.  };  # N
0820: 6f 20 73 65 6d 69 63 6f 6c 6f 6e 0a 20 20 65 78  o semicolon.  ex
0830: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
0840: 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 3b 0a 20  ECT * FROM v2;. 
0850: 20 7d 0a 7d 20 7b 78 20 37 20 61 20 38 20 62 20   }.} {x 7 a 8 b 
0860: 39 20 63 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  9 c 10}.do_test 
0870: 76 69 65 77 2d 32 2e 32 20 7b 0a 20 20 63 61 74  view-2.2 {.  cat
0880: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
0890: 52 54 20 49 4e 54 4f 20 76 32 20 56 41 4c 55 45  RT INTO v2 VALUE
08a0: 53 28 31 2c 32 2c 33 2c 34 29 3b 0a 20 20 7d 0a  S(1,2,3,4);.  }.
08b0: 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 6d 6f 64  } {1 {cannot mod
08c0: 69 66 79 20 76 32 20 62 65 63 61 75 73 65 20 69  ify v2 because i
08d0: 74 20 69 73 20 61 20 76 69 65 77 7d 7d 0a 64 6f  t is a view}}.do
08e0: 5f 74 65 73 74 20 76 69 65 77 2d 32 2e 33 20 7b  _test view-2.3 {
08f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
0900: 20 20 55 50 44 41 54 45 20 76 32 20 53 45 54 20    UPDATE v2 SET 
0910: 61 3d 31 30 20 57 48 45 52 45 20 61 3d 35 3b 0a  a=10 WHERE a=5;.
0920: 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74    }.} {1 {cannot
0930: 20 6d 6f 64 69 66 79 20 76 32 20 62 65 63 61 75   modify v2 becau
0940: 73 65 20 69 74 20 69 73 20 61 20 76 69 65 77 7d  se it is a view}
0950: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 32  }.do_test view-2
0960: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
0970: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
0980: 4d 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  M v2;.  }.} {1 {
0990: 63 61 6e 6e 6f 74 20 6d 6f 64 69 66 79 20 76 32  cannot modify v2
09a0: 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20 61   because it is a
09b0: 20 76 69 65 77 7d 7d 0a 64 6f 5f 74 65 73 74 20   view}}.do_test 
09c0: 76 69 65 77 2d 32 2e 35 20 7b 0a 20 20 65 78 65  view-2.5 {.  exe
09d0: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
09e0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
09f0: 28 31 31 2c 31 32 2c 31 33 2c 31 34 29 3b 0a 20  (11,12,13,14);. 
0a00: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0a10: 20 76 32 20 4f 52 44 45 52 20 42 59 20 78 3b 0a   v2 ORDER BY x;.
0a20: 20 20 7d 0a 7d 20 7b 37 20 38 20 39 20 31 30 20    }.} {7 8 9 10 
0a30: 31 31 20 31 32 20 31 33 20 31 34 7d 0a 64 6f 5f  11 12 13 14}.do_
0a40: 74 65 73 74 20 76 69 65 77 2d 32 2e 36 20 7b 0a  test view-2.6 {.
0a50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0a60: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 76 32  SELECT x FROM v2
0a70: 20 57 48 45 52 45 20 61 3e 31 30 0a 20 20 7d 0a   WHERE a>10.  }.
0a80: 7d 20 7b 31 31 7d 0a 0a 23 20 54 65 73 74 20 74  } {11}..# Test t
0a90: 68 61 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  hat column name 
0aa0: 6f 66 20 76 69 65 77 73 20 61 72 65 20 67 65 6e  of views are gen
0ab0: 65 72 61 74 65 64 20 63 6f 72 72 65 63 74 6c 79  erated correctly
0ac0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  ..#.do_test view
0ad0: 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.1 {.  execsql
0ae0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2 {.    SELECT *
0af0: 20 46 52 4f 4d 20 76 31 20 4c 49 4d 49 54 20 31   FROM v1 LIMIT 1
0b00: 0a 20 20 7d 0a 7d 20 7b 61 20 32 20 62 20 33 7d  .  }.} {a 2 b 3}
0b10: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 33 2e  .do_test view-3.
0b20: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  2 {.  execsql2 {
0b30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0b40: 4f 4d 20 76 32 20 4c 49 4d 49 54 20 31 0a 20 20  OM v2 LIMIT 1.  
0b50: 7d 0a 7d 20 7b 78 20 37 20 61 20 38 20 62 20 39  }.} {x 7 a 8 b 9
0b60: 20 63 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 76   c 10}.do_test v
0b70: 69 65 77 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63  iew-3.3 {.  exec
0b80: 73 71 6c 32 20 7b 0a 20 20 20 20 44 52 4f 50 20  sql2 {.    DROP 
0b90: 56 49 45 57 20 76 31 3b 0a 20 20 20 20 43 52 45  VIEW v1;.    CRE
0ba0: 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53  ATE VIEW v1 AS S
0bb0: 45 4c 45 43 54 20 61 20 41 53 20 27 78 79 7a 27  ELECT a AS 'xyz'
0bc0: 2c 20 62 2b 63 20 41 53 20 27 70 71 72 27 2c 20  , b+c AS 'pqr', 
0bd0: 63 2d 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  c-b FROM t1;.   
0be0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
0bf0: 31 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20  1 LIMIT 1.  }.} 
0c00: 7b 78 79 7a 20 32 20 70 71 72 20 37 20 63 2d 62  {xyz 2 pqr 7 c-b
0c10: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 20 76 69 65   1}.do_test  vie
0c20: 77 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  w-3.4 {.  execsq
0c30: 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  l2 {.    CREATE 
0c40: 56 49 45 57 20 76 33 20 41 53 20 53 45 4c 45 43  VIEW v3 AS SELEC
0c50: 54 20 61 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f  T a FROM t1 UNIO
0c60: 4e 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20  N SELECT b FROM 
0c70: 74 31 20 4f 52 44 45 52 20 42 59 20 62 3b 0a 20  t1 ORDER BY b;. 
0c80: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0c90: 20 76 33 20 4c 49 4d 49 54 20 34 3b 0a 20 20 7d   v3 LIMIT 4;.  }
0ca0: 0a 7d 20 7b 62 20 32 20 62 20 33 20 62 20 35 20  .} {b 2 b 3 b 5 
0cb0: 62 20 36 7d 0a 64 6f 5f 74 65 73 74 20 20 76 69  b 6}.do_test  vi
0cc0: 65 77 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63 73  ew-3.5 {.  execs
0cd0: 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54 45  ql2 {.    CREATE
0ce0: 20 56 49 45 57 20 76 34 20 41 53 20 0a 20 20 20   VIEW v4 AS .   
0cf0: 20 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46     SELECT a, b F
0d00: 52 4f 4d 20 74 31 20 0a 20 20 20 20 20 20 55 4e  ROM t1 .      UN
0d10: 49 4f 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54  ION.      SELECT
0d20: 20 62 20 41 53 20 27 78 27 2c 20 61 20 41 53 20   b AS 'x', a AS 
0d30: 27 79 27 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  'y' FROM t1.    
0d40: 20 20 4f 52 44 45 52 20 42 59 20 78 2c 20 79 3b    ORDER BY x, y;
0d50: 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
0d60: 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 79  OM v4 ORDER BY y
0d70: 20 4c 49 4d 49 54 20 34 3b 0a 20 20 7d 0a 7d 20   LIMIT 4;.  }.} 
0d80: 7b 79 20 32 20 79 20 33 20 79 20 35 20 79 20 36  {y 2 y 3 y 5 y 6
0d90: 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  }...do_test view
0da0: 2d 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  -4.1 {.  catchsq
0db0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 56 49 45  l {.    DROP VIE
0dc0: 57 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  W t1;.  }.} {1 {
0dd0: 75 73 65 20 44 52 4f 50 20 54 41 42 4c 45 20 74  use DROP TABLE t
0de0: 6f 20 64 65 6c 65 74 65 20 74 61 62 6c 65 20 74  o delete table t
0df0: 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  1}}.do_test view
0e00: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
0e10: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 31 20   {.    SELECT 1 
0e20: 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20 31 3b  FROM t1 LIMIT 1;
0e30: 0a 20 20 7d 0a 7d 20 31 0a 64 6f 5f 74 65 73 74  .  }.} 1.do_test
0e40: 20 76 69 65 77 2d 34 2e 33 20 7b 0a 20 20 63 61   view-4.3 {.  ca
0e50: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
0e60: 50 20 54 41 42 4c 45 20 76 31 3b 0a 20 20 7d 0a  P TABLE v1;.  }.
0e70: 7d 20 7b 31 20 7b 75 73 65 20 44 52 4f 50 20 56  } {1 {use DROP V
0e80: 49 45 57 20 74 6f 20 64 65 6c 65 74 65 20 76 69  IEW to delete vi
0e90: 65 77 20 76 31 7d 7d 0a 64 6f 5f 74 65 73 74 20  ew v1}}.do_test 
0ea0: 76 69 65 77 2d 34 2e 34 20 7b 0a 20 20 65 78 65  view-4.4 {.  exe
0eb0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45  csql {.     SELE
0ec0: 43 54 20 31 20 46 52 4f 4d 20 76 31 20 4c 49 4d  CT 1 FROM v1 LIM
0ed0: 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  IT 1;.  }.} {1}.
0ee0: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 34 2e 35  do_test view-4.5
0ef0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
0f00: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
0f10: 20 69 31 76 31 20 4f 4e 20 76 31 28 78 79 7a 29   i1v1 ON v1(xyz)
0f20: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 76 69 65 77  ;.  }.} {1 {view
0f30: 73 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 6e 64  s may not be ind
0f40: 65 78 65 64 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  exed}}..do_test 
0f50: 76 69 65 77 2d 35 2e 31 20 7b 0a 20 20 65 78 65  view-5.1 {.  exe
0f60: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0f70: 45 20 54 41 42 4c 45 20 74 32 28 79 2c 61 29 3b  E TABLE t2(y,a);
0f80: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0f90: 20 74 32 20 56 41 4c 55 45 53 28 32 32 2c 32 29   t2 VALUES(22,2)
0fa0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0fb0: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 33 2c 33  O t2 VALUES(33,3
0fc0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0fd0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34 34 2c  TO t2 VALUES(44,
0fe0: 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  4);.    INSERT I
0ff0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 35 35  NTO t2 VALUES(55
1000: 2c 35 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,5);.    SELECT 
1010: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  * FROM t2;.  }.}
1020: 20 7b 32 32 20 32 20 33 33 20 33 20 34 34 20 34   {22 2 33 3 44 4
1030: 20 35 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 76   55 5}.do_test v
1040: 69 65 77 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  iew-5.2 {.  exec
1050: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1060: 20 56 49 45 57 20 76 35 20 41 53 0a 20 20 20 20   VIEW v5 AS.    
1070: 20 20 53 45 4c 45 43 54 20 74 31 2e 78 20 41 53    SELECT t1.x AS
1080: 20 76 2c 20 74 32 2e 79 20 41 53 20 77 20 46 52   v, t2.y AS w FR
1090: 4f 4d 20 74 31 20 4a 4f 49 4e 20 74 32 20 55 53  OM t1 JOIN t2 US
10a0: 49 4e 47 28 61 29 3b 0a 20 20 20 20 53 45 4c 45  ING(a);.    SELE
10b0: 43 54 20 2a 20 46 52 4f 4d 20 76 35 3b 0a 20 20  CT * FROM v5;.  
10c0: 7d 0a 7d 20 7b 31 20 32 32 20 34 20 35 35 7d 0a  }.} {1 22 4 55}.
10d0: 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20 74  .# Verify that t
10e0: 68 65 20 76 69 65 77 20 76 35 20 67 65 74 73 20  he view v5 gets 
10f0: 66 6c 61 74 74 65 6e 65 64 2e 20 20 73 65 65 20  flattened.  see 
1100: 73 71 6c 69 74 65 46 6c 61 74 74 65 6e 53 75 62  sqliteFlattenSub
1110: 71 75 65 72 79 28 29 2e 0a 23 20 54 69 63 6b 65  query()..# Ticke
1120: 74 20 23 32 37 32 0a 64 6f 5f 74 65 73 74 20 76  t #272.do_test v
1130: 69 65 77 2d 35 2e 33 20 7b 0a 20 20 6c 73 65 61  iew-5.3 {.  lsea
1140: 72 63 68 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20  rch [execsql {. 
1150: 20 20 20 45 58 50 4c 41 49 4e 20 53 45 4c 45 43     EXPLAIN SELEC
1160: 54 20 2a 20 46 52 4f 4d 20 76 35 3b 0a 20 20 7d  T * FROM v5;.  }
1170: 5d 20 4f 70 65 6e 54 65 6d 70 0a 7d 20 7b 2d 31  ] OpenTemp.} {-1
1180: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 35  }.do_test view-5
1190: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
11a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
11b0: 4f 4d 20 76 35 20 41 53 20 61 2c 20 74 32 20 41  OM v5 AS a, t2 A
11c0: 53 20 62 20 57 48 45 52 45 20 61 2e 77 3d 62 2e  S b WHERE a.w=b.
11d0: 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 32 20 32  y;.  }.} {1 22 2
11e0: 32 20 32 20 34 20 35 35 20 35 35 20 35 7d 0a 64  2 2 4 55 55 5}.d
11f0: 6f 5f 74 65 73 74 20 76 69 65 77 2d 35 2e 35 20  o_test view-5.5 
1200: 7b 0a 20 20 6c 73 65 61 72 63 68 20 5b 65 78 65  {.  lsearch [exe
1210: 63 73 71 6c 20 7b 0a 20 20 20 20 45 58 50 4c 41  csql {.    EXPLA
1220: 49 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  IN SELECT * FROM
1230: 20 76 35 20 41 53 20 61 2c 20 74 32 20 41 53 20   v5 AS a, t2 AS 
1240: 62 20 57 48 45 52 45 20 61 2e 77 3d 62 2e 79 3b  b WHERE a.w=b.y;
1250: 0a 20 20 7d 5d 20 4f 70 65 6e 54 65 6d 70 0a 7d  .  }] OpenTemp.}
1260: 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 76 69   {-1}.do_test vi
1270: 65 77 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63 73  ew-5.6 {.  execs
1280: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1290: 2a 20 46 52 4f 4d 20 74 32 20 41 53 20 62 2c 20  * FROM t2 AS b, 
12a0: 76 35 20 41 53 20 61 20 57 48 45 52 45 20 61 2e  v5 AS a WHERE a.
12b0: 77 3d 62 2e 79 3b 0a 20 20 7d 0a 7d 20 7b 32 32  w=b.y;.  }.} {22
12c0: 20 32 20 31 20 32 32 20 35 35 20 35 20 34 20 35   2 1 22 55 5 4 5
12d0: 35 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  5}.do_test view-
12e0: 35 2e 37 20 7b 0a 20 20 6c 73 65 61 72 63 68 20  5.7 {.  lsearch 
12f0: 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 45  [execsql {.    E
1300: 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20 2a 20  XPLAIN SELECT * 
1310: 46 52 4f 4d 20 74 32 20 41 53 20 62 2c 20 76 35  FROM t2 AS b, v5
1320: 20 41 53 20 61 20 57 48 45 52 45 20 61 2e 77 3d   AS a WHERE a.w=
1330: 62 2e 79 3b 0a 20 20 7d 5d 20 4f 70 65 6e 54 65  b.y;.  }] OpenTe
1340: 6d 70 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73  mp.} {-1}.do_tes
1350: 74 20 76 69 65 77 2d 35 2e 38 20 7b 0a 20 20 65  t view-5.8 {.  e
1360: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1370: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 41 53  ECT * FROM t1 AS
1380: 20 61 2c 20 76 35 20 41 53 20 62 2c 20 74 32 20   a, v5 AS b, t2 
1390: 41 53 20 63 20 57 48 45 52 45 20 61 2e 78 3d 62  AS c WHERE a.x=b
13a0: 2e 76 20 41 4e 44 20 62 2e 77 3d 63 2e 79 3b 0a  .v AND b.w=c.y;.
13b0: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 31    }.} {1 2 3 4 1
13c0: 20 32 32 20 32 32 20 32 20 34 20 35 20 36 20 37   22 22 2 4 5 6 7
13d0: 20 34 20 35 35 20 35 35 20 35 7d 0a 64 6f 5f 74   4 55 55 5}.do_t
13e0: 65 73 74 20 76 69 65 77 2d 35 2e 39 20 7b 0a 20  est view-5.9 {. 
13f0: 20 6c 73 65 61 72 63 68 20 5b 65 78 65 63 73 71   lsearch [execsq
1400: 6c 20 7b 0a 20 20 20 20 45 58 50 4c 41 49 4e 20  l {.    EXPLAIN 
1410: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1420: 20 41 53 20 61 2c 20 76 35 20 41 53 20 62 2c 20   AS a, v5 AS b, 
1430: 74 32 20 41 53 20 63 20 57 48 45 52 45 20 61 2e  t2 AS c WHERE a.
1440: 78 3d 62 2e 76 20 41 4e 44 20 62 2e 77 3d 63 2e  x=b.v AND b.w=c.
1450: 79 3b 0a 20 20 7d 5d 20 4f 70 65 6e 54 65 6d 70  y;.  }] OpenTemp
1460: 0a 7d 20 7b 2d 31 7d 0a 0a 64 6f 5f 74 65 73 74  .} {-1}..do_test
1470: 20 76 69 65 77 2d 36 2e 31 20 7b 0a 20 20 65 78   view-6.1 {.  ex
1480: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1490: 43 54 20 6d 69 6e 28 78 29 2c 20 6d 69 6e 28 61  CT min(x), min(a
14a0: 29 2c 20 6d 69 6e 28 62 29 2c 20 6d 69 6e 28 63  ), min(b), min(c
14b0: 29 2c 20 6d 69 6e 28 61 2b 62 2b 63 29 20 46 52  ), min(a+b+c) FR
14c0: 4f 4d 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b 37 20  OM v2;.  }.} {7 
14d0: 38 20 39 20 31 30 20 32 37 7d 0a 64 6f 5f 74 65  8 9 10 27}.do_te
14e0: 73 74 20 76 69 65 77 2d 36 2e 32 20 7b 0a 20 20  st view-6.2 {.  
14f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1500: 4c 45 43 54 20 6d 61 78 28 78 29 2c 20 6d 61 78  LECT max(x), max
1510: 28 61 29 2c 20 6d 61 78 28 62 29 2c 20 6d 61 78  (a), max(b), max
1520: 28 63 29 2c 20 6d 61 78 28 61 2b 62 2b 63 29 20  (c), max(a+b+c) 
1530: 46 52 4f 4d 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM v2;.  }.} {
1540: 31 31 20 31 32 20 31 33 20 31 34 20 33 39 7d 0a  11 12 13 14 39}.
1550: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 37 2e  .do_test view-7.
1560: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1570: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1580: 20 74 65 73 74 31 28 69 64 20 69 6e 74 65 67 65   test1(id intege
1590: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20 61  r primary key, a
15a0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
15b0: 42 4c 45 20 74 65 73 74 32 28 69 64 20 69 6e 74  BLE test2(id int
15c0: 65 67 65 72 2c 20 62 29 3b 0a 20 20 20 20 49 4e  eger, b);.    IN
15d0: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 20  SERT INTO test1 
15e0: 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20  VALUES(1,2);.   
15f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73   INSERT INTO tes
1600: 74 32 20 56 41 4c 55 45 53 28 31 2c 33 29 3b 0a  t2 VALUES(1,3);.
1610: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
1620: 74 65 73 74 20 41 53 0a 20 20 20 20 20 20 53 45  test AS.      SE
1630: 4c 45 43 54 20 74 65 73 74 31 2e 69 64 2c 20 61  LECT test1.id, a
1640: 2c 20 62 0a 20 20 20 20 20 20 46 52 4f 4d 20 74  , b.      FROM t
1650: 65 73 74 31 20 4a 4f 49 4e 20 74 65 73 74 32 20  est1 JOIN test2 
1660: 4f 4e 20 74 65 73 74 32 2e 69 64 3d 74 65 73 74  ON test2.id=test
1670: 31 2e 69 64 3b 0a 20 20 20 20 53 45 4c 45 43 54  1.id;.    SELECT
1680: 20 2a 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20   * FROM test;.  
1690: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
16a0: 65 73 74 20 76 69 65 77 2d 37 2e 32 20 7b 0a 20  est view-7.2 {. 
16b0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
16c0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
16d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
16e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
16f0: 74 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  t;.  }.} {1 2 3}
1700: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 37 2e  .do_test view-7.
1710: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1720: 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 74 65      DROP VIEW te
1730: 73 74 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  st;.    CREATE V
1740: 49 45 57 20 74 65 73 74 20 41 53 0a 20 20 20 20  IEW test AS.    
1750: 20 20 53 45 4c 45 43 54 20 74 65 73 74 31 2e 69    SELECT test1.i
1760: 64 2c 20 61 2c 20 62 0a 20 20 20 20 20 20 46 52  d, a, b.      FR
1770: 4f 4d 20 74 65 73 74 31 20 4a 4f 49 4e 20 74 65  OM test1 JOIN te
1780: 73 74 32 20 55 53 49 4e 47 28 69 64 29 3b 0a 20  st2 USING(id);. 
1790: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
17a0: 20 74 65 73 74 3b 0a 20 20 7d 0a 7d 20 7b 31 20   test;.  }.} {1 
17b0: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65  2 3}.do_test vie
17c0: 77 2d 37 2e 34 20 7b 0a 20 20 64 62 20 63 6c 6f  w-7.4 {.  db clo
17d0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
17e0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
17f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
1800: 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a   FROM test;.  }.
1810: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {1 2 3}.do_tes
1820: 74 20 76 69 65 77 2d 37 2e 35 20 7b 0a 20 20 65  t view-7.5 {.  e
1830: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
1840: 50 20 56 49 45 57 20 74 65 73 74 3b 0a 20 20 20  P VIEW test;.   
1850: 20 43 52 45 41 54 45 20 56 49 45 57 20 74 65 73   CREATE VIEW tes
1860: 74 20 41 53 0a 20 20 20 20 20 20 53 45 4c 45 43  t AS.      SELEC
1870: 54 20 74 65 73 74 31 2e 69 64 2c 20 61 2c 20 62  T test1.id, a, b
1880: 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74  .      FROM test
1890: 31 20 4e 41 54 55 52 41 4c 20 4a 4f 49 4e 20 74  1 NATURAL JOIN t
18a0: 65 73 74 32 3b 0a 20 20 20 20 53 45 4c 45 43 54  est2;.    SELECT
18b0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20   * FROM test;.  
18c0: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
18d0: 65 73 74 20 76 69 65 77 2d 37 2e 36 20 7b 0a 20  est view-7.6 {. 
18e0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
18f0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
1900: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1910: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
1920: 74 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  t;.  }.} {1 2 3}
1930: 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 38  ..do_test view-8
1940: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1950: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57  .    CREATE VIEW
1960: 20 76 36 20 41 53 20 53 45 4c 45 43 54 20 70 71   v6 AS SELECT pq
1970: 72 2c 20 78 79 7a 20 46 52 4f 4d 20 76 31 3b 0a  r, xyz FROM v1;.
1980: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1990: 4d 20 76 36 20 4f 52 44 45 52 20 42 59 20 78 79  M v6 ORDER BY xy
19a0: 7a 3b 0a 20 20 7d 0a 7d 20 7b 37 20 32 20 31 33  z;.  }.} {7 2 13
19b0: 20 35 20 31 39 20 38 20 32 37 20 31 32 7d 0a 64   5 19 8 27 12}.d
19c0: 6f 5f 74 65 73 74 20 76 69 65 77 2d 38 2e 32 20  o_test view-8.2 
19d0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
19e0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
19f0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
1a00: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1a10: 76 36 20 4f 52 44 45 52 20 42 59 20 78 79 7a 3b  v6 ORDER BY xyz;
1a20: 0a 20 20 7d 0a 7d 20 7b 37 20 32 20 31 33 20 35  .  }.} {7 2 13 5
1a30: 20 31 39 20 38 20 32 37 20 31 32 7d 0a 64 6f 5f   19 8 27 12}.do_
1a40: 74 65 73 74 20 76 69 65 77 2d 38 2e 33 20 7b 0a  test view-8.3 {.
1a50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1a60: 43 52 45 41 54 45 20 56 49 45 57 20 76 37 20 41  CREATE VIEW v7 A
1a70: 53 20 53 45 4c 45 43 54 20 70 71 72 2b 78 79 7a  S SELECT pqr+xyz
1a80: 20 41 53 20 61 20 46 52 4f 4d 20 76 36 3b 0a 20   AS a FROM v6;. 
1a90: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1aa0: 20 76 37 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   v7 ORDER BY a;.
1ab0: 20 20 7d 0a 7d 20 7b 39 20 31 38 20 32 37 20 33    }.} {9 18 27 3
1ac0: 39 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  9}.do_test view-
1ad0: 38 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.4 {.  execsql 
1ae0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  {.    CREATE VIE
1af0: 57 20 76 38 20 41 53 20 53 45 4c 45 43 54 20 6d  W v8 AS SELECT m
1b00: 61 78 28 63 6e 74 29 20 41 53 20 6d 78 20 46 52  ax(cnt) AS mx FR
1b10: 4f 4d 0a 20 20 20 20 20 20 28 53 45 4c 45 43 54  OM.      (SELECT
1b20: 20 61 25 32 20 41 53 20 65 6f 2c 20 63 6f 75 6e   a%2 AS eo, coun
1b30: 74 28 2a 29 20 41 53 20 63 6e 74 20 46 52 4f 4d  t(*) AS cnt FROM
1b40: 20 74 31 20 47 52 4f 55 50 20 42 59 20 65 6f 29   t1 GROUP BY eo)
1b50: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1b60: 52 4f 4d 20 76 38 3b 0a 20 20 7d 0a 7d 20 33 0a  ROM v8;.  }.} 3.
1b70: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 38 2e 35  do_test view-8.5
1b80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1b90: 20 20 20 53 45 4c 45 43 54 20 6d 78 2b 31 30 2c     SELECT mx+10,
1ba0: 20 6d 78 2a 32 20 46 52 4f 4d 20 76 38 3b 0a 20   mx*2 FROM v8;. 
1bb0: 20 7d 0a 7d 20 7b 31 33 20 36 7d 0a 64 6f 5f 74   }.} {13 6}.do_t
1bc0: 65 73 74 20 76 69 65 77 2d 38 2e 36 20 7b 0a 20  est view-8.6 {. 
1bd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1be0: 45 4c 45 43 54 20 6d 78 2b 31 30 2c 20 70 71 72  ELECT mx+10, pqr
1bf0: 20 46 52 4f 4d 20 76 36 2c 20 76 38 20 57 48 45   FROM v6, v8 WHE
1c00: 52 45 20 78 79 7a 3d 32 3b 0a 20 20 7d 0a 7d 20  RE xyz=2;.  }.} 
1c10: 7b 31 33 20 37 7d 0a 64 6f 5f 74 65 73 74 20 76  {13 7}.do_test v
1c20: 69 65 77 2d 38 2e 37 20 7b 0a 20 20 65 78 65 63  iew-8.7 {.  exec
1c30: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1c40: 20 6d 78 2b 31 30 2c 20 70 71 72 20 46 52 4f 4d   mx+10, pqr FROM
1c50: 20 76 36 2c 20 76 38 20 57 48 45 52 45 20 78 79   v6, v8 WHERE xy
1c60: 7a 3e 32 3b 0a 20 20 7d 0a 7d 20 7b 31 33 20 31  z>2;.  }.} {13 1
1c70: 33 20 31 33 20 31 39 20 31 33 20 32 37 7d 0a 0a  3 13 19 13 27}..
1c80: 23 20 54 65 73 74 73 20 66 6f 72 20 61 20 62 75  # Tests for a bu
1c90: 67 20 66 6f 75 6e 64 20 62 79 20 4d 69 63 68 69  g found by Michi
1ca0: 65 6c 20 64 65 20 57 69 74 20 69 6e 76 6f 6c 76  el de Wit involv
1cb0: 69 6e 67 20 4f 52 44 45 52 20 42 59 20 69 6e 20  ing ORDER BY in 
1cc0: 61 20 56 49 45 57 2e 0a 23 0a 64 6f 5f 74 65 73  a VIEW..#.do_tes
1cd0: 74 20 76 69 65 77 2d 39 2e 31 20 7b 0a 20 20 65  t view-9.1 {.  e
1ce0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
1cf0: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
1d00: 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45  CT * FROM t2 WHE
1d10: 52 45 20 61 3c 35 3b 0a 20 20 20 20 49 4e 53 45  RE a<5;.    INSE
1d20: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
1d30: 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T * FROM t2 WHER
1d40: 45 20 61 3c 34 3b 0a 20 20 20 20 49 4e 53 45 52  E a<4;.    INSER
1d50: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
1d60: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
1d70: 20 61 3c 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   a<3;.    SELECT
1d80: 20 44 49 53 54 49 4e 43 54 20 63 6f 75 6e 74 28   DISTINCT count(
1d90: 2a 29 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50  *) FROM t2 GROUP
1da0: 20 42 59 20 61 20 4f 52 44 45 52 20 42 59 20 31   BY a ORDER BY 1
1db0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 34 20 38  ;.  }.} {1 2 4 8
1dc0: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 39  }.do_test view-9
1dd0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1de0: 0a 20 20 20 20 53 45 4c 45 43 54 20 44 49 53 54  .    SELECT DIST
1df0: 49 4e 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  INCT count(*) FR
1e00: 4f 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 61  OM t2 GROUP BY a
1e10: 20 4f 52 44 45 52 20 42 59 20 31 20 4c 49 4d 49   ORDER BY 1 LIMI
1e20: 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  T 3;.  }.} {1 2 
1e30: 34 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  4}.do_test view-
1e40: 39 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.3 {.  execsql 
1e50: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  {.    CREATE VIE
1e60: 57 20 76 39 20 41 53 20 0a 20 20 20 20 20 20 20  W v9 AS .       
1e70: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
1e80: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32  count(*) FROM t2
1e90: 20 47 52 4f 55 50 20 42 59 20 61 20 4f 52 44 45   GROUP BY a ORDE
1ea0: 52 20 42 59 20 31 20 4c 49 4d 49 54 20 33 3b 0a  R BY 1 LIMIT 3;.
1eb0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1ec0: 4d 20 76 39 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M v9;.  }.} {1 2
1ed0: 20 34 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77   4}.do_test view
1ee0: 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.4 {.  execsql
1ef0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1f00: 46 52 4f 4d 20 76 39 20 4f 52 44 45 52 20 42 59  FROM v9 ORDER BY
1f10: 20 31 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   1 DESC;.  }.} {
1f20: 34 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 76  4 2 1}.do_test v
1f30: 69 65 77 2d 39 2e 35 20 7b 0a 20 20 65 78 65 63  iew-9.5 {.  exec
1f40: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1f50: 20 56 49 45 57 20 76 31 30 20 41 53 20 0a 20 20   VIEW v10 AS .  
1f60: 20 20 20 20 20 53 45 4c 45 43 54 20 44 49 53 54       SELECT DIST
1f70: 49 4e 43 54 20 61 2c 20 63 6f 75 6e 74 28 2a 29  INCT a, count(*)
1f80: 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20 42   FROM t2 GROUP B
1f90: 59 20 61 20 4f 52 44 45 52 20 42 59 20 32 20 4c  Y a ORDER BY 2 L
1fa0: 49 4d 49 54 20 33 3b 0a 20 20 20 20 53 45 4c 45  IMIT 3;.    SELE
1fb0: 43 54 20 2a 20 46 52 4f 4d 20 76 31 30 3b 0a 20  CT * FROM v10;. 
1fc0: 20 7d 0a 7d 20 7b 35 20 31 20 34 20 32 20 33 20   }.} {5 1 4 2 3 
1fd0: 34 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d  4}.do_test view-
1fe0: 39 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.6 {.  execsql 
1ff0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2000: 52 4f 4d 20 76 31 30 20 4f 52 44 45 52 20 42 59  ROM v10 ORDER BY
2010: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 33 20 34 20 34   1;.  }.} {3 4 4
2020: 20 32 20 35 20 31 7d 0a 0a 23 20 54 61 62 6c 65   2 5 1}..# Table
2030: 73 20 77 69 74 68 20 63 6f 6c 75 6d 6e 73 20 68  s with columns h
2040: 61 76 69 6e 67 20 70 65 63 75 6c 69 61 72 20 71  aving peculiar q
2050: 75 6f 74 65 64 20 6e 61 6d 65 73 20 75 73 65 64  uoted names used
2060: 20 69 6e 20 76 69 65 77 73 0a 23 20 54 69 63 6b   in views.# Tick
2070: 65 74 20 23 37 35 36 2e 0a 23 0a 64 6f 5f 74 65  et #756..#.do_te
2080: 73 74 20 76 69 65 77 2d 31 30 2e 31 20 7b 0a 20  st view-10.1 {. 
2090: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
20a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 22  REATE TABLE t3("
20b0: 39 22 20 69 6e 74 65 67 65 72 2c 20 5b 34 5d 20  9" integer, [4] 
20c0: 74 65 78 74 29 3b 0a 20 20 20 20 49 4e 53 45 52  text);.    INSER
20d0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
20e0: 28 31 2c 32 29 3b 0a 20 20 20 20 43 52 45 41 54  (1,2);.    CREAT
20f0: 45 20 56 49 45 57 20 76 5f 74 33 5f 61 20 41 53  E VIEW v_t3_a AS
2100: 20 53 45 4c 45 43 54 20 61 2e 5b 39 5d 20 46 52   SELECT a.[9] FR
2110: 4f 4d 20 74 33 20 41 53 20 61 3b 0a 20 20 20 20  OM t3 AS a;.    
2120: 43 52 45 41 54 45 20 56 49 45 57 20 76 5f 74 33  CREATE VIEW v_t3
2130: 5f 62 20 41 53 20 53 45 4c 45 43 54 20 22 34 22  _b AS SELECT "4"
2140: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 53 45   FROM t3;.    SE
2150: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 5f 74 33  LECT * FROM v_t3
2160: 5f 61 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  _a;.  }.} {1}.do
2170: 5f 74 65 73 74 20 76 69 65 77 2d 31 30 2e 32 20  _test view-10.2 
2180: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2190: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
21a0: 76 5f 74 33 5f 62 3b 0a 20 20 7d 0a 7d 20 7b 32  v_t3_b;.  }.} {2
21b0: 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     }..finish_test.