/ Hex Artifact Content
Login

Artifact 703154cbf66d0a9fbbd5b771dc3d2c4d3700121d133d695958d4a9c5a33251e8:


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 64 6f 5f 63 61 74 63 68 73 71  n()}}.do_catchsq
22c0: 6c 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 34  l_test select1-4
22d0: 2e 35 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .5 {.  INSERT IN
22e0: 54 4f 20 74 65 73 74 31 28 66 31 29 20 53 45 4c  TO test1(f1) SEL
22f0: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74  ECT f1 FROM test
2300: 31 20 4f 52 44 45 52 20 42 59 20 6d 69 6e 28 66  1 ORDER BY min(f
2310: 31 29 3b 0a 7d 20 7b 31 20 7b 6d 69 73 75 73 65  1);.} {1 {misuse
2320: 20 6f 66 20 61 67 67 72 65 67 61 74 65 3a 20 6d   of aggregate: m
2330: 69 6e 28 29 7d 7d 0a 0a 23 20 54 68 65 20 72 65  in()}}..# The re
2340: 73 74 72 69 63 74 69 6f 6e 20 6e 6f 74 20 61 6c  striction not al
2350: 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
2360: 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59   in the ORDER BY
2370: 20 63 6c 61 75 73 65 0a 23 20 68 61 73 20 62 65   clause.# has be
2380: 65 6e 20 72 65 6d 6f 76 65 64 2e 20 20 53 65 65  en removed.  See
2390: 20 74 69 63 6b 65 74 20 23 31 37 36 38 0a 23 64   ticket #1768.#d
23a0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 34  o_test select1-4
23b0: 2e 35 20 7b 0a 23 20 20 63 61 74 63 68 73 71 6c  .5 {.#  catchsql
23c0: 20 7b 0a 23 20 20 20 20 53 45 4c 45 43 54 20 66   {.#    SELECT f
23d0: 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  1 FROM test1 ORD
23e0: 45 52 20 42 59 20 38 2e 34 3b 0a 23 20 20 7d 0a  ER BY 8.4;.#  }.
23f0: 23 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59 20  #} {1 {ORDER BY 
2400: 74 65 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62  terms must not b
2410: 65 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f  e non-integer co
2420: 6e 73 74 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65  nstants}}.#do_te
2430: 73 74 20 73 65 6c 65 63 74 31 2d 34 2e 36 20 7b  st select1-4.6 {
2440: 0a 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23  .#  catchsql {.#
2450: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
2460: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2470: 59 20 27 38 2e 34 27 3b 0a 23 20 20 7d 0a 23 7d  Y '8.4';.#  }.#}
2480: 20 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65   {1 {ORDER BY te
2490: 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20  rms must not be 
24a0: 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73  non-integer cons
24b0: 74 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74  tants}}.#do_test
24c0: 20 73 65 6c 65 63 74 31 2d 34 2e 37 2e 31 20 7b   select1-4.7.1 {
24d0: 0a 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23  .#  catchsql {.#
24e0: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
24f0: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2500: 59 20 27 78 79 7a 27 3b 0a 23 20 20 7d 0a 23 7d  Y 'xyz';.#  }.#}
2510: 20 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65   {1 {ORDER BY te
2520: 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20  rms must not be 
2530: 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73  non-integer cons
2540: 74 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74  tants}}.#do_test
2550: 20 73 65 6c 65 63 74 31 2d 34 2e 37 2e 32 20 7b   select1-4.7.2 {
2560: 0a 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23  .#  catchsql {.#
2570: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
2580: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2590: 59 20 2d 38 2e 34 3b 0a 23 20 20 7d 0a 23 7d 20  Y -8.4;.#  }.#} 
25a0: 7b 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72  {1 {ORDER BY ter
25b0: 6d 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e  ms must not be n
25c0: 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74  on-integer const
25d0: 61 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20  ants}}.#do_test 
25e0: 73 65 6c 65 63 74 31 2d 34 2e 37 2e 33 20 7b 0a  select1-4.7.3 {.
25f0: 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20  #  catchsql {.# 
2600: 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f     SELECT f1 FRO
2610: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
2620: 20 2b 38 2e 34 3b 0a 23 20 20 7d 0a 23 7d 20 7b   +8.4;.#  }.#} {
2630: 31 20 7b 4f 52 44 45 52 20 42 59 20 74 65 72 6d  1 {ORDER BY term
2640: 73 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6e 6f  s must not be no
2650: 6e 2d 69 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  n-integer consta
2660: 6e 74 73 7d 7d 0a 23 64 6f 5f 74 65 73 74 20 73  nts}}.#do_test s
2670: 65 6c 65 63 74 31 2d 34 2e 37 2e 34 20 7b 0a 23  elect1-4.7.4 {.#
2680: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20 20    catchsql {.#  
2690: 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d    SELECT f1 FROM
26a0: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
26b0: 34 32 39 34 39 36 37 32 39 36 3b 20 2d 2d 20 63  4294967296; -- c
26c0: 6f 6e 73 74 61 6e 74 20 6c 61 72 67 65 72 20 74  onstant larger t
26d0: 68 61 6e 20 33 32 20 62 69 74 73 0a 23 20 20 7d  han 32 bits.#  }
26e0: 0a 23 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59  .#} {1 {ORDER BY
26f0: 20 74 65 72 6d 73 20 6d 75 73 74 20 6e 6f 74 20   terms must not 
2700: 62 65 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63  be non-integer c
2710: 6f 6e 73 74 61 6e 74 73 7d 7d 0a 0a 64 6f 5f 74  onstants}}..do_t
2720: 65 73 74 20 73 65 6c 65 63 74 31 2d 34 2e 35 20  est select1-4.5 
2730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2740: 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d    SELECT f1 FROM
2750: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
2760: 38 2e 34 0a 20 20 7d 0a 7d 20 7b 31 31 20 33 33  8.4.  }.} {11 33
2770: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
2780: 31 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  1-4.6 {.  execsq
2790: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66  l {.    SELECT f
27a0: 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  1 FROM test1 ORD
27b0: 45 52 20 42 59 20 27 38 2e 34 27 0a 20 20 7d 0a  ER BY '8.4'.  }.
27c0: 7d 20 7b 31 31 20 33 33 7d 0a 0a 64 6f 5f 74 65  } {11 33}..do_te
27d0: 73 74 20 73 65 6c 65 63 74 31 2d 34 2e 38 20 7b  st select1-4.8 {
27e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
27f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
2800: 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  (a,b);.    INSER
2810: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
2820: 28 31 2c 31 30 29 3b 0a 20 20 20 20 49 4e 53 45  (1,10);.    INSE
2830: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
2840: 53 28 32 2c 39 29 3b 0a 20 20 20 20 53 45 4c 45  S(2,9);.    SELE
2850: 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44  CT * FROM t5 ORD
2860: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2870: 31 20 31 30 20 32 20 39 7d 0a 64 6f 5f 74 65 73  1 10 2 9}.do_tes
2880: 74 20 73 65 6c 65 63 74 31 2d 34 2e 39 2e 31 20  t select1-4.9.1 
2890: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
28a0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
28b0: 74 35 20 4f 52 44 45 52 20 42 59 20 32 3b 0a 20  t5 ORDER BY 2;. 
28c0: 20 7d 0a 7d 20 7b 32 20 39 20 31 20 31 30 7d 0a   }.} {2 9 1 10}.
28d0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
28e0: 34 2e 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  4.9.2 {.  execsq
28f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
2900: 20 46 52 4f 4d 20 74 35 20 4f 52 44 45 52 20 42   FROM t5 ORDER B
2910: 59 20 2b 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 39  Y +2;.  }.} {2 9
2920: 20 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 73   1 10}.do_test s
2930: 65 6c 65 63 74 31 2d 34 2e 31 30 2e 31 20 7b 0a  elect1-4.10.1 {.
2940: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2950: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2960: 35 20 4f 52 44 45 52 20 42 59 20 33 3b 0a 20 20  5 ORDER BY 3;.  
2970: 7d 0a 7d 20 7b 31 20 7b 31 73 74 20 4f 52 44 45  }.} {1 {1st ORDE
2980: 52 20 42 59 20 74 65 72 6d 20 6f 75 74 20 6f 66  R BY term out of
2990: 20 72 61 6e 67 65 20 2d 20 73 68 6f 75 6c 64 20   range - should 
29a0: 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
29b0: 20 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   2}}.do_test sel
29c0: 65 63 74 31 2d 34 2e 31 30 2e 32 20 7b 0a 20 20  ect1-4.10.2 {.  
29d0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
29e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20  ELECT * FROM t5 
29f0: 4f 52 44 45 52 20 42 59 20 2d 31 3b 0a 20 20 7d  ORDER BY -1;.  }
2a00: 0a 7d 20 7b 31 20 7b 31 73 74 20 4f 52 44 45 52  .} {1 {1st ORDER
2a10: 20 42 59 20 74 65 72 6d 20 6f 75 74 20 6f 66 20   BY term out of 
2a20: 72 61 6e 67 65 20 2d 20 73 68 6f 75 6c 64 20 62  range - should b
2a30: 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
2a40: 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  2}}.do_test sele
2a50: 63 74 31 2d 34 2e 31 31 20 7b 0a 20 20 65 78 65  ct1-4.11 {.  exe
2a60: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
2a70: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
2a80: 28 33 2c 31 30 29 3b 0a 20 20 20 20 53 45 4c 45  (3,10);.    SELE
2a90: 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44  CT * FROM t5 ORD
2aa0: 45 52 20 42 59 20 32 2c 20 31 20 44 45 53 43 3b  ER BY 2, 1 DESC;
2ab0: 0a 20 20 7d 0a 7d 20 7b 32 20 39 20 33 20 31 30  .  }.} {2 9 3 10
2ac0: 20 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 73   1 10}.do_test s
2ad0: 65 6c 65 63 74 31 2d 34 2e 31 32 20 7b 0a 20 20  elect1-4.12 {.  
2ae0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2af0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f  LECT * FROM t5 O
2b00: 52 44 45 52 20 42 59 20 31 20 44 45 53 43 2c 20  RDER BY 1 DESC, 
2b10: 62 3b 0a 20 20 7d 0a 7d 20 7b 33 20 31 30 20 32  b;.  }.} {3 10 2
2b20: 20 39 20 31 20 31 30 7d 0a 64 6f 5f 74 65 73 74   9 1 10}.do_test
2b30: 20 73 65 6c 65 63 74 31 2d 34 2e 31 33 20 7b 0a   select1-4.13 {.
2b40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2b50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
2b60: 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53 43   ORDER BY b DESC
2b70: 2c 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  , 1;.  }.} {1 10
2b80: 20 33 20 31 30 20 32 20 39 7d 0a 0a 0a 23 20 4f   3 10 2 9}...# O
2b90: 52 44 45 52 20 42 59 20 69 67 6e 6f 72 65 64 20  RDER BY ignored 
2ba0: 6f 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  on an aggregate 
2bb0: 71 75 65 72 79 0a 23 0a 64 6f 5f 74 65 73 74 20  query.#.do_test 
2bc0: 73 65 6c 65 63 74 31 2d 35 2e 31 20 7b 0a 20 20  select1-5.1 {.  
2bd0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
2be0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61  ecsql {SELECT ma
2bf0: 78 28 66 31 29 20 46 52 4f 4d 20 74 65 73 74 31  x(f1) FROM test1
2c00: 20 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d   ORDER BY f2}} m
2c10: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
2c20: 24 6d 73 67 0a 7d 20 7b 30 20 33 33 7d 0a 0a 65  $msg.} {0 33}..e
2c30: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
2c40: 41 42 4c 45 20 74 65 73 74 32 28 74 31 20 74 65  ABLE test2(t1 te
2c50: 78 74 2c 20 74 32 20 74 65 78 74 29 7d 0a 65 78  xt, t2 text)}.ex
2c60: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
2c70: 54 4f 20 74 65 73 74 32 20 56 41 4c 55 45 53 28  TO test2 VALUES(
2c80: 27 61 62 63 27 2c 27 78 79 7a 27 29 7d 0a 0a 23  'abc','xyz')}..#
2c90: 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6c 75 6d   Check for colum
2ca0: 6e 20 6e 61 6d 69 6e 67 0a 23 0a 64 6f 5f 74 65  n naming.#.do_te
2cb0: 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 31 20 7b  st select1-6.1 {
2cc0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
2cd0: 7b 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43  {execsql2 {SELEC
2ce0: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
2cf0: 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73  ORDER BY f2}} ms
2d00: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
2d10: 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31 20  msg.} {0 {f1 11 
2d20: 66 31 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20  f1 33}}.do_test 
2d30: 73 65 6c 65 63 74 31 2d 36 2e 31 2e 31 20 7b 0a  select1-6.1.1 {.
2d40: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
2d50: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
2d60: 6d 65 73 3d 6f 6e 7d 0a 20 20 73 65 74 20 76 20  mes=on}.  set v 
2d70: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32  [catch {execsql2
2d80: 20 7b 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d   {SELECT f1 FROM
2d90: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
2da0: 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  f2}} msg].  lapp
2db0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
2dc0: 7b 74 65 73 74 31 2e 66 31 20 31 31 20 74 65 73  {test1.f1 11 tes
2dd0: 74 31 2e 66 31 20 33 33 7d 7d 0a 64 6f 5f 74 65  t1.f1 33}}.do_te
2de0: 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 31 2e 32  st select1-6.1.2
2df0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
2e00: 68 20 7b 65 78 65 63 73 71 6c 32 20 7b 53 45 4c  h {execsql2 {SEL
2e10: 45 43 54 20 66 31 20 61 73 20 27 66 31 27 20 46  ECT f1 as 'f1' F
2e20: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
2e30: 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c  BY f2}} msg].  l
2e40: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
2e50: 7b 30 20 7b 66 31 20 31 31 20 66 31 20 33 33 7d  {0 {f1 11 f1 33}
2e60: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
2e70: 31 2d 36 2e 31 2e 33 20 7b 0a 20 20 73 65 74 20  1-6.1.3 {.  set 
2e80: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
2e90: 6c 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  l2 {SELECT * FRO
2ea0: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
2eb0: 3d 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ==11}} msg].  la
2ec0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
2ed0: 30 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d 7d  0 {f1 11 f2 22}}
2ee0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
2ef0: 2d 36 2e 31 2e 34 20 7b 0a 20 20 73 65 74 20 76  -6.1.4 {.  set v
2f00: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
2f10: 32 20 7b 53 45 4c 45 43 54 20 44 49 53 54 49 4e  2 {SELECT DISTIN
2f20: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2f30: 57 48 45 52 45 20 66 31 3d 3d 31 31 7d 7d 20 6d  WHERE f1==11}} m
2f40: 73 67 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50  sg].  db eval {P
2f50: 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d  RAGMA full_colum
2f60: 6e 5f 6e 61 6d 65 73 3d 6f 66 66 7d 0a 20 20 6c  n_names=off}.  l
2f70: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
2f80: 7b 30 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d  {0 {f1 11 f2 22}
2f90: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
2fa0: 31 2d 36 2e 31 2e 35 20 7b 0a 20 20 73 65 74 20  1-6.1.5 {.  set 
2fb0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
2fc0: 6c 32 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  l2 {SELECT * FRO
2fd0: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
2fe0: 3d 3d 31 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ==11}} msg].  la
2ff0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
3000: 30 20 7b 66 31 20 31 31 20 66 32 20 32 32 7d 7d  0 {f1 11 f2 22}}
3010: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
3020: 2d 36 2e 31 2e 36 20 7b 0a 20 20 73 65 74 20 76  -6.1.6 {.  set v
3030: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
3040: 32 20 7b 53 45 4c 45 43 54 20 44 49 53 54 49 4e  2 {SELECT DISTIN
3050: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
3060: 57 48 45 52 45 20 66 31 3d 3d 31 31 7d 7d 20 6d  WHERE f1==11}} m
3070: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
3080: 24 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31  $msg.} {0 {f1 11
3090: 20 66 32 20 32 32 7d 7d 0a 64 6f 5f 74 65 73 74   f2 22}}.do_test
30a0: 20 73 65 6c 65 63 74 31 2d 36 2e 32 20 7b 0a 20   select1-6.2 {. 
30b0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
30c0: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
30d0: 66 31 20 61 73 20 78 79 7a 7a 79 20 46 52 4f 4d  f1 as xyzzy FROM
30e0: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
30f0: 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  f2}} msg].  lapp
3100: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
3110: 7b 78 79 7a 7a 79 20 31 31 20 78 79 7a 7a 79 20  {xyzzy 11 xyzzy 
3120: 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  33}}.do_test sel
3130: 65 63 74 31 2d 36 2e 33 20 7b 0a 20 20 73 65 74  ect1-6.3 {.  set
3140: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
3150: 71 6c 32 20 7b 53 45 4c 45 43 54 20 66 31 20 61  ql2 {SELECT f1 a
3160: 73 20 22 78 79 7a 7a 79 22 20 46 52 4f 4d 20 74  s "xyzzy" FROM t
3170: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 32  est1 ORDER BY f2
3180: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
3190: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 78  d v $msg.} {0 {x
31a0: 79 7a 7a 79 20 31 31 20 78 79 7a 7a 79 20 33 33  yzzy 11 xyzzy 33
31b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  }}.do_test selec
31c0: 74 31 2d 36 2e 33 2e 31 20 7b 0a 20 20 73 65 74  t1-6.3.1 {.  set
31d0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
31e0: 71 6c 32 20 7b 53 45 4c 45 43 54 20 66 31 20 61  ql2 {SELECT f1 a
31f0: 73 20 27 78 79 7a 7a 79 20 27 20 46 52 4f 4d 20  s 'xyzzy ' FROM 
3200: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
3210: 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  2}} msg].  lappe
3220: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
3230: 7b 78 79 7a 7a 79 20 7d 20 31 31 20 7b 78 79 7a  {xyzzy } 11 {xyz
3240: 7a 79 20 7d 20 33 33 7d 7d 0a 64 6f 5f 74 65 73  zy } 33}}.do_tes
3250: 74 20 73 65 6c 65 63 74 31 2d 36 2e 34 20 7b 0a  t select1-6.4 {.
3260: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
3270: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
3280: 20 66 31 2b 46 32 20 61 73 20 78 79 7a 7a 79 20   f1+F2 as xyzzy 
3290: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
32a0: 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20   BY f2}} msg].  
32b0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
32c0: 20 7b 30 20 7b 78 79 7a 7a 79 20 33 33 20 78 79   {0 {xyzzy 33 xy
32d0: 7a 7a 79 20 37 37 7d 7d 0a 64 6f 5f 74 65 73 74  zzy 77}}.do_test
32e0: 20 73 65 6c 65 63 74 31 2d 36 2e 34 61 20 7b 0a   select1-6.4a {.
32f0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
3300: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
3310: 20 66 31 2b 46 32 20 46 52 4f 4d 20 74 65 73 74   f1+F2 FROM test
3320: 31 20 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20  1 ORDER BY f2}} 
3330: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
3340: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 2b 46   $msg.} {0 {f1+F
3350: 32 20 33 33 20 66 31 2b 46 32 20 37 37 7d 7d 0a  2 33 f1+F2 77}}.
3360: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
3370: 36 2e 35 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  6.5 {.  set v [c
3380: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20 7b  atch {execsql2 {
3390: 53 45 4c 45 43 54 20 74 65 73 74 31 2e 66 31 2b  SELECT test1.f1+
33a0: 46 32 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52  F2 FROM test1 OR
33b0: 44 45 52 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d  DER BY f2}} msg]
33c0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
33d0: 67 0a 7d 20 7b 30 20 7b 74 65 73 74 31 2e 66 31  g.} {0 {test1.f1
33e0: 2b 46 32 20 33 33 20 74 65 73 74 31 2e 66 31 2b  +F2 33 test1.f1+
33f0: 46 32 20 37 37 7d 7d 0a 64 6f 5f 74 65 73 74 20  F2 77}}.do_test 
3400: 73 65 6c 65 63 74 31 2d 36 2e 35 2e 31 20 7b 0a  select1-6.5.1 {.
3410: 20 20 65 78 65 63 73 71 6c 32 20 7b 50 52 41 47    execsql2 {PRAG
3420: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
3430: 61 6d 65 73 3d 6f 6e 7d 0a 20 20 73 65 74 20 76  ames=on}.  set v
3440: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
3450: 32 20 7b 53 45 4c 45 43 54 20 74 65 73 74 31 2e  2 {SELECT test1.
3460: 66 31 2b 46 32 20 46 52 4f 4d 20 74 65 73 74 31  f1+F2 FROM test1
3470: 20 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d   ORDER BY f2}} m
3480: 73 67 5d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  sg].  execsql2 {
3490: 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75  PRAGMA full_colu
34a0: 6d 6e 5f 6e 61 6d 65 73 3d 6f 66 66 7d 0a 20 20  mn_names=off}.  
34b0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
34c0: 20 7b 30 20 7b 74 65 73 74 31 2e 66 31 2b 46 32   {0 {test1.f1+F2
34d0: 20 33 33 20 74 65 73 74 31 2e 66 31 2b 46 32 20   33 test1.f1+F2 
34e0: 37 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  77}}.do_test sel
34f0: 65 63 74 31 2d 36 2e 36 20 7b 0a 20 20 73 65 74  ect1-6.6 {.  set
3500: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
3510: 71 6c 32 20 7b 53 45 4c 45 43 54 20 74 65 73 74  ql2 {SELECT test
3520: 31 2e 66 31 2b 46 32 2c 20 74 31 20 46 52 4f 4d  1.f1+F2, t1 FROM
3530: 20 74 65 73 74 31 2c 20 74 65 73 74 32 20 0a 20   test1, test2 . 
3540: 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59          ORDER BY
3550: 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70   f2}} msg].  lap
3560: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
3570: 20 7b 74 65 73 74 31 2e 66 31 2b 46 32 20 33 33   {test1.f1+F2 33
3580: 20 74 31 20 61 62 63 20 74 65 73 74 31 2e 66 31   t1 abc test1.f1
3590: 2b 46 32 20 37 37 20 74 31 20 61 62 63 7d 7d 0a  +F2 77 t1 abc}}.
35a0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
35b0: 36 2e 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  6.7 {.  set v [c
35c0: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 32 20 7b  atch {execsql2 {
35d0: 53 45 4c 45 43 54 20 41 2e 66 31 2c 20 74 31 20  SELECT A.f1, t1 
35e0: 46 52 4f 4d 20 74 65 73 74 31 20 61 73 20 41 2c  FROM test1 as A,
35f0: 20 74 65 73 74 32 20 0a 20 20 20 20 20 20 20 20   test2 .        
3600: 20 4f 52 44 45 52 20 42 59 20 66 32 7d 7d 20 6d   ORDER BY f2}} m
3610: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
3620: 24 6d 73 67 0a 7d 20 7b 30 20 7b 66 31 20 31 31  $msg.} {0 {f1 11
3630: 20 74 31 20 61 62 63 20 66 31 20 33 33 20 74 31   t1 abc f1 33 t1
3640: 20 61 62 63 7d 7d 0a 64 6f 5f 74 65 73 74 20 73   abc}}.do_test s
3650: 65 6c 65 63 74 31 2d 36 2e 38 20 7b 0a 20 20 73  elect1-6.8 {.  s
3660: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
3670: 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 41 2e  csql2 {SELECT A.
3680: 66 31 2c 20 66 31 20 46 52 4f 4d 20 74 65 73 74  f1, f1 FROM test
3690: 31 20 61 73 20 41 2c 20 74 65 73 74 31 20 61 73  1 as A, test1 as
36a0: 20 42 20 0a 20 20 20 20 20 20 20 20 20 4f 52 44   B .         ORD
36b0: 45 52 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a  ER BY f2}} msg].
36c0: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
36d0: 0a 7d 20 7b 31 20 7b 61 6d 62 69 67 75 6f 75 73  .} {1 {ambiguous
36e0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 66 31   column name: f1
36f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  }}.do_test selec
3700: 74 31 2d 36 2e 38 62 20 7b 0a 20 20 73 65 74 20  t1-6.8b {.  set 
3710: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
3720: 6c 32 20 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c  l2 {SELECT A.f1,
3730: 20 42 2e 66 31 20 46 52 4f 4d 20 74 65 73 74 31   B.f1 FROM test1
3740: 20 61 73 20 41 2c 20 74 65 73 74 31 20 61 73 20   as A, test1 as 
3750: 42 20 0a 20 20 20 20 20 20 20 20 20 4f 52 44 45  B .         ORDE
3760: 52 20 42 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20  R BY f2}} msg]. 
3770: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
3780: 7d 20 7b 31 20 7b 61 6d 62 69 67 75 6f 75 73 20  } {1 {ambiguous 
3790: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 66 32 7d  column name: f2}
37a0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
37b0: 31 2d 36 2e 38 63 20 7b 0a 20 20 73 65 74 20 76  1-6.8c {.  set v
37c0: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
37d0: 32 20 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c 20  2 {SELECT A.f1, 
37e0: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 61 73  f1 FROM test1 as
37f0: 20 41 2c 20 74 65 73 74 31 20 61 73 20 41 20 0a   A, test1 as A .
3800: 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42           ORDER B
3810: 59 20 66 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  Y f2}} msg].  la
3820: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
3830: 31 20 7b 61 6d 62 69 67 75 6f 75 73 20 63 6f 6c  1 {ambiguous col
3840: 75 6d 6e 20 6e 61 6d 65 3a 20 41 2e 66 31 7d 7d  umn name: A.f1}}
3850: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
3860: 2d 36 2e 39 2e 31 20 7b 0a 20 20 73 65 74 20 76  -6.9.1 {.  set v
3870: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
3880: 20 7b 53 45 4c 45 43 54 20 41 2e 66 31 2c 20 42   {SELECT A.f1, B
3890: 2e 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 61  .f1 FROM test1 a
38a0: 73 20 41 2c 20 74 65 73 74 31 20 61 73 20 42 20  s A, test1 as B 
38b0: 0a 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20  .         ORDER 
38c0: 42 59 20 41 2e 66 31 2c 20 42 2e 66 31 7d 7d 20  BY A.f1, B.f1}} 
38d0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
38e0: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 31 20 31   $msg.} {0 {11 1
38f0: 31 20 31 31 20 33 33 20 33 33 20 31 31 20 33 33  1 11 33 33 11 33
3900: 20 33 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65   33}}.do_test se
3910: 6c 65 63 74 31 2d 36 2e 39 2e 32 20 7b 0a 20 20  lect1-6.9.2 {.  
3920: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
3930: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 41  ecsql2 {SELECT A
3940: 2e 66 31 2c 20 42 2e 66 31 20 46 52 4f 4d 20 74  .f1, B.f1 FROM t
3950: 65 73 74 31 20 61 73 20 41 2c 20 74 65 73 74 31  est1 as A, test1
3960: 20 61 73 20 42 20 0a 20 20 20 20 20 20 20 20 20   as B .         
3970: 4f 52 44 45 52 20 42 59 20 41 2e 66 31 2c 20 42  ORDER BY A.f1, B
3980: 2e 66 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  .f1}} msg].  lap
3990: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
39a0: 20 7b 66 31 20 31 31 20 66 31 20 31 31 20 66 31   {f1 11 f1 11 f1
39b0: 20 33 33 20 66 31 20 33 33 20 66 31 20 31 31 20   33 f1 33 f1 11 
39c0: 66 31 20 31 31 20 66 31 20 33 33 20 66 31 20 33  f1 11 f1 33 f1 3
39d0: 33 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c  3}}..do_test sel
39e0: 65 63 74 31 2d 36 2e 39 2e 33 20 7b 0a 20 20 64  ect1-6.9.3 {.  d
39f0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 50 52  b eval {.     PR
3a00: 41 47 4d 41 20 73 68 6f 72 74 5f 63 6f 6c 75 6d  AGMA short_colum
3a10: 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20 20  n_names=OFF;.   
3a20: 20 20 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f    PRAGMA full_co
3a30: 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a  lumn_names=OFF;.
3a40: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 32 20 7b    }.  execsql2 {
3a50: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 74 65 73  .     SELECT tes
3a60: 74 31 20 2e 20 66 31 2c 20 74 65 73 74 31 20 2e  t1 . f1, test1 .
3a70: 20 66 32 20 46 52 4f 4d 20 74 65 73 74 31 20 4c   f2 FROM test1 L
3a80: 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 7b 74  IMIT 1.  }.} {{t
3a90: 65 73 74 31 20 2e 20 66 31 7d 20 31 31 20 7b 74  est1 . f1} 11 {t
3aa0: 65 73 74 31 20 2e 20 66 32 7d 20 32 32 7d 0a 64  est1 . f2} 22}.d
3ab0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
3ac0: 2e 39 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c  .9.4 {.  db eval
3ad0: 20 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 73   {.     PRAGMA s
3ae0: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
3af0: 73 3d 4f 46 46 3b 0a 20 20 20 20 20 50 52 41 47  s=OFF;.     PRAG
3b00: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
3b10: 61 6d 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20 65  ames=ON;.  }.  e
3b20: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3b30: 45 4c 45 43 54 20 74 65 73 74 31 20 2e 20 66 31  ELECT test1 . f1
3b40: 2c 20 74 65 73 74 31 20 2e 20 66 32 20 46 52 4f  , test1 . f2 FRO
3b50: 4d 20 74 65 73 74 31 20 4c 49 4d 49 54 20 31 0a  M test1 LIMIT 1.
3b60: 20 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20    }.} {test1.f1 
3b70: 31 31 20 74 65 73 74 31 2e 66 32 20 32 32 7d 0a  11 test1.f2 22}.
3b80: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
3b90: 36 2e 39 2e 35 20 7b 0a 20 20 64 62 20 65 76 61  6.9.5 {.  db eva
3ba0: 6c 20 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20  l {.     PRAGMA 
3bb0: 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  short_column_nam
3bc0: 65 73 3d 4f 46 46 3b 0a 20 20 20 20 20 50 52 41  es=OFF;.     PRA
3bd0: 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f  GMA full_column_
3be0: 6e 61 6d 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20  names=ON;.  }.  
3bf0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20  execsql2 {.     
3c00: 53 45 4c 45 43 54 20 31 32 33 2e 34 35 3b 0a 20  SELECT 123.45;. 
3c10: 20 7d 0a 7d 20 7b 31 32 33 2e 34 35 20 31 32 33   }.} {123.45 123
3c20: 2e 34 35 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  .45}.do_test sel
3c30: 65 63 74 31 2d 36 2e 39 2e 36 20 7b 0a 20 20 65  ect1-6.9.6 {.  e
3c40: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3c50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3c60: 74 31 20 61 2c 20 74 65 73 74 31 20 62 20 4c 49  t1 a, test1 b LI
3c70: 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 61 2e 66  MIT 1.  }.} {a.f
3c80: 31 20 31 31 20 61 2e 66 32 20 32 32 20 62 2e 66  1 11 a.f2 22 b.f
3c90: 31 20 31 31 20 62 2e 66 32 20 32 32 7d 0a 64 6f  1 11 b.f2 22}.do
3ca0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e  _test select1-6.
3cb0: 39 2e 37 20 7b 0a 20 20 73 65 74 20 78 20 5b 65  9.7 {.  set x [e
3cc0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3cd0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3ce0: 74 31 20 61 2c 20 28 73 65 6c 65 63 74 20 35 2c  t1 a, (select 5,
3cf0: 20 36 29 20 4c 49 4d 49 54 20 31 0a 20 20 7d 5d   6) LIMIT 1.  }]
3d00: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
3d10: 73 75 62 71 75 65 72 79 5f 5b 30 2d 39 61 2d 66  subquery_[0-9a-f
3d20: 41 2d 46 5f 5d 2b 7d 20 24 78 20 7b 73 75 62 71  A-F_]+} $x {subq
3d30: 75 65 72 79 7d 20 78 0a 20 20 73 65 74 20 78 0a  uery} x.  set x.
3d40: 7d 20 7b 61 2e 66 31 20 31 31 20 61 2e 66 32 20  } {a.f1 11 a.f2 
3d50: 32 32 20 73 75 62 71 75 65 72 79 2e 35 20 35 20  22 subquery.5 5 
3d60: 73 75 62 71 75 65 72 79 2e 36 20 36 7d 0a 64 6f  subquery.6 6}.do
3d70: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e  _test select1-6.
3d80: 39 2e 38 20 7b 0a 20 20 73 65 74 20 78 20 5b 65  9.8 {.  set x [e
3d90: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
3da0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3db0: 74 31 20 61 2c 20 28 73 65 6c 65 63 74 20 35 20  t1 a, (select 5 
3dc0: 41 53 20 78 2c 20 36 20 41 53 20 79 29 20 41 53  AS x, 6 AS y) AS
3dd0: 20 62 20 4c 49 4d 49 54 20 31 0a 20 20 7d 5d 0a   b LIMIT 1.  }].
3de0: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 73    regsub -all {s
3df0: 75 62 71 75 65 72 79 5f 5b 30 2d 39 61 2d 66 41  ubquery_[0-9a-fA
3e00: 2d 46 5d 2b 5f 7d 20 24 78 20 7b 73 75 62 71 75  -F]+_} $x {subqu
3e10: 65 72 79 7d 20 78 0a 20 20 73 65 74 20 78 0a 7d  ery} x.  set x.}
3e20: 20 7b 61 2e 66 31 20 31 31 20 61 2e 66 32 20 32   {a.f1 11 a.f2 2
3e30: 32 20 62 2e 78 20 35 20 62 2e 79 20 36 7d 0a 64  2 b.x 5 b.y 6}.d
3e40: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
3e50: 2e 39 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .9.9 {.  execsql
3e60: 32 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  2 {.     SELECT 
3e70: 61 2e 66 31 2c 20 62 2e 66 32 20 46 52 4f 4d 20  a.f1, b.f2 FROM 
3e80: 74 65 73 74 31 20 61 2c 20 74 65 73 74 31 20 62  test1 a, test1 b
3e90: 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b   LIMIT 1.  }.} {
3ea0: 74 65 73 74 31 2e 66 31 20 31 31 20 74 65 73 74  test1.f1 11 test
3eb0: 31 2e 66 32 20 32 32 7d 0a 64 6f 5f 74 65 73 74  1.f2 22}.do_test
3ec0: 20 73 65 6c 65 63 74 31 2d 36 2e 39 2e 31 30 20   select1-6.9.10 
3ed0: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
3ee0: 20 20 20 20 53 45 4c 45 43 54 20 66 31 2c 20 74      SELECT f1, t
3ef0: 31 20 46 52 4f 4d 20 74 65 73 74 31 2c 20 74 65  1 FROM test1, te
3f00: 73 74 32 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a  st2 LIMIT 1.  }.
3f10: 7d 20 7b 74 65 73 74 31 2e 66 31 20 31 31 20 74  } {test1.f1 11 t
3f20: 65 73 74 32 2e 74 31 20 61 62 63 7d 0a 64 6f 5f  est2.t1 abc}.do_
3f30: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 39  test select1-6.9
3f40: 2e 31 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .11 {.  db eval 
3f50: 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 73 68  {.     PRAGMA sh
3f60: 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ort_column_names
3f70: 3d 4f 4e 3b 0a 20 20 20 20 20 50 52 41 47 4d 41  =ON;.     PRAGMA
3f80: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
3f90: 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20 65 78 65  es=ON;.  }.  exe
3fa0: 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53 45 4c  csql2 {.     SEL
3fb0: 45 43 54 20 61 2e 66 31 2c 20 62 2e 66 32 20 46  ECT a.f1, b.f2 F
3fc0: 52 4f 4d 20 74 65 73 74 31 20 61 2c 20 74 65 73  ROM test1 a, tes
3fd0: 74 31 20 62 20 4c 49 4d 49 54 20 31 0a 20 20 7d  t1 b LIMIT 1.  }
3fe0: 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20 31 31 20  .} {test1.f1 11 
3ff0: 74 65 73 74 31 2e 66 32 20 32 32 7d 0a 64 6f 5f  test1.f2 22}.do_
4000: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 39  test select1-6.9
4010: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  .12 {.  execsql2
4020: 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 66   {.     SELECT f
4030: 31 2c 20 74 31 20 46 52 4f 4d 20 74 65 73 74 31  1, t1 FROM test1
4040: 2c 20 74 65 73 74 32 20 4c 49 4d 49 54 20 31 0a  , test2 LIMIT 1.
4050: 20 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20    }.} {test1.f1 
4060: 31 31 20 74 65 73 74 32 2e 74 31 20 61 62 63 7d  11 test2.t1 abc}
4070: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
4080: 2d 36 2e 39 2e 31 33 20 7b 0a 20 20 64 62 20 65  -6.9.13 {.  db e
4090: 76 61 6c 20 7b 0a 20 20 20 20 20 50 52 41 47 4d  val {.     PRAGM
40a0: 41 20 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e  A short_column_n
40b0: 61 6d 65 73 3d 4f 4e 3b 0a 20 20 20 20 20 50 52  ames=ON;.     PR
40c0: 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e  AGMA full_column
40d0: 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 20 20 7d 0a  _names=OFF;.  }.
40e0: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
40f0: 20 20 53 45 4c 45 43 54 20 61 2e 66 31 2c 20 62    SELECT a.f1, b
4100: 2e 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 61  .f1 FROM test1 a
4110: 2c 20 74 65 73 74 31 20 62 20 4c 49 4d 49 54 20  , test1 b LIMIT 
4120: 31 0a 20 20 7d 0a 7d 20 7b 66 31 20 31 31 20 66  1.  }.} {f1 11 f
4130: 31 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 11}.do_test se
4140: 6c 65 63 74 31 2d 36 2e 39 2e 31 34 20 7b 0a 20  lect1-6.9.14 {. 
4150: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
4160: 20 53 45 4c 45 43 54 20 66 31 2c 20 74 31 20 46   SELECT f1, t1 F
4170: 52 4f 4d 20 74 65 73 74 31 2c 20 74 65 73 74 32  ROM test1, test2
4180: 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b   LIMIT 1.  }.} {
4190: 66 31 20 31 31 20 74 31 20 61 62 63 7d 0a 64 6f  f1 11 t1 abc}.do
41a0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e  _test select1-6.
41b0: 39 2e 31 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  9.15 {.  db eval
41c0: 20 7b 0a 20 20 20 20 20 50 52 41 47 4d 41 20 73   {.     PRAGMA s
41d0: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
41e0: 73 3d 4f 46 46 3b 0a 20 20 20 20 20 50 52 41 47  s=OFF;.     PRAG
41f0: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
4200: 61 6d 65 73 3d 4f 4e 3b 0a 20 20 7d 0a 20 20 65  ames=ON;.  }.  e
4210: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 53  xecsql2 {.     S
4220: 45 4c 45 43 54 20 61 2e 66 31 2c 20 62 2e 66 31  ELECT a.f1, b.f1
4230: 20 46 52 4f 4d 20 74 65 73 74 31 20 61 2c 20 74   FROM test1 a, t
4240: 65 73 74 31 20 62 20 4c 49 4d 49 54 20 31 0a 20  est1 b LIMIT 1. 
4250: 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66 31 20 31   }.} {test1.f1 1
4260: 31 20 74 65 73 74 31 2e 66 31 20 31 31 7d 0a 64  1 test1.f1 11}.d
4270: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36  o_test select1-6
4280: 2e 39 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  .9.16 {.  execsq
4290: 6c 32 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54  l2 {.     SELECT
42a0: 20 66 31 2c 20 74 31 20 46 52 4f 4d 20 74 65 73   f1, t1 FROM tes
42b0: 74 31 2c 20 74 65 73 74 32 20 4c 49 4d 49 54 20  t1, test2 LIMIT 
42c0: 31 0a 20 20 7d 0a 7d 20 7b 74 65 73 74 31 2e 66  1.  }.} {test1.f
42d0: 31 20 31 31 20 74 65 73 74 32 2e 74 31 20 61 62  1 11 test2.t1 ab
42e0: 63 7d 0a 0a 0a 64 62 20 65 76 61 6c 20 7b 0a 20  c}...db eval {. 
42f0: 20 50 52 41 47 4d 41 20 73 68 6f 72 74 5f 63 6f   PRAGMA short_co
4300: 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 4e 3b 0a 20  lumn_names=ON;. 
4310: 20 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c   PRAGMA full_col
4320: 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 3b 0a 7d  umn_names=OFF;.}
4330: 0a 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70  ..ifcapable comp
4340: 6f 75 6e 64 20 7b 0a 64 6f 5f 74 65 73 74 20 73  ound {.do_test s
4350: 65 6c 65 63 74 31 2d 36 2e 31 30 20 7b 0a 20 20  elect1-6.10 {.  
4360: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
4370: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
4380: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74  ECT f1 FROM test
4390: 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 66  1 UNION SELECT f
43a0: 32 20 46 52 4f 4d 20 74 65 73 74 31 0a 20 20 20  2 FROM test1.   
43b0: 20 4f 52 44 45 52 20 42 59 20 66 32 3b 0a 20 20   ORDER BY f2;.  
43c0: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
43d0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 66  d v $msg.} {0 {f
43e0: 31 20 31 31 20 66 31 20 32 32 20 66 31 20 33 33  1 11 f1 22 f1 33
43f0: 20 66 31 20 34 34 7d 7d 0a 64 6f 5f 74 65 73 74   f1 44}}.do_test
4400: 20 73 65 6c 65 63 74 31 2d 36 2e 31 31 20 7b 0a   select1-6.11 {.
4410: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
4420: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
4430: 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65  ELECT f1 FROM te
4440: 73 74 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54  st1 UNION SELECT
4450: 20 66 32 2b 31 30 30 20 46 52 4f 4d 20 74 65 73   f2+100 FROM tes
4460: 74 31 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20  t1.    ORDER BY 
4470: 66 32 2b 31 30 31 3b 0a 20 20 7d 7d 20 6d 73 67  f2+101;.  }} msg
4480: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
4490: 73 67 0a 7d 20 7b 31 20 7b 31 73 74 20 4f 52 44  sg.} {1 {1st ORD
44a0: 45 52 20 42 59 20 74 65 72 6d 20 64 6f 65 73 20  ER BY term does 
44b0: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 63 6f  not match any co
44c0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75  lumn in the resu
44d0: 6c 74 20 73 65 74 7d 7d 0a 0a 23 20 54 69 63 6b  lt set}}..# Tick
44e0: 65 74 20 23 32 32 39 36 0a 69 66 63 61 70 61 62  et #2296.ifcapab
44f0: 6c 65 20 73 75 62 71 75 65 72 79 26 26 63 6f 6d  le subquery&&com
4500: 70 6f 75 6e 64 20 7b 0a 64 6f 5f 74 65 73 74 20  pound {.do_test 
4510: 73 65 6c 65 63 74 31 2d 36 2e 32 30 20 7b 0a 20  select1-6.20 {. 
4520: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4530: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
4540: 28 61 20 54 45 58 54 2c 20 62 20 54 45 58 54 29  (a TEXT, b TEXT)
4550: 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;.     INSERT IN
4560: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 61 27  TO t6 VALUES('a'
4570: 2c 27 30 27 29 3b 0a 20 20 20 20 20 49 4e 53 45  ,'0');.     INSE
4580: 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45  RT INTO t6 VALUE
4590: 53 28 27 62 27 2c 27 31 27 29 3b 0a 20 20 20 20  S('b','1');.    
45a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
45b0: 56 41 4c 55 45 53 28 27 63 27 2c 27 32 27 29 3b  VALUES('c','2');
45c0: 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  .     INSERT INT
45d0: 4f 20 74 36 20 56 41 4c 55 45 53 28 27 64 27 2c  O t6 VALUES('d',
45e0: 27 33 27 29 3b 0a 20 20 20 20 20 53 45 4c 45 43  '3');.     SELEC
45f0: 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52  T a FROM t6 WHER
4600: 45 20 62 20 49 4e 20 0a 20 20 20 20 20 20 20 20  E b IN .        
4610: 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74  (SELECT b FROM t
4620: 36 20 57 48 45 52 45 20 61 3c 3d 27 62 27 20 55  6 WHERE a<='b' U
4630: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 27 33 27 20  NION SELECT '3' 
4640: 41 53 20 78 0a 20 20 20 20 20 20 20 20 20 20 20  AS x.           
4650: 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31        ORDER BY 1
4660: 20 4c 49 4d 49 54 20 31 29 0a 20 20 20 7d 0a 7d   LIMIT 1).   }.}
4670: 20 7b 61 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   {a}.do_test sel
4680: 65 63 74 31 2d 36 2e 32 31 20 7b 0a 20 20 20 65  ect1-6.21 {.   e
4690: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45  xecsql {.     SE
46a0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 36 20 57  LECT a FROM t6 W
46b0: 48 45 52 45 20 62 20 49 4e 20 0a 20 20 20 20 20  HERE b IN .     
46c0: 20 20 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f     (SELECT b FRO
46d0: 4d 20 74 36 20 57 48 45 52 45 20 61 3c 3d 27 62  M t6 WHERE a<='b
46e0: 27 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 27  ' UNION SELECT '
46f0: 33 27 20 41 53 20 78 0a 20 20 20 20 20 20 20 20  3' AS x.        
4700: 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42           ORDER B
4710: 59 20 31 20 44 45 53 43 20 4c 49 4d 49 54 20 31  Y 1 DESC LIMIT 1
4720: 29 0a 20 20 20 7d 0a 7d 20 7b 64 7d 0a 64 6f 5f  ).   }.} {d}.do_
4730: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 36 2e 32  test select1-6.2
4740: 32 20 7b 0a 20 20 20 65 78 65 63 73 71 6c 20 7b  2 {.   execsql {
4750: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  .     SELECT a F
4760: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 62 20 49  ROM t6 WHERE b I
4770: 4e 20 0a 20 20 20 20 20 20 20 20 28 53 45 4c 45  N .        (SELE
4780: 43 54 20 62 20 46 52 4f 4d 20 74 36 20 57 48 45  CT b FROM t6 WHE
4790: 52 45 20 61 3c 3d 27 62 27 20 55 4e 49 4f 4e 20  RE a<='b' UNION 
47a0: 53 45 4c 45 43 54 20 27 33 27 20 41 53 20 78 0a  SELECT '3' AS x.
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 4f 52 44 45 52 20 42 59 20 62 20 4c 49 4d 49   ORDER BY b LIMI
47d0: 54 20 32 29 0a 20 20 20 20 20 4f 52 44 45 52 20  T 2).     ORDER 
47e0: 42 59 20 61 3b 0a 20 20 20 7d 0a 7d 20 7b 61 20  BY a;.   }.} {a 
47f0: 62 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  b}.do_test selec
4800: 74 31 2d 36 2e 32 33 20 7b 0a 20 20 20 65 78 65  t1-6.23 {.   exe
4810: 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45  csql {.     SELE
4820: 43 54 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45  CT a FROM t6 WHE
4830: 52 45 20 62 20 49 4e 20 0a 20 20 20 20 20 20 20  RE b IN .       
4840: 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20   (SELECT b FROM 
4850: 74 36 20 57 48 45 52 45 20 61 3c 3d 27 62 27 20  t6 WHERE a<='b' 
4860: 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 27 33 27  UNION SELECT '3'
4870: 20 41 53 20 78 0a 20 20 20 20 20 20 20 20 20 20   AS x.          
4880: 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20         ORDER BY 
4890: 78 20 44 45 53 43 20 4c 49 4d 49 54 20 32 29 0a  x DESC LIMIT 2).
48a0: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 3b       ORDER BY a;
48b0: 0a 20 20 20 7d 0a 7d 20 7b 62 20 64 7d 0a 7d 0a  .   }.} {b d}.}.
48c0: 0a 7d 20 3b 23 69 66 63 61 70 61 62 6c 65 20 63  .} ;#ifcapable c
48d0: 6f 6d 70 6f 75 6e 64 0a 0a 64 6f 5f 74 65 73 74  ompound..do_test
48e0: 20 73 65 6c 65 63 74 31 2d 37 2e 31 20 7b 0a 20   select1-7.1 {. 
48f0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
4900: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45  xecsql {.     SE
4910: 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73  LECT f1 FROM tes
4920: 74 31 20 57 48 45 52 45 20 66 32 3d 3b 0a 20 20  t1 WHERE f2=;.  
4930: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
4940: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e  d v $msg.} {1 {n
4950: 65 61 72 20 22 3b 22 3a 20 73 79 6e 74 61 78 20  ear ";": syntax 
4960: 65 72 72 6f 72 7d 7d 0a 69 66 63 61 70 61 62 6c  error}}.ifcapabl
4970: 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64 6f 5f  e compound {.do_
4980: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 37 2e 32  test select1-7.2
4990: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
49a0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
49b0: 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d    SELECT f1 FROM
49c0: 20 74 65 73 74 31 20 55 4e 49 4f 4e 20 53 45 4c   test1 UNION SEL
49d0: 45 43 54 20 57 48 45 52 45 3b 0a 20 20 7d 7d 20  ECT WHERE;.  }} 
49e0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
49f0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61 72   $msg.} {1 {near
4a00: 20 22 57 48 45 52 45 22 3a 20 73 79 6e 74 61 78   "WHERE": syntax
4a10: 20 65 72 72 6f 72 7d 7d 0a 7d 20 3b 23 20 69 66   error}}.} ;# if
4a20: 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64  capable compound
4a30: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
4a40: 2d 37 2e 33 20 7b 0a 20 20 73 65 74 20 76 20 5b  -7.3 {.  set v [
4a50: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
4a60: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
4a70: 65 73 74 31 20 61 73 20 27 68 69 27 2c 20 74 65  est1 as 'hi', te
4a80: 73 74 32 20 61 73 7d 7d 20 6d 73 67 5d 0a 20 20  st2 as}} msg].  
4a90: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
4aa0: 20 7b 31 20 7b 69 6e 63 6f 6d 70 6c 65 74 65 20   {1 {incomplete 
4ab0: 69 6e 70 75 74 7d 7d 0a 64 6f 5f 74 65 73 74 20  input}}.do_test 
4ac0: 73 65 6c 65 63 74 31 2d 37 2e 34 20 7b 0a 20 20  select1-7.4 {.  
4ad0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
4ae0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c  ecsql {.     SEL
4af0: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74  ECT f1 FROM test
4b00: 31 20 4f 52 44 45 52 20 42 59 3b 0a 20 20 7d 7d  1 ORDER BY;.  }}
4b10: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
4b20: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61  v $msg.} {1 {nea
4b30: 72 20 22 3b 22 3a 20 73 79 6e 74 61 78 20 65 72  r ";": syntax er
4b40: 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65  ror}}.do_test se
4b50: 6c 65 63 74 31 2d 37 2e 35 20 7b 0a 20 20 73 65  lect1-7.5 {.  se
4b60: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
4b70: 73 71 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43  sql {.     SELEC
4b80: 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20  T f1 FROM test1 
4b90: 4f 52 44 45 52 20 42 59 20 66 31 20 64 65 73 63  ORDER BY f1 desc
4ba0: 2c 20 66 32 20 77 68 65 72 65 3b 0a 20 20 7d 7d  , f2 where;.  }}
4bb0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
4bc0: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 65 61  v $msg.} {1 {nea
4bd0: 72 20 22 77 68 65 72 65 22 3a 20 73 79 6e 74 61  r "where": synta
4be0: 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73  x error}}.do_tes
4bf0: 74 20 73 65 6c 65 63 74 31 2d 37 2e 36 20 7b 0a  t select1-7.6 {.
4c00: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
4c10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 53  execsql {.     S
4c20: 45 4c 45 43 54 20 63 6f 75 6e 74 28 66 31 2c 66  ELECT count(f1,f
4c30: 32 20 46 52 4f 4d 20 74 65 73 74 31 3b 0a 20 20  2 FROM test1;.  
4c40: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
4c50: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e  d v $msg.} {1 {n
4c60: 65 61 72 20 22 46 52 4f 4d 22 3a 20 73 79 6e 74  ear "FROM": synt
4c70: 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65  ax error}}.do_te
4c80: 73 74 20 73 65 6c 65 63 74 31 2d 37 2e 37 20 7b  st select1-7.7 {
4c90: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
4ca0: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  {execsql {.     
4cb0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 66 31 2c  SELECT count(f1,
4cc0: 66 32 2b 29 20 46 52 4f 4d 20 74 65 73 74 31 3b  f2+) FROM test1;
4cd0: 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  .  }} msg].  lap
4ce0: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
4cf0: 20 7b 6e 65 61 72 20 22 29 22 3a 20 73 79 6e 74   {near ")": synt
4d00: 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65  ax error}}.do_te
4d10: 73 74 20 73 65 6c 65 63 74 31 2d 37 2e 38 20 7b  st select1-7.8 {
4d20: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
4d30: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  {execsql {.     
4d40: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
4d50: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 32  est1 ORDER BY f2
4d60: 2c 20 66 31 2b 3b 0a 20 20 7d 7d 20 6d 73 67 5d  , f1+;.  }} msg]
4d70: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
4d80: 67 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 3b 22  g.} {1 {near ";"
4d90: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d  : syntax error}}
4da0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
4db0: 2d 37 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71  -7.9 {.  catchsq
4dc0: 6c 20 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  l {.     SELECT 
4dd0: 66 31 20 46 52 4f 4d 20 74 65 73 74 31 20 4c 49  f1 FROM test1 LI
4de0: 4d 49 54 20 35 2b 33 20 4f 46 46 53 45 54 20 31  MIT 5+3 OFFSET 1
4df0: 31 20 4f 52 44 45 52 20 42 59 20 66 32 3b 0a 20  1 ORDER BY f2;. 
4e00: 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f   }.} {1 {near "O
4e10: 52 44 45 52 22 3a 20 73 79 6e 74 61 78 20 65 72  RDER": syntax er
4e20: 72 6f 72 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73  ror}}..do_test s
4e30: 65 6c 65 63 74 31 2d 38 2e 31 20 7b 0a 20 20 65  elect1-8.1 {.  e
4e40: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66  xecsql {SELECT f
4e50: 31 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  1 FROM test1 WHE
4e60: 52 45 20 34 2e 33 2b 32 2e 34 20 4f 52 20 31 20  RE 4.3+2.4 OR 1 
4e70: 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b  ORDER BY f1}.} {
4e80: 31 31 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 73  11 33}.do_test s
4e90: 65 6c 65 63 74 31 2d 38 2e 32 20 7b 0a 20 20 65  elect1-8.2 {.  e
4ea0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
4eb0: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74  ECT f1 FROM test
4ec0: 31 20 57 48 45 52 45 20 28 27 78 27 20 7c 7c 20  1 WHERE ('x' || 
4ed0: 66 31 29 20 42 45 54 57 45 45 4e 20 27 78 31 30  f1) BETWEEN 'x10
4ee0: 27 20 41 4e 44 20 27 78 32 30 27 0a 20 20 20 20  ' AND 'x20'.    
4ef0: 4f 52 44 45 52 20 42 59 20 66 31 0a 20 20 7d 0a  ORDER BY f1.  }.
4f00: 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65 73 74 20 73  } {11}.do_test s
4f10: 65 6c 65 63 74 31 2d 38 2e 33 20 7b 0a 20 20 65  elect1-8.3 {.  e
4f20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
4f30: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65 73 74  ECT f1 FROM test
4f40: 31 20 57 48 45 52 45 20 35 2d 33 3d 3d 32 0a 20  1 WHERE 5-3==2. 
4f50: 20 20 20 4f 52 44 45 52 20 42 59 20 66 31 0a 20     ORDER BY f1. 
4f60: 20 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 0a 23 20   }.} {11 33}..# 
4f70: 54 4f 44 4f 3a 20 54 68 69 73 20 74 65 73 74 20  TODO: This test 
4f80: 69 73 20 66 61 69 6c 69 6e 67 20 62 65 63 61 75  is failing becau
4f90: 73 65 20 66 31 20 69 73 20 6e 6f 77 20 62 65 69  se f1 is now bei
4fa0: 6e 67 20 6c 6f 61 64 65 64 20 6f 66 66 20 74 68  ng loaded off th
4fb0: 65 0a 23 20 64 69 73 6b 20 61 73 20 61 20 76 64  e.# disk as a vd
4fc0: 62 65 20 69 6e 74 65 67 65 72 2c 20 6e 6f 74 20  be integer, not 
4fd0: 61 20 73 74 72 69 6e 67 2e 20 48 65 6e 63 65 20  a string. Hence 
4fe0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 66 31 2f  the value of f1/
4ff0: 28 66 31 2d 31 31 29 0a 23 20 63 68 61 6e 67 65  (f1-11).# change
5000: 73 20 62 65 63 61 75 73 65 20 6f 66 20 72 6f 75  s because of rou
5010: 6e 64 69 6e 67 2e 20 44 69 73 61 62 6c 65 20 74  nding. Disable t
5020: 68 65 20 74 65 73 74 20 66 6f 72 20 6e 6f 77 2e  he test for now.
5030: 0a 69 66 20 30 20 7b 0a 64 6f 5f 74 65 73 74 20  .if 0 {.do_test 
5040: 73 65 6c 65 63 74 31 2d 38 2e 34 20 7b 0a 20 20  select1-8.4 {.  
5050: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
5060: 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 66 31  LECT coalesce(f1
5070: 2f 28 66 31 2d 31 31 29 2c 27 78 27 29 2c 0a 20  /(f1-11),'x'),. 
5080: 20 20 20 20 20 20 20 20 20 20 63 6f 61 6c 65 73            coales
5090: 63 65 28 6d 69 6e 28 66 31 2f 28 66 31 2d 31 31  ce(min(f1/(f1-11
50a0: 29 2c 35 29 2c 27 79 27 29 2c 0a 20 20 20 20 20  ),5),'y'),.     
50b0: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 6d        coalesce(m
50c0: 61 78 28 66 31 2f 28 66 31 2d 33 33 29 2c 36 29  ax(f1/(f1-33),6)
50d0: 2c 27 7a 27 29 0a 20 20 20 20 46 52 4f 4d 20 74  ,'z').    FROM t
50e0: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
50f0: 0a 20 20 7d 0a 7d 20 7b 78 20 79 20 36 20 31 2e  .  }.} {x y 6 1.
5100: 35 20 31 2e 35 20 7a 7d 0a 7d 0a 64 6f 5f 74 65  5 1.5 z}.}.do_te
5110: 73 74 20 73 65 6c 65 63 74 31 2d 38 2e 35 20 7b  st select1-8.5 {
5120: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5130: 20 53 45 4c 45 43 54 20 6d 69 6e 28 31 2c 32 2c   SELECT min(1,2,
5140: 33 29 2c 20 2d 6d 61 78 28 31 2c 32 2c 33 29 0a  3), -max(1,2,3).
5150: 20 20 20 20 46 52 4f 4d 20 74 65 73 74 31 20 4f      FROM test1 O
5160: 52 44 45 52 20 42 59 20 66 31 0a 20 20 7d 0a 7d  RDER BY f1.  }.}
5170: 20 7b 31 20 2d 33 20 31 20 2d 33 7d 0a 0a 0a 23   {1 -3 1 -3}...#
5180: 20 43 68 65 63 6b 20 74 68 65 20 62 65 68 61 76   Check the behav
5190: 69 6f 72 20 77 68 65 6e 20 74 68 65 20 72 65 73  ior when the res
51a0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
51b0: 0a 23 0a 23 20 53 51 4c 69 74 65 20 76 33 20 61  .#.# SQLite v3 a
51c0: 6c 77 61 79 73 20 73 65 74 73 20 72 28 2a 29 2e  lways sets r(*).
51d0: 0a 23 0a 23 20 64 6f 5f 74 65 73 74 20 73 65 6c  .#.# do_test sel
51e0: 65 63 74 31 2d 39 2e 31 20 7b 0a 23 20 20 20 63  ect1-9.1 {.#   c
51f0: 61 74 63 68 20 7b 75 6e 73 65 74 20 72 7d 0a 23  atch {unset r}.#
5200: 20 20 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a 23     set r(*) {}.#
5210: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
5220: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
5230: 57 48 45 52 45 20 66 31 3c 30 7d 20 72 20 7b 7d  WHERE f1<0} r {}
5240: 0a 23 20 20 20 73 65 74 20 72 28 2a 29 0a 23 20  .#   set r(*).# 
5250: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  } {}.do_test sel
5260: 65 63 74 31 2d 39 2e 32 20 7b 0a 20 20 65 78 65  ect1-9.2 {.  exe
5270: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 6d 70  csql {PRAGMA emp
5280: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
5290: 63 6b 73 3d 6f 6e 7d 0a 20 20 63 61 74 63 68 20  cks=on}.  catch 
52a0: 7b 75 6e 73 65 74 20 72 7d 0a 20 20 73 65 74 20  {unset r}.  set 
52b0: 72 28 2a 29 20 7b 7d 0a 20 20 64 62 20 65 76 61  r(*) {}.  db eva
52c0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
52d0: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3c   test1 WHERE f1<
52e0: 30 7d 20 72 20 7b 7d 0a 20 20 73 65 74 20 72 28  0} r {}.  set r(
52f0: 2a 29 0a 7d 20 7b 66 31 20 66 32 7d 0a 69 66 63  *).} {f1 f2}.ifc
5300: 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20  apable subquery 
5310: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65  {.  do_test sele
5320: 63 74 31 2d 39 2e 33 20 7b 0a 20 20 20 20 73 65  ct1-9.3 {.    se
5330: 74 20 72 28 2a 29 20 7b 7d 0a 20 20 20 20 64 62  t r(*) {}.    db
5340: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20   eval {SELECT * 
5350: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
5360: 20 66 31 3c 28 73 65 6c 65 63 74 20 63 6f 75 6e   f1<(select coun
5370: 74 28 2a 29 20 66 72 6f 6d 20 74 65 73 74 32 29  t(*) from test2)
5380: 7d 20 72 20 7b 7d 0a 20 20 20 20 73 65 74 20 72  } r {}.    set r
5390: 28 2a 29 0a 20 20 7d 20 7b 66 31 20 66 32 7d 0a  (*).  } {f1 f2}.
53a0: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
53b0: 31 2d 39 2e 34 20 7b 0a 20 20 73 65 74 20 72 28  1-9.4 {.  set r(
53c0: 2a 29 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c 20  *) {}.  db eval 
53d0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
53e0: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
53f0: 7d 20 72 20 7b 7d 0a 20 20 73 65 74 20 72 28 2a  } r {}.  set r(*
5400: 29 0a 7d 20 7b 66 31 20 66 32 7d 0a 64 6f 5f 74  ).} {f1 f2}.do_t
5410: 65 73 74 20 73 65 6c 65 63 74 31 2d 39 2e 35 20  est select1-9.5 
5420: 7b 0a 20 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a  {.  set r(*) {}.
5430: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
5440: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
5450: 48 45 52 45 20 66 31 3c 30 20 4f 52 44 45 52 20  HERE f1<0 ORDER 
5460: 42 59 20 66 31 7d 20 72 20 7b 7d 0a 20 20 73 65  BY f1} r {}.  se
5470: 74 20 72 28 2a 29 0a 7d 20 7b 66 31 20 66 32 7d  t r(*).} {f1 f2}
5480: 0a 75 6e 73 65 74 20 72 0a 0a 23 20 43 68 65 63  .unset r..# Chec
5490: 6b 20 66 6f 72 20 4f 52 44 45 52 20 42 59 20 63  k for ORDER BY c
54a0: 6c 61 75 73 65 73 20 74 68 61 74 20 72 65 66 65  lauses that refe
54b0: 72 20 74 6f 20 61 6e 20 41 53 20 6e 61 6d 65 20  r to an AS name 
54c0: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69  in the column li
54d0: 73 74 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c  st.#.do_test sel
54e0: 65 63 74 31 2d 31 30 2e 31 20 7b 0a 20 20 65 78  ect1-10.1 {.  ex
54f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
5500: 43 54 20 66 31 20 41 53 20 78 20 46 52 4f 4d 20  CT f1 AS x FROM 
5510: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 78  test1 ORDER BY x
5520: 0a 20 20 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 64  .  }.} {11 33}.d
5530: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
5540: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
5550: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66 31 20  {.    SELECT f1 
5560: 41 53 20 78 20 46 52 4f 4d 20 74 65 73 74 31 20  AS x FROM test1 
5570: 4f 52 44 45 52 20 42 59 20 2d 78 0a 20 20 7d 0a  ORDER BY -x.  }.
5580: 7d 20 7b 33 33 20 31 31 7d 0a 64 6f 5f 74 65 73  } {33 11}.do_tes
5590: 74 20 73 65 6c 65 63 74 31 2d 31 30 2e 33 20 7b  t select1-10.3 {
55a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
55b0: 20 53 45 4c 45 43 54 20 66 31 2d 32 33 20 41 53   SELECT f1-23 AS
55c0: 20 78 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   x FROM test1 OR
55d0: 44 45 52 20 42 59 20 61 62 73 28 78 29 0a 20 20  DER BY abs(x).  
55e0: 7d 0a 7d 20 7b 31 30 20 2d 31 32 7d 0a 64 6f 5f  }.} {10 -12}.do_
55f0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e  test select1-10.
5600: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
5610: 20 20 20 20 53 45 4c 45 43 54 20 66 31 2d 32 33      SELECT f1-23
5620: 20 41 53 20 78 20 46 52 4f 4d 20 74 65 73 74 31   AS x FROM test1
5630: 20 4f 52 44 45 52 20 42 59 20 2d 61 62 73 28 78   ORDER BY -abs(x
5640: 29 0a 20 20 7d 0a 7d 20 7b 2d 31 32 20 31 30 7d  ).  }.} {-12 10}
5650: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
5660: 2d 31 30 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  -10.5 {.  execsq
5670: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66  l {.    SELECT f
5680: 31 2d 32 32 20 41 53 20 78 2c 20 66 32 2d 32 32  1-22 AS x, f2-22
5690: 20 61 73 20 79 20 46 52 4f 4d 20 74 65 73 74 31   as y FROM test1
56a0: 0a 20 20 7d 0a 7d 20 7b 2d 31 31 20 30 20 31 31  .  }.} {-11 0 11
56b0: 20 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c   22}.do_test sel
56c0: 65 63 74 31 2d 31 30 2e 36 20 7b 0a 20 20 65 78  ect1-10.6 {.  ex
56d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
56e0: 43 54 20 66 31 2d 32 32 20 41 53 20 78 2c 20 66  CT f1-22 AS x, f
56f0: 32 2d 32 32 20 61 73 20 79 20 46 52 4f 4d 20 74  2-22 as y FROM t
5700: 65 73 74 31 20 57 48 45 52 45 20 78 3e 30 20 41  est1 WHERE x>0 A
5710: 4e 44 20 79 3c 35 30 0a 20 20 7d 0a 7d 20 7b 31  ND y<50.  }.} {1
5720: 31 20 32 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 22}.do_test se
5730: 6c 65 63 74 31 2d 31 30 2e 37 20 7b 0a 20 20 65  lect1-10.7 {.  e
5740: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5750: 45 43 54 20 66 31 20 43 4f 4c 4c 41 54 45 20 6e  ECT f1 COLLATE n
5760: 6f 63 61 73 65 20 41 53 20 78 20 46 52 4f 4d 20  ocase AS x FROM 
5770: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 78  test1 ORDER BY x
5780: 0a 20 20 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 0a  .  }.} {11 33}..
5790: 23 20 43 68 65 63 6b 20 74 68 65 20 61 62 69 6c  # Check the abil
57a0: 69 74 79 20 74 6f 20 73 70 65 63 69 66 79 20 22  ity to specify "
57b0: 54 41 42 4c 45 2e 2a 22 20 69 6e 20 74 68 65 20  TABLE.*" in the 
57c0: 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
57d0: 53 45 4c 45 43 54 0a 23 0a 64 6f 5f 74 65 73 74  SELECT.#.do_test
57e0: 20 73 65 6c 65 63 74 31 2d 31 31 2e 31 20 7b 0a   select1-11.1 {.
57f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5800: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33 3b 0a  DELETE FROM t3;.
5810: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
5820: 74 34 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t4;.    INSERT I
5830: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c  NTO t3 VALUES(1,
5840: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
5850: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 33 2c  NTO t4 VALUES(3,
5860: 34 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  4);.    SELECT *
5870: 20 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20   FROM t3, t4;.  
5880: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f  }.} {1 2 3 4}.do
5890: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31  _test select1-11
58a0: 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.1 {.  execsql
58b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
58c0: 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d  FROM t3, t4;.  }
58d0: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f  .} {1 2 3 4}.do_
58e0: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e  test select1-11.
58f0: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  2.2 {.  execsql2
5900: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
5910: 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d  FROM t3, t4;.  }
5920: 0a 7d 20 7b 61 20 33 20 62 20 34 20 61 20 33 20  .} {a 3 b 4 a 3 
5930: 62 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  b 4}.do_test sel
5940: 65 63 74 31 2d 31 31 2e 34 2e 31 20 7b 0a 20 20  ect1-11.4.1 {.  
5950: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
5960: 4c 45 43 54 20 74 33 2e 2a 2c 20 74 34 2e 62 20  LECT t3.*, t4.b 
5970: 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d  FROM t3, t4;.  }
5980: 0a 7d 20 7b 31 20 32 20 34 7d 0a 64 6f 5f 74 65  .} {1 2 4}.do_te
5990: 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 34 2e  st select1-11.4.
59a0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
59b0: 20 20 20 20 53 45 4c 45 43 54 20 22 74 33 22 2e      SELECT "t3".
59c0: 2a 2c 20 74 34 2e 62 20 46 52 4f 4d 20 74 33 2c  *, t4.b FROM t3,
59d0: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t4;.  }.} {1 2 
59e0: 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  4}.do_test selec
59f0: 74 31 2d 31 31 2e 35 2e 31 20 7b 0a 20 20 65 78  t1-11.5.1 {.  ex
5a00: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
5a10: 45 43 54 20 74 33 2e 2a 2c 20 74 34 2e 62 20 46  ECT t3.*, t4.b F
5a20: 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a  ROM t3, t4;.  }.
5a30: 7d 20 7b 61 20 31 20 62 20 34 20 62 20 34 7d 0a  } {a 1 b 4 b 4}.
5a40: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
5a50: 31 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.6 {.  execsql
5a60: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  2 {.    SELECT x
5a70: 2e 2a 2c 20 79 2e 62 20 46 52 4f 4d 20 74 33 20  .*, y.b FROM t3 
5a80: 41 53 20 78 2c 20 74 34 20 41 53 20 79 3b 0a 20  AS x, t4 AS y;. 
5a90: 20 7d 0a 7d 20 7b 61 20 31 20 62 20 34 20 62 20   }.} {a 1 b 4 b 
5aa0: 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  4}.do_test selec
5ab0: 74 31 2d 31 31 2e 37 20 7b 0a 20 20 65 78 65 63  t1-11.7 {.  exec
5ac0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
5ad0: 20 74 33 2e 62 2c 20 74 34 2e 2a 20 46 52 4f 4d   t3.b, t4.* FROM
5ae0: 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b   t3, t4;.  }.} {
5af0: 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73  2 3 4}.do_test s
5b00: 65 6c 65 63 74 31 2d 31 31 2e 38 20 7b 0a 20 20  elect1-11.8 {.  
5b10: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
5b20: 45 4c 45 43 54 20 74 33 2e 62 2c 20 74 34 2e 2a  ELECT t3.b, t4.*
5b30: 20 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20   FROM t3, t4;.  
5b40: 7d 0a 7d 20 7b 62 20 34 20 61 20 33 20 62 20 34  }.} {b 4 a 3 b 4
5b50: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
5b60: 31 2d 31 31 2e 39 20 7b 0a 20 20 65 78 65 63 73  1-11.9 {.  execs
5b70: 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ql2 {.    SELECT
5b80: 20 78 2e 62 2c 20 79 2e 2a 20 46 52 4f 4d 20 74   x.b, y.* FROM t
5b90: 33 20 41 53 20 78 2c 20 74 34 20 41 53 20 79 3b  3 AS x, t4 AS y;
5ba0: 0a 20 20 7d 0a 7d 20 7b 62 20 34 20 61 20 33 20  .  }.} {b 4 a 3 
5bb0: 62 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  b 4}.do_test sel
5bc0: 65 63 74 31 2d 31 31 2e 31 30 20 7b 0a 20 20 63  ect1-11.10 {.  c
5bd0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
5be0: 4c 45 43 54 20 74 35 2e 2a 20 46 52 4f 4d 20 74  LECT t5.* FROM t
5bf0: 33 2c 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20  3, t4;.  }.} {1 
5c00: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
5c10: 74 35 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  t5}}.do_test sel
5c20: 65 63 74 31 2d 31 31 2e 31 31 20 7b 0a 20 20 63  ect1-11.11 {.  c
5c30: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
5c40: 4c 45 43 54 20 74 33 2e 2a 20 46 52 4f 4d 20 74  LECT t3.* FROM t
5c50: 33 20 41 53 20 78 2c 20 74 34 3b 0a 20 20 7d 0a  3 AS x, t4;.  }.
5c60: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
5c70: 62 6c 65 3a 20 74 33 7d 7d 0a 69 66 63 61 70 61  ble: t3}}.ifcapa
5c80: 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20  ble subquery {. 
5c90: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
5ca0: 2d 31 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65  -11.12 {.    exe
5cb0: 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45  csql2 {.      SE
5cc0: 4c 45 43 54 20 74 33 2e 2a 20 46 52 4f 4d 20 74  LECT t3.* FROM t
5cd0: 33 2c 20 28 53 45 4c 45 43 54 20 6d 61 78 28 61  3, (SELECT max(a
5ce0: 29 2c 20 6d 61 78 28 62 29 20 46 52 4f 4d 20 74  ), max(b) FROM t
5cf0: 34 29 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 20  4).    }.  } {a 
5d00: 31 20 62 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74  1 b 2}.  do_test
5d10: 20 73 65 6c 65 63 74 31 2d 31 31 2e 31 33 20 7b   select1-11.13 {
5d20: 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a  .    execsql2 {.
5d30: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e        SELECT t3.
5d40: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 6d  * FROM (SELECT m
5d50: 61 78 28 61 29 2c 20 6d 61 78 28 62 29 20 46 52  ax(a), max(b) FR
5d60: 4f 4d 20 74 34 29 2c 20 74 33 0a 20 20 20 20 7d  OM t4), t3.    }
5d70: 0a 20 20 7d 20 7b 61 20 31 20 62 20 32 7d 0a 20  .  } {a 1 b 2}. 
5d80: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
5d90: 2d 31 31 2e 31 34 20 7b 0a 20 20 20 20 65 78 65  -11.14 {.    exe
5da0: 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45  csql2 {.      SE
5db0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 2c 20  LECT * FROM t3, 
5dc0: 28 53 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 20  (SELECT max(a), 
5dd0: 6d 61 78 28 62 29 20 46 52 4f 4d 20 74 34 29 20  max(b) FROM t4) 
5de0: 41 53 20 27 74 78 27 0a 20 20 20 20 7d 0a 20 20  AS 'tx'.    }.  
5df0: 7d 20 7b 61 20 31 20 62 20 32 20 6d 61 78 28 61  } {a 1 b 2 max(a
5e00: 29 20 33 20 6d 61 78 28 62 29 20 34 7d 0a 20 20  ) 3 max(b) 4}.  
5e10: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
5e20: 31 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65 63  11.15 {.    exec
5e30: 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c  sql2 {.      SEL
5e40: 45 43 54 20 79 2e 2a 2c 20 74 33 2e 2a 20 46 52  ECT y.*, t3.* FR
5e50: 4f 4d 20 74 33 2c 20 28 53 45 4c 45 43 54 20 6d  OM t3, (SELECT m
5e60: 61 78 28 61 29 2c 20 6d 61 78 28 62 29 20 46 52  ax(a), max(b) FR
5e70: 4f 4d 20 74 34 29 20 41 53 20 79 0a 20 20 20 20  OM t4) AS y.    
5e80: 7d 0a 20 20 7d 20 7b 6d 61 78 28 61 29 20 33 20  }.  } {max(a) 3 
5e90: 6d 61 78 28 62 29 20 34 20 61 20 31 20 62 20 32  max(b) 4 a 1 b 2
5ea0: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  }.}.do_test sele
5eb0: 63 74 31 2d 31 31 2e 31 36 20 7b 0a 20 20 65 78  ct1-11.16 {.  ex
5ec0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
5ed0: 45 43 54 20 79 2e 2a 20 46 52 4f 4d 20 74 33 20  ECT y.* FROM t3 
5ee0: 61 73 20 79 2c 20 74 34 20 61 73 20 7a 0a 20 20  as y, t4 as z.  
5ef0: 7d 0a 7d 20 7b 61 20 31 20 62 20 32 7d 0a 0a 23  }.} {a 1 b 2}..#
5f00: 20 54 65 73 74 73 20 6f 66 20 53 45 4c 45 43 54   Tests of SELECT
5f10: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
5f20: 6f 75 74 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  out a FROM claus
5f30: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c  e..#.do_test sel
5f40: 65 63 74 31 2d 31 32 2e 31 20 7b 0a 20 20 65 78  ect1-12.1 {.  ex
5f50: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
5f60: 45 43 54 20 31 2b 32 2b 33 0a 20 20 7d 0a 7d 20  ECT 1+2+3.  }.} 
5f70: 7b 31 2b 32 2b 33 20 36 7d 0a 64 6f 5f 74 65 73  {1+2+3 6}.do_tes
5f80: 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 32 20 7b  t select1-12.2 {
5f90: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
5fa0: 20 20 53 45 4c 45 43 54 20 31 2c 27 68 65 6c 6c    SELECT 1,'hell
5fb0: 6f 27 2c 32 0a 20 20 7d 0a 7d 20 7b 31 20 31 20  o',2.  }.} {1 1 
5fc0: 27 68 65 6c 6c 6f 27 20 68 65 6c 6c 6f 20 32 20  'hello' hello 2 
5fd0: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  2}.do_test selec
5fe0: 74 31 2d 31 32 2e 33 20 7b 0a 20 20 65 78 65 63  t1-12.3 {.  exec
5ff0: 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  sql2 {.    SELEC
6000: 54 20 31 20 41 53 20 27 61 27 2c 27 68 65 6c 6c  T 1 AS 'a','hell
6010: 6f 27 20 41 53 20 27 62 27 2c 32 20 41 53 20 27  o' AS 'b',2 AS '
6020: 63 27 0a 20 20 7d 0a 7d 20 7b 61 20 31 20 62 20  c'.  }.} {a 1 b 
6030: 68 65 6c 6c 6f 20 63 20 32 7d 0a 64 6f 5f 74 65  hello c 2}.do_te
6040: 73 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 34 20  st select1-12.4 
6050: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6060: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33    DELETE FROM t3
6070: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6080: 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32 29  O t3 VALUES(1,2)
6090: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61  ;.  }.} {}..ifca
60a0: 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b  pable compound {
60b0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
60c0: 2d 31 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  -12.5 {.  execsq
60d0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
60e0: 20 46 52 4f 4d 20 74 33 20 55 4e 49 4f 4e 20 53   FROM t3 UNION S
60f0: 45 4c 45 43 54 20 33 20 41 53 20 27 61 27 2c 20  ELECT 3 AS 'a', 
6100: 34 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  4 ORDER BY a;.  
6110: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 64  }.} {1 2 3 4}..d
6120: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  o_test select1-1
6130: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.6 {.  execsql 
6140: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 33 2c 20  {.    SELECT 3, 
6150: 34 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a  4 UNION SELECT *
6160: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20   FROM t3;.  }.} 
6170: 7b 31 20 32 20 33 20 34 7d 0a 7d 20 3b 23 20 69  {1 2 3 4}.} ;# i
6180: 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e  fcapable compoun
6190: 64 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62  d..ifcapable sub
61a0: 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73  query {.  do_tes
61b0: 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 37 20 7b  t select1-12.7 {
61c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
61d0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
61e0: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 28 53  OM t3 WHERE a=(S
61f0: 45 4c 45 43 54 20 31 29 3b 0a 20 20 20 20 7d 0a  ELECT 1);.    }.
6200: 20 20 7d 20 7b 31 20 32 7d 0a 20 20 64 6f 5f 74    } {1 2}.  do_t
6210: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 38  est select1-12.8
6220: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
6230: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
6240: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
6250: 28 53 45 4c 45 43 54 20 32 29 3b 0a 20 20 20 20  (SELECT 2);.    
6260: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 69 66 63 61  }.  } {}.}..ifca
6270: 70 61 62 6c 65 20 7b 63 6f 6d 70 6f 75 6e 64 20  pable {compound 
6280: 26 26 20 73 75 62 71 75 65 72 79 7d 20 7b 0a 20  && subquery} {. 
6290: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
62a0: 2d 31 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63  -12.9 {.    exec
62b0: 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c  sql2 {.      SEL
62c0: 45 43 54 20 78 20 46 52 4f 4d 20 28 0a 20 20 20  ECT x FROM (.   
62d0: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 41 53       SELECT a AS
62e0: 20 78 2c 20 62 20 41 53 20 79 20 46 52 4f 4d 20   x, b AS y FROM 
62f0: 74 33 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  t3 UNION SELECT 
6300: 61 2c 62 20 46 52 4f 4d 20 74 34 20 4f 52 44 45  a,b FROM t4 ORDE
6310: 52 20 42 59 20 61 2c 62 0a 20 20 20 20 20 20 29  R BY a,b.      )
6320: 20 4f 52 44 45 52 20 42 59 20 78 3b 0a 20 20 20   ORDER BY x;.   
6330: 20 7d 0a 20 20 7d 20 7b 78 20 31 20 78 20 33 7d   }.  } {x 1 x 3}
6340: 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .  do_test selec
6350: 74 31 2d 31 32 2e 31 30 20 7b 0a 20 20 20 20 65  t1-12.10 {.    e
6360: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20  xecsql2 {.      
6370: 53 45 4c 45 43 54 20 7a 2e 78 20 46 52 4f 4d 20  SELECT z.x FROM 
6380: 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  (.        SELECT
6390: 20 61 20 41 53 20 78 2c 62 20 41 53 20 79 20 46   a AS x,b AS y F
63a0: 52 4f 4d 20 74 33 20 55 4e 49 4f 4e 20 53 45 4c  ROM t3 UNION SEL
63b0: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 34  ECT a, b FROM t4
63c0: 20 4f 52 44 45 52 20 42 59 20 61 2c 62 0a 20 20   ORDER BY a,b.  
63d0: 20 20 20 20 29 20 41 53 20 27 7a 27 20 4f 52 44      ) AS 'z' ORD
63e0: 45 52 20 42 59 20 78 3b 0a 20 20 20 20 7d 0a 20  ER BY x;.    }. 
63f0: 20 7d 20 7b 78 20 31 20 78 20 33 7d 0a 7d 20 3b   } {x 1 x 3}.} ;
6400: 23 20 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70  # ifcapable comp
6410: 6f 75 6e 64 0a 0a 0a 23 20 43 68 65 63 6b 20 66  ound...# Check f
6420: 6f 72 20 61 20 56 44 42 45 20 73 74 61 63 6b 20  or a VDBE stack 
6430: 67 72 6f 77 74 68 20 70 72 6f 62 6c 65 6d 20 74  growth problem t
6440: 68 61 74 20 65 78 69 73 74 65 64 20 61 74 20 6f  hat existed at o
6450: 6e 65 20 70 6f 69 6e 74 2e 0a 23 0a 69 66 63 61  ne point..#.ifca
6460: 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b  pable subquery {
6470: 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .  do_test selec
6480: 74 31 2d 31 33 2e 31 20 7b 0a 20 20 20 20 65 78  t1-13.1 {.    ex
6490: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45  ecsql {.      BE
64a0: 47 49 4e 3b 0a 20 20 20 20 20 20 63 72 65 61 74  GIN;.      creat
64b0: 65 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62  e TABLE abc(a, b
64c0: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
64d0: 28 61 2c 20 62 29 29 3b 0a 20 20 20 20 20 20 49  (a, b));.      I
64e0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56  NSERT INTO abc V
64f0: 41 4c 55 45 53 28 31 2c 20 31 2c 20 31 29 3b 0a  ALUES(1, 1, 1);.
6500: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 20 7b 73      }.    for {s
6510: 65 74 20 69 20 30 7d 20 7b 24 69 3c 31 30 7d 20  et i 0} {$i<10} 
6520: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20  {incr i} {.     
6530: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
6540: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
6550: 62 63 20 53 45 4c 45 43 54 20 61 2b 28 73 65 6c  bc SELECT a+(sel
6560: 65 63 74 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ect max(a) FROM 
6570: 61 62 63 29 2c 20 0a 20 20 20 20 20 20 20 20 20  abc), .         
6580: 20 20 20 62 2b 28 73 65 6c 65 63 74 20 6d 61 78     b+(select max
6590: 28 61 29 20 46 52 4f 4d 20 61 62 63 29 2c 20 63  (a) FROM abc), c
65a0: 2b 28 73 65 6c 65 63 74 20 6d 61 78 28 61 29 20  +(select max(a) 
65b0: 46 52 4f 4d 20 61 62 63 29 20 46 52 4f 4d 20 61  FROM abc) FROM a
65c0: 62 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  bc;.      }.    
65d0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 43  }.    execsql {C
65e0: 4f 4d 4d 49 54 7d 0a 20 20 0a 20 20 20 20 23 20  OMMIT}.  .    # 
65f0: 54 68 69 73 20 75 73 65 64 20 74 6f 20 73 65 67  This used to seg
6600: 2d 66 61 75 6c 74 20 77 68 65 6e 20 74 68 65 20  -fault when the 
6610: 70 72 6f 62 6c 65 6d 20 65 78 69 73 74 65 64 2e  problem existed.
6620: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6630: 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e       SELECT coun
6640: 74 28 0a 20 20 20 20 20 20 20 20 28 53 45 4c 45  t(.        (SELE
6650: 43 54 20 61 20 46 52 4f 4d 20 61 62 63 20 57 48  CT a FROM abc WH
6660: 45 52 45 20 61 20 3d 20 4e 55 4c 4c 20 41 4e 44  ERE a = NULL AND
6670: 20 62 20 3e 3d 20 75 70 70 65 72 2e 63 29 20 0a   b >= upper.c) .
6680: 20 20 20 20 20 20 29 20 46 52 4f 4d 20 61 62 63        ) FROM abc
6690: 20 41 53 20 75 70 70 65 72 3b 0a 20 20 20 20 7d   AS upper;.    }
66a0: 0a 20 20 7d 20 7b 30 7d 0a 7d 0a 0a 66 6f 72 65  .  } {0}.}..fore
66b0: 61 63 68 20 74 61 62 20 5b 64 62 20 65 76 61 6c  ach tab [db eval
66c0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
66d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
66e0: 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
66f0: 61 62 6c 65 27 7d 5d 20 7b 0a 20 20 64 62 20 65  able'}] {.  db e
6700: 76 61 6c 20 22 44 52 4f 50 20 54 41 42 4c 45 20  val "DROP TABLE 
6710: 24 74 61 62 22 0a 7d 0a 64 62 20 63 6c 6f 73 65  $tab".}.db close
6720: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
6730: 2e 64 62 0a 0a 64 6f 5f 74 65 73 74 20 73 65 6c  .db..do_test sel
6740: 65 63 74 31 2d 31 34 2e 31 20 7b 0a 20 20 65 78  ect1-14.1 {.  ex
6750: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c  ecsql { .    SEL
6760: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
6770: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 72  e_master WHERE r
6780: 6f 77 69 64 3e 31 30 3b 20 0a 20 20 20 20 53 45  owid>10; .    SE
6790: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
67a0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
67b0: 72 6f 77 69 64 3d 31 30 3b 0a 20 20 20 20 53 45  rowid=10;.    SE
67c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
67d0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
67e0: 72 6f 77 69 64 3c 31 30 3b 0a 20 20 20 20 53 45  rowid<10;.    SE
67f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
6800: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
6810: 72 6f 77 69 64 3c 3d 31 30 3b 0a 20 20 20 20 53  rowid<=10;.    S
6820: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
6830: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
6840: 20 72 6f 77 69 64 3e 3d 31 30 3b 0a 20 20 20 20   rowid>=10;.    
6850: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
6860: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d  lite_master;.  }
6870: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 73 65  .} {}.do_test se
6880: 6c 65 63 74 31 2d 31 34 2e 32 20 7b 0a 20 20 65  lect1-14.2 {.  e
6890: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45  xecsql { .    SE
68a0: 4c 45 43 54 20 31 30 20 49 4e 20 28 53 45 4c 45  LECT 10 IN (SELE
68b0: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71  CT rowid FROM sq
68c0: 6c 69 74 65 5f 6d 61 73 74 65 72 29 3b 0a 20 20  lite_master);.  
68d0: 7d 0a 7d 20 7b 30 7d 0a 0a 69 66 20 7b 5b 64 62  }.} {0}..if {[db
68e0: 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 6c 6f 63   one {PRAGMA loc
68f0: 6b 69 6e 67 5f 6d 6f 64 65 7d 5d 3d 3d 22 6e 6f  king_mode}]=="no
6900: 72 6d 61 6c 22 7d 20 7b 0a 20 20 23 20 43 68 65  rmal"} {.  # Che
6910: 63 6b 20 74 68 61 74 20 74 69 63 6b 65 74 20 23  ck that ticket #
6920: 33 37 37 31 20 68 61 73 20 62 65 65 6e 20 66 69  3771 has been fi
6930: 78 65 64 2e 20 20 54 68 69 73 20 74 65 73 74 20  xed.  This test 
6940: 64 6f 65 73 20 6e 6f 74 0a 20 20 23 20 77 6f 72  does not.  # wor
6950: 6b 20 77 69 74 68 20 6c 6f 63 6b 69 6e 67 5f 6d  k with locking_m
6960: 6f 64 65 3d 45 58 43 4c 55 53 49 56 45 20 73 6f  ode=EXCLUSIVE so
6970: 20 64 69 73 61 62 6c 65 20 69 6e 20 74 68 61 74   disable in that
6980: 20 63 61 73 65 2e 0a 20 20 23 0a 20 20 64 6f 5f   case..  #.  do_
6990: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 35 2e  test select1-15.
69a0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
69b0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
69c0: 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20  ABLE t1(a);.    
69d0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
69e0: 31 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20  1 ON t1(a);.    
69f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6a00: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20   VALUES(1);.    
6a10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6a20: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
6a30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6a40: 20 56 41 4c 55 45 53 28 33 29 3b 0a 20 20 20 20   VALUES(3);.    
6a50: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
6a60: 73 74 20 73 65 6c 65 63 74 31 2d 31 35 2e 32 20  st select1-15.2 
6a70: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
6a80: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
6a90: 65 63 73 71 6c 20 7b 20 44 52 4f 50 20 49 4e 44  ecsql { DROP IND
6aa0: 45 58 20 69 31 20 7d 20 64 62 32 0a 20 20 20 20  EX i1 } db2.    
6ab0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d  db2 close.  } {}
6ac0: 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .  do_test selec
6ad0: 74 31 2d 31 35 2e 33 20 7b 0a 20 20 20 20 65 78  t1-15.3 {.    ex
6ae0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 32  ecsql { SELECT 2
6af0: 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52   IN (SELECT a FR
6b00: 4f 4d 20 74 31 29 20 7d 0a 20 20 7d 20 7b 31 7d  OM t1) }.  } {1}
6b10: 0a 7d 0a 0a 23 20 43 72 61 73 68 20 62 75 67 20  .}..# Crash bug 
6b20: 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20  reported on the 
6b30: 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20 6f 6e 20  mailing list on 
6b40: 32 30 31 32 2d 30 32 2d 32 33 0a 23 0a 64 6f 5f  2012-02-23.#.do_
6b50: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 36 2e  test select1-16.
6b60: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
6b70: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 28 53  SELECT 1 FROM (S
6b80: 45 4c 45 43 54 20 2a 29 7d 0a 7d 20 7b 31 20 7b  ELECT *)}.} {1 {
6b90: 6e 6f 20 74 61 62 6c 65 73 20 73 70 65 63 69 66  no tables specif
6ba0: 69 65 64 7d 7d 0a 0a 23 20 32 30 31 35 2d 30 34  ied}}..# 2015-04
6bb0: 2d 31 37 3a 20 20 61 73 73 65 72 74 69 6f 6e 20  -17:  assertion 
6bc0: 66 69 78 2e 0a 64 6f 5f 63 61 74 63 68 73 71 6c  fix..do_catchsql
6bd0: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 36  _test select1-16
6be0: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 31 20  .2 {.  SELECT 1 
6bf0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6c00: 65 72 20 4c 49 4d 49 54 20 31 2c 23 31 3b 0a 7d  er LIMIT 1,#1;.}
6c10: 20 7b 31 20 7b 6e 65 61 72 20 22 23 31 22 3a 20   {1 {near "#1": 
6c20: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a  syntax error}}..
6c30: 23 20 32 30 31 39 2d 30 31 2d 31 36 20 43 68 72  # 2019-01-16 Chr
6c40: 6f 6d 69 75 6d 20 62 75 67 20 39 32 32 33 31 32  omium bug 922312
6c50: 0a 23 20 53 6f 72 74 69 6e 67 20 77 69 74 68 20  .# Sorting with 
6c60: 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 75  a LIMIT clause u
6c70: 73 69 6e 67 20 53 52 54 5f 45 70 68 65 6d 54 61  sing SRT_EphemTa
6c80: 62 20 61 6e 64 20 53 52 54 5f 54 61 62 6c 65 0a  b and SRT_Table.
6c90: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
6ca0: 74 20 73 65 6c 65 63 74 31 2d 31 37 2e 31 20 7b  t select1-17.1 {
6cb0: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46  .  DROP TABLE IF
6cc0: 20 45 58 49 53 54 53 20 74 31 3b 0a 20 20 44 52   EXISTS t1;.  DR
6cd0: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
6ce0: 54 53 20 74 32 3b 0a 20 20 43 52 45 41 54 45 20  TS t2;.  CREATE 
6cf0: 54 41 42 4c 45 20 74 31 28 78 29 3b 20 20 20 49  TABLE t1(x);   I
6d00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6d10: 4c 55 45 53 28 31 29 3b 0a 20 20 43 52 45 41 54  LUES(1);.  CREAT
6d20: 45 20 54 41 42 4c 45 20 74 32 28 79 2c 7a 29 3b  E TABLE t2(y,z);
6d30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
6d40: 56 41 4c 55 45 53 28 32 2c 33 29 3b 0a 20 20 43  VALUES(2,3);.  C
6d50: 52 45 41 54 45 20 49 4e 44 45 58 20 74 32 79 20  REATE INDEX t2y 
6d60: 4f 4e 20 74 32 28 79 29 3b 0a 20 20 53 45 4c 45  ON t2(y);.  SELE
6d70: 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c 28 53 45  CT * FROM t1,(SE
6d80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57  LECT * FROM t2 W
6d90: 48 45 52 45 20 79 3d 32 20 4f 52 44 45 52 20 42  HERE y=2 ORDER B
6da0: 59 20 79 2c 7a 29 3b 0a 7d 20 7b 31 20 32 20 33  Y y,z);.} {1 2 3
6db0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
6dc0: 74 20 73 65 6c 65 63 74 31 2d 31 37 2e 32 20 7b  t select1-17.2 {
6dd0: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
6de0: 20 74 31 2c 28 53 45 4c 45 43 54 20 2a 20 46 52   t1,(SELECT * FR
6df0: 4f 4d 20 74 32 20 57 48 45 52 45 20 79 3d 32 20  OM t2 WHERE y=2 
6e00: 4f 52 44 45 52 20 42 59 20 79 2c 7a 20 4c 49 4d  ORDER BY y,z LIM
6e10: 49 54 20 34 29 3b 0a 7d 20 7b 31 20 32 20 33 7d  IT 4);.} {1 2 3}
6e20: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
6e30: 20 73 65 6c 65 63 74 31 2d 31 37 2e 33 20 7b 0a   select1-17.3 {.
6e40: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6e50: 74 31 2c 28 53 45 4c 45 43 54 20 2a 20 46 52 4f  t1,(SELECT * FRO
6e60: 4d 20 74 32 20 57 48 45 52 45 20 79 3d 32 0a 20  M t2 WHERE y=2. 
6e70: 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c          UNION AL
6e80: 4c 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  L SELECT * FROM 
6e90: 74 32 20 57 48 45 52 45 20 79 3d 33 20 4f 52 44  t2 WHERE y=3 ORD
6ea0: 45 52 20 42 59 20 79 2c 7a 20 4c 49 4d 49 54 20  ER BY y,z LIMIT 
6eb0: 34 29 3b 0a 7d 20 7b 31 20 32 20 33 7d 0a 0a 23  4);.} {1 2 3}..#
6ec0: 20 32 30 31 39 2d 30 37 2d 32 34 20 54 69 63 6b   2019-07-24 Tick
6ed0: 65 74 20 68 74 74 70 73 3a 2f 2f 73 71 6c 69 74  et https://sqlit
6ee0: 65 2e 6f 72 67 2f 73 72 63 2f 74 6b 74 76 69 65  e.org/src/tktvie
6ef0: 77 2f 63 35 32 62 30 39 63 37 66 33 38 39 30 33  w/c52b09c7f38903
6f00: 62 31 33 31 31 0a 23 0a 64 6f 5f 65 78 65 63 73  b1311.#.do_execs
6f10: 71 6c 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  ql_test select1-
6f20: 31 38 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41  18.1 {.  DROP TA
6f30: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 31  BLE IF EXISTS t1
6f40: 3b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49  ;.  DROP TABLE I
6f50: 46 20 45 58 49 53 54 53 20 74 32 3b 0a 20 20 43  F EXISTS t2;.  C
6f60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
6f70: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
6f80: 45 20 74 32 28 78 20 50 52 49 4d 41 52 59 20 4b  E t2(x PRIMARY K
6f90: 45 59 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54  EY, y);.  INSERT
6fa0: 20 49 4e 54 4f 20 74 31 28 63 29 20 56 41 4c 55   INTO t1(c) VALU
6fb0: 45 53 28 31 32 33 29 3b 0a 20 20 49 4e 53 45 52  ES(123);.  INSER
6fc0: 54 20 49 4e 54 4f 20 74 32 28 78 29 20 56 41 4c  T INTO t2(x) VAL
6fd0: 55 45 53 28 31 32 33 29 3b 0a 20 20 53 45 4c 45  UES(123);.  SELE
6fe0: 43 54 20 78 20 46 52 4f 4d 20 74 32 2c 20 74 31  CT x FROM t2, t1
6ff0: 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45 4e   WHERE x BETWEEN
7000: 20 63 20 41 4e 44 20 6e 75 6c 6c 20 4f 52 20 78   c AND null OR x
7010: 20 41 4e 44 0a 20 20 78 20 49 4e 20 28 28 53 45   AND.  x IN ((SE
7020: 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45 4c  LECT x FROM (SEL
7030: 45 43 54 20 78 20 46 52 4f 4d 20 74 32 2c 20 74  ECT x FROM t2, t
7040: 31 20 0a 20 20 57 48 45 52 45 20 78 20 42 45 54  1 .  WHERE x BET
7050: 57 45 45 4e 20 28 53 45 4c 45 43 54 20 78 20 46  WEEN (SELECT x F
7060: 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 20 43 4f  ROM (SELECT x CO
7070: 4c 4c 41 54 45 20 72 74 72 69 6d 20 0a 20 20 46  LLATE rtrim .  F
7080: 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45  ROM t2, t1 WHERE
7090: 20 78 20 42 45 54 57 45 45 4e 20 63 20 41 4e 44   x BETWEEN c AND
70a0: 20 6e 75 6c 6c 0a 20 20 4f 52 20 78 20 41 4e 44   null.  OR x AND
70b0: 20 78 20 49 4e 20 28 63 29 29 2c 20 74 31 20 57   x IN (c)), t1 W
70c0: 48 45 52 45 20 78 20 42 45 54 57 45 45 4e 20 63  HERE x BETWEEN c
70d0: 20 41 4e 44 20 6e 75 6c 6c 0a 20 20 4f 52 20 78   AND null.  OR x
70e0: 20 41 4e 44 20 78 20 49 4e 20 28 63 29 29 20 41   AND x IN (c)) A
70f0: 4e 44 20 6e 75 6c 6c 0a 20 20 4f 52 20 4e 4f 54  ND null.  OR NOT
7100: 20 45 58 49 53 54 53 28 53 45 4c 45 43 54 20 2d   EXISTS(SELECT -
7110: 34 2e 38 31 20 46 52 4f 4d 20 74 31 2c 20 74 32  4.81 FROM t1, t2
7120: 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45 4e   WHERE x BETWEEN
7130: 20 63 20 41 4e 44 20 6e 75 6c 6c 0a 20 20 4f 52   c AND null.  OR
7140: 20 78 20 41 4e 44 20 78 20 49 4e 20 28 28 53 45   x AND x IN ((SE
7150: 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53 45 4c  LECT x FROM (SEL
7160: 45 43 54 20 78 20 46 52 4f 4d 20 74 32 2c 20 74  ECT x FROM t2, t
7170: 31 0a 20 20 57 48 45 52 45 20 78 20 42 45 54 57  1.  WHERE x BETW
7180: 45 45 4e 20 28 53 45 4c 45 43 54 20 78 20 46 52  EEN (SELECT x FR
7190: 4f 4d 20 28 53 45 4c 45 43 54 20 78 20 42 45 54  OM (SELECT x BET
71a0: 57 45 45 4e 20 63 20 41 4e 44 20 6e 75 6c 6c 0a  WEEN c AND null.
71b0: 20 20 4f 52 20 78 20 41 4e 44 20 78 20 49 4e 20    OR x AND x IN 
71c0: 28 63 29 29 2c 20 74 31 20 57 48 45 52 45 20 78  (c)), t1 WHERE x
71d0: 20 42 45 54 57 45 45 4e 20 63 20 41 4e 44 20 6e   BETWEEN c AND n
71e0: 75 6c 6c 0a 20 20 4f 52 20 78 20 41 4e 44 20 78  ull.  OR x AND x
71f0: 20 49 4e 20 28 63 29 29 20 41 4e 44 20 6e 75 6c   IN (c)) AND nul
7200: 6c 0a 20 20 4f 52 20 78 20 41 4e 44 20 78 20 49  l.  OR x AND x I
7210: 4e 20 28 63 29 29 2c 20 74 31 20 57 48 45 52 45  N (c)), t1 WHERE
7220: 20 78 20 42 45 54 57 45 45 4e 20 63 20 41 4e 44   x BETWEEN c AND
7230: 20 6e 75 6c 6c 0a 20 20 4f 52 20 78 20 41 4e 44   null.  OR x AND
7240: 20 78 20 49 4e 20 28 63 29 29 29 29 20 41 4e 44   x IN (c)))) AND
7250: 20 78 20 49 4e 20 28 63 29 0a 20 20 29 2c 20 74   x IN (c).  ), t
7260: 31 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45  1 WHERE x BETWEE
7270: 4e 20 63 20 41 4e 44 20 6e 75 6c 6c 0a 20 20 4f  N c AND null.  O
7280: 52 20 78 20 41 4e 44 20 78 20 49 4e 20 28 63 29  R x AND x IN (c)
7290: 29 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63  ));.} {}.do_exec
72a0: 73 71 6c 5f 74 65 73 74 20 73 65 6c 65 63 74 31  sql_test select1
72b0: 2d 31 38 2e 32 20 7b 0a 20 20 44 52 4f 50 20 54  -18.2 {.  DROP T
72c0: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74  ABLE IF EXISTS t
72d0: 31 3b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20  1;.  DROP TABLE 
72e0: 49 46 20 45 58 49 53 54 53 20 74 32 3b 0a 20 20  IF EXISTS t2;.  
72f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
7300: 63 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  c);.  CREATE TAB
7310: 4c 45 20 74 32 28 78 20 50 52 49 4d 41 52 59 20  LE t2(x PRIMARY 
7320: 4b 45 59 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52  KEY, y);.  INSER
7330: 54 20 49 4e 54 4f 20 74 31 28 63 29 20 56 41 4c  T INTO t1(c) VAL
7340: 55 45 53 28 31 32 33 29 3b 0a 20 20 49 4e 53 45  UES(123);.  INSE
7350: 52 54 20 49 4e 54 4f 20 74 32 28 78 29 20 56 41  RT INTO t2(x) VA
7360: 4c 55 45 53 28 31 32 33 29 3b 0a 20 20 53 45 4c  LUES(123);.  SEL
7370: 45 43 54 20 78 20 46 52 4f 4d 20 74 32 2c 20 74  ECT x FROM t2, t
7380: 31 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45  1 WHERE x BETWEE
7390: 4e 20 63 20 41 4e 44 20 28 63 2b 31 29 20 4f 52  N c AND (c+1) OR
73a0: 20 78 20 41 4e 44 0a 20 20 78 20 49 4e 20 28 28   x AND.  x IN ((
73b0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 28 53  SELECT x FROM (S
73c0: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 32 2c  ELECT x FROM t2,
73d0: 20 74 31 20 0a 20 20 57 48 45 52 45 20 78 20 42   t1 .  WHERE x B
73e0: 45 54 57 45 45 4e 20 28 53 45 4c 45 43 54 20 78  ETWEEN (SELECT x
73f0: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 20   FROM (SELECT x 
7400: 43 4f 4c 4c 41 54 45 20 72 74 72 69 6d 20 0a 20  COLLATE rtrim . 
7410: 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45   FROM t2, t1 WHE
7420: 52 45 20 78 20 42 45 54 57 45 45 4e 20 63 20 41  RE x BETWEEN c A
7430: 4e 44 20 28 63 2b 31 29 0a 20 20 4f 52 20 78 20  ND (c+1).  OR x 
7440: 41 4e 44 20 78 20 49 4e 20 28 63 29 29 2c 20 74  AND x IN (c)), t
7450: 31 20 57 48 45 52 45 20 78 20 42 45 54 57 45 45  1 WHERE x BETWEE
7460: 4e 20 63 20 41 4e 44 20 28 63 2b 31 29 0a 20 20  N c AND (c+1).  
7470: 4f 52 20 78 20 41 4e 44 20 78 20 49 4e 20 28 63  OR x AND x IN (c
7480: 29 29 20 41 4e 44 20 28 63 2b 31 29 0a 20 20 4f  )) AND (c+1).  O
7490: 52 20 4e 4f 54 20 45 58 49 53 54 53 28 53 45 4c  R NOT EXISTS(SEL
74a0: 45 43 54 20 2d 34 2e 38 31 20 46 52 4f 4d 20 74  ECT -4.81 FROM t
74b0: 31 2c 20 74 32 20 57 48 45 52 45 20 78 20 42 45  1, t2 WHERE x BE
74c0: 54 57 45 45 4e 20 63 20 41 4e 44 20 28 63 2b 31  TWEEN c AND (c+1
74d0: 29 0a 20 20 4f 52 20 78 20 41 4e 44 20 78 20 49  ).  OR x AND x I
74e0: 4e 20 28 28 53 45 4c 45 43 54 20 78 20 46 52 4f  N ((SELECT x FRO
74f0: 4d 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  M (SELECT x FROM
7500: 20 74 32 2c 20 74 31 0a 20 20 57 48 45 52 45 20   t2, t1.  WHERE 
7510: 78 20 42 45 54 57 45 45 4e 20 28 53 45 4c 45 43  x BETWEEN (SELEC
7520: 54 20 78 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T x FROM (SELECT
7530: 20 78 20 42 45 54 57 45 45 4e 20 63 20 41 4e 44   x BETWEEN c AND
7540: 20 28 63 2b 31 29 0a 20 20 4f 52 20 78 20 41 4e   (c+1).  OR x AN
7550: 44 20 78 20 49 4e 20 28 63 29 29 2c 20 74 31 20  D x IN (c)), t1 
7560: 57 48 45 52 45 20 78 20 42 45 54 57 45 45 4e 20  WHERE x BETWEEN 
7570: 63 20 41 4e 44 20 28 63 2b 31 29 0a 20 20 4f 52  c AND (c+1).  OR
7580: 20 78 20 41 4e 44 20 78 20 49 4e 20 28 63 29 29   x AND x IN (c))
7590: 20 41 4e 44 20 28 63 2b 31 29 0a 20 20 4f 52 20   AND (c+1).  OR 
75a0: 78 20 41 4e 44 20 78 20 49 4e 20 28 63 29 29 2c  x AND x IN (c)),
75b0: 20 74 31 20 57 48 45 52 45 20 78 20 42 45 54 57   t1 WHERE x BETW
75c0: 45 45 4e 20 63 20 41 4e 44 20 28 63 2b 31 29 0a  EEN c AND (c+1).
75d0: 20 20 4f 52 20 78 20 41 4e 44 20 78 20 49 4e 20    OR x AND x IN 
75e0: 28 63 29 29 29 29 20 41 4e 44 20 78 20 49 4e 20  (c)))) AND x IN 
75f0: 28 63 29 0a 20 20 29 2c 20 74 31 20 57 48 45 52  (c).  ), t1 WHER
7600: 45 20 78 20 42 45 54 57 45 45 4e 20 63 20 41 4e  E x BETWEEN c AN
7610: 44 20 28 63 2b 31 29 0a 20 20 4f 52 20 78 20 41  D (c+1).  OR x A
7620: 4e 44 20 78 20 49 4e 20 28 63 29 29 29 3b 0a 7d  ND x IN (c)));.}
7630: 20 7b 31 32 33 7d 0a 64 6f 5f 65 78 65 63 73 71   {123}.do_execsq
7640: 6c 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31  l_test select1-1
7650: 38 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 31  8.3 {.  SELECT 1
7660: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28   FROM t1 WHERE (
7670: 0a 20 20 20 20 53 45 4c 45 43 54 20 32 20 46 52  .    SELECT 2 FR
7680: 4f 4d 20 74 32 20 57 48 45 52 45 20 28 0a 20 20  OM t2 WHERE (.  
7690: 20 20 20 20 53 45 4c 45 43 54 20 33 20 46 52 4f      SELECT 3 FRO
76a0: 4d 20 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45  M (.        SELE
76b0: 43 54 20 78 20 46 52 4f 4d 20 74 32 20 57 48 45  CT x FROM t2 WHE
76c0: 52 45 20 78 3d 63 20 4f 52 20 78 3d 28 53 45 4c  RE x=c OR x=(SEL
76d0: 45 43 54 20 78 20 46 52 4f 4d 20 28 56 41 4c 55  ECT x FROM (VALU
76e0: 45 53 28 30 29 29 29 0a 20 20 20 20 20 20 29 20  ES(0))).      ) 
76f0: 57 48 45 52 45 20 78 3e 63 20 4f 52 20 78 3d 63  WHERE x>c OR x=c
7700: 0a 20 20 20 20 29 0a 20 20 29 3b 0a 7d 20 7b 31  .    ).  );.} {1
7710: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
7720: 74 20 73 65 6c 65 63 74 31 2d 31 38 2e 34 20 7b  t select1-18.4 {
7730: 0a 20 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d  .  SELECT 1 FROM
7740: 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 28 0a   t1, t2 WHERE (.
7750: 20 20 20 20 53 45 4c 45 43 54 20 33 20 46 52 4f      SELECT 3 FRO
7760: 4d 20 28 0a 20 20 20 20 20 20 53 45 4c 45 43 54  M (.      SELECT
7770: 20 78 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   x FROM t2 WHERE
7780: 20 78 3d 63 20 4f 52 20 78 3d 28 53 45 4c 45 43   x=c OR x=(SELEC
7790: 54 20 78 20 46 52 4f 4d 20 28 56 41 4c 55 45 53  T x FROM (VALUES
77a0: 28 30 29 29 29 0a 20 20 20 20 29 20 57 48 45 52  (0))).    ) WHER
77b0: 45 20 78 3e 63 20 4f 52 20 78 3d 63 0a 20 20 29  E x>c OR x=c.  )
77c0: 3b 0a 7d 20 7b 31 7d 0a 0a 66 69 6e 69 73 68 5f  ;.} {1}..finish_
77d0: 74 65 73 74 0a                                   test.