/ Hex Artifact Content
Login

Artifact fc2a61f226a649393664ad54bc5376631801517c:


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 74 68 65 20 53  is testing the S
01d0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
01e0: 0a 23 0a 23 20 24 49 64 3a 20 73 65 6c 65 63 74  .#.# $Id: select
01f0: 31 2e 74 65 73 74 2c 76 20 31 2e 37 30 20 32 30  1.test,v 1.70 20
0200: 30 39 2f 30 35 2f 32 38 20 30 31 3a 30 30 3a 35  09/05/28 01:00:5
0210: 36 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74  6 drh Exp $..set
0220: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0230: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0240: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0250: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 72 79  ester.tcl..# Try
0260: 20 74 6f 20 73 65 6c 65 63 74 20 6f 6e 20 61 20   to select on a 
0270: 6e 6f 6e 2d 65 78 69 73 74 61 6e 74 20 74 61 62  non-existant tab
0280: 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65  le..#.do_test se
0290: 6c 65 63 74 31 2d 31 2e 31 20 7b 0a 20 20 73 65  lect1-1.1 {.  se
02a0: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
02b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
02c0: 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a  OM test1}} msg].
02d0: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
02e0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
02f0: 61 62 6c 65 3a 20 74 65 73 74 31 7d 7d 0a 0a 0a  able: test1}}...
0300: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
0310: 54 41 42 4c 45 20 74 65 73 74 31 28 66 31 20 69  TABLE test1(f1 i
0320: 6e 74 2c 20 66 32 20 69 6e 74 29 7d 0a 0a 64 6f  nt, f2 int)}..do
0330: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 2e  _test select1-1.
0340: 32 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  2 {.  set v [cat
0350: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c  ch {execsql {SEL
0360: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
0370: 2c 20 74 65 73 74 32 7d 7d 20 6d 73 67 5d 0a 20  , test2}} msg]. 
0380: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0390: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
03a0: 62 6c 65 3a 20 74 65 73 74 32 7d 7d 0a 64 6f 5f  ble: test2}}.do_
03b0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 2e 33  test select1-1.3
03c0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
03d0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  h {execsql {SELE
03e0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 32 2c  CT * FROM test2,
03f0: 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20   test1}} msg].  
0400: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0410: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
0420: 6c 65 3a 20 74 65 73 74 32 7d 7d 0a 0a 65 78 65  le: test2}}..exe
0430: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
0440: 4f 20 74 65 73 74 31 28 66 31 2c 66 32 29 20 56  O test1(f1,f2) V
0450: 41 4c 55 45 53 28 31 31 2c 32 32 29 7d 0a 0a 0a  ALUES(11,22)}...
0460: 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  # Make sure the 
0470: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 65 78 74 72  columns are extr
0480: 61 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  acted correctly.
0490: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .#.do_test selec
04a0: 74 31 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  t1-1.4 {.  execs
04b0: 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 20 46 52  ql {SELECT f1 FR
04c0: 4f 4d 20 74 65 73 74 31 7d 0a 7d 20 7b 31 31 7d  OM test1}.} {11}
04d0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
04e0: 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.5 {.  execsql
04f0: 20 7b 53 45 4c 45 43 54 20 66 32 20 46 52 4f 4d   {SELECT f2 FROM
0500: 20 74 65 73 74 31 7d 0a 7d 20 7b 32 32 7d 0a 64   test1}.} {22}.d
0510: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
0520: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
0530: 53 45 4c 45 43 54 20 66 32 2c 20 66 31 20 46 52  SELECT f2, f1 FR
0540: 4f 4d 20 74 65 73 74 31 7d 0a 7d 20 7b 32 32 20  OM test1}.} {22 
0550: 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  11}.do_test sele
0560: 63 74 31 2d 31 2e 37 20 7b 0a 20 20 65 78 65 63  ct1-1.7 {.  exec
0570: 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 2c 20  sql {SELECT f1, 
0580: 66 32 20 46 52 4f 4d 20 74 65 73 74 31 7d 0a 7d  f2 FROM test1}.}
0590: 20 7b 31 31 20 32 32 7d 0a 64 6f 5f 74 65 73 74   {11 22}.do_test
05a0: 20 73 65 6c 65 63 74 31 2d 31 2e 38 20 7b 0a 20   select1-1.8 {. 
05b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
05c0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 7d 0a 7d   * FROM test1}.}
05d0: 20 7b 31 31 20 32 32 7d 0a 64 6f 5f 74 65 73 74   {11 22}.do_test
05e0: 20 73 65 6c 65 63 74 31 2d 31 2e 38 2e 31 20 7b   select1-1.8.1 {
05f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0600: 43 54 20 2a 2c 20 2a 20 46 52 4f 4d 20 74 65 73  CT *, * FROM tes
0610: 74 31 7d 0a 7d 20 7b 31 31 20 32 32 20 31 31 20  t1}.} {11 22 11 
0620: 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  22}.do_test sele
0630: 63 74 31 2d 31 2e 38 2e 32 20 7b 0a 20 20 65 78  ct1-1.8.2 {.  ex
0640: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 2c  ecsql {SELECT *,
0650: 20 6d 69 6e 28 66 31 2c 66 32 29 2c 20 6d 61 78   min(f1,f2), max
0660: 28 66 31 2c 66 32 29 20 46 52 4f 4d 20 74 65 73  (f1,f2) FROM tes
0670: 74 31 7d 0a 7d 20 7b 31 31 20 32 32 20 31 31 20  t1}.} {11 22 11 
0680: 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  22}.do_test sele
0690: 63 74 31 2d 31 2e 38 2e 33 20 7b 0a 20 20 65 78  ct1-1.8.3 {.  ex
06a0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 27 6f  ecsql {SELECT 'o
06b0: 6e 65 27 2c 20 2a 2c 20 27 74 77 6f 27 2c 20 2a  ne', *, 'two', *
06c0: 20 46 52 4f 4d 20 74 65 73 74 31 7d 0a 7d 20 7b   FROM test1}.} {
06d0: 6f 6e 65 20 31 31 20 32 32 20 74 77 6f 20 31 31  one 11 22 two 11
06e0: 20 32 32 7d 0a 0a 65 78 65 63 73 71 6c 20 7b 43   22}..execsql {C
06f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74  REATE TABLE test
0700: 32 28 72 31 20 72 65 61 6c 2c 20 72 32 20 72 65  2(r1 real, r2 re
0710: 61 6c 29 7d 0a 65 78 65 63 73 71 6c 20 7b 49 4e  al)}.execsql {IN
0720: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 32 28  SERT INTO test2(
0730: 72 31 2c 72 32 29 20 56 41 4c 55 45 53 28 31 2e  r1,r2) VALUES(1.
0740: 31 2c 32 2e 32 29 7d 0a 0a 64 6f 5f 74 65 73 74  1,2.2)}..do_test
0750: 20 73 65 6c 65 63 74 31 2d 31 2e 39 20 7b 0a 20   select1-1.9 {. 
0760: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0770: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 2c 20 74   * FROM test1, t
0780: 65 73 74 32 7d 0a 7d 20 7b 31 31 20 32 32 20 31  est2}.} {11 22 1
0790: 2e 31 20 32 2e 32 7d 0a 64 6f 5f 74 65 73 74 20  .1 2.2}.do_test 
07a0: 73 65 6c 65 63 74 31 2d 31 2e 39 2e 31 20 7b 0a  select1-1.9.1 {.
07b0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
07c0: 54 20 2a 2c 20 27 68 69 27 20 46 52 4f 4d 20 74  T *, 'hi' FROM t
07d0: 65 73 74 31 2c 20 74 65 73 74 32 7d 0a 7d 20 7b  est1, test2}.} {
07e0: 31 31 20 32 32 20 31 2e 31 20 32 2e 32 20 68 69  11 22 1.1 2.2 hi
07f0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
0800: 31 2d 31 2e 39 2e 32 20 7b 0a 20 20 65 78 65 63  1-1.9.2 {.  exec
0810: 73 71 6c 20 7b 53 45 4c 45 43 54 20 27 6f 6e 65  sql {SELECT 'one
0820: 27 2c 20 2a 2c 20 27 74 77 6f 27 2c 20 2a 20 46  ', *, 'two', * F
0830: 52 4f 4d 20 74 65 73 74 31 2c 20 74 65 73 74 32  ROM test1, test2
0840: 7d 0a 7d 20 7b 6f 6e 65 20 31 31 20 32 32 20 31  }.} {one 11 22 1
0850: 2e 31 20 32 2e 32 20 74 77 6f 20 31 31 20 32 32  .1 2.2 two 11 22
0860: 20 31 2e 31 20 32 2e 32 7d 0a 64 6f 5f 74 65 73   1.1 2.2}.do_tes
0870: 74 20 73 65 6c 65 63 74 31 2d 31 2e 31 30 20 7b  t select1-1.10 {
0880: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0890: 43 54 20 74 65 73 74 31 2e 66 31 2c 20 74 65 73  CT test1.f1, tes
08a0: 74 32 2e 72 31 20 46 52 4f 4d 20 74 65 73 74 31  t2.r1 FROM test1
08b0: 2c 20 74 65 73 74 32 7d 0a 7d 20 7b 31 31 20 31  , test2}.} {11 1
08c0: 2e 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  .1}.do_test sele
08d0: 63 74 31 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65  ct1-1.11 {.  exe
08e0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 65 73  csql {SELECT tes
08f0: 74 31 2e 66 31 2c 20 74 65 73 74 32 2e 72 31 20  t1.f1, test2.r1 
0900: 46 52 4f 4d 20 74 65 73 74 32 2c 20 74 65 73 74  FROM test2, test
0910: 31 7d 0a 7d 20 7b 31 31 20 31 2e 31 7d 0a 64 6f  1}.} {11 1.1}.do
0920: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 2e  _test select1-1.
0930: 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.1 {.  execsql
0940: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0950: 74 65 73 74 32 2c 20 74 65 73 74 31 7d 0a 7d 20  test2, test1}.} 
0960: 7b 31 2e 31 20 32 2e 32 20 31 31 20 32 32 7d 0a  {1.1 2.2 11 22}.
0970: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
0980: 31 2e 31 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  1.11.2 {.  execs
0990: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
09a0: 4d 20 74 65 73 74 31 20 41 53 20 61 2c 20 74 65  M test1 AS a, te
09b0: 73 74 31 20 41 53 20 62 7d 0a 7d 20 7b 31 31 20  st1 AS b}.} {11 
09c0: 32 32 20 31 31 20 32 32 7d 0a 64 6f 5f 74 65 73  22 11 22}.do_tes
09d0: 74 20 73 65 6c 65 63 74 31 2d 31 2e 31 32 20 7b  t select1-1.12 {
09e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
09f0: 43 54 20 6d 61 78 28 74 65 73 74 31 2e 66 31 2c  CT max(test1.f1,
0a00: 74 65 73 74 32 2e 72 31 29 2c 20 6d 69 6e 28 74  test2.r1), min(t
0a10: 65 73 74 31 2e 66 32 2c 74 65 73 74 32 2e 72 32  est1.f2,test2.r2
0a20: 29 0a 20 20 20 20 20 20 20 20 20 20 20 46 52 4f  ).           FRO
0a30: 4d 20 74 65 73 74 32 2c 20 74 65 73 74 31 7d 0a  M test2, test1}.
0a40: 7d 20 7b 31 31 20 32 2e 32 7d 0a 64 6f 5f 74 65  } {11 2.2}.do_te
0a50: 73 74 20 73 65 6c 65 63 74 31 2d 31 2e 31 33 20  st select1-1.13 
0a60: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0a70: 45 43 54 20 6d 69 6e 28 74 65 73 74 31 2e 66 31  ECT min(test1.f1
0a80: 2c 74 65 73 74 32 2e 72 31 29 2c 20 6d 61 78 28  ,test2.r1), max(
0a90: 74 65 73 74 31 2e 66 32 2c 74 65 73 74 32 2e 72  test1.f2,test2.r
0aa0: 32 29 0a 20 20 20 20 20 20 20 20 20 20 20 46 52  2).           FR
0ab0: 4f 4d 20 74 65 73 74 31 2c 20 74 65 73 74 32 7d  OM test1, test2}
0ac0: 0a 7d 20 7b 31 2e 31 20 32 32 7d 0a 0a 73 65 74  .} {1.1 22}..set
0ad0: 20 6c 6f 6e 67 20 7b 54 68 69 73 20 69 73 20 61   long {This is a
0ae0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
0af0: 74 6f 6f 20 62 69 67 20 74 6f 20 66 69 74 20 69  too big to fit i
0b00: 6e 73 69 64 65 20 61 20 4e 42 46 53 20 62 75 66  nside a NBFS buf
0b10: 66 65 72 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  fer}.do_test sel
0b20: 65 63 74 31 2d 32 2e 30 20 7b 0a 20 20 65 78 65  ect1-2.0 {.  exe
0b30: 63 73 71 6c 20 22 0a 20 20 20 20 44 52 4f 50 20  csql ".    DROP 
0b40: 54 41 42 4c 45 20 74 65 73 74 32 3b 0a 20 20 20  TABLE test2;.   
0b50: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73   DELETE FROM tes
0b60: 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t1;.    INSERT I
0b70: 4e 54 4f 20 74 65 73 74 31 20 56 41 4c 55 45 53  NTO test1 VALUES
0b80: 28 31 31 2c 32 32 29 3b 0a 20 20 20 20 49 4e 53  (11,22);.    INS
0b90: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 20 56  ERT INTO test1 V
0ba0: 41 4c 55 45 53 28 33 33 2c 34 34 29 3b 0a 20 20  ALUES(33,44);.  
0bb0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0bc0: 33 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45  3(a,b);.    INSE
0bd0: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
0be0: 53 28 27 61 62 63 27 2c 4e 55 4c 4c 29 3b 0a 20  S('abc',NULL);. 
0bf0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0c00: 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 27 78  3 VALUES(NULL,'x
0c10: 79 7a 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  yz');.    INSERT
0c20: 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20   INTO t3 SELECT 
0c30: 2a 20 46 52 4f 4d 20 74 65 73 74 31 3b 0a 20 20  * FROM test1;.  
0c40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0c50: 34 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45  4(a,b);.    INSE
0c60: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
0c70: 53 28 4e 55 4c 4c 2c 27 24 6c 6f 6e 67 27 29 3b  S(NULL,'$long');
0c80: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0c90: 4f 4d 20 74 33 3b 0a 20 20 22 0a 7d 20 7b 61 62  OM t3;.  ".} {ab
0ca0: 63 20 7b 7d 20 7b 7d 20 78 79 7a 20 31 31 20 32  c {} {} xyz 11 2
0cb0: 32 20 33 33 20 34 34 7d 0a 0a 23 20 45 72 72 6f  2 33 44}..# Erro
0cc0: 72 20 6d 65 73 73 67 65 73 20 66 72 6f 6d 20 73  r messges from s
0cd0: 71 6c 69 74 65 45 78 70 72 43 68 65 63 6b 0a 23  qliteExprCheck.#
0ce0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
0cf0: 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b  -2.1 {.  set v [
0d00: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0d10: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 66 31 2c  SELECT count(f1,
0d20: 66 32 29 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d  f2) FROM test1}}
0d30: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0d40: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f  v $msg.} {1 {wro
0d50: 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  ng number of arg
0d60: 75 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63 74 69  uments to functi
0d70: 6f 6e 20 63 6f 75 6e 74 28 29 7d 7d 0a 64 6f 5f  on count()}}.do_
0d80: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e 32  test select1-2.2
0d90: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0da0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  h {execsql {SELE
0db0: 43 54 20 63 6f 75 6e 74 28 66 31 29 20 46 52 4f  CT count(f1) FRO
0dc0: 4d 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20  M test1}} msg]. 
0dd0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0de0: 7d 20 7b 30 20 32 7d 0a 64 6f 5f 74 65 73 74 20  } {0 2}.do_test 
0df0: 73 65 6c 65 63 74 31 2d 32 2e 33 20 7b 0a 20 20  select1-2.3 {.  
0e00: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
0e10: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 6f  ecsql {SELECT Co
0e20: 75 6e 74 28 29 20 46 52 4f 4d 20 74 65 73 74 31  unt() FROM test1
0e30: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0e40: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 32 7d  d v $msg.} {0 2}
0e50: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
0e60: 2d 32 2e 34 20 7b 0a 20 20 73 65 74 20 76 20 5b  -2.4 {.  set v [
0e70: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0e80: 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
0e90: 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73 67  FROM test1}} msg
0ea0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0eb0: 73 67 0a 7d 20 7b 30 20 32 7d 0a 64 6f 5f 74 65  sg.} {0 2}.do_te
0ec0: 73 74 20 73 65 6c 65 63 74 31 2d 32 2e 35 20 7b  st select1-2.5 {
0ed0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0ee0: 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54  {execsql {SELECT
0ef0: 20 43 4f 55 4e 54 28 2a 29 2b 31 20 46 52 4f 4d   COUNT(*)+1 FROM
0f00: 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20   test1}} msg].  
0f10: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0f20: 20 7b 30 20 33 7d 0a 64 6f 5f 74 65 73 74 20 73   {0 3}.do_test s
0f30: 65 6c 65 63 74 31 2d 32 2e 35 2e 31 20 7b 0a 20  elect1-2.5.1 {. 
0f40: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0f50: 20 63 6f 75 6e 74 28 2a 29 2c 63 6f 75 6e 74 28   count(*),count(
0f60: 61 29 2c 63 6f 75 6e 74 28 62 29 20 46 52 4f 4d  a),count(b) FROM
0f70: 20 74 33 7d 0a 7d 20 7b 34 20 33 20 33 7d 0a 64   t3}.} {4 3 3}.d
0f80: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32  o_test select1-2
0f90: 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.2 {.  execsql
0fa0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0fb0: 29 2c 63 6f 75 6e 74 28 61 29 2c 63 6f 75 6e 74  ),count(a),count
0fc0: 28 62 29 20 46 52 4f 4d 20 74 34 7d 0a 7d 20 7b  (b) FROM t4}.} {
0fd0: 31 20 30 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73  1 0 1}.do_test s
0fe0: 65 6c 65 63 74 31 2d 32 2e 35 2e 33 20 7b 0a 20  elect1-2.5.3 {. 
0ff0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1000: 20 63 6f 75 6e 74 28 2a 29 2c 63 6f 75 6e 74 28   count(*),count(
1010: 61 29 2c 63 6f 75 6e 74 28 62 29 20 46 52 4f 4d  a),count(b) FROM
1020: 20 74 34 20 57 48 45 52 45 20 62 3d 35 7d 0a 7d   t4 WHERE b=5}.}
1030: 20 7b 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74   {0 0 0}.do_test
1040: 20 73 65 6c 65 63 74 31 2d 32 2e 36 20 7b 0a 20   select1-2.6 {. 
1050: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1060: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d  xecsql {SELECT m
1070: 69 6e 28 2a 29 20 46 52 4f 4d 20 74 65 73 74 31  in(*) FROM test1
1080: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1090: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77  d v $msg.} {1 {w
10a0: 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 61  rong number of a
10b0: 72 67 75 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63  rguments to func
10c0: 74 69 6f 6e 20 6d 69 6e 28 29 7d 7d 0a 64 6f 5f  tion min()}}.do_
10d0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e 37  test select1-2.7
10e0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
10f0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  h {execsql {SELE
1100: 43 54 20 4d 69 6e 28 66 31 29 20 46 52 4f 4d 20  CT Min(f1) FROM 
1110: 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c  test1}} msg].  l
1120: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
1130: 7b 30 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 11}.do_test s
1140: 65 6c 65 63 74 31 2d 32 2e 38 20 7b 0a 20 20 73  elect1-2.8 {.  s
1150: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
1160: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 4d 49 4e  csql {SELECT MIN
1170: 28 66 31 2c 66 32 29 20 46 52 4f 4d 20 74 65 73  (f1,f2) FROM tes
1180: 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  t1}} msg].  lapp
1190: 65 6e 64 20 76 20 5b 6c 73 6f 72 74 20 24 6d 73  end v [lsort $ms
11a0: 67 5d 0a 7d 20 7b 30 20 7b 31 31 20 33 33 7d 7d  g].} {0 {11 33}}
11b0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
11c0: 2d 32 2e 38 2e 31 20 7b 0a 20 20 65 78 65 63 73  -2.8.1 {.  execs
11d0: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61 6c 65  ql {SELECT coale
11e0: 73 63 65 28 6d 69 6e 28 61 29 2c 27 78 79 7a 7a  sce(min(a),'xyzz
11f0: 79 27 29 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y') FROM t3}.} {
1200: 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  11}.do_test sele
1210: 63 74 31 2d 32 2e 38 2e 32 20 7b 0a 20 20 65 78  ct1-2.8.2 {.  ex
1220: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 69  ecsql {SELECT mi
1230: 6e 28 63 6f 61 6c 65 73 63 65 28 61 2c 27 78 79  n(coalesce(a,'xy
1240: 7a 7a 79 27 29 29 20 46 52 4f 4d 20 74 33 7d 0a  zzy')) FROM t3}.
1250: 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73  } {11}.do_test s
1260: 65 6c 65 63 74 31 2d 32 2e 38 2e 33 20 7b 0a 20  elect1-2.8.3 {. 
1270: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1280: 20 6d 69 6e 28 62 29 2c 20 6d 69 6e 28 62 29 20   min(b), min(b) 
1290: 46 52 4f 4d 20 74 34 7d 0a 7d 20 5b 6c 69 73 74  FROM t4}.} [list
12a0: 20 24 6c 6f 6e 67 20 24 6c 6f 6e 67 5d 0a 64 6f   $long $long].do
12b0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e  _test select1-2.
12c0: 39 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  9 {.  set v [cat
12d0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c  ch {execsql {SEL
12e0: 45 43 54 20 4d 41 58 28 2a 29 20 46 52 4f 4d 20  ECT MAX(*) FROM 
12f0: 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c  test1}} msg].  l
1300: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
1310: 7b 31 20 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72  {1 {wrong number
1320: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
1330: 20 66 75 6e 63 74 69 6f 6e 20 4d 41 58 28 29 7d   function MAX()}
1340: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
1350: 31 2d 32 2e 31 30 20 7b 0a 20 20 73 65 74 20 76  1-2.10 {.  set v
1360: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
1370: 20 7b 53 45 4c 45 43 54 20 4d 61 78 28 66 31 29   {SELECT Max(f1)
1380: 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73   FROM test1}} ms
1390: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
13a0: 6d 73 67 0a 7d 20 7b 30 20 33 33 7d 0a 64 6f 5f  msg.} {0 33}.do_
13b0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e 31  test select1-2.1
13c0: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
13d0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c  ch {execsql {SEL
13e0: 45 43 54 20 6d 61 78 28 66 31 2c 66 32 29 20 46  ECT max(f1,f2) F
13f0: 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d  ROM test1}} msg]
1400: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 5b 6c 73  .  lappend v [ls
1410: 6f 72 74 20 24 6d 73 67 5d 0a 7d 20 7b 30 20 7b  ort $msg].} {0 {
1420: 32 32 20 34 34 7d 7d 0a 64 6f 5f 74 65 73 74 20  22 44}}.do_test 
1430: 73 65 6c 65 63 74 31 2d 32 2e 31 32 20 7b 0a 20  select1-2.12 {. 
1440: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1450: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 4d  xecsql {SELECT M
1460: 41 58 28 66 31 2c 66 32 29 2b 31 20 46 52 4f 4d  AX(f1,f2)+1 FROM
1470: 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20   test1}} msg].  
1480: 6c 61 70 70 65 6e 64 20 76 20 5b 6c 73 6f 72 74  lappend v [lsort
1490: 20 24 6d 73 67 5d 0a 7d 20 7b 30 20 7b 32 33 20   $msg].} {0 {23 
14a0: 34 35 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  45}}.do_test sel
14b0: 65 63 74 31 2d 32 2e 31 33 20 7b 0a 20 20 73 65  ect1-2.13 {.  se
14c0: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
14d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 4d 41 58 28  sql {SELECT MAX(
14e0: 66 31 29 2b 31 20 46 52 4f 4d 20 74 65 73 74 31  f1)+1 FROM test1
14f0: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1500: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 33 34  d v $msg.} {0 34
1510: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
1520: 31 2d 32 2e 31 33 2e 31 20 7b 0a 20 20 65 78 65  1-2.13.1 {.  exe
1530: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 61  csql {SELECT coa
1540: 6c 65 73 63 65 28 6d 61 78 28 61 29 2c 27 78 79  lesce(max(a),'xy
1550: 7a 7a 79 27 29 20 46 52 4f 4d 20 74 33 7d 0a 7d  zzy') FROM t3}.}
1560: 20 7b 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 73   {abc}.do_test s
1570: 65 6c 65 63 74 31 2d 32 2e 31 33 2e 32 20 7b 0a  elect1-2.13.2 {.
1580: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1590: 54 20 6d 61 78 28 63 6f 61 6c 65 73 63 65 28 61  T max(coalesce(a
15a0: 2c 27 78 79 7a 7a 79 27 29 29 20 46 52 4f 4d 20  ,'xyzzy')) FROM 
15b0: 74 33 7d 0a 7d 20 7b 78 79 7a 7a 79 7d 0a 64 6f  t3}.} {xyzzy}.do
15c0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e  _test select1-2.
15d0: 31 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  14 {.  set v [ca
15e0: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45  tch {execsql {SE
15f0: 4c 45 43 54 20 53 55 4d 28 2a 29 20 46 52 4f 4d  LECT SUM(*) FROM
1600: 20 74 65 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20   test1}} msg].  
1610: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
1620: 20 7b 31 20 7b 77 72 6f 6e 67 20 6e 75 6d 62 65   {1 {wrong numbe
1630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
1640: 6f 20 66 75 6e 63 74 69 6f 6e 20 53 55 4d 28 29  o function SUM()
1650: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  }}.do_test selec
1660: 74 31 2d 32 2e 31 35 20 7b 0a 20 20 73 65 74 20  t1-2.15 {.  set 
1670: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
1680: 6c 20 7b 53 45 4c 45 43 54 20 53 75 6d 28 66 31  l {SELECT Sum(f1
1690: 29 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d  ) FROM test1}} m
16a0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
16b0: 24 6d 73 67 0a 7d 20 7b 30 20 34 34 7d 0a 64 6f  $msg.} {0 44}.do
16c0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e  _test select1-2.
16d0: 31 36 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  16 {.  set v [ca
16e0: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45  tch {execsql {SE
16f0: 4c 45 43 54 20 73 75 6d 28 66 31 2c 66 32 29 20  LECT sum(f1,f2) 
1700: 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73 67  FROM test1}} msg
1710: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1720: 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 6e  sg.} {1 {wrong n
1730: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
1740: 74 73 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 73  ts to function s
1750: 75 6d 28 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  um()}}.do_test s
1760: 65 6c 65 63 74 31 2d 32 2e 31 37 20 7b 0a 20 20  elect1-2.17 {.  
1770: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
1780: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 53 55  ecsql {SELECT SU
1790: 4d 28 66 31 29 2b 31 20 46 52 4f 4d 20 74 65 73  M(f1)+1 FROM tes
17a0: 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  t1}} msg].  lapp
17b0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
17c0: 34 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  45}.do_test sele
17d0: 63 74 31 2d 32 2e 31 37 2e 31 20 7b 0a 20 20 65  ct1-2.17.1 {.  e
17e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73  xecsql {SELECT s
17f0: 75 6d 28 61 29 20 46 52 4f 4d 20 74 33 7d 0a 7d  um(a) FROM t3}.}
1800: 20 7b 34 34 2e 30 7d 0a 64 6f 5f 74 65 73 74 20   {44.0}.do_test 
1810: 73 65 6c 65 63 74 31 2d 32 2e 31 38 20 7b 0a 20  select1-2.18 {. 
1820: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1830: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 58  xecsql {SELECT X
1840: 59 5a 5a 59 28 66 31 29 20 46 52 4f 4d 20 74 65  YZZY(f1) FROM te
1850: 73 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  st1}} msg].  lap
1860: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
1870: 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69   {no such functi
1880: 6f 6e 3a 20 58 59 5a 5a 59 7d 7d 0a 64 6f 5f 74  on: XYZZY}}.do_t
1890: 65 73 74 20 73 65 6c 65 63 74 31 2d 32 2e 31 39  est select1-2.19
18a0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
18b0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  h {execsql {SELE
18c0: 43 54 20 53 55 4d 28 6d 69 6e 28 66 31 2c 66 32  CT SUM(min(f1,f2
18d0: 29 29 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20  )) FROM test1}} 
18e0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
18f0: 20 24 6d 73 67 0a 7d 20 7b 30 20 34 34 7d 0a 64   $msg.} {0 44}.d
1900: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32  o_test select1-2
1910: 2e 32 30 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  .20 {.  set v [c
1920: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53  atch {execsql {S
1930: 45 4c 45 43 54 20 53 55 4d 28 6d 69 6e 28 66 31  ELECT SUM(min(f1
1940: 29 29 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20  )) FROM test1}} 
1950: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
1960: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6d 69 73 75   $msg.} {1 {misu
1970: 73 65 20 6f 66 20 61 67 67 72 65 67 61 74 65 20  se of aggregate 
1980: 66 75 6e 63 74 69 6f 6e 20 6d 69 6e 28 29 7d 7d  function min()}}
1990: 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 35 32 36  ..# Ticket #2526
19a0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .#.do_test selec
19b0: 74 31 2d 32 2e 32 31 20 7b 0a 20 20 63 61 74 63  t1-2.21 {.  catc
19c0: 68 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45  hsql {.     SELE
19d0: 43 54 20 6d 69 6e 28 66 31 29 20 41 53 20 6d 20  CT min(f1) AS m 
19e0: 46 52 4f 4d 20 74 65 73 74 31 20 47 52 4f 55 50  FROM test1 GROUP
19f0: 20 42 59 20 66 31 20 48 41 56 49 4e 47 20 6d 61   BY f1 HAVING ma
1a00: 78 28 6d 2b 35 29 3c 31 30 0a 20 20 7d 0a 7d 20  x(m+5)<10.  }.} 
1a10: 7b 31 20 7b 6d 69 73 75 73 65 20 6f 66 20 61 6c  {1 {misuse of al
1a20: 69 61 73 65 64 20 61 67 67 72 65 67 61 74 65 20  iased aggregate 
1a30: 6d 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  m}}.do_test sele
1a40: 63 74 31 2d 32 2e 32 32 20 7b 0a 20 20 63 61 74  ct1-2.22 {.  cat
1a50: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c  chsql {.     SEL
1a60: 45 43 54 20 63 6f 61 6c 65 73 63 65 28 6d 69 6e  ECT coalesce(min
1a70: 28 66 31 29 2b 35 2c 31 31 29 20 41 53 20 6d 20  (f1)+5,11) AS m 
1a80: 46 52 4f 4d 20 74 65 73 74 31 0a 20 20 20 20 20  FROM test1.     
1a90: 20 47 52 4f 55 50 20 42 59 20 66 31 0a 20 20 20   GROUP BY f1.   
1aa0: 20 20 48 41 56 49 4e 47 20 6d 61 78 28 6d 2b 35    HAVING max(m+5
1ab0: 29 3c 31 30 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6d  )<10.  }.} {1 {m
1ac0: 69 73 75 73 65 20 6f 66 20 61 6c 69 61 73 65 64  isuse of aliased
1ad0: 20 61 67 67 72 65 67 61 74 65 20 6d 7d 7d 0a 64   aggregate m}}.d
1ae0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 32  o_test select1-2
1af0: 2e 32 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .23 {.  execsql 
1b00: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1b10: 4c 45 20 74 6b 74 32 35 32 36 28 61 2c 62 2c 63  LE tkt2526(a,b,c
1b20: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
1b30: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b40: 6b 74 32 35 32 36 20 56 41 4c 55 45 53 28 27 78  kt2526 VALUES('x
1b50: 27 2c 27 79 27 2c 4e 55 4c 4c 29 3b 0a 20 20 20  ','y',NULL);.   
1b60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 6b 74   INSERT INTO tkt
1b70: 32 35 32 36 20 56 41 4c 55 45 53 28 27 78 27 2c  2526 VALUES('x',
1b80: 27 7a 27 2c 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 20  'z',NULL);.  }. 
1b90: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1ba0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 61 29 20  SELECT count(a) 
1bb0: 41 53 20 63 6e 20 46 52 4f 4d 20 74 6b 74 32 35  AS cn FROM tkt25
1bc0: 32 36 20 47 52 4f 55 50 20 42 59 20 61 20 48 41  26 GROUP BY a HA
1bd0: 56 49 4e 47 20 63 6e 3c 6d 61 78 28 63 6e 29 0a  VING cn<max(cn).
1be0: 20 20 7d 0a 7d 20 7b 31 20 7b 6d 69 73 75 73 65    }.} {1 {misuse
1bf0: 20 6f 66 20 61 6c 69 61 73 65 64 20 61 67 67 72   of aliased aggr
1c00: 65 67 61 74 65 20 63 6e 7d 7d 0a 0a 23 20 57 48  egate cn}}..# WH
1c10: 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
1c20: 73 73 69 6f 6e 73 0a 23 0a 64 6f 5f 74 65 73 74  ssions.#.do_test
1c30: 20 73 65 6c 65 63 74 31 2d 33 2e 31 20 7b 0a 20   select1-3.1 {. 
1c40: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1c50: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66  xecsql {SELECT f
1c60: 31 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  1 FROM test1 WHE
1c70: 52 45 20 66 31 3c 31 31 7d 7d 20 6d 73 67 5d 0a  RE f1<11}} msg].
1c80: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
1c90: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1ca0: 74 20 73 65 6c 65 63 74 31 2d 33 2e 32 20 7b 0a  t select1-3.2 {.
1cb0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
1cc0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1cd0: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48  f1 FROM test1 WH
1ce0: 45 52 45 20 66 31 3c 3d 31 31 7d 7d 20 6d 73 67  ERE f1<=11}} msg
1cf0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1d00: 73 67 0a 7d 20 7b 30 20 31 31 7d 0a 64 6f 5f 74  sg.} {0 11}.do_t
1d10: 65 73 74 20 73 65 6c 65 63 74 31 2d 33 2e 33 20  est select1-3.3 
1d20: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
1d30: 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   {execsql {SELEC
1d40: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
1d50: 57 48 45 52 45 20 66 31 3d 31 31 7d 7d 20 6d 73  WHERE f1=11}} ms
1d60: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
1d70: 6d 73 67 0a 7d 20 7b 30 20 31 31 7d 0a 64 6f 5f  msg.} {0 11}.do_
1d80: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 33 2e 34  test select1-3.4
1d90: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
1da0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  h {execsql {SELE
1db0: 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31  CT f1 FROM test1
1dc0: 20 57 48 45 52 45 20 66 31 3e 3d 31 31 7d 7d 20   WHERE f1>=11}} 
1dd0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
1de0: 20 5b 6c 73 6f 72 74 20 24 6d 73 67 5d 0a 7d 20   [lsort $msg].} 
1df0: 7b 30 20 7b 31 31 20 33 33 7d 7d 0a 64 6f 5f 74  {0 {11 33}}.do_t
1e00: 65 73 74 20 73 65 6c 65 63 74 31 2d 33 2e 35 20  est select1-3.5 
1e10: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
1e20: 20 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   {execsql {SELEC
1e30: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
1e40: 57 48 45 52 45 20 66 31 3e 31 31 7d 7d 20 6d 73  WHERE f1>11}} ms
1e50: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 5b  g].  lappend v [
1e60: 6c 73 6f 72 74 20 24 6d 73 67 5d 0a 7d 20 7b 30  lsort $msg].} {0
1e70: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   33}.do_test sel
1e80: 65 63 74 31 2d 33 2e 36 20 7b 0a 20 20 73 65 74  ect1-3.6 {.  set
1e90: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
1ea0: 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 20 46 52  ql {SELECT f1 FR
1eb0: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66  OM test1 WHERE f
1ec0: 31 21 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c  1!=11}} msg].  l
1ed0: 61 70 70 65 6e 64 20 76 20 5b 6c 73 6f 72 74 20  append v [lsort 
1ee0: 24 6d 73 67 5d 0a 7d 20 7b 30 20 33 33 7d 0a 64  $msg].} {0 33}.d
1ef0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 33  o_test select1-3
1f00: 2e 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .7 {.  set v [ca
1f10: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45  tch {execsql {SE
1f20: 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73  LECT f1 FROM tes
1f30: 74 31 20 57 48 45 52 45 20 6d 69 6e 28 66 31 2c  t1 WHERE min(f1,
1f40: 66 32 29 21 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20  f2)!=11}} msg]. 
1f50: 20 6c 61 70 70 65 6e 64 20 76 20 5b 6c 73 6f 72   lappend v [lsor
1f60: 74 20 24 6d 73 67 5d 0a 7d 20 7b 30 20 33 33 7d  t $msg].} {0 33}
1f70: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
1f80: 2d 33 2e 38 20 7b 0a 20 20 73 65 74 20 76 20 5b  -3.8 {.  set v [
1f90: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
1fa0: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
1fb0: 65 73 74 31 20 57 48 45 52 45 20 6d 61 78 28 66  est1 WHERE max(f
1fc0: 31 2c 66 32 29 21 3d 31 31 7d 7d 20 6d 73 67 5d  1,f2)!=11}} msg]
1fd0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 5b 6c 73  .  lappend v [ls
1fe0: 6f 72 74 20 24 6d 73 67 5d 0a 7d 20 7b 30 20 7b  ort $msg].} {0 {
1ff0: 31 31 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20  11 33}}.do_test 
2000: 73 65 6c 65 63 74 31 2d 33 2e 39 20 7b 0a 20 20  select1-3.9 {.  
2010: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
2020: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31  ecsql {SELECT f1
2030: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
2040: 45 20 63 6f 75 6e 74 28 66 31 2c 66 32 29 21 3d  E count(f1,f2)!=
2050: 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  11}} msg].  lapp
2060: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20  end v $msg.} {1 
2070: 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66  {wrong number of
2080: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 66 75   arguments to fu
2090: 6e 63 74 69 6f 6e 20 63 6f 75 6e 74 28 29 7d 7d  nction count()}}
20a0: 0a 0a 23 20 4f 52 44 45 52 20 42 59 20 65 78 70  ..# ORDER BY exp
20b0: 72 65 73 73 69 6f 6e 73 0a 23 0a 64 6f 5f 74 65  ressions.#.do_te
20c0: 73 74 20 73 65 6c 65 63 74 31 2d 34 2e 31 20 7b  st select1-4.1 {
20d0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
20e0: 7b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54  {execsql {SELECT
20f0: 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4f   f1 FROM test1 O
2100: 52 44 45 52 20 42 59 20 66 31 7d 7d 20 6d 73 67  RDER BY f1}} msg
2110: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
2120: 73 67 0a 7d 20 7b 30 20 7b 31 31 20 33 33 7d 7d  sg.} {0 {11 33}}
2130: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
2140: 2d 34 2e 32 20 7b 0a 20 20 73 65 74 20 76 20 5b  -4.2 {.  set v [
2150: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
2160: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
2170: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 2d 66  est1 ORDER BY -f
2180: 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  1}} msg].  lappe
2190: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
21a0: 33 33 20 31 31 7d 7d 0a 64 6f 5f 74 65 73 74 20  33 11}}.do_test 
21b0: 73 65 6c 65 63 74 31 2d 34 2e 33 20 7b 0a 20 20  select1-4.3 {.  
21c0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
21d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31  ecsql {SELECT f1
21e0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
21f0: 52 20 42 59 20 6d 69 6e 28 66 31 2c 66 32 29 7d  R BY min(f1,f2)}
2200: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
2210: 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 31   v $msg.} {0 {11
2220: 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65   33}}.do_test se
2230: 6c 65 63 74 31 2d 34 2e 34 20 7b 0a 20 20 73 65  lect1-4.4 {.  se
2240: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
2250: 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 20 46  sql {SELECT f1 F
2260: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
2270: 42 59 20 6d 69 6e 28 66 31 29 7d 7d 20 6d 73 67  BY min(f1)}} msg
2280: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
2290: 73 67 0a 7d 20 7b 31 20 7b 6d 69 73 75 73 65 20  sg.} {1 {misuse 
22a0: 6f 66 20 61 67 67 72 65 67 61 74 65 3a 20 6d 69  of aggregate: mi
22b0: 6e 28 29 7d 7d 0a 0a 23 20 54 68 65 20 72 65 73  n()}}..# The res
22c0: 74 72 69 63 74 69 6f 6e 20 6e 6f 74 20 61 6c 6c  triction not all
22d0: 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20  owing constants 
22e0: 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
22f0: 63 6c 61 75 73 65 0a 23 20 68 61 73 20 62 65 65  clause.# has bee
2300: 6e 20 72 65 6d 6f 76 65 64 2e 20 20 53 65 65 20  n removed.  See 
2310: 74 69 63 6b 65 74 20 23 31 37 36 38 0a 23 64 6f  ticket #1768.#do
2320: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 34 2e  _test select1-4.
2330: 35 20 7b 0a 23 20 20 63 61 74 63 68 73 71 6c 20  5 {.#  catchsql 
2340: 7b 0a 23 20 20 20 20 53 45 4c 45 43 54 20 66 31  {.#    SELECT f1
2350: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
2360: 52 20 42 59 20 38 2e 34 3b 0a 23 20 20 7d 0a 23  R BY 8.4;.#  }.#
2370: 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74  } {1 {ORDER BY t
2380: 65 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65  erms must not be
2390: 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e   non-integer con
23a0: 73 74 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73  stants}}.#do_tes
23b0: 74 20 73 65 6c 65 63 74 31 2d 34 2e 36 20 7b 0a  t select1-4.6 {.
23c0: 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20  #  catchsql {.# 
23d0: 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f     SELECT f1 FRO
23e0: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
23f0: 20 27 38 2e 34 27 3b 0a 23 20 20 7d 0a 23 7d 20   '8.4';.#  }.#} 
2400: 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72  {1 {ORDER BY ter
2410: 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e  ms must not be n
2420: 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74  on-integer const
2430: 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20  ants}}.#do_test 
2440: 73 65 6c 65 63 74 31 2d 34 2e 37 2e 31 20 7b 0a  select1-4.7.1 {.
2450: 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20  #  catchsql {.# 
2460: 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f     SELECT f1 FRO
2470: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
2480: 20 27 78 79 7a 27 3b 0a 23 20 20 7d 0a 23 7d 20   'xyz';.#  }.#} 
2490: 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72  {1 {ORDER BY ter
24a0: 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e  ms must not be n
24b0: 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74  on-integer const
24c0: 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20  ants}}.#do_test 
24d0: 73 65 6c 65 63 74 31 2d 34 2e 37 2e 32 20 7b 0a  select1-4.7.2 {.
24e0: 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20  #  catchsql {.# 
24f0: 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f     SELECT f1 FRO
2500: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
2510: 20 2d 38 2e 34 3b 0a 23 20 20 7d 0a 23 7d 20 7b   -8.4;.#  }.#} {
2520: 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72 6d  1 {ORDER BY term
2530: 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e 6f  s must not be no
2540: 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  n-integer consta
2550: 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20 73  nts}}.#do_test s
2560: 65 6c 65 63 74 31 2d 34 2e 37 2e 33 20 7b 0a 23  elect1-4.7.3 {.#
2570: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20 20    catchsql {.#  
2580: 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d    SELECT f1 FROM
2590: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
25a0: 2b 38 2e 34 3b 0a 23 20 20 7d 0a 23 7d 20 7b 31  +8.4;.#  }.#} {1
25b0: 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72 6d 73   {ORDER BY terms
25c0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e 6f 6e   must not be non
25d0: 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e  -integer constan
25e0: 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20 73 65  ts}}.#do_test se
25f0: 6c 65 63 74 31 2d 34 2e 37 2e 34 20 7b 0a 23 20  lect1-4.7.4 {.# 
2600: 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20 20 20   catchsql {.#   
2610: 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20   SELECT f1 FROM 
2620: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 34  test1 ORDER BY 4
2630: 32 39 34 39 36 37 32 39 36 3b 20 2d 2d 20 63 6f  294967296; -- co
2640: 6e 73 74 61 6e 74 20 6c 61 72 67 65 72 20 74 68  nstant larger th
2650: 61 6e 20 33 32 20 62 69 74 73 0a 23 20 20 7d 0a  an 32 bits.#  }.
2660: 23 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59 20  #} {1 {ORDER BY 
2670: 74 65 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62  terms must not b
2680: 65 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f  e non-integer co
2690: 6e 73 74 61 6e 74 73 7d 7d 0a 0a 64 6f 5f 74 65  nstants}}..do_te
26a0: 73 74 20 73 65 6c 65 63 74 31 2d 34 2e 35 20 7b  st select1-4.5 {
26b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
26c0: 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20   SELECT f1 FROM 
26d0: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 38  test1 ORDER BY 8
26e0: 2e 34 0a 20 20 7d 0a 7d 20 7b 31 31 20 33 33 7d  .4.  }.} {11 33}
26f0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
2700: 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.6 {.  execsql
2710: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66 31   {.    SELECT f1
2720: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
2730: 52 20 42 59 20 27 38 2e 34 27 0a 20 20 7d 0a 7d  R BY '8.4'.  }.}
2740: 20 7b 31 31 20 33 33 7d 0a 0a 64 6f 5f 74 65 73   {11 33}..do_tes
2750: 74 20 73 65 6c 65 63 74 31 2d 34 2e 38 20 7b 0a  t select1-4.8 {.
2760: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2770: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
2780: 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  a,b);.    INSERT
2790: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
27a0: 31 2c 31 30 29 3b 0a 20 20 20 20 49 4e 53 45 52  1,10);.    INSER
27b0: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
27c0: 28 32 2c 39 29 3b 0a 20 20 20 20 53 45 4c 45 43  (2,9);.    SELEC
27d0: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
27e0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY 1;.  }.} {1
27f0: 20 31 30 20 32 20 39 7d 0a 64 6f 5f 74 65 73 74   10 2 9}.do_test
2800: 20 73 65 6c 65 63 74 31 2d 34 2e 39 2e 31 20 7b   select1-4.9.1 {
2810: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2820: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2830: 35 20 4f 52 44 45 52 20 42 59 20 32 3b 0a 20 20  5 ORDER BY 2;.  
2840: 7d 0a 7d 20 7b 32 20 39 20 31 20 31 30 7d 0a 64  }.} {2 9 1 10}.d
2850: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 34  o_test select1-4
2860: 2e 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .9.2 {.  execsql
2870: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2880: 46 52 4f 4d 20 74 35 20 4f 52 44 45 52 20 42 59  FROM t5 ORDER BY
2890: 20 2b 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 39 20   +2;.  }.} {2 9 
28a0: 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 10}.do_test se
28b0: 6c 65 63 74 31 2d 34 2e 31 30 2e 31 20 7b 0a 20  lect1-4.10.1 {. 
28c0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
28d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
28e0: 20 4f 52 44 45 52 20 42 59 20 33 3b 0a 20 20 7d   ORDER BY 3;.  }
28f0: 0a 7d 20 7b 31 20 7b 31 73 74 20 4f 52 44 45 52  .} {1 {1st ORDER
2900: 20 42 59 20 74 65 72 6d 20 6f 75 74 20 6f 66 20   BY term out of 
2910: 72 61 6e 67 65 20 2d 20 73 68 6f 75 6c 64 20 62  range - should b
2920: 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
2930: 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  2}}.do_test sele
2940: 63 74 31 2d 34 2e 31 30 2e 32 20 7b 0a 20 20 63  ct1-4.10.2 {.  c
2950: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
2960: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f  LECT * FROM t5 O
2970: 52 44 45 52 20 42 59 20 2d 31 3b 0a 20 20 7d 0a  RDER BY -1;.  }.
2980: 7d 20 7b 31 20 7b 31 73 74 20 4f 52 44 45 52 20  } {1 {1st ORDER 
2990: 42 59 20 74 65 72 6d 20 6f 75 74 20 6f 66 20 72  BY term out of r
29a0: 61 6e 67 65 20 2d 20 73 68 6f 75 6c 64 20 62 65  ange - should be
29b0: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 32   between 1 and 2
29c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  }}.do_test selec
29d0: 74 31 2d 34 2e 31 31 20 7b 0a 20 20 65 78 65 63  t1-4.11 {.  exec
29e0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
29f0: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
2a00: 33 2c 31 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  3,10);.    SELEC
2a10: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
2a20: 52 20 42 59 20 32 2c 20 31 20 44 45 53 43 3b 0a  R BY 2, 1 DESC;.
2a30: 20 20 7d 0a 7d 20 7b 32 20 39 20 33 20 31 30 20    }.} {2 9 3 10 
2a40: 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 10}.do_test se
2a50: 6c 65 63 74 31 2d 34 2e 31 32 20 7b 0a 20 20 65  lect1-4.12 {.  e
2a60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2a70: 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52  ECT * FROM t5 OR
2a80: 44 45 52 20 42 59 20 31 20 44 45 53 43 2c 20 62  DER BY 1 DESC, b
2a90: 3b 0a 20 20 7d 0a 7d 20 7b 33 20 31 30 20 32 20  ;.  }.} {3 10 2 
2aa0: 39 20 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  9 1 10}.do_test 
2ab0: 73 65 6c 65 63 74 31 2d 34 2e 31 33 20 7b 0a 20  select1-4.13 {. 
2ac0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2ad0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20  ELECT * FROM t5 
2ae0: 4f 52 44 45 52 20 42 59 20 62 20 44 45 53 43 2c  ORDER BY b DESC,
2af0: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 20   1;.  }.} {1 10 
2b00: 33 20 31 30 20 32 20 39 7d 0a 0a 0a 23 20 4f 52  3 10 2 9}...# OR
2b10: 44 45 52 20 42 59 20 69 67 6e 6f 72 65 64 20 6f  DER BY ignored o
2b20: 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  n an aggregate q
2b30: 75 65 72 79 0a 23 0a 64 6f 5f 74 65 73 74 20 73  uery.#.do_test s
2b40: 65 6c 65 63 74 31 2d 35 2e 31 20 7b 0a 20 20 73  elect1-5.1 {.  s
2b50: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
2b60: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78  csql {SELECT max
2b70: 28 66 31 29 20 46 52 4f 4d 20 74 65 73 74 31 20  (f1) FROM test1 
2b80: 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73  ORDER BY f2}} ms
2b90: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
2ba0: 6d 73 67 0a 7d 20 7b 30 20 33 33 7d 0a 0a 65 78  msg.} {0 33}..ex
2bb0: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
2bc0: 42 4c 45 20 74 65 73 74 32 28 74 31 20 74 65 78  BLE test2(t1 tex
2bd0: 74 2c 20 74 32 20 74 65 78 74 29 7d 0a 65 78 65  t, t2 text)}.exe
2be0: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
2bf0: 4f 20 74 65 73 74 32 20 56 41 4c 55 45 53 28 27  O test2 VALUES('
2c00: 61 62 63 27 2c 27 78 79 7a 27 29 7d 0a 0a 23 20  abc','xyz')}..# 
2c10: 43 68 65 63 6b 20 66 6f 72 20 63 6f 6c 75 6d 6e  Check for column
2c20: 20 6e 61 6d 69 6e 67 0a 23 0a 64 6f 5f 74 65 73   naming.#.do_tes
2c30: 74 20 73 65 6c 65 63 74 31 2d 36 2e 31 20 7b 0a  t select1-6.1 {.
2c40: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
2c50: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
2c60: 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4f   f1 FROM test1 O
2c70: 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73 67  RDER BY f2}} msg
2c80: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
2c90: 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31 20 66  sg.} {0 {f1 11 f
2ca0: 31 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  1 33}}.do_test s
2cb0: 65 6c 65 63 74 31 2d 36 2e 31 2e 31 20 7b 0a 20  elect1-6.1.1 {. 
2cc0: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
2cd0: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
2ce0: 65 73 3d 6f 6e 7d 0a 20 20 73 65 74 20 76 20 5b  es=on}.  set v [
2cf0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20  catch {execsql2 
2d00: 7b 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20  {SELECT f1 FROM 
2d10: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
2d20: 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  2}} msg].  lappe
2d30: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
2d40: 74 65 73 74 31 2e 66 31 20 31 31 20 74 65 73 74  test1.f1 11 test
2d50: 31 2e 66 31 20 33 33 7d 7d 0a 64 6f 5f 74 65 73  1.f1 33}}.do_tes
2d60: 74 20 73 65 6c 65 63 74 31 2d 36 2e 31 2e 32 20  t select1-6.1.2 
2d70: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
2d80: 20 7b 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45   {execsql2 {SELE
2d90: 43 54 20 66 31 20 61 73 20 27 66 31 27 20 46 52  CT f1 as 'f1' FR
2da0: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2db0: 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  Y f2}} msg].  la
2dc0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
2dd0: 30 20 7b 66 31 20 31 31 20 66 31 20 33 33 7d 7d  0 {f1 11 f1 33}}
2de0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
2df0: 2d 36 2e 31 2e 33 20 7b 0a 20 20 73 65 74 20 76  -6.1.3 {.  set v
2e00: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
2e10: 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  2 {SELECT * FROM
2e20: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
2e30: 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  =11}} msg].  lap
2e40: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
2e50: 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d 7d 0a   {f1 11 f2 22}}.
2e60: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
2e70: 36 2e 31 2e 34 20 7b 0a 20 20 73 65 74 20 76 20  6.1.4 {.  set v 
2e80: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32  [catch {execsql2
2e90: 20 7b 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43   {SELECT DISTINC
2ea0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2eb0: 48 45 52 45 20 66 31 3d 3d 31 31 7d 7d 20 6d 73  HERE f1==11}} ms
2ec0: 67 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52  g].  db eval {PR
2ed0: 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e  AGMA full_column
2ee0: 5f 6e 61 6d 65 73 3d 6f 66 66 7d 0a 20 20 6c 61  _names=off}.  la
2ef0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
2f00: 30 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d 7d  0 {f1 11 f2 22}}
2f10: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
2f20: 2d 36 2e 31 2e 35 20 7b 0a 20 20 73 65 74 20 76  -6.1.5 {.  set v
2f30: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
2f40: 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  2 {SELECT * FROM
2f50: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
2f60: 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  =11}} msg].  lap
2f70: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
2f80: 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d 7d 0a   {f1 11 f2 22}}.
2f90: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
2fa0: 36 2e 31 2e 36 20 7b 0a 20 20 73 65 74 20 76 20  6.1.6 {.  set v 
2fb0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32  [catch {execsql2
2fc0: 20 7b 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43   {SELECT DISTINC
2fd0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2fe0: 48 45 52 45 20 66 31 3d 3d 31 31 7d 7d 20 6d 73  HERE f1==11}} ms
2ff0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
3000: 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31 20  msg.} {0 {f1 11 
3010: 66 32 20 32 32 7d 7d 0a 64 6f 5f 74 65 73 74 20  f2 22}}.do_test 
3020: 73 65 6c 65 63 74 31 2d 36 2e 32 20 7b 0a 20 20  select1-6.2 {.  
3030: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
3040: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 66  ecsql2 {SELECT f
3050: 31 20 61 73 20 78 79 7a 7a 79 20 46 52 4f 4d 20  1 as xyzzy FROM 
3060: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
3070: 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  2}} msg].  lappe
3080: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
3090: 78 79 7a 7a 79 20 31 31 20 78 79 7a 7a 79 20 33  xyzzy 11 xyzzy 3
30a0: 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  3}}.do_test sele
30b0: 63 74 31 2d 36 2e 33 20 7b 0a 20 20 73 65 74 20  ct1-6.3 {.  set 
30c0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
30d0: 6c 32 20 7b 53 45 4c 45 43 54 20 66 31 20 61 73  l2 {SELECT f1 as
30e0: 20 22 78 79 7a 7a 79 22 20 46 52 4f 4d 20 74 65   "xyzzy" FROM te
30f0: 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 32 7d  st1 ORDER BY f2}
3100: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
3110: 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 78 79   v $msg.} {0 {xy
3120: 7a 7a 79 20 31 31 20 78 79 7a 7a 79 20 33 33 7d  zzy 11 xyzzy 33}
3130: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
3140: 31 2d 36 2e 33 2e 31 20 7b 0a 20 20 73 65 74 20  1-6.3.1 {.  set 
3150: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
3160: 6c 32 20 7b 53 45 4c 45 43 54 20 66 31 20 61 73  l2 {SELECT f1 as
3170: 20 27 78 79 7a 7a 79 20 27 20 46 52 4f 4d 20 74   'xyzzy ' FROM t
3180: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 32  est1 ORDER BY f2
3190: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
31a0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7b  d v $msg.} {0 {{
31b0: 78 79 7a 7a 79 20 7d 20 31 31 20 7b 78 79 7a 7a  xyzzy } 11 {xyzz
31c0: 79 20 7d 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74  y } 33}}.do_test
31d0: 20 73 65 6c 65 63 74 31 2d 36 2e 34 20 7b 0a 20   select1-6.4 {. 
31e0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
31f0: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
3200: 66 31 2b 46 32 20 61 73 20 78 79 7a 7a 79 20 46  f1+F2 as xyzzy F
3210: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
3220: 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c  BY f2}} msg].  l
3230: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
3240: 7b 30 20 7b 78 79 7a 7a 79 20 33 33 20 78 79 7a  {0 {xyzzy 33 xyz
3250: 7a 79 20 37 37 7d 7d 0a 64 6f 5f 74 65 73 74 20  zy 77}}.do_test 
3260: 73 65 6c 65 63 74 31 2d 36 2e 34 61 20 7b 0a 20  select1-6.4a {. 
3270: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
3280: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
3290: 66 31 2b 46 32 20 46 52 4f 4d 20 74 65 73 74 31  f1+F2 FROM test1
32a0: 20 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d   ORDER BY f2}} m
32b0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
32c0: 24 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 2b 46 32  $msg.} {0 {f1+F2
32d0: 20 33 33 20 66 31 2b 46 32 20 37 37 7d 7d 0a 64   33 f1+F2 77}}.d
32e0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
32f0: 2e 35 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .5 {.  set v [ca
3300: 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20 7b 53  tch {execsql2 {S
3310: 45 4c 45 43 54 20 74 65 73 74 31 2e 66 31 2b 46  ELECT test1.f1+F
3320: 32 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  2 FROM test1 ORD
3330: 45 52 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a  ER BY f2}} msg].
3340: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
3350: 0a 7d 20 7b 30 20 7b 74 65 73 74 31 2e 66 31 2b  .} {0 {test1.f1+
3360: 46 32 20 33 33 20 74 65 73 74 31 2e 66 31 2b 46  F2 33 test1.f1+F
3370: 32 20 37 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  2 77}}.do_test s
3380: 65 6c 65 63 74 31 2d 36 2e 35 2e 31 20 7b 0a 20  elect1-6.5.1 {. 
3390: 20 65 78 65 63 73 71 6c 32 20 7b 50 52 41 47 4d   execsql2 {PRAGM
33a0: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
33b0: 6d 65 73 3d 6f 6e 7d 0a 20 20 73 65 74 20 76 20  mes=on}.  set v 
33c0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32  [catch {execsql2
33d0: 20 7b 53 45 4c 45 43 54 20 74 65 73 74 31 2e 66   {SELECT test1.f
33e0: 31 2b 46 32 20 46 52 4f 4d 20 74 65 73 74 31 20  1+F2 FROM test1 
33f0: 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73  ORDER BY f2}} ms
3400: 67 5d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 50  g].  execsql2 {P
3410: 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d  RAGMA full_colum
3420: 6e 5f 6e 61 6d 65 73 3d 6f 66 66 7d 0a 20 20 6c  n_names=off}.  l
3430: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
3440: 7b 30 20 7b 74 65 73 74 31 2e 66 31 2b 46 32 20  {0 {test1.f1+F2 
3450: 33 33 20 74 65 73 74 31 2e 66 31 2b 46 32 20 37  33 test1.f1+F2 7
3460: 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  7}}.do_test sele
3470: 63 74 31 2d 36 2e 36 20 7b 0a 20 20 73 65 74 20  ct1-6.6 {.  set 
3480: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
3490: 6c 32 20 7b 53 45 4c 45 43 54 20 74 65 73 74 31  l2 {SELECT test1
34a0: 2e 66 31 2b 46 32 2c 20 74 31 20 46 52 4f 4d 20  .f1+F2, t1 FROM 
34b0: 74 65 73 74 31 2c 20 74 65 73 74 32 20 0a 20 20  test1, test2 .  
34c0: 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20         ORDER BY 
34d0: 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  f2}} msg].  lapp
34e0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
34f0: 7b 74 65 73 74 31 2e 66 31 2b 46 32 20 33 33 20  {test1.f1+F2 33 
3500: 74 31 20 61 62 63 20 74 65 73 74 31 2e 66 31 2b  t1 abc test1.f1+
3510: 46 32 20 37 37 20 74 31 20 61 62 63 7d 7d 0a 64  F2 77 t1 abc}}.d
3520: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
3530: 2e 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .7 {.  set v [ca
3540: 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20 7b 53  tch {execsql2 {S
3550: 45 4c 45 43 54 20 41 2e 66 31 2c 20 74 31 20 46  ELECT A.f1, t1 F
3560: 52 4f 4d 20 74 65 73 74 31 20 61 73 20 41 2c 20  ROM test1 as A, 
3570: 74 65 73 74 32 20 0a 20 20 20 20 20 20 20 20 20  test2 .         
3580: 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73  ORDER BY f2}} ms
3590: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
35a0: 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31 20  msg.} {0 {f1 11 
35b0: 74 31 20 61 62 63 20 66 31 20 33 33 20 74 31 20  t1 abc f1 33 t1 
35c0: 61 62 63 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65  abc}}.do_test se
35d0: 6c 65 63 74 31 2d 36 2e 38 20 7b 0a 20 20 73 65  lect1-6.8 {.  se
35e0: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
35f0: 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 41 2e 66  sql2 {SELECT A.f
3600: 31 2c 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31  1, f1 FROM test1
3610: 20 61 73 20 41 2c 20 74 65 73 74 31 20 61 73 20   as A, test1 as 
3620: 42 20 0a 20 20 20 20 20 20 20 20 20 4f 52 44 45  B .         ORDE
3630: 52 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20  R BY f2}} msg]. 
3640: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
3650: 7d 20 7b 31 20 7b 61 6d 62 69 67 75 6f 75 73 20  } {1 {ambiguous 
3660: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 66 31 7d  column name: f1}
3670: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
3680: 31 2d 36 2e 38 62 20 7b 0a 20 20 73 65 74 20 76  1-6.8b {.  set v
3690: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
36a0: 32 20 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c 20  2 {SELECT A.f1, 
36b0: 42 2e 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  B.f1 FROM test1 
36c0: 61 73 20 41 2c 20 74 65 73 74 31 20 61 73 20 42  as A, test1 as B
36d0: 20 0a 20 20 20 20 20 20 20 20 20 4f 52 44 45 52   .         ORDER
36e0: 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20   BY f2}} msg].  
36f0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
3700: 20 7b 31 20 7b 61 6d 62 69 67 75 6f 75 73 20 63   {1 {ambiguous c
3710: 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 66 32 7d 7d  olumn name: f2}}
3720: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
3730: 2d 36 2e 38 63 20 7b 0a 20 20 73 65 74 20 76 20  -6.8c {.  set v 
3740: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32  [catch {execsql2
3750: 20 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c 20 66   {SELECT A.f1, f
3760: 31 20 46 52 4f 4d 20 74 65 73 74 31 20 61 73 20  1 FROM test1 as 
3770: 41 2c 20 74 65 73 74 31 20 61 73 20 41 20 0a 20  A, test1 as A . 
3780: 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59          ORDER BY
3790: 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70   f2}} msg].  lap
37a0: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
37b0: 20 7b 61 6d 62 69 67 75 6f 75 73 20 63 6f 6c 75   {ambiguous colu
37c0: 6d 6e 20 6e 61 6d 65 3a 20 41 2e 66 31 7d 7d 0a  mn name: A.f1}}.
37d0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
37e0: 36 2e 39 2e 31 20 7b 0a 20 20 73 65 74 20 76 20  6.9.1 {.  set v 
37f0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
3800: 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c 20 42 2e  {SELECT A.f1, B.
3810: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 61 73  f1 FROM test1 as
3820: 20 41 2c 20 74 65 73 74 31 20 61 73 20 42 20 0a   A, test1 as B .
3830: 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42           ORDER B
3840: 59 20 41 2e 66 31 2c 20 42 2e 66 31 7d 7d 20 6d  Y A.f1, B.f1}} m
3850: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
3860: 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 31 20 31 31  $msg.} {0 {11 11
3870: 20 31 31 20 33 33 20 33 33 20 31 31 20 33 33 20   11 33 33 11 33 
3880: 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  33}}.do_test sel
3890: 65 63 74 31 2d 36 2e 39 2e 32 20 7b 0a 20 20 73  ect1-6.9.2 {.  s
38a0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
38b0: 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 41 2e  csql2 {SELECT A.
38c0: 66 31 2c 20 42 2e 66 31 20 46 52 4f 4d 20 74 65  f1, B.f1 FROM te
38d0: 73 74 31 20 61 73 20 41 2c 20 74 65 73 74 31 20  st1 as A, test1 
38e0: 61 73 20 42 20 0a 20 20 20 20 20 20 20 20 20 4f  as B .         O
38f0: 52 44 45 52 20 42 59 20 41 2e 66 31 2c 20 42 2e  RDER BY A.f1, B.
3900: 66 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  f1}} msg].  lapp
3910: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
3920: 7b 66 31 20 31 31 20 66 31 20 31 31 20 66 31 20  {f1 11 f1 11 f1 
3930: 33 33 20 66 31 20 33 33 20 66 31 20 31 31 20 66  33 f1 33 f1 11 f
3940: 31 20 31 31 20 66 31 20 33 33 20 66 31 20 33 33  1 11 f1 33 f1 33
3950: 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  }}..do_test sele
3960: 63 74 31 2d 36 2e 39 2e 33 20 7b 0a 20 20 64 62  ct1-6.9.3 {.  db
3970: 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 50 52 41   eval {.     PRA
3980: 47 4d 41 20 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e  GMA short_column
3990: 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20 20 20  _names=OFF;.    
39a0: 20 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c   PRAGMA full_col
39b0: 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20  umn_names=OFF;. 
39c0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   }.  execsql2 {.
39d0: 20 20 20 20 20 53 45 4c 45 43 54 20 74 65 73 74       SELECT test
39e0: 31 20 2e 20 66 31 2c 20 74 65 73 74 31 20 2e 20  1 . f1, test1 . 
39f0: 66 32 20 46 52 4f 4d 20 74 65 73 74 31 20 4c 49  f2 FROM test1 LI
3a00: 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 7b 74 65  MIT 1.  }.} {{te
3a10: 73 74 31 20 2e 20 66 31 7d 20 31 31 20 7b 74 65  st1 . f1} 11 {te
3a20: 73 74 31 20 2e 20 66 32 7d 20 32 32 7d 0a 64 6f  st1 . f2} 22}.do
3a30: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e  _test select1-6.
3a40: 39 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  9.4 {.  db eval 
3a50: 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 73 68  {.     PRAGMA sh
3a60: 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ort_column_names
3a70: 3d 4f 46 46 3b 0a 20 20 20 20 20 50 52 41 47 4d  =OFF;.     PRAGM
3a80: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
3a90: 6d 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20 65 78  mes=ON;.  }.  ex
3aa0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53 45  ecsql2 {.     SE
3ab0: 4c 45 43 54 20 74 65 73 74 31 20 2e 20 66 31 2c  LECT test1 . f1,
3ac0: 20 74 65 73 74 31 20 2e 20 66 32 20 46 52 4f 4d   test1 . f2 FROM
3ad0: 20 74 65 73 74 31 20 4c 49 4d 49 54 20 31 0a 20   test1 LIMIT 1. 
3ae0: 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20 31   }.} {test1.f1 1
3af0: 31 20 74 65 73 74 31 2e 66 32 20 32 32 7d 0a 64  1 test1.f2 22}.d
3b00: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
3b10: 2e 39 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  .9.5 {.  db eval
3b20: 20 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 73   {.     PRAGMA s
3b30: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
3b40: 73 3d 4f 46 46 3b 0a 20 20 20 20 20 50 52 41 47  s=OFF;.     PRAG
3b50: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
3b60: 61 6d 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20 65  ames=ON;.  }.  e
3b70: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3b80: 45 4c 45 43 54 20 31 32 33 2e 34 35 3b 0a 20 20  ELECT 123.45;.  
3b90: 7d 0a 7d 20 7b 31 32 33 2e 34 35 20 31 32 33 2e  }.} {123.45 123.
3ba0: 34 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  45}.do_test sele
3bb0: 63 74 31 2d 36 2e 39 2e 36 20 7b 0a 20 20 65 78  ct1-6.9.6 {.  ex
3bc0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53 45  ecsql2 {.     SE
3bd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
3be0: 31 20 61 2c 20 74 65 73 74 31 20 62 20 4c 49 4d  1 a, test1 b LIM
3bf0: 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 61 2e 66 31  IT 1.  }.} {a.f1
3c00: 20 31 31 20 61 2e 66 32 20 32 32 20 62 2e 66 31   11 a.f2 22 b.f1
3c10: 20 31 31 20 62 2e 66 32 20 32 32 7d 0a 64 6f 5f   11 b.f2 22}.do_
3c20: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 39  test select1-6.9
3c30: 2e 37 20 7b 0a 20 20 73 65 74 20 78 20 5b 65 78  .7 {.  set x [ex
3c40: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53 45  ecsql2 {.     SE
3c50: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
3c60: 31 20 61 2c 20 28 73 65 6c 65 63 74 20 35 2c 20  1 a, (select 5, 
3c70: 36 29 20 4c 49 4d 49 54 20 31 0a 20 20 7d 5d 0a  6) LIMIT 1.  }].
3c80: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 73    regsub -all {s
3c90: 71 5f 5b 30 2d 39 61 2d 66 41 2d 46 5f 5d 2b 7d  q_[0-9a-fA-F_]+}
3ca0: 20 24 78 20 7b 73 75 62 71 75 65 72 79 7d 20 78   $x {subquery} x
3cb0: 0a 20 20 73 65 74 20 78 0a 7d 20 7b 61 2e 66 31  .  set x.} {a.f1
3cc0: 20 31 31 20 61 2e 66 32 20 32 32 20 73 71 6c 69   11 a.f2 22 sqli
3cd0: 74 65 5f 73 75 62 71 75 65 72 79 2e 35 20 35 20  te_subquery.5 5 
3ce0: 73 71 6c 69 74 65 5f 73 75 62 71 75 65 72 79 2e  sqlite_subquery.
3cf0: 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  6 6}.do_test sel
3d00: 65 63 74 31 2d 36 2e 39 2e 38 20 7b 0a 20 20 73  ect1-6.9.8 {.  s
3d10: 65 74 20 78 20 5b 65 78 65 63 73 71 6c 32 20 7b  et x [execsql2 {
3d20: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  .     SELECT * F
3d30: 52 4f 4d 20 74 65 73 74 31 20 61 2c 20 28 73 65  ROM test1 a, (se
3d40: 6c 65 63 74 20 35 20 41 53 20 78 2c 20 36 20 41  lect 5 AS x, 6 A
3d50: 53 20 79 29 20 41 53 20 62 20 4c 49 4d 49 54 20  S y) AS b LIMIT 
3d60: 31 0a 20 20 7d 5d 0a 20 20 72 65 67 73 75 62 20  1.  }].  regsub 
3d70: 2d 61 6c 6c 20 7b 73 75 62 71 75 65 72 79 5f 5b  -all {subquery_[
3d80: 30 2d 39 61 2d 66 41 2d 46 5d 2b 5f 7d 20 24 78  0-9a-fA-F]+_} $x
3d90: 20 7b 73 75 62 71 75 65 72 79 7d 20 78 0a 20 20   {subquery} x.  
3da0: 73 65 74 20 78 0a 7d 20 7b 61 2e 66 31 20 31 31  set x.} {a.f1 11
3db0: 20 61 2e 66 32 20 32 32 20 62 2e 78 20 35 20 62   a.f2 22 b.x 5 b
3dc0: 2e 79 20 36 7d 0a 64 6f 5f 74 65 73 74 20 73 65  .y 6}.do_test se
3dd0: 6c 65 63 74 31 2d 36 2e 39 2e 39 20 7b 0a 20 20  lect1-6.9.9 {.  
3de0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20  execsql2 {.     
3df0: 53 45 4c 45 43 54 20 61 2e 66 31 2c 20 62 2e 66  SELECT a.f1, b.f
3e00: 32 20 46 52 4f 4d 20 74 65 73 74 31 20 61 2c 20  2 FROM test1 a, 
3e10: 74 65 73 74 31 20 62 20 4c 49 4d 49 54 20 31 0a  test1 b LIMIT 1.
3e20: 20 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20    }.} {test1.f1 
3e30: 31 31 20 74 65 73 74 31 2e 66 32 20 32 32 7d 0a  11 test1.f2 22}.
3e40: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
3e50: 36 2e 39 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  6.9.10 {.  execs
3e60: 71 6c 32 20 7b 0a 20 20 20 20 20 53 45 4c 45 43  ql2 {.     SELEC
3e70: 54 20 66 31 2c 20 74 31 20 46 52 4f 4d 20 74 65  T f1, t1 FROM te
3e80: 73 74 31 2c 20 74 65 73 74 32 20 4c 49 4d 49 54  st1, test2 LIMIT
3e90: 20 31 0a 20 20 7d 0a 7d 20 7b 74 65 73 74 31 2e   1.  }.} {test1.
3ea0: 66 31 20 31 31 20 74 65 73 74 32 2e 74 31 20 61  f1 11 test2.t1 a
3eb0: 62 63 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  bc}.do_test sele
3ec0: 63 74 31 2d 36 2e 39 2e 31 31 20 7b 0a 20 20 64  ct1-6.9.11 {.  d
3ed0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 50 52  b eval {.     PR
3ee0: 41 47 4d 41 20 73 68 6f 72 74 5f 63 6f 6c 75 6d  AGMA short_colum
3ef0: 6e 5f 6e 61 6d 65 73 3d 4f 4e 3b 0a 20 20 20 20  n_names=ON;.    
3f00: 20 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c   PRAGMA full_col
3f10: 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 3b 0a 20 20  umn_names=ON;.  
3f20: 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  }.  execsql2 {. 
3f30: 20 20 20 20 53 45 4c 45 43 54 20 61 2e 66 31 2c      SELECT a.f1,
3f40: 20 62 2e 66 32 20 46 52 4f 4d 20 74 65 73 74 31   b.f2 FROM test1
3f50: 20 61 2c 20 74 65 73 74 31 20 62 20 4c 49 4d 49   a, test1 b LIMI
3f60: 54 20 31 0a 20 20 7d 0a 7d 20 7b 74 65 73 74 31  T 1.  }.} {test1
3f70: 2e 66 31 20 31 31 20 74 65 73 74 31 2e 66 32 20  .f1 11 test1.f2 
3f80: 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  22}.do_test sele
3f90: 63 74 31 2d 36 2e 39 2e 31 32 20 7b 0a 20 20 65  ct1-6.9.12 {.  e
3fa0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3fb0: 45 4c 45 43 54 20 66 31 2c 20 74 31 20 46 52 4f  ELECT f1, t1 FRO
3fc0: 4d 20 74 65 73 74 31 2c 20 74 65 73 74 32 20 4c  M test1, test2 L
3fd0: 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 74 65  IMIT 1.  }.} {te
3fe0: 73 74 31 2e 66 31 20 31 31 20 74 65 73 74 32 2e  st1.f1 11 test2.
3ff0: 74 31 20 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20  t1 abc}.do_test 
4000: 73 65 6c 65 63 74 31 2d 36 2e 39 2e 31 33 20 7b  select1-6.9.13 {
4010: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
4020: 20 20 50 52 41 47 4d 41 20 73 68 6f 72 74 5f 63    PRAGMA short_c
4030: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 3b 0a  olumn_names=ON;.
4040: 20 20 20 20 20 50 52 41 47 4d 41 20 66 75 6c 6c       PRAGMA full
4050: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46  _column_names=OF
4060: 46 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  F;.  }.  execsql
4070: 32 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  2 {.     SELECT 
4080: 61 2e 66 31 2c 20 62 2e 66 31 20 46 52 4f 4d 20  a.f1, b.f1 FROM 
4090: 74 65 73 74 31 20 61 2c 20 74 65 73 74 31 20 62  test1 a, test1 b
40a0: 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b   LIMIT 1.  }.} {
40b0: 66 31 20 31 31 20 66 31 20 31 31 7d 0a 64 6f 5f  f1 11 f1 11}.do_
40c0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 39  test select1-6.9
40d0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  .14 {.  execsql2
40e0: 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 66   {.     SELECT f
40f0: 31 2c 20 74 31 20 46 52 4f 4d 20 74 65 73 74 31  1, t1 FROM test1
4100: 2c 20 74 65 73 74 32 20 4c 49 4d 49 54 20 31 0a  , test2 LIMIT 1.
4110: 20 20 7d 0a 7d 20 7b 66 31 20 31 31 20 74 31 20    }.} {f1 11 t1 
4120: 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  abc}.do_test sel
4130: 65 63 74 31 2d 36 2e 39 2e 31 35 20 7b 0a 20 20  ect1-6.9.15 {.  
4140: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 50  db eval {.     P
4150: 52 41 47 4d 41 20 73 68 6f 72 74 5f 63 6f 6c 75  RAGMA short_colu
4160: 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20  mn_names=OFF;.  
4170: 20 20 20 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63     PRAGMA full_c
4180: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 3b 0a  olumn_names=ON;.
4190: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b    }.  execsql2 {
41a0: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 61 2e 66  .     SELECT a.f
41b0: 31 2c 20 62 2e 66 31 20 46 52 4f 4d 20 74 65 73  1, b.f1 FROM tes
41c0: 74 31 20 61 2c 20 74 65 73 74 31 20 62 20 4c 49  t1 a, test1 b LI
41d0: 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 74 65 73  MIT 1.  }.} {tes
41e0: 74 31 2e 66 31 20 31 31 20 74 65 73 74 31 2e 66  t1.f1 11 test1.f
41f0: 31 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 11}.do_test se
4200: 6c 65 63 74 31 2d 36 2e 39 2e 31 36 20 7b 0a 20  lect1-6.9.16 {. 
4210: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
4220: 20 53 45 4c 45 43 54 20 66 31 2c 20 74 31 20 46   SELECT f1, t1 F
4230: 52 4f 4d 20 74 65 73 74 31 2c 20 74 65 73 74 32  ROM test1, test2
4240: 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b   LIMIT 1.  }.} {
4250: 74 65 73 74 31 2e 66 31 20 31 31 20 74 65 73 74  test1.f1 11 test
4260: 32 2e 74 31 20 61 62 63 7d 0a 0a 0a 64 62 20 65  2.t1 abc}...db e
4270: 76 61 6c 20 7b 0a 20 20 50 52 41 47 4d 41 20 73  val {.  PRAGMA s
4280: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
4290: 73 3d 4f 4e 3b 0a 20 20 50 52 41 47 4d 41 20 66  s=ON;.  PRAGMA f
42a0: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
42b0: 3d 4f 46 46 3b 0a 7d 0a 0a 69 66 63 61 70 61 62  =OFF;.}..ifcapab
42c0: 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64 6f  le compound {.do
42d0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e  _test select1-6.
42e0: 31 30 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  10 {.  set v [ca
42f0: 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20 7b 0a  tch {execsql2 {.
4300: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
4310: 4f 4d 20 74 65 73 74 31 20 55 4e 49 4f 4e 20 53  OM test1 UNION S
4320: 45 4c 45 43 54 20 66 32 20 46 52 4f 4d 20 74 65  ELECT f2 FROM te
4330: 73 74 31 0a 20 20 20 20 4f 52 44 45 52 20 42 59  st1.    ORDER BY
4340: 20 66 32 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20   f2;.  }} msg]. 
4350: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
4360: 7d 20 7b 30 20 7b 66 31 20 31 31 20 66 31 20 32  } {0 {f1 11 f1 2
4370: 32 20 66 31 20 33 33 20 66 31 20 34 34 7d 7d 0a  2 f1 33 f1 44}}.
4380: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
4390: 36 2e 31 31 20 7b 0a 20 20 73 65 74 20 76 20 5b  6.11 {.  set v [
43a0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20  catch {execsql2 
43b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66 31 20  {.    SELECT f1 
43c0: 46 52 4f 4d 20 74 65 73 74 31 20 55 4e 49 4f 4e  FROM test1 UNION
43d0: 20 53 45 4c 45 43 54 20 66 32 2b 31 30 30 20 46   SELECT f2+100 F
43e0: 52 4f 4d 20 74 65 73 74 31 0a 20 20 20 20 4f 52  ROM test1.    OR
43f0: 44 45 52 20 42 59 20 66 32 2b 31 30 31 3b 0a 20  DER BY f2+101;. 
4400: 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65   }} msg].  lappe
4410: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
4420: 31 73 74 20 4f 52 44 45 52 20 42 59 20 74 65 72  1st ORDER BY ter
4430: 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  m does not match
4440: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   any column in t
4450: 68 65 20 72 65 73 75 6c 74 20 73 65 74 7d 7d 0a  he result set}}.
4460: 0a 23 20 54 69 63 6b 65 74 20 23 32 32 39 36 0a  .# Ticket #2296.
4470: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
4480: 72 79 26 26 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64  ry&&compound {.d
4490: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
44a0: 2e 32 30 20 7b 0a 20 20 20 65 78 65 63 73 71 6c  .20 {.   execsql
44b0: 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45 20 54   {.     CREATE T
44c0: 41 42 4c 45 20 74 36 28 61 20 54 45 58 54 2c 20  ABLE t6(a TEXT, 
44d0: 62 20 54 45 58 54 29 3b 0a 20 20 20 20 20 49 4e  b TEXT);.     IN
44e0: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
44f0: 55 45 53 28 27 61 27 2c 27 30 27 29 3b 0a 20 20  UES('a','0');.  
4500: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4510: 36 20 56 41 4c 55 45 53 28 27 62 27 2c 27 31 27  6 VALUES('b','1'
4520: 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49  );.     INSERT I
4530: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 63  NTO t6 VALUES('c
4540: 27 2c 27 32 27 29 3b 0a 20 20 20 20 20 49 4e 53  ','2');.     INS
4550: 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ERT INTO t6 VALU
4560: 45 53 28 27 64 27 2c 27 33 27 29 3b 0a 20 20 20  ES('d','3');.   
4570: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
4580: 74 36 20 57 48 45 52 45 20 62 20 49 4e 20 0a 20  t6 WHERE b IN . 
4590: 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 62         (SELECT b
45a0: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 61   FROM t6 WHERE a
45b0: 3c 3d 27 62 27 20 55 4e 49 4f 4e 20 53 45 4c 45  <='b' UNION SELE
45c0: 43 54 20 27 33 27 20 41 53 20 78 0a 20 20 20 20  CT '3' AS x.    
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 44               ORD
45e0: 45 52 20 42 59 20 31 20 4c 49 4d 49 54 20 31 29  ER BY 1 LIMIT 1)
45f0: 0a 20 20 20 7d 0a 7d 20 7b 61 7d 0a 64 6f 5f 74  .   }.} {a}.do_t
4600: 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 32 31  est select1-6.21
4610: 20 7b 0a 20 20 20 65 78 65 63 73 71 6c 20 7b 0a   {.   execsql {.
4620: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52       SELECT a FR
4630: 4f 4d 20 74 36 20 57 48 45 52 45 20 62 20 49 4e  OM t6 WHERE b IN
4640: 20 0a 20 20 20 20 20 20 20 20 28 53 45 4c 45 43   .        (SELEC
4650: 54 20 62 20 46 52 4f 4d 20 74 36 20 57 48 45 52  T b FROM t6 WHER
4660: 45 20 61 3c 3d 27 62 27 20 55 4e 49 4f 4e 20 53  E a<='b' UNION S
4670: 45 4c 45 43 54 20 27 33 27 20 41 53 20 78 0a 20  ELECT '3' AS x. 
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 4f 52 44 45 52 20 42 59 20 31 20 44 45 53 43 20  ORDER BY 1 DESC 
46a0: 4c 49 4d 49 54 20 31 29 0a 20 20 20 7d 0a 7d 20  LIMIT 1).   }.} 
46b0: 7b 64 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  {d}.do_test sele
46c0: 63 74 31 2d 36 2e 32 32 20 7b 0a 20 20 20 65 78  ct1-6.22 {.   ex
46d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c  ecsql {.     SEL
46e0: 45 43 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48  ECT a FROM t6 WH
46f0: 45 52 45 20 62 20 49 4e 20 0a 20 20 20 20 20 20  ERE b IN .      
4700: 20 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d    (SELECT b FROM
4710: 20 74 36 20 57 48 45 52 45 20 61 3c 3d 27 62 27   t6 WHERE a<='b'
4720: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 27 33   UNION SELECT '3
4730: 27 20 41 53 20 78 0a 20 20 20 20 20 20 20 20 20  ' AS x.         
4740: 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59          ORDER BY
4750: 20 62 20 4c 49 4d 49 54 20 32 29 0a 20 20 20 20   b LIMIT 2).    
4760: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 20   ORDER BY a;.   
4770: 7d 0a 7d 20 7b 61 20 62 7d 0a 64 6f 5f 74 65 73  }.} {a b}.do_tes
4780: 74 20 73 65 6c 65 63 74 31 2d 36 2e 32 33 20 7b  t select1-6.23 {
4790: 0a 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  .   execsql {.  
47a0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
47b0: 20 74 36 20 57 48 45 52 45 20 62 20 49 4e 20 0a   t6 WHERE b IN .
47c0: 20 20 20 20 20 20 20 20 28 53 45 4c 45 43 54 20          (SELECT 
47d0: 62 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20  b FROM t6 WHERE 
47e0: 61 3c 3d 27 62 27 20 55 4e 49 4f 4e 20 53 45 4c  a<='b' UNION SEL
47f0: 45 43 54 20 27 33 27 20 41 53 20 78 0a 20 20 20  ECT '3' AS x.   
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
4810: 44 45 52 20 42 59 20 78 20 44 45 53 43 20 4c 49  DER BY x DESC LI
4820: 4d 49 54 20 32 29 0a 20 20 20 20 20 4f 52 44 45  MIT 2).     ORDE
4830: 52 20 42 59 20 61 3b 0a 20 20 20 7d 0a 7d 20 7b  R BY a;.   }.} {
4840: 62 20 64 7d 0a 7d 0a 0a 7d 20 3b 23 69 66 63 61  b d}.}..} ;#ifca
4850: 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a 0a  pable compound..
4860: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
4870: 37 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  7.1 {.  set v [c
4880: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a  atch {execsql {.
4890: 20 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46       SELECT f1 F
48a0: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
48b0: 66 32 3d 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  f2=;.  }} msg]. 
48c0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
48d0: 7d 20 7b 31 20 7b 6e 65 61 72 20 22 3b 22 3a 20  } {1 {near ";": 
48e0: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 69  syntax error}}.i
48f0: 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e  fcapable compoun
4900: 64 20 7b 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  d {.do_test sele
4910: 63 74 31 2d 37 2e 32 20 7b 0a 20 20 73 65 74 20  ct1-7.2 {.  set 
4920: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
4930: 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  l {.     SELECT 
4940: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 55 4e  f1 FROM test1 UN
4950: 49 4f 4e 20 53 45 4c 45 43 54 20 57 48 45 52 45  ION SELECT WHERE
4960: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
4970: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
4980: 31 20 7b 6e 65 61 72 20 22 57 48 45 52 45 22 3a  1 {near "WHERE":
4990: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a   syntax error}}.
49a0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 63  } ;# ifcapable c
49b0: 6f 6d 70 6f 75 6e 64 0a 64 6f 5f 74 65 73 74 20  ompound.do_test 
49c0: 73 65 6c 65 63 74 31 2d 37 2e 33 20 7b 0a 20 20  select1-7.3 {.  
49d0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
49e0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31  ecsql {SELECT f1
49f0: 20 46 52 4f 4d 20 74 65 73 74 31 20 61 73 20 27   FROM test1 as '
4a00: 68 69 27 2c 20 74 65 73 74 32 20 61 73 7d 7d 20  hi', test2 as}} 
4a10: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
4a20: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61 72   $msg.} {1 {near
4a30: 20 22 61 73 22 3a 20 73 79 6e 74 61 78 20 65 72   "as": syntax er
4a40: 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65  ror}}.do_test se
4a50: 6c 65 63 74 31 2d 37 2e 34 20 7b 0a 20 20 73 65  lect1-7.4 {.  se
4a60: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
4a70: 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43  sql {.     SELEC
4a80: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
4a90: 4f 52 44 45 52 20 42 59 3b 0a 20 20 7d 7d 20 6d  ORDER BY;.  }} m
4aa0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
4ab0: 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61 72 20  $msg.} {1 {near 
4ac0: 22 3b 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ";": syntax erro
4ad0: 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  r}}.do_test sele
4ae0: 63 74 31 2d 37 2e 35 20 7b 0a 20 20 73 65 74 20  ct1-7.5 {.  set 
4af0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
4b00: 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  l {.     SELECT 
4b10: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52  f1 FROM test1 OR
4b20: 44 45 52 20 42 59 20 66 31 20 64 65 73 63 2c 20  DER BY f1 desc, 
4b30: 66 32 20 77 68 65 72 65 3b 0a 20 20 7d 7d 20 6d  f2 where;.  }} m
4b40: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
4b50: 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61 72 20  $msg.} {1 {near 
4b60: 22 77 68 65 72 65 22 3a 20 73 79 6e 74 61 78 20  "where": syntax 
4b70: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
4b80: 73 65 6c 65 63 74 31 2d 37 2e 36 20 7b 0a 20 20  select1-7.6 {.  
4b90: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
4ba0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c  ecsql {.     SEL
4bb0: 45 43 54 20 63 6f 75 6e 74 28 66 31 2c 66 32 20  ECT count(f1,f2 
4bc0: 46 52 4f 4d 20 74 65 73 74 31 3b 0a 20 20 7d 7d  FROM test1;.  }}
4bd0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
4be0: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61  v $msg.} {1 {nea
4bf0: 72 20 22 46 52 4f 4d 22 3a 20 73 79 6e 74 61 78  r "FROM": syntax
4c00: 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74   error}}.do_test
4c10: 20 73 65 6c 65 63 74 31 2d 37 2e 37 20 7b 0a 20   select1-7.7 {. 
4c20: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
4c30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45  xecsql {.     SE
4c40: 4c 45 43 54 20 63 6f 75 6e 74 28 66 31 2c 66 32  LECT count(f1,f2
4c50: 2b 29 20 46 52 4f 4d 20 74 65 73 74 31 3b 0a 20  +) FROM test1;. 
4c60: 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65   }} msg].  lappe
4c70: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
4c80: 6e 65 61 72 20 22 29 22 3a 20 73 79 6e 74 61 78  near ")": syntax
4c90: 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74   error}}.do_test
4ca0: 20 73 65 6c 65 63 74 31 2d 37 2e 38 20 7b 0a 20   select1-7.8 {. 
4cb0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
4cc0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45  xecsql {.     SE
4cd0: 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73  LECT f1 FROM tes
4ce0: 74 31 20 4f 52 44 45 52 20 42 59 20 66 32 2c 20  t1 ORDER BY f2, 
4cf0: 66 31 2b 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  f1+;.  }} msg]. 
4d00: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
4d10: 7d 20 7b 31 20 7b 6e 65 61 72 20 22 3b 22 3a 20  } {1 {near ";": 
4d20: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64  syntax error}}.d
4d30: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 37  o_test select1-7
4d40: 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .9 {.  catchsql 
4d50: 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 66 31  {.     SELECT f1
4d60: 20 46 52 4f 4d 20 74 65 73 74 31 20 4c 49 4d 49   FROM test1 LIMI
4d70: 54 20 35 2b 33 20 4f 46 46 53 45 54 20 31 31 20  T 5+3 OFFSET 11 
4d80: 4f 52 44 45 52 20 42 59 20 66 32 3b 0a 20 20 7d  ORDER BY f2;.  }
4d90: 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 52 44  .} {1 {near "ORD
4da0: 45 52 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ER": syntax erro
4db0: 72 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c  r}}..do_test sel
4dc0: 65 63 74 31 2d 38 2e 31 20 7b 0a 20 20 65 78 65  ect1-8.1 {.  exe
4dd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 20  csql {SELECT f1 
4de0: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
4df0: 20 34 2e 33 2b 32 2e 34 20 4f 52 20 31 20 4f 52   4.3+2.4 OR 1 OR
4e00: 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 31  DER BY f1}.} {11
4e10: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   33}.do_test sel
4e20: 65 63 74 31 2d 38 2e 32 20 7b 0a 20 20 65 78 65  ect1-8.2 {.  exe
4e30: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4e40: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
4e50: 57 48 45 52 45 20 28 27 78 27 20 7c 7c 20 66 31  WHERE ('x' || f1
4e60: 29 20 42 45 54 57 45 45 4e 20 27 78 31 30 27 20  ) BETWEEN 'x10' 
4e70: 41 4e 44 20 27 78 32 30 27 0a 20 20 20 20 4f 52  AND 'x20'.    OR
4e80: 44 45 52 20 42 59 20 66 31 0a 20 20 7d 0a 7d 20  DER BY f1.  }.} 
4e90: 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  {11}.do_test sel
4ea0: 65 63 74 31 2d 38 2e 33 20 7b 0a 20 20 65 78 65  ect1-8.3 {.  exe
4eb0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4ec0: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
4ed0: 57 48 45 52 45 20 35 2d 33 3d 3d 32 0a 20 20 20  WHERE 5-3==2.   
4ee0: 20 4f 52 44 45 52 20 42 59 20 66 31 0a 20 20 7d   ORDER BY f1.  }
4ef0: 0a 7d 20 7b 31 31 20 33 33 7d 0a 0a 23 20 54 4f  .} {11 33}..# TO
4f00: 44 4f 3a 20 54 68 69 73 20 74 65 73 74 20 69 73  DO: This test is
4f10: 20 66 61 69 6c 69 6e 67 20 62 65 63 61 75 73 65   failing because
4f20: 20 66 31 20 69 73 20 6e 6f 77 20 62 65 69 6e 67   f1 is now being
4f30: 20 6c 6f 61 64 65 64 20 6f 66 66 20 74 68 65 0a   loaded off the.
4f40: 23 20 64 69 73 6b 20 61 73 20 61 20 76 64 62 65  # disk as a vdbe
4f50: 20 69 6e 74 65 67 65 72 2c 20 6e 6f 74 20 61 20   integer, not a 
4f60: 73 74 72 69 6e 67 2e 20 48 65 6e 63 65 20 74 68  string. Hence th
4f70: 65 20 76 61 6c 75 65 20 6f 66 20 66 31 2f 28 66  e value of f1/(f
4f80: 31 2d 31 31 29 0a 23 20 63 68 61 6e 67 65 73 20  1-11).# changes 
4f90: 62 65 63 61 75 73 65 20 6f 66 20 72 6f 75 6e 64  because of round
4fa0: 69 6e 67 2e 20 44 69 73 61 62 6c 65 20 74 68 65  ing. Disable the
4fb0: 20 74 65 73 74 20 66 6f 72 20 6e 6f 77 2e 0a 69   test for now..i
4fc0: 66 20 30 20 7b 0a 64 6f 5f 74 65 73 74 20 73 65  f 0 {.do_test se
4fd0: 6c 65 63 74 31 2d 38 2e 34 20 7b 0a 20 20 65 78  lect1-8.4 {.  ex
4fe0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
4ff0: 43 54 20 63 6f 61 6c 65 73 63 65 28 66 31 2f 28  CT coalesce(f1/(
5000: 66 31 2d 31 31 29 2c 27 78 27 29 2c 0a 20 20 20  f1-11),'x'),.   
5010: 20 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65          coalesce
5020: 28 6d 69 6e 28 66 31 2f 28 66 31 2d 31 31 29 2c  (min(f1/(f1-11),
5030: 35 29 2c 27 79 27 29 2c 0a 20 20 20 20 20 20 20  5),'y'),.       
5040: 20 20 20 20 63 6f 61 6c 65 73 63 65 28 6d 61 78      coalesce(max
5050: 28 66 31 2f 28 66 31 2d 33 33 29 2c 36 29 2c 27  (f1/(f1-33),6),'
5060: 7a 27 29 0a 20 20 20 20 46 52 4f 4d 20 74 65 73  z').    FROM tes
5070: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 0a 20  t1 ORDER BY f1. 
5080: 20 7d 0a 7d 20 7b 78 20 79 20 36 20 31 2e 35 20   }.} {x y 6 1.5 
5090: 31 2e 35 20 7a 7d 0a 7d 0a 64 6f 5f 74 65 73 74  1.5 z}.}.do_test
50a0: 20 73 65 6c 65 63 74 31 2d 38 2e 35 20 7b 0a 20   select1-8.5 {. 
50b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
50c0: 45 4c 45 43 54 20 6d 69 6e 28 31 2c 32 2c 33 29  ELECT min(1,2,3)
50d0: 2c 20 2d 6d 61 78 28 31 2c 32 2c 33 29 0a 20 20  , -max(1,2,3).  
50e0: 20 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44    FROM test1 ORD
50f0: 45 52 20 42 59 20 66 31 0a 20 20 7d 0a 7d 20 7b  ER BY f1.  }.} {
5100: 31 20 2d 33 20 31 20 2d 33 7d 0a 0a 0a 23 20 43  1 -3 1 -3}...# C
5110: 68 65 63 6b 20 74 68 65 20 62 65 68 61 76 69 6f  heck the behavio
5120: 72 20 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c  r when the resul
5130: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 0a 23  t set is empty.#
5140: 0a 23 20 53 51 4c 69 74 65 20 76 33 20 61 6c 77  .# SQLite v3 alw
5150: 61 79 73 20 73 65 74 73 20 72 28 2a 29 2e 0a 23  ays sets r(*)..#
5160: 0a 23 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .# do_test selec
5170: 74 31 2d 39 2e 31 20 7b 0a 23 20 20 20 63 61 74  t1-9.1 {.#   cat
5180: 63 68 20 7b 75 6e 73 65 74 20 72 7d 0a 23 20 20  ch {unset r}.#  
5190: 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a 23 20 20   set r(*) {}.#  
51a0: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
51b0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
51c0: 45 52 45 20 66 31 3c 30 7d 20 72 20 7b 7d 0a 23  ERE f1<0} r {}.#
51d0: 20 20 20 73 65 74 20 72 28 2a 29 0a 23 20 7d 20     set r(*).# } 
51e0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  {}.do_test selec
51f0: 74 31 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73  t1-9.2 {.  execs
5200: 71 6c 20 7b 50 52 41 47 4d 41 20 65 6d 70 74 79  ql {PRAGMA empty
5210: 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b  _result_callback
5220: 73 3d 6f 6e 7d 0a 20 20 63 61 74 63 68 20 7b 75  s=on}.  catch {u
5230: 6e 73 65 74 20 72 7d 0a 20 20 73 65 74 20 72 28  nset r}.  set r(
5240: 2a 29 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c 20  *) {}.  db eval 
5250: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
5260: 65 73 74 31 20 57 48 45 52 45 20 66 31 3c 30 7d  est1 WHERE f1<0}
5270: 20 72 20 7b 7d 0a 20 20 73 65 74 20 72 28 2a 29   r {}.  set r(*)
5280: 0a 7d 20 7b 66 31 20 66 32 7d 0a 69 66 63 61 70  .} {f1 f2}.ifcap
5290: 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a  able subquery {.
52a0: 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74    do_test select
52b0: 31 2d 39 2e 33 20 7b 0a 20 20 20 20 73 65 74 20  1-9.3 {.    set 
52c0: 72 28 2a 29 20 7b 7d 0a 20 20 20 20 64 62 20 65  r(*) {}.    db e
52d0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
52e0: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66  OM test1 WHERE f
52f0: 31 3c 28 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  1<(select count(
5300: 2a 29 20 66 72 6f 6d 20 74 65 73 74 32 29 7d 20  *) from test2)} 
5310: 72 20 7b 7d 0a 20 20 20 20 73 65 74 20 72 28 2a  r {}.    set r(*
5320: 29 0a 20 20 7d 20 7b 66 31 20 66 32 7d 0a 7d 0a  ).  } {f1 f2}.}.
5330: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
5340: 39 2e 34 20 7b 0a 20 20 73 65 74 20 72 28 2a 29  9.4 {.  set r(*)
5350: 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53   {}.  db eval {S
5360: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
5370: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 7d 20  t1 ORDER BY f1} 
5380: 72 20 7b 7d 0a 20 20 73 65 74 20 72 28 2a 29 0a  r {}.  set r(*).
5390: 7d 20 7b 66 31 20 66 32 7d 0a 64 6f 5f 74 65 73  } {f1 f2}.do_tes
53a0: 74 20 73 65 6c 65 63 74 31 2d 39 2e 35 20 7b 0a  t select1-9.5 {.
53b0: 20 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a 20 20    set r(*) {}.  
53c0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
53d0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
53e0: 52 45 20 66 31 3c 30 20 4f 52 44 45 52 20 42 59  RE f1<0 ORDER BY
53f0: 20 66 31 7d 20 72 20 7b 7d 0a 20 20 73 65 74 20   f1} r {}.  set 
5400: 72 28 2a 29 0a 7d 20 7b 66 31 20 66 32 7d 0a 75  r(*).} {f1 f2}.u
5410: 6e 73 65 74 20 72 0a 0a 23 20 43 68 65 63 6b 20  nset r..# Check 
5420: 66 6f 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  for ORDER BY cla
5430: 75 73 65 73 20 74 68 61 74 20 72 65 66 65 72 20  uses that refer 
5440: 74 6f 20 61 6e 20 41 53 20 6e 61 6d 65 20 69 6e  to an AS name in
5450: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74   the column list
5460: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .#.do_test selec
5470: 74 31 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65 63  t1-10.1 {.  exec
5480: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
5490: 20 66 31 20 41 53 20 78 20 46 52 4f 4d 20 74 65   f1 AS x FROM te
54a0: 73 74 31 20 4f 52 44 45 52 20 42 59 20 78 0a 20  st1 ORDER BY x. 
54b0: 20 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 64 6f 5f   }.} {11 33}.do_
54c0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e  test select1-10.
54d0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
54e0: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 41 53      SELECT f1 AS
54f0: 20 78 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   x FROM test1 OR
5500: 44 45 52 20 42 59 20 2d 78 0a 20 20 7d 0a 7d 20  DER BY -x.  }.} 
5510: 7b 33 33 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20  {33 11}.do_test 
5520: 73 65 6c 65 63 74 31 2d 31 30 2e 33 20 7b 0a 20  select1-10.3 {. 
5530: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
5540: 45 4c 45 43 54 20 66 31 2d 32 33 20 41 53 20 78  ELECT f1-23 AS x
5550: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
5560: 52 20 42 59 20 61 62 73 28 78 29 0a 20 20 7d 0a  R BY abs(x).  }.
5570: 7d 20 7b 31 30 20 2d 31 32 7d 0a 64 6f 5f 74 65  } {10 -12}.do_te
5580: 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e 34 20  st select1-10.4 
5590: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
55a0: 20 20 53 45 4c 45 43 54 20 66 31 2d 32 33 20 41    SELECT f1-23 A
55b0: 53 20 78 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  S x FROM test1 O
55c0: 52 44 45 52 20 42 59 20 2d 61 62 73 28 78 29 0a  RDER BY -abs(x).
55d0: 20 20 7d 0a 7d 20 7b 2d 31 32 20 31 30 7d 0a 64    }.} {-12 10}.d
55e0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
55f0: 30 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.5 {.  execsql 
5600: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66 31 2d  {.    SELECT f1-
5610: 32 32 20 41 53 20 78 2c 20 66 32 2d 32 32 20 61  22 AS x, f2-22 a
5620: 73 20 79 20 46 52 4f 4d 20 74 65 73 74 31 0a 20  s y FROM test1. 
5630: 20 7d 0a 7d 20 7b 2d 31 31 20 30 20 31 31 20 32   }.} {-11 0 11 2
5640: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  2}.do_test selec
5650: 74 31 2d 31 30 2e 36 20 7b 0a 20 20 65 78 65 63  t1-10.6 {.  exec
5660: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
5670: 20 66 31 2d 32 32 20 41 53 20 78 2c 20 66 32 2d   f1-22 AS x, f2-
5680: 32 32 20 61 73 20 79 20 46 52 4f 4d 20 74 65 73  22 as y FROM tes
5690: 74 31 20 57 48 45 52 45 20 78 3e 30 20 41 4e 44  t1 WHERE x>0 AND
56a0: 20 79 3c 35 30 0a 20 20 7d 0a 7d 20 7b 31 31 20   y<50.  }.} {11 
56b0: 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  22}.do_test sele
56c0: 63 74 31 2d 31 30 2e 37 20 7b 0a 20 20 65 78 65  ct1-10.7 {.  exe
56d0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
56e0: 54 20 66 31 20 43 4f 4c 4c 41 54 45 20 6e 6f 63  T f1 COLLATE noc
56f0: 61 73 65 20 41 53 20 78 20 46 52 4f 4d 20 74 65  ase AS x FROM te
5700: 73 74 31 20 4f 52 44 45 52 20 42 59 20 78 0a 20  st1 ORDER BY x. 
5710: 20 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 0a 23 20   }.} {11 33}..# 
5720: 43 68 65 63 6b 20 74 68 65 20 61 62 69 6c 69 74  Check the abilit
5730: 79 20 74 6f 20 73 70 65 63 69 66 79 20 22 54 41  y to specify "TA
5740: 42 4c 45 2e 2a 22 20 69 6e 20 74 68 65 20 72 65  BLE.*" in the re
5750: 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
5760: 4c 45 43 54 0a 23 0a 64 6f 5f 74 65 73 74 20 73  LECT.#.do_test s
5770: 65 6c 65 63 74 31 2d 31 31 2e 31 20 7b 0a 20 20  elect1-11.1 {.  
5780: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
5790: 4c 45 54 45 20 46 52 4f 4d 20 74 33 3b 0a 20 20  LETE FROM t3;.  
57a0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 34    DELETE FROM t4
57b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
57c0: 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32 29  O t3 VALUES(1,2)
57d0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
57e0: 4f 20 74 34 20 56 41 4c 55 45 53 28 33 2c 34 29  O t4 VALUES(3,4)
57f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
5800: 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a  ROM t3, t4;.  }.
5810: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74  } {1 2 3 4}.do_t
5820: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 32  est select1-11.2
5830: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
5840: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5850: 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d  OM t3, t4;.  }.}
5860: 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74 65   {1 2 3 4}.do_te
5870: 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 32 2e  st select1-11.2.
5880: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  2 {.  execsql2 {
5890: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
58a0: 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d  OM t3, t4;.  }.}
58b0: 20 7b 61 20 33 20 62 20 34 20 61 20 33 20 62 20   {a 3 b 4 a 3 b 
58c0: 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  4}.do_test selec
58d0: 74 31 2d 31 31 2e 34 2e 31 20 7b 0a 20 20 65 78  t1-11.4.1 {.  ex
58e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
58f0: 43 54 20 74 33 2e 2a 2c 20 74 34 2e 62 20 46 52  CT t3.*, t4.b FR
5900: 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d  OM t3, t4;.  }.}
5910: 20 7b 31 20 32 20 34 7d 0a 64 6f 5f 74 65 73 74   {1 2 4}.do_test
5920: 20 73 65 6c 65 63 74 31 2d 31 31 2e 34 2e 32 20   select1-11.4.2 
5930: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5940: 20 20 53 45 4c 45 43 54 20 22 74 33 22 2e 2a 2c    SELECT "t3".*,
5950: 20 74 34 2e 62 20 46 52 4f 4d 20 74 33 2c 20 74   t4.b FROM t3, t
5960: 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 34 7d  4;.  }.} {1 2 4}
5970: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
5980: 2d 31 31 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63  -11.5.1 {.  exec
5990: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
59a0: 54 20 74 33 2e 2a 2c 20 74 34 2e 62 20 46 52 4f  T t3.*, t4.b FRO
59b0: 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d 20  M t3, t4;.  }.} 
59c0: 7b 61 20 31 20 62 20 34 20 62 20 34 7d 0a 64 6f  {a 1 b 4 b 4}.do
59d0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31  _test select1-11
59e0: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .6 {.  execsql2 
59f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2e 2a  {.    SELECT x.*
5a00: 2c 20 79 2e 62 20 46 52 4f 4d 20 74 33 20 41 53  , y.b FROM t3 AS
5a10: 20 78 2c 20 74 34 20 41 53 20 79 3b 0a 20 20 7d   x, t4 AS y;.  }
5a20: 0a 7d 20 7b 61 20 31 20 62 20 34 20 62 20 34 7d  .} {a 1 b 4 b 4}
5a30: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
5a40: 2d 31 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  -11.7 {.  execsq
5a50: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74  l {.    SELECT t
5a60: 33 2e 62 2c 20 74 34 2e 2a 20 46 52 4f 4d 20 74  3.b, t4.* FROM t
5a70: 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 32 20  3, t4;.  }.} {2 
5a80: 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  3 4}.do_test sel
5a90: 65 63 74 31 2d 31 31 2e 38 20 7b 0a 20 20 65 78  ect1-11.8 {.  ex
5aa0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
5ab0: 45 43 54 20 74 33 2e 62 2c 20 74 34 2e 2a 20 46  ECT t3.b, t4.* F
5ac0: 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a  ROM t3, t4;.  }.
5ad0: 7d 20 7b 62 20 34 20 61 20 33 20 62 20 34 7d 0a  } {b 4 a 3 b 4}.
5ae0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
5af0: 31 31 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.9 {.  execsql
5b00: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  2 {.    SELECT x
5b10: 2e 62 2c 20 79 2e 2a 20 46 52 4f 4d 20 74 33 20  .b, y.* FROM t3 
5b20: 41 53 20 78 2c 20 74 34 20 41 53 20 79 3b 0a 20  AS x, t4 AS y;. 
5b30: 20 7d 0a 7d 20 7b 62 20 34 20 61 20 33 20 62 20   }.} {b 4 a 3 b 
5b40: 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  4}.do_test selec
5b50: 74 31 2d 31 31 2e 31 30 20 7b 0a 20 20 63 61 74  t1-11.10 {.  cat
5b60: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
5b70: 43 54 20 74 35 2e 2a 20 46 52 4f 4d 20 74 33 2c  CT t5.* FROM t3,
5b80: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e   t4;.  }.} {1 {n
5b90: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 35  o such table: t5
5ba0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  }}.do_test selec
5bb0: 74 31 2d 31 31 2e 31 31 20 7b 0a 20 20 63 61 74  t1-11.11 {.  cat
5bc0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
5bd0: 43 54 20 74 33 2e 2a 20 46 52 4f 4d 20 74 33 20  CT t3.* FROM t3 
5be0: 41 53 20 78 2c 20 74 34 3b 0a 20 20 7d 0a 7d 20  AS x, t4;.  }.} 
5bf0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
5c00: 65 3a 20 74 33 7d 7d 0a 69 66 63 61 70 61 62 6c  e: t3}}.ifcapabl
5c10: 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 64  e subquery {.  d
5c20: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
5c30: 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73  1.12 {.    execs
5c40: 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  ql2 {.      SELE
5c50: 43 54 20 74 33 2e 2a 20 46 52 4f 4d 20 74 33 2c  CT t3.* FROM t3,
5c60: 20 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29 2c   (SELECT max(a),
5c70: 20 6d 61 78 28 62 29 20 46 52 4f 4d 20 74 34 29   max(b) FROM t4)
5c80: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 20 31 20  .    }.  } {a 1 
5c90: 62 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73  b 2}.  do_test s
5ca0: 65 6c 65 63 74 31 2d 31 31 2e 31 33 20 7b 0a 20  elect1-11.13 {. 
5cb0: 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20     execsql2 {.  
5cc0: 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 2a 20      SELECT t3.* 
5cd0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 6d 61 78  FROM (SELECT max
5ce0: 28 61 29 2c 20 6d 61 78 28 62 29 20 46 52 4f 4d  (a), max(b) FROM
5cf0: 20 74 34 29 2c 20 74 33 0a 20 20 20 20 7d 0a 20   t4), t3.    }. 
5d00: 20 7d 20 7b 61 20 31 20 62 20 32 7d 0a 20 20 64   } {a 1 b 2}.  d
5d10: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
5d20: 31 2e 31 34 20 7b 0a 20 20 20 20 65 78 65 63 73  1.14 {.    execs
5d30: 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  ql2 {.      SELE
5d40: 43 54 20 2a 20 46 52 4f 4d 20 74 33 2c 20 28 53  CT * FROM t3, (S
5d50: 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 20 6d 61  ELECT max(a), ma
5d60: 78 28 62 29 20 46 52 4f 4d 20 74 34 29 20 41 53  x(b) FROM t4) AS
5d70: 20 27 74 78 27 0a 20 20 20 20 7d 0a 20 20 7d 20   'tx'.    }.  } 
5d80: 7b 61 20 31 20 62 20 32 20 6d 61 78 28 61 29 20  {a 1 b 2 max(a) 
5d90: 33 20 6d 61 78 28 62 29 20 34 7d 0a 20 20 64 6f  3 max(b) 4}.  do
5da0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31  _test select1-11
5db0: 2e 31 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .15 {.    execsq
5dc0: 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  l2 {.      SELEC
5dd0: 54 20 79 2e 2a 2c 20 74 33 2e 2a 20 46 52 4f 4d  T y.*, t3.* FROM
5de0: 20 74 33 2c 20 28 53 45 4c 45 43 54 20 6d 61 78   t3, (SELECT max
5df0: 28 61 29 2c 20 6d 61 78 28 62 29 20 46 52 4f 4d  (a), max(b) FROM
5e00: 20 74 34 29 20 41 53 20 79 0a 20 20 20 20 7d 0a   t4) AS y.    }.
5e10: 20 20 7d 20 7b 6d 61 78 28 61 29 20 33 20 6d 61    } {max(a) 3 ma
5e20: 78 28 62 29 20 34 20 61 20 31 20 62 20 32 7d 0a  x(b) 4 a 1 b 2}.
5e30: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
5e40: 31 2d 31 31 2e 31 36 20 7b 0a 20 20 65 78 65 63  1-11.16 {.  exec
5e50: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
5e60: 54 20 79 2e 2a 20 46 52 4f 4d 20 74 33 20 61 73  T y.* FROM t3 as
5e70: 20 79 2c 20 74 34 20 61 73 20 7a 0a 20 20 7d 0a   y, t4 as z.  }.
5e80: 7d 20 7b 61 20 31 20 62 20 32 7d 0a 0a 23 20 54  } {a 1 b 2}..# T
5e90: 65 73 74 73 20 6f 66 20 53 45 4c 45 43 54 20 73  ests of SELECT s
5ea0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 6f 75  tatements withou
5eb0: 74 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  t a FROM clause.
5ec0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .#.do_test selec
5ed0: 74 31 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63  t1-12.1 {.  exec
5ee0: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
5ef0: 54 20 31 2b 32 2b 33 0a 20 20 7d 0a 7d 20 7b 31  T 1+2+3.  }.} {1
5f00: 2b 32 2b 33 20 36 7d 0a 64 6f 5f 74 65 73 74 20  +2+3 6}.do_test 
5f10: 73 65 6c 65 63 74 31 2d 31 32 2e 32 20 7b 0a 20  select1-12.2 {. 
5f20: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
5f30: 53 45 4c 45 43 54 20 31 2c 27 68 65 6c 6c 6f 27  SELECT 1,'hello'
5f40: 2c 32 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 27 68  ,2.  }.} {1 1 'h
5f50: 65 6c 6c 6f 27 20 68 65 6c 6c 6f 20 32 20 32 7d  ello' hello 2 2}
5f60: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
5f70: 2d 31 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -12.3 {.  execsq
5f80: 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  l2 {.    SELECT 
5f90: 31 20 41 53 20 27 61 27 2c 27 68 65 6c 6c 6f 27  1 AS 'a','hello'
5fa0: 20 41 53 20 27 62 27 2c 32 20 41 53 20 27 63 27   AS 'b',2 AS 'c'
5fb0: 0a 20 20 7d 0a 7d 20 7b 61 20 31 20 62 20 68 65  .  }.} {a 1 b he
5fc0: 6c 6c 6f 20 63 20 32 7d 0a 64 6f 5f 74 65 73 74  llo c 2}.do_test
5fd0: 20 73 65 6c 65 63 74 31 2d 31 32 2e 34 20 7b 0a   select1-12.4 {.
5fe0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5ff0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33 3b 0a  DELETE FROM t3;.
6000: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6010: 74 33 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a  t3 VALUES(1,2);.
6020: 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61    }.} {}..ifcapa
6030: 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64  ble compound {.d
6040: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
6050: 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.5 {.  execsql 
6060: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
6070: 52 4f 4d 20 74 33 20 55 4e 49 4f 4e 20 53 45 4c  ROM t3 UNION SEL
6080: 45 43 54 20 33 20 41 53 20 27 61 27 2c 20 34 20  ECT 3 AS 'a', 4 
6090: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
60a0: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 64 6f 5f  } {1 2 3 4}..do_
60b0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 32 2e  test select1-12.
60c0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
60d0: 20 20 20 20 53 45 4c 45 43 54 20 33 2c 20 34 20      SELECT 3, 4 
60e0: 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20 46  UNION SELECT * F
60f0: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t3;.  }.} {1
6100: 20 32 20 33 20 34 7d 0a 7d 20 3b 23 20 69 66 63   2 3 4}.} ;# ifc
6110: 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a  apable compound.
6120: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
6130: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
6140: 73 65 6c 65 63 74 31 2d 31 32 2e 37 20 7b 0a 20  select1-12.7 {. 
6150: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6160: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6170: 20 74 33 20 57 48 45 52 45 20 61 3d 28 53 45 4c   t3 WHERE a=(SEL
6180: 45 43 54 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20  ECT 1);.    }.  
6190: 7d 20 7b 31 20 32 7d 0a 20 20 64 6f 5f 74 65 73  } {1 2}.  do_tes
61a0: 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 38 20 7b  t select1-12.8 {
61b0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
61c0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
61d0: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 28 53  OM t3 WHERE a=(S
61e0: 45 4c 45 43 54 20 32 29 3b 0a 20 20 20 20 7d 0a  ELECT 2);.    }.
61f0: 20 20 7d 20 7b 7d 0a 7d 0a 0a 69 66 63 61 70 61    } {}.}..ifcapa
6200: 62 6c 65 20 7b 63 6f 6d 70 6f 75 6e 64 20 26 26  ble {compound &&
6210: 20 73 75 62 71 75 65 72 79 7d 20 7b 0a 20 20 64   subquery} {.  d
6220: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
6230: 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.9 {.    execsq
6240: 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  l2 {.      SELEC
6250: 54 20 78 20 46 52 4f 4d 20 28 0a 20 20 20 20 20  T x FROM (.     
6260: 20 20 20 53 45 4c 45 43 54 20 61 20 41 53 20 78     SELECT a AS x
6270: 2c 20 62 20 41 53 20 79 20 46 52 4f 4d 20 74 33  , b AS y FROM t3
6280: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 61 2c   UNION SELECT a,
6290: 62 20 46 52 4f 4d 20 74 34 20 4f 52 44 45 52 20  b FROM t4 ORDER 
62a0: 42 59 20 61 2c 62 0a 20 20 20 20 20 20 29 20 4f  BY a,b.      ) O
62b0: 52 44 45 52 20 42 59 20 78 3b 0a 20 20 20 20 7d  RDER BY x;.    }
62c0: 0a 20 20 7d 20 7b 78 20 31 20 78 20 33 7d 0a 20  .  } {x 1 x 3}. 
62d0: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
62e0: 2d 31 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65  -12.10 {.    exe
62f0: 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45  csql2 {.      SE
6300: 4c 45 43 54 20 7a 2e 78 20 46 52 4f 4d 20 28 0a  LECT z.x FROM (.
6310: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 61          SELECT a
6320: 20 41 53 20 78 2c 62 20 41 53 20 79 20 46 52 4f   AS x,b AS y FRO
6330: 4d 20 74 33 20 55 4e 49 4f 4e 20 53 45 4c 45 43  M t3 UNION SELEC
6340: 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 34 20 4f  T a, b FROM t4 O
6350: 52 44 45 52 20 42 59 20 61 2c 62 0a 20 20 20 20  RDER BY a,b.    
6360: 20 20 29 20 41 53 20 27 7a 27 20 4f 52 44 45 52    ) AS 'z' ORDER
6370: 20 42 59 20 78 3b 0a 20 20 20 20 7d 0a 20 20 7d   BY x;.    }.  }
6380: 20 7b 78 20 31 20 78 20 33 7d 0a 7d 20 3b 23 20   {x 1 x 3}.} ;# 
6390: 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75  ifcapable compou
63a0: 6e 64 0a 0a 0a 23 20 43 68 65 63 6b 20 66 6f 72  nd...# Check for
63b0: 20 61 20 56 44 42 45 20 73 74 61 63 6b 20 67 72   a VDBE stack gr
63c0: 6f 77 74 68 20 70 72 6f 62 6c 65 6d 20 74 68 61  owth problem tha
63d0: 74 20 65 78 69 73 74 65 64 20 61 74 20 6f 6e 65  t existed at one
63e0: 20 70 6f 69 6e 74 2e 0a 23 0a 69 66 63 61 70 61   point..#.ifcapa
63f0: 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20  ble subquery {. 
6400: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
6410: 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -13.1 {.    exec
6420: 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49  sql {.      BEGI
6430: 4e 3b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20  N;.      create 
6440: 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20  TABLE abc(a, b, 
6450: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61  c, PRIMARY KEY(a
6460: 2c 20 62 29 29 3b 0a 20 20 20 20 20 20 49 4e 53  , b));.      INS
6470: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c  ERT INTO abc VAL
6480: 55 45 53 28 31 2c 20 31 2c 20 31 29 3b 0a 20 20  UES(1, 1, 1);.  
6490: 20 20 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74    }.    for {set
64a0: 20 69 20 30 7d 20 7b 24 69 3c 31 30 7d 20 7b 69   i 0} {$i<10} {i
64b0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 65  ncr i} {.      e
64c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
64d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
64e0: 20 53 45 4c 45 43 54 20 61 2b 28 73 65 6c 65 63   SELECT a+(selec
64f0: 74 20 6d 61 78 28 61 29 20 46 52 4f 4d 20 61 62  t max(a) FROM ab
6500: 63 29 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  c), .           
6510: 20 62 2b 28 73 65 6c 65 63 74 20 6d 61 78 28 61   b+(select max(a
6520: 29 20 46 52 4f 4d 20 61 62 63 29 2c 20 63 2b 28  ) FROM abc), c+(
6530: 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20 46 52  select max(a) FR
6540: 4f 4d 20 61 62 63 29 20 46 52 4f 4d 20 61 62 63  OM abc) FROM abc
6550: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6560: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d      execsql {COM
6570: 4d 49 54 7d 0a 20 20 0a 20 20 20 20 23 20 54 68  MIT}.  .    # Th
6580: 69 73 20 75 73 65 64 20 74 6f 20 73 65 67 2d 66  is used to seg-f
6590: 61 75 6c 74 20 77 68 65 6e 20 74 68 65 20 70 72  ault when the pr
65a0: 6f 62 6c 65 6d 20 65 78 69 73 74 65 64 2e 0a 20  oblem existed.. 
65b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
65c0: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
65d0: 0a 20 20 20 20 20 20 20 20 28 53 45 4c 45 43 54  .        (SELECT
65e0: 20 61 20 46 52 4f 4d 20 61 62 63 20 57 48 45 52   a FROM abc WHER
65f0: 45 20 61 20 3d 20 4e 55 4c 4c 20 41 4e 44 20 62  E a = NULL AND b
6600: 20 3e 3d 20 75 70 70 65 72 2e 63 29 20 0a 20 20   >= upper.c) .  
6610: 20 20 20 20 29 20 46 52 4f 4d 20 61 62 63 20 41      ) FROM abc A
6620: 53 20 75 70 70 65 72 3b 0a 20 20 20 20 7d 0a 20  S upper;.    }. 
6630: 20 7d 20 7b 30 7d 0a 7d 0a 0a 66 6f 72 65 61 63   } {0}.}..foreac
6640: 68 20 74 61 62 20 5b 64 62 20 65 76 61 6c 20 7b  h tab [db eval {
6650: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
6660: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
6670: 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62  HERE type = 'tab
6680: 6c 65 27 7d 5d 20 7b 0a 20 20 64 62 20 65 76 61  le'}] {.  db eva
6690: 6c 20 22 44 52 4f 50 20 54 41 42 4c 45 20 24 74  l "DROP TABLE $t
66a0: 61 62 22 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 73  ab".}.db close.s
66b0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
66c0: 62 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  b..do_test selec
66d0: 74 31 2d 31 34 2e 31 20 7b 0a 20 20 65 78 65 63  t1-14.1 {.  exec
66e0: 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c 45 43  sql { .    SELEC
66f0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
6700: 6d 61 73 74 65 72 20 57 48 45 52 45 20 72 6f 77  master WHERE row
6710: 69 64 3e 31 30 3b 20 0a 20 20 20 20 53 45 4c 45  id>10; .    SELE
6720: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
6730: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 72 6f  _master WHERE ro
6740: 77 69 64 3d 31 30 3b 0a 20 20 20 20 53 45 4c 45  wid=10;.    SELE
6750: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
6760: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 72 6f  _master WHERE ro
6770: 77 69 64 3c 31 30 3b 0a 20 20 20 20 53 45 4c 45  wid<10;.    SELE
6780: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
6790: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 72 6f  _master WHERE ro
67a0: 77 69 64 3c 3d 31 30 3b 0a 20 20 20 20 53 45 4c  wid<=10;.    SEL
67b0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
67c0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 72  e_master WHERE r
67d0: 6f 77 69 64 3e 3d 31 30 3b 0a 20 20 20 20 53 45  owid>=10;.    SE
67e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
67f0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d  te_master;.  }.}
6800: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65   {}.do_test sele
6810: 63 74 31 2d 31 34 2e 32 20 7b 0a 20 20 65 78 65  ct1-14.2 {.  exe
6820: 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c 45  csql { .    SELE
6830: 43 54 20 31 30 20 49 4e 20 28 53 45 4c 45 43 54  CT 10 IN (SELECT
6840: 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69   rowid FROM sqli
6850: 74 65 5f 6d 61 73 74 65 72 29 3b 0a 20 20 7d 0a  te_master);.  }.
6860: 7d 20 7b 30 7d 0a 0a 69 66 20 7b 5b 64 62 20 6f  } {0}..if {[db o
6870: 6e 65 20 7b 50 52 41 47 4d 41 20 6c 6f 63 6b 69  ne {PRAGMA locki
6880: 6e 67 5f 6d 6f 64 65 7d 5d 3d 3d 22 6e 6f 72 6d  ng_mode}]=="norm
6890: 61 6c 22 7d 20 7b 0a 20 20 23 20 43 68 65 63 6b  al"} {.  # Check
68a0: 20 74 68 61 74 20 74 69 63 6b 65 74 20 23 33 37   that ticket #37
68b0: 37 31 20 68 61 73 20 62 65 65 6e 20 66 69 78 65  71 has been fixe
68c0: 64 2e 20 20 54 68 69 73 20 74 65 73 74 20 64 6f  d.  This test do
68d0: 65 73 20 6e 6f 74 0a 20 20 23 20 77 6f 72 6b 20  es not.  # work 
68e0: 77 69 74 68 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  with locking_mod
68f0: 65 3d 45 58 43 4c 55 53 49 56 45 20 73 6f 20 64  e=EXCLUSIVE so d
6900: 69 73 61 62 6c 65 20 69 6e 20 74 68 61 74 20 63  isable in that c
6910: 61 73 65 2e 0a 20 20 23 0a 20 20 64 6f 5f 74 65  ase..  #.  do_te
6920: 73 74 20 73 65 6c 65 63 74 31 2d 31 35 2e 31 20  st select1-15.1 
6930: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
6940: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
6950: 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20  LE t1(a);.      
6960: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
6970: 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20 20 20  ON t1(a);.      
6980: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
6990: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 20 20  ALUES(1);.      
69a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
69b0: 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 20 20  ALUES(2);.      
69c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
69d0: 41 4c 55 45 53 28 33 29 3b 0a 20 20 20 20 7d 0a  ALUES(3);.    }.
69e0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
69f0: 20 73 65 6c 65 63 74 31 2d 31 35 2e 32 20 7b 0a   select1-15.2 {.
6a00: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
6a10: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
6a20: 73 71 6c 20 7b 20 44 52 4f 50 20 49 4e 44 45 58  sql { DROP INDEX
6a30: 20 69 31 20 7d 20 64 62 32 0a 20 20 20 20 64 62   i1 } db2.    db
6a40: 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20  2 close.  } {}. 
6a50: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
6a60: 2d 31 35 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  -15.3 {.    exec
6a70: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 32 20 49  sql { SELECT 2 I
6a80: 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  N (SELECT a FROM
6a90: 20 74 31 29 20 7d 0a 20 20 7d 20 7b 31 7d 0a 7d   t1) }.  } {1}.}
6aa0: 0a 0a 23 20 43 72 61 73 68 20 62 75 67 20 72 65  ..# Crash bug re
6ab0: 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 6d 61  ported on the ma
6ac0: 69 6c 69 6e 67 20 6c 69 73 74 20 6f 6e 20 32 30  iling list on 20
6ad0: 31 32 2d 30 32 2d 32 33 0a 23 0a 64 6f 5f 74 65  12-02-23.#.do_te
6ae0: 73 74 20 73 65 6c 65 63 74 31 2d 31 36 2e 31 20  st select1-16.1 
6af0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  {.  catchsql {SE
6b00: 4c 45 43 54 20 31 20 46 52 4f 4d 20 28 53 45 4c  LECT 1 FROM (SEL
6b10: 45 43 54 20 2a 29 7d 0a 7d 20 7b 31 20 7b 6e 6f  ECT *)}.} {1 {no
6b20: 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69 65   tables specifie
6b30: 64 7d 7d 0a 20 20 0a 66 69 6e 69 73 68 5f 74 65  d}}.  .finish_te
6b40: 73 74 0a                                         st.