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

Artifact 2b5e8500d8ec3dd4c8e0c99eb1431b3d11fcc24c:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 53 45 4c 45 43  is testing SELEC
01d0: 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
01e0: 74 20 63 6f 6e 74 61 69 6e 0a 23 20 73 75 62 71  t contain.# subq
01f0: 75 65 72 69 65 73 20 69 6e 20 74 68 65 69 72 20  ueries in their 
0200: 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 23 0a 23  FROM clause..#.#
0210: 20 24 49 64 3a 20 73 65 6c 65 63 74 36 2e 74 65   $Id: select6.te
0220: 73 74 2c 76 20 31 2e 32 39 20 32 30 30 39 2f 30  st,v 1.29 2009/0
0230: 31 2f 30 39 20 30 31 3a 31 32 3a 32 38 20 64 72  1/09 01:12:28 dr
0240: 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73  h Exp $..set tes
0250: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0260: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0270: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0280: 72 2e 74 63 6c 0a 0a 23 20 4f 6d 69 74 20 74 68  r.tcl..# Omit th
0290: 69 73 20 77 68 6f 6c 65 20 66 69 6c 65 20 69 66  is whole file if
02a0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
02b0: 62 75 69 6c 64 20 77 69 74 68 6f 75 74 20 73 75  build without su
02c0: 62 71 75 65 72 79 20 73 75 70 70 6f 72 74 2e 0a  bquery support..
02d0: 69 66 63 61 70 61 62 6c 65 20 21 73 75 62 71 75  ifcapable !subqu
02e0: 65 72 79 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  ery {.  finish_t
02f0: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0300: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
0310: 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.0 {.  execsql 
0320: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
0330: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0340: 28 78 2c 20 79 29 3b 0a 20 20 20 20 49 4e 53 45  (x, y);.    INSE
0350: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0360: 53 28 31 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45  S(1,1);.    INSE
0370: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0380: 53 28 32 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45  S(2,2);.    INSE
0390: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
03a0: 53 28 33 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45  S(3,2);.    INSE
03b0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
03c0: 53 28 34 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45  S(4,3);.    INSE
03d0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
03e0: 53 28 35 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45  S(5,3);.    INSE
03f0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0400: 53 28 36 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45  S(6,3);.    INSE
0410: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0420: 53 28 37 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45  S(7,3);.    INSE
0430: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0440: 53 28 38 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45  S(8,4);.    INSE
0450: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0460: 53 28 39 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45  S(9,4);.    INSE
0470: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0480: 53 28 31 30 2c 34 29 3b 0a 20 20 20 20 49 4e 53  S(10,4);.    INS
0490: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
04a0: 45 53 28 31 31 2c 34 29 3b 0a 20 20 20 20 49 4e  ES(11,4);.    IN
04b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
04c0: 55 45 53 28 31 32 2c 34 29 3b 0a 20 20 20 20 49  UES(12,4);.    I
04d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
04e0: 4c 55 45 53 28 31 33 2c 34 29 3b 0a 20 20 20 20  LUES(13,4);.    
04f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0500: 41 4c 55 45 53 28 31 34 2c 34 29 3b 0a 20 20 20  ALUES(14,4);.   
0510: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0520: 56 41 4c 55 45 53 28 31 35 2c 34 29 3b 0a 20 20  VALUES(15,4);.  
0530: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0540: 20 56 41 4c 55 45 53 28 31 36 2c 35 29 3b 0a 20   VALUES(16,5);. 
0550: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0560: 31 20 56 41 4c 55 45 53 28 31 37 2c 35 29 3b 0a  1 VALUES(17,5);.
0570: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0580: 74 31 20 56 41 4c 55 45 53 28 31 38 2c 35 29 3b  t1 VALUES(18,5);
0590: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
05a0: 20 74 31 20 56 41 4c 55 45 53 28 31 39 2c 35 29   t1 VALUES(19,5)
05b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
05c0: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 30 2c 35  O t1 VALUES(20,5
05d0: 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  );.    COMMIT;. 
05e0: 20 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e     SELECT DISTIN
05f0: 43 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT y FROM t1 ORD
0600: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
0610: 31 20 32 20 33 20 34 20 35 7d 0a 0a 64 6f 5f 74  1 2 3 4 5}..do_t
0620: 65 73 74 20 73 65 6c 65 63 74 36 2d 31 2e 31 20  est select6-1.1 
0630: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45  {.  execsql2 {SE
0640: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c  LECT * FROM (SEL
0650: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31  ECT x, y FROM t1
0660: 20 57 48 45 52 45 20 78 3c 32 29 7d 0a 7d 20 7b   WHERE x<2)}.} {
0670: 78 20 31 20 79 20 31 7d 0a 64 6f 5f 74 65 73 74  x 1 y 1}.do_test
0680: 20 73 65 6c 65 63 74 36 2d 31 2e 32 20 7b 0a 20   select6-1.2 {. 
0690: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
06a0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28   count(*) FROM (
06b0: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31  SELECT y FROM t1
06c0: 29 7d 0a 7d 20 7b 32 30 7d 0a 64 6f 5f 74 65 73  )}.} {20}.do_tes
06d0: 74 20 73 65 6c 65 63 74 36 2d 31 2e 33 20 7b 0a  t select6-1.3 {.
06e0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
06f0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0700: 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54  (SELECT DISTINCT
0710: 20 79 20 46 52 4f 4d 20 74 31 29 7d 0a 7d 20 7b   y FROM t1)}.} {
0720: 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  5}.do_test selec
0730: 74 36 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  t6-1.4 {.  execs
0740: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
0750: 28 2a 29 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  (*) FROM (SELECT
0760: 20 44 49 53 54 49 4e 43 54 20 2a 20 46 52 4f 4d   DISTINCT * FROM
0770: 20 28 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20   (SELECT y FROM 
0780: 74 31 29 29 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74  t1))}.} {5}.do_t
0790: 65 73 74 20 73 65 6c 65 63 74 36 2d 31 2e 35 20  est select6-1.5 
07a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
07b0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
07c0: 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  M (SELECT * FROM
07d0: 20 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43   (SELECT DISTINC
07e0: 54 20 79 20 46 52 4f 4d 20 74 31 29 29 7d 0a 7d  T y FROM t1))}.}
07f0: 20 7b 35 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65   {5}..do_test se
0800: 6c 65 63 74 36 2d 31 2e 36 20 7b 0a 20 20 65 78  lect6-1.6 {.  ex
0810: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0820: 43 54 20 2a 20 0a 20 20 20 20 46 52 4f 4d 20 28  CT * .    FROM (
0830: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
0840: 79 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20  y FROM t1 GROUP 
0850: 42 59 20 79 29 20 41 53 20 61 2c 0a 20 20 20 20  BY y) AS a,.    
0860: 20 20 20 20 20 28 53 45 4c 45 43 54 20 6d 61 78       (SELECT max
0870: 28 78 29 2c 79 20 46 52 4f 4d 20 74 31 20 47 52  (x),y FROM t1 GR
0880: 4f 55 50 20 42 59 20 79 29 20 61 73 20 62 0a 20  OUP BY y) as b. 
0890: 20 20 20 57 48 45 52 45 20 61 2e 79 3d 62 2e 79     WHERE a.y=b.y
08a0: 20 4f 52 44 45 52 20 42 59 20 61 2e 79 0a 20 20   ORDER BY a.y.  
08b0: 7d 0a 7d 20 7b 31 20 31 20 31 20 31 20 32 20 32  }.} {1 1 1 1 2 2
08c0: 20 33 20 32 20 34 20 33 20 37 20 33 20 38 20 34   3 2 4 3 7 3 8 4
08d0: 20 31 35 20 34 20 35 20 35 20 32 30 20 35 7d 0a   15 4 5 5 20 5}.
08e0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
08f0: 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.7 {.  execsql 
0900: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2e 79  {.    SELECT a.y
0910: 2c 20 61 2e 5b 63 6f 75 6e 74 28 2a 29 5d 2c 20  , a.[count(*)], 
0920: 5b 6d 61 78 28 78 29 5d 2c 20 5b 63 6f 75 6e 74  [max(x)], [count
0930: 28 2a 29 5d 0a 20 20 20 20 46 52 4f 4d 20 28 53  (*)].    FROM (S
0940: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 79  ELECT count(*),y
0950: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
0960: 59 20 79 29 20 41 53 20 61 2c 0a 20 20 20 20 20  Y y) AS a,.     
0970: 20 20 20 20 28 53 45 4c 45 43 54 20 6d 61 78 28      (SELECT max(
0980: 78 29 2c 79 20 46 52 4f 4d 20 74 31 20 47 52 4f  x),y FROM t1 GRO
0990: 55 50 20 42 59 20 79 29 20 61 73 20 62 0a 20 20  UP BY y) as b.  
09a0: 20 20 57 48 45 52 45 20 61 2e 79 3d 62 2e 79 20    WHERE a.y=b.y 
09b0: 4f 52 44 45 52 20 42 59 20 61 2e 79 0a 20 20 7d  ORDER BY a.y.  }
09c0: 0a 7d 20 7b 31 20 31 20 31 20 31 20 32 20 32 20  .} {1 1 1 1 2 2 
09d0: 33 20 32 20 33 20 34 20 37 20 34 20 34 20 38 20  3 2 3 4 7 4 4 8 
09e0: 31 35 20 38 20 35 20 35 20 32 30 20 35 7d 0a 64  15 8 5 5 20 5}.d
09f0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 31  o_test select6-1
0a00: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
0a10: 0a 20 20 20 20 53 45 4c 45 43 54 20 71 2c 20 70  .    SELECT q, p
0a20: 2c 20 72 0a 20 20 20 20 46 52 4f 4d 20 28 53 45  , r.    FROM (SE
0a30: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 61 73  LECT count(*) as
0a40: 20 70 20 2c 20 79 20 61 73 20 71 20 46 52 4f 4d   p , y as q FROM
0a50: 20 74 31 20 47 52 4f 55 50 20 42 59 20 79 29 20   t1 GROUP BY y) 
0a60: 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20 20 28  AS a,.         (
0a70: 53 45 4c 45 43 54 20 6d 61 78 28 78 29 20 61 73  SELECT max(x) as
0a80: 20 72 2c 20 79 20 61 73 20 73 20 46 52 4f 4d 20   r, y as s FROM 
0a90: 74 31 20 47 52 4f 55 50 20 42 59 20 79 29 20 61  t1 GROUP BY y) a
0aa0: 73 20 62 0a 20 20 20 20 57 48 45 52 45 20 71 3d  s b.    WHERE q=
0ab0: 73 20 4f 52 44 45 52 20 42 59 20 73 0a 20 20 7d  s ORDER BY s.  }
0ac0: 0a 7d 20 7b 31 20 31 20 31 20 32 20 32 20 33 20  .} {1 1 1 2 2 3 
0ad0: 33 20 34 20 37 20 34 20 38 20 31 35 20 35 20 35  3 4 7 4 8 15 5 5
0ae0: 20 32 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   20}.do_test sel
0af0: 65 63 74 36 2d 31 2e 39 20 7b 0a 20 20 65 78 65  ect6-1.9 {.  exe
0b00: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0b10: 54 20 71 2c 20 70 2c 20 72 2c 20 62 2e 5b 6d 69  T q, p, r, b.[mi
0b20: 6e 28 78 29 2b 79 5d 0a 20 20 20 20 46 52 4f 4d  n(x)+y].    FROM
0b30: 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   (SELECT count(*
0b40: 29 20 61 73 20 70 20 2c 20 79 20 61 73 20 71 20  ) as p , y as q 
0b50: 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59  FROM t1 GROUP BY
0b60: 20 79 29 20 41 53 20 61 2c 0a 20 20 20 20 20 20   y) AS a,.      
0b70: 20 20 20 28 53 45 4c 45 43 54 20 6d 61 78 28 78     (SELECT max(x
0b80: 29 20 61 73 20 72 2c 20 79 20 61 73 20 73 2c 20  ) as r, y as s, 
0b90: 6d 69 6e 28 78 29 2b 79 20 46 52 4f 4d 20 74 31  min(x)+y FROM t1
0ba0: 20 47 52 4f 55 50 20 42 59 20 79 29 20 61 73 20   GROUP BY y) as 
0bb0: 62 0a 20 20 20 20 57 48 45 52 45 20 71 3d 73 20  b.    WHERE q=s 
0bc0: 4f 52 44 45 52 20 42 59 20 73 0a 20 20 7d 0a 7d  ORDER BY s.  }.}
0bd0: 20 7b 31 20 31 20 31 20 32 20 32 20 32 20 33 20   {1 1 1 2 2 2 3 
0be0: 34 20 33 20 34 20 37 20 37 20 34 20 38 20 31 35  4 3 4 7 7 4 8 15
0bf0: 20 31 32 20 35 20 35 20 32 30 20 32 31 7d 0a 0a   12 5 5 20 21}..
0c00: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
0c10: 32 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.0 {.  execsql 
0c20: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
0c30: 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45 52 20  LE t2(a INTEGER 
0c40: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b  PRIMARY KEY, b);
0c50: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0c60: 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t2 SELECT * FRO
0c70: 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t1;.    SELECT
0c80: 20 44 49 53 54 49 4e 43 54 20 62 20 46 52 4f 4d   DISTINCT b FROM
0c90: 20 74 32 20 4f 52 44 45 52 20 42 59 20 62 3b 0a   t2 ORDER BY b;.
0ca0: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35    }.} {1 2 3 4 5
0cb0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
0cc0: 36 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  6-2.1 {.  execsq
0cd0: 6c 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  l2 {SELECT * FRO
0ce0: 4d 20 28 53 45 4c 45 43 54 20 61 2c 20 62 20 46  M (SELECT a, b F
0cf0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3c 32  ROM t2 WHERE a<2
0d00: 29 7d 0a 7d 20 7b 61 20 31 20 62 20 31 7d 0a 64  )}.} {a 1 b 1}.d
0d10: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 32  o_test select6-2
0d20: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0d30: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0d40: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 62 20 46  FROM (SELECT b F
0d50: 52 4f 4d 20 74 32 29 7d 0a 7d 20 7b 32 30 7d 0a  ROM t2)}.} {20}.
0d60: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
0d70: 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.3 {.  execsql 
0d80: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
0d90: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44 49   FROM (SELECT DI
0da0: 53 54 49 4e 43 54 20 62 20 46 52 4f 4d 20 74 32  STINCT b FROM t2
0db0: 29 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74  )}.} {5}.do_test
0dc0: 20 73 65 6c 65 63 74 36 2d 32 2e 34 20 7b 0a 20   select6-2.4 {. 
0dd0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0de0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28   count(*) FROM (
0df0: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
0e00: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 62  * FROM (SELECT b
0e10: 20 46 52 4f 4d 20 74 32 29 29 7d 0a 7d 20 7b 35   FROM t2))}.} {5
0e20: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
0e30: 36 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  6-2.5 {.  execsq
0e40: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  l {SELECT count(
0e50: 2a 29 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20  *) FROM (SELECT 
0e60: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44  * FROM (SELECT D
0e70: 49 53 54 49 4e 43 54 20 62 20 46 52 4f 4d 20 74  ISTINCT b FROM t
0e80: 32 29 29 7d 0a 7d 20 7b 35 7d 0a 0a 64 6f 5f 74  2))}.} {5}..do_t
0e90: 65 73 74 20 73 65 6c 65 63 74 36 2d 32 2e 36 20  est select6-2.6 
0ea0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0eb0: 20 20 53 45 4c 45 43 54 20 2a 20 0a 20 20 20 20    SELECT * .    
0ec0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75  FROM (SELECT cou
0ed0: 6e 74 28 2a 29 2c 62 20 46 52 4f 4d 20 74 32 20  nt(*),b FROM t2 
0ee0: 47 52 4f 55 50 20 42 59 20 62 29 20 41 53 20 61  GROUP BY b) AS a
0ef0: 2c 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45  ,.         (SELE
0f00: 43 54 20 6d 61 78 28 61 29 2c 62 20 46 52 4f 4d  CT max(a),b FROM
0f10: 20 74 32 20 47 52 4f 55 50 20 42 59 20 62 29 20   t2 GROUP BY b) 
0f20: 61 73 20 62 0a 20 20 20 20 57 48 45 52 45 20 61  as b.    WHERE a
0f30: 2e 62 3d 62 2e 62 20 4f 52 44 45 52 20 42 59 20  .b=b.b ORDER BY 
0f40: 61 2e 62 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31  a.b.  }.} {1 1 1
0f50: 20 31 20 32 20 32 20 33 20 32 20 34 20 33 20 37   1 2 2 3 2 4 3 7
0f60: 20 33 20 38 20 34 20 31 35 20 34 20 35 20 35 20   3 8 4 15 4 5 5 
0f70: 32 30 20 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65  20 5}.do_test se
0f80: 6c 65 63 74 36 2d 32 2e 37 20 7b 0a 20 20 65 78  lect6-2.7 {.  ex
0f90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0fa0: 43 54 20 61 2e 62 2c 20 61 2e 5b 63 6f 75 6e 74  CT a.b, a.[count
0fb0: 28 2a 29 5d 2c 20 5b 6d 61 78 28 61 29 5d 2c 20  (*)], [max(a)], 
0fc0: 5b 63 6f 75 6e 74 28 2a 29 5d 0a 20 20 20 20 46  [count(*)].    F
0fd0: 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75 6e  ROM (SELECT coun
0fe0: 74 28 2a 29 2c 62 20 46 52 4f 4d 20 74 32 20 47  t(*),b FROM t2 G
0ff0: 52 4f 55 50 20 42 59 20 62 29 20 41 53 20 61 2c  ROUP BY b) AS a,
1000: 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 43  .         (SELEC
1010: 54 20 6d 61 78 28 61 29 2c 62 20 46 52 4f 4d 20  T max(a),b FROM 
1020: 74 32 20 47 52 4f 55 50 20 42 59 20 62 29 20 61  t2 GROUP BY b) a
1030: 73 20 62 0a 20 20 20 20 57 48 45 52 45 20 61 2e  s b.    WHERE a.
1040: 62 3d 62 2e 62 20 4f 52 44 45 52 20 42 59 20 61  b=b.b ORDER BY a
1050: 2e 62 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20  .b.  }.} {1 1 1 
1060: 31 20 32 20 32 20 33 20 32 20 33 20 34 20 37 20  1 2 2 3 2 3 4 7 
1070: 34 20 34 20 38 20 31 35 20 38 20 35 20 35 20 32  4 4 8 15 8 5 5 2
1080: 30 20 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  0 5}.do_test sel
1090: 65 63 74 36 2d 32 2e 38 20 7b 0a 20 20 65 78 65  ect6-2.8 {.  exe
10a0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
10b0: 54 20 71 2c 20 70 2c 20 72 0a 20 20 20 20 46 52  T q, p, r.    FR
10c0: 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74  OM (SELECT count
10d0: 28 2a 29 20 61 73 20 70 20 2c 20 62 20 61 73 20  (*) as p , b as 
10e0: 71 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20  q FROM t2 GROUP 
10f0: 42 59 20 62 29 20 41 53 20 61 2c 0a 20 20 20 20  BY b) AS a,.    
1100: 20 20 20 20 20 28 53 45 4c 45 43 54 20 6d 61 78       (SELECT max
1110: 28 61 29 20 61 73 20 72 2c 20 62 20 61 73 20 73  (a) as r, b as s
1120: 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20 42   FROM t2 GROUP B
1130: 59 20 62 29 20 61 73 20 62 0a 20 20 20 20 57 48  Y b) as b.    WH
1140: 45 52 45 20 71 3d 73 20 4f 52 44 45 52 20 42 59  ERE q=s ORDER BY
1150: 20 73 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20   s.  }.} {1 1 1 
1160: 32 20 32 20 33 20 33 20 34 20 37 20 34 20 38 20  2 2 3 3 4 7 4 8 
1170: 31 35 20 35 20 35 20 32 30 7d 0a 64 6f 5f 74 65  15 5 5 20}.do_te
1180: 73 74 20 73 65 6c 65 63 74 36 2d 32 2e 39 20 7b  st select6-2.9 {
1190: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
11a0: 20 53 45 4c 45 43 54 20 61 2e 71 2c 20 61 2e 70   SELECT a.q, a.p
11b0: 2c 20 62 2e 72 0a 20 20 20 20 46 52 4f 4d 20 28  , b.r.    FROM (
11c0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
11d0: 61 73 20 70 20 2c 20 62 20 61 73 20 71 20 46 52  as p , b as q FR
11e0: 4f 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 71  OM t2 GROUP BY q
11f0: 29 20 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20  ) AS a,.        
1200: 20 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29 20   (SELECT max(a) 
1210: 61 73 20 72 2c 20 62 20 61 73 20 73 20 46 52 4f  as r, b as s FRO
1220: 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 73 29  M t2 GROUP BY s)
1230: 20 61 73 20 62 0a 20 20 20 20 57 48 45 52 45 20   as b.    WHERE 
1240: 61 2e 71 3d 62 2e 73 20 4f 52 44 45 52 20 42 59  a.q=b.s ORDER BY
1250: 20 61 2e 71 0a 20 20 7d 0a 7d 20 7b 31 20 31 20   a.q.  }.} {1 1 
1260: 31 20 32 20 32 20 33 20 33 20 34 20 37 20 34 20  1 2 2 3 3 4 7 4 
1270: 38 20 31 35 20 35 20 35 20 32 30 7d 0a 0a 64 6f  8 15 5 5 20}..do
1280: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e  _test select6-3.
1290: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
12a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
12b0: 4f 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  OM (SELECT * FRO
12c0: 4d 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  M (SELECT * FROM
12d0: 20 74 31 20 57 48 45 52 45 20 78 3d 33 29 29 3b   t1 WHERE x=3));
12e0: 0a 20 20 7d 0a 7d 20 7b 78 20 33 20 79 20 32 7d  .  }.} {x 3 y 2}
12f0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
1300: 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.2 {.  execsql
1310: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1320: 46 52 4f 4d 0a 20 20 20 20 20 20 28 53 45 4c 45  FROM.      (SELE
1330: 43 54 20 61 2e 71 2c 20 61 2e 70 2c 20 62 2e 72  CT a.q, a.p, b.r
1340: 0a 20 20 20 20 20 20 20 46 52 4f 4d 20 28 53 45  .       FROM (SE
1350: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 61 73  LECT count(*) as
1360: 20 70 20 2c 20 62 20 61 73 20 71 20 46 52 4f 4d   p , b as q FROM
1370: 20 74 32 20 47 52 4f 55 50 20 42 59 20 71 29 20   t2 GROUP BY q) 
1380: 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20 20 20  AS a,.          
1390: 20 20 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29    (SELECT max(a)
13a0: 20 61 73 20 72 2c 20 62 20 61 73 20 73 20 46 52   as r, b as s FR
13b0: 4f 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 73  OM t2 GROUP BY s
13c0: 29 20 61 73 20 62 0a 20 20 20 20 20 20 20 57 48  ) as b.       WH
13d0: 45 52 45 20 61 2e 71 3d 62 2e 73 20 4f 52 44 45  ERE a.q=b.s ORDE
13e0: 52 20 42 59 20 61 2e 71 29 0a 20 20 20 20 4f 52  R BY a.q).    OR
13f0: 44 45 52 20 42 59 20 22 61 2e 71 22 0a 20 20 7d  DER BY "a.q".  }
1400: 0a 7d 20 7b 31 20 31 20 31 20 32 20 32 20 33 20  .} {1 1 1 2 2 3 
1410: 33 20 34 20 37 20 34 20 38 20 31 35 20 35 20 35  3 4 7 4 8 15 5 5
1420: 20 32 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   20}.do_test sel
1430: 65 63 74 36 2d 33 2e 33 20 7b 0a 20 20 65 78 65  ect6-3.3 {.  exe
1440: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1450: 54 20 61 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 28  T a,b,a+b FROM (
1460: 53 45 4c 45 43 54 20 61 76 67 28 78 29 20 61 73  SELECT avg(x) as
1470: 20 27 61 27 2c 20 61 76 67 28 79 29 20 61 73 20   'a', avg(y) as 
1480: 27 62 27 20 46 52 4f 4d 20 74 31 29 0a 20 20 7d  'b' FROM t1).  }
1490: 0a 7d 20 7b 31 30 2e 35 20 33 2e 37 20 31 34 2e  .} {10.5 3.7 14.
14a0: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  2}.do_test selec
14b0: 74 36 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63 73  t6-3.4 {.  execs
14c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
14d0: 61 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45  a,b,a+b FROM (SE
14e0: 4c 45 43 54 20 61 76 67 28 78 29 20 61 73 20 27  LECT avg(x) as '
14f0: 61 27 2c 20 61 76 67 28 79 29 20 61 73 20 27 62  a', avg(y) as 'b
1500: 27 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ' FROM t1 WHERE 
1510: 79 3d 34 29 0a 20 20 7d 0a 7d 20 7b 31 31 2e 35  y=4).  }.} {11.5
1520: 20 34 2e 30 20 31 35 2e 35 7d 0a 64 6f 5f 74 65   4.0 15.5}.do_te
1530: 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 35 20 7b  st select6-3.5 {
1540: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1550: 20 53 45 4c 45 43 54 20 78 2c 79 2c 78 2b 79 20   SELECT x,y,x+y 
1560: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76 67  FROM (SELECT avg
1570: 28 61 29 20 61 73 20 27 78 27 2c 20 61 76 67 28  (a) as 'x', avg(
1580: 62 29 20 61 73 20 27 79 27 20 46 52 4f 4d 20 74  b) as 'y' FROM t
1590: 32 20 57 48 45 52 45 20 61 3d 34 29 0a 20 20 7d  2 WHERE a=4).  }
15a0: 0a 7d 20 7b 34 2e 30 20 33 2e 30 20 37 2e 30 7d  .} {4.0 3.0 7.0}
15b0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
15c0: 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.6 {.  execsql
15d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c   {.    SELECT a,
15e0: 62 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45  b,a+b FROM (SELE
15f0: 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27  CT avg(x) as 'a'
1600: 2c 20 61 76 67 28 79 29 20 61 73 20 27 62 27 20  , avg(y) as 'b' 
1610: 46 52 4f 4d 20 74 31 29 0a 20 20 20 20 57 48 45  FROM t1).    WHE
1620: 52 45 20 61 3e 31 30 0a 20 20 7d 0a 7d 20 7b 31  RE a>10.  }.} {1
1630: 30 2e 35 20 33 2e 37 20 31 34 2e 32 7d 0a 64 6f  0.5 3.7 14.2}.do
1640: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e  _test select6-3.
1650: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
1660: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61      SELECT a,b,a
1670: 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20  +b FROM (SELECT 
1680: 61 76 67 28 78 29 20 61 73 20 27 61 27 2c 20 61  avg(x) as 'a', a
1690: 76 67 28 79 29 20 61 73 20 27 62 27 20 46 52 4f  vg(y) as 'b' FRO
16a0: 4d 20 74 31 29 0a 20 20 20 20 57 48 45 52 45 20  M t1).    WHERE 
16b0: 61 3c 31 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  a<10.  }.} {}.do
16c0: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e  _test select6-3.
16d0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
16e0: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61      SELECT a,b,a
16f0: 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20  +b FROM (SELECT 
1700: 61 76 67 28 78 29 20 61 73 20 27 61 27 2c 20 61  avg(x) as 'a', a
1710: 76 67 28 79 29 20 61 73 20 27 62 27 20 46 52 4f  vg(y) as 'b' FRO
1720: 4d 20 74 31 20 57 48 45 52 45 20 79 3d 34 29 0a  M t1 WHERE y=4).
1730: 20 20 20 20 57 48 45 52 45 20 61 3e 31 30 0a 20      WHERE a>10. 
1740: 20 7d 0a 7d 20 7b 31 31 2e 35 20 34 2e 30 20 31   }.} {11.5 4.0 1
1750: 35 2e 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  5.5}.do_test sel
1760: 65 63 74 36 2d 33 2e 39 20 7b 0a 20 20 65 78 65  ect6-3.9 {.  exe
1770: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1780: 54 20 61 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 28  T a,b,a+b FROM (
1790: 53 45 4c 45 43 54 20 61 76 67 28 78 29 20 61 73  SELECT avg(x) as
17a0: 20 27 61 27 2c 20 61 76 67 28 79 29 20 61 73 20   'a', avg(y) as 
17b0: 27 62 27 20 46 52 4f 4d 20 74 31 20 57 48 45 52  'b' FROM t1 WHER
17c0: 45 20 79 3d 34 29 0a 20 20 20 20 57 48 45 52 45  E y=4).    WHERE
17d0: 20 61 3c 31 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   a<10.  }.} {}.d
17e0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33  o_test select6-3
17f0: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
1800: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62  {.    SELECT a,b
1810: 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45 43  ,a+b FROM (SELEC
1820: 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27 2c  T avg(x) as 'a',
1830: 20 79 20 61 73 20 27 62 27 20 46 52 4f 4d 20 74   y as 'b' FROM t
1840: 31 20 47 52 4f 55 50 20 42 59 20 62 29 0a 20 20  1 GROUP BY b).  
1850: 20 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d    ORDER BY a.  }
1860: 0a 7d 20 7b 31 2e 30 20 31 20 32 2e 30 20 32 2e  .} {1.0 1 2.0 2.
1870: 35 20 32 20 34 2e 35 20 35 2e 35 20 33 20 38 2e  5 2 4.5 5.5 3 8.
1880: 35 20 31 31 2e 35 20 34 20 31 35 2e 35 20 31 38  5 11.5 4 15.5 18
1890: 2e 30 20 35 20 32 33 2e 30 7d 0a 64 6f 5f 74 65  .0 5 23.0}.do_te
18a0: 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 31 31 20  st select6-3.11 
18b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
18c0: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62    SELECT a,b,a+b
18d0: 20 46 52 4f 4d 20 0a 20 20 20 20 20 20 20 28 53   FROM .       (S
18e0: 45 4c 45 43 54 20 61 76 67 28 78 29 20 61 73 20  ELECT avg(x) as 
18f0: 27 61 27 2c 20 79 20 61 73 20 27 62 27 20 46 52  'a', y as 'b' FR
1900: 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 62  OM t1 GROUP BY b
1910: 29 0a 20 20 20 20 57 48 45 52 45 20 62 3c 34 20  ).    WHERE b<4 
1920: 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d  ORDER BY a.  }.}
1930: 20 7b 31 2e 30 20 31 20 32 2e 30 20 32 2e 35 20   {1.0 1 2.0 2.5 
1940: 32 20 34 2e 35 20 35 2e 35 20 33 20 38 2e 35 7d  2 4.5 5.5 3 8.5}
1950: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
1960: 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -3.12 {.  execsq
1970: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
1980: 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 0a 20 20 20  ,b,a+b FROM .   
1990: 20 20 20 20 28 53 45 4c 45 43 54 20 61 76 67 28      (SELECT avg(
19a0: 78 29 20 61 73 20 27 61 27 2c 20 79 20 61 73 20  x) as 'a', y as 
19b0: 27 62 27 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  'b' FROM t1 GROU
19c0: 50 20 42 59 20 62 20 48 41 56 49 4e 47 20 61 3e  P BY b HAVING a>
19d0: 31 29 0a 20 20 20 20 57 48 45 52 45 20 62 3c 34  1).    WHERE b<4
19e0: 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a   ORDER BY a.  }.
19f0: 7d 20 7b 32 2e 35 20 32 20 34 2e 35 20 35 2e 35  } {2.5 2 4.5 5.5
1a00: 20 33 20 38 2e 35 7d 0a 64 6f 5f 74 65 73 74 20   3 8.5}.do_test 
1a10: 73 65 6c 65 63 74 36 2d 33 2e 31 33 20 7b 0a 20  select6-3.13 {. 
1a20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1a30: 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20 46 52  ELECT a,b,a+b FR
1a40: 4f 4d 20 0a 20 20 20 20 20 20 20 28 53 45 4c 45  OM .       (SELE
1a50: 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27  CT avg(x) as 'a'
1a60: 2c 20 79 20 61 73 20 27 62 27 20 46 52 4f 4d 20  , y as 'b' FROM 
1a70: 74 31 20 47 52 4f 55 50 20 42 59 20 62 20 48 41  t1 GROUP BY b HA
1a80: 56 49 4e 47 20 61 3e 31 29 0a 20 20 20 20 4f 52  VING a>1).    OR
1a90: 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b  DER BY a.  }.} {
1aa0: 32 2e 35 20 32 20 34 2e 35 20 35 2e 35 20 33 20  2.5 2 4.5 5.5 3 
1ab0: 38 2e 35 20 31 31 2e 35 20 34 20 31 35 2e 35 20  8.5 11.5 4 15.5 
1ac0: 31 38 2e 30 20 35 20 32 33 2e 30 7d 0a 64 6f 5f  18.0 5 23.0}.do_
1ad0: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 31  test select6-3.1
1ae0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1af0: 20 20 20 20 53 45 4c 45 43 54 20 5b 63 6f 75 6e      SELECT [coun
1b00: 74 28 2a 29 5d 2c 79 20 46 52 4f 4d 20 28 53 45  t(*)],y FROM (SE
1b10: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 79  LECT count(*), y
1b20: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
1b30: 59 20 79 29 0a 20 20 20 20 4f 52 44 45 52 20 42  Y y).    ORDER B
1b40: 59 20 5b 63 6f 75 6e 74 28 2a 29 5d 0a 20 20 7d  Y [count(*)].  }
1b50: 0a 7d 20 7b 31 20 31 20 32 20 32 20 34 20 33 20  .} {1 1 2 2 4 3 
1b60: 35 20 35 20 38 20 34 7d 0a 64 6f 5f 74 65 73 74  5 5 8 4}.do_test
1b70: 20 73 65 6c 65 63 74 36 2d 33 2e 31 35 20 7b 0a   select6-3.15 {.
1b80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1b90: 53 45 4c 45 43 54 20 5b 63 6f 75 6e 74 28 2a 29  SELECT [count(*)
1ba0: 5d 2c 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  ],y FROM (SELECT
1bb0: 20 63 6f 75 6e 74 28 2a 29 2c 20 79 20 46 52 4f   count(*), y FRO
1bc0: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 79 29  M t1 GROUP BY y)
1bd0: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 79 0a  .    ORDER BY y.
1be0: 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 32 20 34    }.} {1 1 2 2 4
1bf0: 20 33 20 38 20 34 20 35 20 35 7d 0a 0a 64 6f 5f   3 8 4 5 5}..do_
1c00: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 34 2e 31  test select6-4.1
1c10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1c20: 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20     SELECT a,b,c 
1c30: 46 52 4f 4d 20 0a 20 20 20 20 20 20 28 53 45 4c  FROM .      (SEL
1c40: 45 43 54 20 78 20 41 53 20 27 61 27 2c 20 79 20  ECT x AS 'a', y 
1c50: 41 53 20 27 62 27 2c 20 78 2b 79 20 41 53 20 27  AS 'b', x+y AS '
1c60: 63 27 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  c' FROM t1 WHERE
1c70: 20 79 3d 34 29 0a 20 20 20 20 57 48 45 52 45 20   y=4).    WHERE 
1c80: 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20 61 3b  a<10 ORDER BY a;
1c90: 0a 20 20 7d 0a 7d 20 7b 38 20 34 20 31 32 20 39  .  }.} {8 4 12 9
1ca0: 20 34 20 31 33 7d 0a 64 6f 5f 74 65 73 74 20 73   4 13}.do_test s
1cb0: 65 6c 65 63 74 36 2d 34 2e 32 20 7b 0a 20 20 65  elect6-4.2 {.  e
1cc0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1cd0: 45 43 54 20 79 20 46 52 4f 4d 20 28 53 45 4c 45  ECT y FROM (SELE
1ce0: 43 54 20 44 49 53 54 49 4e 43 54 20 79 20 46 52  CT DISTINCT y FR
1cf0: 4f 4d 20 74 31 29 20 57 48 45 52 45 20 79 3c 35  OM t1) WHERE y<5
1d00: 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d 0a   ORDER BY y.  }.
1d10: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74  } {1 2 3 4}.do_t
1d20: 65 73 74 20 73 65 6c 65 63 74 36 2d 34 2e 33 20  est select6-4.3 
1d30: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1d40: 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43    SELECT DISTINC
1d50: 54 20 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T y FROM (SELECT
1d60: 20 79 20 46 52 4f 4d 20 74 31 29 20 57 48 45 52   y FROM t1) WHER
1d70: 45 20 79 3c 35 20 4f 52 44 45 52 20 42 59 20 79  E y<5 ORDER BY y
1d80: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d  .  }.} {1 2 3 4}
1d90: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
1da0: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
1db0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 76   {.    SELECT av
1dc0: 67 28 79 29 20 46 52 4f 4d 20 28 53 45 4c 45 43  g(y) FROM (SELEC
1dd0: 54 20 44 49 53 54 49 4e 43 54 20 79 20 46 52 4f  T DISTINCT y FRO
1de0: 4d 20 74 31 29 20 57 48 45 52 45 20 79 3c 35 20  M t1) WHERE y<5 
1df0: 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d 0a 7d  ORDER BY y.  }.}
1e00: 20 7b 32 2e 35 7d 0a 64 6f 5f 74 65 73 74 20 73   {2.5}.do_test s
1e10: 65 6c 65 63 74 36 2d 34 2e 35 20 7b 0a 20 20 65  elect6-4.5 {.  e
1e20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1e30: 45 43 54 20 61 76 67 28 79 29 20 46 52 4f 4d 20  ECT avg(y) FROM 
1e40: 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54  (SELECT DISTINCT
1e50: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
1e60: 20 79 3c 35 29 20 4f 52 44 45 52 20 42 59 20 79   y<5) ORDER BY y
1e70: 0a 20 20 7d 0a 7d 20 7b 32 2e 35 7d 0a 0a 64 6f  .  }.} {2.5}..do
1e80: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 35 2e  _test select6-5.
1e90: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1ea0: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 78 2c 62      SELECT a,x,b
1eb0: 20 46 52 4f 4d 0a 20 20 20 20 20 20 28 53 45 4c   FROM.      (SEL
1ec0: 45 43 54 20 78 2b 33 20 41 53 20 27 61 27 2c 20  ECT x+3 AS 'a', 
1ed0: 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  x FROM t1 WHERE 
1ee0: 79 3d 33 29 20 41 53 20 27 70 27 2c 0a 20 20 20  y=3) AS 'p',.   
1ef0: 20 20 20 28 53 45 4c 45 43 54 20 78 20 41 53 20     (SELECT x AS 
1f00: 27 62 27 20 46 52 4f 4d 20 74 31 20 57 48 45 52  'b' FROM t1 WHER
1f10: 45 20 79 3d 34 29 20 41 53 20 27 71 27 0a 20 20  E y=4) AS 'q'.  
1f20: 20 20 57 48 45 52 45 20 61 3d 62 0a 20 20 20 20    WHERE a=b.    
1f30: 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d  ORDER BY a.  }.}
1f40: 20 7b 38 20 35 20 38 20 39 20 36 20 39 20 31 30   {8 5 8 9 6 9 10
1f50: 20 37 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 73   7 10}.do_test s
1f60: 65 6c 65 63 74 36 2d 35 2e 32 20 7b 0a 20 20 65  elect6-5.2 {.  e
1f70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1f80: 45 43 54 20 61 2c 78 2c 62 20 46 52 4f 4d 0a 20  ECT a,x,b FROM. 
1f90: 20 20 20 20 20 28 53 45 4c 45 43 54 20 78 2b 33       (SELECT x+3
1fa0: 20 41 53 20 27 61 27 2c 20 78 20 46 52 4f 4d 20   AS 'a', x FROM 
1fb0: 74 31 20 57 48 45 52 45 20 79 3d 33 29 2c 0a 20  t1 WHERE y=3),. 
1fc0: 20 20 20 20 20 28 53 45 4c 45 43 54 20 78 20 41       (SELECT x A
1fd0: 53 20 27 62 27 20 46 52 4f 4d 20 74 31 20 57 48  S 'b' FROM t1 WH
1fe0: 45 52 45 20 79 3d 34 29 0a 20 20 20 20 57 48 45  ERE y=4).    WHE
1ff0: 52 45 20 61 3d 62 0a 20 20 20 20 4f 52 44 45 52  RE a=b.    ORDER
2000: 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 38 20 35   BY a.  }.} {8 5
2010: 20 38 20 39 20 36 20 39 20 31 30 20 37 20 31 30   8 9 6 9 10 7 10
2020: 7d 0a 0a 23 20 54 65 73 74 73 20 6f 66 20 63 6f  }..# Tests of co
2030: 6d 70 6f 75 6e 64 20 73 75 62 2d 73 65 6c 65 63  mpound sub-selec
2040: 74 73 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c  ts.#.do_test sel
2050: 65 63 74 36 2d 36 2e 31 20 7b 0a 20 20 65 78 65  ect6-6.1 {.  exe
2060: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
2070: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
2080: 78 3e 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  x>4;.    SELECT 
2090: 2a 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20  * FROM t1.  }.} 
20a0: 7b 31 20 31 20 32 20 32 20 33 20 32 20 34 20 33  {1 1 2 2 3 2 4 3
20b0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70  }.ifcapable comp
20c0: 6f 75 6e 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74  ound {.  do_test
20d0: 20 73 65 6c 65 63 74 36 2d 36 2e 32 20 7b 0a 20   select6-6.2 {. 
20e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
20f0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2100: 20 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43   (.        SELEC
2110: 54 20 78 20 41 53 20 27 61 27 20 46 52 4f 4d 20  T x AS 'a' FROM 
2120: 74 31 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  t1 UNION ALL SEL
2130: 45 43 54 20 78 2b 31 30 20 41 53 20 27 61 27 20  ECT x+10 AS 'a' 
2140: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 20 29 20  FROM t1.      ) 
2150: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 20 20  ORDER BY a;.    
2160: 7d 0a 20 20 7d 20 7b 31 20 32 20 33 20 34 20 31  }.  } {1 2 3 4 1
2170: 31 20 31 32 20 31 33 20 31 34 7d 0a 20 20 64 6f  1 12 13 14}.  do
2180: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 36 2e  _test select6-6.
2190: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
21a0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
21b0: 20 46 52 4f 4d 20 28 0a 20 20 20 20 20 20 20 20   FROM (.        
21c0: 53 45 4c 45 43 54 20 78 20 41 53 20 27 61 27 20  SELECT x AS 'a' 
21d0: 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c  FROM t1 UNION AL
21e0: 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 41 53 20  L SELECT x+1 AS 
21f0: 27 61 27 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  'a' FROM t1.    
2200: 20 20 29 20 4f 52 44 45 52 20 42 59 20 61 3b 0a    ) ORDER BY a;.
2210: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 32 20 32      }.  } {1 2 2
2220: 20 33 20 33 20 34 20 34 20 35 7d 0a 20 20 64 6f   3 3 4 4 5}.  do
2230: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 36 2e  _test select6-6.
2240: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
2250: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
2260: 20 46 52 4f 4d 20 28 0a 20 20 20 20 20 20 20 20   FROM (.        
2270: 53 45 4c 45 43 54 20 78 20 41 53 20 27 61 27 20  SELECT x AS 'a' 
2280: 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 53 45  FROM t1 UNION SE
2290: 4c 45 43 54 20 78 2b 31 20 41 53 20 27 61 27 20  LECT x+1 AS 'a' 
22a0: 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 20 29 20  FROM t1.      ) 
22b0: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 20 20  ORDER BY a;.    
22c0: 7d 0a 20 20 7d 20 7b 31 20 32 20 33 20 34 20 35  }.  } {1 2 3 4 5
22d0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65  }.  do_test sele
22e0: 63 74 36 2d 36 2e 35 20 7b 0a 20 20 20 20 65 78  ct6-6.5 {.    ex
22f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
2300: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 0a 20 20  LECT * FROM (.  
2310: 20 20 20 20 20 20 53 45 4c 45 43 54 20 78 20 41        SELECT x A
2320: 53 20 27 61 27 20 46 52 4f 4d 20 74 31 20 49 4e  S 'a' FROM t1 IN
2330: 54 45 52 53 45 43 54 20 53 45 4c 45 43 54 20 78  TERSECT SELECT x
2340: 2b 31 20 41 53 20 27 61 27 20 46 52 4f 4d 20 74  +1 AS 'a' FROM t
2350: 31 0a 20 20 20 20 20 20 29 20 4f 52 44 45 52 20  1.      ) ORDER 
2360: 42 59 20 61 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  BY a;.    }.  } 
2370: 7b 32 20 33 20 34 7d 0a 20 20 64 6f 5f 74 65 73  {2 3 4}.  do_tes
2380: 74 20 73 65 6c 65 63 74 36 2d 36 2e 36 20 7b 0a  t select6-6.6 {.
2390: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
23a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
23b0: 4d 20 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45  M (.        SELE
23c0: 43 54 20 78 20 41 53 20 27 61 27 20 46 52 4f 4d  CT x AS 'a' FROM
23d0: 20 74 31 20 45 58 43 45 50 54 20 53 45 4c 45 43   t1 EXCEPT SELEC
23e0: 54 20 78 2a 32 20 41 53 20 27 61 27 20 46 52 4f  T x*2 AS 'a' FRO
23f0: 4d 20 74 31 0a 20 20 20 20 20 20 29 20 4f 52 44  M t1.      ) ORD
2400: 45 52 20 42 59 20 61 3b 0a 20 20 20 20 7d 0a 20  ER BY a;.    }. 
2410: 20 7d 20 7b 31 20 33 7d 0a 7d 20 3b 23 20 69 66   } {1 3}.} ;# if
2420: 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64  capable compound
2430: 0a 0a 23 20 53 75 62 73 65 6c 65 63 74 73 20 77  ..# Subselects w
2440: 69 74 68 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75  ith no FROM clau
2450: 73 65 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c  se.#.do_test sel
2460: 65 63 74 36 2d 37 2e 31 20 7b 0a 20 20 65 78 65  ect6-7.1 {.  exe
2470: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2480: 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T * FROM (SELECT
2490: 20 31 29 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f   1).  }.} {1}.do
24a0: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 37 2e  _test select6-7.
24b0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
24c0: 20 20 20 20 53 45 4c 45 43 54 20 63 2c 62 2c 61      SELECT c,b,a
24d0: 2c 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20  ,* FROM (SELECT 
24e0: 31 20 41 53 20 27 61 27 2c 20 32 20 41 53 20 27  1 AS 'a', 2 AS '
24f0: 62 27 2c 20 27 61 62 63 27 20 41 53 20 27 63 27  b', 'abc' AS 'c'
2500: 29 0a 20 20 7d 0a 7d 20 7b 61 62 63 20 32 20 31  ).  }.} {abc 2 1
2510: 20 31 20 32 20 61 62 63 7d 0a 64 6f 5f 74 65 73   1 2 abc}.do_tes
2520: 74 20 73 65 6c 65 63 74 36 2d 37 2e 33 20 7b 0a  t select6-7.3 {.
2530: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2540: 53 45 4c 45 43 54 20 63 2c 62 2c 61 2c 2a 20 46  SELECT c,b,a,* F
2550: 52 4f 4d 20 28 53 45 4c 45 43 54 20 31 20 41 53  ROM (SELECT 1 AS
2560: 20 27 61 27 2c 20 32 20 41 53 20 27 62 27 2c 20   'a', 2 AS 'b', 
2570: 27 61 62 63 27 20 41 53 20 27 63 27 20 57 48 45  'abc' AS 'c' WHE
2580: 52 45 20 30 29 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  RE 0).  }.} {}.d
2590: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 37  o_test select6-7
25a0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .4 {.  execsql2 
25b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 2c 62  {.    SELECT c,b
25c0: 2c 61 2c 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43  ,a,* FROM (SELEC
25d0: 54 20 31 20 41 53 20 27 61 27 2c 20 32 20 41 53  T 1 AS 'a', 2 AS
25e0: 20 27 62 27 2c 20 27 61 62 63 27 20 41 53 20 27   'b', 'abc' AS '
25f0: 63 27 20 57 48 45 52 45 20 31 29 0a 20 20 7d 0a  c' WHERE 1).  }.
2600: 7d 20 7b 63 20 61 62 63 20 62 20 32 20 61 20 31  } {c abc b 2 a 1
2610: 20 61 20 31 20 62 20 32 20 63 20 61 62 63 7d 0a   a 1 b 2 c abc}.
2620: 0a 23 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67  .# The remaining
2630: 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66   tests in this f
2640: 69 6c 65 20 64 65 70 65 6e 64 20 6f 6e 20 74 68  ile depend on th
2650: 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72  e EXPLAIN keywor
2660: 64 2e 0a 23 20 53 6b 69 70 20 74 68 65 73 65 20  d..# Skip these 
2670: 74 65 73 74 73 20 69 66 20 45 58 50 4c 41 49 4e  tests if EXPLAIN
2680: 20 69 73 20 64 69 73 61 62 6c 65 64 20 69 6e 20   is disabled in 
2690: 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c  the current buil
26a0: 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 7b  d..#.ifcapable {
26b0: 21 65 78 70 6c 61 69 6e 7d 20 7b 0a 20 20 66 69  !explain} {.  fi
26c0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
26d0: 72 6e 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c  rn.}..# The foll
26e0: 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72 65 20  owing procedure 
26f0: 63 6f 6d 70 69 6c 65 73 20 74 68 65 20 53 51 4c  compiles the SQL
2700: 20 67 69 76 65 6e 20 61 73 20 61 6e 20 61 72 67   given as an arg
2710: 75 6d 65 6e 74 20 61 6e 64 20 72 65 74 75 72 6e  ument and return
2720: 73 0a 23 20 54 52 55 45 20 69 66 20 74 68 61 74  s.# TRUE if that
2730: 20 53 51 4c 20 75 73 65 73 20 61 6e 79 20 74 72   SQL uses any tr
2740: 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61  ansient tables a
2750: 6e 64 20 72 65 74 75 72 6e 73 20 46 41 4c 53 45  nd returns FALSE
2760: 20 69 66 20 6e 6f 0a 23 20 74 72 61 6e 73 69 65   if no.# transie
2770: 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73  nt tables are us
2780: 65 64 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ed.  This is use
2790: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  d to make sure t
27a0: 68 61 74 20 74 68 65 0a 23 20 73 71 6c 69 74 65  hat the.# sqlite
27b0: 46 6c 61 74 74 65 6e 53 75 62 71 75 65 72 79 28  FlattenSubquery(
27c0: 29 20 72 6f 75 74 69 6e 65 20 69 6e 20 73 65 6c  ) routine in sel
27d0: 65 63 74 2e 63 20 69 73 20 64 6f 69 6e 67 20 69  ect.c is doing i
27e0: 74 73 20 6a 6f 62 2e 0a 23 0a 70 72 6f 63 20 69  ts job..#.proc i
27f0: 73 5f 66 6c 61 74 20 7b 73 71 6c 7d 20 7b 0a 20  s_flat {sql} {. 
2800: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 30 3e   return [expr 0>
2810: 5b 6c 73 65 61 72 63 68 20 5b 65 78 65 63 73 71  [lsearch [execsq
2820: 6c 20 22 45 58 50 4c 41 49 4e 20 24 73 71 6c 22  l "EXPLAIN $sql"
2830: 5d 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 5d  ] OpenEphemeral]
2840: 5d 0a 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61  ].}..# Check tha
2850: 74 20 74 68 65 20 66 6c 61 74 74 65 6e 65 72 20  t the flattener 
2860: 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20  works correctly 
2870: 66 6f 72 20 64 65 65 70 6c 79 20 6e 65 73 74 65  for deeply neste
2880: 64 20 73 75 62 71 75 65 72 69 65 73 0a 23 20 69  d subqueries.# i
2890: 6e 76 6f 6c 76 69 6e 67 20 6a 6f 69 6e 73 2e 0a  nvolving joins..
28a0: 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  #.do_test select
28b0: 36 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  6-8.1 {.  execsq
28c0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
28d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
28e0: 74 33 28 70 2c 71 29 3b 0a 20 20 20 20 49 4e 53  t3(p,q);.    INS
28f0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
2900: 45 53 28 31 2c 31 31 29 3b 0a 20 20 20 20 49 4e  ES(1,11);.    IN
2910: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
2920: 55 45 53 28 32 2c 32 32 29 3b 0a 20 20 20 20 43  UES(2,22);.    C
2930: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 71  REATE TABLE t4(q
2940: 2c 72 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,r);.    INSERT 
2950: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
2960: 31 2c 31 31 31 29 3b 0a 20 20 20 20 49 4e 53 45  1,111);.    INSE
2970: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
2980: 53 28 32 32 2c 32 32 32 29 3b 0a 20 20 20 20 43  S(22,222);.    C
2990: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
29a0: 54 20 2a 20 46 52 4f 4d 20 74 33 20 4e 41 54 55  T * FROM t3 NATU
29b0: 52 41 4c 20 4a 4f 49 4e 20 74 34 3b 0a 20 20 7d  RAL JOIN t4;.  }
29c0: 0a 7d 20 7b 31 20 31 31 20 31 31 31 20 32 20 32  .} {1 11 111 2 2
29d0: 32 20 32 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73  2 222}.do_test s
29e0: 65 6c 65 63 74 36 2d 38 2e 32 20 7b 0a 20 20 65  elect6-8.2 {.  e
29f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2a00: 45 43 54 20 79 2c 20 70 2c 20 71 2c 20 72 20 46  ECT y, p, q, r F
2a10: 52 4f 4d 0a 20 20 20 20 20 20 20 28 53 45 4c 45  ROM.       (SELE
2a20: 43 54 20 74 31 2e 79 20 41 53 20 79 2c 20 74 32  CT t1.y AS y, t2
2a30: 2e 62 20 41 53 20 62 20 46 52 4f 4d 20 74 31 2c  .b AS b FROM t1,
2a40: 20 74 32 20 57 48 45 52 45 20 74 31 2e 78 3d 74   t2 WHERE t1.x=t
2a50: 32 2e 61 29 20 41 53 20 6d 2c 0a 20 20 20 20 20  2.a) AS m,.     
2a60: 20 20 28 53 45 4c 45 43 54 20 74 33 2e 70 20 41    (SELECT t3.p A
2a70: 53 20 70 2c 20 74 33 2e 71 20 41 53 20 71 2c 20  S p, t3.q AS q, 
2a80: 74 34 2e 72 20 41 53 20 72 20 46 52 4f 4d 20 74  t4.r AS r FROM t
2a90: 33 20 4e 41 54 55 52 41 4c 20 4a 4f 49 4e 20 74  3 NATURAL JOIN t
2aa0: 34 29 20 61 73 20 6e 0a 20 20 20 20 57 48 45 52  4) as n.    WHER
2ab0: 45 20 20 79 3d 70 0a 20 20 7d 0a 7d 20 7b 31 20  E  y=p.  }.} {1 
2ac0: 31 20 31 31 20 31 31 31 20 32 20 32 20 32 32 20  1 11 111 2 2 22 
2ad0: 32 32 32 20 32 20 32 20 32 32 20 32 32 32 7d 0a  222 2 2 22 222}.
2ae0: 23 20 49 66 20 76 69 65 77 20 73 75 70 70 6f 72  # If view suppor
2af0: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
2b00: 6d 20 74 68 65 20 62 75 69 6c 64 2c 20 74 68 65  m the build, the
2b10: 6e 20 73 6f 20 69 73 20 74 68 65 20 71 75 65 72  n so is the quer
2b20: 79 20 0a 23 20 22 66 6c 61 74 74 65 6e 65 72 22  y .# "flattener"
2b30: 2e 20 53 6f 20 6f 6d 69 74 20 74 68 69 73 20 74  . So omit this t
2b40: 65 73 74 20 61 6e 64 20 74 65 73 74 20 73 65 6c  est and test sel
2b50: 65 63 74 36 2d 38 2e 36 20 69 6e 20 74 68 61 74  ect6-8.6 in that
2b60: 20 63 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65   case..ifcapable
2b70: 20 76 69 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20   view {.do_test 
2b80: 73 65 6c 65 63 74 36 2d 38 2e 33 20 7b 0a 20 20  select6-8.3 {.  
2b90: 69 73 5f 66 6c 61 74 20 7b 0a 20 20 20 20 53 45  is_flat {.    SE
2ba0: 4c 45 43 54 20 79 2c 20 70 2c 20 71 2c 20 72 20  LECT y, p, q, r 
2bb0: 46 52 4f 4d 0a 20 20 20 20 20 20 20 28 53 45 4c  FROM.       (SEL
2bc0: 45 43 54 20 74 31 2e 79 20 41 53 20 79 2c 20 74  ECT t1.y AS y, t
2bd0: 32 2e 62 20 41 53 20 62 20 46 52 4f 4d 20 74 31  2.b AS b FROM t1
2be0: 2c 20 74 32 20 57 48 45 52 45 20 74 31 2e 78 3d  , t2 WHERE t1.x=
2bf0: 74 32 2e 61 29 20 41 53 20 6d 2c 0a 20 20 20 20  t2.a) AS m,.    
2c00: 20 20 20 28 53 45 4c 45 43 54 20 74 33 2e 70 20     (SELECT t3.p 
2c10: 41 53 20 70 2c 20 74 33 2e 71 20 41 53 20 71 2c  AS p, t3.q AS q,
2c20: 20 74 34 2e 72 20 41 53 20 72 20 46 52 4f 4d 20   t4.r AS r FROM 
2c30: 74 33 20 4e 41 54 55 52 41 4c 20 4a 4f 49 4e 20  t3 NATURAL JOIN 
2c40: 74 34 29 20 61 73 20 6e 0a 20 20 20 20 57 48 45  t4) as n.    WHE
2c50: 52 45 20 20 79 3d 70 0a 20 20 7d 0a 7d 20 7b 31  RE  y=p.  }.} {1
2c60: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
2c70: 20 76 69 65 77 0a 64 6f 5f 74 65 73 74 20 73 65   view.do_test se
2c80: 6c 65 63 74 36 2d 38 2e 34 20 7b 0a 20 20 65 78  lect6-8.4 {.  ex
2c90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2ca0: 43 54 20 44 49 53 54 49 4e 43 54 20 79 2c 20 70  CT DISTINCT y, p
2cb0: 2c 20 71 2c 20 72 20 46 52 4f 4d 0a 20 20 20 20  , q, r FROM.    
2cc0: 20 20 20 28 53 45 4c 45 43 54 20 74 31 2e 79 20     (SELECT t1.y 
2cd0: 41 53 20 79 2c 20 74 32 2e 62 20 41 53 20 62 20  AS y, t2.b AS b 
2ce0: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
2cf0: 45 20 74 31 2e 78 3d 74 32 2e 61 29 20 41 53 20  E t1.x=t2.a) AS 
2d00: 6d 2c 0a 20 20 20 20 20 20 20 28 53 45 4c 45 43  m,.       (SELEC
2d10: 54 20 74 33 2e 70 20 41 53 20 70 2c 20 74 33 2e  T t3.p AS p, t3.
2d20: 71 20 41 53 20 71 2c 20 74 34 2e 72 20 41 53 20  q AS q, t4.r AS 
2d30: 72 20 46 52 4f 4d 20 74 33 20 4e 41 54 55 52 41  r FROM t3 NATURA
2d40: 4c 20 4a 4f 49 4e 20 74 34 29 20 61 73 20 6e 0a  L JOIN t4) as n.
2d50: 20 20 20 20 57 48 45 52 45 20 20 79 3d 70 0a 20      WHERE  y=p. 
2d60: 20 7d 0a 7d 20 7b 31 20 31 20 31 31 20 31 31 31   }.} {1 1 11 111
2d70: 20 32 20 32 20 32 32 20 32 32 32 7d 0a 64 6f 5f   2 2 22 222}.do_
2d80: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 38 2e 35  test select6-8.5
2d90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2da0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2db0: 20 0a 20 20 20 20 20 20 28 53 45 4c 45 43 54 20   .      (SELECT 
2dc0: 79 2c 20 70 2c 20 71 2c 20 72 20 46 52 4f 4d 0a  y, p, q, r FROM.
2dd0: 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 43 54           (SELECT
2de0: 20 74 31 2e 79 20 41 53 20 79 2c 20 74 32 2e 62   t1.y AS y, t2.b
2df0: 20 41 53 20 62 20 46 52 4f 4d 20 74 31 2c 20 74   AS b FROM t1, t
2e00: 32 20 57 48 45 52 45 20 74 31 2e 78 3d 74 32 2e  2 WHERE t1.x=t2.
2e10: 61 29 20 41 53 20 6d 2c 0a 20 20 20 20 20 20 20  a) AS m,.       
2e20: 20 20 28 53 45 4c 45 43 54 20 74 33 2e 70 20 41    (SELECT t3.p A
2e30: 53 20 70 2c 20 74 33 2e 71 20 41 53 20 71 2c 20  S p, t3.q AS q, 
2e40: 74 34 2e 72 20 41 53 20 72 20 46 52 4f 4d 20 74  t4.r AS r FROM t
2e50: 33 20 4e 41 54 55 52 41 4c 20 4a 4f 49 4e 20 74  3 NATURAL JOIN t
2e60: 34 29 20 61 73 20 6e 0a 20 20 20 20 20 20 57 48  4) as n.      WH
2e70: 45 52 45 20 20 79 3d 70 29 20 41 53 20 65 2c 0a  ERE  y=p) AS e,.
2e80: 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 72 20        (SELECT r 
2e90: 41 53 20 7a 20 46 52 4f 4d 20 74 34 20 57 48 45  AS z FROM t4 WHE
2ea0: 52 45 20 71 3d 31 31 29 20 41 53 20 66 0a 20 20  RE q=11) AS f.  
2eb0: 20 20 57 48 45 52 45 20 65 2e 72 3d 66 2e 7a 0a    WHERE e.r=f.z.
2ec0: 20 20 7d 0a 7d 20 7b 31 20 31 20 31 31 20 31 31    }.} {1 1 11 11
2ed0: 31 20 31 31 31 7d 0a 69 66 63 61 70 61 62 6c 65  1 111}.ifcapable
2ee0: 20 76 69 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20   view {.do_test 
2ef0: 73 65 6c 65 63 74 36 2d 38 2e 36 20 7b 0a 20 20  select6-8.6 {.  
2f00: 69 73 5f 66 6c 61 74 20 7b 0a 20 20 20 20 53 45  is_flat {.    SE
2f10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 0a 20 20 20  LECT * FROM .   
2f20: 20 20 20 28 53 45 4c 45 43 54 20 79 2c 20 70 2c     (SELECT y, p,
2f30: 20 71 2c 20 72 20 46 52 4f 4d 0a 20 20 20 20 20   q, r FROM.     
2f40: 20 20 20 20 28 53 45 4c 45 43 54 20 74 31 2e 79      (SELECT t1.y
2f50: 20 41 53 20 79 2c 20 74 32 2e 62 20 41 53 20 62   AS y, t2.b AS b
2f60: 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45   FROM t1, t2 WHE
2f70: 52 45 20 74 31 2e 78 3d 74 32 2e 61 29 20 41 53  RE t1.x=t2.a) AS
2f80: 20 6d 2c 0a 20 20 20 20 20 20 20 20 20 28 53 45   m,.         (SE
2f90: 4c 45 43 54 20 74 33 2e 70 20 41 53 20 70 2c 20  LECT t3.p AS p, 
2fa0: 74 33 2e 71 20 41 53 20 71 2c 20 74 34 2e 72 20  t3.q AS q, t4.r 
2fb0: 41 53 20 72 20 46 52 4f 4d 20 74 33 20 4e 41 54  AS r FROM t3 NAT
2fc0: 55 52 41 4c 20 4a 4f 49 4e 20 74 34 29 20 61 73  URAL JOIN t4) as
2fd0: 20 6e 0a 20 20 20 20 20 20 57 48 45 52 45 20 20   n.      WHERE  
2fe0: 79 3d 70 29 20 41 53 20 65 2c 0a 20 20 20 20 20  y=p) AS e,.     
2ff0: 20 28 53 45 4c 45 43 54 20 72 20 41 53 20 7a 20   (SELECT r AS z 
3000: 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 71 3d  FROM t4 WHERE q=
3010: 31 31 29 20 41 53 20 66 0a 20 20 20 20 57 48 45  11) AS f.    WHE
3020: 52 45 20 65 2e 72 3d 66 2e 7a 0a 20 20 7d 0a 7d  RE e.r=f.z.  }.}
3030: 20 7b 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61   {1}.} ;# ifcapa
3040: 62 6c 65 20 76 69 65 77 0a 0a 23 20 54 69 63 6b  ble view..# Tick
3050: 65 74 20 23 31 36 33 34 0a 23 0a 64 6f 5f 74 65  et #1634.#.do_te
3060: 73 74 20 73 65 6c 65 63 74 36 2d 39 2e 31 20 7b  st select6-9.1 {
3070: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3080: 20 53 45 4c 45 43 54 20 61 2e 78 2c 20 62 2e 78   SELECT a.x, b.x
3090: 20 46 52 4f 4d 20 74 31 20 41 53 20 61 2c 20 28   FROM t1 AS a, (
30a0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
30b0: 20 4c 49 4d 49 54 20 32 29 20 41 53 20 62 0a 20   LIMIT 2) AS b. 
30c0: 20 7d 0a 7d 20 7b 31 20 31 20 31 20 32 20 32 20   }.} {1 1 1 2 2 
30d0: 31 20 32 20 32 20 33 20 31 20 33 20 32 20 34 20  1 2 2 3 1 3 2 4 
30e0: 31 20 34 20 32 7d 0a 64 6f 5f 74 65 73 74 20 73  1 4 2}.do_test s
30f0: 65 6c 65 63 74 36 2d 39 2e 32 20 7b 0a 20 20 65  elect6-9.2 {.  e
3100: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3110: 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45 4c 45  ECT x FROM (SELE
3120: 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4c 49 4d  CT x FROM t1 LIM
3130: 49 54 20 32 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  IT 2);.  }.} {1 
3140: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  2}.do_test selec
3150: 74 36 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63 73  t6-9.3 {.  execs
3160: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
3170: 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78  x FROM (SELECT x
3180: 20 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20 32   FROM t1 LIMIT 2
3190: 20 4f 46 46 53 45 54 20 31 29 3b 0a 20 20 7d 0a   OFFSET 1);.  }.
31a0: 7d 20 7b 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  } {2 3}.do_test 
31b0: 73 65 6c 65 63 74 36 2d 39 2e 34 20 7b 0a 20 20  select6-9.4 {.  
31c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
31d0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45 4c  LECT x FROM (SEL
31e0: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 29 20 4c  ECT x FROM t1) L
31f0: 49 4d 49 54 20 32 3b 0a 20 20 7d 0a 7d 20 7b 31  IMIT 2;.  }.} {1
3200: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65   2}.do_test sele
3210: 63 74 36 2d 39 2e 35 20 7b 0a 20 20 65 78 65 63  ct6-9.5 {.  exec
3220: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3230: 20 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   x FROM (SELECT 
3240: 78 20 46 52 4f 4d 20 74 31 29 20 4c 49 4d 49 54  x FROM t1) LIMIT
3250: 20 32 20 4f 46 46 53 45 54 20 31 3b 0a 20 20 7d   2 OFFSET 1;.  }
3260: 0a 7d 20 7b 32 20 33 7d 0a 64 6f 5f 74 65 73 74  .} {2 3}.do_test
3270: 20 73 65 6c 65 63 74 36 2d 39 2e 36 20 7b 0a 20   select6-9.6 {. 
3280: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
3290: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45  ELECT x FROM (SE
32a0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4c  LECT x FROM t1 L
32b0: 49 4d 49 54 20 32 29 20 4c 49 4d 49 54 20 33 3b  IMIT 2) LIMIT 3;
32c0: 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f  .  }.} {1 2}.do_
32d0: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 39 2e 37  test select6-9.7
32e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
32f0: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
3300: 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   (SELECT x FROM 
3310: 74 31 20 4c 49 4d 49 54 20 2d 31 29 20 4c 49 4d  t1 LIMIT -1) LIM
3320: 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  IT 3;.  }.} {1 2
3330: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65   3}.do_test sele
3340: 63 74 36 2d 39 2e 38 20 7b 0a 20 20 65 78 65 63  ct6-9.8 {.  exec
3350: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3360: 20 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   x FROM (SELECT 
3370: 78 20 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20  x FROM t1 LIMIT 
3380: 2d 31 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  -1);.  }.} {1 2 
3390: 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  3 4}.do_test sel
33a0: 65 63 74 36 2d 39 2e 39 20 7b 0a 20 20 65 78 65  ect6-9.9 {.  exe
33b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
33c0: 54 20 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T x FROM (SELECT
33d0: 20 78 20 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54   x FROM t1 LIMIT
33e0: 20 2d 31 20 4f 46 46 53 45 54 20 31 29 3b 0a 20   -1 OFFSET 1);. 
33f0: 20 7d 0a 7d 20 7b 32 20 33 20 34 7d 0a 64 6f 5f   }.} {2 3 4}.do_
3400: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 39 2e 31  test select6-9.1
3410: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
3420: 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20      SELECT x, y 
3430: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20  FROM (SELECT x, 
3440: 28 53 45 4c 45 43 54 20 31 30 2b 78 29 20 79 20  (SELECT 10+x) y 
3450: 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20 2d 31  FROM t1 LIMIT -1
3460: 20 4f 46 46 53 45 54 20 31 29 3b 0a 20 20 7d 0a   OFFSET 1);.  }.
3470: 7d 20 7b 32 20 31 32 20 33 20 31 33 20 34 20 31  } {2 12 3 13 4 1
3480: 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  4}.do_test selec
3490: 74 36 2d 39 2e 31 31 20 7b 0a 20 20 65 78 65 63  t6-9.11 {.  exec
34a0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
34b0: 20 78 2c 20 79 20 46 52 4f 4d 20 28 53 45 4c 45   x, y FROM (SELE
34c0: 43 54 20 78 2c 20 28 53 45 4c 45 43 54 20 31 30  CT x, (SELECT 10
34d0: 29 2b 78 20 79 20 46 52 4f 4d 20 74 31 20 4c 49  )+x y FROM t1 LI
34e0: 4d 49 54 20 2d 31 20 4f 46 46 53 45 54 20 31 29  MIT -1 OFFSET 1)
34f0: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31 32 20 33 20  ;.  }.} {2 12 3 
3500: 31 33 20 34 20 31 34 7d 0a 0a 0a 0a 66 69 6e 69  13 4 14}....fini
3510: 73 68 5f 74 65 73 74 0a                          sh_test.