/ Hex Artifact Content
Login

Artifact fb28b3687e03625425bc216edf8b186ce974aa71008e2aa1f426a7dcb75a601d:


0000: 23 20 32 30 30 38 20 4a 75 6c 79 20 31 35 0a 23  # 2008 July 15.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 0a 23 0a 23 20 54 68 65 20 66 6f 63 75 73 20   .#.# The focus 
01b0: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20  of this file is 
01c0: 74 65 73 74 69 6e 67 20 68 6f 77 20 53 51 4c 69  testing how SQLi
01d0: 74 65 20 67 65 6e 65 72 61 74 65 73 20 74 68 65  te generates the
01e0: 20 6e 61 6d 65 73 0a 23 20 6f 66 20 63 6f 6c 75   names.# of colu
01f0: 6d 6e 73 20 69 6e 20 61 20 72 65 73 75 6c 74 20  mns in a result 
0200: 73 65 74 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74  set..#..set test
0210: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0220: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0230: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0240: 2e 74 63 6c 0a 0a 23 20 52 75 6c 65 73 20 28 61  .tcl..# Rules (a
0250: 70 70 6c 69 65 64 20 69 6e 20 6f 72 64 65 72 29  pplied in order)
0260: 3a 0a 23 0a 23 20 28 31 29 20 49 66 20 74 68 65  :.#.# (1) If the
0270: 72 65 20 69 73 20 61 6e 20 41 53 20 63 6c 61 75  re is an AS clau
0280: 73 65 2c 20 75 73 65 20 69 74 2e 0a 23 0a 23 20  se, use it..#.# 
0290: 28 32 29 20 41 20 6e 6f 6e 2d 74 72 69 76 61 6c  (2) A non-trival
02a0: 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6e 6f 74   expression (not
02b0: 20 61 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20   a table column 
02c0: 6e 61 6d 65 29 20 74 68 65 6e 20 74 68 65 20 6e  name) then the n
02d0: 61 6d 65 20 69 73 0a 23 20 20 20 20 20 61 20 63  ame is.#     a c
02e0: 6f 70 79 20 6f 66 20 74 68 65 20 65 78 70 72 65  opy of the expre
02f0: 73 73 69 6f 6e 20 74 65 78 74 2e 0a 23 0a 23 20  ssion text..#.# 
0300: 28 33 29 20 49 66 20 73 68 6f 72 74 5f 63 6f 6c  (3) If short_col
0310: 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 2c 20 74 68  umn_names=ON, th
0320: 65 6e 20 6a 75 73 74 20 74 68 65 20 61 62 62 72  en just the abbr
0330: 65 76 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6e  eviated column n
0340: 61 6d 65 20 77 69 74 68 6f 75 74 0a 23 20 20 20  ame without.#   
0350: 20 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65    the table name
0360: 2e 0a 23 0a 23 20 28 34 29 20 57 68 65 6e 20 73  ..#.# (4) When s
0370: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
0380: 73 3d 4f 46 46 20 61 6e 64 20 66 75 6c 6c 5f 63  s=OFF and full_c
0390: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 20  olumn_names=OFF 
03a0: 74 68 65 6e 0a 23 20 20 20 20 20 75 73 65 20 63  then.#     use c
03b0: 61 73 65 20 28 32 29 20 66 6f 72 20 73 69 6d 70  ase (2) for simp
03c0: 6c 65 20 71 75 65 72 69 65 73 20 61 6e 64 20 63  le queries and c
03d0: 61 73 65 20 28 35 29 20 66 6f 72 20 6a 6f 69 6e  ase (5) for join
03e0: 73 2e 0a 23 0a 23 20 28 35 29 20 57 68 65 6e 20  s..#.# (5) When 
03f0: 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  short_column_nam
0400: 65 73 3d 4f 46 46 20 61 6e 64 20 66 75 6c 6c 5f  es=OFF and full_
0410: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 20  column_names=ON 
0420: 74 68 65 6e 0a 23 20 20 20 20 20 75 73 65 20 74  then.#     use t
0430: 68 65 20 66 6f 72 6d 3a 20 54 41 42 4c 45 2e 43  he form: TABLE.C
0440: 4f 4c 55 4d 4e 0a 23 0a 0a 0a 23 20 56 65 72 69  OLUMN.#...# Veri
0450: 66 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 73  fy the default s
0460: 65 74 74 69 6e 67 73 20 66 6f 72 20 73 68 6f 72  ettings for shor
0470: 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 61 6e  t_column_name an
0480: 64 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  d full_column_na
0490: 6d 65 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  me.#.do_test col
04a0: 6e 61 6d 65 2d 31 2e 31 20 7b 0a 20 20 64 62 20  name-1.1 {.  db 
04b0: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 73 68 6f  eval {PRAGMA sho
04c0: 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 7d  rt_column_names}
04d0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63  .} {1}.do_test c
04e0: 6f 6c 6e 61 6d 65 2d 31 2e 32 20 7b 0a 20 20 64  olname-1.2 {.  d
04f0: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 66  b eval {PRAGMA f
0500: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
0510: 7d 0a 7d 20 7b 30 7d 0a 0a 23 20 54 65 73 74 73  }.} {0}..# Tests
0520: 20 66 6f 72 20 74 68 65 6e 20 73 68 6f 72 74 3d   for then short=
0530: 4f 4e 20 61 6e 64 20 66 75 6c 6c 3d 61 6e 79 0a  ON and full=any.
0540: 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d  #.do_test colnam
0550: 65 2d 32 2e 31 20 7b 0a 20 20 64 62 20 65 76 61  e-2.1 {.  db eva
0560: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0570: 41 42 4c 45 20 74 61 62 63 28 61 2c 62 2c 63 29  ABLE tabc(a,b,c)
0580: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0590: 4f 20 74 61 62 63 20 56 41 4c 55 45 53 28 31 2c  O tabc VALUES(1,
05a0: 32 2c 33 29 3b 0a 20 20 20 20 43 52 45 41 54 45  2,3);.    CREATE
05b0: 20 54 41 42 4c 45 20 74 78 79 7a 28 78 2c 79 2c   TABLE txyz(x,y,
05c0: 7a 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  z);.    INSERT I
05d0: 4e 54 4f 20 74 78 79 7a 20 56 41 4c 55 45 53 28  NTO txyz VALUES(
05e0: 34 2c 35 2c 36 29 3b 0a 20 20 20 20 43 52 45 41  4,5,6);.    CREA
05f0: 54 45 20 54 41 42 4c 45 20 74 62 6f 74 68 28 61  TE TABLE tboth(a
0600: 2c 62 2c 63 2c 78 2c 79 2c 7a 29 3b 0a 20 20 20  ,b,c,x,y,z);.   
0610: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6f   INSERT INTO tbo
0620: 74 68 20 56 41 4c 55 45 53 28 31 31 2c 31 32 2c  th VALUES(11,12,
0630: 31 33 2c 31 34 2c 31 35 2c 31 36 29 3b 0a 20 20  13,14,15,16);.  
0640: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
0650: 20 41 53 20 53 45 4c 45 43 54 20 74 61 62 43 2e   AS SELECT tabC.
0660: 61 2c 20 74 78 79 5a 2e 78 2c 20 2a 20 0a 20 20  a, txyZ.x, * .  
0670: 20 20 20 20 46 52 4f 4d 20 74 61 62 63 2c 20 74      FROM tabc, t
0680: 78 79 7a 20 4f 52 44 45 52 20 42 59 20 31 20 4c  xyz ORDER BY 1 L
0690: 49 4d 49 54 20 31 3b 0a 20 20 20 20 43 52 45 41  IMIT 1;.    CREA
06a0: 54 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45  TE VIEW v2 AS SE
06b0: 4c 45 43 54 20 74 61 62 43 2e 61 2c 20 74 78 79  LECT tabC.a, txy
06c0: 5a 2e 78 2c 20 74 62 6f 54 68 2e 61 2c 20 74 62  Z.x, tboTh.a, tb
06d0: 6f 74 48 2e 78 2c 20 2a 0a 20 20 20 20 20 20 46  otH.x, *.      F
06e0: 52 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 2c 20  ROM tabc, txyz, 
06f0: 74 62 6f 74 68 20 4f 52 44 45 52 20 42 59 20 31  tboth ORDER BY 1
0700: 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d 0a 20 20   LIMIT 1;.  }.  
0710: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
0720: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 61 62  ELECT * FROM tab
0730: 63 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31 20 62 20  c;.  }.} {a 1 b 
0740: 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63  2 c 3}.do_test c
0750: 6f 6c 6e 61 6d 65 2d 32 2e 32 20 7b 0a 20 20 65  olname-2.2 {.  e
0760: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45  xecsql2 {.    SE
0770: 4c 45 43 54 20 54 61 62 63 2e 61 2c 20 74 41 62  LECT Tabc.a, tAb
0780: 63 2e 62 2c 20 74 61 42 63 2e 63 2c 20 2a 20 46  c.b, taBc.c, * F
0790: 52 4f 4d 20 74 61 62 63 0a 20 20 7d 0a 7d 20 7b  ROM tabc.  }.} {
07a0: 61 20 31 20 62 20 32 20 63 20 33 20 61 20 31 20  a 1 b 2 c 3 a 1 
07b0: 62 20 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73 74  b 2 c 3}.do_test
07c0: 20 63 6f 6c 6e 61 6d 65 2d 32 2e 33 20 7b 0a 20   colname-2.3 {. 
07d0: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
07e0: 53 45 4c 45 43 54 20 2b 74 61 62 63 2e 61 2c 20  SELECT +tabc.a, 
07f0: 2d 74 61 62 63 2e 62 2c 20 74 61 62 63 2e 63 2c  -tabc.b, tabc.c,
0800: 20 2a 20 46 52 4f 4d 20 74 61 62 63 0a 20 20 7d   * FROM tabc.  }
0810: 0a 7d 20 7b 2b 74 61 62 63 2e 61 20 31 20 2d 74  .} {+tabc.a 1 -t
0820: 61 62 63 2e 62 20 2d 32 20 63 20 33 20 61 20 31  abc.b -2 c 3 a 1
0830: 20 62 20 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73   b 2 c 3}.do_tes
0840: 74 20 63 6f 6c 6e 61 6d 65 2d 32 2e 34 20 7b 0a  t colname-2.4 {.
0850: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
0860: 20 53 45 4c 45 43 54 20 2b 74 61 62 63 2e 61 20   SELECT +tabc.a 
0870: 41 53 20 41 41 41 2c 20 2d 74 61 62 63 2e 62 20  AS AAA, -tabc.b 
0880: 41 53 20 42 42 42 2c 20 74 61 62 63 2e 63 20 43  AS BBB, tabc.c C
0890: 43 43 2c 20 2a 20 46 52 4f 4d 20 74 61 62 63 0a  CC, * FROM tabc.
08a0: 20 20 7d 0a 7d 20 7b 41 41 41 20 31 20 42 42 42    }.} {AAA 1 BBB
08b0: 20 2d 32 20 43 43 43 20 33 20 61 20 31 20 62 20   -2 CCC 3 a 1 b 
08c0: 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63  2 c 3}.do_test c
08d0: 6f 6c 6e 61 6d 65 2d 32 2e 35 20 7b 0a 20 20 65  olname-2.5 {.  e
08e0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45  xecsql2 {.    SE
08f0: 4c 45 43 54 20 74 61 62 63 2e 61 2c 20 74 78 79  LECT tabc.a, txy
0900: 7a 2e 78 2c 20 2a 20 46 52 4f 4d 20 74 61 62 63  z.x, * FROM tabc
0910: 2c 20 74 78 79 7a 3b 0a 20 20 7d 0a 7d 20 7b 61  , txyz;.  }.} {a
0920: 20 31 20 78 20 34 20 61 20 31 20 62 20 32 20 63   1 x 4 a 1 b 2 c
0930: 20 33 20 78 20 34 20 79 20 35 20 7a 20 36 7d 0a   3 x 4 y 5 z 6}.
0940: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
0950: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  2.6 {.  execsql2
0960: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 61   {.    SELECT ta
0970: 62 63 2e 61 2c 20 74 78 79 7a 2e 78 2c 20 74 61  bc.a, txyz.x, ta
0980: 62 63 2e 2a 2c 20 74 78 79 7a 2e 2a 20 46 52 4f  bc.*, txyz.* FRO
0990: 4d 20 74 61 62 63 2c 20 74 78 79 7a 3b 0a 20 20  M tabc, txyz;.  
09a0: 7d 0a 7d 20 7b 61 20 31 20 78 20 34 20 61 20 31  }.} {a 1 x 4 a 1
09b0: 20 62 20 32 20 63 20 33 20 78 20 34 20 79 20 35   b 2 c 3 x 4 y 5
09c0: 20 7a 20 36 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   z 6}.do_test co
09d0: 6c 6e 61 6d 65 2d 32 2e 37 20 7b 0a 20 20 65 78  lname-2.7 {.  ex
09e0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
09f0: 45 43 54 20 74 61 62 63 2e 61 2c 20 74 78 79 7a  ECT tabc.a, txyz
0a00: 2e 78 2c 20 74 62 6f 74 68 2e 61 2c 20 74 62 6f  .x, tboth.a, tbo
0a10: 74 68 2e 78 2c 20 2a 20 46 52 4f 4d 20 74 61 62  th.x, * FROM tab
0a20: 63 2c 20 74 78 79 7a 2c 20 74 62 6f 74 68 3b 0a  c, txyz, tboth;.
0a30: 20 20 7d 0a 7d 20 7b 61 20 31 31 20 78 20 31 34    }.} {a 11 x 14
0a40: 20 61 20 31 31 20 78 20 31 34 20 61 20 31 31 20   a 11 x 14 a 11 
0a50: 62 20 31 32 20 63 20 31 33 20 78 20 31 34 20 79  b 12 c 13 x 14 y
0a60: 20 31 35 20 7a 20 31 36 20 61 20 31 31 20 62 20   15 z 16 a 11 b 
0a70: 31 32 20 63 20 31 33 20 78 20 31 34 20 79 20 31  12 c 13 x 14 y 1
0a80: 35 20 7a 20 31 36 7d 0a 64 6f 5f 74 65 73 74 20  5 z 16}.do_test 
0a90: 63 6f 6c 6e 61 6d 65 2d 32 2e 38 20 7b 0a 20 20  colname-2.8 {.  
0aa0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
0ab0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20  ELECT * FROM v1 
0ac0: 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20 7d 0a  ORDER BY 2;.  }.
0ad0: 7d 20 7b 61 20 31 20 78 20 34 20 61 3a 31 20 31  } {a 1 x 4 a:1 1
0ae0: 20 62 20 32 20 63 20 33 20 78 3a 31 20 34 20 79   b 2 c 3 x:1 4 y
0af0: 20 35 20 7a 20 36 7d 0a 64 6f 5f 74 65 73 74 20   5 z 6}.do_test 
0b00: 63 6f 6c 6e 61 6d 65 2d 32 2e 39 20 7b 0a 20 20  colname-2.9 {.  
0b10: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
0b20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 20  ELECT * FROM v2 
0b30: 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20 7d 0a  ORDER BY 2;.  }.
0b40: 7d 20 7b 61 20 31 20 78 20 34 20 61 3a 31 20 31  } {a 1 x 4 a:1 1
0b50: 31 20 78 3a 31 20 31 34 20 61 3a 32 20 31 20 62  1 x:1 14 a:2 1 b
0b60: 20 32 20 63 20 33 20 78 3a 32 20 34 20 79 20 35   2 c 3 x:2 4 y 5
0b70: 20 7a 20 36 20 61 3a 33 20 31 31 20 62 3a 31 20   z 6 a:3 11 b:1 
0b80: 31 32 20 63 3a 31 20 31 33 20 78 3a 33 20 31 34  12 c:1 13 x:3 14
0b90: 20 79 3a 31 20 31 35 20 7a 3a 31 20 31 36 7d 0a   y:1 15 z:1 16}.
0ba0: 0a 0a 23 20 54 65 73 74 73 20 66 6f 72 20 73 68  ..# Tests for sh
0bb0: 6f 72 74 3d 4f 46 46 20 61 6e 64 20 66 75 6c 6c  ort=OFF and full
0bc0: 3d 4f 46 46 0a 23 0a 64 6f 5f 74 65 73 74 20 63  =OFF.#.do_test c
0bd0: 6f 6c 6e 61 6d 65 2d 33 2e 31 20 7b 0a 20 20 64  olname-3.1 {.  d
0be0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41  b eval {.    PRA
0bf0: 47 4d 41 20 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e  GMA short_column
0c00: 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20 20 20  _names=OFF;.    
0c10: 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75  PRAGMA full_colu
0c20: 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20  mn_names=OFF;.  
0c30: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 33    CREATE VIEW v3
0c40: 20 41 53 20 53 45 4c 45 43 54 20 74 61 62 43 2e   AS SELECT tabC.
0c50: 61 2c 20 74 78 79 5a 2e 78 2c 20 2a 0a 20 20 20  a, txyZ.x, *.   
0c60: 20 20 20 46 52 4f 4d 20 74 61 62 63 2c 20 74 78     FROM tabc, tx
0c70: 79 7a 20 4f 52 44 45 52 20 42 59 20 31 20 4c 49  yz ORDER BY 1 LI
0c80: 4d 49 54 20 31 3b 0a 20 20 20 20 43 52 45 41 54  MIT 1;.    CREAT
0c90: 45 20 56 49 45 57 20 76 34 20 41 53 20 53 45 4c  E VIEW v4 AS SEL
0ca0: 45 43 54 20 74 61 62 43 2e 61 2c 20 74 78 79 5a  ECT tabC.a, txyZ
0cb0: 2e 78 2c 20 74 62 6f 54 68 2e 61 2c 20 74 62 6f  .x, tboTh.a, tbo
0cc0: 74 48 2e 78 2c 20 2a 20 0a 20 20 20 20 20 20 46  tH.x, * .      F
0cd0: 52 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 2c 20  ROM tabc, txyz, 
0ce0: 74 62 6f 74 68 20 4f 52 44 45 52 20 42 59 20 31  tboth ORDER BY 1
0cf0: 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d 0a 20 20   LIMIT 1;.  }.  
0d00: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
0d10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 61 62  ELECT * FROM tab
0d20: 63 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31 20 62 20  c;.  }.} {a 1 b 
0d30: 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63  2 c 3}.do_test c
0d40: 6f 6c 6e 61 6d 65 2d 33 2e 32 20 7b 0a 20 20 65  olname-3.2 {.  e
0d50: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45  xecsql2 {.    SE
0d60: 4c 45 43 54 20 54 61 62 63 2e 61 2c 20 74 41 62  LECT Tabc.a, tAb
0d70: 63 2e 62 2c 20 74 61 42 63 2e 63 20 46 52 4f 4d  c.b, taBc.c FROM
0d80: 20 74 61 62 63 0a 20 20 7d 0a 7d 20 7b 54 61 62   tabc.  }.} {Tab
0d90: 63 2e 61 20 31 20 74 41 62 63 2e 62 20 32 20 74  c.a 1 tAbc.b 2 t
0da0: 61 42 63 2e 63 20 33 7d 0a 64 6f 5f 74 65 73 74  aBc.c 3}.do_test
0db0: 20 63 6f 6c 6e 61 6d 65 2d 33 2e 33 20 7b 0a 20   colname-3.3 {. 
0dc0: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
0dd0: 53 45 4c 45 43 54 20 2b 74 61 62 63 2e 61 2c 20  SELECT +tabc.a, 
0de0: 2d 74 61 62 63 2e 62 2c 20 74 61 62 63 2e 63 20  -tabc.b, tabc.c 
0df0: 46 52 4f 4d 20 74 61 62 63 0a 20 20 7d 0a 7d 20  FROM tabc.  }.} 
0e00: 7b 2b 74 61 62 63 2e 61 20 31 20 2d 74 61 62 63  {+tabc.a 1 -tabc
0e10: 2e 62 20 2d 32 20 74 61 62 63 2e 63 20 33 7d 0a  .b -2 tabc.c 3}.
0e20: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
0e30: 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  3.4 {.  execsql2
0e40: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2b 74   {.    SELECT +t
0e50: 61 62 63 2e 61 20 41 53 20 41 41 41 2c 20 2d 74  abc.a AS AAA, -t
0e60: 61 62 63 2e 62 20 41 53 20 42 42 42 2c 20 74 61  abc.b AS BBB, ta
0e70: 62 63 2e 63 20 43 43 43 20 46 52 4f 4d 20 74 61  bc.c CCC FROM ta
0e80: 62 63 0a 20 20 7d 0a 7d 20 7b 41 41 41 20 31 20  bc.  }.} {AAA 1 
0e90: 42 42 42 20 2d 32 20 43 43 43 20 33 7d 0a 64 6f  BBB -2 CCC 3}.do
0ea0: 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 33 2e  _test colname-3.
0eb0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  5 {.  execsql2 {
0ec0: 0a 20 20 20 20 53 45 4c 45 43 54 20 54 61 62 63  .    SELECT Tabc
0ed0: 2e 61 2c 20 54 78 79 7a 2e 78 2c 20 2a 20 46 52  .a, Txyz.x, * FR
0ee0: 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 3b 0a 20  OM tabc, txyz;. 
0ef0: 20 7d 0a 7d 20 7b 54 61 62 63 2e 61 20 31 20 54   }.} {Tabc.a 1 T
0f00: 78 79 7a 2e 78 20 34 20 61 20 31 20 62 20 32 20  xyz.x 4 a 1 b 2 
0f10: 63 20 33 20 78 20 34 20 79 20 35 20 7a 20 36 7d  c 3 x 4 y 5 z 6}
0f20: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
0f30: 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.6 {.  execsql
0f40: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74  2 {.    SELECT t
0f50: 61 62 63 2e 2a 2c 20 74 78 79 7a 2e 2a 20 46 52  abc.*, txyz.* FR
0f60: 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 3b 0a 20  OM tabc, txyz;. 
0f70: 20 7d 0a 7d 20 7b 61 20 31 20 62 20 32 20 63 20   }.} {a 1 b 2 c 
0f80: 33 20 78 20 34 20 79 20 35 20 7a 20 36 7d 0a 64  3 x 4 y 5 z 6}.d
0f90: 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 33  o_test colname-3
0fa0: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .7 {.  execsql2 
0fb0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
0fc0: 52 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 2c 20  ROM tabc, txyz, 
0fd0: 74 62 6f 74 68 3b 0a 20 20 7d 0a 7d 20 7b 61 20  tboth;.  }.} {a 
0fe0: 31 31 20 62 20 31 32 20 63 20 31 33 20 78 20 31  11 b 12 c 13 x 1
0ff0: 34 20 79 20 31 35 20 7a 20 31 36 20 61 20 31 31  4 y 15 z 16 a 11
1000: 20 62 20 31 32 20 63 20 31 33 20 78 20 31 34 20   b 12 c 13 x 14 
1010: 79 20 31 35 20 7a 20 31 36 7d 0a 64 6f 5f 74 65  y 15 z 16}.do_te
1020: 73 74 20 63 6f 6c 6e 61 6d 65 2d 33 2e 38 20 7b  st colname-3.8 {
1030: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
1040: 20 20 53 45 4c 45 43 54 20 76 31 2e 61 2c 20 2a    SELECT v1.a, *
1050: 20 46 52 4f 4d 20 76 31 20 4f 52 44 45 52 20 42   FROM v1 ORDER B
1060: 59 20 32 3b 0a 20 20 7d 0a 7d 20 7b 76 31 2e 61  Y 2;.  }.} {v1.a
1070: 20 31 20 61 20 31 20 78 20 34 20 61 3a 31 20 31   1 a 1 x 4 a:1 1
1080: 20 62 20 32 20 63 20 33 20 78 3a 31 20 34 20 79   b 2 c 3 x:1 4 y
1090: 20 35 20 7a 20 36 7d 0a 64 6f 5f 74 65 73 74 20   5 z 6}.do_test 
10a0: 63 6f 6c 6e 61 6d 65 2d 33 2e 39 20 7b 0a 20 20  colname-3.9 {.  
10b0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
10c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 20  ELECT * FROM v2 
10d0: 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20 7d 0a  ORDER BY 2;.  }.
10e0: 7d 20 7b 61 20 31 20 78 20 34 20 61 3a 31 20 31  } {a 1 x 4 a:1 1
10f0: 31 20 78 3a 31 20 31 34 20 61 3a 32 20 31 20 62  1 x:1 14 a:2 1 b
1100: 20 32 20 63 20 33 20 78 3a 32 20 34 20 79 20 35   2 c 3 x:2 4 y 5
1110: 20 7a 20 36 20 61 3a 33 20 31 31 20 62 3a 31 20   z 6 a:3 11 b:1 
1120: 31 32 20 63 3a 31 20 31 33 20 78 3a 33 20 31 34  12 c:1 13 x:3 14
1130: 20 79 3a 31 20 31 35 20 7a 3a 31 20 31 36 7d 0a   y:1 15 z:1 16}.
1140: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
1150: 33 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.10 {.  execsql
1160: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2 {.    SELECT *
1170: 20 46 52 4f 4d 20 76 33 20 4f 52 44 45 52 20 42   FROM v3 ORDER B
1180: 59 20 32 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31 20  Y 2;.  }.} {a 1 
1190: 78 20 34 20 61 3a 31 20 31 20 62 20 32 20 63 20  x 4 a:1 1 b 2 c 
11a0: 33 20 78 3a 31 20 34 20 79 20 35 20 7a 20 36 7d  3 x:1 4 y 5 z 6}
11b0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
11c0: 2d 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -3.11 {.  execsq
11d0: 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  l2 {.    SELECT 
11e0: 2a 20 46 52 4f 4d 20 76 34 20 4f 52 44 45 52 20  * FROM v4 ORDER 
11f0: 42 59 20 32 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31  BY 2;.  }.} {a 1
1200: 20 78 20 34 20 61 3a 31 20 31 31 20 78 3a 31 20   x 4 a:1 11 x:1 
1210: 31 34 20 61 3a 32 20 31 20 62 20 32 20 63 20 33  14 a:2 1 b 2 c 3
1220: 20 78 3a 32 20 34 20 79 20 35 20 7a 20 36 20 61   x:2 4 y 5 z 6 a
1230: 3a 33 20 31 31 20 62 3a 31 20 31 32 20 63 3a 31  :3 11 b:1 12 c:1
1240: 20 31 33 20 78 3a 33 20 31 34 20 79 3a 31 20 31   13 x:3 14 y:1 1
1250: 35 20 7a 3a 31 20 31 36 7d 0a 0a 23 20 54 65 73  5 z:1 16}..# Tes
1260: 74 20 66 6f 72 20 73 68 6f 72 74 3d 4f 46 46 20  t for short=OFF 
1270: 61 6e 64 20 66 75 6c 6c 3d 4f 4e 0a 23 0a 64 6f  and full=ON.#.do
1280: 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 34 2e  _test colname-4.
1290: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
12a0: 20 20 20 20 50 52 41 47 4d 41 20 73 68 6f 72 74      PRAGMA short
12b0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46  _column_names=OF
12c0: 46 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 75  F;.    PRAGMA fu
12d0: 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d  ll_column_names=
12e0: 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  ON;.    CREATE V
12f0: 49 45 57 20 76 35 20 41 53 20 53 45 4c 45 43 54  IEW v5 AS SELECT
1300: 20 74 61 62 43 2e 61 2c 20 74 78 79 5a 2e 78 2c   tabC.a, txyZ.x,
1310: 20 2a 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 61   *.      FROM ta
1320: 62 63 2c 20 74 78 79 7a 20 4f 52 44 45 52 20 42  bc, txyz ORDER B
1330: 59 20 31 20 4c 49 4d 49 54 20 31 3b 0a 20 20 20  Y 1 LIMIT 1;.   
1340: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 36 20   CREATE VIEW v6 
1350: 41 53 20 53 45 4c 45 43 54 20 74 61 62 43 2e 61  AS SELECT tabC.a
1360: 2c 20 74 78 79 5a 2e 78 2c 20 74 62 6f 54 68 2e  , txyZ.x, tboTh.
1370: 61 2c 20 74 62 6f 74 48 2e 78 2c 20 2a 20 0a 20  a, tbotH.x, * . 
1380: 20 20 20 20 20 46 52 4f 4d 20 74 61 62 63 2c 20       FROM tabc, 
1390: 74 78 79 7a 2c 20 74 62 6f 74 68 20 4f 52 44 45  txyz, tboth ORDE
13a0: 52 20 42 59 20 31 20 4c 49 4d 49 54 20 31 3b 0a  R BY 1 LIMIT 1;.
13b0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b    }.  execsql2 {
13c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
13d0: 4f 4d 20 74 61 62 63 3b 0a 20 20 7d 0a 7d 20 7b  OM tabc;.  }.} {
13e0: 74 61 62 63 2e 61 20 31 20 74 61 62 63 2e 62 20  tabc.a 1 tabc.b 
13f0: 32 20 74 61 62 63 2e 63 20 33 7d 0a 64 6f 5f 74  2 tabc.c 3}.do_t
1400: 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 34 2e 32 20  est colname-4.2 
1410: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
1420: 20 20 20 53 45 4c 45 43 54 20 54 61 62 63 2e 61     SELECT Tabc.a
1430: 2c 20 74 41 62 63 2e 62 2c 20 74 61 42 63 2e 63  , tAbc.b, taBc.c
1440: 20 46 52 4f 4d 20 74 61 62 63 0a 20 20 7d 0a 7d   FROM tabc.  }.}
1450: 20 7b 74 61 62 63 2e 61 20 31 20 74 61 62 63 2e   {tabc.a 1 tabc.
1460: 62 20 32 20 74 61 62 63 2e 63 20 33 7d 0a 64 6f  b 2 tabc.c 3}.do
1470: 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 34 2e  _test colname-4.
1480: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  3 {.  execsql2 {
1490: 0a 20 20 20 20 53 45 4c 45 43 54 20 2b 74 61 62  .    SELECT +tab
14a0: 63 2e 61 2c 20 2d 74 61 62 63 2e 62 2c 20 74 61  c.a, -tabc.b, ta
14b0: 62 63 2e 63 20 46 52 4f 4d 20 74 61 62 63 0a 20  bc.c FROM tabc. 
14c0: 20 7d 0a 7d 20 7b 2b 74 61 62 63 2e 61 20 31 20   }.} {+tabc.a 1 
14d0: 2d 74 61 62 63 2e 62 20 2d 32 20 74 61 62 63 2e  -tabc.b -2 tabc.
14e0: 63 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  c 3}.do_test col
14f0: 6e 61 6d 65 2d 34 2e 34 20 7b 0a 20 20 65 78 65  name-4.4 {.  exe
1500: 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45  csql2 {.    SELE
1510: 43 54 20 2b 74 61 62 63 2e 61 20 41 53 20 41 41  CT +tabc.a AS AA
1520: 41 2c 20 2d 74 61 62 63 2e 62 20 41 53 20 42 42  A, -tabc.b AS BB
1530: 42 2c 20 74 61 62 63 2e 63 20 43 43 43 20 46 52  B, tabc.c CCC FR
1540: 4f 4d 20 74 61 62 63 0a 20 20 7d 0a 7d 20 7b 41  OM tabc.  }.} {A
1550: 41 41 20 31 20 42 42 42 20 2d 32 20 43 43 43 20  AA 1 BBB -2 CCC 
1560: 33 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61  3}.do_test colna
1570: 6d 65 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73  me-4.5 {.  execs
1580: 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ql2 {.    SELECT
1590: 20 54 61 62 63 2e 61 2c 20 54 78 79 7a 2e 78 2c   Tabc.a, Txyz.x,
15a0: 20 2a 20 46 52 4f 4d 20 74 61 62 63 2c 20 74 78   * FROM tabc, tx
15b0: 79 7a 3b 0a 20 20 7d 0a 7d 20 7b 74 61 62 63 2e  yz;.  }.} {tabc.
15c0: 61 20 31 20 74 78 79 7a 2e 78 20 34 20 74 61 62  a 1 txyz.x 4 tab
15d0: 63 2e 61 20 31 20 74 61 62 63 2e 62 20 32 20 74  c.a 1 tabc.b 2 t
15e0: 61 62 63 2e 63 20 33 20 74 78 79 7a 2e 78 20 34  abc.c 3 txyz.x 4
15f0: 20 74 78 79 7a 2e 79 20 35 20 74 78 79 7a 2e 7a   txyz.y 5 txyz.z
1600: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e   6}.do_test coln
1610: 61 6d 65 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63  ame-4.6 {.  exec
1620: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
1630: 54 20 74 61 62 63 2e 2a 2c 20 74 78 79 7a 2e 2a  T tabc.*, txyz.*
1640: 20 46 52 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a   FROM tabc, txyz
1650: 3b 0a 20 20 7d 0a 7d 20 7b 74 61 62 63 2e 61 20  ;.  }.} {tabc.a 
1660: 31 20 74 61 62 63 2e 62 20 32 20 74 61 62 63 2e  1 tabc.b 2 tabc.
1670: 63 20 33 20 74 78 79 7a 2e 78 20 34 20 74 78 79  c 3 txyz.x 4 txy
1680: 7a 2e 79 20 35 20 74 78 79 7a 2e 7a 20 36 7d 0a  z.y 5 txyz.z 6}.
1690: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
16a0: 34 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  4.7 {.  execsql2
16b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
16c0: 46 52 4f 4d 20 74 61 62 63 2c 20 74 78 79 7a 2c  FROM tabc, txyz,
16d0: 20 74 62 6f 74 68 3b 0a 20 20 7d 0a 7d 20 7b 74   tboth;.  }.} {t
16e0: 61 62 63 2e 61 20 31 20 74 61 62 63 2e 62 20 32  abc.a 1 tabc.b 2
16f0: 20 74 61 62 63 2e 63 20 33 20 74 78 79 7a 2e 78   tabc.c 3 txyz.x
1700: 20 34 20 74 78 79 7a 2e 79 20 35 20 74 78 79 7a   4 txyz.y 5 txyz
1710: 2e 7a 20 36 20 74 62 6f 74 68 2e 61 20 31 31 20  .z 6 tboth.a 11 
1720: 74 62 6f 74 68 2e 62 20 31 32 20 74 62 6f 74 68  tboth.b 12 tboth
1730: 2e 63 20 31 33 20 74 62 6f 74 68 2e 78 20 31 34  .c 13 tboth.x 14
1740: 20 74 62 6f 74 68 2e 79 20 31 35 20 74 62 6f 74   tboth.y 15 tbot
1750: 68 2e 7a 20 31 36 7d 0a 64 6f 5f 74 65 73 74 20  h.z 16}.do_test 
1760: 63 6f 6c 6e 61 6d 65 2d 34 2e 38 20 7b 0a 20 20  colname-4.8 {.  
1770: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
1780: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20  ELECT * FROM v1 
1790: 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20 7d 0a  ORDER BY 2;.  }.
17a0: 7d 20 7b 76 31 2e 61 20 31 20 76 31 2e 78 20 34  } {v1.a 1 v1.x 4
17b0: 20 76 31 2e 61 3a 31 20 31 20 76 31 2e 62 20 32   v1.a:1 1 v1.b 2
17c0: 20 76 31 2e 63 20 33 20 76 31 2e 78 3a 31 20 34   v1.c 3 v1.x:1 4
17d0: 20 76 31 2e 79 20 35 20 76 31 2e 7a 20 36 7d 0a   v1.y 5 v1.z 6}.
17e0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
17f0: 34 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  4.9 {.  execsql2
1800: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1810: 46 52 4f 4d 20 76 32 20 4f 52 44 45 52 20 42 59  FROM v2 ORDER BY
1820: 20 32 3b 0a 20 20 7d 0a 7d 20 7b 76 32 2e 61 20   2;.  }.} {v2.a 
1830: 31 20 76 32 2e 78 20 34 20 76 32 2e 61 3a 31 20  1 v2.x 4 v2.a:1 
1840: 31 31 20 76 32 2e 78 3a 31 20 31 34 20 76 32 2e  11 v2.x:1 14 v2.
1850: 61 3a 32 20 31 20 76 32 2e 62 20 32 20 76 32 2e  a:2 1 v2.b 2 v2.
1860: 63 20 33 20 76 32 2e 78 3a 32 20 34 20 76 32 2e  c 3 v2.x:2 4 v2.
1870: 79 20 35 20 76 32 2e 7a 20 36 20 76 32 2e 61 3a  y 5 v2.z 6 v2.a:
1880: 33 20 31 31 20 76 32 2e 62 3a 31 20 31 32 20 76  3 11 v2.b:1 12 v
1890: 32 2e 63 3a 31 20 31 33 20 76 32 2e 78 3a 33 20  2.c:1 13 v2.x:3 
18a0: 31 34 20 76 32 2e 79 3a 31 20 31 35 20 76 32 2e  14 v2.y:1 15 v2.
18b0: 7a 3a 31 20 31 36 7d 0a 64 6f 5f 74 65 73 74 20  z:1 16}.do_test 
18c0: 63 6f 6c 6e 61 6d 65 2d 34 2e 31 30 20 7b 0a 20  colname-4.10 {. 
18d0: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
18e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 33  SELECT * FROM v3
18f0: 20 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20 7d   ORDER BY 2;.  }
1900: 0a 7d 20 7b 76 33 2e 61 20 31 20 76 33 2e 78 20  .} {v3.a 1 v3.x 
1910: 34 20 76 33 2e 61 3a 31 20 31 20 76 33 2e 62 20  4 v3.a:1 1 v3.b 
1920: 32 20 76 33 2e 63 20 33 20 76 33 2e 78 3a 31 20  2 v3.c 3 v3.x:1 
1930: 34 20 76 33 2e 79 20 35 20 76 33 2e 7a 20 36 7d  4 v3.y 5 v3.z 6}
1940: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
1950: 2d 34 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -4.11 {.  execsq
1960: 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  l2 {.    SELECT 
1970: 2a 20 46 52 4f 4d 20 76 34 20 4f 52 44 45 52 20  * FROM v4 ORDER 
1980: 42 59 20 32 3b 0a 20 20 7d 0a 7d 20 7b 76 34 2e  BY 2;.  }.} {v4.
1990: 61 20 31 20 76 34 2e 78 20 34 20 76 34 2e 61 3a  a 1 v4.x 4 v4.a:
19a0: 31 20 31 31 20 76 34 2e 78 3a 31 20 31 34 20 76  1 11 v4.x:1 14 v
19b0: 34 2e 61 3a 32 20 31 20 76 34 2e 62 20 32 20 76  4.a:2 1 v4.b 2 v
19c0: 34 2e 63 20 33 20 76 34 2e 78 3a 32 20 34 20 76  4.c 3 v4.x:2 4 v
19d0: 34 2e 79 20 35 20 76 34 2e 7a 20 36 20 76 34 2e  4.y 5 v4.z 6 v4.
19e0: 61 3a 33 20 31 31 20 76 34 2e 62 3a 31 20 31 32  a:3 11 v4.b:1 12
19f0: 20 76 34 2e 63 3a 31 20 31 33 20 76 34 2e 78 3a   v4.c:1 13 v4.x:
1a00: 33 20 31 34 20 76 34 2e 79 3a 31 20 31 35 20 76  3 14 v4.y:1 15 v
1a10: 34 2e 7a 3a 31 20 31 36 7d 0a 64 6f 5f 74 65 73  4.z:1 16}.do_tes
1a20: 74 20 63 6f 6c 6e 61 6d 65 2d 34 2e 31 32 20 7b  t colname-4.12 {
1a30: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
1a40: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1a50: 76 35 20 4f 52 44 45 52 20 42 59 20 32 3b 0a 20  v5 ORDER BY 2;. 
1a60: 20 7d 0a 7d 20 7b 76 35 2e 61 20 31 20 76 35 2e   }.} {v5.a 1 v5.
1a70: 78 20 34 20 76 35 2e 61 3a 31 20 31 20 76 35 2e  x 4 v5.a:1 1 v5.
1a80: 62 20 32 20 76 35 2e 63 20 33 20 76 35 2e 78 3a  b 2 v5.c 3 v5.x:
1a90: 31 20 34 20 76 35 2e 79 20 35 20 76 35 2e 7a 20  1 4 v5.y 5 v5.z 
1aa0: 36 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61  6}.do_test colna
1ab0: 6d 65 2d 34 2e 31 33 20 7b 0a 20 20 65 78 65 63  me-4.13 {.  exec
1ac0: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
1ad0: 54 20 2a 20 46 52 4f 4d 20 76 36 20 4f 52 44 45  T * FROM v6 ORDE
1ae0: 52 20 42 59 20 32 3b 0a 20 20 7d 0a 7d 20 7b 76  R BY 2;.  }.} {v
1af0: 36 2e 61 20 31 20 76 36 2e 78 20 34 20 76 36 2e  6.a 1 v6.x 4 v6.
1b00: 61 3a 31 20 31 31 20 76 36 2e 78 3a 31 20 31 34  a:1 11 v6.x:1 14
1b10: 20 76 36 2e 61 3a 32 20 31 20 76 36 2e 62 20 32   v6.a:2 1 v6.b 2
1b20: 20 76 36 2e 63 20 33 20 76 36 2e 78 3a 32 20 34   v6.c 3 v6.x:2 4
1b30: 20 76 36 2e 79 20 35 20 76 36 2e 7a 20 36 20 76   v6.y 5 v6.z 6 v
1b40: 36 2e 61 3a 33 20 31 31 20 76 36 2e 62 3a 31 20  6.a:3 11 v6.b:1 
1b50: 31 32 20 76 36 2e 63 3a 31 20 31 33 20 76 36 2e  12 v6.c:1 13 v6.
1b60: 78 3a 33 20 31 34 20 76 36 2e 79 3a 31 20 31 35  x:3 14 v6.y:1 15
1b70: 20 76 36 2e 7a 3a 31 20 31 36 7d 0a 0a 23 20 74   v6.z:1 16}..# t
1b80: 69 63 6b 65 74 20 23 33 32 32 39 0a 64 6f 5f 74  icket #3229.do_t
1b90: 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 35 2e 31 20  est colname-5.1 
1ba0: 7b 0a 20 20 6c 72 65 70 6c 61 63 65 20 5b 64 62  {.  lreplace [db
1bb0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
1bc0: 43 54 20 78 2e 2a 20 46 52 4f 4d 20 73 71 6c 69  CT x.* FROM sqli
1bd0: 74 65 5f 6d 61 73 74 65 72 20 58 20 4c 49 4d 49  te_master X LIMI
1be0: 54 20 31 3b 0a 20 20 7d 5d 20 33 20 33 20 78 0a  T 1;.  }] 3 3 x.
1bf0: 7d 20 7b 74 61 62 6c 65 20 74 61 62 63 20 74 61  } {table tabc ta
1c00: 62 63 20 78 20 7b 43 52 45 41 54 45 20 54 41 42  bc x {CREATE TAB
1c10: 4c 45 20 74 61 62 63 28 61 2c 62 2c 63 29 7d 7d  LE tabc(a,b,c)}}
1c20: 0a 0a 23 20 74 69 63 6b 65 74 20 23 33 33 37 30  ..# ticket #3370
1c30: 2c 20 23 33 33 37 31 2c 20 23 33 33 37 32 0a 23  , #3371, #3372.#
1c40: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
1c50: 2d 36 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  -6.1 {.  db clos
1c60: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
1c70: 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61 6c  est.db.  db eval
1c80: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
1c90: 42 4c 45 20 74 36 28 61 2c 20 5b 27 61 27 5d 2c  BLE t6(a, ['a'],
1ca0: 20 5b 22 61 22 5d 2c 20 22 5b 61 5d 22 2c 20 5b   ["a"], "[a]", [
1cb0: 60 61 60 5d 29 3b 0a 20 20 20 20 49 4e 53 45 52  `a`]);.    INSER
1cc0: 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53  T INTO t6 VALUES
1cd0: 28 31 2c 32 2c 33 2c 34 2c 35 29 3b 0a 20 20 7d  (1,2,3,4,5);.  }
1ce0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c  .  execsql2 {SEL
1cf0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 7d 0a 7d  ECT * FROM t6}.}
1d00: 20 7b 61 20 31 20 27 61 27 20 32 20 7b 22 61 22   {a 1 'a' 2 {"a"
1d10: 7d 20 33 20 7b 5b 61 5d 7d 20 34 20 60 61 60 20  } 3 {[a]} 4 `a` 
1d20: 35 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61  5}.do_test colna
1d30: 6d 65 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  me-6.2 {.  execs
1d40: 71 6c 32 20 7b 53 45 4c 45 43 54 20 5b 27 61 27  ql2 {SELECT ['a'
1d50: 5d 2c 20 5b 60 61 60 5d 2c 20 22 5b 61 5d 22 2c  ], [`a`], "[a]",
1d60: 20 5b 61 5d 2c 20 5b 22 61 22 5d 20 46 52 4f 4d   [a], ["a"] FROM
1d70: 20 74 36 7d 0a 7d 20 7b 27 61 27 20 32 20 60 61   t6}.} {'a' 2 `a
1d80: 60 20 35 20 7b 5b 61 5d 7d 20 34 20 61 20 31 20  ` 5 {[a]} 4 a 1 
1d90: 7b 22 61 22 7d 20 33 7d 0a 64 6f 5f 74 65 73 74  {"a"} 3}.do_test
1da0: 20 63 6f 6c 6e 61 6d 65 2d 36 2e 33 20 7b 0a 20   colname-6.3 {. 
1db0: 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43   execsql2 {SELEC
1dc0: 54 20 22 27 61 27 22 2c 20 22 60 61 60 22 2c 20  T "'a'", "`a`", 
1dd0: 22 5b 61 5d 22 2c 20 22 61 22 2c 20 22 22 22 61  "[a]", "a", """a
1de0: 22 22 22 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b  """ FROM t6}.} {
1df0: 27 61 27 20 32 20 60 61 60 20 35 20 7b 5b 61 5d  'a' 2 `a` 5 {[a]
1e00: 7d 20 34 20 61 20 31 20 7b 22 61 22 7d 20 33 7d  } 4 a 1 {"a"} 3}
1e10: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
1e20: 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.4 {.  execsql
1e30: 32 20 7b 53 45 4c 45 43 54 20 60 27 61 27 60 2c  2 {SELECT `'a'`,
1e40: 20 60 60 60 61 60 60 60 2c 20 60 5b 61 5d 60 2c   ```a```, `[a]`,
1e50: 20 60 61 60 2c 20 60 22 61 22 60 20 46 52 4f 4d   `a`, `"a"` FROM
1e60: 20 74 36 7d 0a 7d 20 7b 27 61 27 20 32 20 60 61   t6}.} {'a' 2 `a
1e70: 60 20 35 20 7b 5b 61 5d 7d 20 34 20 61 20 31 20  ` 5 {[a]} 4 a 1 
1e80: 7b 22 61 22 7d 20 33 7d 0a 64 6f 5f 74 65 73 74  {"a"} 3}.do_test
1e90: 20 63 6f 6c 6e 61 6d 65 2d 36 2e 31 31 20 7b 0a   colname-6.11 {.
1ea0: 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45    execsql2 {SELE
1eb0: 43 54 20 61 2c 20 6d 61 78 28 61 29 20 41 53 20  CT a, max(a) AS 
1ec0: 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 61 20  m FROM t6}.} {a 
1ed0: 31 20 6d 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 m 1}.do_test c
1ee0: 6f 6c 6e 61 6d 65 2d 36 2e 31 32 20 7b 0a 20 20  olname-6.12 {.  
1ef0: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
1f00: 20 60 61 60 2c 20 6d 61 78 28 61 29 20 41 53 20   `a`, max(a) AS 
1f10: 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 61 20  m FROM t6}.} {a 
1f20: 31 20 6d 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 m 1}.do_test c
1f30: 6f 6c 6e 61 6d 65 2d 36 2e 31 33 20 7b 0a 20 20  olname-6.13 {.  
1f40: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
1f50: 20 22 61 22 2c 20 6d 61 78 28 61 29 20 41 53 20   "a", max(a) AS 
1f60: 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 61 20  m FROM t6}.} {a 
1f70: 31 20 6d 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 m 1}.do_test c
1f80: 6f 6c 6e 61 6d 65 2d 36 2e 31 34 20 7b 0a 20 20  olname-6.14 {.  
1f90: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
1fa0: 20 5b 61 5d 2c 20 6d 61 78 28 61 29 20 41 53 20   [a], max(a) AS 
1fb0: 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 61 20  m FROM t6}.} {a 
1fc0: 31 20 6d 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 m 1}.do_test c
1fd0: 6f 6c 6e 61 6d 65 2d 36 2e 31 35 20 7b 0a 20 20  olname-6.15 {.  
1fe0: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
1ff0: 20 74 36 2e 61 2c 20 6d 61 78 28 61 29 20 41 53   t6.a, max(a) AS
2000: 20 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 61   m FROM t6}.} {a
2010: 20 31 20 6d 20 31 7d 0a 64 6f 5f 74 65 73 74 20   1 m 1}.do_test 
2020: 63 6f 6c 6e 61 6d 65 2d 36 2e 31 36 20 7b 0a 20  colname-6.16 {. 
2030: 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43   execsql2 {SELEC
2040: 54 20 5b 27 61 27 5d 2c 20 6d 61 78 28 5b 27 61  T ['a'], max(['a
2050: 27 5d 29 20 41 53 20 6d 20 46 52 4f 4d 20 74 36  ']) AS m FROM t6
2060: 7d 0a 7d 20 7b 27 61 27 20 32 20 6d 20 32 7d 0a  }.} {'a' 2 m 2}.
2070: 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d  do_test colname-
2080: 36 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  6.17 {.  execsql
2090: 32 20 7b 53 45 4c 45 43 54 20 5b 22 61 22 5d 2c  2 {SELECT ["a"],
20a0: 20 6d 61 78 28 5b 22 61 22 5d 29 20 41 53 20 6d   max(["a"]) AS m
20b0: 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b 7b 22 61   FROM t6}.} {{"a
20c0: 22 7d 20 33 20 6d 20 33 7d 0a 64 6f 5f 74 65 73  "} 3 m 3}.do_tes
20d0: 74 20 63 6f 6c 6e 61 6d 65 2d 36 2e 31 38 20 7b  t colname-6.18 {
20e0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c  .  execsql2 {SEL
20f0: 45 43 54 20 22 5b 61 5d 22 2c 20 6d 61 78 28 22  ECT "[a]", max("
2100: 5b 61 5d 22 29 20 41 53 20 6d 20 46 52 4f 4d 20  [a]") AS m FROM 
2110: 74 36 7d 0a 7d 20 7b 7b 5b 61 5d 7d 20 34 20 6d  t6}.} {{[a]} 4 m
2120: 20 34 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e   4}.do_test coln
2130: 61 6d 65 2d 36 2e 31 39 20 7b 0a 20 20 65 78 65  ame-6.19 {.  exe
2140: 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 22 60  csql2 {SELECT "`
2150: 61 60 22 2c 20 6d 61 78 28 5b 60 61 60 5d 29 20  a`", max([`a`]) 
2160: 41 53 20 6d 20 46 52 4f 4d 20 74 36 7d 0a 7d 20  AS m FROM t6}.} 
2170: 7b 60 61 60 20 35 20 6d 20 35 7d 0a 0a 0a 23 20  {`a` 5 m 5}...# 
2180: 54 69 63 6b 65 74 20 23 33 34 32 39 0a 23 20 57  Ticket #3429.# W
2190: 65 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20 61 6e  e cannot find an
21a0: 79 74 68 69 6e 67 20 77 72 6f 6e 67 2c 20 62 75  ything wrong, bu
21b0: 74 20 69 74 20 6e 65 76 65 72 20 68 75 72 74 73  t it never hurts
21c0: 20 74 6f 20 61 64 64 20 61 6e 6f 74 68 65 72 0a   to add another.
21d0: 23 20 74 65 73 74 20 63 61 73 65 2e 0a 23 0a 64  # test case..#.d
21e0: 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 37  o_test colname-7
21f0: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
2200: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2210: 45 20 74 37 28 78 20 49 4e 54 45 47 45 52 20 50  E t7(x INTEGER P
2220: 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a  RIMARY KEY, y);.
2230: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2240: 74 37 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a  t7 VALUES(1,2);.
2250: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b    }.  execsql2 {
2260: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
2270: 46 52 4f 4d 20 74 37 7d 0a 7d 20 7b 78 20 31 20  FROM t7}.} {x 1 
2280: 78 20 31 20 79 20 32 7d 0a 0a 23 20 54 69 63 6b  x 1 y 2}..# Tick
2290: 65 74 73 20 23 33 38 39 33 20 61 6e 64 20 23 33  ets #3893 and #3
22a0: 39 38 34 2e 20 20 28 53 61 6d 65 20 70 72 6f 62  984.  (Same prob
22b0: 6c 65 6d 3b 20 69 6e 64 65 70 65 6e 64 65 6e 74  lem; independent
22c0: 6c 79 20 72 65 70 6f 72 74 65 64 29 0a 23 0a 64  ly reported).#.d
22d0: 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 38  o_test colname-8
22e0: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
22f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2300: 45 20 22 74 33 38 39 33 22 28 22 78 22 29 3b 0a  E "t3893"("x");.
2310: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2320: 74 33 38 39 33 20 56 41 4c 55 45 53 28 31 32 33  t3893 VALUES(123
2330: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 22 79  );.    SELECT "y
2340: 22 2e 22 78 22 20 46 52 4f 4d 20 28 53 45 4c 45  "."x" FROM (SELE
2350: 43 54 20 22 78 22 20 46 52 4f 4d 20 22 74 33 38  CT "x" FROM "t38
2360: 39 33 22 29 20 41 53 20 22 79 22 3b 0a 20 20 7d  93") AS "y";.  }
2370: 0a 7d 20 7b 31 32 33 7d 0a 0a 23 20 32 30 31 37  .} {123}..# 2017
2380: 2d 30 37 2d 32 39 3a 20 49 6e 74 65 72 61 63 74  -07-29: Interact
2390: 69 6f 6e 20 62 65 74 77 65 65 6e 20 63 6f 6c 75  ion between colu
23a0: 6d 6e 20 6e 61 6d 69 6e 67 20 61 6e 64 20 71 75  mn naming and qu
23b0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 2e 0a  ery flattening..
23c0: 23 20 46 6f 72 20 79 65 61 72 73 20 6e 6f 77 2c  # For years now,
23d0: 20 74 68 65 20 71 75 65 72 79 20 66 6c 61 74 74   the query flatt
23e0: 65 6e 65 72 20 68 61 73 20 69 6e 73 65 72 74 65  ener has inserte
23f0: 64 20 41 53 20 63 6c 61 75 73 65 73 20 6f 6e 20  d AS clauses on 
2400: 74 68 65 0a 23 20 6f 75 74 65 72 20 71 75 65 72  the.# outer quer
2410: 79 20 74 68 61 74 20 77 65 72 65 20 74 68 65 20  y that were the 
2420: 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  original SQL tex
2430: 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  t of the column.
2440: 20 20 54 68 69 73 20 63 61 75 73 65 64 0a 23 20    This caused.# 
2450: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 73 68 69 66  column-name shif
2460: 74 73 20 77 68 65 6e 20 74 68 65 20 71 75 65 72  ts when the quer
2470: 79 20 66 6c 61 74 74 65 6e 65 72 20 77 61 73 20  y flattener was 
2480: 65 6e 68 61 6e 63 65 64 2c 20 62 72 65 61 6b 69  enhanced, breaki
2490: 6e 67 0a 23 20 6c 65 67 61 63 79 20 61 70 70 6c  ng.# legacy appl
24a0: 69 63 61 74 69 6f 6e 73 2e 20 20 53 65 65 20 68  ications.  See h
24b0: 74 74 70 73 3a 2f 2f 73 71 6c 69 74 65 2e 6f 72  ttps://sqlite.or
24c0: 67 2f 73 72 63 2f 69 6e 66 6f 2f 34 31 63 32 37  g/src/info/41c27
24d0: 62 63 30 66 66 31 64 33 31 33 35 0a 23 20 66 6f  bc0ff1d3135.# fo
24e0: 72 20 64 65 74 61 69 6c 73 2e 0a 23 0a 23 20 54  r details..#.# T
24f0: 6f 20 66 69 78 20 74 68 69 73 2c 20 74 68 65 20  o fix this, the 
2500: 63 6f 6c 75 6d 6e 20 6e 61 6d 69 6e 67 20 6c 6f  column naming lo
2510: 67 69 63 20 77 61 73 20 6d 6f 76 65 64 20 61 68  gic was moved ah
2520: 65 61 64 20 6f 66 20 74 68 65 20 71 75 65 72 79  ead of the query
2530: 0a 23 20 66 6c 61 74 74 65 6e 65 72 20 73 6f 20  .# flattener so 
2540: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  that column name
2550: 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20 62  s are assigned b
2560: 65 66 6f 72 65 20 74 68 65 20 71 75 65 72 79 20  efore the query 
2570: 66 6c 61 74 74 65 6e 65 72 0a 23 20 72 75 6e 73  flattener.# runs
2580: 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  ..#.db close.sql
2590: 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a  ite3 db :memory:
25a0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
25b0: 2d 39 2e 31 30 30 20 7b 0a 20 20 64 62 20 65 76  -9.100 {.  db ev
25c0: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
25d0: 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20  TABLE t1(a,b);. 
25e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
25f0: 31 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20  1 VALUES(1,2);. 
2600: 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76     CREATE VIEW v
2610: 31 28 78 2c 79 29 20 41 53 20 53 45 4c 45 43 54  1(x,y) AS SELECT
2620: 20 61 2c 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20   a,b FROM t1;.  
2630: 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45  }.  execsql2 {SE
2640: 4c 45 43 54 20 76 31 2e 78 2c 20 28 59 29 20 46  LECT v1.x, (Y) F
2650: 52 4f 4d 20 76 31 7d 0a 20 20 23 20 50 72 69 6f  ROM v1}.  # Prio
2660: 72 20 74 6f 20 74 68 65 20 66 69 78 2c 20 74 68  r to the fix, th
2670: 69 73 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 3a  is would return:
2680: 20 20 22 76 31 2e 78 20 31 20 28 59 29 20 32 22    "v1.x 1 (Y) 2"
2690: 0a 7d 20 7b 78 20 31 20 79 20 32 7d 0a 64 6f 5f  .} {x 1 y 2}.do_
26a0: 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 39 2e 31  test colname-9.1
26b0: 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  10 {.  execsql2 
26c0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76  {SELECT * FROM v
26d0: 31 7d 0a 7d 20 7b 78 20 31 20 79 20 32 7d 0a 64  1}.} {x 1 y 2}.d
26e0: 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 39  o_test colname-9
26f0: 2e 31 32 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  .120 {.  db eval
2700: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49   {.    CREATE VI
2710: 45 57 20 76 32 28 78 2c 79 29 20 41 53 20 53 45  EW v2(x,y) AS SE
2720: 4c 45 43 54 20 61 2c 62 20 46 52 4f 4d 20 74 31  LECT a,b FROM t1
2730: 20 4c 49 4d 49 54 20 31 30 3b 0a 20 20 7d 0a 20   LIMIT 10;.  }. 
2740: 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43   execsql2 {SELEC
2750: 54 20 2a 20 46 52 4f 4d 20 76 32 20 57 48 45 52  T * FROM v2 WHER
2760: 45 20 31 7d 0a 7d 20 7b 78 20 31 20 79 20 32 7d  E 1}.} {x 1 y 2}
2770: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65  .do_test colname
2780: 2d 39 2e 31 33 30 20 7b 0a 20 20 65 78 65 63 73  -9.130 {.  execs
2790: 71 6c 32 20 7b 53 45 4c 45 43 54 20 76 32 2e 78  ql2 {SELECT v2.x
27a0: 2c 20 5b 76 32 5d 2e 5b 79 5d 20 46 52 4f 4d 20  , [v2].[y] FROM 
27b0: 76 32 20 57 48 45 52 45 20 31 7d 0a 7d 20 7b 78  v2 WHERE 1}.} {x
27c0: 20 31 20 79 20 32 7d 0a 64 6f 5f 74 65 73 74 20   1 y 2}.do_test 
27d0: 63 6f 6c 6e 61 6d 65 2d 39 2e 31 34 30 20 7b 0a  colname-9.140 {.
27e0: 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45    execsql2 {SELE
27f0: 43 54 20 2b 78 2c 20 2b 79 20 46 52 4f 4d 20 76  CT +x, +y FROM v
2800: 32 20 57 48 45 52 45 20 31 7d 0a 7d 20 7b 2b 78  2 WHERE 1}.} {+x
2810: 20 31 20 2b 79 20 32 7d 0a 0a 64 6f 5f 74 65 73   1 +y 2}..do_tes
2820: 74 20 63 6f 6c 6e 61 6d 65 2d 39 2e 32 30 30 20  t colname-9.200 
2830: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
2840: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2850: 32 28 63 2c 64 29 3b 0a 20 20 20 20 49 4e 53 45  2(c,d);.    INSE
2860: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
2870: 53 28 33 2c 34 29 3b 0a 20 20 20 20 43 52 45 41  S(3,4);.    CREA
2880: 54 45 20 56 49 45 57 20 76 33 20 41 53 20 53 45  TE VIEW v3 AS SE
2890: 4c 45 43 54 20 63 20 41 53 20 61 2c 20 64 20 41  LECT c AS a, d A
28a0: 53 20 62 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  S b FROM t2;.  }
28b0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c  .  execsql2 {SEL
28c0: 45 43 54 20 74 31 2e 61 2c 20 76 33 2e 61 20 41  ECT t1.a, v3.a A
28d0: 53 20 6e 20 46 52 4f 4d 20 74 31 20 4c 45 46 54  S n FROM t1 LEFT
28e0: 20 4a 4f 49 4e 20 76 33 7d 0a 7d 20 7b 61 20 31   JOIN v3}.} {a 1
28f0: 20 6e 20 33 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   n 3}.do_test co
2900: 6c 6e 61 6d 65 2d 39 2e 32 31 31 20 7b 0a 20 20  lname-9.211 {.  
2910: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
2920: 20 74 31 2e 61 20 41 53 20 6e 2c 20 76 33 2e 61   t1.a AS n, v3.a
2930: 20 46 52 4f 4d 20 74 31 20 4a 4f 49 4e 20 76 33   FROM t1 JOIN v3
2940: 7d 0a 7d 20 7b 6e 20 31 20 61 20 33 7d 0a 64 6f  }.} {n 1 a 3}.do
2950: 5f 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 39 2e  _test colname-9.
2960: 32 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  210 {.  execsql2
2970: 20 7b 53 45 4c 45 43 54 20 74 31 2e 61 2c 20 76   {SELECT t1.a, v
2980: 33 2e 61 20 41 53 20 6e 20 46 52 4f 4d 20 74 31  3.a AS n FROM t1
2990: 20 4a 4f 49 4e 20 76 33 7d 0a 7d 20 7b 61 20 31   JOIN v3}.} {a 1
29a0: 20 6e 20 33 7d 0a 0a 23 20 32 30 31 37 2d 31 32   n 3}..# 2017-12
29b0: 2d 32 33 3a 20 20 54 69 63 6b 65 74 20 68 74 74  -23:  Ticket htt
29c0: 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  ps://www.sqlite.
29d0: 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 33 62 34  org/src/info/3b4
29e0: 34 35 30 30 37 32 35 31 31 65 36 32 31 0a 23 20  450072511e621.# 
29f0: 49 6e 63 6f 6e 73 69 73 74 65 6e 74 20 63 6f 6c  Inconsistent col
2a00: 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 43 52 45  umn names in CRE
2a10: 41 54 45 20 54 41 42 4c 45 20 41 53 0a 23 0a 23  ATE TABLE AS.#.#
2a20: 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65   Verify that the
2a30: 20 6e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   names of column
2a40: 73 20 69 6e 20 74 68 65 20 63 72 65 61 74 65 64  s in the created
2a50: 20 74 61 62 6c 65 20 6f 66 20 61 20 43 52 45 41   table of a CREA
2a60: 54 45 20 54 41 42 4c 45 20 41 53 0a 23 20 61 72  TE TABLE AS.# ar
2a70: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  e the same as th
2a80: 65 20 6e 61 6d 65 73 20 6f 66 20 72 65 73 75 6c  e names of resul
2a90: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  t columns in the
2aa0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2ab0: 74 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t..#.do_execsql_
2ac0: 74 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 39 2e 33  test colname-9.3
2ad0: 30 30 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c  00 {.  DROP TABL
2ae0: 45 20 49 46 20 45 58 49 53 54 53 20 74 31 3b 0a  E IF EXISTS t1;.
2af0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
2b00: 45 58 49 53 54 53 20 74 32 3b 0a 20 20 43 52 45  EXISTS t2;.  CRE
2b10: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 61 61  ATE TABLE t1(aaa
2b20: 20 49 4e 54 29 3b 0a 20 20 49 4e 53 45 52 54 20   INT);.  INSERT 
2b30: 49 4e 54 4f 20 74 31 28 61 61 61 29 20 56 41 4c  INTO t1(aaa) VAL
2b40: 55 45 53 28 31 32 33 29 3b 0a 7d 0a 64 6f 5f 74  UES(123);.}.do_t
2b50: 65 73 74 20 63 6f 6c 6e 61 6d 65 2d 39 2e 33 31  est colname-9.31
2b60: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  0 {.  execsql2 {
2b70: 53 45 4c 45 43 54 20 42 42 62 20 46 52 4f 4d 20  SELECT BBb FROM 
2b80: 28 53 45 4c 45 43 54 20 61 61 61 20 41 53 20 42  (SELECT aaa AS B
2b90: 62 62 20 46 52 4f 4d 20 74 31 29 7d 0a 7d 20 7b  bb FROM t1)}.} {
2ba0: 42 62 62 20 31 32 33 7d 0a 69 66 63 61 70 61 62  Bbb 123}.ifcapab
2bb0: 6c 65 20 76 74 61 62 20 7b 0a 20 20 64 6f 5f 65  le vtab {.  do_e
2bc0: 78 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6c 6e  xecsql_test coln
2bd0: 61 6d 65 2d 39 2e 33 32 30 20 7b 0a 20 20 20 20  ame-9.320 {.    
2be0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 20  CREATE TABLE t2 
2bf0: 41 53 20 53 45 4c 45 43 54 20 42 42 62 20 46 52  AS SELECT BBb FR
2c00: 4f 4d 20 28 53 45 4c 45 43 54 20 61 61 61 20 41  OM (SELECT aaa A
2c10: 53 20 42 62 62 20 46 52 4f 4d 20 74 31 29 3b 0a  S Bbb FROM t1);.
2c20: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
2c30: 46 52 4f 4d 20 70 72 61 67 6d 61 5f 74 61 62 6c  FROM pragma_tabl
2c40: 65 5f 69 6e 66 6f 28 27 74 32 27 29 3b 0a 20 20  e_info('t2');.  
2c50: 7d 20 7b 42 62 62 7d 0a 7d 0a 0a 23 20 49 73 73  } {Bbb}.}..# Iss
2c60: 75 65 20 64 65 74 65 63 74 65 64 20 62 79 20 4f  ue detected by O
2c70: 53 53 46 75 7a 7a 20 6f 6e 20 32 30 31 37 2d 31  SSFuzz on 2017-1
2c80: 32 2d 32 34 20 28 43 68 72 69 73 74 6d 61 73 20  2-24 (Christmas 
2c90: 45 76 65 29 0a 23 20 63 61 75 73 65 64 20 62 79  Eve).# caused by
2ca0: 20 63 68 65 63 6b 2d 69 6e 20 68 74 74 70 73 3a   check-in https:
2cb0: 2f 2f 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  //sqlite.org/src
2cc0: 2f 69 6e 66 6f 2f 36 62 32 66 66 32 36 63 32 35  /info/6b2ff26c25
2cd0: 0a 23 0a 23 20 50 72 69 6f 72 20 74 6f 20 62 65  .#.# Prior to be
2ce0: 69 6e 67 20 66 69 78 65 64 2c 20 74 68 65 20 66  ing fixed, the f
2cf0: 6f 6c 6c 6f 77 69 6e 67 20 43 52 45 41 54 45 20  ollowing CREATE 
2d00: 54 41 42 4c 45 20 77 61 73 20 64 65 72 65 66 65  TABLE was derefe
2d10: 72 65 6e 63 69 6e 67 0a 23 20 61 20 4e 55 4c 4c  rencing.# a NULL
2d20: 20 70 6f 69 6e 74 65 72 20 61 6e 64 20 73 65 67   pointer and seg
2d30: 66 61 75 6c 74 69 6e 67 2e 0a 23 0a 64 6f 5f 63  faulting..#.do_c
2d40: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 63 6f 6c  atchsql_test col
2d50: 6e 61 6d 65 2d 39 2e 34 30 30 20 7b 0a 20 20 43  name-9.400 {.  C
2d60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 20 41  REATE TABLE t4 A
2d70: 53 20 53 45 4c 45 43 54 20 23 30 3b 0a 7d 20 7b  S SELECT #0;.} {
2d80: 31 20 7b 6e 65 61 72 20 22 23 30 22 3a 20 73 79  1 {near "#0": sy
2d90: 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 23 20  ntax error}}..# 
2da0: 49 73 73 75 65 20 64 65 74 65 63 74 65 64 20 62  Issue detected b
2db0: 79 20 4f 53 53 46 75 7a 7a 20 6f 6e 20 32 30 31  y OSSFuzz on 201
2dc0: 37 2d 31 32 2d 32 35 20 28 43 68 72 69 73 74 6d  7-12-25 (Christm
2dd0: 61 73 20 44 61 79 29 0a 23 20 61 6c 73 6f 20 63  as Day).# also c
2de0: 61 75 73 65 64 20 62 79 20 63 68 65 63 6b 2d 69  aused by check-i
2df0: 6e 20 68 74 74 70 73 3a 2f 2f 73 71 6c 69 74 65  n https://sqlite
2e00: 2e 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 36 62  .org/src/info/6b
2e10: 32 66 66 32 36 63 32 35 0a 23 0a 23 20 50 72 69  2ff26c25.#.# Pri
2e20: 6f 72 20 74 6f 20 62 65 69 6e 67 20 66 69 78 65  or to being fixe
2e30: 64 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d, the following
2e40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 61   CREATE TABLE ca
2e50: 75 73 65 64 20 61 6e 0a 23 20 61 73 73 65 72 74  used an.# assert
2e60: 69 6f 6e 20 66 61 75 6c 74 2e 0a 23 0a 64 6f 5f  ion fault..#.do_
2e70: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 63 6f  catchsql_test co
2e80: 6c 6e 61 6d 65 2d 39 2e 34 31 30 20 7b 0a 20 20  lname-9.410 {.  
2e90: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 20  CREATE TABLE t5 
2ea0: 41 53 20 53 45 4c 45 43 54 20 52 41 49 53 45 28  AS SELECT RAISE(
2eb0: 61 62 6f 72 74 2c 61 29 3b 0a 7d 20 7b 31 20 7b  abort,a);.} {1 {
2ec0: 52 41 49 53 45 28 29 20 6d 61 79 20 6f 6e 6c 79  RAISE() may only
2ed0: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
2ee0: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
2ef0: 6d 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  m}}..# Make sure
2f00: 20 74 68 65 20 71 75 6f 74 61 74 69 6f 6e 20 6d   the quotation m
2f10: 61 72 6b 73 20 67 65 74 20 72 65 6d 6f 76 65 64  arks get removed
2f20: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75 6d 6e   from the column
2f30: 20 6e 61 6d 65 73 0a 23 20 77 68 65 6e 20 63 6f   names.# when co
2f40: 6e 73 74 72 75 63 74 69 6e 67 20 61 20 6e 65 77  nstructing a new
2f50: 20 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20 61   table from an a
2f60: 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2e  ggregate SELECT.
2f70: 0a 23 20 45 6d 61 69 6c 20 66 72 6f 6d 20 4a 75  .# Email from Ju
2f80: 65 72 67 65 6e 20 50 61 6c 6d 20 6f 6e 20 32 30  ergen Palm on 20
2f90: 31 37 2d 30 37 2d 31 31 2e 0a 23 0a 64 6f 5f 65  17-07-11..#.do_e
2fa0: 78 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6c 6e  xecsql_test coln
2fb0: 61 6d 65 2d 31 30 2e 31 30 30 20 7b 0a 20 20 44  ame-10.100 {.  D
2fc0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
2fd0: 53 54 53 20 74 31 3b 0a 20 20 43 52 45 41 54 45  STS t1;.  CREATE
2fe0: 20 54 41 42 4c 45 20 74 31 28 22 77 69 74 68 20   TABLE t1("with 
2ff0: 73 70 61 63 65 22 20 54 45 58 54 29 3b 0a 20 20  space" TEXT);.  
3000: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
3010: 49 53 54 53 20 74 32 3b 0a 20 20 43 52 45 41 54  ISTS t2;.  CREAT
3020: 45 20 54 41 42 4c 45 20 74 32 20 41 53 20 53 45  E TABLE t2 AS SE
3030: 4c 45 43 54 20 22 77 69 74 68 20 73 70 61 63 65  LECT "with space
3040: 22 20 46 52 4f 4d 20 74 31 3b 0a 20 20 50 52 41  " FROM t1;.  PRA
3050: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
3060: 32 29 3b 0a 7d 20 7b 30 20 7b 77 69 74 68 20 73  2);.} {0 {with s
3070: 70 61 63 65 7d 20 54 45 58 54 20 30 20 7b 7d 20  pace} TEXT 0 {} 
3080: 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  0}.do_execsql_te
3090: 73 74 20 63 6f 6c 6e 61 6d 65 2d 31 30 2e 31 31  st colname-10.11
30a0: 30 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  0 {.  DROP TABLE
30b0: 20 49 46 20 45 58 49 53 54 53 20 74 33 3b 0a 20   IF EXISTS t3;. 
30c0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
30d0: 20 41 53 20 53 45 4c 45 43 54 20 22 77 69 74 68   AS SELECT "with
30e0: 20 73 70 61 63 65 22 20 46 52 4f 4d 20 74 31 20   space" FROM t1 
30f0: 47 52 4f 55 50 20 42 59 20 31 3b 0a 20 20 50 52  GROUP BY 1;.  PR
3100: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
3110: 74 33 29 3b 0a 7d 20 7b 30 20 7b 77 69 74 68 20  t3);.} {0 {with 
3120: 73 70 61 63 65 7d 20 54 45 58 54 20 30 20 7b 7d  space} TEXT 0 {}
3130: 20 30 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73   0}...finish_tes
3140: 74 0a                                            t.