/ Hex Artifact Content
Login

Artifact 460a5824df01575b18f7fa4bd8e40d09de20c542e90c1543e164bc7d3b0a0bb7:


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 6e 65 61 72 20 22 61 73 22 3a 20   {1 {near "as": 
4ab0: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64  syntax error}}.d
4ac0: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 37  o_test select1-7
4ad0: 2e 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .4 {.  set v [ca
4ae0: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20  tch {execsql {. 
4af0: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
4b00: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
4b10: 59 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  Y;.  }} msg].  l
4b20: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
4b30: 7b 31 20 7b 6e 65 61 72 20 22 3b 22 3a 20 73 79  {1 {near ";": sy
4b40: 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f  ntax error}}.do_
4b50: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 37 2e 35  test select1-7.5
4b60: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
4b70: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
4b80: 20 20 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d    SELECT f1 FROM
4b90: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
4ba0: 66 31 20 64 65 73 63 2c 20 66 32 20 77 68 65 72  f1 desc, f2 wher
4bb0: 65 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  e;.  }} msg].  l
4bc0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
4bd0: 7b 31 20 7b 6e 65 61 72 20 22 77 68 65 72 65 22  {1 {near "where"
4be0: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d  : syntax error}}
4bf0: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
4c00: 2d 37 2e 36 20 7b 0a 20 20 73 65 74 20 76 20 5b  -7.6 {.  set v [
4c10: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
4c20: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  .     SELECT cou
4c30: 6e 74 28 66 31 2c 66 32 20 46 52 4f 4d 20 74 65  nt(f1,f2 FROM te
4c40: 73 74 31 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  st1;.  }} msg]. 
4c50: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
4c60: 7d 20 7b 31 20 7b 6e 65 61 72 20 22 46 52 4f 4d  } {1 {near "FROM
4c70: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
4c80: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
4c90: 31 2d 37 2e 37 20 7b 0a 20 20 73 65 74 20 76 20  1-7.7 {.  set v 
4ca0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
4cb0: 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f  {.     SELECT co
4cc0: 75 6e 74 28 66 31 2c 66 32 2b 29 20 46 52 4f 4d  unt(f1,f2+) FROM
4cd0: 20 74 65 73 74 31 3b 0a 20 20 7d 7d 20 6d 73 67   test1;.  }} msg
4ce0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
4cf0: 73 67 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 29  sg.} {1 {near ")
4d00: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
4d10: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
4d20: 31 2d 37 2e 38 20 7b 0a 20 20 73 65 74 20 76 20  1-7.8 {.  set v 
4d30: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
4d40: 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 66 31  {.     SELECT f1
4d50: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
4d60: 52 20 42 59 20 66 32 2c 20 66 31 2b 3b 0a 20 20  R BY f2, f1+;.  
4d70: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
4d80: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e  d v $msg.} {1 {n
4d90: 65 61 72 20 22 3b 22 3a 20 73 79 6e 74 61 78 20  ear ";": syntax 
4da0: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
4db0: 73 65 6c 65 63 74 31 2d 37 2e 39 20 7b 0a 20 20  select1-7.9 {.  
4dc0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
4dd0: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
4de0: 65 73 74 31 20 4c 49 4d 49 54 20 35 2b 33 20 4f  est1 LIMIT 5+3 O
4df0: 46 46 53 45 54 20 31 31 20 4f 52 44 45 52 20 42  FFSET 11 ORDER B
4e00: 59 20 66 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  Y f2;.  }.} {1 {
4e10: 6e 65 61 72 20 22 4f 52 44 45 52 22 3a 20 73 79  near "ORDER": sy
4e20: 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 64 6f  ntax error}}..do
4e30: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 38 2e  _test select1-8.
4e40: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
4e50: 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 65  ELECT f1 FROM te
4e60: 73 74 31 20 57 48 45 52 45 20 34 2e 33 2b 32 2e  st1 WHERE 4.3+2.
4e70: 34 20 4f 52 20 31 20 4f 52 44 45 52 20 42 59 20  4 OR 1 ORDER BY 
4e80: 66 31 7d 0a 7d 20 7b 31 31 20 33 33 7d 0a 64 6f  f1}.} {11 33}.do
4e90: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 38 2e  _test select1-8.
4ea0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
4eb0: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
4ec0: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 28  OM test1 WHERE (
4ed0: 27 78 27 20 7c 7c 20 66 31 29 20 42 45 54 57 45  'x' || f1) BETWE
4ee0: 45 4e 20 27 78 31 30 27 20 41 4e 44 20 27 78 32  EN 'x10' AND 'x2
4ef0: 30 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20  0'.    ORDER BY 
4f00: 66 31 0a 20 20 7d 0a 7d 20 7b 31 31 7d 0a 64 6f  f1.  }.} {11}.do
4f10: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 38 2e  _test select1-8.
4f20: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
4f30: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 46 52      SELECT f1 FR
4f40: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 35  OM test1 WHERE 5
4f50: 2d 33 3d 3d 32 0a 20 20 20 20 4f 52 44 45 52 20  -3==2.    ORDER 
4f60: 42 59 20 66 31 0a 20 20 7d 0a 7d 20 7b 31 31 20  BY f1.  }.} {11 
4f70: 33 33 7d 0a 0a 23 20 54 4f 44 4f 3a 20 54 68 69  33}..# TODO: Thi
4f80: 73 20 74 65 73 74 20 69 73 20 66 61 69 6c 69 6e  s test is failin
4f90: 67 20 62 65 63 61 75 73 65 20 66 31 20 69 73 20  g because f1 is 
4fa0: 6e 6f 77 20 62 65 69 6e 67 20 6c 6f 61 64 65 64  now being loaded
4fb0: 20 6f 66 66 20 74 68 65 0a 23 20 64 69 73 6b 20   off the.# disk 
4fc0: 61 73 20 61 20 76 64 62 65 20 69 6e 74 65 67 65  as a vdbe intege
4fd0: 72 2c 20 6e 6f 74 20 61 20 73 74 72 69 6e 67 2e  r, not a string.
4fe0: 20 48 65 6e 63 65 20 74 68 65 20 76 61 6c 75 65   Hence the value
4ff0: 20 6f 66 20 66 31 2f 28 66 31 2d 31 31 29 0a 23   of f1/(f1-11).#
5000: 20 63 68 61 6e 67 65 73 20 62 65 63 61 75 73 65   changes because
5010: 20 6f 66 20 72 6f 75 6e 64 69 6e 67 2e 20 44 69   of rounding. Di
5020: 73 61 62 6c 65 20 74 68 65 20 74 65 73 74 20 66  sable the test f
5030: 6f 72 20 6e 6f 77 2e 0a 69 66 20 30 20 7b 0a 64  or now..if 0 {.d
5040: 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 38  o_test select1-8
5050: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
5060: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 61 6c  .    SELECT coal
5070: 65 73 63 65 28 66 31 2f 28 66 31 2d 31 31 29 2c  esce(f1/(f1-11),
5080: 27 78 27 29 2c 0a 20 20 20 20 20 20 20 20 20 20  'x'),.          
5090: 20 63 6f 61 6c 65 73 63 65 28 6d 69 6e 28 66 31   coalesce(min(f1
50a0: 2f 28 66 31 2d 31 31 29 2c 35 29 2c 27 79 27 29  /(f1-11),5),'y')
50b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 63 6f 61  ,.           coa
50c0: 6c 65 73 63 65 28 6d 61 78 28 66 31 2f 28 66 31  lesce(max(f1/(f1
50d0: 2d 33 33 29 2c 36 29 2c 27 7a 27 29 0a 20 20 20  -33),6),'z').   
50e0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
50f0: 52 20 42 59 20 66 31 0a 20 20 7d 0a 7d 20 7b 78  R BY f1.  }.} {x
5100: 20 79 20 36 20 31 2e 35 20 31 2e 35 20 7a 7d 0a   y 6 1.5 1.5 z}.
5110: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
5120: 31 2d 38 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  1-8.5 {.  execsq
5130: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  l {.    SELECT m
5140: 69 6e 28 31 2c 32 2c 33 29 2c 20 2d 6d 61 78 28  in(1,2,3), -max(
5150: 31 2c 32 2c 33 29 0a 20 20 20 20 46 52 4f 4d 20  1,2,3).    FROM 
5160: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
5170: 31 0a 20 20 7d 0a 7d 20 7b 31 20 2d 33 20 31 20  1.  }.} {1 -3 1 
5180: 2d 33 7d 0a 0a 0a 23 20 43 68 65 63 6b 20 74 68  -3}...# Check th
5190: 65 20 62 65 68 61 76 69 6f 72 20 77 68 65 6e 20  e behavior when 
51a0: 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 69  the result set i
51b0: 73 20 65 6d 70 74 79 0a 23 0a 23 20 53 51 4c 69  s empty.#.# SQLi
51c0: 74 65 20 76 33 20 61 6c 77 61 79 73 20 73 65 74  te v3 always set
51d0: 73 20 72 28 2a 29 2e 0a 23 0a 23 20 64 6f 5f 74  s r(*)..#.# do_t
51e0: 65 73 74 20 73 65 6c 65 63 74 31 2d 39 2e 31 20  est select1-9.1 
51f0: 7b 0a 23 20 20 20 63 61 74 63 68 20 7b 75 6e 73  {.#   catch {uns
5200: 65 74 20 72 7d 0a 23 20 20 20 73 65 74 20 72 28  et r}.#   set r(
5210: 2a 29 20 7b 7d 0a 23 20 20 20 64 62 20 65 76 61  *) {}.#   db eva
5220: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
5230: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3c   test1 WHERE f1<
5240: 30 7d 20 72 20 7b 7d 0a 23 20 20 20 73 65 74 20  0} r {}.#   set 
5250: 72 28 2a 29 0a 23 20 7d 20 7b 7d 0a 64 6f 5f 74  r(*).# } {}.do_t
5260: 65 73 74 20 73 65 6c 65 63 74 31 2d 39 2e 32 20  est select1-9.2 
5270: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41  {.  execsql {PRA
5280: 47 4d 41 20 65 6d 70 74 79 5f 72 65 73 75 6c 74  GMA empty_result
5290: 5f 63 61 6c 6c 62 61 63 6b 73 3d 6f 6e 7d 0a 20  _callbacks=on}. 
52a0: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 72 7d   catch {unset r}
52b0: 0a 20 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a 20  .  set r(*) {}. 
52c0: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
52d0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
52e0: 45 52 45 20 66 31 3c 30 7d 20 72 20 7b 7d 0a 20  ERE f1<0} r {}. 
52f0: 20 73 65 74 20 72 28 2a 29 0a 7d 20 7b 66 31 20   set r(*).} {f1 
5300: 66 32 7d 0a 69 66 63 61 70 61 62 6c 65 20 73 75  f2}.ifcapable su
5310: 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65  bquery {.  do_te
5320: 73 74 20 73 65 6c 65 63 74 31 2d 39 2e 33 20 7b  st select1-9.3 {
5330: 0a 20 20 20 20 73 65 74 20 72 28 2a 29 20 7b 7d  .    set r(*) {}
5340: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45  .    db eval {SE
5350: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
5360: 31 20 57 48 45 52 45 20 66 31 3c 28 73 65 6c 65  1 WHERE f1<(sele
5370: 63 74 20 63 6f 75 6e 74 28 2a 29 20 66 72 6f 6d  ct count(*) from
5380: 20 74 65 73 74 32 29 7d 20 72 20 7b 7d 0a 20 20   test2)} r {}.  
5390: 20 20 73 65 74 20 72 28 2a 29 0a 20 20 7d 20 7b    set r(*).  } {
53a0: 66 31 20 66 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74  f1 f2}.}.do_test
53b0: 20 73 65 6c 65 63 74 31 2d 39 2e 34 20 7b 0a 20   select1-9.4 {. 
53c0: 20 73 65 74 20 72 28 2a 29 20 7b 7d 0a 20 20 64   set r(*) {}.  d
53d0: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
53e0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
53f0: 52 20 42 59 20 66 31 7d 20 72 20 7b 7d 0a 20 20  R BY f1} r {}.  
5400: 73 65 74 20 72 28 2a 29 0a 7d 20 7b 66 31 20 66  set r(*).} {f1 f
5410: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  2}.do_test selec
5420: 74 31 2d 39 2e 35 20 7b 0a 20 20 73 65 74 20 72  t1-9.5 {.  set r
5430: 28 2a 29 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c  (*) {}.  db eval
5440: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
5450: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3c 30  test1 WHERE f1<0
5460: 20 4f 52 44 45 52 20 42 59 20 66 31 7d 20 72 20   ORDER BY f1} r 
5470: 7b 7d 0a 20 20 73 65 74 20 72 28 2a 29 0a 7d 20  {}.  set r(*).} 
5480: 7b 66 31 20 66 32 7d 0a 75 6e 73 65 74 20 72 0a  {f1 f2}.unset r.
5490: 0a 23 20 43 68 65 63 6b 20 66 6f 72 20 4f 52 44  .# Check for ORD
54a0: 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 74 68  ER BY clauses th
54b0: 61 74 20 72 65 66 65 72 20 74 6f 20 61 6e 20 41  at refer to an A
54c0: 53 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 63 6f  S name in the co
54d0: 6c 75 6d 6e 20 6c 69 73 74 0a 23 0a 64 6f 5f 74  lumn list.#.do_t
54e0: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e 31  est select1-10.1
54f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5500: 20 20 20 53 45 4c 45 43 54 20 66 31 20 41 53 20     SELECT f1 AS 
5510: 78 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  x FROM test1 ORD
5520: 45 52 20 42 59 20 78 0a 20 20 7d 0a 7d 20 7b 31  ER BY x.  }.} {1
5530: 31 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 73 65  1 33}.do_test se
5540: 6c 65 63 74 31 2d 31 30 2e 32 20 7b 0a 20 20 65  lect1-10.2 {.  e
5550: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5560: 45 43 54 20 66 31 20 41 53 20 78 20 46 52 4f 4d  ECT f1 AS x FROM
5570: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
5580: 2d 78 0a 20 20 7d 0a 7d 20 7b 33 33 20 31 31 7d  -x.  }.} {33 11}
5590: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
55a0: 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -10.3 {.  execsq
55b0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 66  l {.    SELECT f
55c0: 31 2d 32 33 20 41 53 20 78 20 46 52 4f 4d 20 74  1-23 AS x FROM t
55d0: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 61 62  est1 ORDER BY ab
55e0: 73 28 78 29 0a 20 20 7d 0a 7d 20 7b 31 30 20 2d  s(x).  }.} {10 -
55f0: 31 32 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  12}.do_test sele
5600: 63 74 31 2d 31 30 2e 34 20 7b 0a 20 20 65 78 65  ct1-10.4 {.  exe
5610: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
5620: 54 20 66 31 2d 32 33 20 41 53 20 78 20 46 52 4f  T f1-23 AS x FRO
5630: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
5640: 20 2d 61 62 73 28 78 29 0a 20 20 7d 0a 7d 20 7b   -abs(x).  }.} {
5650: 2d 31 32 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20  -12 10}.do_test 
5660: 73 65 6c 65 63 74 31 2d 31 30 2e 35 20 7b 0a 20  select1-10.5 {. 
5670: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
5680: 45 4c 45 43 54 20 66 31 2d 32 32 20 41 53 20 78  ELECT f1-22 AS x
5690: 2c 20 66 32 2d 32 32 20 61 73 20 79 20 46 52 4f  , f2-22 as y FRO
56a0: 4d 20 74 65 73 74 31 0a 20 20 7d 0a 7d 20 7b 2d  M test1.  }.} {-
56b0: 31 31 20 30 20 31 31 20 32 32 7d 0a 64 6f 5f 74  11 0 11 22}.do_t
56c0: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e 36  est select1-10.6
56d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
56e0: 20 20 20 53 45 4c 45 43 54 20 66 31 2d 32 32 20     SELECT f1-22 
56f0: 41 53 20 78 2c 20 66 32 2d 32 32 20 61 73 20 79  AS x, f2-22 as y
5700: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
5710: 45 20 78 3e 30 20 41 4e 44 20 79 3c 35 30 0a 20  E x>0 AND y<50. 
5720: 20 7d 0a 7d 20 7b 31 31 20 32 32 7d 0a 64 6f 5f   }.} {11 22}.do_
5730: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 30 2e  test select1-10.
5740: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
5750: 20 20 20 20 53 45 4c 45 43 54 20 66 31 20 43 4f      SELECT f1 CO
5760: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20 41 53 20  LLATE nocase AS 
5770: 78 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  x FROM test1 ORD
5780: 45 52 20 42 59 20 78 0a 20 20 7d 0a 7d 20 7b 31  ER BY x.  }.} {1
5790: 31 20 33 33 7d 0a 0a 23 20 43 68 65 63 6b 20 74  1 33}..# Check t
57a0: 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 73 70  he ability to sp
57b0: 65 63 69 66 79 20 22 54 41 42 4c 45 2e 2a 22 20  ecify "TABLE.*" 
57c0: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
57d0: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 0a 23 0a  t of a SELECT.#.
57e0: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
57f0: 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.1 {.  execsql
5800: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
5810: 4f 4d 20 74 33 3b 0a 20 20 20 20 44 45 4c 45 54  OM t3;.    DELET
5820: 45 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 49  E FROM t4;.    I
5830: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
5840: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 49  LUES(1,2);.    I
5850: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
5860: 4c 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 53  LUES(3,4);.    S
5870: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 2c  ELECT * FROM t3,
5880: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t4;.  }.} {1 2 
5890: 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c  3 4}.do_test sel
58a0: 65 63 74 31 2d 31 31 2e 32 2e 31 20 7b 0a 20 20  ect1-11.2.1 {.  
58b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
58c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 2c 20  LECT * FROM t3, 
58d0: 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  t4;.  }.} {1 2 3
58e0: 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65   4}.do_test sele
58f0: 63 74 31 2d 31 31 2e 32 2e 32 20 7b 0a 20 20 65  ct1-11.2.2 {.  e
5900: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45  xecsql2 {.    SE
5910: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 2c 20  LECT * FROM t3, 
5920: 74 34 3b 0a 20 20 7d 0a 7d 20 7b 61 20 33 20 62  t4;.  }.} {a 3 b
5930: 20 34 20 61 20 33 20 62 20 34 7d 0a 64 6f 5f 74   4 a 3 b 4}.do_t
5940: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 34  est select1-11.4
5950: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
5960: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 2a  .    SELECT t3.*
5970: 2c 20 74 34 2e 62 20 46 52 4f 4d 20 74 33 2c 20  , t4.b FROM t3, 
5980: 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 34  t4;.  }.} {1 2 4
5990: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
59a0: 31 2d 31 31 2e 34 2e 32 20 7b 0a 20 20 65 78 65  1-11.4.2 {.  exe
59b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
59c0: 54 20 22 74 33 22 2e 2a 2c 20 74 34 2e 62 20 46  T "t3".*, t4.b F
59d0: 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20 7d 0a  ROM t3, t4;.  }.
59e0: 7d 20 7b 31 20 32 20 34 7d 0a 64 6f 5f 74 65 73  } {1 2 4}.do_tes
59f0: 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 35 2e 31  t select1-11.5.1
5a00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
5a10: 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 2a 2c      SELECT t3.*,
5a20: 20 74 34 2e 62 20 46 52 4f 4d 20 74 33 2c 20 74   t4.b FROM t3, t
5a30: 34 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31 20 62 20  4;.  }.} {a 1 b 
5a40: 34 20 62 20 34 7d 0a 64 6f 5f 74 65 73 74 20 73  4 b 4}.do_test s
5a50: 65 6c 65 63 74 31 2d 31 31 2e 36 20 7b 0a 20 20  elect1-11.6 {.  
5a60: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53  execsql2 {.    S
5a70: 45 4c 45 43 54 20 78 2e 2a 2c 20 79 2e 62 20 46  ELECT x.*, y.b F
5a80: 52 4f 4d 20 74 33 20 41 53 20 78 2c 20 74 34 20  ROM t3 AS x, t4 
5a90: 41 53 20 79 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31  AS y;.  }.} {a 1
5aa0: 20 62 20 34 20 62 20 34 7d 0a 64 6f 5f 74 65 73   b 4 b 4}.do_tes
5ab0: 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 37 20 7b  t select1-11.7 {
5ac0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5ad0: 20 53 45 4c 45 43 54 20 74 33 2e 62 2c 20 74 34   SELECT t3.b, t4
5ae0: 2e 2a 20 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a  .* FROM t3, t4;.
5af0: 20 20 7d 0a 7d 20 7b 32 20 33 20 34 7d 0a 64 6f    }.} {2 3 4}.do
5b00: 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31  _test select1-11
5b10: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .8 {.  execsql2 
5b20: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e  {.    SELECT t3.
5b30: 62 2c 20 74 34 2e 2a 20 46 52 4f 4d 20 74 33 2c  b, t4.* FROM t3,
5b40: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 62 20 34 20   t4;.  }.} {b 4 
5b50: 61 20 33 20 62 20 34 7d 0a 64 6f 5f 74 65 73 74  a 3 b 4}.do_test
5b60: 20 73 65 6c 65 63 74 31 2d 31 31 2e 39 20 7b 0a   select1-11.9 {.
5b70: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
5b80: 20 53 45 4c 45 43 54 20 78 2e 62 2c 20 79 2e 2a   SELECT x.b, y.*
5b90: 20 46 52 4f 4d 20 74 33 20 41 53 20 78 2c 20 74   FROM t3 AS x, t
5ba0: 34 20 41 53 20 79 3b 0a 20 20 7d 0a 7d 20 7b 62  4 AS y;.  }.} {b
5bb0: 20 34 20 61 20 33 20 62 20 34 7d 0a 64 6f 5f 74   4 a 3 b 4}.do_t
5bc0: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 31  est select1-11.1
5bd0: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
5be0: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 35 2e 2a  .    SELECT t5.*
5bf0: 20 46 52 4f 4d 20 74 33 2c 20 74 34 3b 0a 20 20   FROM t3, t4;.  
5c00: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
5c10: 74 61 62 6c 65 3a 20 74 35 7d 7d 0a 64 6f 5f 74  table: t5}}.do_t
5c20: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 31  est select1-11.1
5c30: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
5c40: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 2a  .    SELECT t3.*
5c50: 20 46 52 4f 4d 20 74 33 20 41 53 20 78 2c 20 74   FROM t3 AS x, t
5c60: 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  4;.  }.} {1 {no 
5c70: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 33 7d 7d  such table: t3}}
5c80: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
5c90: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
5ca0: 73 65 6c 65 63 74 31 2d 31 31 2e 31 32 20 7b 0a  select1-11.12 {.
5cb0: 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20      execsql2 {. 
5cc0: 20 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 2a       SELECT t3.*
5cd0: 20 46 52 4f 4d 20 74 33 2c 20 28 53 45 4c 45 43   FROM t3, (SELEC
5ce0: 54 20 6d 61 78 28 61 29 2c 20 6d 61 78 28 62 29  T max(a), max(b)
5cf0: 20 46 52 4f 4d 20 74 34 29 0a 20 20 20 20 7d 0a   FROM t4).    }.
5d00: 20 20 7d 20 7b 61 20 31 20 62 20 32 7d 0a 20 20    } {a 1 b 2}.  
5d10: 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31 2d  do_test select1-
5d20: 31 31 2e 31 33 20 7b 0a 20 20 20 20 65 78 65 63  11.13 {.    exec
5d30: 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 53 45 4c  sql2 {.      SEL
5d40: 45 43 54 20 74 33 2e 2a 20 46 52 4f 4d 20 28 53  ECT t3.* FROM (S
5d50: 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 20 6d 61  ELECT max(a), ma
5d60: 78 28 62 29 20 46 52 4f 4d 20 74 34 29 2c 20 74  x(b) FROM t4), t
5d70: 33 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 20 31  3.    }.  } {a 1
5d80: 20 62 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20   b 2}.  do_test 
5d90: 73 65 6c 65 63 74 31 2d 31 31 2e 31 34 20 7b 0a  select1-11.14 {.
5da0: 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20      execsql2 {. 
5db0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
5dc0: 4f 4d 20 74 33 2c 20 28 53 45 4c 45 43 54 20 6d  OM t3, (SELECT m
5dd0: 61 78 28 61 29 2c 20 6d 61 78 28 62 29 20 46 52  ax(a), max(b) FR
5de0: 4f 4d 20 74 34 29 20 41 53 20 27 74 78 27 0a 20  OM t4) AS 'tx'. 
5df0: 20 20 20 7d 0a 20 20 7d 20 7b 61 20 31 20 62 20     }.  } {a 1 b 
5e00: 32 20 6d 61 78 28 61 29 20 33 20 6d 61 78 28 62  2 max(a) 3 max(b
5e10: 29 20 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73  ) 4}.  do_test s
5e20: 65 6c 65 63 74 31 2d 31 31 2e 31 35 20 7b 0a 20  elect1-11.15 {. 
5e30: 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20     execsql2 {.  
5e40: 20 20 20 20 53 45 4c 45 43 54 20 79 2e 2a 2c 20      SELECT y.*, 
5e50: 74 33 2e 2a 20 46 52 4f 4d 20 74 33 2c 20 28 53  t3.* FROM t3, (S
5e60: 45 4c 45 43 54 20 6d 61 78 28 61 29 2c 20 6d 61  ELECT max(a), ma
5e70: 78 28 62 29 20 46 52 4f 4d 20 74 34 29 20 41 53  x(b) FROM t4) AS
5e80: 20 79 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61   y.    }.  } {ma
5e90: 78 28 61 29 20 33 20 6d 61 78 28 62 29 20 34 20  x(a) 3 max(b) 4 
5ea0: 61 20 31 20 62 20 32 7d 0a 7d 0a 64 6f 5f 74 65  a 1 b 2}.}.do_te
5eb0: 73 74 20 73 65 6c 65 63 74 31 2d 31 31 2e 31 36  st select1-11.16
5ec0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
5ed0: 20 20 20 20 53 45 4c 45 43 54 20 79 2e 2a 20 46      SELECT y.* F
5ee0: 52 4f 4d 20 74 33 20 61 73 20 79 2c 20 74 34 20  ROM t3 as y, t4 
5ef0: 61 73 20 7a 0a 20 20 7d 0a 7d 20 7b 61 20 31 20  as z.  }.} {a 1 
5f00: 62 20 32 7d 0a 0a 23 20 54 65 73 74 73 20 6f 66  b 2}..# Tests of
5f10: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
5f20: 74 73 20 77 69 74 68 6f 75 74 20 61 20 46 52 4f  ts without a FRO
5f30: 4d 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 74  M clause..#.do_t
5f40: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 31  est select1-12.1
5f50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
5f60: 20 20 20 20 53 45 4c 45 43 54 20 31 2b 32 2b 33      SELECT 1+2+3
5f70: 0a 20 20 7d 0a 7d 20 7b 31 2b 32 2b 33 20 36 7d  .  }.} {1+2+3 6}
5f80: 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31  .do_test select1
5f90: 2d 31 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  -12.2 {.  execsq
5fa0: 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  l2 {.    SELECT 
5fb0: 31 2c 27 68 65 6c 6c 6f 27 2c 32 0a 20 20 7d 0a  1,'hello',2.  }.
5fc0: 7d 20 7b 31 20 31 20 27 68 65 6c 6c 6f 27 20 68  } {1 1 'hello' h
5fd0: 65 6c 6c 6f 20 32 20 32 7d 0a 64 6f 5f 74 65 73  ello 2 2}.do_tes
5fe0: 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 33 20 7b  t select1-12.3 {
5ff0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
6000: 20 20 53 45 4c 45 43 54 20 31 20 41 53 20 27 61    SELECT 1 AS 'a
6010: 27 2c 27 68 65 6c 6c 6f 27 20 41 53 20 27 62 27  ','hello' AS 'b'
6020: 2c 32 20 41 53 20 27 63 27 0a 20 20 7d 0a 7d 20  ,2 AS 'c'.  }.} 
6030: 7b 61 20 31 20 62 20 68 65 6c 6c 6f 20 63 20 32  {a 1 b hello c 2
6040: 7d 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74  }.do_test select
6050: 31 2d 31 32 2e 34 20 7b 0a 20 20 65 78 65 63 73  1-12.4 {.  execs
6060: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
6070: 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53  FROM t3;.    INS
6080: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
6090: 45 53 28 31 2c 32 29 3b 0a 20 20 7d 0a 7d 20 7b  ES(1,2);.  }.} {
60a0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6d  }..ifcapable com
60b0: 70 6f 75 6e 64 20 7b 0a 64 6f 5f 74 65 73 74 20  pound {.do_test 
60c0: 73 65 6c 65 63 74 31 2d 31 32 2e 35 20 7b 0a 20  select1-12.5 {. 
60d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
60e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
60f0: 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 33 20 41  UNION SELECT 3 A
6100: 53 20 27 61 27 2c 20 34 20 4f 52 44 45 52 20 42  S 'a', 4 ORDER B
6110: 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  Y a;.  }.} {1 2 
6120: 33 20 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 65  3 4}..do_test se
6130: 6c 65 63 74 31 2d 31 32 2e 36 20 7b 0a 20 20 65  lect1-12.6 {.  e
6140: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
6150: 45 43 54 20 33 2c 20 34 20 55 4e 49 4f 4e 20 53  ECT 3, 4 UNION S
6160: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b  ELECT * FROM t3;
6170: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 7d  .  }.} {1 2 3 4}
6180: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
6190: 63 6f 6d 70 6f 75 6e 64 0a 0a 69 66 63 61 70 61  compound..ifcapa
61a0: 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20  ble subquery {. 
61b0: 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74 31   do_test select1
61c0: 2d 31 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63  -12.7 {.    exec
61d0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
61e0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
61f0: 52 45 20 61 3d 28 53 45 4c 45 43 54 20 31 29 3b  RE a=(SELECT 1);
6200: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 32 7d  .    }.  } {1 2}
6210: 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63  .  do_test selec
6220: 74 31 2d 31 32 2e 38 20 7b 0a 20 20 20 20 65 78  t1-12.8 {.    ex
6230: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
6240: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
6250: 48 45 52 45 20 61 3d 28 53 45 4c 45 43 54 20 32  HERE a=(SELECT 2
6260: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
6270: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 63 6f  }..ifcapable {co
6280: 6d 70 6f 75 6e 64 20 26 26 20 73 75 62 71 75 65  mpound && subque
6290: 72 79 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ry} {.  do_test 
62a0: 73 65 6c 65 63 74 31 2d 31 32 2e 39 20 7b 0a 20  select1-12.9 {. 
62b0: 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20     execsql2 {.  
62c0: 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f      SELECT x FRO
62d0: 4d 20 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45  M (.        SELE
62e0: 43 54 20 61 20 41 53 20 78 2c 20 62 20 41 53 20  CT a AS x, b AS 
62f0: 79 20 46 52 4f 4d 20 74 33 20 55 4e 49 4f 4e 20  y FROM t3 UNION 
6300: 53 45 4c 45 43 54 20 61 2c 62 20 46 52 4f 4d 20  SELECT a,b FROM 
6310: 74 34 20 4f 52 44 45 52 20 42 59 20 61 2c 62 0a  t4 ORDER BY a,b.
6320: 20 20 20 20 20 20 29 20 4f 52 44 45 52 20 42 59        ) ORDER BY
6330: 20 78 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 78   x;.    }.  } {x
6340: 20 31 20 78 20 33 7d 0a 20 20 64 6f 5f 74 65 73   1 x 3}.  do_tes
6350: 74 20 73 65 6c 65 63 74 31 2d 31 32 2e 31 30 20  t select1-12.10 
6360: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b  {.    execsql2 {
6370: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 7a 2e  .      SELECT z.
6380: 78 20 46 52 4f 4d 20 28 0a 20 20 20 20 20 20 20  x FROM (.       
6390: 20 53 45 4c 45 43 54 20 61 20 41 53 20 78 2c 62   SELECT a AS x,b
63a0: 20 41 53 20 79 20 46 52 4f 4d 20 74 33 20 55 4e   AS y FROM t3 UN
63b0: 49 4f 4e 20 53 45 4c 45 43 54 20 61 2c 20 62 20  ION SELECT a, b 
63c0: 46 52 4f 4d 20 74 34 20 4f 52 44 45 52 20 42 59  FROM t4 ORDER BY
63d0: 20 61 2c 62 0a 20 20 20 20 20 20 29 20 41 53 20   a,b.      ) AS 
63e0: 27 7a 27 20 4f 52 44 45 52 20 42 59 20 78 3b 0a  'z' ORDER BY x;.
63f0: 20 20 20 20 7d 0a 20 20 7d 20 7b 78 20 31 20 78      }.  } {x 1 x
6400: 20 33 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62   3}.} ;# ifcapab
6410: 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a 0a 0a 23 20  le compound...# 
6420: 43 68 65 63 6b 20 66 6f 72 20 61 20 56 44 42 45  Check for a VDBE
6430: 20 73 74 61 63 6b 20 67 72 6f 77 74 68 20 70 72   stack growth pr
6440: 6f 62 6c 65 6d 20 74 68 61 74 20 65 78 69 73 74  oblem that exist
6450: 65 64 20 61 74 20 6f 6e 65 20 70 6f 69 6e 74 2e  ed at one point.
6460: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62  .#.ifcapable sub
6470: 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73  query {.  do_tes
6480: 74 20 73 65 6c 65 63 74 31 2d 31 33 2e 31 20 7b  t select1-13.1 {
6490: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
64a0: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
64b0: 20 20 63 72 65 61 74 65 20 54 41 42 4c 45 20 61    create TABLE a
64c0: 62 63 28 61 2c 20 62 2c 20 63 2c 20 50 52 49 4d  bc(a, b, c, PRIM
64d0: 41 52 59 20 4b 45 59 28 61 2c 20 62 29 29 3b 0a  ARY KEY(a, b));.
64e0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
64f0: 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20  O abc VALUES(1, 
6500: 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 1);.    }.   
6510: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
6520: 24 69 3c 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20  $i<10} {incr i} 
6530: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
6540: 7b 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54  {.        INSERT
6550: 20 49 4e 54 4f 20 61 62 63 20 53 45 4c 45 43 54   INTO abc SELECT
6560: 20 61 2b 28 73 65 6c 65 63 74 20 6d 61 78 28 61   a+(select max(a
6570: 29 20 46 52 4f 4d 20 61 62 63 29 2c 20 0a 20 20  ) FROM abc), .  
6580: 20 20 20 20 20 20 20 20 20 20 62 2b 28 73 65 6c            b+(sel
6590: 65 63 74 20 6d 61 78 28 61 29 20 46 52 4f 4d 20  ect max(a) FROM 
65a0: 61 62 63 29 2c 20 63 2b 28 73 65 6c 65 63 74 20  abc), c+(select 
65b0: 6d 61 78 28 61 29 20 46 52 4f 4d 20 61 62 63 29  max(a) FROM abc)
65c0: 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20 20   FROM abc;.     
65d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65   }.    }.    exe
65e0: 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20  csql {COMMIT}.  
65f0: 0a 20 20 20 20 23 20 54 68 69 73 20 75 73 65 64  .    # This used
6600: 20 74 6f 20 73 65 67 2d 66 61 75 6c 74 20 77 68   to seg-fault wh
6610: 65 6e 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 65  en the problem e
6620: 78 69 73 74 65 64 2e 0a 20 20 20 20 65 78 65 63  xisted..    exec
6630: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
6640: 43 54 20 63 6f 75 6e 74 28 0a 20 20 20 20 20 20  CT count(.      
6650: 20 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d    (SELECT a FROM
6660: 20 61 62 63 20 57 48 45 52 45 20 61 20 3d 20 4e   abc WHERE a = N
6670: 55 4c 4c 20 41 4e 44 20 62 20 3e 3d 20 75 70 70  ULL AND b >= upp
6680: 65 72 2e 63 29 20 0a 20 20 20 20 20 20 29 20 46  er.c) .      ) F
6690: 52 4f 4d 20 61 62 63 20 41 53 20 75 70 70 65 72  ROM abc AS upper
66a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a  ;.    }.  } {0}.
66b0: 7d 0a 0a 66 6f 72 65 61 63 68 20 74 61 62 20 5b  }..foreach tab [
66c0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
66d0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
66e0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
66f0: 70 65 20 3d 20 27 74 61 62 6c 65 27 7d 5d 20 7b  pe = 'table'}] {
6700: 0a 20 20 64 62 20 65 76 61 6c 20 22 44 52 4f 50  .  db eval "DROP
6710: 20 54 41 42 4c 45 20 24 74 61 62 22 0a 7d 0a 64   TABLE $tab".}.d
6720: 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 20  b close.sqlite3 
6730: 64 62 20 74 65 73 74 2e 64 62 0a 0a 64 6f 5f 74  db test.db..do_t
6740: 65 73 74 20 73 65 6c 65 63 74 31 2d 31 34 2e 31  est select1-14.1
6750: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
6760: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6770: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
6780: 57 48 45 52 45 20 72 6f 77 69 64 3e 31 30 3b 20  WHERE rowid>10; 
6790: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
67a0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
67b0: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 30 3b   WHERE rowid=10;
67c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
67d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
67e0: 20 57 48 45 52 45 20 72 6f 77 69 64 3c 31 30 3b   WHERE rowid<10;
67f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
6800: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
6810: 20 57 48 45 52 45 20 72 6f 77 69 64 3c 3d 31 30   WHERE rowid<=10
6820: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
6830: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
6840: 72 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 31  r WHERE rowid>=1
6850: 30 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  0;.    SELECT * 
6860: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6870: 65 72 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  er;.  }.} {}.do_
6880: 74 65 73 74 20 73 65 6c 65 63 74 31 2d 31 34 2e  test select1-14.
6890: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
68a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 31 30 20 49  .    SELECT 10 I
68b0: 4e 20 28 53 45 4c 45 43 54 20 72 6f 77 69 64 20  N (SELECT rowid 
68c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
68d0: 65 72 29 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 0a  er);.  }.} {0}..
68e0: 69 66 20 7b 5b 64 62 20 6f 6e 65 20 7b 50 52 41  if {[db one {PRA
68f0: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
6900: 7d 5d 3d 3d 22 6e 6f 72 6d 61 6c 22 7d 20 7b 0a  }]=="normal"} {.
6910: 20 20 23 20 43 68 65 63 6b 20 74 68 61 74 20 74    # Check that t
6920: 69 63 6b 65 74 20 23 33 37 37 31 20 68 61 73 20  icket #3771 has 
6930: 62 65 65 6e 20 66 69 78 65 64 2e 20 20 54 68 69  been fixed.  Thi
6940: 73 20 74 65 73 74 20 64 6f 65 73 20 6e 6f 74 0a  s test does not.
6950: 20 20 23 20 77 6f 72 6b 20 77 69 74 68 20 6c 6f    # work with lo
6960: 63 6b 69 6e 67 5f 6d 6f 64 65 3d 45 58 43 4c 55  cking_mode=EXCLU
6970: 53 49 56 45 20 73 6f 20 64 69 73 61 62 6c 65 20  SIVE so disable 
6980: 69 6e 20 74 68 61 74 20 63 61 73 65 2e 0a 20 20  in that case..  
6990: 23 0a 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65  #.  do_test sele
69a0: 63 74 31 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65  ct1-15.1 {.    e
69b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
69c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
69d0: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
69e0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61  INDEX i1 ON t1(a
69f0: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
6a00: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
6a10: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
6a20: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
6a30: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
6a40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
6a50: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
6a60: 20 20 64 6f 5f 74 65 73 74 20 73 65 6c 65 63 74    do_test select
6a70: 31 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c  1-15.2 {.    sql
6a80: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
6a90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 44  .    execsql { D
6aa0: 52 4f 50 20 49 4e 44 45 58 20 69 31 20 7d 20 64  ROP INDEX i1 } d
6ab0: 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65  b2.    db2 close
6ac0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
6ad0: 74 20 73 65 6c 65 63 74 31 2d 31 35 2e 33 20 7b  t select1-15.3 {
6ae0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53  .    execsql { S
6af0: 45 4c 45 43 54 20 32 20 49 4e 20 28 53 45 4c 45  ELECT 2 IN (SELE
6b00: 43 54 20 61 20 46 52 4f 4d 20 74 31 29 20 7d 0a  CT a FROM t1) }.
6b10: 20 20 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 43 72 61    } {1}.}..# Cra
6b20: 73 68 20 62 75 67 20 72 65 70 6f 72 74 65 64 20  sh bug reported 
6b30: 6f 6e 20 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c  on the mailing l
6b40: 69 73 74 20 6f 6e 20 32 30 31 32 2d 30 32 2d 32  ist on 2012-02-2
6b50: 33 0a 23 0a 64 6f 5f 74 65 73 74 20 73 65 6c 65  3.#.do_test sele
6b60: 63 74 31 2d 31 36 2e 31 20 7b 0a 20 20 63 61 74  ct1-16.1 {.  cat
6b70: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 20  chsql {SELECT 1 
6b80: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 2a 29 7d  FROM (SELECT *)}
6b90: 0a 7d 20 7b 31 20 7b 6e 6f 20 74 61 62 6c 65 73  .} {1 {no tables
6ba0: 20 73 70 65 63 69 66 69 65 64 7d 7d 0a 0a 23 20   specified}}..# 
6bb0: 32 30 31 35 2d 30 34 2d 31 37 3a 20 20 61 73 73  2015-04-17:  ass
6bc0: 65 72 74 69 6f 6e 20 66 69 78 2e 0a 64 6f 5f 63  ertion fix..do_c
6bd0: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 73 65 6c  atchsql_test sel
6be0: 65 63 74 31 2d 31 36 2e 32 20 7b 0a 20 20 53 45  ect1-16.2 {.  SE
6bf0: 4c 45 43 54 20 31 20 46 52 4f 4d 20 73 71 6c 69  LECT 1 FROM sqli
6c00: 74 65 5f 6d 61 73 74 65 72 20 4c 49 4d 49 54 20  te_master LIMIT 
6c10: 31 2c 23 31 3b 0a 7d 20 7b 31 20 7b 6e 65 61 72  1,#1;.} {1 {near
6c20: 20 22 23 31 22 3a 20 73 79 6e 74 61 78 20 65 72   "#1": syntax er
6c30: 72 6f 72 7d 7d 0a 20 20 0a 66 69 6e 69 73 68 5f  ror}}.  .finish_
6c40: 74 65 73 74 0a                                   test.