/ Hex Artifact Content
Login

Artifact ca4ea8ac1077f5221055fcb66969892612632ef7:


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 49  is testing the I
01d0: 4e 20 61 6e 64 20 42 45 54 57 45 45 4e 20 6f 70  N and BETWEEN op
01e0: 65 72 61 74 6f 72 2e 0a 23 0a 23 20 24 49 64 3a  erator..#.# $Id:
01f0: 20 69 6e 2e 74 65 73 74 2c 76 20 31 2e 32 30 20   in.test,v 1.20 
0200: 32 30 30 38 2f 30 36 2f 32 34 20 31 32 3a 34 36  2008/06/24 12:46
0210: 3a 33 31 20 64 72 68 20 45 78 70 20 24 0a 0a 73  :31 drh Exp $..s
0220: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0230: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0240: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0250: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 47  /tester.tcl..# G
0260: 65 6e 65 72 61 74 65 20 74 68 65 20 74 65 73 74  enerate the test
0270: 20 64 61 74 61 20 77 65 20 77 69 6c 6c 20 6e 65   data we will ne
0280: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
0290: 20 73 71 75 65 6e 63 65 73 20 6f 66 20 74 65 73   squences of tes
02a0: 74 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e  ts..#.do_test in
02b0: 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.0 {.  execsql
02c0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
02d0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
02e0: 31 28 61 20 69 6e 74 2c 20 62 20 69 6e 74 29 3b  1(a int, b int);
02f0: 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20  .  }.  for {set 
0300: 69 20 31 7d 20 7b 24 69 3c 3d 31 30 7d 20 7b 69  i 1} {$i<=10} {i
0310: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65  ncr i} {.    exe
0320: 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  csql "INSERT INT
0330: 4f 20 74 31 20 56 41 4c 55 45 53 28 24 69 2c 5b  O t1 VALUES($i,[
0340: 65 78 70 72 20 7b 31 3c 3c 24 69 7d 5d 29 22 0a  expr {1<<$i}])".
0350: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
0360: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
0370: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0380: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
0390: 31 30 7d 0a 0a 23 20 44 6f 20 62 61 73 69 63 20  10}..# Do basic 
03a0: 74 65 73 74 69 6e 67 20 6f 66 20 42 45 54 57 45  testing of BETWE
03b0: 45 4e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e  EN..#.do_test in
03c0: 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.1 {.  execsql
03d0: 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   {SELECT a FROM 
03e0: 74 31 20 57 48 45 52 45 20 62 20 42 45 54 57 45  t1 WHERE b BETWE
03f0: 45 4e 20 31 30 20 41 4e 44 20 35 30 20 4f 52 44  EN 10 AND 50 ORD
0400: 45 52 20 42 59 20 61 7d 0a 7d 20 7b 34 20 35 7d  ER BY a}.} {4 5}
0410: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31 2e 32 20  .do_test in-1.2 
0420: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0430: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48  ECT a FROM t1 WH
0440: 45 52 45 20 62 20 4e 4f 54 20 42 45 54 57 45 45  ERE b NOT BETWEE
0450: 4e 20 31 30 20 41 4e 44 20 35 30 20 4f 52 44 45  N 10 AND 50 ORDE
0460: 52 20 42 59 20 61 7d 0a 7d 20 7b 31 20 32 20 33  R BY a}.} {1 2 3
0470: 20 36 20 37 20 38 20 39 20 31 30 7d 0a 64 6f 5f   6 7 8 9 10}.do_
0480: 74 65 73 74 20 69 6e 2d 31 2e 33 20 7b 0a 20 20  test in-1.3 {.  
0490: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
04a0: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
04b0: 62 20 42 45 54 57 45 45 4e 20 61 20 41 4e 44 20  b BETWEEN a AND 
04c0: 61 2a 35 20 4f 52 44 45 52 20 42 59 20 61 7d 0a  a*5 ORDER BY a}.
04d0: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74  } {1 2 3 4}.do_t
04e0: 65 73 74 20 69 6e 2d 31 2e 34 20 7b 0a 20 20 65  est in-1.4 {.  e
04f0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61  xecsql {SELECT a
0500: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
0510: 20 4e 4f 54 20 42 45 54 57 45 45 4e 20 61 20 41   NOT BETWEEN a A
0520: 4e 44 20 61 2a 35 20 4f 52 44 45 52 20 42 59 20  ND a*5 ORDER BY 
0530: 61 7d 0a 7d 20 7b 35 20 36 20 37 20 38 20 39 20  a}.} {5 6 7 8 9 
0540: 31 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31  10}.do_test in-1
0550: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
0560: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
0570: 20 57 48 45 52 45 20 62 20 42 45 54 57 45 45 4e   WHERE b BETWEEN
0580: 20 61 20 41 4e 44 20 61 2a 35 20 4f 52 20 62 3d   a AND a*5 OR b=
0590: 35 31 32 20 4f 52 44 45 52 20 42 59 20 61 7d 0a  512 ORDER BY a}.
05a0: 7d 20 7b 31 20 32 20 33 20 34 20 39 7d 0a 64 6f  } {1 2 3 4 9}.do
05b0: 5f 74 65 73 74 20 69 6e 2d 31 2e 37 20 7b 0a 20  _test in-1.7 {. 
05c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
05d0: 20 61 2b 20 31 30 30 2a 28 61 20 42 45 54 57 45   a+ 100*(a BETWE
05e0: 45 4e 20 31 20 61 6e 64 20 33 29 20 46 52 4f 4d  EN 1 and 3) FROM
05f0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 62 7d 0a   t1 ORDER BY b}.
0600: 7d 20 7b 31 30 31 20 31 30 32 20 31 30 33 20 34  } {101 102 103 4
0610: 20 35 20 36 20 37 20 38 20 39 20 31 30 7d 0a 0a   5 6 7 8 9 10}..
0620: 23 20 54 68 65 20 72 65 73 74 20 6f 66 20 74 68  # The rest of th
0630: 69 73 20 66 69 6c 65 20 63 6f 6e 63 65 6e 74 72  is file concentr
0640: 61 74 65 73 20 6f 6e 20 74 65 73 74 69 6e 67 20  ates on testing 
0650: 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2e  the IN operator.
0660: 0a 23 20 53 6b 69 70 20 74 68 69 73 20 69 66 20  .# Skip this if 
0670: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 63  the library is c
0680: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
0690: 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
06a0: 59 20 0a 23 20 28 62 65 63 61 75 73 65 20 74 68  Y .# (because th
06b0: 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  e IN operator is
06c0: 20 75 6e 61 76 61 69 6c 61 62 6c 65 29 2e 0a 23   unavailable)..#
06d0: 0a 69 66 63 61 70 61 62 6c 65 20 21 73 75 62 71  .ifcapable !subq
06e0: 75 65 72 79 20 7b 0a 20 20 66 69 6e 69 73 68 5f  uery {.  finish_
06f0: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
0700: 0a 23 20 54 65 73 74 69 6e 67 20 6f 66 20 74 68  .# Testing of th
0710: 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  e IN operator us
0720: 69 6e 67 20 73 74 61 74 69 63 20 6c 69 73 74 73  ing static lists
0730: 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2d 68 61   on the right-ha
0740: 6e 64 20 73 69 64 65 2e 0a 23 0a 64 6f 5f 74 65  nd side..#.do_te
0750: 73 74 20 69 6e 2d 32 2e 31 20 7b 0a 20 20 65 78  st in-2.1 {.  ex
0760: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20  ecsql {SELECT a 
0770: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20  FROM t1 WHERE b 
0780: 49 4e 20 28 38 2c 31 32 2c 31 36 2c 32 34 2c 33  IN (8,12,16,24,3
0790: 32 29 20 4f 52 44 45 52 20 42 59 20 61 7d 0a 7d  2) ORDER BY a}.}
07a0: 20 7b 33 20 34 20 35 7d 0a 64 6f 5f 74 65 73 74   {3 4 5}.do_test
07b0: 20 69 6e 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63   in-2.2 {.  exec
07c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52  sql {SELECT a FR
07d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 4e 4f  OM t1 WHERE b NO
07e0: 54 20 49 4e 20 28 38 2c 31 32 2c 31 36 2c 32 34  T IN (8,12,16,24
07f0: 2c 33 32 29 20 4f 52 44 45 52 20 42 59 20 61 7d  ,32) ORDER BY a}
0800: 0a 7d 20 7b 31 20 32 20 36 20 37 20 38 20 39 20  .} {1 2 6 7 8 9 
0810: 31 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 32  10}.do_test in-2
0820: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
0830: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
0840: 20 57 48 45 52 45 20 62 20 49 4e 20 28 38 2c 31   WHERE b IN (8,1
0850: 32 2c 31 36 2c 32 34 2c 33 32 29 20 4f 52 20 62  2,16,24,32) OR b
0860: 3d 35 31 32 20 4f 52 44 45 52 20 42 59 20 61 7d  =512 ORDER BY a}
0870: 0a 7d 20 7b 33 20 34 20 35 20 39 7d 0a 64 6f 5f  .} {3 4 5 9}.do_
0880: 74 65 73 74 20 69 6e 2d 32 2e 34 20 7b 0a 20 20  test in-2.4 {.  
0890: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
08a0: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
08b0: 62 20 4e 4f 54 20 49 4e 20 28 38 2c 31 32 2c 31  b NOT IN (8,12,1
08c0: 36 2c 32 34 2c 33 32 29 20 4f 52 20 62 3d 35 31  6,24,32) OR b=51
08d0: 32 20 4f 52 44 45 52 20 42 59 20 61 7d 0a 7d 20  2 ORDER BY a}.} 
08e0: 7b 31 20 32 20 36 20 37 20 38 20 39 20 31 30 7d  {1 2 6 7 8 9 10}
08f0: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 32 2e 35 20  .do_test in-2.5 
0900: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0910: 45 43 54 20 61 2b 31 30 30 2a 28 62 20 49 4e 20  ECT a+100*(b IN 
0920: 28 38 2c 31 36 2c 32 34 29 29 20 46 52 4f 4d 20  (8,16,24)) FROM 
0930: 74 31 20 4f 52 44 45 52 20 42 59 20 62 7d 0a 7d  t1 ORDER BY b}.}
0940: 20 7b 31 20 32 20 31 30 33 20 31 30 34 20 35 20   {1 2 103 104 5 
0950: 36 20 37 20 38 20 39 20 31 30 7d 0a 0a 64 6f 5f  6 7 8 9 10}..do_
0960: 74 65 73 74 20 69 6e 2d 32 2e 36 20 7b 0a 20 20  test in-2.6 {.  
0970: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0980: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
0990: 62 20 49 4e 20 28 62 2b 38 2c 36 34 29 7d 0a 7d  b IN (b+8,64)}.}
09a0: 20 7b 36 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d   {6}.do_test in-
09b0: 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.7 {.  execsql 
09c0: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
09d0: 31 20 57 48 45 52 45 20 62 20 49 4e 20 28 6d 61  1 WHERE b IN (ma
09e0: 78 28 35 2c 31 30 2c 62 29 2c 32 30 29 7d 0a 7d  x(5,10,b),20)}.}
09f0: 20 7b 34 20 35 20 36 20 37 20 38 20 39 20 31 30   {4 5 6 7 8 9 10
0a00: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 32 2e 38  }.do_test in-2.8
0a10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0a20: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
0a30: 48 45 52 45 20 62 20 49 4e 20 28 38 2a 32 2c 36  HERE b IN (8*2,6
0a40: 34 2f 32 29 20 4f 52 44 45 52 20 42 59 20 62 7d  4/2) ORDER BY b}
0a50: 0a 7d 20 7b 34 20 35 7d 0a 64 6f 5f 74 65 73 74  .} {4 5}.do_test
0a60: 20 69 6e 2d 32 2e 39 20 7b 0a 20 20 65 78 65 63   in-2.9 {.  exec
0a70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52  sql {SELECT a FR
0a80: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 49 4e  OM t1 WHERE b IN
0a90: 20 28 6d 61 78 28 35 2c 31 30 29 2c 32 30 29 7d   (max(5,10),20)}
0aa0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  .} {}.do_test in
0ab0: 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  -2.10 {.  execsq
0ac0: 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  l {SELECT a FROM
0ad0: 20 74 31 20 57 48 45 52 45 20 6d 69 6e 28 30 2c   t1 WHERE min(0,
0ae0: 62 20 49 4e 20 28 61 2c 33 30 29 29 7d 0a 7d 20  b IN (a,30))}.} 
0af0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 32 2e  {}.do_test in-2.
0b00: 31 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  11 {.  set v [ca
0b10: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53 45  tch {execsql {SE
0b20: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
0b30: 48 45 52 45 20 63 20 49 4e 20 28 31 30 2c 32 30  HERE c IN (10,20
0b40: 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  )}} msg].  lappe
0b50: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0b60: 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20  no such column: 
0b70: 63 7d 7d 0a 0a 23 20 54 65 73 74 69 6e 67 20 74  c}}..# Testing t
0b80: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77  he IN operator w
0b90: 68 65 72 65 20 74 68 65 20 72 69 67 68 74 2d 68  here the right-h
0ba0: 61 6e 64 20 73 69 64 65 20 69 73 20 61 20 53 45  and side is a SE
0bb0: 4c 45 43 54 0a 23 0a 64 6f 5f 74 65 73 74 20 69  LECT.#.do_test i
0bc0: 6e 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  n-3.1 {.  execsq
0bd0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
0be0: 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 57 48 45   FROM t1.    WHE
0bf0: 52 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20  RE b IN (SELECT 
0c00: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
0c10: 61 3c 35 29 0a 20 20 20 20 4f 52 44 45 52 20 42  a<5).    ORDER B
0c20: 59 20 61 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  Y a.  }.} {1 2 3
0c30: 20 34 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 33   4}.do_test in-3
0c40: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0c50: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0c60: 4f 4d 20 74 31 0a 20 20 20 20 57 48 45 52 45 20  OM t1.    WHERE 
0c70: 62 20 49 4e 20 28 53 45 4c 45 43 54 20 62 20 46  b IN (SELECT b F
0c80: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3c 35  ROM t1 WHERE a<5
0c90: 29 20 4f 52 20 62 3d 3d 35 31 32 0a 20 20 20 20  ) OR b==512.    
0ca0: 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 0a 7d  ORDER BY a.  }.}
0cb0: 20 7b 31 20 32 20 33 20 34 20 39 7d 0a 64 6f 5f   {1 2 3 4 9}.do_
0cc0: 74 65 73 74 20 69 6e 2d 33 2e 33 20 7b 0a 20 20  test in-3.3 {.  
0cd0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0ce0: 4c 45 43 54 20 61 20 2b 20 31 30 30 2a 28 62 20  LECT a + 100*(b 
0cf0: 49 4e 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f  IN (SELECT b FRO
0d00: 4d 20 74 31 20 57 48 45 52 45 20 61 3c 35 29 29  M t1 WHERE a<5))
0d10: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
0d20: 59 20 62 0a 20 20 7d 0a 7d 20 7b 31 30 31 20 31  Y b.  }.} {101 1
0d30: 30 32 20 31 30 33 20 31 30 34 20 35 20 36 20 37  02 103 104 5 6 7
0d40: 20 38 20 39 20 31 30 7d 0a 0a 23 20 4d 61 6b 65   8 9 10}..# Make
0d50: 20 73 75 72 65 20 74 68 65 20 55 50 44 41 54 45   sure the UPDATE
0d60: 20 61 6e 64 20 44 45 4c 45 54 45 20 63 6f 6d 6d   and DELETE comm
0d70: 61 6e 64 73 20 77 6f 72 6b 20 77 69 74 68 20 49  ands work with I
0d80: 4e 2d 53 45 4c 45 43 54 0a 23 0a 64 6f 5f 74 65  N-SELECT.#.do_te
0d90: 73 74 20 69 6e 2d 34 2e 31 20 7b 0a 20 20 65 78  st in-4.1 {.  ex
0da0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
0db0: 54 45 20 74 31 20 53 45 54 20 62 3d 62 2a 32 20  TE t1 SET b=b*2 
0dc0: 0a 20 20 20 20 57 48 45 52 45 20 62 20 49 4e 20  .    WHERE b IN 
0dd0: 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74  (SELECT b FROM t
0de0: 31 20 57 48 45 52 45 20 61 3e 38 29 0a 20 20 7d  1 WHERE a>8).  }
0df0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0e00: 43 54 20 62 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT b FROM t1 ORD
0e10: 45 52 20 42 59 20 62 7d 0a 7d 20 7b 32 20 34 20  ER BY b}.} {2 4 
0e20: 38 20 31 36 20 33 32 20 36 34 20 31 32 38 20 32  8 16 32 64 128 2
0e30: 35 36 20 31 30 32 34 20 32 30 34 38 7d 0a 64 6f  56 1024 2048}.do
0e40: 5f 74 65 73 74 20 69 6e 2d 34 2e 32 20 7b 0a 20  _test in-4.2 {. 
0e50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
0e60: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
0e70: 45 52 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54  ERE b IN (SELECT
0e80: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
0e90: 20 61 3e 38 29 0a 20 20 7d 0a 20 20 65 78 65 63   a>8).  }.  exec
0ea0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52  sql {SELECT a FR
0eb0: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 61  OM t1 ORDER BY a
0ec0: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36  }.} {1 2 3 4 5 6
0ed0: 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74 20 69 6e   7 8}.do_test in
0ee0: 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.3 {.  execsql
0ef0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
0f00: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 4e 4f  OM t1 WHERE b NO
0f10: 54 20 49 4e 20 28 53 45 4c 45 43 54 20 62 20 46  T IN (SELECT b F
0f20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 34  ROM t1 WHERE a>4
0f30: 29 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ).  }.  execsql 
0f40: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
0f50: 31 20 4f 52 44 45 52 20 42 59 20 61 7d 0a 7d 20  1 ORDER BY a}.} 
0f60: 7b 35 20 36 20 37 20 38 7d 0a 0a 23 20 44 6f 20  {5 6 7 8}..# Do 
0f70: 61 6e 20 49 4e 20 77 69 74 68 20 61 20 63 6f 6e  an IN with a con
0f80: 73 74 61 6e 74 20 52 48 53 20 62 75 74 20 77 68  stant RHS but wh
0f90: 65 72 65 20 74 68 65 20 52 48 53 20 68 61 73 20  ere the RHS has 
0fa0: 6d 61 6e 79 2c 20 6d 61 6e 79 0a 23 20 65 6c 65  many, many.# ele
0fb0: 6d 65 6e 74 73 2e 20 20 57 65 20 6e 65 65 64 20  ments.  We need 
0fc0: 74 6f 20 74 65 73 74 20 74 68 61 74 20 63 6f 6c  to test that col
0fd0: 6c 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 68  lisions in the h
0fe0: 61 73 68 20 74 61 62 6c 65 0a 23 20 61 72 65 20  ash table.# are 
0ff0: 72 65 73 6f 6c 76 65 64 20 70 72 6f 70 65 72 6c  resolved properl
1000: 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 2d  y..#.do_test in-
1010: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
1020: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1030: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 68 65 6c  O t1 VALUES('hel
1040: 6c 6f 27 2c 20 27 77 6f 72 6c 64 27 29 3b 0a 20  lo', 'world');. 
1050: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1060: 20 74 31 0a 20 20 20 20 57 48 45 52 45 20 61 20   t1.    WHERE a 
1070: 49 4e 20 28 0a 20 20 20 20 20 20 20 27 44 6f 27  IN (.       'Do'
1080: 2c 27 61 6e 27 2c 27 49 4e 27 2c 27 77 69 74 68  ,'an','IN','with
1090: 27 2c 27 61 27 2c 27 63 6f 6e 73 74 61 6e 74 27  ','a','constant'
10a0: 2c 27 52 48 53 27 2c 27 62 75 74 27 2c 27 77 68  ,'RHS','but','wh
10b0: 65 72 65 27 2c 27 74 68 65 27 2c 0a 20 20 20 20  ere','the',.    
10c0: 20 20 20 27 68 61 73 27 2c 27 6d 61 6e 79 27 2c     'has','many',
10d0: 27 65 6c 65 6d 65 6e 74 73 27 2c 27 57 65 27 2c  'elements','We',
10e0: 27 6e 65 65 64 27 2c 27 74 6f 27 2c 27 74 65 73  'need','to','tes
10f0: 74 27 2c 27 74 68 61 74 27 2c 0a 20 20 20 20 20  t','that',.     
1100: 20 20 27 63 6f 6c 6c 69 73 69 6f 6e 73 27 2c 27    'collisions','
1110: 68 61 73 68 27 2c 27 74 61 62 6c 65 27 2c 27 61  hash','table','a
1120: 72 65 27 2c 27 72 65 73 6f 6c 76 65 64 27 2c 27  re','resolved','
1130: 70 72 6f 70 65 72 6c 79 27 2c 0a 20 20 20 20 20  properly',.     
1140: 20 20 27 54 68 69 73 27 2c 27 69 6e 2d 73 65 74    'This','in-set
1150: 27 2c 27 63 6f 6e 74 61 69 6e 73 27 2c 27 74 68  ','contains','th
1160: 69 72 74 79 27 2c 27 6f 6e 65 27 2c 27 65 6e 74  irty','one','ent
1170: 72 69 65 73 27 2c 27 68 65 6c 6c 6f 27 29 3b 0a  ries','hello');.
1180: 20 20 7d 0a 7d 20 7b 68 65 6c 6c 6f 20 77 6f 72    }.} {hello wor
1190: 6c 64 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  ld}..# Make sure
11a0: 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72   the IN operator
11b0: 20 77 6f 72 6b 73 20 77 69 74 68 20 49 4e 54 45   works with INTE
11c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
11d0: 66 69 65 6c 64 73 2e 0a 23 0a 64 6f 5f 74 65 73  fields..#.do_tes
11e0: 74 20 69 6e 2d 36 2e 31 20 7b 0a 20 20 65 78 65  t in-6.1 {.  exe
11f0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
1200: 45 20 54 41 42 4c 45 20 74 61 28 61 20 49 4e 54  E TABLE ta(a INT
1210: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1220: 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , b);.    INSERT
1230: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
1240: 31 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1,1);.    INSERT
1250: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
1260: 32 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,2);.    INSERT
1270: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
1280: 33 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  3,3);.    INSERT
1290: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
12a0: 34 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  4,4);.    INSERT
12b0: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
12c0: 36 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  6,6);.    INSERT
12d0: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
12e0: 38 2c 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  8,8);.    INSERT
12f0: 20 49 4e 54 4f 20 74 61 20 56 41 4c 55 45 53 28   INTO ta VALUES(
1300: 31 30 2c 0a 20 20 20 20 20 20 20 27 54 68 69 73  10,.       'This
1310: 20 69 73 20 61 20 6b 65 79 20 74 68 61 74 20 69   is a key that i
1320: 73 20 6c 6f 6e 67 20 65 6e 6f 75 67 68 20 74 6f  s long enough to
1330: 20 72 65 71 75 69 72 65 20 61 20 6d 61 6c 6c 6f   require a mallo
1340: 63 20 69 6e 20 74 68 65 20 56 44 42 45 27 29 3b  c in the VDBE');
1350: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1360: 4f 4d 20 74 61 20 57 48 45 52 45 20 61 3c 31 30  OM ta WHERE a<10
1370: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 32  ;.  }.} {1 1 2 2
1380: 20 33 20 33 20 34 20 34 20 36 20 36 20 38 20 38   3 3 4 4 6 6 8 8
1390: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 36 2e 32  }.do_test in-6.2
13a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
13b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
13c0: 74 62 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  tb(a INTEGER PRI
13d0: 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20  MARY KEY, b);.  
13e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
13f0: 20 56 41 4c 55 45 53 28 31 2c 31 29 3b 0a 20 20   VALUES(1,1);.  
1400: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
1410: 20 56 41 4c 55 45 53 28 32 2c 32 29 3b 0a 20 20   VALUES(2,2);.  
1420: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
1430: 20 56 41 4c 55 45 53 28 33 2c 33 29 3b 0a 20 20   VALUES(3,3);.  
1440: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
1450: 20 56 41 4c 55 45 53 28 35 2c 35 29 3b 0a 20 20   VALUES(5,5);.  
1460: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
1470: 20 56 41 4c 55 45 53 28 37 2c 37 29 3b 0a 20 20   VALUES(7,7);.  
1480: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
1490: 20 56 41 4c 55 45 53 28 39 2c 39 29 3b 0a 20 20   VALUES(9,9);.  
14a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62    INSERT INTO tb
14b0: 20 56 41 4c 55 45 53 28 31 31 2c 0a 20 20 20 20   VALUES(11,.    
14c0: 20 20 20 27 54 68 69 73 20 69 73 20 61 20 6b 65     'This is a ke
14d0: 79 20 74 68 61 74 20 69 73 20 6c 6f 6e 67 20 65  y that is long e
14e0: 6e 6f 75 67 68 20 74 6f 20 72 65 71 75 69 72 65  nough to require
14f0: 20 61 20 6d 61 6c 6c 6f 63 20 69 6e 20 74 68 65   a malloc in the
1500: 20 56 44 42 45 27 29 3b 0a 20 20 20 20 53 45 4c   VDBE');.    SEL
1510: 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 20 57 48  ECT * FROM tb WH
1520: 45 52 45 20 61 3c 31 30 3b 0a 20 20 7d 0a 7d 20  ERE a<10;.  }.} 
1530: 7b 31 20 31 20 32 20 32 20 33 20 33 20 35 20 35  {1 1 2 2 3 3 5 5
1540: 20 37 20 37 20 39 20 39 7d 0a 64 6f 5f 74 65 73   7 7 9 9}.do_tes
1550: 74 20 69 6e 2d 36 2e 33 20 7b 0a 20 20 65 78 65  t in-6.3 {.  exe
1560: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1570: 54 20 61 20 46 52 4f 4d 20 74 61 20 57 48 45 52  T a FROM ta WHER
1580: 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20 61  E b IN (SELECT a
1590: 20 46 52 4f 4d 20 74 62 29 3b 0a 20 20 7d 0a 7d   FROM tb);.  }.}
15a0: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
15b0: 20 69 6e 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63   in-6.4 {.  exec
15c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
15d0: 20 61 20 46 52 4f 4d 20 74 61 20 57 48 45 52 45   a FROM ta WHERE
15e0: 20 62 20 4e 4f 54 20 49 4e 20 28 53 45 4c 45 43   b NOT IN (SELEC
15f0: 54 20 61 20 46 52 4f 4d 20 74 62 29 3b 0a 20 20  T a FROM tb);.  
1600: 7d 0a 7d 20 7b 34 20 36 20 38 20 31 30 7d 0a 64  }.} {4 6 8 10}.d
1610: 6f 5f 74 65 73 74 20 69 6e 2d 36 2e 35 20 7b 0a  o_test in-6.5 {.
1620: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1630: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 61  SELECT a FROM ta
1640: 20 57 48 45 52 45 20 62 20 49 4e 20 28 53 45 4c   WHERE b IN (SEL
1650: 45 43 54 20 62 20 46 52 4f 4d 20 74 62 29 3b 0a  ECT b FROM tb);.
1660: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 31 30 7d    }.} {1 2 3 10}
1670: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 36 2e 36 20  .do_test in-6.6 
1680: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1690: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
16a0: 74 61 20 57 48 45 52 45 20 62 20 4e 4f 54 20 49  ta WHERE b NOT I
16b0: 4e 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  N (SELECT b FROM
16c0: 20 74 62 29 3b 0a 20 20 7d 0a 7d 20 7b 34 20 36   tb);.  }.} {4 6
16d0: 20 38 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 36   8}.do_test in-6
16e0: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
16f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
1700: 4f 4d 20 74 61 20 57 48 45 52 45 20 61 20 49 4e  OM ta WHERE a IN
1710: 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   (SELECT a FROM 
1720: 74 62 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  tb);.  }.} {1 2 
1730: 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 36 2e  3}.do_test in-6.
1740: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
1750: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1760: 4d 20 74 61 20 57 48 45 52 45 20 61 20 4e 4f 54  M ta WHERE a NOT
1770: 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52   IN (SELECT a FR
1780: 4f 4d 20 74 62 29 3b 0a 20 20 7d 0a 7d 20 7b 34  OM tb);.  }.} {4
1790: 20 36 20 38 20 31 30 7d 0a 64 6f 5f 74 65 73 74   6 8 10}.do_test
17a0: 20 69 6e 2d 36 2e 39 20 7b 0a 20 20 65 78 65 63   in-6.9 {.  exec
17b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
17c0: 20 61 20 46 52 4f 4d 20 74 61 20 57 48 45 52 45   a FROM ta WHERE
17d0: 20 61 20 49 4e 20 28 53 45 4c 45 43 54 20 62 20   a IN (SELECT b 
17e0: 46 52 4f 4d 20 74 62 29 3b 0a 20 20 7d 0a 7d 20  FROM tb);.  }.} 
17f0: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
1800: 69 6e 2d 36 2e 31 30 20 7b 0a 20 20 65 78 65 63  in-6.10 {.  exec
1810: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1820: 20 61 20 46 52 4f 4d 20 74 61 20 57 48 45 52 45   a FROM ta WHERE
1830: 20 61 20 4e 4f 54 20 49 4e 20 28 53 45 4c 45 43   a NOT IN (SELEC
1840: 54 20 62 20 46 52 4f 4d 20 74 62 29 3b 0a 20 20  T b FROM tb);.  
1850: 7d 0a 7d 20 7b 34 20 36 20 38 20 31 30 7d 0a 0a  }.} {4 6 8 10}..
1860: 23 20 54 65 73 74 73 20 6f 66 20 49 4e 20 6f 70  # Tests of IN op
1870: 65 72 61 74 6f 72 20 61 67 61 69 6e 73 74 20 65  erator against e
1880: 6d 70 74 79 20 73 65 74 73 2e 20 20 28 54 69 63  mpty sets.  (Tic
1890: 6b 65 74 20 23 31 38 35 29 0a 23 0a 64 6f 5f 74  ket #185).#.do_t
18a0: 65 73 74 20 69 6e 2d 37 2e 31 20 7b 0a 20 20 65  est in-7.1 {.  e
18b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
18c0: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48  ECT a FROM t1 WH
18d0: 45 52 45 20 61 20 49 4e 20 28 29 3b 0a 20 20 7d  ERE a IN ();.  }
18e0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  .} {}.do_test in
18f0: 2d 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.2 {.  execsql
1900: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1910: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20  FROM t1 WHERE a 
1920: 49 4e 20 28 35 29 3b 0a 20 20 7d 0a 7d 20 7b 35  IN (5);.  }.} {5
1930: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 37 2e 33  }.do_test in-7.3
1940: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1950: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
1960: 20 74 31 20 57 48 45 52 45 20 61 20 4e 4f 54 20   t1 WHERE a NOT 
1970: 49 4e 20 28 29 20 4f 52 44 45 52 20 42 59 20 61  IN () ORDER BY a
1980: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 36 20 37 20 38  ;.  }.} {5 6 7 8
1990: 20 68 65 6c 6c 6f 7d 0a 64 6f 5f 74 65 73 74 20   hello}.do_test 
19a0: 69 6e 2d 37 2e 34 20 7b 0a 20 20 65 78 65 63 73  in-7.4 {.  execs
19b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
19c0: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
19d0: 61 20 49 4e 20 28 35 29 20 41 4e 44 20 62 20 49  a IN (5) AND b I
19e0: 4e 20 28 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  N ();.  }.} {}.d
19f0: 6f 5f 74 65 73 74 20 69 6e 2d 37 2e 35 20 7b 0a  o_test in-7.5 {.
1a00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1a10: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
1a20: 20 57 48 45 52 45 20 61 20 49 4e 20 28 35 29 20   WHERE a IN (5) 
1a30: 41 4e 44 20 62 20 4e 4f 54 20 49 4e 20 28 29 3b  AND b NOT IN ();
1a40: 0a 20 20 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65  .  }.} {5}.do_te
1a50: 73 74 20 69 6e 2d 37 2e 36 20 7b 0a 20 20 65 78  st in-7.6 {.  ex
1a60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1a70: 43 54 20 61 20 46 52 4f 4d 20 74 61 20 57 48 45  CT a FROM ta WHE
1a80: 52 45 20 61 20 49 4e 20 28 29 3b 0a 20 20 7d 0a  RE a IN ();.  }.
1a90: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d  } {}.do_test in-
1aa0: 37 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.7 {.  execsql 
1ab0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
1ac0: 52 4f 4d 20 74 61 20 57 48 45 52 45 20 61 20 4e  ROM ta WHERE a N
1ad0: 4f 54 20 49 4e 20 28 29 3b 0a 20 20 7d 0a 7d 20  OT IN ();.  }.} 
1ae0: 7b 31 20 32 20 33 20 34 20 36 20 38 20 31 30 7d  {1 2 3 4 6 8 10}
1af0: 0a 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 38 2e 31  ..do_test in-8.1
1b00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1b10: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
1b20: 20 74 31 20 57 48 45 52 45 20 61 20 49 4e 20 28   t1 WHERE a IN (
1b30: 27 68 65 6c 6c 6f 27 2c 27 74 68 65 72 65 27 29  'hello','there')
1b40: 0a 20 20 7d 0a 7d 20 7b 77 6f 72 6c 64 7d 0a 64  .  }.} {world}.d
1b50: 6f 5f 74 65 73 74 20 69 6e 2d 38 2e 32 20 7b 0a  o_test in-8.2 {.
1b60: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1b70: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
1b80: 20 57 48 45 52 45 20 61 20 49 4e 20 28 22 68 65   WHERE a IN ("he
1b90: 6c 6c 6f 22 2c 27 74 68 65 72 65 27 29 0a 20 20  llo",'there').  
1ba0: 7d 0a 7d 20 7b 77 6f 72 6c 64 7d 0a 0a 23 20 54  }.} {world}..# T
1bb0: 65 73 74 20 63 6f 6e 73 74 72 75 63 74 73 20 6f  est constructs o
1bc0: 66 20 74 68 65 20 66 6f 72 6d 3a 20 20 65 78 70  f the form:  exp
1bd0: 72 20 49 4e 20 74 61 62 6c 65 6e 61 6d 65 0a 23  r IN tablename.#
1be0: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 39 2e 31 20  .do_test in-9.1 
1bf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1c00: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1c10: 34 20 41 53 20 53 45 4c 45 43 54 20 61 20 46 52  4 AS SELECT a FR
1c20: 4f 4d 20 74 62 3b 0a 20 20 20 20 53 45 4c 45 43  OM tb;.    SELEC
1c30: 54 20 2a 20 46 52 4f 4d 20 74 34 3b 20 20 20 20  T * FROM t4;    
1c40: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 35 20  .  }.} {1 2 3 5 
1c50: 37 20 39 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20  7 9 11}.do_test 
1c60: 69 6e 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73  in-9.2 {.  execs
1c70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1c80: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
1c90: 61 20 49 4e 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  a IN t4;.  }.} {
1ca0: 33 32 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  32 128}.do_test 
1cb0: 69 6e 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63 73  in-9.3 {.  execs
1cc0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1cd0: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
1ce0: 61 20 4e 4f 54 20 49 4e 20 74 34 3b 0a 20 20 7d  a NOT IN t4;.  }
1cf0: 0a 7d 20 7b 36 34 20 32 35 36 20 77 6f 72 6c 64  .} {64 256 world
1d00: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 39 2e 34  }.do_test in-9.4
1d10: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1d20: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
1d30: 4d 20 74 31 20 57 48 45 52 45 20 61 20 4e 4f 54  M t1 WHERE a NOT
1d40: 20 49 4e 20 74 62 3b 0a 20 20 7d 0a 7d 20 7b 31   IN tb;.  }.} {1
1d50: 20 7b 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20   {only a single 
1d60: 72 65 73 75 6c 74 20 61 6c 6c 6f 77 65 64 20 66  result allowed f
1d70: 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
1d80: 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   is part of an e
1d90: 78 70 72 65 73 73 69 6f 6e 7d 7d 0a 0a 23 20 49  xpression}}..# I
1da0: 4e 20 63 6c 61 75 73 65 73 20 69 6e 20 43 48 45  N clauses in CHE
1db0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  CK constraints. 
1dc0: 20 54 69 63 6b 65 74 20 23 31 36 34 35 0a 23 0a   Ticket #1645.#.
1dd0: 64 6f 5f 74 65 73 74 20 69 6e 2d 31 30 2e 31 20  do_test in-10.1 
1de0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1df0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1e00: 35 28 0a 20 20 20 20 20 20 61 20 49 4e 54 45 47  5(.      a INTEG
1e10: 45 52 2c 0a 20 20 20 20 20 20 43 48 45 43 4b 28  ER,.      CHECK(
1e20: 20 61 20 49 4e 20 28 31 31 31 2c 32 32 32 2c 33   a IN (111,222,3
1e30: 33 33 29 20 29 0a 20 20 20 20 29 3b 0a 20 20 20  33) ).    );.   
1e40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
1e50: 56 41 4c 55 45 53 28 31 31 31 29 3b 0a 20 20 20  VALUES(111);.   
1e60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1e70: 35 3b 0a 20 20 7d 0a 7d 20 7b 31 31 31 7d 0a 64  5;.  }.} {111}.d
1e80: 6f 5f 74 65 73 74 20 69 6e 2d 31 30 2e 32 20 7b  o_test in-10.2 {
1e90: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1ea0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
1eb0: 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 7d 0a   VALUES(4);.  }.
1ec0: 7d 20 7b 31 20 7b 63 6f 6e 73 74 72 61 69 6e 74  } {1 {constraint
1ed0: 20 66 61 69 6c 65 64 7d 7d 0a 0a 23 20 54 69 63   failed}}..# Tic
1ee0: 6b 65 74 20 23 31 38 32 31 0a 23 0a 23 20 54 79  ket #1821.#.# Ty
1ef0: 70 65 20 61 66 66 69 6e 69 74 79 20 61 70 70 6c  pe affinity appl
1f00: 69 65 64 20 74 6f 20 74 68 65 20 72 69 67 68 74  ied to the right
1f10: 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
1f20: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2e 0a 23 0a   IN operator..#.
1f30: 64 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 31 20  do_test in-11.1 
1f40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1f50: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1f60: 36 28 61 2c 62 20 4e 55 4d 45 52 49 43 29 3b 0a  6(a,b NUMERIC);.
1f70: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1f80: 74 36 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a  t6 VALUES(1,2);.
1f90: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1fa0: 74 36 20 56 41 4c 55 45 53 28 32 2c 33 29 3b 0a  t6 VALUES(2,3);.
1fb0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1fc0: 4d 20 74 36 20 57 48 45 52 45 20 62 20 49 4e 20  M t6 WHERE b IN 
1fd0: 28 32 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d  (2);.  }.} {1 2}
1fe0: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 32  .do_test in-11.2
1ff0: 20 7b 0a 20 20 23 20 54 68 65 20 27 32 27 20 73   {.  # The '2' s
2000: 68 6f 75 6c 64 20 62 65 20 63 6f 65 72 63 65 64  hould be coerced
2010: 20 69 6e 74 6f 20 32 20 62 65 63 61 75 73 65 20   into 2 because 
2020: 74 36 2e 62 20 69 73 20 4e 55 4d 45 52 49 43 0a  t6.b is NUMERIC.
2030: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2040: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36  SELECT * FROM t6
2050: 20 57 48 45 52 45 20 62 20 49 4e 20 28 27 32 27   WHERE b IN ('2'
2060: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64  );.  }.} {1 2}.d
2070: 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 33 20 7b  o_test in-11.3 {
2080: 0a 20 20 23 20 4e 6f 20 63 6f 65 72 63 69 6f 6e  .  # No coercion
2090: 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 20 68 65   should occur he
20a0: 72 65 20 62 65 63 61 75 73 65 20 6f 66 20 74 68  re because of th
20b0: 65 20 75 6e 61 72 79 20 2b 20 62 65 66 6f 72 65  e unary + before
20c0: 20 62 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   b..  execsql {.
20d0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
20e0: 4d 20 74 36 20 57 48 45 52 45 20 2b 62 20 49 4e  M t6 WHERE +b IN
20f0: 20 28 27 32 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d   ('2');.  }.} {}
2100: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 34  .do_test in-11.4
2110: 20 7b 0a 20 20 23 20 4e 6f 20 63 6f 65 72 63 69   {.  # No coerci
2120: 6f 6e 20 62 65 63 61 75 73 65 20 63 6f 6c 75 6d  on because colum
2130: 6e 20 61 20 61 73 20 61 66 66 69 6e 69 74 79 20  n a as affinity 
2140: 4e 4f 4e 45 0a 20 20 65 78 65 63 73 71 6c 20 7b  NONE.  execsql {
2150: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2160: 4f 4d 20 74 36 20 57 48 45 52 45 20 61 20 49 4e  OM t6 WHERE a IN
2170: 20 28 27 32 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d   ('2');.  }.} {}
2180: 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 35  .do_test in-11.5
2190: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
21a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
21b0: 20 74 36 20 57 48 45 52 45 20 61 20 49 4e 20 28   t6 WHERE a IN (
21c0: 32 29 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33 7d 0a  2);.  }.} {2 3}.
21d0: 64 6f 5f 74 65 73 74 20 69 6e 2d 31 31 2e 36 20  do_test in-11.6 
21e0: 7b 0a 20 20 23 20 4e 6f 20 63 6f 65 72 63 69 6f  {.  # No coercio
21f0: 6e 20 62 65 63 61 75 73 65 20 63 6f 6c 75 6d 6e  n because column
2200: 20 61 20 61 73 20 61 66 66 69 6e 69 74 79 20 4e   a as affinity N
2210: 4f 4e 45 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  ONE.  execsql {.
2220: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2230: 4d 20 74 36 20 57 48 45 52 45 20 2b 61 20 49 4e  M t6 WHERE +a IN
2240: 20 28 27 32 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d   ('2');.  }.} {}
2250: 0a 0a 23 20 54 65 73 74 20 65 72 72 6f 72 20 63  ..# Test error c
2260: 6f 6e 64 69 74 69 6f 6e 73 20 77 69 74 68 20 65  onditions with e
2270: 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 74 68  xpressions of th
2280: 65 20 66 6f 72 6d 20 49 4e 28 3c 63 6f 6d 70 6f  e form IN(<compo
2290: 75 6e 64 20 73 65 6c 65 63 74 3e 29 2e 0a 23 0a  und select>)..#.
22a0: 64 6f 5f 74 65 73 74 20 69 6e 2d 31 32 2e 31 20  do_test in-12.1 
22b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
22c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
22d0: 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  2(a, b, c);.    
22e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
22f0: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 7d 0a 7d 20  a, b, c);.  }.} 
2300: 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31 32  {}.do_test in-12
2310: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
2320: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2330: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20 49  ROM t2 WHERE a I
2340: 4e 20 28 0a 20 20 20 20 20 20 53 45 4c 45 43 54  N (.      SELECT
2350: 20 61 2c 20 62 20 46 52 4f 4d 20 74 33 20 55 4e   a, b FROM t3 UN
2360: 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 61  ION ALL SELECT a
2370: 2c 20 62 20 46 52 4f 4d 20 74 32 0a 20 20 20 20  , b FROM t2.    
2380: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 6c  );.  }.} {1 {onl
2390: 79 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c  y a single resul
23a0: 74 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 61 20  t allowed for a 
23b0: 53 45 4c 45 43 54 20 74 68 61 74 20 69 73 20 70  SELECT that is p
23c0: 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
23d0: 73 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  sion}}.do_test i
23e0: 6e 2d 31 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  n-12.3 {.  catch
23f0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2400: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
2410: 20 61 20 49 4e 20 28 0a 20 20 20 20 20 20 53 45   a IN (.      SE
2420: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
2430: 33 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 61  3 UNION SELECT a
2440: 2c 20 62 20 46 52 4f 4d 20 74 32 0a 20 20 20 20  , b FROM t2.    
2450: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 6c  );.  }.} {1 {onl
2460: 79 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c  y a single resul
2470: 74 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 61 20  t allowed for a 
2480: 53 45 4c 45 43 54 20 74 68 61 74 20 69 73 20 70  SELECT that is p
2490: 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
24a0: 73 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  sion}}.do_test i
24b0: 6e 2d 31 32 2e 34 20 7b 0a 20 20 63 61 74 63 68  n-12.4 {.  catch
24c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
24d0: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
24e0: 20 61 20 49 4e 20 28 0a 20 20 20 20 20 20 53 45   a IN (.      SE
24f0: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
2500: 33 20 45 58 43 45 50 54 20 53 45 4c 45 43 54 20  3 EXCEPT SELECT 
2510: 61 2c 20 62 20 46 52 4f 4d 20 74 32 0a 20 20 20  a, b FROM t2.   
2520: 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 6e   );.  }.} {1 {on
2530: 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75  ly a single resu
2540: 6c 74 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 61  lt allowed for a
2550: 20 53 45 4c 45 43 54 20 74 68 61 74 20 69 73 20   SELECT that is 
2560: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
2570: 73 73 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ssion}}.do_test 
2580: 69 6e 2d 31 32 2e 35 20 7b 0a 20 20 63 61 74 63  in-12.5 {.  catc
2590: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
25a0: 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T * FROM t2 WHER
25b0: 45 20 61 20 49 4e 20 28 0a 20 20 20 20 20 20 53  E a IN (.      S
25c0: 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20  ELECT a, b FROM 
25d0: 74 33 20 49 4e 54 45 52 53 45 43 54 20 53 45 4c  t3 INTERSECT SEL
25e0: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32  ECT a, b FROM t2
25f0: 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31  .    );.  }.} {1
2600: 20 7b 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20   {only a single 
2610: 72 65 73 75 6c 74 20 61 6c 6c 6f 77 65 64 20 66  result allowed f
2620: 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
2630: 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   is part of an e
2640: 78 70 72 65 73 73 69 6f 6e 7d 7d 0a 64 6f 5f 74  xpression}}.do_t
2650: 65 73 74 20 69 6e 2d 31 32 2e 36 20 7b 0a 20 20  est in-12.6 {.  
2660: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
2670: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
2680: 57 48 45 52 45 20 61 20 49 4e 20 28 0a 20 20 20  WHERE a IN (.   
2690: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
26a0: 20 74 33 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45   t3 UNION ALL SE
26b0: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
26c0: 32 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b  2.    );.  }.} {
26d0: 31 20 7b 53 45 4c 45 43 54 73 20 74 6f 20 74 68  1 {SELECTs to th
26e0: 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
26f0: 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 20 64 6f   of UNION ALL do
2700: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 20 73 61   not have the sa
2710: 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  me number of res
2720: 75 6c 74 20 63 6f 6c 75 6d 6e 73 7d 7d 0a 64 6f  ult columns}}.do
2730: 5f 74 65 73 74 20 69 6e 2d 31 32 2e 37 20 7b 0a  _test in-12.7 {.
2740: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2750: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2760: 32 20 57 48 45 52 45 20 61 20 49 4e 20 28 0a 20  2 WHERE a IN (. 
2770: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52       SELECT a FR
2780: 4f 4d 20 74 33 20 55 4e 49 4f 4e 20 53 45 4c 45  OM t3 UNION SELE
2790: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32 0a  CT a, b FROM t2.
27a0: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20      );.  }.} {1 
27b0: 7b 53 45 4c 45 43 54 73 20 74 6f 20 74 68 65 20  {SELECTs to the 
27c0: 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f  left and right o
27d0: 66 20 55 4e 49 4f 4e 20 64 6f 20 6e 6f 74 20 68  f UNION do not h
27e0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d  ave the same num
27f0: 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f  ber of result co
2800: 6c 75 6d 6e 73 7d 7d 0a 64 6f 5f 74 65 73 74 20  lumns}}.do_test 
2810: 69 6e 2d 31 32 2e 38 20 7b 0a 20 20 63 61 74 63  in-12.8 {.  catc
2820: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
2830: 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T * FROM t2 WHER
2840: 45 20 61 20 49 4e 20 28 0a 20 20 20 20 20 20 53  E a IN (.      S
2850: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 33 20  ELECT a FROM t3 
2860: 45 58 43 45 50 54 20 53 45 4c 45 43 54 20 61 2c  EXCEPT SELECT a,
2870: 20 62 20 46 52 4f 4d 20 74 32 0a 20 20 20 20 29   b FROM t2.    )
2880: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 53 45 4c 45  ;.  }.} {1 {SELE
2890: 43 54 73 20 74 6f 20 74 68 65 20 6c 65 66 74 20  CTs to the left 
28a0: 61 6e 64 20 72 69 67 68 74 20 6f 66 20 45 58 43  and right of EXC
28b0: 45 50 54 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  EPT do not have 
28c0: 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20  the same number 
28d0: 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
28e0: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 2d 31  s}}.do_test in-1
28f0: 32 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.9 {.  catchsql
2900: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2910: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20  FROM t2 WHERE a 
2920: 49 4e 20 28 0a 20 20 20 20 20 20 53 45 4c 45 43  IN (.      SELEC
2930: 54 20 61 20 46 52 4f 4d 20 74 33 20 49 4e 54 45  T a FROM t3 INTE
2940: 52 53 45 43 54 20 53 45 4c 45 43 54 20 61 2c 20  RSECT SELECT a, 
2950: 62 20 46 52 4f 4d 20 74 32 0a 20 20 20 20 29 3b  b FROM t2.    );
2960: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 53 45 4c 45 43  .  }.} {1 {SELEC
2970: 54 73 20 74 6f 20 74 68 65 20 6c 65 66 74 20 61  Ts to the left a
2980: 6e 64 20 72 69 67 68 74 20 6f 66 20 49 4e 54 45  nd right of INTE
2990: 52 53 45 43 54 20 64 6f 20 6e 6f 74 20 68 61 76  RSECT do not hav
29a0: 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65  e the same numbe
29b0: 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75  r of result colu
29c0: 6d 6e 73 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  mns}}..finish_te
29d0: 73 74 0a                                         st.