/ Hex Artifact Content
Login

Artifact 03a5edc94ab5983b98820f6541c62b43560cd84c:


0000: 23 20 32 30 31 36 20 53 65 70 74 65 6d 62 65 72  # 2016 September
0010: 20 33 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   3.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 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 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
01c0: 73 20 74 65 73 74 69 6e 67 20 53 51 4c 20 73 74  s testing SQL st
01d0: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 75 73  atements that us
01e0: 65 20 72 6f 77 20 76 61 6c 75 65 0a 23 20 63 6f  e row value.# co
01f0: 6e 73 74 72 75 63 74 6f 72 73 2e 0a 23 0a 0a 0a  nstructors..#...
0200: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0210: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0220: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0230: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74  r/tester.tcl.set
0240: 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20 72 6f   ::testprefix ro
0250: 77 76 61 6c 75 65 39 0a 0a 23 20 54 65 73 74 73  wvalue9..# Tests
0260: 3a 0a 23 0a 23 20 20 31 2e 2a 3a 20 54 65 73 74  :.#.#  1.*: Test
0270: 20 74 68 61 74 20 61 66 66 69 6e 69 74 69 65 73   that affinities
0280: 20 61 72 65 20 68 61 6e 64 6c 65 64 20 63 6f 72   are handled cor
0290: 72 65 63 74 6c 79 20 62 79 20 76 61 72 69 6f 75  rectly by variou
02a0: 73 20 72 6f 77 2d 76 61 6c 75 65 0a 23 20 20 20  s row-value.#   
02b0: 20 20 20 20 6f 70 65 72 61 74 69 6f 6e 73 20 77      operations w
02c0: 69 74 68 6f 75 74 20 69 6e 64 65 78 65 73 2e 0a  ithout indexes..
02d0: 23 0a 23 20 20 32 2e 2a 3a 20 54 65 73 74 20 61  #.#  2.*: Test a
02e0: 6e 20 61 66 66 69 6e 69 74 79 20 62 75 67 20 74  n affinity bug t
02f0: 68 61 74 20 63 61 6d 65 20 75 70 20 64 75 72 69  hat came up duri
0300: 6e 67 20 74 65 73 74 69 6e 67 2e 0a 23 0a 23 20  ng testing..#.# 
0310: 20 33 2e 2a 3a 20 54 65 73 74 20 61 20 72 6f 77   3.*: Test a row
0320: 2d 76 61 6c 75 65 20 76 65 72 73 69 6f 6e 20 6f  -value version o
0330: 66 20 74 68 65 20 62 75 67 20 74 65 73 74 65 64  f the bug tested
0340: 20 62 79 20 32 2e 2a 2e 0a 23 0a 23 20 20 34 2e   by 2.*..#.#  4.
0350: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 61 66 66  *: Test that aff
0360: 69 6e 69 74 69 65 73 20 61 72 65 20 68 61 6e 64  inities are hand
0370: 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 20 62 79  led correctly by
0380: 20 76 61 72 69 6f 75 73 20 72 6f 77 2d 76 61 6c   various row-val
0390: 75 65 0a 23 20 20 20 20 20 20 20 6f 70 65 72 61  ue.#       opera
03a0: 74 69 6f 6e 73 20 77 69 74 68 20 61 73 73 6f 72  tions with assor
03b0: 74 65 64 20 69 6e 64 65 78 65 73 2e 0a 23 0a 0a  ted indexes..#..
03c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
03d0: 31 2e 30 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  1.0.1 {.  CREATE
03e0: 20 54 41 42 4c 45 20 61 31 28 63 2c 20 62 20 49   TABLE a1(c, b I
03f0: 4e 54 45 47 45 52 2c 20 61 20 54 45 58 54 2c 20  NTEGER, a TEXT, 
0400: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 20 62  PRIMARY KEY(a, b
0410: 29 29 3b 0a 20 0a 20 20 49 4e 53 45 52 54 20 49  ));. .  INSERT I
0420: 4e 54 4f 20 61 31 20 28 72 6f 77 69 64 2c 20 63  NTO a1 (rowid, c
0430: 2c 20 62 2c 20 61 29 20 56 41 4c 55 45 53 28 33  , b, a) VALUES(3
0440: 2c 20 20 27 30 78 30 33 27 2c 20 31 2c 20 31 29  ,  '0x03', 1, 1)
0450: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0460: 61 31 20 28 72 6f 77 69 64 2c 20 63 2c 20 62 2c  a1 (rowid, c, b,
0470: 20 61 29 20 56 41 4c 55 45 53 28 31 34 2c 20 27   a) VALUES(14, '
0480: 30 78 30 45 27 2c 20 32 2c 20 32 29 3b 0a 20 20  0x0E', 2, 2);.  
0490: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 31 20 28  INSERT INTO a1 (
04a0: 72 6f 77 69 64 2c 20 63 2c 20 62 2c 20 61 29 20  rowid, c, b, a) 
04b0: 56 41 4c 55 45 53 28 31 35 2c 20 27 30 78 30 46  VALUES(15, '0x0F
04c0: 27 2c 20 33 2c 20 33 29 3b 0a 20 20 49 4e 53 45  ', 3, 3);.  INSE
04d0: 52 54 20 49 4e 54 4f 20 61 31 20 28 72 6f 77 69  RT INTO a1 (rowi
04e0: 64 2c 20 63 2c 20 62 2c 20 61 29 20 56 41 4c 55  d, c, b, a) VALU
04f0: 45 53 28 39 32 2c 20 27 30 78 35 43 27 2c 20 34  ES(92, '0x5C', 4
0500: 2c 20 34 29 3b 0a 0a 20 20 43 52 45 41 54 45 20  , 4);..  CREATE 
0510: 54 41 42 4c 45 20 61 32 28 78 20 42 4c 4f 42 2c  TABLE a2(x BLOB,
0520: 20 79 20 42 4c 4f 42 29 3b 0a 20 20 49 4e 53 45   y BLOB);.  INSE
0530: 52 54 20 49 4e 54 4f 20 61 32 28 78 2c 20 79 29  RT INTO a2(x, y)
0540: 20 56 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20   VALUES(1, 1);. 
0550: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 32 28   INSERT INTO a2(
0560: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20  x, y) VALUES(2, 
0570: 27 32 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  '2');.  INSERT I
0580: 4e 54 4f 20 61 32 28 78 2c 20 79 29 20 56 41 4c  NTO a2(x, y) VAL
0590: 55 45 53 28 27 33 27 2c 20 33 29 3b 0a 20 20 49  UES('3', 3);.  I
05a0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 32 28 78 2c  NSERT INTO a2(x,
05b0: 20 79 29 20 56 41 4c 55 45 53 28 27 34 27 2c 20   y) VALUES('4', 
05c0: 27 34 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63  '4');.}..do_exec
05d0: 73 71 6c 5f 74 65 73 74 20 31 2e 30 2e 32 20 7b  sql_test 1.0.2 {
05e0: 20 0a 20 20 53 45 4c 45 43 54 20 78 2c 20 74 79   .  SELECT x, ty
05f0: 70 65 6f 66 28 78 29 2c 20 79 2c 20 74 79 70 65  peof(x), y, type
0600: 6f 66 28 79 29 20 46 52 4f 4d 20 61 32 20 4f 52  of(y) FROM a2 OR
0610: 44 45 52 20 42 59 20 72 6f 77 69 64 0a 7d 20 7b  DER BY rowid.} {
0620: 0a 20 20 31 20 69 6e 74 65 67 65 72 20 31 20 69  .  1 integer 1 i
0630: 6e 74 65 67 65 72 20 0a 20 20 32 20 69 6e 74 65  nteger .  2 inte
0640: 67 65 72 20 32 20 74 65 78 74 20 0a 20 20 33 20  ger 2 text .  3 
0650: 74 65 78 74 20 20 20 20 33 20 69 6e 74 65 67 65  text    3 intege
0660: 72 20 0a 20 20 34 20 74 65 78 74 20 20 20 20 34  r .  4 text    4
0670: 20 74 65 78 74 0a 7d 0a 0a 64 6f 5f 65 78 65 63   text.}..do_exec
0680: 73 71 6c 5f 74 65 73 74 20 31 2e 31 2e 31 20 7b  sql_test 1.1.1 {
0690: 0a 20 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43  .  SELECT (SELEC
06a0: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 61 31 20  T rowid FROM a1 
06b0: 57 48 45 52 45 20 61 3d 78 20 41 4e 44 20 62 3d  WHERE a=x AND b=
06c0: 79 29 20 46 52 4f 4d 20 61 32 0a 7d 20 7b 7b 7d  y) FROM a2.} {{}
06d0: 20 7b 7d 20 31 35 20 39 32 7d 0a 64 6f 5f 65 78   {} 15 92}.do_ex
06e0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 2e 32  ecsql_test 1.1.2
06f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 28 53 45 4c   {.  SELECT (SEL
0700: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 61  ECT rowid FROM a
0710: 31 20 57 48 45 52 45 20 28 61 2c 20 62 29 20 3d  1 WHERE (a, b) =
0720: 20 28 78 2c 20 79 29 29 20 46 52 4f 4d 20 61 32   (x, y)) FROM a2
0730: 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 35 20 39 32 7d  .} {{} {} 15 92}
0740: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0750: 74 20 31 2e 32 2e 33 20 7b 0a 20 20 53 45 4c 45  t 1.2.3 {.  SELE
0760: 43 54 20 61 31 2e 72 6f 77 69 64 20 46 52 4f 4d  CT a1.rowid FROM
0770: 20 61 31 2c 20 61 32 20 57 48 45 52 45 20 61 3d   a1, a2 WHERE a=
0780: 78 20 41 4e 44 20 62 3d 79 3b 0a 7d 20 7b 31 35  x AND b=y;.} {15
0790: 20 39 32 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   92}.do_execsql_
07a0: 74 65 73 74 20 31 2e 32 2e 34 20 7b 0a 20 20 53  test 1.2.4 {.  S
07b0: 45 4c 45 43 54 20 61 31 2e 72 6f 77 69 64 20 46  ELECT a1.rowid F
07c0: 52 4f 4d 20 61 31 2c 20 61 32 20 57 48 45 52 45  ROM a1, a2 WHERE
07d0: 20 28 61 2c 20 62 29 20 3d 20 28 78 2c 20 79 29   (a, b) = (x, y)
07e0: 0a 7d 20 7b 31 35 20 39 32 7d 0a 0a 0a 64 6f 5f  .} {15 92}...do_
07f0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 33  execsql_test 1.3
0800: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 31  .1 {.  SELECT a1
0810: 2e 72 6f 77 69 64 20 46 52 4f 4d 20 61 31 2c 20  .rowid FROM a1, 
0820: 61 32 20 57 48 45 52 45 20 63 6f 61 6c 65 73 63  a2 WHERE coalesc
0830: 65 28 4e 55 4c 4c 2c 78 29 3d 61 20 41 4e 44 20  e(NULL,x)=a AND 
0840: 63 6f 61 6c 65 73 63 65 28 4e 55 4c 4c 2c 79 29  coalesce(NULL,y)
0850: 3d 62 0a 7d 20 7b 33 20 31 34 20 31 35 20 39 32  =b.} {3 14 15 92
0860: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0870: 74 20 31 2e 33 2e 32 20 7b 0a 20 20 53 45 4c 45  t 1.3.2 {.  SELE
0880: 43 54 20 61 31 2e 72 6f 77 69 64 20 46 52 4f 4d  CT a1.rowid FROM
0890: 20 61 31 2c 20 61 32 20 0a 20 20 57 48 45 52 45   a1, a2 .  WHERE
08a0: 20 28 63 6f 61 6c 65 73 63 65 28 4e 55 4c 4c 2c   (coalesce(NULL,
08b0: 78 29 2c 20 63 6f 61 6c 65 73 63 65 28 4e 55 4c  x), coalesce(NUL
08c0: 4c 2c 79 29 29 20 3d 20 28 61 2c 20 62 29 0a 7d  L,y)) = (a, b).}
08d0: 20 7b 33 20 31 34 20 31 35 20 39 32 7d 0a 0a 64   {3 14 15 92}..d
08e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
08f0: 2e 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .4.1 {.  SELECT 
0900: 61 31 2e 72 6f 77 69 64 20 46 52 4f 4d 20 61 31  a1.rowid FROM a1
0910: 2c 20 61 32 20 57 48 45 52 45 20 2b 78 3d 61 20  , a2 WHERE +x=a 
0920: 41 4e 44 20 2b 79 3d 62 0a 7d 20 7b 33 20 31 34  AND +y=b.} {3 14
0930: 20 31 35 20 39 32 7d 0a 64 6f 5f 65 78 65 63 73   15 92}.do_execs
0940: 71 6c 5f 74 65 73 74 20 31 2e 34 2e 32 20 7b 0a  ql_test 1.4.2 {.
0950: 20 20 53 45 4c 45 43 54 20 61 31 2e 72 6f 77 69    SELECT a1.rowi
0960: 64 20 46 52 4f 4d 20 61 31 2c 20 61 32 20 57 48  d FROM a1, a2 WH
0970: 45 52 45 20 28 2b 78 2c 20 2b 79 29 20 3d 20 28  ERE (+x, +y) = (
0980: 61 2c 20 62 29 0a 7d 20 7b 33 20 31 34 20 31 35  a, b).} {3 14 15
0990: 20 39 32 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c   92}..do_execsql
09a0: 5f 74 65 73 74 20 31 2e 35 2e 31 20 7b 0a 20 20  _test 1.5.1 {.  
09b0: 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54 20 72  SELECT (SELECT r
09c0: 6f 77 69 64 20 46 52 4f 4d 20 61 31 20 57 48 45  owid FROM a1 WHE
09d0: 52 45 20 61 3d 2b 78 20 41 4e 44 20 62 3d 2b 79  RE a=+x AND b=+y
09e0: 29 20 46 52 4f 4d 20 61 32 0a 7d 20 7b 33 20 31  ) FROM a2.} {3 1
09f0: 34 20 31 35 20 39 32 7d 0a 64 6f 5f 65 78 65 63  4 15 92}.do_exec
0a00: 73 71 6c 5f 74 65 73 74 20 31 2e 35 2e 32 20 7b  sql_test 1.5.2 {
0a10: 0a 20 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43  .  SELECT (SELEC
0a20: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 61 31 20  T rowid FROM a1 
0a30: 57 48 45 52 45 20 28 61 2c 20 62 29 20 3d 20 28  WHERE (a, b) = (
0a40: 2b 78 2c 20 2b 79 29 29 20 46 52 4f 4d 20 61 32  +x, +y)) FROM a2
0a50: 0a 7d 20 7b 33 20 31 34 20 31 35 20 39 32 7d 0a  .} {3 14 15 92}.
0a60: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0a70: 31 2e 35 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  1.5.3 {.  SELECT
0a80: 20 28 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46   (SELECT rowid F
0a90: 52 4f 4d 20 61 31 20 57 48 45 52 45 20 28 2b 78  ROM a1 WHERE (+x
0aa0: 2c 20 2b 79 29 20 3d 20 28 61 2c 20 62 29 29 20  , +y) = (a, b)) 
0ab0: 46 52 4f 4d 20 61 32 0a 7d 20 7b 33 20 31 34 20  FROM a2.} {3 14 
0ac0: 31 35 20 39 32 7d 0a 0a 64 6f 5f 65 78 65 63 73  15 92}..do_execs
0ad0: 71 6c 5f 74 65 73 74 20 31 2e 36 2e 31 20 7b 0a  ql_test 1.6.1 {.
0ae0: 20 20 53 45 4c 45 43 54 20 61 31 2e 72 6f 77 69    SELECT a1.rowi
0af0: 64 20 46 52 4f 4d 20 61 31 20 57 48 45 52 45 20  d FROM a1 WHERE 
0b00: 28 61 2c 20 62 29 20 49 4e 20 28 53 45 4c 45 43  (a, b) IN (SELEC
0b10: 54 20 78 2c 20 79 20 46 52 4f 4d 20 61 32 29 0a  T x, y FROM a2).
0b20: 7d 20 7b 31 35 20 39 32 7d 0a 64 6f 5f 65 78 65  } {15 92}.do_exe
0b30: 63 73 71 6c 5f 74 65 73 74 20 31 2e 36 2e 32 20  csql_test 1.6.2 
0b40: 7b 0a 20 20 53 45 4c 45 43 54 20 61 31 2e 72 6f  {.  SELECT a1.ro
0b50: 77 69 64 20 46 52 4f 4d 20 61 31 2c 20 61 32 20  wid FROM a1, a2 
0b60: 57 48 45 52 45 20 45 58 49 53 54 53 20 28 0a 20  WHERE EXISTS (. 
0b70: 20 20 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d     SELECT 1 FROM
0b80: 20 61 31 20 57 48 45 52 45 20 61 3d 78 20 41 4e   a1 WHERE a=x AN
0b90: 44 20 62 3d 79 0a 20 20 29 0a 7d 20 7b 33 20 31  D b=y.  ).} {3 1
0ba0: 34 20 31 35 20 39 32 20 33 20 31 34 20 31 35 20  4 15 92 3 14 15 
0bb0: 39 32 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74  92}..# Test that
0bc0: 20 5b 31 39 39 64 66 34 31 36 5d 20 69 73 20 66   [199df416] is f
0bd0: 69 78 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ixed..#.do_execs
0be0: 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20  ql_test 2.1 {.  
0bf0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 31 28  CREATE TABLE b1(
0c00: 61 20 54 45 58 54 29 3b 0a 20 20 43 52 45 41 54  a TEXT);.  CREAT
0c10: 45 20 54 41 42 4c 45 20 62 32 28 78 20 42 4c 4f  E TABLE b2(x BLO
0c20: 42 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  B);.  INSERT INT
0c30: 4f 20 62 31 20 56 41 4c 55 45 53 28 31 29 3b 0a  O b1 VALUES(1);.
0c40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 32    INSERT INTO b2
0c50: 20 56 41 4c 55 45 53 28 31 29 3b 0a 7d 0a 64 6f   VALUES(1);.}.do
0c60: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0c70: 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  2 { SELECT * FRO
0c80: 4d 20 62 31 2c 20 62 32 20 57 48 45 52 45 20 61  M b1, b2 WHERE a
0c90: 3d 78 3b 20 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63  =x; } {}.do_exec
0ca0: 73 71 6c 5f 74 65 73 74 20 32 2e 33 20 7b 20 53  sql_test 2.3 { S
0cb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 62 31 20  ELECT * FROM b1 
0cc0: 57 48 45 52 45 20 61 20 49 4e 20 28 53 45 4c 45  WHERE a IN (SELE
0cd0: 43 54 20 78 20 46 52 4f 4d 20 62 32 29 20 7d 20  CT x FROM b2) } 
0ce0: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
0cf0: 73 74 20 32 2e 34 20 7b 20 43 52 45 41 54 45 20  st 2.4 { CREATE 
0d00: 55 4e 49 51 55 45 20 49 4e 44 45 58 20 62 31 61  UNIQUE INDEX b1a
0d10: 20 4f 4e 20 62 31 28 61 29 3b 20 7d 0a 64 6f 5f   ON b1(a); }.do_
0d20: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 35  execsql_test 2.5
0d30: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
0d40: 20 62 31 20 57 48 45 52 45 20 61 20 49 4e 20 28   b1 WHERE a IN (
0d50: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 62 32  SELECT x FROM b2
0d60: 29 20 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74  ) } {}..# Test t
0d70: 68 61 74 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75  hat a multi-colu
0d80: 6d 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  mn version of th
0d90: 65 20 71 75 65 72 79 20 74 68 61 74 20 72 65 76  e query that rev
0da0: 65 61 6c 65 64 20 70 72 6f 62 6c 65 6d 20 0a 23  ealed problem .#
0db0: 20 5b 31 39 39 64 66 34 31 36 5d 20 61 6c 73 6f   [199df416] also
0dc0: 20 77 6f 72 6b 73 2e 0a 23 0a 64 6f 5f 65 78 65   works..#.do_exe
0dd0: 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b 0a  csql_test 3.1 {.
0de0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
0df0: 31 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20 54  1(a INTEGER, b T
0e00: 45 58 54 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  EXT);.  INSERT I
0e10: 4e 54 4f 20 63 31 20 56 41 4c 55 45 53 28 31 2c  NTO c1 VALUES(1,
0e20: 20 31 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41   1);.  CREATE TA
0e30: 42 4c 45 20 63 32 28 78 20 42 4c 4f 42 2c 20 79  BLE c2(x BLOB, y
0e40: 20 42 4c 4f 42 29 3b 0a 20 20 49 4e 53 45 52 54   BLOB);.  INSERT
0e50: 20 49 4e 54 4f 20 63 32 20 56 41 4c 55 45 53 28   INTO c2 VALUES(
0e60: 31 2c 20 31 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63  1, 1);.}.do_exec
0e70: 73 71 6c 5f 74 65 73 74 20 33 2e 32 20 7b 0a 20  sql_test 3.2 {. 
0e80: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
0e90: 31 20 57 48 45 52 45 20 28 61 2c 20 62 29 20 49  1 WHERE (a, b) I
0ea0: 4e 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46  N (SELECT x, y F
0eb0: 52 4f 4d 20 63 32 29 0a 7d 20 7b 7d 0a 64 6f 5f  ROM c2).} {}.do_
0ec0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 33  execsql_test 3.3
0ed0: 20 7b 0a 20 20 43 52 45 41 54 45 20 55 4e 49 51   {.  CREATE UNIQ
0ee0: 55 45 20 49 4e 44 45 58 20 63 31 61 62 20 4f 4e  UE INDEX c1ab ON
0ef0: 20 63 31 28 61 2c 20 62 29 3b 0a 20 20 53 45 4c   c1(a, b);.  SEL
0f00: 45 43 54 20 2a 20 46 52 4f 4d 20 63 31 20 57 48  ECT * FROM c1 WH
0f10: 45 52 45 20 28 61 2c 20 62 29 20 49 4e 20 28 53  ERE (a, b) IN (S
0f20: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0f30: 63 32 29 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63  c2).} {}.do_exec
0f40: 73 71 6c 5f 74 65 73 74 20 33 2e 34 20 7b 0a 20  sql_test 3.4 {. 
0f50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
0f60: 31 20 57 48 45 52 45 20 28 61 2c 20 2b 62 29 20  1 WHERE (a, +b) 
0f70: 49 4e 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20  IN (SELECT x, y 
0f80: 46 52 4f 4d 20 63 32 29 0a 7d 20 7b 7d 0a 0a 64  FROM c2).} {}..d
0f90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
0fa0: 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 63 31  .5 {.  SELECT c1
0fb0: 2e 72 6f 77 69 64 20 46 52 4f 4d 20 63 31 20 57  .rowid FROM c1 W
0fc0: 48 45 52 45 20 62 20 3d 20 28 53 45 4c 45 43 54  HERE b = (SELECT
0fd0: 20 79 20 46 52 4f 4d 20 63 32 29 3b 0a 7d 20 7b   y FROM c2);.} {
0fe0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0ff0: 74 20 33 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54  t 3.6 {.  SELECT
1000: 20 63 31 2e 72 6f 77 69 64 20 46 52 4f 4d 20 63   c1.rowid FROM c
1010: 31 20 57 48 45 52 45 20 28 61 2c 20 62 29 20 3d  1 WHERE (a, b) =
1020: 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   (SELECT x, y FR
1030: 4f 4d 20 63 32 29 3b 0a 7d 20 7b 7d 0a 0a 0a 23  OM c2);.} {}...#
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65  ---------.#.do_e
1090: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 30 20  xecsql_test 4.0 
10a0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
10b0: 20 64 31 28 61 20 54 45 58 54 2c 20 62 20 49 4e   d1(a TEXT, b IN
10c0: 54 45 47 45 52 2c 20 63 20 4e 55 4d 45 52 49 43  TEGER, c NUMERIC
10d0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
10e0: 45 20 64 32 28 78 20 42 4c 4f 42 2c 20 79 20 42  E d2(x BLOB, y B
10f0: 4c 4f 42 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  LOB);..  INSERT 
1100: 49 4e 54 4f 20 64 31 20 56 41 4c 55 45 53 28 31  INTO d1 VALUES(1
1110: 2c 20 31 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52  , 1, 1);.  INSER
1120: 54 20 49 4e 54 4f 20 64 31 20 56 41 4c 55 45 53  T INTO d1 VALUES
1130: 28 32 2c 20 32 2c 20 32 29 3b 0a 20 20 49 4e 53  (2, 2, 2);.  INS
1140: 45 52 54 20 49 4e 54 4f 20 64 31 20 56 41 4c 55  ERT INTO d1 VALU
1150: 45 53 28 33 2c 20 33 2c 20 33 29 3b 0a 20 20 49  ES(3, 3, 3);.  I
1160: 4e 53 45 52 54 20 49 4e 54 4f 20 64 31 20 56 41  NSERT INTO d1 VA
1170: 4c 55 45 53 28 34 2c 20 34 2c 20 34 29 3b 0a 0a  LUES(4, 4, 4);..
1180: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 32    INSERT INTO d2
1190: 20 56 41 4c 55 45 53 20 28 31 2c 20 31 29 3b 0a   VALUES (1, 1);.
11a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 32    INSERT INTO d2
11b0: 20 56 41 4c 55 45 53 20 28 32 2c 20 27 32 27 29   VALUES (2, '2')
11c0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
11d0: 64 32 20 56 41 4c 55 45 53 20 28 27 33 27 2c 20  d2 VALUES ('3', 
11e0: 33 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  3);.  INSERT INT
11f0: 4f 20 64 32 20 56 41 4c 55 45 53 20 28 27 34 27  O d2 VALUES ('4'
1200: 2c 20 27 34 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61  , '4');.}..forea
1210: 63 68 20 7b 74 6e 20 69 64 78 7d 20 7b 0a 20 20  ch {tn idx} {.  
1220: 31 20 7b 7d 0a 20 20 32 20 7b 20 43 52 45 41 54  1 {}.  2 { CREAT
1230: 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 64  E INDEX idx ON d
1240: 31 28 61 29 20 7d 0a 20 20 33 20 7b 20 43 52 45  1(a) }.  3 { CRE
1250: 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
1260: 20 64 31 28 61 2c 20 63 29 20 7d 0a 20 20 34 20   d1(a, c) }.  4 
1270: 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69  { CREATE INDEX i
1280: 64 78 20 4f 4e 20 64 31 28 63 29 20 7d 0a 20 20  dx ON d1(c) }.  
1290: 35 20 7b 20 43 52 45 41 54 45 20 49 4e 44 45 58  5 { CREATE INDEX
12a0: 20 69 64 78 20 4f 4e 20 64 31 28 63 2c 20 61 29   idx ON d1(c, a)
12b0: 20 7d 0a 0a 20 20 36 20 7b 20 0a 20 20 20 20 43   }..  6 { .    C
12c0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
12d0: 4f 4e 20 64 31 28 63 2c 20 61 29 20 3b 0a 20 20  ON d1(c, a) ;.  
12e0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
12f0: 64 78 31 20 4f 4e 20 64 32 28 78 2c 20 79 29 3b  dx1 ON d2(x, y);
1300: 0a 20 20 7d 0a 0a 20 20 37 20 7b 20 0a 20 20 20  .  }..  7 { .   
1310: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
1320: 78 20 4f 4e 20 64 31 28 63 2c 20 61 29 20 3b 0a  x ON d1(c, a) ;.
1330: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
1340: 45 20 49 4e 44 45 58 20 69 64 78 32 20 4f 4e 20  E INDEX idx2 ON 
1350: 64 32 28 78 2c 20 79 29 20 3b 0a 20 20 7d 0a 0a  d2(x, y) ;.  }..
1360: 20 20 38 20 7b 20 0a 20 20 20 20 43 52 45 41 54    8 { .    CREAT
1370: 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 64  E INDEX idx ON d
1380: 31 28 63 29 20 3b 0a 20 20 20 20 43 52 45 41 54  1(c) ;.    CREAT
1390: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 69  E UNIQUE INDEX i
13a0: 64 78 32 20 4f 4e 20 64 32 28 78 29 3b 0a 20 20  dx2 ON d2(x);.  
13b0: 7d 0a 0a 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c  }..} {.  execsql
13c0: 20 7b 20 44 52 4f 50 20 49 4e 44 45 58 20 49 46   { DROP INDEX IF
13d0: 20 45 58 49 53 54 53 20 69 64 78 20 7d 20 0a 20   EXISTS idx } . 
13e0: 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50 20   execsql { DROP 
13f0: 49 4e 44 45 58 20 49 46 20 45 58 49 53 54 53 20  INDEX IF EXISTS 
1400: 69 64 78 32 20 7d 20 0a 20 20 65 78 65 63 73 71  idx2 } .  execsq
1410: 6c 20 7b 20 44 52 4f 50 20 49 4e 44 45 58 20 49  l { DROP INDEX I
1420: 46 20 45 58 49 53 54 53 20 69 64 78 33 20 7d 20  F EXISTS idx3 } 
1430: 0a 20 20 65 78 65 63 73 71 6c 20 24 69 64 78 0a  .  execsql $idx.
1440: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
1450: 73 74 20 34 2e 24 74 6e 2e 31 20 7b 0a 20 20 20  st 4.$tn.1 {.   
1460: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
1470: 4f 4d 20 64 31 20 57 48 45 52 45 20 28 61 2c 20  OM d1 WHERE (a, 
1480: 63 29 20 49 4e 20 28 53 45 4c 45 43 54 20 78 2c  c) IN (SELECT x,
1490: 20 79 20 46 52 4f 4d 20 64 32 29 3b 0a 20 20 7d   y FROM d2);.  }
14a0: 20 7b 33 20 34 7d 0a 0a 20 20 64 6f 5f 65 78 65   {3 4}..  do_exe
14b0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 24 74 6e 2e  csql_test 4.$tn.
14c0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  2 {.    SELECT r
14d0: 6f 77 69 64 20 46 52 4f 4d 20 64 31 20 57 48 45  owid FROM d1 WHE
14e0: 52 45 20 28 63 2c 20 61 29 20 49 4e 20 28 53 45  RE (c, a) IN (SE
14f0: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 64  LECT x, y FROM d
1500: 32 29 3b 0a 20 20 7d 20 7b 32 20 34 7d 0a 0a 20  2);.  } {2 4}.. 
1510: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
1520: 20 34 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 53   4.$tn.3 {.    S
1530: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
1540: 20 64 31 20 57 48 45 52 45 20 28 2b 63 2c 20 61   d1 WHERE (+c, a
1550: 29 20 49 4e 20 28 53 45 4c 45 43 54 20 78 2c 20  ) IN (SELECT x, 
1560: 79 20 46 52 4f 4d 20 64 32 29 3b 0a 20 20 7d 20  y FROM d2);.  } 
1570: 7b 32 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71  {2}..  do_execsq
1580: 6c 5f 74 65 73 74 20 34 2e 24 74 6e 2e 34 20 7b  l_test 4.$tn.4 {
1590: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
15a0: 64 20 46 52 4f 4d 20 64 31 20 57 48 45 52 45 20  d FROM d1 WHERE 
15b0: 28 63 2c 20 61 29 20 3d 20 28 0a 20 20 20 20 20  (c, a) = (.     
15c0: 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f   SELECT x, y FRO
15d0: 4d 20 64 32 20 57 48 45 52 45 20 64 32 2e 72 6f  M d2 WHERE d2.ro
15e0: 77 69 64 3d 64 31 2e 72 6f 77 69 64 0a 20 20 20  wid=d1.rowid.   
15f0: 20 29 3b 0a 20 20 7d 20 7b 32 20 34 7d 0a 0a 20   );.  } {2 4}.. 
1600: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
1610: 20 34 2e 24 74 6e 2e 35 20 7b 0a 20 20 20 20 53   4.$tn.5 {.    S
1620: 45 4c 45 43 54 20 64 31 2e 72 6f 77 69 64 20 46  ELECT d1.rowid F
1630: 52 4f 4d 20 64 31 2c 20 64 32 20 57 48 45 52 45  ROM d1, d2 WHERE
1640: 20 61 20 3d 20 79 3b 0a 20 20 7d 20 7b 32 20 34   a = y;.  } {2 4
1650: 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }..  do_execsql_
1660: 74 65 73 74 20 34 2e 24 74 6e 2e 36 20 7b 0a 20  test 4.$tn.6 {. 
1670: 20 20 20 53 45 4c 45 43 54 20 64 31 2e 72 6f 77     SELECT d1.row
1680: 69 64 20 46 52 4f 4d 20 64 31 20 57 48 45 52 45  id FROM d1 WHERE
1690: 20 61 20 3d 20 28 0a 20 20 20 20 20 20 53 45 4c   a = (.      SEL
16a0: 45 43 54 20 79 20 46 52 4f 4d 20 64 32 20 77 68  ECT y FROM d2 wh
16b0: 65 72 65 20 64 32 2e 72 6f 77 69 64 3d 64 31 2e  ere d2.rowid=d1.
16c0: 72 6f 77 69 64 0a 20 20 20 20 29 3b 0a 20 20 7d  rowid.    );.  }
16d0: 20 7b 32 20 34 7d 0a 7d 0a 0a 64 6f 5f 65 78 65   {2 4}.}..do_exe
16e0: 63 73 71 6c 5f 74 65 73 74 20 35 2e 30 20 7b 0a  csql_test 5.0 {.
16f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
1700: 31 28 61 20 54 45 58 54 2c 20 63 20 4e 55 4d 45  1(a TEXT, c NUME
1710: 52 49 43 29 3b 0a 20 20 43 52 45 41 54 45 20 54  RIC);.  CREATE T
1720: 41 42 4c 45 20 65 32 28 78 20 42 4c 4f 42 2c 20  ABLE e2(x BLOB, 
1730: 79 20 42 4c 4f 42 29 3b 0a 0a 20 20 49 4e 53 45  y BLOB);..  INSE
1740: 52 54 20 49 4e 54 4f 20 65 31 20 56 41 4c 55 45  RT INTO e1 VALUE
1750: 53 28 32 2c 20 32 29 3b 0a 0a 20 20 49 4e 53 45  S(2, 2);..  INSE
1760: 52 54 20 49 4e 54 4f 20 65 32 20 56 41 4c 55 45  RT INTO e2 VALUE
1770: 53 20 28 27 32 27 2c 20 32 29 3b 0a 20 20 49 4e  S ('2', 2);.  IN
1780: 53 45 52 54 20 49 4e 54 4f 20 65 32 20 56 41 4c  SERT INTO e2 VAL
1790: 55 45 53 20 28 27 32 27 2c 20 27 32 27 29 3b 0a  UES ('2', '2');.
17a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 65 32    INSERT INTO e2
17b0: 20 56 41 4c 55 45 53 20 28 27 32 27 2c 20 27 32   VALUES ('2', '2
17c0: 2e 30 27 29 3b 0a 0a 20 20 43 52 45 41 54 45 20  .0');..  CREATE 
17d0: 49 4e 44 45 58 20 65 31 63 20 4f 4e 20 65 31 28  INDEX e1c ON e1(
17e0: 63 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  c);.}..do_execsq
17f0: 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20 53  l_test 5.1 {.  S
1800: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
1810: 20 65 31 20 57 48 45 52 45 20 28 61 2c 20 63 29   e1 WHERE (a, c)
1820: 20 49 4e 20 28 53 45 4c 45 43 54 20 78 2c 20 79   IN (SELECT x, y
1830: 20 46 52 4f 4d 20 65 32 29 3b 0a 7d 20 7b 31 7d   FROM e2);.} {1}
1840: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1850: 20 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20   5.2 {.  SELECT 
1860: 72 6f 77 69 64 20 46 52 4f 4d 20 65 32 20 57 48  rowid FROM e2 WH
1870: 45 52 45 20 72 6f 77 69 64 20 49 4e 20 28 53 45  ERE rowid IN (SE
1880: 4c 45 43 54 20 2b 63 20 46 52 4f 4d 20 65 31 29  LECT +c FROM e1)
1890: 3b 0a 7d 20 7b 32 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {2}.do_execs
18a0: 71 6c 5f 74 65 73 74 20 35 2e 33 20 7b 0a 20 20  ql_test 5.3 {.  
18b0: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
18c0: 4d 20 65 32 20 57 48 45 52 45 20 72 6f 77 69 64  M e2 WHERE rowid
18d0: 20 49 4e 20 28 53 45 4c 45 43 54 20 30 2b 63 20   IN (SELECT 0+c 
18e0: 46 52 4f 4d 20 65 31 29 3b 0a 7d 20 7b 32 7d 0a  FROM e1);.} {2}.
18f0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a 0a        .finish_test..