/ Hex Artifact Content
Login

Artifact 7ae37fcd4a5e198291c6ab5f31a5bb3d15397efe8b75a6736d7a95a7b8dd9e08:


0000: 23 20 32 30 31 32 20 53 65 70 74 65 6d 62 65 72  # 2012 September
0010: 20 31 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68   18.#.# 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 0a 0a 73 65 74  *********.#..set
0170: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0180: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0190: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
01a0: 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65  ester.tcl.set te
01b0: 73 74 70 72 65 66 69 78 20 69 6e 35 0a 0a 64 6f  stprefix in5..do
01c0: 5f 74 65 73 74 20 69 6e 35 2d 31 2e 31 20 7b 0a  _test in5-1.1 {.
01d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
01e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 78  CREATE TABLE t1x
01f0: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
0200: 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53  RY KEY);.    INS
0210: 45 52 54 20 49 4e 54 4f 20 74 31 78 20 56 41 4c  ERT INTO t1x VAL
0220: 55 45 53 28 31 29 2c 28 33 29 2c 28 35 29 2c 28  UES(1),(3),(5),(
0230: 37 29 2c 28 39 29 3b 0a 20 20 20 20 43 52 45 41  7),(9);.    CREA
0240: 54 45 20 54 41 42 4c 45 20 74 31 79 28 79 20 49  TE TABLE t1y(y I
0250: 4e 54 45 47 45 52 20 55 4e 49 51 55 45 29 3b 0a  NTEGER UNIQUE);.
0260: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0270: 74 31 79 20 56 41 4c 55 45 53 28 32 29 2c 28 34  t1y VALUES(2),(4
0280: 29 2c 28 36 29 2c 28 38 29 3b 0a 20 20 20 20 43  ),(6),(8);.    C
0290: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 7a 28  REATE TABLE t1z(
02a0: 7a 20 54 45 58 54 20 55 4e 49 51 55 45 29 3b 0a  z TEXT UNIQUE);.
02b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
02c0: 74 31 7a 20 56 41 4c 55 45 53 28 27 61 27 29 2c  t1z VALUES('a'),
02d0: 28 27 63 27 29 2c 28 27 65 27 29 2c 28 27 67 27  ('c'),('e'),('g'
02e0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
02f0: 42 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45 52  BLE t2(a INTEGER
0300: 2c 20 62 20 49 4e 54 45 47 45 52 2c 20 63 20 54  , b INTEGER, c T
0310: 45 58 54 2c 20 64 20 54 45 58 54 29 3b 0a 20 20  EXT, d TEXT);.  
0320: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0330: 20 56 41 4c 55 45 53 28 31 2c 32 2c 27 61 27 2c   VALUES(1,2,'a',
0340: 27 31 32 61 27 29 2c 28 31 2c 32 2c 27 62 27 2c  '12a'),(1,2,'b',
0350: 27 31 32 62 27 29 2c 0a 20 20 20 20 20 20 20 20  '12b'),.        
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 20 28 32 2c 33 2c 27 67 27 2c 27 32 33 67 27 29   (2,3,'g','23g')
0380: 2c 28 33 2c 35 2c 27 63 27 2c 27 33 35 63 27 29  ,(3,5,'c','35c')
0390: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
03a0: 20 20 20 20 20 20 20 20 20 20 20 28 34 2c 36 2c             (4,6,
03b0: 27 68 27 2c 27 34 36 68 27 29 2c 28 35 2c 36 2c  'h','46h'),(5,6,
03c0: 27 65 27 2c 27 35 36 65 27 29 3b 0a 20 20 20 20  'e','56e');.    
03d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 78  CREATE TABLE t3x
03e0: 20 41 53 20 53 45 4c 45 43 54 20 78 20 46 52 4f   AS SELECT x FRO
03f0: 4d 20 74 31 78 3b 0a 20 20 20 20 43 52 45 41 54  M t1x;.    CREAT
0400: 45 20 54 41 42 4c 45 20 74 33 79 20 41 53 20 53  E TABLE t3y AS S
0410: 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31 79  ELECT y FROM t1y
0420: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0430: 4c 45 20 74 33 7a 20 41 53 20 53 45 4c 45 43 54  LE t3z AS SELECT
0440: 20 7a 20 46 52 4f 4d 20 74 31 7a 3b 0a 20 20 20   z FROM t1z;.   
0450: 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74   SELECT d FROM t
0460: 32 20 57 48 45 52 45 20 61 20 49 4e 20 74 31 78  2 WHERE a IN t1x
0470: 20 41 4e 44 20 62 20 49 4e 20 74 31 79 20 41 4e   AND b IN t1y AN
0480: 44 20 63 20 49 4e 20 74 31 7a 20 4f 52 44 45 52  D c IN t1z ORDER
0490: 20 42 59 20 63 3b 0a 20 20 7d 0a 7d 20 7b 31 32   BY c;.  }.} {12
04a0: 61 20 35 36 65 7d 0a 64 6f 5f 74 65 73 74 20 69  a 56e}.do_test i
04b0: 6e 35 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  n5-1.2 {.  execs
04c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
04d0: 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  d FROM t2 WHERE 
04e0: 61 20 49 4e 20 74 31 79 20 41 4e 44 20 62 20 49  a IN t1y AND b I
04f0: 4e 20 74 31 78 20 41 4e 44 20 63 20 49 4e 20 74  N t1x AND c IN t
0500: 31 7a 20 4f 52 44 45 52 20 42 59 20 64 3b 0a 20  1z ORDER BY d;. 
0510: 20 7d 0a 7d 20 7b 32 33 67 7d 0a 64 6f 5f 74 65   }.} {23g}.do_te
0520: 73 74 20 69 6e 35 2d 31 2e 33 20 7b 0a 20 20 65  st in5-1.3 {.  e
0530: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0540: 45 43 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48  ECT d FROM t2 WH
0550: 45 52 45 20 61 20 49 4e 20 74 33 78 20 41 4e 44  ERE a IN t3x AND
0560: 20 62 20 49 4e 20 74 33 79 20 41 4e 44 20 63 20   b IN t3y AND c 
0570: 49 4e 20 74 33 7a 20 4f 52 44 45 52 20 42 59 20  IN t3z ORDER BY 
0580: 64 3b 0a 20 20 7d 0a 7d 20 7b 31 32 61 20 35 36  d;.  }.} {12a 56
0590: 65 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 69 6e 35  e}...do_test in5
05a0: 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.1 {.  execsql
05b0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e   {.    CREATE IN
05c0: 44 45 58 20 74 32 61 62 63 20 4f 4e 20 74 32 28  DEX t2abc ON t2(
05d0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 53 45 4c 45  a,b,c);.    SELE
05e0: 43 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48 45  CT d FROM t2 WHE
05f0: 52 45 20 61 20 49 4e 20 74 31 78 20 41 4e 44 20  RE a IN t1x AND 
0600: 62 20 49 4e 20 74 31 79 20 41 4e 44 20 63 20 49  b IN t1y AND c I
0610: 4e 20 74 31 7a 20 4f 52 44 45 52 20 42 59 20 64  N t1z ORDER BY d
0620: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 61 20 35 36 65  ;.  }.} {12a 56e
0630: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 35 2d 32 2e  }.do_test in5-2.
0640: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
0650: 20 20 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f      SELECT d FRO
0660: 4d 20 74 32 20 57 48 45 52 45 20 61 20 49 4e 20  M t2 WHERE a IN 
0670: 74 31 79 20 41 4e 44 20 62 20 49 4e 20 74 31 78  t1y AND b IN t1x
0680: 20 41 4e 44 20 63 20 49 4e 20 74 31 7a 20 4f 52   AND c IN t1z OR
0690: 44 45 52 20 42 59 20 64 3b 0a 20 20 7d 0a 7d 20  DER BY d;.  }.} 
06a0: 7b 32 33 67 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  {23g}.do_test in
06b0: 35 2d 32 2e 33 20 7b 0a 20 20 72 65 67 65 78 70  5-2.3 {.  regexp
06c0: 20 7b 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 7d   {OpenEphemeral}
06d0: 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20   [db eval {.    
06e0: 45 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20 64  EXPLAIN SELECT d
06f0: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
0700: 20 49 4e 20 74 31 78 20 41 4e 44 20 62 20 49 4e   IN t1x AND b IN
0710: 20 74 31 79 20 41 4e 44 20 63 20 49 4e 20 74 31   t1y AND c IN t1
0720: 7a 0a 20 20 7d 5d 0a 7d 20 7b 30 7d 0a 64 6f 5f  z.  }].} {0}.do_
0730: 74 65 73 74 20 69 6e 35 2d 32 2e 34 20 7b 0a 20  test in5-2.4 {. 
0740: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0750: 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 32 20  ELECT d FROM t2 
0760: 57 48 45 52 45 20 61 20 49 4e 20 74 33 78 20 41  WHERE a IN t3x A
0770: 4e 44 20 62 20 49 4e 20 74 33 79 20 41 4e 44 20  ND b IN t3y AND 
0780: 63 20 49 4e 20 74 33 7a 20 4f 52 44 45 52 20 42  c IN t3z ORDER B
0790: 59 20 64 3b 0a 20 20 7d 0a 7d 20 7b 31 32 61 20  Y d;.  }.} {12a 
07a0: 35 36 65 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 35  56e}.do_test in5
07b0: 2d 32 2e 35 2e 31 20 7b 0a 20 20 72 65 67 65 78  -2.5.1 {.  regex
07c0: 70 20 7b 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  p {OpenEphemeral
07d0: 7d 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  } [db eval {.   
07e0: 20 45 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20   EXPLAIN SELECT 
07f0: 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  d FROM t2 WHERE 
0800: 61 20 49 4e 20 74 33 78 20 41 4e 44 20 62 20 49  a IN t3x AND b I
0810: 4e 20 74 31 79 20 41 4e 44 20 63 20 49 4e 20 74  N t1y AND c IN t
0820: 31 7a 0a 20 20 7d 5d 0a 7d 20 7b 31 7d 0a 64 6f  1z.  }].} {1}.do
0830: 5f 74 65 73 74 20 69 6e 35 2d 32 2e 35 2e 32 20  _test in5-2.5.2 
0840: 7b 0a 20 20 72 65 67 65 78 70 20 7b 4f 70 65 6e  {.  regexp {Open
0850: 45 70 68 65 6d 65 72 61 6c 7d 20 5b 64 62 20 65  Ephemeral} [db e
0860: 76 61 6c 20 7b 0a 20 20 20 20 45 58 50 4c 41 49  val {.    EXPLAI
0870: 4e 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20  N SELECT d FROM 
0880: 74 32 20 57 48 45 52 45 20 61 20 49 4e 20 74 31  t2 WHERE a IN t1
0890: 78 20 41 4e 44 20 62 20 49 4e 20 74 33 79 20 41  x AND b IN t3y A
08a0: 4e 44 20 63 20 49 4e 20 74 31 7a 0a 20 20 7d 5d  ND c IN t1z.  }]
08b0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 69  .} {1}.do_test i
08c0: 6e 35 2d 32 2e 35 2e 33 20 7b 0a 20 20 72 65 67  n5-2.5.3 {.  reg
08d0: 65 78 70 20 7b 4f 70 65 6e 45 70 68 65 6d 65 72  exp {OpenEphemer
08e0: 61 6c 7d 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20  al} [db eval {. 
08f0: 20 20 20 45 58 50 4c 41 49 4e 20 53 45 4c 45 43     EXPLAIN SELEC
0900: 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T d FROM t2 WHER
0910: 45 20 61 20 49 4e 20 74 31 78 20 41 4e 44 20 62  E a IN t1x AND b
0920: 20 49 4e 20 74 31 79 20 41 4e 44 20 63 20 49 4e   IN t1y AND c IN
0930: 20 74 33 7a 0a 20 20 7d 5d 0a 7d 20 7b 31 7d 0a   t3z.  }].} {1}.
0940: 0a 64 6f 5f 74 65 73 74 20 69 6e 35 2d 33 2e 31  .do_test in5-3.1
0950: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0960: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 74 32     DROP INDEX t2
0970: 61 62 63 3b 0a 20 20 20 20 43 52 45 41 54 45 20  abc;.    CREATE 
0980: 49 4e 44 45 58 20 74 32 61 62 20 4f 4e 20 74 32  INDEX t2ab ON t2
0990: 28 61 2c 62 29 3b 0a 20 20 20 20 53 45 4c 45 43  (a,b);.    SELEC
09a0: 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T d FROM t2 WHER
09b0: 45 20 61 20 49 4e 20 74 31 78 20 41 4e 44 20 62  E a IN t1x AND b
09c0: 20 49 4e 20 74 31 79 20 41 4e 44 20 63 20 49 4e   IN t1y AND c IN
09d0: 20 74 31 7a 20 4f 52 44 45 52 20 42 59 20 64 3b   t1z ORDER BY d;
09e0: 0a 20 20 7d 0a 7d 20 7b 31 32 61 20 35 36 65 7d  .  }.} {12a 56e}
09f0: 0a 64 6f 5f 74 65 73 74 20 69 6e 35 2d 33 2e 32  .do_test in5-3.2
0a00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0a10: 20 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f 4d     SELECT d FROM
0a20: 20 74 32 20 57 48 45 52 45 20 61 20 49 4e 20 74   t2 WHERE a IN t
0a30: 31 79 20 41 4e 44 20 62 20 49 4e 20 74 31 78 20  1y AND b IN t1x 
0a40: 41 4e 44 20 63 20 49 4e 20 74 31 7a 20 4f 52 44  AND c IN t1z ORD
0a50: 45 52 20 42 59 20 64 3b 0a 20 20 7d 0a 7d 20 7b  ER BY d;.  }.} {
0a60: 32 33 67 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 35  23g}.do_test in5
0a70: 2d 33 2e 33 20 7b 0a 20 20 72 65 67 65 78 70 20  -3.3 {.  regexp 
0a80: 7b 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 7d 20  {OpenEphemeral} 
0a90: 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 45  [db eval {.    E
0aa0: 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20 64 20  XPLAIN SELECT d 
0ab0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20  FROM t2 WHERE a 
0ac0: 49 4e 20 74 31 78 20 41 4e 44 20 62 20 49 4e 20  IN t1x AND b IN 
0ad0: 74 31 79 20 41 4e 44 20 63 20 49 4e 20 74 31 7a  t1y AND c IN t1z
0ae0: 0a 20 20 7d 5d 0a 7d 20 7b 30 7d 0a 0a 64 6f 5f  .  }].} {0}..do_
0af0: 74 65 73 74 20 69 6e 35 2d 34 2e 31 20 7b 0a 20  test in5-4.1 {. 
0b00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
0b10: 52 4f 50 20 49 4e 44 45 58 20 74 32 61 62 3b 0a  ROP INDEX t2ab;.
0b20: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
0b30: 20 74 32 61 62 63 64 20 4f 4e 20 74 32 28 61 2c   t2abcd ON t2(a,
0b40: 62 2c 63 2c 64 29 3b 0a 20 20 20 20 53 45 4c 45  b,c,d);.    SELE
0b50: 43 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48 45  CT d FROM t2 WHE
0b60: 52 45 20 61 20 49 4e 20 74 31 78 20 41 4e 44 20  RE a IN t1x AND 
0b70: 62 20 49 4e 20 74 31 79 20 41 4e 44 20 63 20 49  b IN t1y AND c I
0b80: 4e 20 74 31 7a 20 4f 52 44 45 52 20 42 59 20 64  N t1z ORDER BY d
0b90: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 61 20 35 36 65  ;.  }.} {12a 56e
0ba0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 35 2d 34 2e  }.do_test in5-4.
0bb0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
0bc0: 20 20 20 20 53 45 4c 45 43 54 20 64 20 46 52 4f      SELECT d FRO
0bd0: 4d 20 74 32 20 57 48 45 52 45 20 61 20 49 4e 20  M t2 WHERE a IN 
0be0: 74 31 79 20 41 4e 44 20 62 20 49 4e 20 74 31 78  t1y AND b IN t1x
0bf0: 20 41 4e 44 20 63 20 49 4e 20 74 31 7a 20 4f 52   AND c IN t1z OR
0c00: 44 45 52 20 42 59 20 64 3b 0a 20 20 7d 0a 7d 20  DER BY d;.  }.} 
0c10: 7b 32 33 67 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  {23g}.do_test in
0c20: 35 2d 34 2e 33 20 7b 0a 20 20 72 65 67 65 78 70  5-4.3 {.  regexp
0c30: 20 7b 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 7d   {OpenEphemeral}
0c40: 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20   [db eval {.    
0c50: 45 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20 64  EXPLAIN SELECT d
0c60: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
0c70: 20 49 4e 20 74 31 78 20 41 4e 44 20 62 20 49 4e   IN t1x AND b IN
0c80: 20 74 31 79 20 41 4e 44 20 63 20 49 4e 20 74 31   t1y AND c IN t1
0c90: 7a 0a 20 20 7d 5d 0a 7d 20 7b 30 7d 0a 0a 0a 64  z.  }].} {0}...d
0ca0: 6f 5f 74 65 73 74 20 69 6e 35 2d 35 2e 31 20 7b  o_test in5-5.1 {
0cb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0cc0: 20 44 52 4f 50 20 49 4e 44 45 58 20 74 32 61 62   DROP INDEX t2ab
0cd0: 63 64 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  cd;.    CREATE I
0ce0: 4e 44 45 58 20 74 32 63 62 61 64 20 4f 4e 20 74  NDEX t2cbad ON t
0cf0: 32 28 63 2c 62 2c 61 2c 64 29 3b 0a 20 20 20 20  2(c,b,a,d);.    
0d00: 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 32  SELECT d FROM t2
0d10: 20 57 48 45 52 45 20 61 20 49 4e 20 74 31 78 20   WHERE a IN t1x 
0d20: 41 4e 44 20 62 20 49 4e 20 74 31 79 20 41 4e 44  AND b IN t1y AND
0d30: 20 63 20 49 4e 20 74 31 7a 20 4f 52 44 45 52 20   c IN t1z ORDER 
0d40: 42 59 20 64 3b 0a 20 20 7d 0a 7d 20 7b 31 32 61  BY d;.  }.} {12a
0d50: 20 35 36 65 7d 0a 64 6f 5f 74 65 73 74 20 69 6e   56e}.do_test in
0d60: 35 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  5-5.2 {.  execsq
0d70: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 64  l {.    SELECT d
0d80: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
0d90: 20 49 4e 20 74 31 79 20 41 4e 44 20 62 20 49 4e   IN t1y AND b IN
0da0: 20 74 31 78 20 41 4e 44 20 63 20 49 4e 20 74 31   t1x AND c IN t1
0db0: 7a 20 4f 52 44 45 52 20 42 59 20 64 3b 0a 20 20  z ORDER BY d;.  
0dc0: 7d 0a 7d 20 7b 32 33 67 7d 0a 64 6f 5f 74 65 73  }.} {23g}.do_tes
0dd0: 74 20 69 6e 35 2d 35 2e 33 20 7b 0a 20 20 72 65  t in5-5.3 {.  re
0de0: 67 65 78 70 20 7b 4f 70 65 6e 45 70 68 65 6d 65  gexp {OpenEpheme
0df0: 72 61 6c 7d 20 5b 64 62 20 65 76 61 6c 20 7b 0a  ral} [db eval {.
0e00: 20 20 20 20 45 58 50 4c 41 49 4e 20 53 45 4c 45      EXPLAIN SELE
0e10: 43 54 20 64 20 46 52 4f 4d 20 74 32 20 57 48 45  CT d FROM t2 WHE
0e20: 52 45 20 61 20 49 4e 20 74 31 78 20 41 4e 44 20  RE a IN t1x AND 
0e30: 62 20 49 4e 20 74 31 79 20 41 4e 44 20 63 20 49  b IN t1y AND c I
0e40: 4e 20 74 31 7a 0a 20 20 7d 5d 0a 7d 20 7b 30 7d  N t1z.  }].} {0}
0e50: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
0e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 41  ------------.# A
0ea0: 74 20 6f 6e 65 20 70 6f 69 6e 74 20 53 51 4c 69  t one point SQLi
0eb0: 74 65 20 77 61 73 20 72 65 6d 6f 76 69 6e 67 20  te was removing 
0ec0: 74 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79  the DISTINCT key
0ed0: 77 6f 72 64 20 66 72 6f 6d 20 65 78 70 72 65 73  word from expres
0ee0: 73 69 6f 6e 73 0a 23 20 73 69 6d 69 6c 61 72 20  sions.# similar 
0ef0: 74 6f 3a 0a 23 0a 23 20 20 20 3c 65 78 70 72 31  to:.#.#   <expr1
0f00: 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 44 49 53  > IN (SELECT DIS
0f10: 54 49 4e 43 54 20 3c 65 78 70 72 32 3e 20 46 52  TINCT <expr2> FR
0f20: 4f 4d 2e 2e 2e 29 0a 23 0a 23 20 48 6f 77 65 76  OM...).#.# Howev
0f30: 65 72 2c 20 74 68 65 72 65 20 61 72 65 20 61 20  er, there are a 
0f40: 66 65 77 20 6f 62 73 63 75 72 65 20 63 61 73 65  few obscure case
0f50: 73 20 77 68 65 72 65 20 74 68 69 73 20 69 73 20  s where this is 
0f60: 69 6e 63 6f 72 72 65 63 74 2e 20 46 6f 72 0a 23  incorrect. For.#
0f70: 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74 68 65   example, if the
0f80: 20 53 45 4c 45 43 54 20 66 65 61 74 75 72 65 73   SELECT features
0f90: 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
0fa0: 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 6c 61   or if the colla
0fb0: 74 69 6f 6e 0a 23 20 73 65 71 75 65 6e 63 65 20  tion.# sequence 
0fc0: 6f 72 20 61 66 66 69 6e 69 74 79 20 75 73 65 64  or affinity used
0fd0: 20 62 79 20 74 68 65 20 44 49 53 54 49 4e 43 54   by the DISTINCT
0fe0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
0ff0: 74 68 65 20 6f 6e 65 20 75 73 65 64 0a 23 20 62  the one used.# b
1000: 79 20 74 68 65 20 49 4e 28 2e 2e 2e 29 20 65 78  y the IN(...) ex
1010: 70 72 65 73 73 69 6f 6e 2e 0a 23 0a 64 6f 5f 65  pression..#.do_e
1020: 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31 2e  xecsql_test 6.1.
1030: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
1040: 4c 45 20 74 31 28 61 20 43 4f 4c 4c 41 54 45 20  LE t1(a COLLATE 
1050: 6e 6f 63 61 73 65 29 3b 0a 20 20 49 4e 53 45 52  nocase);.  INSER
1060: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1070: 28 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52  ('one');.  INSER
1080: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1090: 28 27 4f 4e 45 27 29 3b 0a 7d 0a 64 6f 5f 65 78  ('ONE');.}.do_ex
10a0: 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31 2e 32  ecsql_test 6.1.2
10b0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e   {.  SELECT coun
10c0: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
10d0: 52 45 20 61 20 43 4f 4c 4c 41 54 45 20 42 49 4e  RE a COLLATE BIN
10e0: 41 52 59 20 49 4e 20 28 53 45 4c 45 43 54 20 44  ARY IN (SELECT D
10f0: 49 53 54 49 4e 43 54 20 61 20 46 52 4f 4d 20 74  ISTINCT a FROM t
1100: 31 29 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 65 78 65  1).} {1}..do_exe
1110: 63 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e 31 20  csql_test 6.2.1 
1120: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
1130: 20 74 33 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53   t3(a, b);.  INS
1140: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
1150: 45 53 28 31 2c 20 31 29 3b 0a 20 20 49 4e 53 45  ES(1, 1);.  INSE
1160: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
1170: 53 28 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52  S(1, 2);.  INSER
1180: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
1190: 28 31 2c 20 33 29 3b 0a 20 20 49 4e 53 45 52 54  (1, 3);.  INSERT
11a0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
11b0: 32 2c 20 34 29 3b 0a 20 20 49 4e 53 45 52 54 20  2, 4);.  INSERT 
11c0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 32  INTO t3 VALUES(2
11d0: 2c 20 35 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 5);.  INSERT I
11e0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 32 2c  NTO t3 VALUES(2,
11f0: 20 36 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   6);.  INSERT IN
1200: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 33 2c 20  TO t3 VALUES(3, 
1210: 37 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  7);.  INSERT INT
1220: 4f 20 74 33 20 56 41 4c 55 45 53 28 33 2c 20 38  O t3 VALUES(3, 8
1230: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1240: 20 74 33 20 56 41 4c 55 45 53 28 33 2c 20 39 29   t3 VALUES(3, 9)
1250: 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ;.}.do_execsql_t
1260: 65 73 74 20 36 2e 32 2e 32 20 7b 0a 20 20 53 45  est 6.2.2 {.  SE
1270: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1280: 4f 4d 20 74 33 20 57 48 45 52 45 20 62 20 49 4e  OM t3 WHERE b IN
1290: 20 28 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43   (SELECT DISTINC
12a0: 54 20 61 20 46 52 4f 4d 20 74 33 20 4c 49 4d 49  T a FROM t3 LIMI
12b0: 54 20 35 29 3b 0a 7d 20 7b 33 7d 0a 64 6f 5f 65  T 5);.} {3}.do_e
12c0: 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e  xecsql_test 6.2.
12d0: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 63 6f 75  3 {.  SELECT cou
12e0: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 33 20 57 48  nt(*) FROM t3 WH
12f0: 45 52 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54  ERE b IN (SELECT
1300: 20 20 20 20 20 20 20 20 20 20 61 20 46 52 4f 4d            a FROM
1310: 20 74 33 20 4c 49 4d 49 54 20 35 29 3b 0a 7d 20   t3 LIMIT 5);.} 
1320: 7b 32 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  {2}..do_execsql_
1330: 74 65 73 74 20 36 2e 33 2e 31 20 7b 0a 20 20 43  test 6.3.1 {.  C
1340: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 28 61  REATE TABLE x1(a
1350: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
1360: 45 20 78 32 28 62 29 3b 0a 20 20 49 4e 53 45 52  E x2(b);.  INSER
1370: 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53  T INTO x1 VALUES
1380: 28 31 29 2c 20 28 31 29 2c 20 28 32 29 3b 0a 20  (1), (1), (2);. 
1390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20   INSERT INTO x2 
13a0: 56 41 4c 55 45 53 28 31 29 2c 20 28 32 29 3b 0a  VALUES(1), (2);.
13b0: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
13c0: 29 20 46 52 4f 4d 20 78 32 20 57 48 45 52 45 20  ) FROM x2 WHERE 
13d0: 62 20 49 4e 20 28 53 45 4c 45 43 54 20 44 49 53  b IN (SELECT DIS
13e0: 54 49 4e 43 54 20 61 20 46 52 4f 4d 20 78 31 20  TINCT a FROM x1 
13f0: 4c 49 4d 49 54 20 32 29 3b 0a 7d 20 7b 32 7d 0a  LIMIT 2);.} {2}.
1400: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
1410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
1450: 73 74 20 74 6f 20 63 6f 6e 66 69 72 6d 20 74 68  st to confirm th
1460: 61 74 20 62 75 67 20 5b 35 65 33 63 38 38 36 37  at bug [5e3c8867
1470: 39 36 65 35 5d 20 69 73 20 66 69 78 65 64 2e 0a  96e5] is fixed..
1480: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
1490: 74 20 37 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  t 7.1 {.  CREATE
14a0: 20 54 41 42 4c 45 20 79 31 28 61 2c 20 62 29 3b   TABLE y1(a, b);
14b0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
14c0: 79 32 28 63 29 3b 0a 0a 20 20 49 4e 53 45 52 54  y2(c);..  INSERT
14d0: 20 49 4e 54 4f 20 79 31 20 56 41 4c 55 45 53 28   INTO y1 VALUES(
14e0: 31 2c 20 20 20 20 20 27 6f 6e 65 27 29 3b 0a 20  1,     'one');. 
14f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 31 20   INSERT INTO y1 
1500: 56 41 4c 55 45 53 28 27 74 77 6f 27 2c 20 27 74  VALUES('two', 't
1510: 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  wo');.  INSERT I
1520: 4e 54 4f 20 79 31 20 56 41 4c 55 45 53 28 33 2c  NTO y1 VALUES(3,
1530: 20 20 20 20 20 27 74 68 72 65 65 27 29 3b 0a 0a       'three');..
1540: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 32    INSERT INTO y2
1550: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 29 3b 0a   VALUES('one');.
1560: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 32    INSERT INTO y2
1570: 20 56 41 4c 55 45 53 28 27 74 77 6f 27 29 3b 0a   VALUES('two');.
1580: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 79 32    INSERT INTO y2
1590: 20 56 41 4c 55 45 53 28 27 74 68 72 65 65 27 29   VALUES('three')
15a0: 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73  ;.} {}..do_execs
15b0: 71 6c 5f 74 65 73 74 20 37 2e 32 2e 31 20 7b 0a  ql_test 7.2.1 {.
15c0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
15d0: 79 31 20 57 48 45 52 45 20 62 20 4e 4f 54 20 49  y1 WHERE b NOT I
15e0: 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  N (SELECT a FROM
15f0: 20 79 32 29 3b 0a 7d 20 7b 31 20 33 7d 0a 64 6f   y2);.} {1 3}.do
1600: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
1610: 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  2.2 {.  SELECT a
1620: 20 46 52 4f 4d 20 79 31 20 57 48 45 52 45 20 62   FROM y1 WHERE b
1630: 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52   IN (SELECT a FR
1640: 4f 4d 20 79 32 29 3b 0a 7d 20 7b 74 77 6f 7d 0a  OM y2);.} {two}.
1650: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1660: 20 37 2e 33 2e 31 20 7b 0a 20 20 43 52 45 41 54   7.3.1 {.  CREAT
1670: 45 20 49 4e 44 45 58 20 79 32 63 20 4f 4e 20 79  E INDEX y2c ON y
1680: 32 28 63 29 3b 0a 20 20 53 45 4c 45 43 54 20 61  2(c);.  SELECT a
1690: 20 46 52 4f 4d 20 79 31 20 57 48 45 52 45 20 62   FROM y1 WHERE b
16a0: 20 4e 4f 54 20 49 4e 20 28 53 45 4c 45 43 54 20   NOT IN (SELECT 
16b0: 61 20 46 52 4f 4d 20 79 32 29 3b 0a 7d 20 7b 31  a FROM y2);.} {1
16c0: 20 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   3}.do_execsql_t
16d0: 65 73 74 20 37 2e 33 2e 32 20 7b 0a 20 20 53 45  est 7.3.2 {.  SE
16e0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 79 31 20 57  LECT a FROM y1 W
16f0: 48 45 52 45 20 62 20 49 4e 20 28 53 45 4c 45 43  HERE b IN (SELEC
1700: 54 20 61 20 46 52 4f 4d 20 79 32 29 3b 0a 7d 20  T a FROM y2);.} 
1710: 7b 74 77 6f 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  {two}..#--------
1720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1760: 2d 0a 23 20 54 65 73 74 73 20 74 6f 20 63 6f 6e  -.# Tests to con
1770: 66 69 72 6d 20 74 68 61 74 20 69 6e 64 65 78 65  firm that indexe
1780: 73 20 6f 6e 20 74 68 65 20 72 6f 77 69 64 20 63  s on the rowid c
1790: 6f 6c 75 6d 6e 20 64 6f 20 6e 6f 74 20 63 6f 6e  olumn do not con
17a0: 66 75 73 65 0a 23 20 74 68 65 20 71 75 65 72 79  fuse.# the query
17b0: 20 70 6c 61 6e 6e 65 72 2e 20 53 65 65 20 74 69   planner. See ti
17c0: 63 6b 65 74 20 5b 30 65 61 62 31 61 63 37 35 39  cket [0eab1ac759
17d0: 31 66 35 31 31 64 5d 2e 0a 23 0a 64 6f 5f 65 78  1f511d]..#.do_ex
17e0: 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 30 20 7b  ecsql_test 8.0 {
17f0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
1800: 6e 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  n1(a INTEGER PRI
1810: 4d 41 52 59 20 4b 45 59 2c 20 62 20 56 41 52 43  MARY KEY, b VARC
1820: 48 41 52 28 35 30 30 29 29 3b 0a 20 20 43 52 45  HAR(500));.  CRE
1830: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
1840: 20 6e 31 61 20 4f 4e 20 6e 31 28 61 29 3b 0a 7d   n1a ON n1(a);.}
1850: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1860: 74 20 38 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  t 8.1 {.  SELECT
1870: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6e   count(*) FROM n
1880: 31 20 57 48 45 52 45 20 61 20 49 4e 20 28 31 2c  1 WHERE a IN (1,
1890: 20 32 2c 20 33 29 0a 7d 20 30 0a 64 6f 5f 65 78   2, 3).} 0.do_ex
18a0: 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 32 20 7b  ecsql_test 8.2 {
18b0: 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  .  SELECT count(
18c0: 2a 29 20 46 52 4f 4d 20 6e 31 20 57 48 45 52 45  *) FROM n1 WHERE
18d0: 20 61 20 49 4e 20 28 53 45 4c 45 43 54 20 2b 61   a IN (SELECT +a
18e0: 20 46 52 4f 4d 20 6e 31 29 0a 7d 20 30 0a 64 6f   FROM n1).} 0.do
18f0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e  _execsql_test 8.
1900: 33 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  3 {.  INSERT INT
1910: 4f 20 6e 31 20 56 41 4c 55 45 53 28 31 2c 20 4e  O n1 VALUES(1, N
1920: 55 4c 4c 29 2c 20 28 32 2c 20 4e 55 4c 4c 29 2c  ULL), (2, NULL),
1930: 20 28 33 2c 20 4e 55 4c 4c 29 3b 0a 20 20 53 45   (3, NULL);.  SE
1940: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1950: 4f 4d 20 6e 31 20 57 48 45 52 45 20 61 20 49 4e  OM n1 WHERE a IN
1960: 20 28 31 2c 20 32 2c 20 33 29 0a 7d 20 33 0a 64   (1, 2, 3).} 3.d
1970: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38  o_execsql_test 8
1980: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 63 6f  .4 {.  SELECT co
1990: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6e 31 20 57  unt(*) FROM n1 W
19a0: 48 45 52 45 20 61 20 49 4e 20 28 53 45 4c 45 43  HERE a IN (SELEC
19b0: 54 20 2b 61 20 46 52 4f 4d 20 6e 31 29 0a 7d 20  T +a FROM n1).} 
19c0: 33 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  3..#------------
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
1a10: 54 65 73 74 20 74 68 61 74 20 74 69 63 6b 65 74  Test that ticket
1a20: 20 36 31 66 65 39 37 34 35 34 63 20 69 73 20 66   61fe97454c is f
1a30: 69 78 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ixed..#.do_execs
1a40: 71 6c 5f 74 65 73 74 20 39 2e 30 20 7b 0a 20 20  ql_test 9.0 {.  
1a50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 28  CREATE TABLE t9(
1a60: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
1a70: 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45 52 54  Y KEY);.  INSERT
1a80: 20 49 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 20   INTO t9 VALUES 
1a90: 28 34 34 29 2c 20 28 34 35 29 3b 0a 7d 0a 64 6f  (44), (45);.}.do
1aa0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 39 2e  _execsql_test 9.
1ab0: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  1 {.  SELECT * F
1ac0: 52 4f 4d 20 74 39 20 57 48 45 52 45 20 61 20 49  ROM t9 WHERE a I
1ad0: 4e 20 28 34 34 2c 20 34 35 2c 20 34 34 2c 20 34  N (44, 45, 44, 4
1ae0: 35 29 0a 7d 20 7b 34 34 20 34 35 7d 0a 0a 0a 66  5).} {44 45}...f
1af0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.