/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 10ea54300a097d7c0337fd104abffe4a4786d1598b94017a37efe0e0d3e04dd5:


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 33 39 20 32 30 30 38 2f 31 32 2f 31 34 20  1.39 2008/12/14 
0200: 31 34 3a 34 35 3a 32 31 20 64 61 6e 69 65 6c 6b  14:45:21 danielk
0210: 31 39 37 37 20 45 78 70 20 24 0a 73 65 74 20 74  1977 Exp $.set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 4f 6d 69 74 20  ter.tcl..# Omit 
0260: 74 68 69 73 20 65 6e 74 69 72 65 20 66 69 6c 65  this entire file
0270: 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   if the library 
0280: 69 73 20 6e 6f 74 20 63 6f 6e 66 69 67 75 72 65  is not configure
0290: 64 20 77 69 74 68 20 76 69 65 77 73 20 65 6e 61  d with views ena
02a0: 62 6c 65 64 2e 0a 69 66 63 61 70 61 62 6c 65 20  bled..ifcapable 
02b0: 21 76 69 65 77 20 7b 0a 20 20 66 69 6e 69 73 68  !view {.  finish
02c0: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
02d0: 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31  ..do_test view-1
02e0: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
02f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0300: 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t1(a,b,c);.   
0310: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0320: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20  VALUES(1,2,3);. 
0330: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0340: 31 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29 3b  1 VALUES(4,5,6);
0350: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0360: 20 74 31 20 56 41 4c 55 45 53 28 37 2c 38 2c 39   t1 VALUES(7,8,9
0370: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
0380: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
0390: 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20  1 2 3 4 5 6 7 8 
03a0: 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  9}..do_test view
03b0: 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.1 {.  execsql
03c0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
03d0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 49 46    CREATE VIEW IF
03e0: 20 4e 4f 54 20 45 58 49 53 54 53 20 76 31 20 41   NOT EXISTS v1 A
03f0: 53 20 53 45 4c 45 43 54 20 61 2c 62 20 46 52 4f  S SELECT a,b FRO
0400: 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t1;.    SELECT
0410: 20 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44 45 52   * FROM v1 ORDER
0420: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY a;.  }.} {1 
0430: 32 20 34 20 35 20 37 20 38 7d 0a 64 6f 5f 74 65  2 4 5 7 8}.do_te
0440: 73 74 20 76 69 65 77 2d 31 2e 31 2e 31 30 30 20  st view-1.1.100 
0450: 7b 0a 20 20 64 62 20 63 6f 6e 66 69 67 20 65 6e  {.  db config en
0460: 61 62 6c 65 5f 76 69 65 77 20 6f 66 66 0a 20 20  able_view off.  
0470: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
0480: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20  ELECT * FROM v1 
0490: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
04a0: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
04b0: 76 69 65 77 20 22 76 31 22 20 70 72 6f 68 69 62  view "v1" prohib
04c0: 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 76  ited}}.do_test v
04d0: 69 65 77 2d 31 2e 31 2e 31 31 30 20 7b 0a 20 20  iew-1.1.110 {.  
04e0: 64 62 20 63 6f 6e 66 69 67 20 65 6e 61 62 6c 65  db config enable
04f0: 5f 76 69 65 77 20 6f 6e 0a 20 20 63 61 74 63 68  _view on.  catch
0500: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0510: 20 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44 45 52   * FROM v1 ORDER
0520: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 30 20   BY a;.  }.} {0 
0530: 7b 31 20 32 20 34 20 35 20 37 20 38 7d 7d 0a 64  {1 2 4 5 7 8}}.d
0540: 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 2e 32 20  o_test view-1.2 
0550: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
0560: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
0570: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
0580: 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  1 ORDER BY a;.  
0590: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
05a0: 74 61 62 6c 65 3a 20 76 31 7d 7d 0a 64 6f 5f 74  table: v1}}.do_t
05b0: 65 73 74 20 76 69 65 77 2d 31 2e 33 20 7b 0a 20  est view-1.3 {. 
05c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
05d0: 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53  REATE VIEW v1 AS
05e0: 20 53 45 4c 45 43 54 20 61 2c 62 20 46 52 4f 4d   SELECT a,b FROM
05f0: 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   t1;.    SELECT 
0600: 2a 20 46 52 4f 4d 20 76 31 20 4f 52 44 45 52 20  * FROM v1 ORDER 
0610: 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  BY a;.  }.} {1 2
0620: 20 34 20 35 20 37 20 38 7d 0a 64 6f 5f 74 65 73   4 5 7 8}.do_tes
0630: 74 20 76 69 65 77 2d 31 2e 33 2e 31 20 7b 0a 20  t view-1.3.1 {. 
0640: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
0650: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
0660: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0670: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20  ELECT * FROM v1 
0680: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
0690: 7d 20 7b 31 20 32 20 34 20 35 20 37 20 38 7d 0a  } {1 2 4 5 7 8}.
06a0: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 2e 34  do_test view-1.4
06b0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
06c0: 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 49 46      DROP VIEW IF
06d0: 20 45 58 49 53 54 53 20 76 31 3b 0a 20 20 20 20   EXISTS v1;.    
06e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31  SELECT * FROM v1
06f0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
0700: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
0710: 61 62 6c 65 3a 20 76 31 7d 7d 0a 64 6f 5f 74 65  able: v1}}.do_te
0720: 73 74 20 76 69 65 77 2d 31 2e 35 20 7b 0a 20 20  st view-1.5 {.  
0730: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
0740: 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20  EATE VIEW v1 AS 
0750: 53 45 4c 45 43 54 20 61 2c 62 20 46 52 4f 4d 20  SELECT a,b FROM 
0760: 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t1;.    SELECT *
0770: 20 46 52 4f 4d 20 76 31 20 4f 52 44 45 52 20 42   FROM v1 ORDER B
0780: 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  Y a;.  }.} {1 2 
0790: 34 20 35 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74  4 5 7 8}.do_test
07a0: 20 76 69 65 77 2d 31 2e 36 20 7b 0a 20 20 63 61   view-1.6 {.  ca
07b0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
07c0: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
07d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31  SELECT * FROM v1
07e0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
07f0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
0800: 61 62 6c 65 3a 20 6d 61 69 6e 2e 74 31 7d 7d 0a  able: main.t1}}.
0810: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 2e 37  do_test view-1.7
0820: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0830: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0840: 74 31 28 78 2c 61 2c 62 2c 63 29 3b 0a 20 20 20  t1(x,a,b,c);.   
0850: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0860: 56 41 4c 55 45 53 28 31 2c 32 2c 33 2c 34 29 3b  VALUES(1,2,3,4);
0870: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0880: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 35 2c 36   t1 VALUES(4,5,6
0890: 2c 37 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,7);.    INSERT 
08a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 37  INTO t1 VALUES(7
08b0: 2c 38 2c 39 2c 31 30 29 3b 0a 20 20 20 20 53 45  ,8,9,10);.    SE
08c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 4f  LECT * FROM v1 O
08d0: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
08e0: 20 7b 32 20 33 20 35 20 36 20 38 20 39 7d 0a 64   {2 3 5 6 8 9}.d
08f0: 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 2e 38 20  o_test view-1.8 
0900: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
0910: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0920: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
0930: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0940: 76 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  v1 ORDER BY a;. 
0950: 20 7d 0a 7d 20 7b 32 20 33 20 35 20 36 20 38 20   }.} {2 3 5 6 8 
0960: 39 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  9}..do_execsql_t
0970: 65 73 74 20 76 69 65 77 2d 31 2e 31 30 20 7b 0a  est view-1.10 {.
0980: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0990: 39 28 78 20 49 4e 54 45 47 45 52 29 3b 0a 20 20  9(x INTEGER);.  
09a0: 43 52 45 41 54 45 20 56 49 45 57 20 76 39 61 20  CREATE VIEW v9a 
09b0: 41 53 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  AS SELECT x FROM
09c0: 20 74 39 3b 0a 20 20 43 52 45 41 54 45 20 56 49   t9;.  CREATE VI
09d0: 45 57 20 76 39 62 20 41 53 20 53 45 4c 45 43 54  EW v9b AS SELECT
09e0: 20 2a 20 46 52 4f 4d 20 74 39 3b 0a 20 20 43 52   * FROM t9;.  CR
09f0: 45 41 54 45 20 56 49 45 57 20 76 39 63 28 78 29  EATE VIEW v9c(x)
0a00: 20 41 53 20 53 45 4c 45 43 54 20 78 20 46 52 4f   AS SELECT x FRO
0a10: 4d 20 74 39 3b 0a 20 20 43 52 45 41 54 45 20 56  M t9;.  CREATE V
0a20: 49 45 57 20 76 39 64 28 78 29 20 41 53 20 53 45  IEW v9d(x) AS SE
0a30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 39 3b 0a  LECT * FROM t9;.
0a40: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
0a50: 74 65 73 74 20 76 69 65 77 2d 31 2e 31 31 20 7b  test view-1.11 {
0a60: 0a 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f  .  PRAGMA table_
0a70: 69 6e 66 6f 28 76 39 61 29 3b 0a 7d 20 7b 30 20  info(v9a);.} {0 
0a80: 78 20 49 4e 54 45 47 45 52 20 30 20 7b 7d 20 30  x INTEGER 0 {} 0
0a90: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0aa0: 74 20 76 69 65 77 2d 31 2e 31 32 20 7b 0a 20 20  t view-1.12 {.  
0ab0: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
0ac0: 6f 28 76 39 62 29 3b 0a 7d 20 7b 30 20 78 20 49  o(v9b);.} {0 x I
0ad0: 4e 54 45 47 45 52 20 30 20 7b 7d 20 30 7d 0a 64  NTEGER 0 {} 0}.d
0ae0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76  o_execsql_test v
0af0: 69 65 77 2d 31 2e 31 33 20 7b 0a 20 20 50 52 41  iew-1.13 {.  PRA
0b00: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 76  GMA table_info(v
0b10: 39 63 29 3b 0a 7d 20 7b 30 20 78 20 49 4e 54 45  9c);.} {0 x INTE
0b20: 47 45 52 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 65  GER 0 {} 0}.do_e
0b30: 78 65 63 73 71 6c 5f 74 65 73 74 20 76 69 65 77  xecsql_test view
0b40: 2d 31 2e 31 34 20 7b 0a 20 20 50 52 41 47 4d 41  -1.14 {.  PRAGMA
0b50: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 76 39 64 29   table_info(v9d)
0b60: 3b 0a 7d 20 7b 30 20 78 20 49 4e 54 45 47 45 52  ;.} {0 x INTEGER
0b70: 20 30 20 7b 7d 20 30 7d 0a 0a 64 6f 5f 74 65 73   0 {} 0}..do_tes
0b80: 74 20 76 69 65 77 2d 32 2e 31 20 7b 0a 20 20 65  t view-2.1 {.  e
0b90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0ba0: 41 54 45 20 56 49 45 57 20 76 32 20 41 53 20 53  ATE VIEW v2 AS S
0bb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0bc0: 57 48 45 52 45 20 61 3e 35 0a 20 20 7d 3b 20 20  WHERE a>5.  };  
0bd0: 23 20 4e 6f 20 73 65 6d 69 63 6f 6c 6f 6e 0a 20  # No semicolon. 
0be0: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
0bf0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32  SELECT * FROM v2
0c00: 3b 0a 20 20 7d 0a 7d 20 7b 78 20 37 20 61 20 38  ;.  }.} {x 7 a 8
0c10: 20 62 20 39 20 63 20 31 30 7d 0a 64 6f 5f 74 65   b 9 c 10}.do_te
0c20: 73 74 20 76 69 65 77 2d 32 2e 32 20 7b 0a 20 20  st view-2.2 {.  
0c30: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49  catchsql {.    I
0c40: 4e 53 45 52 54 20 49 4e 54 4f 20 76 32 20 56 41  NSERT INTO v2 VA
0c50: 4c 55 45 53 28 31 2c 32 2c 33 2c 34 29 3b 0a 20  LUES(1,2,3,4);. 
0c60: 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20   }.} {1 {cannot 
0c70: 6d 6f 64 69 66 79 20 76 32 20 62 65 63 61 75 73  modify v2 becaus
0c80: 65 20 69 74 20 69 73 20 61 20 76 69 65 77 7d 7d  e it is a view}}
0c90: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 32 2e  .do_test view-2.
0ca0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
0cb0: 0a 20 20 20 20 55 50 44 41 54 45 20 76 32 20 53  .    UPDATE v2 S
0cc0: 45 54 20 61 3d 31 30 20 57 48 45 52 45 20 61 3d  ET a=10 WHERE a=
0cd0: 35 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 61 6e  5;.  }.} {1 {can
0ce0: 6e 6f 74 20 6d 6f 64 69 66 79 20 76 32 20 62 65  not modify v2 be
0cf0: 63 61 75 73 65 20 69 74 20 69 73 20 61 20 76 69  cause it is a vi
0d00: 65 77 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65  ew}}.do_test vie
0d10: 77 2d 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  w-2.4 {.  catchs
0d20: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
0d30: 46 52 4f 4d 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM v2;.  }.} {
0d40: 31 20 7b 63 61 6e 6e 6f 74 20 6d 6f 64 69 66 79  1 {cannot modify
0d50: 20 76 32 20 62 65 63 61 75 73 65 20 69 74 20 69   v2 because it i
0d60: 73 20 61 20 76 69 65 77 7d 7d 0a 64 6f 5f 74 65  s a view}}.do_te
0d70: 73 74 20 76 69 65 77 2d 32 2e 35 20 7b 0a 20 20  st view-2.5 {.  
0d80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
0d90: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0da0: 55 45 53 28 31 31 2c 31 32 2c 31 33 2c 31 34 29  UES(11,12,13,14)
0db0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0dc0: 52 4f 4d 20 76 32 20 4f 52 44 45 52 20 42 59 20  ROM v2 ORDER BY 
0dd0: 78 3b 0a 20 20 7d 0a 7d 20 7b 37 20 38 20 39 20  x;.  }.} {7 8 9 
0de0: 31 30 20 31 31 20 31 32 20 31 33 20 31 34 7d 0a  10 11 12 13 14}.
0df0: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 32 2e 36  do_test view-2.6
0e00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0e10: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
0e20: 20 76 32 20 57 48 45 52 45 20 61 3e 31 30 0a 20   v2 WHERE a>10. 
0e30: 20 7d 0a 7d 20 7b 31 31 7d 0a 0a 23 20 54 65 73   }.} {11}..# Tes
0e40: 74 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6e 61  t that column na
0e50: 6d 65 20 6f 66 20 76 69 65 77 73 20 61 72 65 20  me of views are 
0e60: 67 65 6e 65 72 61 74 65 64 20 63 6f 72 72 65 63  generated correc
0e70: 74 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 76  tly..#.do_test v
0e80: 69 65 77 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63  iew-3.1 {.  exec
0e90: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
0ea0: 54 20 2a 20 46 52 4f 4d 20 76 31 20 4c 49 4d 49  T * FROM v1 LIMI
0eb0: 54 20 31 0a 20 20 7d 0a 7d 20 7b 61 20 32 20 62  T 1.  }.} {a 2 b
0ec0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77   3}.do_test view
0ed0: 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.2 {.  execsql
0ee0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2 {.    SELECT *
0ef0: 20 46 52 4f 4d 20 76 32 20 4c 49 4d 49 54 20 31   FROM v2 LIMIT 1
0f00: 0a 20 20 7d 0a 7d 20 7b 78 20 37 20 61 20 38 20  .  }.} {x 7 a 8 
0f10: 62 20 39 20 63 20 31 30 7d 0a 64 6f 5f 74 65 73  b 9 c 10}.do_tes
0f20: 74 20 76 69 65 77 2d 33 2e 33 2e 31 20 7b 0a 20  t view-3.3.1 {. 
0f30: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
0f40: 44 52 4f 50 20 56 49 45 57 20 76 31 3b 0a 20 20  DROP VIEW v1;.  
0f50: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
0f60: 20 41 53 20 53 45 4c 45 43 54 20 61 20 41 53 20   AS SELECT a AS 
0f70: 27 78 79 7a 27 2c 20 62 2b 63 20 41 53 20 27 70  'xyz', b+c AS 'p
0f80: 71 72 27 2c 20 63 2d 62 20 46 52 4f 4d 20 74 31  qr', c-b FROM t1
0f90: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0fa0: 52 4f 4d 20 76 31 20 4c 49 4d 49 54 20 31 0a 20  ROM v1 LIMIT 1. 
0fb0: 20 7d 0a 7d 20 7b 78 79 7a 20 32 20 70 71 72 20   }.} {xyz 2 pqr 
0fc0: 37 20 63 2d 62 20 31 7d 0a 64 6f 5f 74 65 73 74  7 c-b 1}.do_test
0fd0: 20 76 69 65 77 2d 33 2e 33 2e 32 20 7b 0a 20 20   view-3.3.2 {.  
0fe0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 43  execsql2 {.    C
0ff0: 52 45 41 54 45 20 56 49 45 57 20 76 31 62 20 41  REATE VIEW v1b A
1000: 53 20 53 45 4c 45 43 54 20 74 31 2e 61 2c 20 62  S SELECT t1.a, b
1010: 2b 63 2c 20 74 31 2e 63 20 46 52 4f 4d 20 74 31  +c, t1.c FROM t1
1020: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1030: 52 4f 4d 20 76 31 62 20 4c 49 4d 49 54 20 31 0a  ROM v1b LIMIT 1.
1040: 20 20 7d 0a 7d 20 7b 61 20 32 20 62 2b 63 20 37    }.} {a 2 b+c 7
1050: 20 63 20 34 7d 0a 64 6f 5f 74 65 73 74 20 76 69   c 4}.do_test vi
1060: 65 77 2d 33 2e 33 2e 33 20 7b 0a 20 20 65 78 65  ew-3.3.3 {.  exe
1070: 63 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41  csql2 {.    CREA
1080: 54 45 20 56 49 45 57 20 76 31 63 28 78 2c 79 2c  TE VIEW v1c(x,y,
1090: 7a 29 20 41 53 20 53 45 4c 45 43 54 20 61 2c 20  z) AS SELECT a, 
10a0: 62 2b 63 2c 20 63 2d 62 20 46 52 4f 4d 20 74 31  b+c, c-b FROM t1
10b0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
10c0: 52 4f 4d 20 76 31 63 20 4c 49 4d 49 54 20 31 3b  ROM v1c LIMIT 1;
10d0: 0a 20 20 7d 0a 7d 20 7b 78 20 32 20 79 20 37 20  .  }.} {x 2 y 7 
10e0: 7a 20 31 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  z 1}.do_catchsql
10f0: 5f 74 65 73 74 20 76 69 65 77 2d 33 2e 33 2e 34  _test view-3.3.4
1100: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57   {.  CREATE VIEW
1110: 20 76 31 65 72 72 28 78 2c 79 20 44 45 53 43 2c   v1err(x,y DESC,
1120: 7a 29 20 41 53 20 53 45 4c 45 43 54 20 61 2c 20  z) AS SELECT a, 
1130: 62 2b 63 2c 20 63 2d 62 20 46 52 4f 4d 20 74 31  b+c, c-b FROM t1
1140: 3b 0a 7d 20 7b 31 20 7b 73 79 6e 74 61 78 20 65  ;.} {1 {syntax e
1150: 72 72 6f 72 20 61 66 74 65 72 20 63 6f 6c 75 6d  rror after colum
1160: 6e 20 6e 61 6d 65 20 22 79 22 7d 7d 0a 64 6f 5f  n name "y"}}.do_
1170: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 76 69  catchsql_test vi
1180: 65 77 2d 33 2e 33 2e 35 20 7b 0a 20 20 44 52 4f  ew-3.3.5 {.  DRO
1190: 50 20 56 49 45 57 20 49 46 20 45 58 49 53 54 53  P VIEW IF EXISTS
11a0: 20 76 31 65 72 72 3b 0a 20 20 43 52 45 41 54 45   v1err;.  CREATE
11b0: 20 56 49 45 57 20 76 31 65 72 72 28 78 2c 79 29   VIEW v1err(x,y)
11c0: 20 41 53 20 53 45 4c 45 43 54 20 61 2c 20 62 2b   AS SELECT a, b+
11d0: 63 2c 20 63 2d 62 20 46 52 4f 4d 20 74 31 3b 0a  c, c-b FROM t1;.
11e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
11f0: 76 31 65 72 72 3b 0a 7d 20 7b 31 20 7b 65 78 70  v1err;.} {1 {exp
1200: 65 63 74 65 64 20 32 20 63 6f 6c 75 6d 6e 73 20  ected 2 columns 
1210: 66 6f 72 20 27 76 31 65 72 72 27 20 62 75 74 20  for 'v1err' but 
1220: 67 6f 74 20 33 7d 7d 0a 64 6f 5f 63 61 74 63 68  got 3}}.do_catch
1230: 73 71 6c 5f 74 65 73 74 20 76 69 65 77 2d 33 2e  sql_test view-3.
1240: 33 2e 36 20 7b 0a 20 20 44 52 4f 50 20 56 49 45  3.6 {.  DROP VIE
1250: 57 20 49 46 20 45 58 49 53 54 53 20 76 31 65 72  W IF EXISTS v1er
1260: 72 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57  r;.  CREATE VIEW
1270: 20 76 31 65 72 72 28 77 2c 78 2c 79 2c 7a 29 20   v1err(w,x,y,z) 
1280: 41 53 20 53 45 4c 45 43 54 20 61 2c 20 62 2b 63  AS SELECT a, b+c
1290: 2c 20 63 2d 62 20 46 52 4f 4d 20 74 31 3b 0a 20  , c-b FROM t1;. 
12a0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
12b0: 31 65 72 72 3b 0a 7d 20 7b 31 20 7b 65 78 70 65  1err;.} {1 {expe
12c0: 63 74 65 64 20 34 20 63 6f 6c 75 6d 6e 73 20 66  cted 4 columns f
12d0: 6f 72 20 27 76 31 65 72 72 27 20 62 75 74 20 67  or 'v1err' but g
12e0: 6f 74 20 33 7d 7d 0a 0a 69 66 63 61 70 61 62 6c  ot 3}}..ifcapabl
12f0: 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64 6f 5f  e compound {.do_
1300: 74 65 73 74 20 20 76 69 65 77 2d 33 2e 34 20 7b  test  view-3.4 {
1310: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
1320: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 33    CREATE VIEW v3
1330: 20 41 53 20 53 45 4c 45 43 54 20 61 20 46 52 4f   AS SELECT a FRO
1340: 4d 20 74 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43  M t1 UNION SELEC
1350: 54 20 62 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T b FROM t1 ORDE
1360: 52 20 42 59 20 62 3b 0a 20 20 20 20 53 45 4c 45  R BY b;.    SELE
1370: 43 54 20 2a 20 46 52 4f 4d 20 76 33 20 4c 49 4d  CT * FROM v3 LIM
1380: 49 54 20 34 3b 0a 20 20 7d 0a 7d 20 7b 61 20 32  IT 4;.  }.} {a 2
1390: 20 61 20 33 20 61 20 35 20 61 20 36 7d 0a 64 6f   a 3 a 5 a 6}.do
13a0: 5f 74 65 73 74 20 76 69 65 77 2d 33 2e 35 20 7b  _test view-3.5 {
13b0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
13c0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 34    CREATE VIEW v4
13d0: 20 41 53 20 0a 20 20 20 20 20 20 53 45 4c 45 43   AS .      SELEC
13e0: 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 20 0a  T a, b FROM t1 .
13f0: 20 20 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20        UNION.    
1400: 20 20 53 45 4c 45 43 54 20 62 20 41 53 20 27 78    SELECT b AS 'x
1410: 27 2c 20 61 20 41 53 20 27 79 27 20 46 52 4f 4d  ', a AS 'y' FROM
1420: 20 74 31 0a 20 20 20 20 20 20 4f 52 44 45 52 20   t1.      ORDER 
1430: 42 59 20 78 2c 20 79 3b 0a 20 20 20 20 53 45 4c  BY x, y;.    SEL
1440: 45 43 54 20 62 20 46 52 4f 4d 20 76 34 20 4f 52  ECT b FROM v4 OR
1450: 44 45 52 20 42 59 20 62 20 4c 49 4d 49 54 20 34  DER BY b LIMIT 4
1460: 3b 0a 20 20 7d 0a 7d 20 7b 62 20 32 20 62 20 33  ;.  }.} {b 2 b 3
1470: 20 62 20 35 20 62 20 36 7d 0a 7d 20 3b 23 20 69   b 5 b 6}.} ;# i
1480: 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e  fcapable compoun
1490: 64 0a 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  d...do_test view
14a0: 2d 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  -4.1 {.  catchsq
14b0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 56 49 45  l {.    DROP VIE
14c0: 57 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  W t1;.  }.} {1 {
14d0: 75 73 65 20 44 52 4f 50 20 54 41 42 4c 45 20 74  use DROP TABLE t
14e0: 6f 20 64 65 6c 65 74 65 20 74 61 62 6c 65 20 74  o delete table t
14f0: 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  1}}.do_test view
1500: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
1510: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 31 20   {.    SELECT 1 
1520: 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20 31 3b  FROM t1 LIMIT 1;
1530: 0a 20 20 7d 0a 7d 20 31 0a 64 6f 5f 74 65 73 74  .  }.} 1.do_test
1540: 20 76 69 65 77 2d 34 2e 33 20 7b 0a 20 20 63 61   view-4.3 {.  ca
1550: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
1560: 50 20 54 41 42 4c 45 20 76 31 3b 0a 20 20 7d 0a  P TABLE v1;.  }.
1570: 7d 20 7b 31 20 7b 75 73 65 20 44 52 4f 50 20 56  } {1 {use DROP V
1580: 49 45 57 20 74 6f 20 64 65 6c 65 74 65 20 76 69  IEW to delete vi
1590: 65 77 20 76 31 7d 7d 0a 64 6f 5f 74 65 73 74 20  ew v1}}.do_test 
15a0: 76 69 65 77 2d 34 2e 34 20 7b 0a 20 20 65 78 65  view-4.4 {.  exe
15b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45  csql {.     SELE
15c0: 43 54 20 31 20 46 52 4f 4d 20 76 31 20 4c 49 4d  CT 1 FROM v1 LIM
15d0: 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  IT 1;.  }.} {1}.
15e0: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 34 2e 35  do_test view-4.5
15f0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1600: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1610: 20 69 31 76 31 20 4f 4e 20 76 31 28 78 79 7a 29   i1v1 ON v1(xyz)
1620: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 76 69 65 77  ;.  }.} {1 {view
1630: 73 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 6e 64  s may not be ind
1640: 65 78 65 64 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  exed}}..do_test 
1650: 76 69 65 77 2d 35 2e 31 20 7b 0a 20 20 65 78 65  view-5.1 {.  exe
1660: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
1670: 45 20 54 41 42 4c 45 20 74 32 28 79 2c 61 29 3b  E TABLE t2(y,a);
1680: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1690: 20 74 32 20 56 41 4c 55 45 53 28 32 32 2c 32 29   t2 VALUES(22,2)
16a0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
16b0: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 33 2c 33  O t2 VALUES(33,3
16c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
16d0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34 34 2c  TO t2 VALUES(44,
16e0: 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  4);.    INSERT I
16f0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 35 35  NTO t2 VALUES(55
1700: 2c 35 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,5);.    SELECT 
1710: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  * FROM t2;.  }.}
1720: 20 7b 32 32 20 32 20 33 33 20 33 20 34 34 20 34   {22 2 33 3 44 4
1730: 20 35 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 76   55 5}.do_test v
1740: 69 65 77 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  iew-5.2 {.  exec
1750: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1760: 20 56 49 45 57 20 76 35 20 41 53 0a 20 20 20 20   VIEW v5 AS.    
1770: 20 20 53 45 4c 45 43 54 20 74 31 2e 78 20 41 53    SELECT t1.x AS
1780: 20 76 2c 20 74 32 2e 79 20 41 53 20 77 20 46 52   v, t2.y AS w FR
1790: 4f 4d 20 74 31 20 4a 4f 49 4e 20 74 32 20 55 53  OM t1 JOIN t2 US
17a0: 49 4e 47 28 61 29 3b 0a 20 20 20 20 53 45 4c 45  ING(a);.    SELE
17b0: 43 54 20 2a 20 46 52 4f 4d 20 76 35 3b 0a 20 20  CT * FROM v5;.  
17c0: 7d 0a 7d 20 7b 31 20 32 32 20 34 20 35 35 7d 0a  }.} {1 22 4 55}.
17d0: 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20 74  .# Verify that t
17e0: 68 65 20 76 69 65 77 20 76 35 20 67 65 74 73 20  he view v5 gets 
17f0: 66 6c 61 74 74 65 6e 65 64 2e 20 20 73 65 65 20  flattened.  see 
1800: 73 71 6c 69 74 65 46 6c 61 74 74 65 6e 53 75 62  sqliteFlattenSub
1810: 71 75 65 72 79 28 29 2e 0a 23 20 54 68 69 73 20  query()..# This 
1820: 77 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 69  will only work i
1830: 66 20 45 58 50 4c 41 49 4e 20 69 73 20 65 6e 61  f EXPLAIN is ena
1840: 62 6c 65 64 2e 0a 23 20 54 69 63 6b 65 74 20 23  bled..# Ticket #
1850: 32 37 32 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  272.#.ifcapable 
1860: 7b 65 78 70 6c 61 69 6e 7d 20 7b 0a 64 6f 5f 74  {explain} {.do_t
1870: 65 73 74 20 76 69 65 77 2d 35 2e 33 20 7b 0a 20  est view-5.3 {. 
1880: 20 6c 73 65 61 72 63 68 20 5b 65 78 65 63 73 71   lsearch [execsq
1890: 6c 20 7b 0a 20 20 20 20 45 58 50 4c 41 49 4e 20  l {.    EXPLAIN 
18a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 35  SELECT * FROM v5
18b0: 3b 0a 20 20 7d 5d 20 4f 70 65 6e 45 70 68 65 6d  ;.  }] OpenEphem
18c0: 65 72 61 6c 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f 74  eral.} {-1}.do_t
18d0: 65 73 74 20 76 69 65 77 2d 35 2e 34 20 7b 0a 20  est view-5.4 {. 
18e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
18f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 35 20  ELECT * FROM v5 
1900: 41 53 20 61 2c 20 74 32 20 41 53 20 62 20 57 48  AS a, t2 AS b WH
1910: 45 52 45 20 61 2e 77 3d 62 2e 79 3b 0a 20 20 7d  ERE a.w=b.y;.  }
1920: 0a 7d 20 7b 31 20 32 32 20 32 32 20 32 20 34 20  .} {1 22 22 2 4 
1930: 35 35 20 35 35 20 35 7d 0a 64 6f 5f 74 65 73 74  55 55 5}.do_test
1940: 20 76 69 65 77 2d 35 2e 35 20 7b 0a 20 20 6c 73   view-5.5 {.  ls
1950: 65 61 72 63 68 20 5b 65 78 65 63 73 71 6c 20 7b  earch [execsql {
1960: 0a 20 20 20 20 45 58 50 4c 41 49 4e 20 53 45 4c  .    EXPLAIN SEL
1970: 45 43 54 20 2a 20 46 52 4f 4d 20 76 35 20 41 53  ECT * FROM v5 AS
1980: 20 61 2c 20 74 32 20 41 53 20 62 20 57 48 45 52   a, t2 AS b WHER
1990: 45 20 61 2e 77 3d 62 2e 79 3b 0a 20 20 7d 5d 20  E a.w=b.y;.  }] 
19a0: 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 0a 7d 20  OpenEphemeral.} 
19b0: 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65  {-1}.do_test vie
19c0: 77 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  w-5.6 {.  execsq
19d0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
19e0: 20 46 52 4f 4d 20 74 32 20 41 53 20 62 2c 20 76   FROM t2 AS b, v
19f0: 35 20 41 53 20 61 20 57 48 45 52 45 20 61 2e 77  5 AS a WHERE a.w
1a00: 3d 62 2e 79 3b 0a 20 20 7d 0a 7d 20 7b 32 32 20  =b.y;.  }.} {22 
1a10: 32 20 31 20 32 32 20 35 35 20 35 20 34 20 35 35  2 1 22 55 5 4 55
1a20: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 35  }.do_test view-5
1a30: 2e 37 20 7b 0a 20 20 6c 73 65 61 72 63 68 20 5b  .7 {.  lsearch [
1a40: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 45 58  execsql {.    EX
1a50: 50 4c 41 49 4e 20 53 45 4c 45 43 54 20 2a 20 46  PLAIN SELECT * F
1a60: 52 4f 4d 20 74 32 20 41 53 20 62 2c 20 76 35 20  ROM t2 AS b, v5 
1a70: 41 53 20 61 20 57 48 45 52 45 20 61 2e 77 3d 62  AS a WHERE a.w=b
1a80: 2e 79 3b 0a 20 20 7d 5d 20 4f 70 65 6e 45 70 68  .y;.  }] OpenEph
1a90: 65 6d 65 72 61 6c 0a 7d 20 7b 2d 31 7d 0a 64 6f  emeral.} {-1}.do
1aa0: 5f 74 65 73 74 20 76 69 65 77 2d 35 2e 38 20 7b  _test view-5.8 {
1ab0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1ac0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1ad0: 31 20 41 53 20 61 2c 20 76 35 20 41 53 20 62 2c  1 AS a, v5 AS b,
1ae0: 20 74 32 20 41 53 20 63 20 57 48 45 52 45 20 61   t2 AS c WHERE a
1af0: 2e 78 3d 62 2e 76 20 41 4e 44 20 62 2e 77 3d 63  .x=b.v AND b.w=c
1b00: 2e 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  .y;.  }.} {1 2 3
1b10: 20 34 20 31 20 32 32 20 32 32 20 32 20 34 20 35   4 1 22 22 2 4 5
1b20: 20 36 20 37 20 34 20 35 35 20 35 35 20 35 7d 0a   6 7 4 55 55 5}.
1b30: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 35 2e 39  do_test view-5.9
1b40: 20 7b 0a 20 20 6c 73 65 61 72 63 68 20 5b 65 78   {.  lsearch [ex
1b50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 45 58 50 4c  ecsql {.    EXPL
1b60: 41 49 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  AIN SELECT * FRO
1b70: 4d 20 74 31 20 41 53 20 61 2c 20 76 35 20 41 53  M t1 AS a, v5 AS
1b80: 20 62 2c 20 74 32 20 41 53 20 63 20 57 48 45 52   b, t2 AS c WHER
1b90: 45 20 61 2e 78 3d 62 2e 76 20 41 4e 44 20 62 2e  E a.x=b.v AND b.
1ba0: 77 3d 63 2e 79 3b 0a 20 20 7d 5d 20 4f 70 65 6e  w=c.y;.  }] Open
1bb0: 45 70 68 65 6d 65 72 61 6c 0a 7d 20 7b 2d 31 7d  Ephemeral.} {-1}
1bc0: 0a 7d 20 3b 23 20 65 6e 64 69 66 20 65 78 70 6c  .} ;# endif expl
1bd0: 61 69 6e 0a 0a 64 6f 5f 74 65 73 74 20 76 69 65  ain..do_test vie
1be0: 77 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  w-6.1 {.  execsq
1bf0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  l {.    SELECT m
1c00: 69 6e 28 78 29 2c 20 6d 69 6e 28 61 29 2c 20 6d  in(x), min(a), m
1c10: 69 6e 28 62 29 2c 20 6d 69 6e 28 63 29 2c 20 6d  in(b), min(c), m
1c20: 69 6e 28 61 2b 62 2b 63 29 20 46 52 4f 4d 20 76  in(a+b+c) FROM v
1c30: 32 3b 0a 20 20 7d 0a 7d 20 7b 37 20 38 20 39 20  2;.  }.} {7 8 9 
1c40: 31 30 20 32 37 7d 0a 64 6f 5f 74 65 73 74 20 76  10 27}.do_test v
1c50: 69 65 77 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63  iew-6.2 {.  exec
1c60: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1c70: 20 6d 61 78 28 78 29 2c 20 6d 61 78 28 61 29 2c   max(x), max(a),
1c80: 20 6d 61 78 28 62 29 2c 20 6d 61 78 28 63 29 2c   max(b), max(c),
1c90: 20 6d 61 78 28 61 2b 62 2b 63 29 20 46 52 4f 4d   max(a+b+c) FROM
1ca0: 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 31   v2;.  }.} {11 1
1cb0: 32 20 31 33 20 31 34 20 33 39 7d 0a 0a 64 6f 5f  2 13 14 39}..do_
1cc0: 74 65 73 74 20 76 69 65 77 2d 37 2e 31 20 7b 0a  test view-7.1 {.
1cd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1ce0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
1cf0: 74 31 28 69 64 20 69 6e 74 65 67 65 72 20 70 72  t1(id integer pr
1d00: 69 6d 61 72 79 20 6b 65 79 2c 20 61 29 3b 0a 20  imary key, a);. 
1d10: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1d20: 74 65 73 74 32 28 69 64 20 69 6e 74 65 67 65 72  test2(id integer
1d30: 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , b);.    INSERT
1d40: 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41 4c 55   INTO test1 VALU
1d50: 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 49 4e 53  ES(1,2);.    INS
1d60: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 32 20 56  ERT INTO test2 V
1d70: 41 4c 55 45 53 28 31 2c 33 29 3b 0a 20 20 20 20  ALUES(1,3);.    
1d80: 43 52 45 41 54 45 20 56 49 45 57 20 74 65 73 74  CREATE VIEW test
1d90: 20 41 53 0a 20 20 20 20 20 20 53 45 4c 45 43 54   AS.      SELECT
1da0: 20 74 65 73 74 31 2e 69 64 2c 20 61 2c 20 62 0a   test1.id, a, b.
1db0: 20 20 20 20 20 20 46 52 4f 4d 20 74 65 73 74 31        FROM test1
1dc0: 20 4a 4f 49 4e 20 74 65 73 74 32 20 4f 4e 20 74   JOIN test2 ON t
1dd0: 65 73 74 32 2e 69 64 3d 74 65 73 74 31 2e 69 64  est2.id=test1.id
1de0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1df0: 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a 7d 20  ROM test;.  }.} 
1e00: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
1e10: 76 69 65 77 2d 37 2e 32 20 7b 0a 20 20 64 62 20  view-7.2 {.  db 
1e20: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
1e30: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
1e40: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1e50: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20  T * FROM test;. 
1e60: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
1e70: 74 65 73 74 20 76 69 65 77 2d 37 2e 33 20 7b 0a  test view-7.3 {.
1e80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1e90: 44 52 4f 50 20 56 49 45 57 20 74 65 73 74 3b 0a  DROP VIEW test;.
1ea0: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
1eb0: 74 65 73 74 20 41 53 0a 20 20 20 20 20 20 53 45  test AS.      SE
1ec0: 4c 45 43 54 20 74 65 73 74 31 2e 69 64 2c 20 61  LECT test1.id, a
1ed0: 2c 20 62 0a 20 20 20 20 20 20 46 52 4f 4d 20 74  , b.      FROM t
1ee0: 65 73 74 31 20 4a 4f 49 4e 20 74 65 73 74 32 20  est1 JOIN test2 
1ef0: 55 53 49 4e 47 28 69 64 29 3b 0a 20 20 20 20 53  USING(id);.    S
1f00: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
1f10: 74 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  t;.  }.} {1 2 3}
1f20: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 37 2e  .do_test view-7.
1f30: 34 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  4 {.  db close. 
1f40: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1f50: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
1f60: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1f70: 4d 20 74 65 73 74 3b 0a 20 20 7d 0a 7d 20 7b 31  M test;.  }.} {1
1f80: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 76 69   2 3}.do_test vi
1f90: 65 77 2d 37 2e 35 20 7b 0a 20 20 65 78 65 63 73  ew-7.5 {.  execs
1fa0: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 56 49  ql {.    DROP VI
1fb0: 45 57 20 74 65 73 74 3b 0a 20 20 20 20 43 52 45  EW test;.    CRE
1fc0: 41 54 45 20 56 49 45 57 20 74 65 73 74 20 41 53  ATE VIEW test AS
1fd0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 65  .      SELECT te
1fe0: 73 74 31 2e 69 64 2c 20 61 2c 20 62 0a 20 20 20  st1.id, a, b.   
1ff0: 20 20 20 46 52 4f 4d 20 74 65 73 74 31 20 4e 41     FROM test1 NA
2000: 54 55 52 41 4c 20 4a 4f 49 4e 20 74 65 73 74 32  TURAL JOIN test2
2010: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2020: 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a 7d 20  ROM test;.  }.} 
2030: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
2040: 76 69 65 77 2d 37 2e 36 20 7b 0a 20 20 64 62 20  view-7.6 {.  db 
2050: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
2060: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
2070: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2080: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20  T * FROM test;. 
2090: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f   }.} {1 2 3}..do
20a0: 5f 74 65 73 74 20 76 69 65 77 2d 38 2e 31 20 7b  _test view-8.1 {
20b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
20c0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 36 20   CREATE VIEW v6 
20d0: 41 53 20 53 45 4c 45 43 54 20 70 71 72 2c 20 78  AS SELECT pqr, x
20e0: 79 7a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 20 20  yz FROM v1;.    
20f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 36  SELECT * FROM v6
2100: 20 4f 52 44 45 52 20 42 59 20 78 79 7a 3b 0a 20   ORDER BY xyz;. 
2110: 20 7d 0a 7d 20 7b 37 20 32 20 31 33 20 35 20 31   }.} {7 2 13 5 1
2120: 39 20 38 20 32 37 20 31 32 7d 0a 64 6f 5f 74 65  9 8 27 12}.do_te
2130: 73 74 20 76 69 65 77 2d 38 2e 32 20 7b 0a 20 20  st view-8.2 {.  
2140: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
2150: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
2160: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2170: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 36 20 4f  LECT * FROM v6 O
2180: 52 44 45 52 20 42 59 20 78 79 7a 3b 0a 20 20 7d  RDER BY xyz;.  }
2190: 0a 7d 20 7b 37 20 32 20 31 33 20 35 20 31 39 20  .} {7 2 13 5 19 
21a0: 38 20 32 37 20 31 32 7d 0a 64 6f 5f 74 65 73 74  8 27 12}.do_test
21b0: 20 76 69 65 77 2d 38 2e 33 20 7b 0a 20 20 65 78   view-8.3 {.  ex
21c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
21d0: 54 45 20 56 49 45 57 20 76 37 28 61 29 20 41 53  TE VIEW v7(a) AS
21e0: 20 53 45 4c 45 43 54 20 70 71 72 2b 78 79 7a 20   SELECT pqr+xyz 
21f0: 46 52 4f 4d 20 76 36 3b 0a 20 20 20 20 53 45 4c  FROM v6;.    SEL
2200: 45 43 54 20 2a 20 46 52 4f 4d 20 76 37 20 4f 52  ECT * FROM v7 OR
2210: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
2220: 7b 39 20 31 38 20 32 37 20 33 39 7d 0a 0a 69 66  {9 18 27 39}..if
2230: 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79  capable subquery
2240: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 76 69 65   {.  do_test vie
2250: 77 2d 38 2e 34 20 7b 0a 20 20 20 20 65 78 65 63  w-8.4 {.    exec
2260: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
2270: 54 45 20 56 49 45 57 20 76 38 20 41 53 20 53 45  TE VIEW v8 AS SE
2280: 4c 45 43 54 20 6d 61 78 28 63 6e 74 29 20 41 53  LECT max(cnt) AS
2290: 20 6d 78 20 46 52 4f 4d 0a 20 20 20 20 20 20 20   mx FROM.       
22a0: 20 28 53 45 4c 45 43 54 20 61 25 32 20 41 53 20   (SELECT a%2 AS 
22b0: 65 6f 2c 20 63 6f 75 6e 74 28 2a 29 20 41 53 20  eo, count(*) AS 
22c0: 63 6e 74 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  cnt FROM t1 GROU
22d0: 50 20 42 59 20 65 6f 29 3b 0a 20 20 20 20 20 20  P BY eo);.      
22e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 38  SELECT * FROM v8
22f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 33 0a 20 20  ;.    }.  } 3.  
2300: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 38 2e 35  do_test view-8.5
2310: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
2320: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6d 78  .      SELECT mx
2330: 2b 31 30 2c 20 6d 78 2a 32 20 46 52 4f 4d 20 76  +10, mx*2 FROM v
2340: 38 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 33  8;.    }.  } {13
2350: 20 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20 76 69   6}.  do_test vi
2360: 65 77 2d 38 2e 36 20 7b 0a 20 20 20 20 65 78 65  ew-8.6 {.    exe
2370: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
2380: 45 43 54 20 6d 78 2b 31 30 2c 20 70 71 72 20 46  ECT mx+10, pqr F
2390: 52 4f 4d 20 76 36 2c 20 76 38 20 57 48 45 52 45  ROM v6, v8 WHERE
23a0: 20 78 79 7a 3d 32 3b 0a 20 20 20 20 7d 0a 20 20   xyz=2;.    }.  
23b0: 7d 20 7b 31 33 20 37 7d 0a 20 20 64 6f 5f 74 65  } {13 7}.  do_te
23c0: 73 74 20 76 69 65 77 2d 38 2e 37 20 7b 0a 20 20  st view-8.7 {.  
23d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
23e0: 20 20 53 45 4c 45 43 54 20 6d 78 2b 31 30 2c 20    SELECT mx+10, 
23f0: 70 71 72 20 46 52 4f 4d 20 76 36 2c 20 76 38 20  pqr FROM v6, v8 
2400: 57 48 45 52 45 20 78 79 7a 3e 32 3b 0a 20 20 20  WHERE xyz>2;.   
2410: 20 7d 0a 20 20 7d 20 7b 31 33 20 31 33 20 31 33   }.  } {13 13 13
2420: 20 31 39 20 31 33 20 32 37 7d 0a 7d 20 3b 23 20   19 13 27}.} ;# 
2430: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
2440: 72 79 0a 0a 23 20 54 65 73 74 73 20 66 6f 72 20  ry..# Tests for 
2450: 61 20 62 75 67 20 66 6f 75 6e 64 20 62 79 20 4d  a bug found by M
2460: 69 63 68 69 65 6c 20 64 65 20 57 69 74 20 69 6e  ichiel de Wit in
2470: 76 6f 6c 76 69 6e 67 20 4f 52 44 45 52 20 42 59  volving ORDER BY
2480: 20 69 6e 20 61 20 56 49 45 57 2e 0a 23 0a 64 6f   in a VIEW..#.do
2490: 5f 74 65 73 74 20 76 69 65 77 2d 39 2e 31 20 7b  _test view-9.1 {
24a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
24b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
24c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
24d0: 20 57 48 45 52 45 20 61 3c 35 3b 0a 20 20 20 20   WHERE a<5;.    
24e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
24f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
2500: 57 48 45 52 45 20 61 3c 34 3b 0a 20 20 20 20 49  WHERE a<4;.    I
2510: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
2520: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57  LECT * FROM t2 W
2530: 48 45 52 45 20 61 3c 33 3b 0a 20 20 20 20 53 45  HERE a<3;.    SE
2540: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 6f  LECT DISTINCT co
2550: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 47  unt(*) FROM t2 G
2560: 52 4f 55 50 20 42 59 20 61 20 4f 52 44 45 52 20  ROUP BY a ORDER 
2570: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  BY 1;.  }.} {1 2
2580: 20 34 20 38 7d 0a 64 6f 5f 74 65 73 74 20 76 69   4 8}.do_test vi
2590: 65 77 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73  ew-9.2 {.  execs
25a0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
25b0: 44 49 53 54 49 4e 43 54 20 63 6f 75 6e 74 28 2a  DISTINCT count(*
25c0: 29 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20  ) FROM t2 GROUP 
25d0: 42 59 20 61 20 4f 52 44 45 52 20 42 59 20 31 20  BY a ORDER BY 1 
25e0: 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b  LIMIT 3;.  }.} {
25f0: 31 20 32 20 34 7d 0a 64 6f 5f 74 65 73 74 20 76  1 2 4}.do_test v
2600: 69 65 77 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63  iew-9.3 {.  exec
2610: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2620: 20 56 49 45 57 20 76 39 20 41 53 20 0a 20 20 20   VIEW v9 AS .   
2630: 20 20 20 20 53 45 4c 45 43 54 20 44 49 53 54 49      SELECT DISTI
2640: 4e 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  NCT count(*) FRO
2650: 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 61 20  M t2 GROUP BY a 
2660: 4f 52 44 45 52 20 42 59 20 31 20 4c 49 4d 49 54  ORDER BY 1 LIMIT
2670: 20 33 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a   3;.    SELECT *
2680: 20 46 52 4f 4d 20 76 39 3b 0a 20 20 7d 0a 7d 20   FROM v9;.  }.} 
2690: 7b 31 20 32 20 34 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 4}.do_test 
26a0: 76 69 65 77 2d 39 2e 34 20 7b 0a 20 20 65 78 65  view-9.4 {.  exe
26b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
26c0: 54 20 2a 20 46 52 4f 4d 20 76 39 20 4f 52 44 45  T * FROM v9 ORDE
26d0: 52 20 42 59 20 31 20 44 45 53 43 3b 0a 20 20 7d  R BY 1 DESC;.  }
26e0: 0a 7d 20 7b 34 20 32 20 31 7d 0a 64 6f 5f 74 65  .} {4 2 1}.do_te
26f0: 73 74 20 76 69 65 77 2d 39 2e 35 20 7b 0a 20 20  st view-9.5 {.  
2700: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2710: 45 41 54 45 20 56 49 45 57 20 76 31 30 20 41 53  EATE VIEW v10 AS
2720: 20 0a 20 20 20 20 20 20 20 53 45 4c 45 43 54 20   .       SELECT 
2730: 44 49 53 54 49 4e 43 54 20 61 2c 20 63 6f 75 6e  DISTINCT a, coun
2740: 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 47 52 4f  t(*) FROM t2 GRO
2750: 55 50 20 42 59 20 61 20 4f 52 44 45 52 20 42 59  UP BY a ORDER BY
2760: 20 32 20 4c 49 4d 49 54 20 33 3b 0a 20 20 20 20   2 LIMIT 3;.    
2770: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31  SELECT * FROM v1
2780: 30 3b 0a 20 20 7d 0a 7d 20 7b 35 20 31 20 34 20  0;.  }.} {5 1 4 
2790: 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 76  2 3 4}.do_test v
27a0: 69 65 77 2d 39 2e 36 20 7b 0a 20 20 65 78 65 63  iew-9.6 {.  exec
27b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
27c0: 20 2a 20 46 52 4f 4d 20 76 31 30 20 4f 52 44 45   * FROM v10 ORDE
27d0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 33  R BY 1;.  }.} {3
27e0: 20 34 20 34 20 32 20 35 20 31 7d 0a 0a 23 20 54   4 4 2 5 1}..# T
27f0: 61 62 6c 65 73 20 77 69 74 68 20 63 6f 6c 75 6d  ables with colum
2800: 6e 73 20 68 61 76 69 6e 67 20 70 65 63 75 6c 69  ns having peculi
2810: 61 72 20 71 75 6f 74 65 64 20 6e 61 6d 65 73 20  ar quoted names 
2820: 75 73 65 64 20 69 6e 20 76 69 65 77 73 0a 23 20  used in views.# 
2830: 54 69 63 6b 65 74 20 23 37 35 36 2e 0a 23 0a 64  Ticket #756..#.d
2840: 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 30 2e 31  o_test view-10.1
2850: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2860: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2870: 74 33 28 22 39 22 20 69 6e 74 65 67 65 72 2c 20  t3("9" integer, 
2880: 5b 34 5d 20 74 65 78 74 29 3b 0a 20 20 20 20 49  [4] text);.    I
2890: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
28a0: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 43  LUES(1,2);.    C
28b0: 52 45 41 54 45 20 56 49 45 57 20 76 5f 74 33 5f  REATE VIEW v_t3_
28c0: 61 20 41 53 20 53 45 4c 45 43 54 20 61 2e 5b 39  a AS SELECT a.[9
28d0: 5d 20 46 52 4f 4d 20 74 33 20 41 53 20 61 3b 0a  ] FROM t3 AS a;.
28e0: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
28f0: 76 5f 74 33 5f 62 20 41 53 20 53 45 4c 45 43 54  v_t3_b AS SELECT
2900: 20 22 34 22 20 46 52 4f 4d 20 74 33 3b 0a 20 20   "4" FROM t3;.  
2910: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2920: 76 5f 74 33 5f 61 3b 0a 20 20 7d 0a 7d 20 7b 31  v_t3_a;.  }.} {1
2930: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31  }.do_test view-1
2940: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
2950: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2960: 52 4f 4d 20 76 5f 74 33 5f 62 3b 0a 20 20 7d 0a  ROM v_t3_b;.  }.
2970: 7d 20 7b 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 76  } {2}..do_test v
2980: 69 65 77 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65  iew-11.1 {.  exe
2990: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
29a0: 45 20 54 41 42 4c 45 20 74 34 28 61 20 43 4f 4c  E TABLE t4(a COL
29b0: 4c 41 54 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20  LATE NOCASE);.  
29c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
29d0: 20 56 41 4c 55 45 53 28 27 54 68 69 73 27 29 3b   VALUES('This');
29e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
29f0: 20 74 34 20 56 41 4c 55 45 53 28 27 74 68 69 73   t4 VALUES('this
2a00: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
2a10: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 54  NTO t4 VALUES('T
2a20: 48 49 53 27 29 3b 0a 20 20 20 20 53 45 4c 45 43  HIS');.    SELEC
2a30: 54 20 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52  T * FROM t4 WHER
2a40: 45 20 61 20 3d 20 27 54 48 49 53 27 3b 0a 20 20  E a = 'THIS';.  
2a50: 7d 0a 7d 20 7b 54 68 69 73 20 74 68 69 73 20 54  }.} {This this T
2a60: 48 49 53 7d 0a 69 66 63 61 70 61 62 6c 65 20 73  HIS}.ifcapable s
2a70: 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74  ubquery {.  do_t
2a80: 65 73 74 20 76 69 65 77 2d 31 31 2e 32 20 7b 0a  est view-11.2 {.
2a90: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2aa0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2ab0: 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  M (SELECT * FROM
2ac0: 20 74 34 29 20 57 48 45 52 45 20 61 20 3d 20 27   t4) WHERE a = '
2ad0: 54 48 49 53 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  THIS';.    }.  }
2ae0: 20 7b 54 68 69 73 20 74 68 69 73 20 54 48 49 53   {This this THIS
2af0: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  }.}.do_test view
2b00: 2d 31 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -11.3 {.  execsq
2b10: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56  l {.    CREATE V
2b20: 49 45 57 20 76 31 31 20 41 53 20 53 45 4c 45 43  IEW v11 AS SELEC
2b30: 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20  T * FROM t4;.   
2b40: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
2b50: 31 31 20 57 48 45 52 45 20 61 20 3d 20 27 54 48  11 WHERE a = 'TH
2b60: 49 53 27 3b 0a 20 20 7d 0a 7d 20 7b 54 68 69 73  IS';.  }.} {This
2b70: 20 74 68 69 73 20 54 48 49 53 7d 0a 0a 23 20 54   this THIS}..# T
2b80: 69 63 6b 65 74 20 23 31 32 37 30 3a 20 20 44 6f  icket #1270:  Do
2b90: 20 6e 6f 74 20 61 6c 6c 6f 77 20 70 61 72 61 6d   not allow param
2ba0: 65 74 65 72 73 20 69 6e 20 76 69 65 77 20 64 65  eters in view de
2bb0: 66 69 6e 69 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f  finitions..#.do_
2bc0: 74 65 73 74 20 76 69 65 77 2d 31 32 2e 31 20 7b  test view-12.1 {
2bd0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2be0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
2bf0: 32 20 41 53 20 53 45 4c 45 43 54 20 61 20 46 52  2 AS SELECT a FR
2c00: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3f 0a  OM t1 WHERE b=?.
2c10: 20 20 7d 0a 7d 20 7b 31 20 7b 70 61 72 61 6d 65    }.} {1 {parame
2c20: 74 65 72 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ters are not all
2c30: 6f 77 65 64 20 69 6e 20 76 69 65 77 73 7d 7d 0a  owed in views}}.
2c40: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 32 2e  do_test view-12.
2c50: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
2c60: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57  .    CREATE VIEW
2c70: 20 76 31 32 28 78 29 20 41 53 20 53 45 4c 45 43   v12(x) AS SELEC
2c80: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
2c90: 45 20 62 3d 3f 0a 20 20 7d 0a 7d 20 7b 31 20 7b  E b=?.  }.} {1 {
2ca0: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e  parameters are n
2cb0: 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 76 69  ot allowed in vi
2cc0: 65 77 73 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65  ews}}..ifcapable
2cd0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
2ce0: 65 73 74 20 76 69 65 77 2d 31 33 2e 31 20 7b 0a  est view-13.1 {.
2cf0: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
2d00: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 63 61 74  test2.db.    cat
2d10: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54  chsql {.      AT
2d20: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
2d30: 41 53 20 74 77 6f 3b 0a 20 20 20 20 20 20 43 52  AS two;.      CR
2d40: 45 41 54 45 20 54 41 42 4c 45 20 74 77 6f 2e 74  EATE TABLE two.t
2d50: 32 28 78 2c 79 29 3b 0a 20 20 20 20 20 20 43 52  2(x,y);.      CR
2d60: 45 41 54 45 20 56 49 45 57 20 76 31 33 20 41 53  EATE VIEW v13 AS
2d70: 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74   SELECT y FROM t
2d80: 77 6f 2e 74 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  wo.t2;.    }.  }
2d90: 20 7b 31 20 7b 76 69 65 77 20 76 31 33 20 63 61   {1 {view v13 ca
2da0: 6e 6e 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f  nnot reference o
2db0: 62 6a 65 63 74 73 20 69 6e 20 64 61 74 61 62 61  bjects in databa
2dc0: 73 65 20 74 77 6f 7d 7d 0a 7d 0a 0a 23 20 54 69  se two}}.}..# Ti
2dd0: 63 6b 65 74 20 23 31 36 35 38 0a 23 0a 64 6f 5f  cket #1658.#.do_
2de0: 74 65 73 74 20 76 69 65 77 2d 31 34 2e 31 20 7b  test view-14.1 {
2df0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2e00: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49    CREATE TEMP VI
2e10: 45 57 20 74 31 20 41 53 20 53 45 4c 45 43 54 20  EW t1 AS SELECT 
2e20: 61 2c 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  a,b FROM t1;.   
2e30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2e40: 65 6d 70 2e 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  emp.t1;.  }.} {1
2e50: 20 7b 76 69 65 77 20 74 31 20 69 73 20 63 69 72   {view t1 is cir
2e60: 63 75 6c 61 72 6c 79 20 64 65 66 69 6e 65 64 7d  cularly defined}
2e70: 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31  }.do_test view-1
2e80: 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.2 {.  catchsql
2e90: 20 7b 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57   {.    DROP VIEW
2ea0: 20 49 46 20 45 58 49 53 54 53 20 74 65 6d 70 2e   IF EXISTS temp.
2eb0: 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t1;.    CREATE T
2ec0: 45 4d 50 20 56 49 45 57 20 74 31 28 61 2c 62 29  EMP VIEW t1(a,b)
2ed0: 20 41 53 20 53 45 4c 45 43 54 20 61 2c 62 20 46   AS SELECT a,b F
2ee0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45  ROM t1;.    SELE
2ef0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 2e 74  CT * FROM temp.t
2f00: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 76 69 65  1;.  }.} {1 {vie
2f10: 77 20 74 31 20 69 73 20 63 69 72 63 75 6c 61 72  w t1 is circular
2f20: 6c 79 20 64 65 66 69 6e 65 64 7d 7d 0a 0a 23 20  ly defined}}..# 
2f30: 54 69 63 6b 65 74 73 20 23 31 36 38 38 2c 20 23  Tickets #1688, #
2f40: 31 37 30 39 0a 23 0a 64 6f 5f 74 65 73 74 20 76  1709.#.do_test v
2f50: 69 65 77 2d 31 35 2e 31 20 7b 0a 20 20 65 78 65  iew-15.1 {.  exe
2f60: 63 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41  csql2 {.    CREA
2f70: 54 45 20 56 49 45 57 20 76 31 35 20 41 53 20 53  TE VIEW v15 AS S
2f80: 45 4c 45 43 54 20 61 20 41 53 20 78 2c 20 62 20  ELECT a AS x, b 
2f90: 41 53 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20  AS y FROM t1;.  
2fa0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2fb0: 76 31 35 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d  v15 LIMIT 1;.  }
2fc0: 0a 7d 20 7b 78 20 32 20 79 20 33 7d 0a 64 6f 5f  .} {x 2 y 3}.do_
2fd0: 74 65 73 74 20 76 69 65 77 2d 31 35 2e 32 20 7b  test view-15.2 {
2fe0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
2ff0: 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52    SELECT x, y FR
3000: 4f 4d 20 76 31 35 20 4c 49 4d 49 54 20 31 0a 20  OM v15 LIMIT 1. 
3010: 20 7d 0a 7d 20 7b 78 20 32 20 79 20 33 7d 0a 0a   }.} {x 2 y 3}..
3020: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 36 2e  do_test view-16.
3030: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
3040: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57  .    CREATE VIEW
3050: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 76   IF NOT EXISTS v
3060: 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  1 AS SELECT * FR
3070: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  OM t1;.  }.} {0 
3080: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  {}}.do_test view
3090: 2d 31 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  -16.2 {.  execsq
30a0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73  l {.    SELECT s
30b0: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
30c0: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
30d0: 3d 27 76 31 27 0a 20 20 7d 0a 7d 20 7b 7b 43 52  ='v1'.  }.} {{CR
30e0: 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20  EATE VIEW v1 AS 
30f0: 53 45 4c 45 43 54 20 61 20 41 53 20 27 78 79 7a  SELECT a AS 'xyz
3100: 27 2c 20 62 2b 63 20 41 53 20 27 70 71 72 27 2c  ', b+c AS 'pqr',
3110: 20 63 2d 62 20 46 52 4f 4d 20 74 31 7d 7d 0a 64   c-b FROM t1}}.d
3120: 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 36 2e 33  o_test view-16.3
3130: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3140: 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 49 46      DROP VIEW IF
3150: 20 45 58 49 53 54 53 20 6e 6f 73 75 63 68 76 69   EXISTS nosuchvi
3160: 65 77 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ew.  }.} {0 {}}.
3170: 0a 23 20 63 6f 72 72 65 63 74 20 65 72 72 6f 72  .# correct error
3180: 20 6d 65 73 73 61 67 65 20 77 68 65 6e 20 61 74   message when at
3190: 74 65 6d 70 74 69 6e 67 20 74 6f 20 64 72 6f 70  tempting to drop
31a0: 20 61 20 76 69 65 77 20 74 68 61 74 20 64 6f 65   a view that doe
31b0: 73 20 6e 6f 74 0a 23 20 65 78 69 73 74 2e 0a 23  s not.# exist..#
31c0: 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 37  .do_test view-17
31d0: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
31e0: 7b 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57 20  {.    DROP VIEW 
31f0: 6e 6f 73 75 63 68 76 69 65 77 0a 20 20 7d 0a 7d  nosuchview.  }.}
3200: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 76 69 65   {1 {no such vie
3210: 77 3a 20 6e 6f 73 75 63 68 76 69 65 77 7d 7d 0a  w: nosuchview}}.
3220: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 37 2e  do_test view-17.
3230: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
3240: 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 6d  .    DROP VIEW m
3250: 61 69 6e 2e 6e 6f 73 75 63 68 76 69 65 77 0a 20  ain.nosuchview. 
3260: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68   }.} {1 {no such
3270: 20 76 69 65 77 3a 20 6d 61 69 6e 2e 6e 6f 73 75   view: main.nosu
3280: 63 68 76 69 65 77 7d 7d 0a 0a 64 6f 5f 74 65 73  chview}}..do_tes
3290: 74 20 76 69 65 77 2d 31 38 2e 31 20 7b 0a 20 20  t view-18.1 {.  
32a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
32b0: 4f 50 20 56 49 45 57 20 74 31 3b 0a 20 20 20 20  OP VIEW t1;.    
32c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
32d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
32e0: 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t1(a, b, c);.   
32f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3300: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
3310: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3320: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20 35 2c   t1 VALUES(4, 5,
3330: 20 36 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45   6);..    CREATE
3340: 20 56 49 45 57 20 76 76 31 20 41 53 20 53 45 4c   VIEW vv1 AS SEL
3350: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
3360: 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76     CREATE VIEW v
3370: 76 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  v2 AS SELECT * F
3380: 52 4f 4d 20 76 76 31 3b 0a 20 20 20 20 43 52 45  ROM vv1;.    CRE
3390: 41 54 45 20 56 49 45 57 20 76 76 33 20 41 53 20  ATE VIEW vv3 AS 
33a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 76  SELECT * FROM vv
33b0: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  2;.    CREATE VI
33c0: 45 57 20 76 76 34 20 41 53 20 53 45 4c 45 43 54  EW vv4 AS SELECT
33d0: 20 2a 20 46 52 4f 4d 20 76 76 33 3b 0a 20 20 20   * FROM vv3;.   
33e0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 76 35   CREATE VIEW vv5
33f0: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
3400: 4d 20 76 76 34 3b 0a 0a 20 20 20 20 53 45 4c 45  M vv4;..    SELE
3410: 43 54 20 2a 20 46 52 4f 4d 20 76 76 35 3b 0a 20  CT * FROM vv5;. 
3420: 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 20   }.} {1 2 3 4 5 
3430: 36 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 33 33  6}..# Ticket #33
3440: 30 38 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 22  08.# Make sure "
3450: 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 73 20 69  rowid" columns i
3460: 6e 20 61 20 76 69 65 77 20 61 72 65 20 6e 61 6d  n a view are nam
3470: 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a  ed correctly..#.
3480: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 31 39 2e  do_test view-19.
3490: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
34a0: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
34b0: 76 33 33 30 38 61 20 41 53 20 53 45 4c 45 43 54  v3308a AS SELECT
34c0: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
34d0: 31 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  1;.  }.  execsql
34e0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2 {.    SELECT *
34f0: 20 46 52 4f 4d 20 76 33 33 30 38 61 0a 20 20 7d   FROM v3308a.  }
3500: 0a 7d 20 7b 72 6f 77 69 64 20 31 20 61 20 31 20  .} {rowid 1 a 1 
3510: 62 20 32 20 63 20 33 20 72 6f 77 69 64 20 32 20  b 2 c 3 rowid 2 
3520: 61 20 34 20 62 20 35 20 63 20 36 7d 0a 64 6f 5f  a 4 b 5 c 6}.do_
3530: 74 65 73 74 20 76 69 65 77 2d 31 39 2e 32 20 7b  test view-19.2 {
3540: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3550: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 33 33   CREATE VIEW v33
3560: 30 38 62 20 41 53 20 53 45 4c 45 43 54 20 74 31  08b AS SELECT t1
3570: 2e 72 6f 77 69 64 2c 20 74 31 2e 61 2c 20 74 31  .rowid, t1.a, t1
3580: 2e 62 2b 74 31 2e 63 20 46 52 4f 4d 20 74 31 3b  .b+t1.c FROM t1;
3590: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20  .  }.  execsql2 
35a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
35b0: 52 4f 4d 20 76 33 33 30 38 62 0a 20 20 7d 0a 7d  ROM v3308b.  }.}
35c0: 20 7b 72 6f 77 69 64 20 31 20 61 20 31 20 74 31   {rowid 1 a 1 t1
35d0: 2e 62 2b 74 31 2e 63 20 35 20 72 6f 77 69 64 20  .b+t1.c 5 rowid 
35e0: 32 20 61 20 34 20 74 31 2e 62 2b 74 31 2e 63 20  2 a 4 t1.b+t1.c 
35f0: 31 31 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77  11}.do_test view
3600: 2d 31 39 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -19.3 {.  execsq
3610: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56  l {.    CREATE V
3620: 49 45 57 20 76 33 33 30 38 63 20 41 53 20 53 45  IEW v3308c AS SE
3630: 4c 45 43 54 20 74 31 2e 6f 69 64 2c 20 41 2c 20  LECT t1.oid, A, 
3640: 74 31 2e 62 2b 74 31 2e 63 20 41 53 20 78 20 46  t1.b+t1.c AS x F
3650: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20 65 78  ROM t1;.  }.  ex
3660: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
3670: 45 43 54 20 2a 20 46 52 4f 4d 20 76 33 33 30 38  ECT * FROM v3308
3680: 63 0a 20 20 7d 0a 7d 20 7b 72 6f 77 69 64 20 31  c.  }.} {rowid 1
3690: 20 61 20 31 20 78 20 35 20 72 6f 77 69 64 20 32   a 1 x 5 rowid 2
36a0: 20 61 20 34 20 78 20 31 31 7d 0a 0a 23 20 54 69   a 4 x 11}..# Ti
36b0: 63 6b 65 74 20 23 33 35 33 39 20 68 61 64 20 74  cket #3539 had t
36c0: 68 69 73 20 63 72 61 73 68 69 6e 67 20 28 73 65  his crashing (se
36d0: 65 20 63 6f 6d 6d 69 74 20 5b 35 39 34 30 5d 29  e commit [5940])
36e0: 2e 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 32  ..do_test view-2
36f0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
3700: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
3710: 20 49 46 20 45 58 49 53 54 53 20 74 31 3b 0a 20   IF EXISTS t1;. 
3720: 20 20 20 44 52 4f 50 20 56 49 45 57 20 49 46 20     DROP VIEW IF 
3730: 45 58 49 53 54 53 20 76 31 3b 0a 20 20 20 20 43  EXISTS v1;.    C
3740: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
3750: 31 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  1);.    CREATE V
3760: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3770: 20 63 31 20 46 52 4f 4d 20 28 53 45 4c 45 43 54   c1 FROM (SELECT
3780: 20 74 31 2e 63 31 20 46 52 4f 4d 20 74 31 29 3b   t1.c1 FROM t1);
3790: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63  .  }.} {}..# Tic
37a0: 6b 65 74 20 5b 64 35 38 63 63 62 62 33 66 31 62  ket [d58ccbb3f1b
37b0: 5d 3a 20 50 72 65 76 65 6e 74 20 54 61 62 6c 65  ]: Prevent Table
37c0: 2e 6e 52 65 66 20 6f 76 65 72 66 6c 6f 77 2e 0a  .nRef overflow..
37d0: 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33  db close.sqlite3
37e0: 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 64 6f 5f   db :memory:.do_
37f0: 74 65 73 74 20 76 69 65 77 2d 32 31 2e 31 20 7b  test view-21.1 {
3800: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3810: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3820: 31 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1(x);.    INSERT
3830: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3840: 35 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  5);.    CREATE V
3850: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3860: 20 78 2a 32 20 46 52 4f 4d 20 74 31 3b 0a 20 20   x*2 FROM t1;.  
3870: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 32    CREATE VIEW v2
3880: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
3890: 4d 20 76 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43  M v1 UNION SELEC
38a0: 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 20  T * FROM v1;.   
38b0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 34 20   CREATE VIEW v4 
38c0: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
38d0: 20 76 32 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54   v2 UNION SELECT
38e0: 20 2a 20 46 52 4f 4d 20 76 32 3b 0a 20 20 20 20   * FROM v2;.    
38f0: 43 52 45 41 54 45 20 56 49 45 57 20 76 38 20 41  CREATE VIEW v8 A
3900: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
3910: 76 34 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  v4 UNION SELECT 
3920: 2a 20 46 52 4f 4d 20 76 34 3b 0a 20 20 20 20 43  * FROM v4;.    C
3930: 52 45 41 54 45 20 56 49 45 57 20 76 31 36 20 41  REATE VIEW v16 A
3940: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
3950: 76 38 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  v8 UNION SELECT 
3960: 2a 20 46 52 4f 4d 20 76 38 3b 0a 20 20 20 20 43  * FROM v8;.    C
3970: 52 45 41 54 45 20 56 49 45 57 20 76 33 32 20 41  REATE VIEW v32 A
3980: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
3990: 76 31 36 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54  v16 UNION SELECT
39a0: 20 2a 20 46 52 4f 4d 20 76 31 36 3b 0a 20 20 20   * FROM v16;.   
39b0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 36 34   CREATE VIEW v64
39c0: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
39d0: 4d 20 76 33 32 20 55 4e 49 4f 4e 20 53 45 4c 45  M v32 UNION SELE
39e0: 43 54 20 2a 20 46 52 4f 4d 20 76 33 32 3b 0a 20  CT * FROM v32;. 
39f0: 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76     CREATE VIEW v
3a00: 31 32 38 20 41 53 20 53 45 4c 45 43 54 20 2a 20  128 AS SELECT * 
3a10: 46 52 4f 4d 20 76 36 34 20 55 4e 49 4f 4e 20 53  FROM v64 UNION S
3a20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 36 34  ELECT * FROM v64
3a30: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
3a40: 57 20 76 32 35 36 20 41 53 20 53 45 4c 45 43 54  W v256 AS SELECT
3a50: 20 2a 20 46 52 4f 4d 20 76 31 32 38 20 55 4e 49   * FROM v128 UNI
3a60: 4f 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  ON SELECT * FROM
3a70: 20 76 31 32 38 3b 0a 20 20 20 20 43 52 45 41 54   v128;.    CREAT
3a80: 45 20 56 49 45 57 20 76 35 31 32 20 41 53 20 53  E VIEW v512 AS S
3a90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 35  ELECT * FROM v25
3aa0: 36 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a  6 UNION SELECT *
3ab0: 20 46 52 4f 4d 20 76 32 35 36 3b 0a 20 20 20 20   FROM v256;.    
3ac0: 43 52 45 41 54 45 20 56 49 45 57 20 76 31 30 32  CREATE VIEW v102
3ad0: 34 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  4 AS SELECT * FR
3ae0: 4f 4d 20 76 35 31 32 20 55 4e 49 4f 4e 20 53 45  OM v512 UNION SE
3af0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 35 31 32  LECT * FROM v512
3b00: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
3b10: 57 20 76 32 30 34 38 20 41 53 20 53 45 4c 45 43  W v2048 AS SELEC
3b20: 54 20 2a 20 46 52 4f 4d 20 76 31 30 32 34 20 55  T * FROM v1024 U
3b30: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20 46 52  NION SELECT * FR
3b40: 4f 4d 20 76 31 30 32 34 3b 0a 20 20 20 20 43 52  OM v1024;.    CR
3b50: 45 41 54 45 20 56 49 45 57 20 76 34 30 39 36 20  EATE VIEW v4096 
3b60: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
3b70: 20 76 32 30 34 38 20 55 4e 49 4f 4e 20 53 45 4c   v2048 UNION SEL
3b80: 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 30 34 38  ECT * FROM v2048
3b90: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45  ;.    CREATE VIE
3ba0: 57 20 76 38 31 39 32 20 41 53 20 53 45 4c 45 43  W v8192 AS SELEC
3bb0: 54 20 2a 20 46 52 4f 4d 20 76 34 30 39 36 20 55  T * FROM v4096 U
3bc0: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20 46 52  NION SELECT * FR
3bd0: 4f 4d 20 76 34 30 39 36 3b 0a 20 20 20 20 43 52  OM v4096;.    CR
3be0: 45 41 54 45 20 56 49 45 57 20 76 31 36 33 38 34  EATE VIEW v16384
3bf0: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
3c00: 4d 20 76 38 31 39 32 20 55 4e 49 4f 4e 20 53 45  M v8192 UNION SE
3c10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 38 31 39  LECT * FROM v819
3c20: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  2;.    CREATE VI
3c30: 45 57 20 76 33 32 37 36 38 20 41 53 20 53 45 4c  EW v32768 AS SEL
3c40: 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 36 33 38  ECT * FROM v1638
3c50: 34 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a  4 UNION SELECT *
3c60: 20 46 52 4f 4d 20 76 31 36 33 38 34 3b 0a 20 20   FROM v16384;.  
3c70: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3c80: 76 33 32 37 36 38 20 55 4e 49 4f 4e 20 53 45 4c  v32768 UNION SEL
3c90: 45 43 54 20 2a 20 46 52 4f 4d 20 76 33 32 37 36  ECT * FROM v3276
3ca0: 38 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 6f 6f  8;.  }.} {1 {too
3cb0: 20 6d 61 6e 79 20 72 65 66 65 72 65 6e 63 65 73   many references
3cc0: 20 74 6f 20 22 76 31 22 3a 20 6d 61 78 20 36 35   to "v1": max 65
3cd0: 35 33 35 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20  535}}.ifcapable 
3ce0: 70 72 6f 67 72 65 73 73 20 7b 0a 20 20 64 6f 5f  progress {.  do_
3cf0: 74 65 73 74 20 76 69 65 77 2d 32 31 2e 32 20 7b  test view-21.2 {
3d00: 0a 20 20 20 20 64 62 20 70 72 6f 67 72 65 73 73  .    db progress
3d10: 20 31 30 30 30 20 7b 65 78 70 72 20 31 7d 0a 20   1000 {expr 1}. 
3d20: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
3d30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3d40: 4d 20 76 33 32 37 36 38 3b 0a 20 20 20 20 7d 0a  M v32768;.    }.
3d50: 20 20 7d 20 7b 31 20 69 6e 74 65 72 72 75 70 74    } {1 interrupt
3d60: 65 64 7d 0a 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a  ed}.}..db close.
3d70: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
3d80: 72 79 3a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ry:.do_execsql_t
3d90: 65 73 74 20 76 69 65 77 2d 32 32 2e 31 20 7b 0a  est view-22.1 {.
3da0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 78 31    CREATE VIEW x1
3db0: 20 41 53 20 53 45 4c 45 43 54 20 31 32 33 20 41   AS SELECT 123 A
3dc0: 53 20 27 27 2c 20 32 33 34 20 41 53 20 27 27 2c  S '', 234 AS '',
3dd0: 20 33 34 35 20 41 53 20 27 27 3b 0a 20 20 53 45   345 AS '';.  SE
3de0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 31 3b 0a  LECT * FROM x1;.
3df0: 7d 20 7b 31 32 33 20 32 33 34 20 33 34 35 7d 0a  } {123 234 345}.
3e00: 64 6f 5f 74 65 73 74 20 76 69 65 77 2d 32 32 2e  do_test view-22.
3e10: 32 20 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  2 {.  unset -noc
3e20: 6f 6d 70 6c 61 69 6e 20 78 0a 20 20 64 62 20 65  omplain x.  db e
3e30: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
3e40: 4f 4d 20 78 31 7d 20 78 20 62 72 65 61 6b 0a 20  OM x1} x break. 
3e50: 20 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61   lsort [array na
3e60: 6d 65 73 20 78 5d 0a 7d 20 7b 7b 7d 20 2a 20 3a  mes x].} {{} * :
3e70: 31 20 3a 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 76  1 :2}..do_test v
3e80: 69 65 77 2d 32 35 2e 31 20 7b 0a 20 20 64 62 20  iew-25.1 {.  db 
3e90: 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  eval {.    CREAT
3ea0: 45 20 54 41 42 4c 45 20 74 32 35 20 28 78 29 3b  E TABLE t25 (x);
3eb0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3ec0: 20 74 32 35 20 28 78 29 20 56 41 4c 55 45 53 20   t25 (x) VALUES 
3ed0: 28 31 29 3b 0a 20 20 20 20 41 4e 41 4c 59 5a 45  (1);.    ANALYZE
3ee0: 3b 0a 20 20 7d 0a 20 20 70 72 6f 63 20 61 75 74  ;.  }.  proc aut
3ef0: 68 4c 6f 67 44 65 6c 65 74 65 20 7b 63 6f 64 65  hLogDelete {code
3f00: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3f10: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
3f20: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3f30: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 5b  ITE_DELETE" && [
3f40: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 73 71 6c  string match sql
3f50: 69 74 65 5f 73 74 61 74 2a 20 24 61 72 67 31 5d  ite_stat* $arg1]
3f60: 7d 20 7b 0a 20 20 20 20 20 20 23 20 6c 61 70 70  } {.      # lapp
3f70: 65 6e 64 20 3a 3a 6c 6f 67 20 5b 6c 69 73 74 20  end ::log [list 
3f80: 24 63 6f 64 65 20 24 61 72 67 31 20 24 61 72 67  $code $arg1 $arg
3f90: 32 20 24 61 72 67 33 20 24 61 72 67 34 20 24 61  2 $arg3 $arg4 $a
3fa0: 72 67 73 5d 0a 20 20 20 20 20 20 6c 61 70 70 65  rgs].      lappe
3fb0: 6e 64 20 3a 3a 6c 6f 67 20 5b 6c 69 73 74 20 24  nd ::log [list $
3fc0: 63 6f 64 65 20 24 61 72 67 31 20 24 61 72 67 32  code $arg1 $arg2
3fd0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
3fe0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
3ff0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73  QLITE_OK.  }.  s
4000: 65 74 20 6c 6f 67 20 22 22 0a 20 20 64 62 20 61  et log "".  db a
4010: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
4020: 4c 6f 67 44 65 6c 65 74 65 0a 20 20 64 62 20 65  LogDelete.  db e
4030: 76 61 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 78  val {DROP VIEW x
4040: 31 3b 7d 0a 20 20 73 65 74 20 6c 6f 67 0a 7d 20  1;}.  set log.} 
4050: 7b 7d 0a 0a 73 65 74 20 72 65 73 20 5b 6c 69 73  {}..set res [lis
4060: 74 20 7b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  t {SQLITE_DELETE
4070: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 7b 7d   sqlite_stat1 {}
4080: 20 6d 61 69 6e 20 7b 7d 7d 5d 0a 69 66 63 61 70   main {}}].ifcap
4090: 61 62 6c 65 20 73 74 61 74 34 20 7b 20 6c 61 70  able stat4 { lap
40a0: 70 65 6e 64 20 72 65 73 20 7b 53 51 4c 49 54 45  pend res {SQLITE
40b0: 5f 44 45 4c 45 54 45 20 73 71 6c 69 74 65 5f 73  _DELETE sqlite_s
40c0: 74 61 74 34 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d  tat4 {} main {}}
40d0: 20 7d 0a 64 6f 5f 74 65 73 74 20 76 69 65 77 2d   }.do_test view-
40e0: 32 35 2e 32 20 7b 0a 20 20 73 65 74 20 6c 6f 67  25.2 {.  set log
40f0: 20 22 22 0a 20 20 64 62 20 65 76 61 6c 20 7b 44   "".  db eval {D
4100: 52 4f 50 20 54 41 42 4c 45 20 74 32 35 3b 7d 0a  ROP TABLE t25;}.
4110: 20 20 73 65 74 20 6c 6f 67 0a 7d 20 24 72 65 73    set log.} $res
4120: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
4130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 64 6f 5f  ------------.do_
4170: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76 69 65  execsql_test vie
4180: 77 2d 32 36 2e 30 20 7b 0a 20 20 43 52 45 41 54  w-26.0 {.  CREAT
4190: 45 20 54 41 42 4c 45 20 74 31 36 28 61 2c 20 62  E TABLE t16(a, b
41a0: 2c 20 63 20 55 4e 49 51 55 45 29 3b 0a 20 20 49  , c UNIQUE);.  I
41b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 36 20 56  NSERT INTO t16 V
41c0: 41 4c 55 45 53 28 31 2c 20 31 2c 20 31 29 3b 0a  ALUES(1, 1, 1);.
41d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
41e0: 36 20 56 41 4c 55 45 53 28 32 2c 20 32 2c 20 32  6 VALUES(2, 2, 2
41f0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
4200: 20 74 31 36 20 56 41 4c 55 45 53 28 33 2c 20 33   t16 VALUES(3, 3
4210: 2c 20 33 29 3b 0a 20 20 43 52 45 41 54 45 20 56  , 3);.  CREATE V
4220: 49 45 57 20 76 31 36 20 41 53 20 53 45 4c 45 43  IEW v16 AS SELEC
4230: 54 20 6d 61 78 28 61 29 20 41 53 20 6d 78 2c 20  T max(a) AS mx, 
4240: 6d 69 6e 28 62 29 20 41 53 20 6d 6e 20 46 52 4f  min(b) AS mn FRO
4250: 4d 20 74 31 36 20 47 52 4f 55 50 20 42 59 20 63  M t16 GROUP BY c
4260: 3b 0a 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  ;..  SELECT * FR
4270: 4f 4d 20 76 31 36 20 41 53 20 6f 6e 65 2c 20 76  OM v16 AS one, v
4280: 31 36 20 41 53 20 74 77 6f 20 57 48 45 52 45 20  16 AS two WHERE 
4290: 6f 6e 65 2e 6d 78 3d 31 3b 0a 7d 20 7b 0a 20 20  one.mx=1;.} {.  
42a0: 31 20 31 20 31 20 31 20 0a 20 20 31 20 31 20 32  1 1 1 1 .  1 1 2
42b0: 20 32 20 0a 20 20 31 20 31 20 33 20 33 0a 7d 0a   2 .  1 1 3 3.}.
42c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
42d0: 76 69 65 77 2d 32 36 2e 31 20 7b 0a 20 20 57 49  view-26.1 {.  WI
42e0: 54 48 20 76 31 37 28 78 2c 79 29 20 41 53 20 28  TH v17(x,y) AS (
42f0: 53 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 20 6d  SELECT max(a), m
4300: 69 6e 28 62 29 20 46 52 4f 4d 20 74 31 36 20 47  in(b) FROM t16 G
4310: 52 4f 55 50 20 42 59 20 63 29 0a 20 20 53 45 4c  ROUP BY c).  SEL
4320: 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 37 20 41  ECT * FROM v17 A
4330: 53 20 6f 6e 65 2c 20 76 31 37 20 41 53 20 74 77  S one, v17 AS tw
4340: 6f 20 57 48 45 52 45 20 6f 6e 65 2e 78 3d 31 3b  o WHERE one.x=1;
4350: 0a 7d 20 7b 0a 20 20 31 20 31 20 31 20 31 20 0a  .} {.  1 1 1 1 .
4360: 20 20 31 20 31 20 32 20 32 20 0a 20 20 31 20 31    1 1 2 2 .  1 1
4370: 20 33 20 33 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d   3 3.}..#-------
4380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43c0: 2d 2d 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65  --.reset_db.do_e
43d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 76 69 65 77  xecsql_test view
43e0: 2d 32 37 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  -27.0 {.  CREATE
43f0: 20 54 41 42 4c 45 20 74 30 28 63 30 20 54 45 58   TABLE t0(c0 TEX
4400: 54 2c 20 63 31 29 3b 0a 20 20 49 4e 53 45 52 54  T, c1);.  INSERT
4410: 20 49 4e 54 4f 20 74 30 28 63 30 2c 20 63 31 29   INTO t0(c0, c1)
4420: 20 56 41 4c 55 45 53 20 28 2d 31 2c 20 30 29 3b   VALUES (-1, 0);
4430: 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76  .  CREATE VIEW v
4440: 30 28 63 30 2c 20 63 31 29 20 41 53 20 53 45 4c  0(c0, c1) AS SEL
4450: 45 43 54 20 74 30 2e 63 30 2c 20 41 56 47 28 74  ECT t0.c0, AVG(t
4460: 30 2e 63 31 29 20 46 52 4f 4d 20 74 30 3b 0a 7d  0.c1) FROM t0;.}
4470: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
4480: 74 20 76 69 65 77 2d 32 37 2e 31 20 7b 0a 20 20  t view-27.1 {.  
4490: 53 45 4c 45 43 54 20 63 30 2c 20 74 79 70 65 6f  SELECT c0, typeo
44a0: 66 28 63 30 29 2c 20 63 31 2c 20 74 79 70 65 6f  f(c0), c1, typeo
44b0: 66 28 63 31 29 20 46 52 4f 4d 20 76 30 3b 0a 7d  f(c1) FROM v0;.}
44c0: 20 7b 0a 20 20 2d 31 20 20 20 74 65 78 74 0a 20   {.  -1   text. 
44d0: 20 20 30 2e 30 20 72 65 61 6c 0a 7d 0a 0a 64 6f    0.0 real.}..do
44e0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76 69  _execsql_test vi
44f0: 65 77 2d 32 37 2e 32 20 7b 20 53 45 4c 45 43 54  ew-27.2 { SELECT
4500: 20 63 30 3c 63 31 20 46 52 4f 4d 20 76 30 20 7d   c0<c1 FROM v0 }
4510: 20 31 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65   1.do_execsql_te
4520: 73 74 20 76 69 65 77 2d 32 37 2e 33 20 7b 20 53  st view-27.3 { S
4530: 45 4c 45 43 54 20 63 31 3c 63 30 20 46 52 4f 4d  ELECT c1<c0 FROM
4540: 20 76 30 20 7d 20 30 0a 64 6f 5f 65 78 65 63 73   v0 } 0.do_execs
4550: 71 6c 5f 74 65 73 74 20 76 69 65 77 2d 32 37 2e  ql_test view-27.
4560: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 31 20 46  4 {.  SELECT 1 F
4570: 52 4f 4d 20 76 30 20 57 48 45 52 45 20 63 31 3c  ROM v0 WHERE c1<
4580: 63 30 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73  c0.} {}.do_execs
4590: 71 6c 5f 74 65 73 74 20 76 69 65 77 2d 32 37 2e  ql_test view-27.
45a0: 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 31 20 46  5 {.  SELECT 1 F
45b0: 52 4f 4d 20 76 30 20 57 48 45 52 45 20 63 30 3c  ROM v0 WHERE c0<
45c0: 63 31 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 65 78 65  c1.} {1}..do_exe
45d0: 63 73 71 6c 5f 74 65 73 74 20 76 69 65 77 2d 32  csql_test view-2
45e0: 37 2e 36 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  7.6 { .  SELECT 
45f0: 63 30 3c 63 31 20 46 52 4f 4d 20 28 53 45 4c 45  c0<c1 FROM (SELE
4600: 43 54 20 74 30 2e 63 30 20 41 53 20 63 30 2c 20  CT t0.c0 AS c0, 
4610: 41 56 47 28 74 30 2e 63 31 29 20 41 53 20 63 31  AVG(t0.c1) AS c1
4620: 20 46 52 4f 4d 20 74 30 29 20 0a 7d 20 31 0a 64   FROM t0) .} 1.d
4630: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76  o_execsql_test v
4640: 69 65 77 2d 32 37 2e 37 20 7b 20 0a 20 20 53 45  iew-27.7 { .  SE
4650: 4c 45 43 54 20 63 31 3c 63 30 20 46 52 4f 4d 20  LECT c1<c0 FROM 
4660: 28 53 45 4c 45 43 54 20 74 30 2e 63 30 20 41 53  (SELECT t0.c0 AS
4670: 20 63 30 2c 20 41 56 47 28 74 30 2e 63 31 29 20   c0, AVG(t0.c1) 
4680: 41 53 20 63 31 20 46 52 4f 4d 20 74 30 29 20 0a  AS c1 FROM t0) .
4690: 7d 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  } 0.do_execsql_t
46a0: 65 73 74 20 76 69 65 77 2d 32 37 2e 38 20 7b 0a  est view-27.8 {.
46b0: 20 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20    SELECT 1 FROM 
46c0: 28 53 45 4c 45 43 54 20 74 30 2e 63 30 20 41 53  (SELECT t0.c0 AS
46d0: 20 63 30 2c 20 41 56 47 28 74 30 2e 63 31 29 20   c0, AVG(t0.c1) 
46e0: 41 53 20 63 31 20 46 52 4f 4d 20 74 30 29 20 57  AS c1 FROM t0) W
46f0: 48 45 52 45 20 63 31 3c 63 30 0a 7d 20 7b 7d 0a  HERE c1<c0.} {}.
4700: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4710: 76 69 65 77 2d 32 37 2e 39 20 7b 0a 20 20 53 45  view-27.9 {.  SE
4720: 4c 45 43 54 20 31 20 46 52 4f 4d 20 28 53 45 4c  LECT 1 FROM (SEL
4730: 45 43 54 20 74 30 2e 63 30 20 41 53 20 63 30 2c  ECT t0.c0 AS c0,
4740: 20 41 56 47 28 74 30 2e 63 31 29 20 41 53 20 63   AVG(t0.c1) AS c
4750: 31 20 46 52 4f 4d 20 74 30 29 20 57 48 45 52 45  1 FROM t0) WHERE
4760: 20 63 30 3c 63 31 0a 7d 20 7b 31 7d 0a 0a 23 2d   c0<c1.} {1}..#-
4770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
47a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
47b0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f 64  --------.reset_d
47c0: 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  b.do_execsql_tes
47d0: 74 20 76 69 65 77 2d 32 38 2e 30 20 7b 0a 20 20  t view-28.0 {.  
47e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 30 28  CREATE TABLE t0(
47f0: 63 30 20 54 45 58 54 29 3b 0a 20 20 43 52 45 41  c0 TEXT);.  CREA
4800: 54 45 20 56 49 45 57 20 76 30 28 63 30 29 20 41  TE VIEW v0(c0) A
4810: 53 20 53 45 4c 45 43 54 20 74 30 2e 63 30 20 46  S SELECT t0.c0 F
4820: 52 4f 4d 20 74 30 3b 0a 20 20 49 4e 53 45 52 54  ROM t0;.  INSERT
4830: 20 49 4e 54 4f 20 74 30 28 63 30 29 20 56 41 4c   INTO t0(c0) VAL
4840: 55 45 53 20 28 27 30 27 29 3b 0a 7d 0a 64 6f 5f  UES ('0');.}.do_
4850: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 76 69 65  execsql_test vie
4860: 77 2d 32 38 2e 31 20 7b 0a 20 20 53 45 4c 45 43  w-28.1 {.  SELEC
4870: 54 20 30 20 49 4e 20 28 63 30 29 20 46 52 4f 4d  T 0 IN (c0) FROM
4880: 20 74 30 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78   t0;.} {0}.do_ex
4890: 65 63 73 71 6c 5f 74 65 73 74 20 76 69 65 77 2d  ecsql_test view-
48a0: 32 38 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  28.2 {.  SELECT 
48b0: 30 20 49 4e 20 28 63 30 29 20 46 52 4f 4d 20 28  0 IN (c0) FROM (
48c0: 53 45 4c 45 43 54 20 63 30 20 46 52 4f 4d 20 74  SELECT c0 FROM t
48d0: 30 29 3b 0a 7d 20 7b 30 7d 0a 0a 66 69 6e 69 73  0);.} {0}..finis
48e0: 68 5f 74 65 73 74 0a                             h_test.