/ Hex Artifact Content
Login

Artifact fff339661707c5bfa0f2bd4974ceabe9b5d7f774:


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