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

Artifact 522b4865bfdd433b7745cb45e8df1dbc53a4eaf3:


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 34 20 32 30 30 32 2f 30 33  st,v 1.4 2002/03
0230: 2f 30 33 20 30 33 3a 30 33 3a 35 34 20 64 72 68  /03 03:03:54 drh
0240: 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74   Exp $..set test
0250: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0260: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0270: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0280: 2e 74 63 6c 0a 0a 64 6f 5f 74 65 73 74 20 73 65  .tcl..do_test se
0290: 6c 65 63 74 36 2d 31 2e 30 20 7b 0a 20 20 65 78  lect6-1.0 {.  ex
02a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
02b0: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
02c0: 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20  BLE t1(x, y);.  
02d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
02e0: 20 56 41 4c 55 45 53 28 31 2c 31 29 3b 0a 20 20   VALUES(1,1);.  
02f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0300: 20 56 41 4c 55 45 53 28 32 2c 32 29 3b 0a 20 20   VALUES(2,2);.  
0310: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0320: 20 56 41 4c 55 45 53 28 33 2c 32 29 3b 0a 20 20   VALUES(3,2);.  
0330: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0340: 20 56 41 4c 55 45 53 28 34 2c 33 29 3b 0a 20 20   VALUES(4,3);.  
0350: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0360: 20 56 41 4c 55 45 53 28 35 2c 33 29 3b 0a 20 20   VALUES(5,3);.  
0370: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0380: 20 56 41 4c 55 45 53 28 36 2c 33 29 3b 0a 20 20   VALUES(6,3);.  
0390: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03a0: 20 56 41 4c 55 45 53 28 37 2c 33 29 3b 0a 20 20   VALUES(7,3);.  
03b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03c0: 20 56 41 4c 55 45 53 28 38 2c 34 29 3b 0a 20 20   VALUES(8,4);.  
03d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03e0: 20 56 41 4c 55 45 53 28 39 2c 34 29 3b 0a 20 20   VALUES(9,4);.  
03f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0400: 20 56 41 4c 55 45 53 28 31 30 2c 34 29 3b 0a 20   VALUES(10,4);. 
0410: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0420: 31 20 56 41 4c 55 45 53 28 31 31 2c 34 29 3b 0a  1 VALUES(11,4);.
0430: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0440: 74 31 20 56 41 4c 55 45 53 28 31 32 2c 34 29 3b  t1 VALUES(12,4);
0450: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0460: 20 74 31 20 56 41 4c 55 45 53 28 31 33 2c 34 29   t1 VALUES(13,4)
0470: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0480: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 34 2c 34  O t1 VALUES(14,4
0490: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
04a0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 35 2c  TO t1 VALUES(15,
04b0: 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  4);.    INSERT I
04c0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 36  NTO t1 VALUES(16
04d0: 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,5);.    INSERT 
04e0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
04f0: 37 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  7,5);.    INSERT
0500: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0510: 31 38 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45 52  18,5);.    INSER
0520: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0530: 28 31 39 2c 35 29 3b 0a 20 20 20 20 49 4e 53 45  (19,5);.    INSE
0540: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0550: 53 28 32 30 2c 35 29 3b 0a 20 20 20 20 43 4f 4d  S(20,5);.    COM
0560: 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  MIT;.    SELECT 
0570: 44 49 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20  DISTINCT y FROM 
0580: 74 31 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  t1 ORDER BY y;. 
0590: 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 7d   }.} {1 2 3 4 5}
05a0: 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  ..do_test select
05b0: 36 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  6-1.1 {.  execsq
05c0: 6c 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  l2 {SELECT * FRO
05d0: 4d 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46  M (SELECT x, y F
05e0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3c 32  ROM t1 WHERE x<2
05f0: 29 7d 0a 7d 20 7b 78 20 31 20 79 20 31 7d 0a 64  )}.} {x 1 y 1}.d
0600: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 31  o_test select6-1
0610: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0620: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0630: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 79 20 46  FROM (SELECT y F
0640: 52 4f 4d 20 74 31 29 7d 0a 7d 20 7b 32 30 7d 0a  ROM t1)}.} {20}.
0650: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
0660: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
0670: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
0680: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44 49   FROM (SELECT DI
0690: 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20 74 31  STINCT y FROM t1
06a0: 29 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74  )}.} {5}.do_test
06b0: 20 73 65 6c 65 63 74 36 2d 31 2e 34 20 7b 0a 20   select6-1.4 {. 
06c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
06d0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28   count(*) FROM (
06e0: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
06f0: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 79  * FROM (SELECT y
0700: 20 46 52 4f 4d 20 74 31 29 29 7d 0a 7d 20 7b 35   FROM t1))}.} {5
0710: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
0720: 36 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  6-1.5 {.  execsq
0730: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  l {SELECT count(
0740: 2a 29 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20  *) FROM (SELECT 
0750: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44  * FROM (SELECT D
0760: 49 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20 74  ISTINCT y FROM t
0770: 31 29 29 7d 0a 7d 20 7b 35 7d 0a 0a 64 6f 5f 74  1))}.} {5}..do_t
0780: 65 73 74 20 73 65 6c 65 63 74 36 2d 31 2e 36 20  est select6-1.6 
0790: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
07a0: 20 20 53 45 4c 45 43 54 20 2a 20 0a 20 20 20 20    SELECT * .    
07b0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75  FROM (SELECT cou
07c0: 6e 74 28 2a 29 2c 79 20 46 52 4f 4d 20 74 31 20  nt(*),y FROM t1 
07d0: 47 52 4f 55 50 20 42 59 20 79 29 20 41 53 20 61  GROUP BY y) AS a
07e0: 2c 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45  ,.         (SELE
07f0: 43 54 20 6d 61 78 28 78 29 2c 79 20 46 52 4f 4d  CT max(x),y FROM
0800: 20 74 31 20 47 52 4f 55 50 20 42 59 20 79 29 20   t1 GROUP BY y) 
0810: 61 73 20 62 0a 20 20 20 20 57 48 45 52 45 20 61  as b.    WHERE a
0820: 2e 79 3d 62 2e 79 20 4f 52 44 45 52 20 42 59 20  .y=b.y ORDER BY 
0830: 61 2e 79 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31  a.y.  }.} {1 1 1
0840: 20 31 20 32 20 32 20 33 20 32 20 34 20 33 20 37   1 2 2 3 2 4 3 7
0850: 20 33 20 38 20 34 20 31 35 20 34 20 35 20 35 20   3 8 4 15 4 5 5 
0860: 32 30 20 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65  20 5}.do_test se
0870: 6c 65 63 74 36 2d 31 2e 37 20 7b 0a 20 20 65 78  lect6-1.7 {.  ex
0880: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0890: 43 54 20 61 2e 79 2c 20 61 2e 5b 63 6f 75 6e 74  CT a.y, a.[count
08a0: 28 2a 29 5d 2c 20 5b 6d 61 78 28 78 29 5d 2c 20  (*)], [max(x)], 
08b0: 5b 63 6f 75 6e 74 28 2a 29 5d 0a 20 20 20 20 46  [count(*)].    F
08c0: 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75 6e  ROM (SELECT coun
08d0: 74 28 2a 29 2c 79 20 46 52 4f 4d 20 74 31 20 47  t(*),y FROM t1 G
08e0: 52 4f 55 50 20 42 59 20 79 29 20 41 53 20 61 2c  ROUP BY y) AS a,
08f0: 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 43  .         (SELEC
0900: 54 20 6d 61 78 28 78 29 2c 79 20 46 52 4f 4d 20  T max(x),y FROM 
0910: 74 31 20 47 52 4f 55 50 20 42 59 20 79 29 20 61  t1 GROUP BY y) a
0920: 73 20 62 0a 20 20 20 20 57 48 45 52 45 20 61 2e  s b.    WHERE a.
0930: 79 3d 62 2e 79 20 4f 52 44 45 52 20 42 59 20 61  y=b.y ORDER BY a
0940: 2e 79 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20  .y.  }.} {1 1 1 
0950: 31 20 32 20 32 20 33 20 32 20 33 20 34 20 37 20  1 2 2 3 2 3 4 7 
0960: 34 20 34 20 38 20 31 35 20 38 20 35 20 35 20 32  4 4 8 15 8 5 5 2
0970: 30 20 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  0 5}.do_test sel
0980: 65 63 74 36 2d 31 2e 38 20 7b 0a 20 20 65 78 65  ect6-1.8 {.  exe
0990: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
09a0: 54 20 71 2c 20 70 2c 20 72 0a 20 20 20 20 46 52  T q, p, r.    FR
09b0: 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74  OM (SELECT count
09c0: 28 2a 29 20 61 73 20 70 20 2c 20 79 20 61 73 20  (*) as p , y as 
09d0: 71 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20  q FROM t1 GROUP 
09e0: 42 59 20 79 29 20 41 53 20 61 2c 0a 20 20 20 20  BY y) AS a,.    
09f0: 20 20 20 20 20 28 53 45 4c 45 43 54 20 6d 61 78       (SELECT max
0a00: 28 78 29 20 61 73 20 72 2c 20 79 20 61 73 20 73  (x) as r, y as s
0a10: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
0a20: 59 20 79 29 20 61 73 20 62 0a 20 20 20 20 57 48  Y y) as b.    WH
0a30: 45 52 45 20 71 3d 73 20 4f 52 44 45 52 20 42 59  ERE q=s ORDER BY
0a40: 20 73 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20   s.  }.} {1 1 1 
0a50: 32 20 32 20 33 20 33 20 34 20 37 20 34 20 38 20  2 2 3 3 4 7 4 8 
0a60: 31 35 20 35 20 35 20 32 30 7d 0a 64 6f 5f 74 65  15 5 5 20}.do_te
0a70: 73 74 20 73 65 6c 65 63 74 36 2d 31 2e 39 20 7b  st select6-1.9 {
0a80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a90: 20 53 45 4c 45 43 54 20 71 2c 20 70 2c 20 72 2c   SELECT q, p, r,
0aa0: 20 62 2e 5b 6d 69 6e 28 78 29 2b 79 5d 0a 20 20   b.[min(x)+y].  
0ab0: 20 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63    FROM (SELECT c
0ac0: 6f 75 6e 74 28 2a 29 20 61 73 20 70 20 2c 20 79  ount(*) as p , y
0ad0: 20 61 73 20 71 20 46 52 4f 4d 20 74 31 20 47 52   as q FROM t1 GR
0ae0: 4f 55 50 20 42 59 20 79 29 20 41 53 20 61 2c 0a  OUP BY y) AS a,.
0af0: 20 20 20 20 20 20 20 20 20 28 53 45 4c 45 43 54           (SELECT
0b00: 20 6d 61 78 28 78 29 20 61 73 20 72 2c 20 79 20   max(x) as r, y 
0b10: 61 73 20 73 2c 20 6d 69 6e 28 78 29 2b 79 20 46  as s, min(x)+y F
0b20: 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20  ROM t1 GROUP BY 
0b30: 79 29 20 61 73 20 62 0a 20 20 20 20 57 48 45 52  y) as b.    WHER
0b40: 45 20 71 3d 73 20 4f 52 44 45 52 20 42 59 20 73  E q=s ORDER BY s
0b50: 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20 32 20  .  }.} {1 1 1 2 
0b60: 32 20 32 20 33 20 34 20 33 20 34 20 37 20 37 20  2 2 3 4 3 4 7 7 
0b70: 34 20 38 20 31 35 20 31 32 20 35 20 35 20 32 30  4 8 15 12 5 5 20
0b80: 20 32 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65   21}..do_test se
0b90: 6c 65 63 74 36 2d 32 2e 30 20 7b 0a 20 20 65 78  lect6-2.0 {.  ex
0ba0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0bb0: 54 45 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e  TE TABLE t2(a IN
0bc0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
0bd0: 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  Y, b);.    INSER
0be0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
0bf0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
0c00: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
0c10: 62 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  b FROM t2 ORDER 
0c20: 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  BY b;.  }.} {1 2
0c30: 20 33 20 34 20 35 7d 0a 64 6f 5f 74 65 73 74 20   3 4 5}.do_test 
0c40: 73 65 6c 65 63 74 36 2d 32 2e 31 20 7b 0a 20 20  select6-2.1 {.  
0c50: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
0c60: 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   * FROM (SELECT 
0c70: 61 2c 20 62 20 46 52 4f 4d 20 74 32 20 57 48 45  a, b FROM t2 WHE
0c80: 52 45 20 61 3c 32 29 7d 0a 7d 20 7b 61 20 31 20  RE a<2)}.} {a 1 
0c90: 62 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  b 1}.do_test sel
0ca0: 65 63 74 36 2d 32 2e 32 20 7b 0a 20 20 65 78 65  ect6-2.2 {.  exe
0cb0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
0cc0: 6e 74 28 2a 29 20 46 52 4f 4d 20 28 53 45 4c 45  nt(*) FROM (SELE
0cd0: 43 54 20 62 20 46 52 4f 4d 20 74 32 29 7d 0a 7d  CT b FROM t2)}.}
0ce0: 20 7b 32 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65   {20}.do_test se
0cf0: 6c 65 63 74 36 2d 32 2e 33 20 7b 0a 20 20 65 78  lect6-2.3 {.  ex
0d00: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0d10: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28 53 45 4c  unt(*) FROM (SEL
0d20: 45 43 54 20 44 49 53 54 49 4e 43 54 20 62 20 46  ECT DISTINCT b F
0d30: 52 4f 4d 20 74 32 29 7d 0a 7d 20 7b 35 7d 0a 64  ROM t2)}.} {5}.d
0d40: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 32  o_test select6-2
0d50: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0d60: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0d70: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44 49 53  FROM (SELECT DIS
0d80: 54 49 4e 43 54 20 2a 20 46 52 4f 4d 20 28 53 45  TINCT * FROM (SE
0d90: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 32 29 29  LECT b FROM t2))
0da0: 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20  }.} {5}.do_test 
0db0: 73 65 6c 65 63 74 36 2d 32 2e 35 20 7b 0a 20 20  select6-2.5 {.  
0dc0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0dd0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 28 53  count(*) FROM (S
0de0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53 45  ELECT * FROM (SE
0df0: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 62 20  LECT DISTINCT b 
0e00: 46 52 4f 4d 20 74 32 29 29 7d 0a 7d 20 7b 35 7d  FROM t2))}.} {5}
0e10: 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  ..do_test select
0e20: 36 2d 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  6-2.6 {.  execsq
0e30: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0e40: 20 0a 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45   .    FROM (SELE
0e50: 43 54 20 63 6f 75 6e 74 28 2a 29 2c 62 20 46 52  CT count(*),b FR
0e60: 4f 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 62  OM t2 GROUP BY b
0e70: 29 20 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20  ) AS a,.        
0e80: 20 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29 2c   (SELECT max(a),
0e90: 62 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20  b FROM t2 GROUP 
0ea0: 42 59 20 62 29 20 61 73 20 62 0a 20 20 20 20 57  BY b) as b.    W
0eb0: 48 45 52 45 20 61 2e 62 3d 62 2e 62 20 4f 52 44  HERE a.b=b.b ORD
0ec0: 45 52 20 42 59 20 61 2e 62 0a 20 20 7d 0a 7d 20  ER BY a.b.  }.} 
0ed0: 7b 31 20 31 20 31 20 31 20 32 20 32 20 33 20 32  {1 1 1 1 2 2 3 2
0ee0: 20 34 20 33 20 37 20 33 20 38 20 34 20 31 35 20   4 3 7 3 8 4 15 
0ef0: 34 20 35 20 35 20 32 30 20 35 7d 0a 64 6f 5f 74  4 5 5 20 5}.do_t
0f00: 65 73 74 20 73 65 6c 65 63 74 36 2d 32 2e 37 20  est select6-2.7 
0f10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0f20: 20 20 53 45 4c 45 43 54 20 61 2e 62 2c 20 61 2e    SELECT a.b, a.
0f30: 5b 63 6f 75 6e 74 28 2a 29 5d 2c 20 5b 6d 61 78  [count(*)], [max
0f40: 28 61 29 5d 2c 20 5b 63 6f 75 6e 74 28 2a 29 5d  (a)], [count(*)]
0f50: 0a 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43  .    FROM (SELEC
0f60: 54 20 63 6f 75 6e 74 28 2a 29 2c 62 20 46 52 4f  T count(*),b FRO
0f70: 4d 20 74 32 20 47 52 4f 55 50 20 42 59 20 62 29  M t2 GROUP BY b)
0f80: 20 41 53 20 61 2c 0a 20 20 20 20 20 20 20 20 20   AS a,.         
0f90: 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 62  (SELECT max(a),b
0fa0: 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20 42   FROM t2 GROUP B
0fb0: 59 20 62 29 20 61 73 20 62 0a 20 20 20 20 57 48  Y b) as b.    WH
0fc0: 45 52 45 20 61 2e 62 3d 62 2e 62 20 4f 52 44 45  ERE a.b=b.b ORDE
0fd0: 52 20 42 59 20 61 2e 62 0a 20 20 7d 0a 7d 20 7b  R BY a.b.  }.} {
0fe0: 31 20 31 20 31 20 31 20 32 20 32 20 33 20 32 20  1 1 1 1 2 2 3 2 
0ff0: 33 20 34 20 37 20 34 20 34 20 38 20 31 35 20 38  3 4 7 4 4 8 15 8
1000: 20 35 20 35 20 32 30 20 35 7d 0a 64 6f 5f 74 65   5 5 20 5}.do_te
1010: 73 74 20 73 65 6c 65 63 74 36 2d 32 2e 38 20 7b  st select6-2.8 {
1020: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1030: 20 53 45 4c 45 43 54 20 71 2c 20 70 2c 20 72 0a   SELECT q, p, r.
1040: 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43 54      FROM (SELECT
1050: 20 63 6f 75 6e 74 28 2a 29 20 61 73 20 70 20 2c   count(*) as p ,
1060: 20 62 20 61 73 20 71 20 46 52 4f 4d 20 74 32 20   b as q FROM t2 
1070: 47 52 4f 55 50 20 42 59 20 62 29 20 41 53 20 61  GROUP BY b) AS a
1080: 2c 0a 20 20 20 20 20 20 20 20 20 28 53 45 4c 45  ,.         (SELE
1090: 43 54 20 6d 61 78 28 61 29 20 61 73 20 72 2c 20  CT max(a) as r, 
10a0: 62 20 61 73 20 73 20 46 52 4f 4d 20 74 32 20 47  b as s FROM t2 G
10b0: 52 4f 55 50 20 42 59 20 62 29 20 61 73 20 62 0a  ROUP BY b) as b.
10c0: 20 20 20 20 57 48 45 52 45 20 71 3d 73 20 4f 52      WHERE q=s OR
10d0: 44 45 52 20 42 59 20 73 0a 20 20 7d 0a 7d 20 7b  DER BY s.  }.} {
10e0: 31 20 31 20 31 20 32 20 32 20 33 20 33 20 34 20  1 1 1 2 2 3 3 4 
10f0: 37 20 34 20 38 20 31 35 20 35 20 35 20 32 30 7d  7 4 8 15 5 5 20}
1100: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
1110: 2d 32 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.9 {.  execsql
1120: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2e   {.    SELECT a.
1130: 71 2c 20 61 2e 70 2c 20 62 2e 72 0a 20 20 20 20  q, a.p, b.r.    
1140: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75  FROM (SELECT cou
1150: 6e 74 28 2a 29 20 61 73 20 70 20 2c 20 62 20 61  nt(*) as p , b a
1160: 73 20 71 20 46 52 4f 4d 20 74 32 20 47 52 4f 55  s q FROM t2 GROU
1170: 50 20 42 59 20 71 29 20 41 53 20 61 2c 0a 20 20  P BY q) AS a,.  
1180: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 6d         (SELECT m
1190: 61 78 28 61 29 20 61 73 20 72 2c 20 62 20 61 73  ax(a) as r, b as
11a0: 20 73 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50   s FROM t2 GROUP
11b0: 20 42 59 20 73 29 20 61 73 20 62 0a 20 20 20 20   BY s) as b.    
11c0: 57 48 45 52 45 20 61 2e 71 3d 62 2e 73 20 4f 52  WHERE a.q=b.s OR
11d0: 44 45 52 20 42 59 20 61 2e 71 0a 20 20 7d 0a 7d  DER BY a.q.  }.}
11e0: 20 7b 31 20 31 20 31 20 32 20 32 20 33 20 33 20   {1 1 1 2 2 3 3 
11f0: 34 20 37 20 34 20 38 20 31 35 20 35 20 35 20 32  4 7 4 8 15 5 5 2
1200: 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 69  0}..do_test sqli
1210: 74 65 36 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63  te6-3.1 {.  exec
1220: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
1230: 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T * FROM (SELECT
1240: 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   * FROM (SELECT 
1250: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1260: 78 3d 33 29 29 3b 0a 20 20 7d 0a 7d 20 7b 78 20  x=3));.  }.} {x 
1270: 33 20 79 20 32 7d 0a 64 6f 5f 74 65 73 74 20 73  3 y 2}.do_test s
1280: 71 6c 69 74 65 36 2d 33 2e 32 20 7b 0a 20 20 65  qlite6-3.2 {.  e
1290: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
12a0: 45 43 54 20 2a 20 46 52 4f 4d 0a 20 20 20 20 20  ECT * FROM.     
12b0: 20 28 53 45 4c 45 43 54 20 61 2e 71 2c 20 61 2e   (SELECT a.q, a.
12c0: 70 2c 20 62 2e 72 0a 20 20 20 20 20 20 20 46 52  p, b.r.       FR
12d0: 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74  OM (SELECT count
12e0: 28 2a 29 20 61 73 20 70 20 2c 20 62 20 61 73 20  (*) as p , b as 
12f0: 71 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20  q FROM t2 GROUP 
1300: 42 59 20 71 29 20 41 53 20 61 2c 0a 20 20 20 20  BY q) AS a,.    
1310: 20 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20          (SELECT 
1320: 6d 61 78 28 61 29 20 61 73 20 72 2c 20 62 20 61  max(a) as r, b a
1330: 73 20 73 20 46 52 4f 4d 20 74 32 20 47 52 4f 55  s s FROM t2 GROU
1340: 50 20 42 59 20 73 29 20 61 73 20 62 0a 20 20 20  P BY s) as b.   
1350: 20 20 20 20 57 48 45 52 45 20 61 2e 71 3d 62 2e      WHERE a.q=b.
1360: 73 20 4f 52 44 45 52 20 42 59 20 61 2e 71 29 0a  s ORDER BY a.q).
1370: 20 20 20 20 4f 52 44 45 52 20 42 59 20 5b 61 2e      ORDER BY [a.
1380: 71 5d 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20  q].  }.} {1 1 1 
1390: 32 20 32 20 33 20 33 20 34 20 37 20 34 20 38 20  2 2 3 3 4 7 4 8 
13a0: 31 35 20 35 20 35 20 32 30 7d 0a 0a 64 6f 5f 74  15 5 5 20}..do_t
13b0: 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 33 20  est select6-3.3 
13c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
13d0: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62    SELECT a,b,a+b
13e0: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76   FROM (SELECT av
13f0: 67 28 78 29 20 61 73 20 27 61 27 2c 20 61 76 67  g(x) as 'a', avg
1400: 28 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d 20  (y) as 'b' FROM 
1410: 74 31 29 0a 20 20 7d 0a 7d 20 7b 31 30 2e 35 20  t1).  }.} {10.5 
1420: 33 2e 37 20 31 34 2e 32 7d 0a 64 6f 5f 74 65 73  3.7 14.2}.do_tes
1430: 74 20 73 65 6c 65 63 74 36 2d 33 2e 34 20 7b 0a  t select6-3.4 {.
1440: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1450: 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20 46  SELECT a,b,a+b F
1460: 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76 67 28  ROM (SELECT avg(
1470: 78 29 20 61 73 20 27 61 27 2c 20 61 76 67 28 79  x) as 'a', avg(y
1480: 29 20 61 73 20 27 62 27 20 46 52 4f 4d 20 74 31  ) as 'b' FROM t1
1490: 20 57 48 45 52 45 20 79 3d 34 29 0a 20 20 7d 0a   WHERE y=4).  }.
14a0: 7d 20 7b 31 31 2e 35 20 34 20 31 35 2e 35 7d 0a  } {11.5 4 15.5}.
14b0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
14c0: 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.5 {.  execsql 
14d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 79  {.    SELECT x,y
14e0: 2c 78 2b 79 20 46 52 4f 4d 20 28 53 45 4c 45 43  ,x+y FROM (SELEC
14f0: 54 20 61 76 67 28 61 29 20 61 73 20 27 78 27 2c  T avg(a) as 'x',
1500: 20 61 76 67 28 62 29 20 61 73 20 27 79 27 20 46   avg(b) as 'y' F
1510: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d 34  ROM t2 WHERE a=4
1520: 29 0a 20 20 7d 0a 7d 20 7b 34 20 33 20 37 7d 0a  ).  }.} {4 3 7}.
1530: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
1540: 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.6 {.  execsql 
1550: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62  {.    SELECT a,b
1560: 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45 43  ,a+b FROM (SELEC
1570: 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27 2c  T avg(x) as 'a',
1580: 20 61 76 67 28 79 29 20 61 73 20 27 62 27 20 46   avg(y) as 'b' F
1590: 52 4f 4d 20 74 31 29 0a 20 20 20 20 57 48 45 52  ROM t1).    WHER
15a0: 45 20 61 3e 31 30 0a 20 20 7d 0a 7d 20 7b 31 30  E a>10.  }.} {10
15b0: 2e 35 20 33 2e 37 20 31 34 2e 32 7d 0a 64 6f 5f  .5 3.7 14.2}.do_
15c0: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 37  test select6-3.7
15d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
15e0: 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b     SELECT a,b,a+
15f0: 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61  b FROM (SELECT a
1600: 76 67 28 78 29 20 61 73 20 27 61 27 2c 20 61 76  vg(x) as 'a', av
1610: 67 28 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d  g(y) as 'b' FROM
1620: 20 74 31 29 0a 20 20 20 20 57 48 45 52 45 20 61   t1).    WHERE a
1630: 3c 31 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  <10.  }.} {}.do_
1640: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 38  test select6-3.8
1650: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1660: 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b     SELECT a,b,a+
1670: 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61  b FROM (SELECT a
1680: 76 67 28 78 29 20 61 73 20 27 61 27 2c 20 61 76  vg(x) as 'a', av
1690: 67 28 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d  g(y) as 'b' FROM
16a0: 20 74 31 20 57 48 45 52 45 20 79 3d 34 29 0a 20   t1 WHERE y=4). 
16b0: 20 20 20 57 48 45 52 45 20 61 3e 31 30 0a 20 20     WHERE a>10.  
16c0: 7d 0a 7d 20 7b 31 31 2e 35 20 34 20 31 35 2e 35  }.} {11.5 4 15.5
16d0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
16e0: 36 2d 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71  6-3.9 {.  execsq
16f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
1700: 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c  ,b,a+b FROM (SEL
1710: 45 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61  ECT avg(x) as 'a
1720: 27 2c 20 61 76 67 28 79 29 20 61 73 20 27 62 27  ', avg(y) as 'b'
1730: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
1740: 3d 34 29 0a 20 20 20 20 57 48 45 52 45 20 61 3c  =4).    WHERE a<
1750: 31 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  10.  }.} {}.do_t
1760: 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 31 30  est select6-3.10
1770: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1780: 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b     SELECT a,b,a+
1790: 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61  b FROM (SELECT a
17a0: 76 67 28 78 29 20 61 73 20 27 61 27 2c 20 79 20  vg(x) as 'a', y 
17b0: 61 73 20 27 62 27 20 46 52 4f 4d 20 74 31 20 47  as 'b' FROM t1 G
17c0: 52 4f 55 50 20 42 59 20 62 29 0a 20 20 20 20 4f  ROUP BY b).    O
17d0: 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20  RDER BY a.  }.} 
17e0: 7b 31 20 31 20 32 20 32 2e 35 20 32 20 34 2e 35  {1 1 2 2.5 2 4.5
17f0: 20 35 2e 35 20 33 20 38 2e 35 20 31 31 2e 35 20   5.5 3 8.5 11.5 
1800: 34 20 31 35 2e 35 20 31 38 20 35 20 32 33 7d 0a  4 15.5 18 5 23}.
1810: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d  do_test select6-
1820: 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.11 {.  execsql
1830: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c   {.    SELECT a,
1840: 62 2c 61 2b 62 20 46 52 4f 4d 20 0a 20 20 20 20  b,a+b FROM .    
1850: 20 20 20 28 53 45 4c 45 43 54 20 61 76 67 28 78     (SELECT avg(x
1860: 29 20 61 73 20 27 61 27 2c 20 79 20 61 73 20 27  ) as 'a', y as '
1870: 62 27 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50  b' FROM t1 GROUP
1880: 20 42 59 20 62 29 0a 20 20 20 20 57 48 45 52 45   BY b).    WHERE
1890: 20 62 3c 34 20 4f 52 44 45 52 20 42 59 20 61 0a   b<4 ORDER BY a.
18a0: 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 32 2e 35    }.} {1 1 2 2.5
18b0: 20 32 20 34 2e 35 20 35 2e 35 20 33 20 38 2e 35   2 4.5 5.5 3 8.5
18c0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
18d0: 36 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65 63 73  6-3.12 {.  execs
18e0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
18f0: 61 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 0a 20 20  a,b,a+b FROM .  
1900: 20 20 20 20 20 28 53 45 4c 45 43 54 20 61 76 67       (SELECT avg
1910: 28 78 29 20 61 73 20 27 61 27 2c 20 79 20 61 73  (x) as 'a', y as
1920: 20 27 62 27 20 46 52 4f 4d 20 74 31 20 47 52 4f   'b' FROM t1 GRO
1930: 55 50 20 42 59 20 62 20 48 41 56 49 4e 47 20 61  UP BY b HAVING a
1940: 3e 31 29 0a 20 20 20 20 57 48 45 52 45 20 62 3c  >1).    WHERE b<
1950: 34 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d  4 ORDER BY a.  }
1960: 0a 7d 20 7b 32 2e 35 20 32 20 34 2e 35 20 35 2e  .} {2.5 2 4.5 5.
1970: 35 20 33 20 38 2e 35 7d 0a 64 6f 5f 74 65 73 74  5 3 8.5}.do_test
1980: 20 73 65 6c 65 63 74 36 2d 33 2e 31 33 20 7b 0a   select6-3.13 {.
1990: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
19a0: 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20 46  SELECT a,b,a+b F
19b0: 52 4f 4d 20 0a 20 20 20 20 20 20 20 28 53 45 4c  ROM .       (SEL
19c0: 45 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61  ECT avg(x) as 'a
19d0: 27 2c 20 79 20 61 73 20 27 62 27 20 46 52 4f 4d  ', y as 'b' FROM
19e0: 20 74 31 20 47 52 4f 55 50 20 42 59 20 62 20 48   t1 GROUP BY b H
19f0: 41 56 49 4e 47 20 61 3e 31 29 0a 20 20 20 20 4f  AVING a>1).    O
1a00: 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20  RDER BY a.  }.} 
1a10: 7b 32 2e 35 20 32 20 34 2e 35 20 35 2e 35 20 33  {2.5 2 4.5 5.5 3
1a20: 20 38 2e 35 20 31 31 2e 35 20 34 20 31 35 2e 35   8.5 11.5 4 15.5
1a30: 20 31 38 20 35 20 32 33 7d 0a 64 6f 5f 74 65 73   18 5 23}.do_tes
1a40: 74 20 73 65 6c 65 63 74 36 2d 33 2e 31 34 20 7b  t select6-3.14 {
1a50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1a60: 20 53 45 4c 45 43 54 20 5b 63 6f 75 6e 74 28 2a   SELECT [count(*
1a70: 29 5d 2c 79 20 46 52 4f 4d 20 28 53 45 4c 45 43  )],y FROM (SELEC
1a80: 54 20 63 6f 75 6e 74 28 2a 29 2c 20 79 20 46 52  T count(*), y FR
1a90: 4f 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 79  OM t1 GROUP BY y
1aa0: 29 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 5b  ).    ORDER BY [
1ab0: 63 6f 75 6e 74 28 2a 29 5d 0a 20 20 7d 0a 7d 20  count(*)].  }.} 
1ac0: 7b 31 20 31 20 32 20 32 20 34 20 33 20 35 20 35  {1 1 2 2 4 3 5 5
1ad0: 20 38 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65   8 4}.do_test se
1ae0: 6c 65 63 74 36 2d 33 2e 31 35 20 7b 0a 20 20 65  lect6-3.15 {.  e
1af0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1b00: 45 43 54 20 5b 63 6f 75 6e 74 28 2a 29 5d 2c 79  ECT [count(*)],y
1b10: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f   FROM (SELECT co
1b20: 75 6e 74 28 2a 29 2c 20 79 20 46 52 4f 4d 20 74  unt(*), y FROM t
1b30: 31 20 47 52 4f 55 50 20 42 59 20 79 29 0a 20 20  1 GROUP BY y).  
1b40: 20 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d    ORDER BY y.  }
1b50: 0a 7d 20 7b 31 20 31 20 32 20 32 20 34 20 33 20  .} {1 1 2 2 4 3 
1b60: 38 20 34 20 35 20 35 7d 0a 0a 64 6f 5f 74 65 73  8 4 5 5}..do_tes
1b70: 74 20 73 65 6c 65 63 74 36 2d 34 2e 31 20 7b 0a  t select6-4.1 {.
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 61 2c 62 2c 63 20 46 52 4f  SELECT a,b,c FRO
1ba0: 4d 20 0a 20 20 20 20 20 20 28 53 45 4c 45 43 54  M .      (SELECT
1bb0: 20 78 20 41 53 20 27 61 27 2c 20 79 20 41 53 20   x AS 'a', y AS 
1bc0: 27 62 27 2c 20 78 2b 79 20 41 53 20 27 63 27 20  'b', x+y AS 'c' 
1bd0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d  FROM t1 WHERE y=
1be0: 34 29 0a 20 20 20 20 57 48 45 52 45 20 61 3c 31  4).    WHERE a<1
1bf0: 30 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  0 ORDER BY a;.  
1c00: 7d 0a 7d 20 7b 38 20 34 20 31 32 20 39 20 34 20  }.} {8 4 12 9 4 
1c10: 31 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  13}.do_test sele
1c20: 63 74 36 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  ct6-4.2 {.  exec
1c30: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1c40: 20 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   y FROM (SELECT 
1c50: 44 49 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20  DISTINCT y FROM 
1c60: 74 31 29 20 57 48 45 52 45 20 79 3c 35 20 4f 52  t1) WHERE y<5 OR
1c70: 44 45 52 20 42 59 20 79 0a 20 20 7d 0a 7d 20 7b  DER BY y.  }.} {
1c80: 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73 74  1 2 3 4}.do_test
1c90: 20 73 65 6c 65 63 74 36 2d 34 2e 33 20 7b 0a 20   select6-4.3 {. 
1ca0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1cb0: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 79  ELECT DISTINCT y
1cc0: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 79 20   FROM (SELECT y 
1cd0: 46 52 4f 4d 20 74 31 29 20 57 48 45 52 45 20 79  FROM t1) WHERE y
1ce0: 3c 35 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20  <5 ORDER BY y.  
1cf0: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f  }.} {1 2 3 4}.do
1d00: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 34 2e  _test select6-4.
1d10: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1d20: 20 20 20 20 53 45 4c 45 43 54 20 61 76 67 28 79      SELECT avg(y
1d30: 29 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44  ) FROM (SELECT D
1d40: 49 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20 74  ISTINCT y FROM t
1d50: 31 29 20 57 48 45 52 45 20 79 3c 35 20 4f 52 44  1) WHERE y<5 ORD
1d60: 45 52 20 42 59 20 79 0a 20 20 7d 0a 7d 20 7b 32  ER BY y.  }.} {2
1d70: 2e 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  .5}.do_test sele
1d80: 63 74 36 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63  ct6-4.5 {.  exec
1d90: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1da0: 20 61 76 67 28 79 29 20 46 52 4f 4d 20 28 53 45   avg(y) FROM (SE
1db0: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 79 20  LECT DISTINCT y 
1dc0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c  FROM t1 WHERE y<
1dd0: 35 29 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20  5) ORDER BY y.  
1de0: 7d 0a 7d 20 7b 32 2e 35 7d 0a 0a 0a 66 69 6e 69  }.} {2.5}...fini
1df0: 73 68 5f 74 65 73 74 0a                          sh_test.