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

Artifact efb8d0c07a440441db87db2c4ade6904e1407e85:


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 39 20 32 30 30 32 2f 30 34  st,v 1.9 2002/04
0230: 2f 33 30 20 31 39 3a 32 30 3a 32 39 20 64 72 68  /30 19:20:29 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 64 6f 5f 74 65  15 5 5 20}.do_te
13b0: 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 33 20 7b  st select6-3.3 {
13c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
13d0: 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20   SELECT a,b,a+b 
13e0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76 67  FROM (SELECT avg
13f0: 28 78 29 20 61 73 20 27 61 27 2c 20 61 76 67 28  (x) as 'a', avg(
1400: 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d 20 74  y) as 'b' FROM t
1410: 31 29 0a 20 20 7d 0a 7d 20 7b 31 30 2e 35 20 33  1).  }.} {10.5 3
1420: 2e 37 20 31 34 2e 32 7d 0a 64 6f 5f 74 65 73 74  .7 14.2}.do_test
1430: 20 73 65 6c 65 63 74 36 2d 33 2e 34 20 7b 0a 20   select6-3.4 {. 
1440: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1450: 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20 46 52  ELECT a,b,a+b FR
1460: 4f 4d 20 28 53 45 4c 45 43 54 20 61 76 67 28 78  OM (SELECT avg(x
1470: 29 20 61 73 20 27 61 27 2c 20 61 76 67 28 79 29  ) as 'a', avg(y)
1480: 20 61 73 20 27 62 27 20 46 52 4f 4d 20 74 31 20   as 'b' FROM t1 
1490: 57 48 45 52 45 20 79 3d 34 29 0a 20 20 7d 0a 7d  WHERE y=4).  }.}
14a0: 20 7b 31 31 2e 35 20 34 20 31 35 2e 35 7d 0a 64   {11.5 4 15.5}.d
14b0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33  o_test select6-3
14c0: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
14d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 79 2c  .    SELECT x,y,
14e0: 78 2b 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  x+y FROM (SELECT
14f0: 20 61 76 67 28 61 29 20 61 73 20 27 78 27 2c 20   avg(a) as 'x', 
1500: 61 76 67 28 62 29 20 61 73 20 27 79 27 20 46 52  avg(b) as 'y' FR
1510: 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d 34 29  OM t2 WHERE a=4)
1520: 0a 20 20 7d 0a 7d 20 7b 34 20 33 20 37 7d 0a 64  .  }.} {4 3 7}.d
1530: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33  o_test select6-3
1540: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
1550: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62 2c  .    SELECT a,b,
1560: 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  a+b FROM (SELECT
1570: 20 61 76 67 28 78 29 20 61 73 20 27 61 27 2c 20   avg(x) as 'a', 
1580: 61 76 67 28 79 29 20 61 73 20 27 62 27 20 46 52  avg(y) as 'b' FR
1590: 4f 4d 20 74 31 29 0a 20 20 20 20 57 48 45 52 45  OM t1).    WHERE
15a0: 20 61 3e 31 30 0a 20 20 7d 0a 7d 20 7b 31 30 2e   a>10.  }.} {10.
15b0: 35 20 33 2e 37 20 31 34 2e 32 7d 0a 64 6f 5f 74  5 3.7 14.2}.do_t
15c0: 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 37 20  est select6-3.7 
15d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
15e0: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62    SELECT a,b,a+b
15f0: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76   FROM (SELECT av
1600: 67 28 78 29 20 61 73 20 27 61 27 2c 20 61 76 67  g(x) as 'a', avg
1610: 28 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d 20  (y) as 'b' FROM 
1620: 74 31 29 0a 20 20 20 20 57 48 45 52 45 20 61 3c  t1).    WHERE a<
1630: 31 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  10.  }.} {}.do_t
1640: 65 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 38 20  est select6-3.8 
1650: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1660: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62    SELECT a,b,a+b
1670: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76   FROM (SELECT av
1680: 67 28 78 29 20 61 73 20 27 61 27 2c 20 61 76 67  g(x) as 'a', avg
1690: 28 79 29 20 61 73 20 27 62 27 20 46 52 4f 4d 20  (y) as 'b' FROM 
16a0: 74 31 20 57 48 45 52 45 20 79 3d 34 29 0a 20 20  t1 WHERE y=4).  
16b0: 20 20 57 48 45 52 45 20 61 3e 31 30 0a 20 20 7d    WHERE a>10.  }
16c0: 0a 7d 20 7b 31 31 2e 35 20 34 20 31 35 2e 35 7d  .} {11.5 4 15.5}
16d0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
16e0: 2d 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.9 {.  execsql
16f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c   {.    SELECT a,
1700: 62 2c 61 2b 62 20 46 52 4f 4d 20 28 53 45 4c 45  b,a+b FROM (SELE
1710: 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27  CT avg(x) as 'a'
1720: 2c 20 61 76 67 28 79 29 20 61 73 20 27 62 27 20  , avg(y) as 'b' 
1730: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d  FROM t1 WHERE y=
1740: 34 29 0a 20 20 20 20 57 48 45 52 45 20 61 3c 31  4).    WHERE a<1
1750: 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  0.  }.} {}.do_te
1760: 73 74 20 73 65 6c 65 63 74 36 2d 33 2e 31 30 20  st select6-3.10 
1770: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1780: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62    SELECT a,b,a+b
1790: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 61 76   FROM (SELECT av
17a0: 67 28 78 29 20 61 73 20 27 61 27 2c 20 79 20 61  g(x) as 'a', y a
17b0: 73 20 27 62 27 20 46 52 4f 4d 20 74 31 20 47 52  s 'b' FROM t1 GR
17c0: 4f 55 50 20 42 59 20 62 29 0a 20 20 20 20 4f 52  OUP BY b).    OR
17d0: 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b  DER BY a.  }.} {
17e0: 31 20 31 20 32 20 32 2e 35 20 32 20 34 2e 35 20  1 1 2 2.5 2 4.5 
17f0: 35 2e 35 20 33 20 38 2e 35 20 31 31 2e 35 20 34  5.5 3 8.5 11.5 4
1800: 20 31 35 2e 35 20 31 38 20 35 20 32 33 7d 0a 64   15.5 18 5 23}.d
1810: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 33  o_test select6-3
1820: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
1830: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 62  {.    SELECT a,b
1840: 2c 61 2b 62 20 46 52 4f 4d 20 0a 20 20 20 20 20  ,a+b FROM .     
1850: 20 20 28 53 45 4c 45 43 54 20 61 76 67 28 78 29    (SELECT avg(x)
1860: 20 61 73 20 27 61 27 2c 20 79 20 61 73 20 27 62   as 'a', y as 'b
1870: 27 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20  ' FROM t1 GROUP 
1880: 42 59 20 62 29 0a 20 20 20 20 57 48 45 52 45 20  BY b).    WHERE 
1890: 62 3c 34 20 4f 52 44 45 52 20 42 59 20 61 0a 20  b<4 ORDER BY a. 
18a0: 20 7d 0a 7d 20 7b 31 20 31 20 32 20 32 2e 35 20   }.} {1 1 2 2.5 
18b0: 32 20 34 2e 35 20 35 2e 35 20 33 20 38 2e 35 7d  2 4.5 5.5 3 8.5}
18c0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36  .do_test select6
18d0: 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -3.12 {.  execsq
18e0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
18f0: 2c 62 2c 61 2b 62 20 46 52 4f 4d 20 0a 20 20 20  ,b,a+b FROM .   
1900: 20 20 20 20 28 53 45 4c 45 43 54 20 61 76 67 28      (SELECT avg(
1910: 78 29 20 61 73 20 27 61 27 2c 20 79 20 61 73 20  x) as 'a', y as 
1920: 27 62 27 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  'b' FROM t1 GROU
1930: 50 20 42 59 20 62 20 48 41 56 49 4e 47 20 61 3e  P BY b HAVING a>
1940: 31 29 0a 20 20 20 20 57 48 45 52 45 20 62 3c 34  1).    WHERE b<4
1950: 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a   ORDER BY a.  }.
1960: 7d 20 7b 32 2e 35 20 32 20 34 2e 35 20 35 2e 35  } {2.5 2 4.5 5.5
1970: 20 33 20 38 2e 35 7d 0a 64 6f 5f 74 65 73 74 20   3 8.5}.do_test 
1980: 73 65 6c 65 63 74 36 2d 33 2e 31 33 20 7b 0a 20  select6-3.13 {. 
1990: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
19a0: 45 4c 45 43 54 20 61 2c 62 2c 61 2b 62 20 46 52  ELECT a,b,a+b FR
19b0: 4f 4d 20 0a 20 20 20 20 20 20 20 28 53 45 4c 45  OM .       (SELE
19c0: 43 54 20 61 76 67 28 78 29 20 61 73 20 27 61 27  CT avg(x) as 'a'
19d0: 2c 20 79 20 61 73 20 27 62 27 20 46 52 4f 4d 20  , y as 'b' FROM 
19e0: 74 31 20 47 52 4f 55 50 20 42 59 20 62 20 48 41  t1 GROUP BY b HA
19f0: 56 49 4e 47 20 61 3e 31 29 0a 20 20 20 20 4f 52  VING a>1).    OR
1a00: 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b  DER BY a.  }.} {
1a10: 32 2e 35 20 32 20 34 2e 35 20 35 2e 35 20 33 20  2.5 2 4.5 5.5 3 
1a20: 38 2e 35 20 31 31 2e 35 20 34 20 31 35 2e 35 20  8.5 11.5 4 15.5 
1a30: 31 38 20 35 20 32 33 7d 0a 64 6f 5f 74 65 73 74  18 5 23}.do_test
1a40: 20 73 65 6c 65 63 74 36 2d 33 2e 31 34 20 7b 0a   select6-3.14 {.
1a50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1a60: 53 45 4c 45 43 54 20 5b 63 6f 75 6e 74 28 2a 29  SELECT [count(*)
1a70: 5d 2c 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  ],y FROM (SELECT
1a80: 20 63 6f 75 6e 74 28 2a 29 2c 20 79 20 46 52 4f   count(*), y FRO
1a90: 4d 20 74 31 20 47 52 4f 55 50 20 42 59 20 79 29  M t1 GROUP BY y)
1aa0: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 5b 63  .    ORDER BY [c
1ab0: 6f 75 6e 74 28 2a 29 5d 0a 20 20 7d 0a 7d 20 7b  ount(*)].  }.} {
1ac0: 31 20 31 20 32 20 32 20 34 20 33 20 35 20 35 20  1 1 2 2 4 3 5 5 
1ad0: 38 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  8 4}.do_test sel
1ae0: 65 63 74 36 2d 33 2e 31 35 20 7b 0a 20 20 65 78  ect6-3.15 {.  ex
1af0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1b00: 43 54 20 5b 63 6f 75 6e 74 28 2a 29 5d 2c 79 20  CT [count(*)],y 
1b10: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 63 6f 75  FROM (SELECT cou
1b20: 6e 74 28 2a 29 2c 20 79 20 46 52 4f 4d 20 74 31  nt(*), y FROM t1
1b30: 20 47 52 4f 55 50 20 42 59 20 79 29 0a 20 20 20   GROUP BY y).   
1b40: 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d 0a   ORDER BY y.  }.
1b50: 7d 20 7b 31 20 31 20 32 20 32 20 34 20 33 20 38  } {1 1 2 2 4 3 8
1b60: 20 34 20 35 20 35 7d 0a 0a 64 6f 5f 74 65 73 74   4 5 5}..do_test
1b70: 20 73 65 6c 65 63 74 36 2d 34 2e 31 20 7b 0a 20   select6-4.1 {. 
1b80: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1b90: 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d  ELECT a,b,c FROM
1ba0: 20 0a 20 20 20 20 20 20 28 53 45 4c 45 43 54 20   .      (SELECT 
1bb0: 78 20 41 53 20 27 61 27 2c 20 79 20 41 53 20 27  x AS 'a', y AS '
1bc0: 62 27 2c 20 78 2b 79 20 41 53 20 27 63 27 20 46  b', x+y AS 'c' F
1bd0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 34  ROM t1 WHERE y=4
1be0: 29 0a 20 20 20 20 57 48 45 52 45 20 61 3c 31 30  ).    WHERE a<10
1bf0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
1c00: 0a 7d 20 7b 38 20 34 20 31 32 20 39 20 34 20 31  .} {8 4 12 9 4 1
1c10: 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  3}.do_test selec
1c20: 74 36 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  t6-4.2 {.  execs
1c30: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1c40: 79 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44  y FROM (SELECT D
1c50: 49 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20 74  ISTINCT y FROM t
1c60: 31 29 20 57 48 45 52 45 20 79 3c 35 20 4f 52 44  1) WHERE y<5 ORD
1c70: 45 52 20 42 59 20 79 0a 20 20 7d 0a 7d 20 7b 31  ER BY y.  }.} {1
1c80: 20 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20   2 3 4}.do_test 
1c90: 73 65 6c 65 63 74 36 2d 34 2e 33 20 7b 0a 20 20  select6-4.3 {.  
1ca0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1cb0: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 79 20  LECT DISTINCT y 
1cc0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 79 20 46  FROM (SELECT y F
1cd0: 52 4f 4d 20 74 31 29 20 57 48 45 52 45 20 79 3c  ROM t1) WHERE y<
1ce0: 35 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d  5 ORDER BY y.  }
1cf0: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f  .} {1 2 3 4}.do_
1d00: 74 65 73 74 20 73 65 6c 65 63 74 36 2d 34 2e 34  test select6-4.4
1d10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1d20: 20 20 20 53 45 4c 45 43 54 20 61 76 67 28 79 29     SELECT avg(y)
1d30: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 44 49   FROM (SELECT DI
1d40: 53 54 49 4e 43 54 20 79 20 46 52 4f 4d 20 74 31  STINCT y FROM t1
1d50: 29 20 57 48 45 52 45 20 79 3c 35 20 4f 52 44 45  ) WHERE y<5 ORDE
1d60: 52 20 42 59 20 79 0a 20 20 7d 0a 7d 20 7b 32 2e  R BY y.  }.} {2.
1d70: 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  5}.do_test selec
1d80: 74 36 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73  t6-4.5 {.  execs
1d90: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1da0: 61 76 67 28 79 29 20 46 52 4f 4d 20 28 53 45 4c  avg(y) FROM (SEL
1db0: 45 43 54 20 44 49 53 54 49 4e 43 54 20 79 20 46  ECT DISTINCT y F
1dc0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 35  ROM t1 WHERE y<5
1dd0: 29 20 4f 52 44 45 52 20 42 59 20 79 0a 20 20 7d  ) ORDER BY y.  }
1de0: 0a 7d 20 7b 32 2e 35 7d 0a 0a 64 6f 5f 74 65 73  .} {2.5}..do_tes
1df0: 74 20 73 65 6c 65 63 74 36 2d 35 2e 31 20 7b 0a  t select6-5.1 {.
1e00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1e10: 53 45 4c 45 43 54 20 61 2c 78 2c 62 20 46 52 4f  SELECT a,x,b FRO
1e20: 4d 0a 20 20 20 20 20 20 28 53 45 4c 45 43 54 20  M.      (SELECT 
1e30: 78 2b 33 20 41 53 20 27 61 27 2c 20 78 20 46 52  x+3 AS 'a', x FR
1e40: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 33 29  OM t1 WHERE y=3)
1e50: 20 41 53 20 27 70 27 2c 0a 20 20 20 20 20 20 28   AS 'p',.      (
1e60: 53 45 4c 45 43 54 20 78 20 41 53 20 27 62 27 20  SELECT x AS 'b' 
1e70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d  FROM t1 WHERE y=
1e80: 34 29 20 41 53 20 27 71 27 0a 20 20 20 20 57 48  4) AS 'q'.    WH
1e90: 45 52 45 20 61 3d 62 0a 20 20 20 20 4f 52 44 45  ERE a=b.    ORDE
1ea0: 52 20 42 59 20 61 0a 20 20 7d 0a 7d 20 7b 38 20  R BY a.  }.} {8 
1eb0: 35 20 38 20 39 20 36 20 39 20 31 30 20 37 20 31  5 8 9 6 9 10 7 1
1ec0: 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  0}.do_test selec
1ed0: 74 36 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  t6-5.2 {.  execs
1ee0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1ef0: 61 2c 78 2c 62 20 46 52 4f 4d 0a 20 20 20 20 20  a,x,b FROM.     
1f00: 20 28 53 45 4c 45 43 54 20 78 2b 33 20 41 53 20   (SELECT x+3 AS 
1f10: 27 61 27 2c 20 78 20 46 52 4f 4d 20 74 31 20 57  'a', x FROM t1 W
1f20: 48 45 52 45 20 79 3d 33 29 2c 0a 20 20 20 20 20  HERE y=3),.     
1f30: 20 28 53 45 4c 45 43 54 20 78 20 41 53 20 27 62   (SELECT x AS 'b
1f40: 27 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ' FROM t1 WHERE 
1f50: 79 3d 34 29 0a 20 20 20 20 57 48 45 52 45 20 61  y=4).    WHERE a
1f60: 3d 62 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20  =b.    ORDER BY 
1f70: 61 0a 20 20 7d 0a 7d 20 7b 38 20 35 20 38 20 39  a.  }.} {8 5 8 9
1f80: 20 36 20 39 20 31 30 20 37 20 31 30 7d 0a 0a 23   6 9 10 7 10}..#
1f90: 20 54 65 73 74 73 20 6f 66 20 63 6f 6d 70 6f 75   Tests of compou
1fa0: 6e 64 20 73 75 62 2d 73 65 6c 65 63 74 73 0a 23  nd sub-selects.#
1fb0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 35  .do_test select5
1fc0: 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.1 {.  execsql
1fd0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
1fe0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3e 34 3b  OM t1 WHERE x>4;
1ff0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2000: 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 31  OM t1.  }.} {1 1
2010: 20 32 20 32 20 33 20 32 20 34 20 33 7d 0a 64 6f   2 2 3 2 4 3}.do
2020: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 36 2e  _test select6-6.
2030: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2040: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2050: 4d 20 28 0a 20 20 20 20 20 20 53 45 4c 45 43 54  M (.      SELECT
2060: 20 78 20 41 53 20 27 61 27 20 46 52 4f 4d 20 74   x AS 'a' FROM t
2070: 31 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  1 UNION ALL SELE
2080: 43 54 20 78 2b 31 30 20 41 53 20 27 61 27 20 46  CT x+10 AS 'a' F
2090: 52 4f 4d 20 74 31 0a 20 20 20 20 29 20 4f 52 44  ROM t1.    ) ORD
20a0: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
20b0: 31 20 32 20 33 20 34 20 31 31 20 31 32 20 31 33  1 2 3 4 11 12 13
20c0: 20 31 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   14}.do_test sel
20d0: 65 63 74 36 2d 36 2e 33 20 7b 0a 20 20 65 78 65  ect6-6.3 {.  exe
20e0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
20f0: 54 20 2a 20 46 52 4f 4d 20 28 0a 20 20 20 20 20  T * FROM (.     
2100: 20 53 45 4c 45 43 54 20 78 20 41 53 20 27 61 27   SELECT x AS 'a'
2110: 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41   FROM t1 UNION A
2120: 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 41 53  LL SELECT x+1 AS
2130: 20 27 61 27 20 46 52 4f 4d 20 74 31 0a 20 20 20   'a' FROM t1.   
2140: 20 29 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20   ) ORDER BY a;. 
2150: 20 7d 0a 7d 20 7b 31 20 32 20 32 20 33 20 33 20   }.} {1 2 2 3 3 
2160: 34 20 34 20 35 7d 0a 64 6f 5f 74 65 73 74 20 73  4 4 5}.do_test s
2170: 65 6c 65 63 74 36 2d 36 2e 34 20 7b 0a 20 20 65  elect6-6.4 {.  e
2180: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2190: 45 43 54 20 2a 20 46 52 4f 4d 20 28 0a 20 20 20  ECT * FROM (.   
21a0: 20 20 20 53 45 4c 45 43 54 20 78 20 41 53 20 27     SELECT x AS '
21b0: 61 27 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e  a' FROM t1 UNION
21c0: 20 53 45 4c 45 43 54 20 78 2b 31 20 41 53 20 27   SELECT x+1 AS '
21d0: 61 27 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 29  a' FROM t1.    )
21e0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
21f0: 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 7d 0a 64  .} {1 2 3 4 5}.d
2200: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 36  o_test select6-6
2210: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
2220: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2230: 4f 4d 20 28 0a 20 20 20 20 20 20 53 45 4c 45 43  OM (.      SELEC
2240: 54 20 78 20 41 53 20 27 61 27 20 46 52 4f 4d 20  T x AS 'a' FROM 
2250: 74 31 20 49 4e 54 45 52 53 45 43 54 20 53 45 4c  t1 INTERSECT SEL
2260: 45 43 54 20 78 2b 31 20 41 53 20 27 61 27 20 46  ECT x+1 AS 'a' F
2270: 52 4f 4d 20 74 31 0a 20 20 20 20 29 20 4f 52 44  ROM t1.    ) ORD
2280: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
2290: 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73  2 3 4}.do_test s
22a0: 65 6c 65 63 74 36 2d 36 2e 36 20 7b 0a 20 20 65  elect6-6.6 {.  e
22b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
22c0: 45 43 54 20 2a 20 46 52 4f 4d 20 28 0a 20 20 20  ECT * FROM (.   
22d0: 20 20 20 53 45 4c 45 43 54 20 78 20 41 53 20 27     SELECT x AS '
22e0: 61 27 20 46 52 4f 4d 20 74 31 20 45 58 43 45 50  a' FROM t1 EXCEP
22f0: 54 20 53 45 4c 45 43 54 20 78 2a 32 20 41 53 20  T SELECT x*2 AS 
2300: 27 61 27 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  'a' FROM t1.    
2310: 29 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  ) ORDER BY a;.  
2320: 7d 0a 7d 20 7b 31 20 33 7d 0a 0a 23 20 53 75 62  }.} {1 3}..# Sub
2330: 73 65 6c 65 63 74 73 20 77 69 74 68 20 6e 6f 20  selects with no 
2340: 46 52 4f 4d 20 63 6c 61 75 73 65 0a 23 0a 64 6f  FROM clause.#.do
2350: 5f 74 65 73 74 20 73 65 6c 65 63 74 36 2d 37 2e  _test select6-7.
2360: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2370: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2380: 4d 20 28 53 45 4c 45 43 54 20 31 29 0a 20 20 7d  M (SELECT 1).  }
2390: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 73  .} {1}.do_test s
23a0: 65 6c 65 63 74 36 2d 37 2e 32 20 7b 0a 20 20 65  elect6-7.2 {.  e
23b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
23c0: 45 43 54 20 63 2c 62 2c 61 2c 2a 20 46 52 4f 4d  ECT c,b,a,* FROM
23d0: 20 28 53 45 4c 45 43 54 20 31 20 41 53 20 27 61   (SELECT 1 AS 'a
23e0: 27 2c 20 32 20 41 53 20 27 62 27 2c 20 27 61 62  ', 2 AS 'b', 'ab
23f0: 63 27 20 41 53 20 27 63 27 29 0a 20 20 7d 0a 7d  c' AS 'c').  }.}
2400: 20 7b 61 62 63 20 32 20 31 20 31 20 32 20 61 62   {abc 2 1 1 2 ab
2410: 63 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  c}.do_test selec
2420: 74 36 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73  t6-7.3 {.  execs
2430: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2440: 63 2c 62 2c 61 2c 2a 20 46 52 4f 4d 20 28 53 45  c,b,a,* FROM (SE
2450: 4c 45 43 54 20 31 20 41 53 20 27 61 27 2c 20 32  LECT 1 AS 'a', 2
2460: 20 41 53 20 27 62 27 2c 20 27 61 62 63 27 20 41   AS 'b', 'abc' A
2470: 53 20 27 63 27 20 57 48 45 52 45 20 30 29 0a 20  S 'c' WHERE 0). 
2480: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
2490: 73 65 6c 65 63 74 36 2d 37 2e 34 20 7b 0a 20 20  select6-7.4 {.  
24a0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
24b0: 45 4c 45 43 54 20 63 2c 62 2c 61 2c 2a 20 46 52  ELECT c,b,a,* FR
24c0: 4f 4d 20 28 53 45 4c 45 43 54 20 31 20 41 53 20  OM (SELECT 1 AS 
24d0: 27 61 27 2c 20 32 20 41 53 20 27 62 27 2c 20 27  'a', 2 AS 'b', '
24e0: 61 62 63 27 20 41 53 20 27 63 27 20 57 48 45 52  abc' AS 'c' WHER
24f0: 45 20 31 29 0a 20 20 7d 0a 7d 20 7b 63 20 61 62  E 1).  }.} {c ab
2500: 63 20 62 20 32 20 61 20 31 20 61 20 31 20 62 20  c b 2 a 1 a 1 b 
2510: 32 20 63 20 61 62 63 7d 0a 0a 66 69 6e 69 73 68  2 c abc}..finish
2520: 5f 74 65 73 74 0a                                _test.