/ Hex Artifact Content
Login

Artifact 0def95db3bdec220a731c7e4bec5930327c1d8c5:


0000: 23 20 32 30 30 39 20 41 75 67 75 73 74 20 31 33  # 2009 August 13
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 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 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f  y. The.# focus o
01b0: 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74  f this file is t
01c0: 65 73 74 69 6e 67 20 57 48 45 52 45 20 63 6c 61  esting WHERE cla
01d0: 75 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 77  use conditions w
01e0: 69 74 68 0a 23 20 73 75 62 74 6c 65 20 61 66 66  ith.# subtle aff
01f0: 69 6e 69 74 79 20 69 73 73 75 65 73 2e 0a 23 0a  inity issues..#.
0200: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0210: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0220: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0230: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0240: 20 46 6f 72 20 74 68 69 73 20 73 65 74 20 6f 66   For this set of
0250: 20 74 65 73 74 73 3a 0a 23 0a 23 20 20 2a 20 20   tests:.#.#  *  
0260: 20 74 31 2e 79 20 68 6f 6c 64 73 20 61 6e 20 69   t1.y holds an i
0270: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 77 69 74  nteger value wit
0280: 68 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 0a  h affinity NONE.
0290: 23 20 20 2a 20 20 20 74 32 2e 62 20 68 6f 6c 64  #  *   t2.b hold
02a0: 73 20 61 20 74 65 78 74 20 76 61 6c 75 65 20 77  s a text value w
02b0: 69 74 68 20 61 66 66 69 6e 69 74 79 20 54 45 58  ith affinity TEX
02c0: 54 0a 23 0a 23 20 54 68 65 73 65 20 76 61 6c 75  T.#.# These valu
02d0: 65 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  es are not equal
02e0: 20 61 6e 64 20 62 65 63 61 75 73 65 20 6e 65 69   and because nei
02f0: 74 68 65 72 20 61 66 66 69 6e 69 74 79 20 69 73  ther affinity is
0300: 20 4e 55 4d 45 52 49 43 0a 23 20 6e 6f 20 74 79   NUMERIC.# no ty
0310: 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 63  pe conversion oc
0320: 63 75 72 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  curs..#.do_test 
0330: 77 68 65 72 65 42 2d 31 2e 31 20 7b 0a 20 20 64  whereB-1.1 {.  d
0340: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45  b eval {.    CRE
0350: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 79  ATE TABLE t1(x,y
0360: 29 3b 20 20 20 20 2d 2d 20 61 66 66 69 6e 69 74  );    -- affinit
0370: 79 20 6f 66 20 74 31 2e 79 20 69 73 20 4e 4f 4e  y of t1.y is NON
0380: 45 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  E.    INSERT INT
0390: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 39 39  O t1 VALUES(1,99
03a0: 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54  );..    CREATE T
03b0: 41 42 4c 45 20 74 32 28 61 2c 20 62 20 54 45 58  ABLE t2(a, b TEX
03c0: 54 29 3b 20 20 2d 2d 20 61 66 66 69 6e 69 74 79  T);  -- affinity
03d0: 20 6f 66 20 74 32 2e 62 20 69 73 20 54 45 58 54   of t2.b is TEXT
03e0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
03f0: 58 20 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a  X t2b ON t2(b);.
0400: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0410: 74 32 20 56 41 4c 55 45 53 28 32 2c 39 39 29 3b  t2 VALUES(2,99);
0420: 0a 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20  ..    SELECT x, 
0430: 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20  a, y=b FROM t1, 
0440: 74 32 20 4f 52 44 45 52 20 42 59 20 2b 78 2c 20  t2 ORDER BY +x, 
0450: 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 30  +a;.  }.} {1 2 0
0460: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
0470: 2d 31 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  -1.2 {.  db eval
0480: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c   {.    SELECT x,
0490: 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c   a, y=b FROM t1,
04a0: 20 74 32 20 57 48 45 52 45 20 79 3d 62 3b 0a 20   t2 WHERE y=b;. 
04b0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
04c0: 77 68 65 72 65 42 2d 31 2e 33 20 7b 0a 20 20 64  whereB-1.3 {.  d
04d0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
04e0: 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52  ECT x, a, y=b FR
04f0: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
0500: 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  b=y;.  }.} {}.do
0510: 5f 74 65 73 74 20 77 68 65 72 65 42 2d 31 2e 34  _test whereB-1.4
0520: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
0530: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20     SELECT x, a, 
0540: 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20  y=b FROM t1, t2 
0550: 57 48 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d  WHERE +y=+b;.  }
0560: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
0570: 65 72 65 42 2d 31 2e 31 30 30 20 7b 0a 20 20 64  ereB-1.100 {.  d
0580: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f  b eval {.    DRO
0590: 50 20 49 4e 44 45 58 20 74 32 62 3b 0a 20 20 20  P INDEX t2b;.   
05a0: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
05b0: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
05c0: 45 52 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b  ERE y=b;.  }.} {
05d0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
05e0: 2d 31 2e 31 30 31 20 7b 0a 20 20 64 62 20 65 76  -1.101 {.  db ev
05f0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
0600: 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74  x, a, y=b FROM t
0610: 31 2c 20 74 32 20 57 48 45 52 45 20 62 3d 79 3b  1, t2 WHERE b=y;
0620: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
0630: 74 20 77 68 65 72 65 42 2d 31 2e 31 30 32 20 7b  t whereB-1.102 {
0640: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
0650: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
0660: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
0670: 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d  ERE +y=+b;.  }.}
0680: 20 7b 7d 0a 0a 23 20 46 6f 72 20 74 68 69 73 20   {}..# For this 
0690: 73 65 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a  set of tests:.#.
06a0: 23 20 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64  #  *   t1.y hold
06b0: 73 20 61 20 74 65 78 74 20 76 61 6c 75 65 20 77  s a text value w
06c0: 69 74 68 20 61 66 66 69 6e 69 74 79 20 54 45 58  ith affinity TEX
06d0: 54 0a 23 20 20 2a 20 20 20 74 32 2e 62 20 68 6f  T.#  *   t2.b ho
06e0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76  lds an integer v
06f0: 61 6c 75 65 20 77 69 74 68 20 61 66 66 69 6e 69  alue with affini
0700: 74 79 20 4e 4f 4e 45 0a 23 0a 23 20 54 68 65 73  ty NONE.#.# Thes
0710: 65 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74  e values are not
0720: 20 65 71 75 61 6c 20 61 6e 64 20 62 65 63 61 75   equal and becau
0730: 73 65 20 6e 65 69 74 68 65 72 20 61 66 66 69 6e  se neither affin
0740: 69 74 79 20 69 73 20 4e 55 4d 45 52 49 43 0a 23  ity is NUMERIC.#
0750: 20 6e 6f 20 74 79 70 65 20 63 6f 6e 76 65 72 73   no type convers
0760: 69 6f 6e 20 6f 63 63 75 72 73 2e 0a 23 0a 64 6f  ion occurs..#.do
0770: 5f 74 65 73 74 20 77 68 65 72 65 42 2d 32 2e 31  _test whereB-2.1
0780: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
0790: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
07a0: 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  ;.    DROP TABLE
07b0: 20 74 32 3b 0a 0a 20 20 20 20 43 52 45 41 54 45   t2;..    CREATE
07c0: 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 20 54   TABLE t1(x, y T
07d0: 45 58 54 29 3b 20 20 20 20 2d 2d 20 61 66 66 69  EXT);    -- affi
07e0: 6e 69 74 79 20 6f 66 20 74 31 2e 79 20 69 73 20  nity of t1.y is 
07f0: 54 45 58 54 0a 20 20 20 20 49 4e 53 45 52 54 20  TEXT.    INSERT 
0800: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
0810: 2c 39 39 29 3b 0a 0a 20 20 20 20 43 52 45 41 54  ,99);..    CREAT
0820: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 20  E TABLE t2(a, b 
0830: 42 4c 4f 42 29 3b 20 20 2d 2d 20 61 66 66 69 6e  BLOB);  -- affin
0840: 69 74 79 20 6f 66 20 74 32 2e 62 20 69 73 20 4e  ity of t2.b is N
0850: 4f 4e 45 0a 20 20 20 20 43 52 45 41 54 45 20 49  ONE.    CREATE I
0860: 4e 44 45 58 20 74 32 62 20 4f 4e 20 74 32 28 62  NDEX t2b ON t2(b
0870: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0880: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 2c 39  TO t2 VALUES(2,9
0890: 39 29 3b 0a 0a 20 20 20 20 53 45 4c 45 43 54 20  9);..    SELECT 
08a0: 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74  x, a, y=b FROM t
08b0: 31 2c 20 74 32 20 4f 52 44 45 52 20 42 59 20 2b  1, t2 ORDER BY +
08c0: 78 2c 20 2b 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20  x, +a;.  }.} {1 
08d0: 32 20 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 0}.do_test whe
08e0: 72 65 42 2d 32 2e 32 20 7b 0a 20 20 64 62 20 65  reB-2.2 {.  db e
08f0: 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  val {.    SELECT
0900: 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20   x, a, y=b FROM 
0910: 74 31 2c 20 74 32 20 57 48 45 52 45 20 79 3d 62  t1, t2 WHERE y=b
0920: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
0930: 73 74 20 77 68 65 72 65 42 2d 32 2e 33 20 7b 0a  st whereB-2.3 {.
0940: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
0950: 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62  SELECT x, a, y=b
0960: 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45   FROM t1, t2 WHE
0970: 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 7d  RE b=y;.  }.} {}
0980: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d  .do_test whereB-
0990: 32 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  2.4 {.  db eval 
09a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20  {.    SELECT x, 
09b0: 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20  a, y=b FROM t1, 
09c0: 74 32 20 57 48 45 52 45 20 2b 79 3d 2b 62 3b 0a  t2 WHERE +y=+b;.
09d0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
09e0: 20 77 68 65 72 65 42 2d 32 2e 31 30 30 20 7b 0a   whereB-2.100 {.
09f0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
0a00: 44 52 4f 50 20 49 4e 44 45 58 20 74 32 62 3b 0a  DROP INDEX t2b;.
0a10: 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c      SELECT x, a,
0a20: 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32   y=b FROM t1, t2
0a30: 20 57 48 45 52 45 20 79 3d 62 3b 0a 20 20 7d 0a   WHERE y=b;.  }.
0a40: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  } {}.do_test whe
0a50: 72 65 42 2d 32 2e 31 30 31 20 7b 0a 20 20 64 62  reB-2.101 {.  db
0a60: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
0a70: 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f  CT x, a, y=b FRO
0a80: 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 62  M t1, t2 WHERE b
0a90: 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  =y;.  }.} {}.do_
0aa0: 74 65 73 74 20 77 68 65 72 65 42 2d 32 2e 31 30  test whereB-2.10
0ab0: 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  2 {.  db eval {.
0ac0: 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c      SELECT x, a,
0ad0: 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32   y=b FROM t1, t2
0ae0: 20 57 48 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20   WHERE +y=+b;.  
0af0: 7d 0a 7d 20 7b 7d 0a 0a 23 20 46 6f 72 20 74 68  }.} {}..# For th
0b00: 69 73 20 73 65 74 20 6f 66 20 74 65 73 74 73 3a  is set of tests:
0b10: 0a 23 0a 23 20 20 2a 20 20 20 74 31 2e 79 20 68  .#.#  *   t1.y h
0b20: 6f 6c 64 73 20 61 20 74 65 78 74 20 76 61 6c 75  olds a text valu
0b30: 65 20 77 69 74 68 20 61 66 66 69 6e 69 74 79 20  e with affinity 
0b40: 4e 4f 4e 45 0a 23 20 20 2a 20 20 20 74 32 2e 62  NONE.#  *   t2.b
0b50: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
0b60: 72 20 76 61 6c 75 65 20 77 69 74 68 20 61 66 66  r value with aff
0b70: 69 6e 69 74 79 20 4e 4f 4e 45 0a 23 0a 23 20 54  inity NONE.#.# T
0b80: 68 65 73 65 20 76 61 6c 75 65 73 20 61 72 65 20  hese values are 
0b90: 6e 6f 74 20 65 71 75 61 6c 20 61 6e 64 20 62 65  not equal and be
0ba0: 63 61 75 73 65 20 6e 65 69 74 68 65 72 20 61 66  cause neither af
0bb0: 66 69 6e 69 74 79 20 69 73 20 4e 55 4d 45 52 49  finity is NUMERI
0bc0: 43 0a 23 20 6e 6f 20 74 79 70 65 20 63 6f 6e 76  C.# no type conv
0bd0: 65 72 73 69 6f 6e 20 6f 63 63 75 72 73 2e 0a 23  ersion occurs..#
0be0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d  .do_test whereB-
0bf0: 33 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.1 {.  db eval 
0c00: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
0c10: 20 74 31 3b 0a 20 20 20 20 44 52 4f 50 20 54 41   t1;.    DROP TA
0c20: 42 4c 45 20 74 32 3b 0a 0a 20 20 20 20 43 52 45  BLE t2;..    CRE
0c30: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
0c40: 79 20 42 4c 4f 42 29 3b 20 20 20 20 2d 2d 20 61  y BLOB);    -- a
0c50: 66 66 69 6e 69 74 79 20 6f 66 20 74 31 2e 79 20  ffinity of t1.y 
0c60: 69 73 20 4e 4f 4e 45 0a 20 20 20 20 49 4e 53 45  is NONE.    INSE
0c70: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0c80: 53 28 31 2c 39 39 29 3b 0a 0a 20 20 20 20 43 52  S(1,99);..    CR
0c90: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c  EATE TABLE t2(a,
0ca0: 20 62 20 42 4c 4f 42 29 3b 20 20 2d 2d 20 61 66   b BLOB);  -- af
0cb0: 66 69 6e 69 74 79 20 6f 66 20 74 32 2e 62 20 69  finity of t2.b i
0cc0: 73 20 4e 4f 4e 45 0a 20 20 20 20 43 52 45 41 54  s NONE.    CREAT
0cd0: 45 20 49 4e 44 45 58 20 74 32 62 20 4f 4e 20 74  E INDEX t2b ON t
0ce0: 32 28 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(b);.    INSERT
0cf0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
0d00: 32 2c 27 39 39 27 29 3b 0a 0a 20 20 20 20 53 45  2,'99');..    SE
0d10: 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46  LECT x, a, y=b F
0d20: 52 4f 4d 20 74 31 2c 20 74 32 3b 0a 20 20 7d 0a  ROM t1, t2;.  }.
0d30: 7d 20 7b 31 20 32 20 30 7d 0a 64 6f 5f 74 65 73  } {1 2 0}.do_tes
0d40: 74 20 77 68 65 72 65 42 2d 33 2e 32 20 7b 0a 20  t whereB-3.2 {. 
0d50: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
0d60: 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20  ELECT x, a, y=b 
0d70: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
0d80: 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  E y=b;.  }.} {}.
0d90: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d 33  do_test whereB-3
0da0: 2e 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .3 {.  db eval {
0db0: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61  .    SELECT x, a
0dc0: 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74  , y=b FROM t1, t
0dd0: 32 20 57 48 45 52 45 20 62 3d 79 3b 0a 20 20 7d  2 WHERE b=y;.  }
0de0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
0df0: 65 72 65 42 2d 33 2e 34 20 7b 0a 20 20 64 62 20  ereB-3.4 {.  db 
0e00: 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  eval {.    SELEC
0e10: 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d  T x, a, y=b FROM
0e20: 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 2b 79   t1, t2 WHERE +y
0e30: 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  =+b;.  }.} {}.do
0e40: 5f 74 65 73 74 20 77 68 65 72 65 42 2d 33 2e 31  _test whereB-3.1
0e50: 30 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  00 {.  db eval {
0e60: 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20  .    DROP INDEX 
0e70: 74 32 62 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  t2b;.    SELECT 
0e80: 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74  x, a, y=b FROM t
0e90: 31 2c 20 74 32 20 57 48 45 52 45 20 79 3d 62 3b  1, t2 WHERE y=b;
0ea0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
0eb0: 74 20 77 68 65 72 65 42 2d 33 2e 31 30 31 20 7b  t whereB-3.101 {
0ec0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
0ed0: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
0ee0: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
0ef0: 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b  ERE b=y;.  }.} {
0f00: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
0f10: 2d 33 2e 31 30 32 20 7b 0a 20 20 64 62 20 65 76  -3.102 {.  db ev
0f20: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
0f30: 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74  x, a, y=b FROM t
0f40: 31 2c 20 74 32 20 57 48 45 52 45 20 2b 79 3d 2b  1, t2 WHERE +y=+
0f50: 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 0a 23 20  b;.  }.} {}...# 
0f60: 46 6f 72 20 74 68 69 73 20 73 65 74 20 6f 66 20  For this set of 
0f70: 74 65 73 74 73 3a 0a 23 0a 23 20 20 2a 20 20 20  tests:.#.#  *   
0f80: 74 31 2e 79 20 68 6f 6c 64 73 20 61 20 74 65 78  t1.y holds a tex
0f90: 74 20 76 61 6c 75 65 20 77 69 74 68 20 61 66 66  t value with aff
0fa0: 69 6e 69 74 79 20 4e 4f 4e 45 0a 23 20 20 2a 20  inity NONE.#  * 
0fb0: 20 20 74 32 2e 62 20 68 6f 6c 64 73 20 61 6e 20    t2.b holds an 
0fc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 77 69  integer value wi
0fd0: 74 68 20 61 66 66 69 6e 69 74 79 20 4e 55 4d 45  th affinity NUME
0fe0: 52 49 43 0a 23 0a 23 20 42 65 63 61 75 73 65 20  RIC.#.# Because 
0ff0: 74 32 2e 62 20 68 61 73 20 61 20 6e 75 6d 65 72  t2.b has a numer
1000: 69 63 20 61 66 66 69 6e 69 74 79 2c 20 74 79 70  ic affinity, typ
1010: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 73 68 6f  e conversion sho
1020: 75 6c 64 20 6f 63 63 75 72 0a 23 20 61 6e 64 20  uld occur.# and 
1030: 74 68 65 20 74 77 6f 20 66 69 65 6c 64 73 20 73  the two fields s
1040: 68 6f 75 6c 64 20 62 65 20 65 71 75 61 6c 2e 0a  hould be equal..
1050: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  #.do_test whereB
1060: 2d 34 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  -4.1 {.  db eval
1070: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
1080: 45 20 74 31 3b 0a 20 20 20 20 44 52 4f 50 20 54  E t1;.    DROP T
1090: 41 42 4c 45 20 74 32 3b 0a 0a 20 20 20 20 43 52  ABLE t2;..    CR
10a0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
10b0: 20 79 20 42 4c 4f 42 29 3b 20 20 20 20 2d 2d 20   y BLOB);    -- 
10c0: 61 66 66 69 6e 69 74 79 20 6f 66 20 74 31 2e 79  affinity of t1.y
10d0: 20 69 73 20 4e 4f 4e 45 0a 20 20 20 20 49 4e 53   is NONE.    INS
10e0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
10f0: 45 53 28 31 2c 27 39 39 27 29 3b 0a 0a 20 20 20  ES(1,'99');..   
1100: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
1110: 28 61 2c 20 62 20 4e 55 4d 45 52 49 43 29 3b 20  (a, b NUMERIC); 
1120: 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f 66 20   -- affinity of 
1130: 74 32 2e 62 20 69 73 20 4e 55 4d 45 52 49 43 0a  t2.b is NUMERIC.
1140: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1150: 20 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a 20   t2b ON t2(b);. 
1160: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1170: 32 20 56 41 4c 55 45 53 28 32 2c 39 39 29 3b 0a  2 VALUES(2,99);.
1180: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61  .    SELECT x, a
1190: 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74  , y=b FROM t1, t
11a0: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d  2;.  }.} {1 2 1}
11b0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d  .do_test whereB-
11c0: 34 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  4.2 {.  db eval 
11d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20  {.    SELECT x, 
11e0: 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20  a, y=b FROM t1, 
11f0: 74 32 20 57 48 45 52 45 20 79 3d 62 3b 0a 20 20  t2 WHERE y=b;.  
1200: 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f 5f 74  }.} {1 2 1}.do_t
1210: 65 73 74 20 77 68 65 72 65 42 2d 34 2e 33 20 7b  est whereB-4.3 {
1220: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1230: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
1240: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
1250: 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b  ERE b=y;.  }.} {
1260: 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77  1 2 1}.do_test w
1270: 68 65 72 65 42 2d 34 2e 34 20 7b 0a 20 20 23 20  hereB-4.4 {.  # 
1280: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
1290: 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
12a0: 74 6f 72 20 72 65 6d 6f 76 65 73 20 74 68 65 20  tor removes the 
12b0: 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
12c0: 73 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c 75 6d  so.  # the colum
12d0: 6e 73 20 63 6f 6d 70 61 72 65 20 66 61 6c 73 65  ns compare false
12e0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
12f0: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
1300: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
1310: 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d  ERE +y=+b;.  }.}
1320: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   {}.do_test wher
1330: 65 42 2d 34 2e 31 30 30 20 7b 0a 20 20 64 62 20  eB-4.100 {.  db 
1340: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
1350: 49 4e 44 45 58 20 74 32 62 3b 0a 20 20 20 20 53  INDEX t2b;.    S
1360: 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20  ELECT x, a, y=b 
1370: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
1380: 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20  E y=b;.  }.} {1 
1390: 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 1}.do_test whe
13a0: 72 65 42 2d 34 2e 31 30 31 20 7b 0a 20 20 64 62  reB-4.101 {.  db
13b0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
13c0: 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f  CT x, a, y=b FRO
13d0: 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 62  M t1, t2 WHERE b
13e0: 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31  =y;.  }.} {1 2 1
13f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
1400: 2d 34 2e 31 30 32 20 7b 0a 20 20 23 20 49 6e 20  -4.102 {.  # In 
1410: 74 68 69 73 20 63 61 73 65 20 74 68 65 20 75 6e  this case the un
1420: 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
1430: 20 72 65 6d 6f 76 65 73 20 74 68 65 20 63 6f 6c   removes the col
1440: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 73 6f 0a  umn affinity so.
1450: 20 20 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20    # the columns 
1460: 63 6f 6d 70 61 72 65 20 66 61 6c 73 65 0a 20 20  compare false.  
1470: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
1480: 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46  LECT x, a, y=b F
1490: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
14a0: 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d   +y=+b;.  }.} {}
14b0: 0a 0a 0a 0a 23 20 46 6f 72 20 74 68 69 73 20 73  ....# For this s
14c0: 65 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a 23  et of tests:.#.#
14d0: 20 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64 73    *   t1.y holds
14e0: 20 61 20 74 65 78 74 20 76 61 6c 75 65 20 77 69   a text value wi
14f0: 74 68 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  th affinity NONE
1500: 0a 23 20 20 2a 20 20 20 74 32 2e 62 20 68 6f 6c  .#  *   t2.b hol
1510: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  ds an integer va
1520: 6c 75 65 20 77 69 74 68 20 61 66 66 69 6e 69 74  lue with affinit
1530: 79 20 49 4e 54 45 47 45 52 0a 23 0a 23 20 42 65  y INTEGER.#.# Be
1540: 63 61 75 73 65 20 74 32 2e 62 20 68 61 73 20 61  cause t2.b has a
1550: 20 6e 75 6d 65 72 69 63 20 61 66 66 69 6e 69 74   numeric affinit
1560: 79 2c 20 74 79 70 65 20 63 6f 6e 76 65 72 73 69  y, type conversi
1570: 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a  on should occur.
1580: 23 20 61 6e 64 20 74 68 65 20 74 77 6f 20 66 69  # and the two fi
1590: 65 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 20 65  elds should be e
15a0: 71 75 61 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  qual..#.do_test 
15b0: 77 68 65 72 65 42 2d 35 2e 31 20 7b 0a 20 20 64  whereB-5.1 {.  d
15c0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f  b eval {.    DRO
15d0: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
15e0: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 0a  DROP TABLE t2;..
15f0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1600: 20 74 31 28 78 2c 20 79 20 42 4c 4f 42 29 3b 20   t1(x, y BLOB); 
1610: 20 20 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f     -- affinity o
1620: 66 20 74 31 2e 79 20 69 73 20 4e 4f 4e 45 0a 20  f t1.y is NONE. 
1630: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1640: 31 20 56 41 4c 55 45 53 28 31 2c 27 39 39 27 29  1 VALUES(1,'99')
1650: 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  ;..    CREATE TA
1660: 42 4c 45 20 74 32 28 61 2c 20 62 20 49 4e 54 29  BLE t2(a, b INT)
1670: 3b 20 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f  ;  -- affinity o
1680: 66 20 74 32 2e 62 20 69 73 20 49 4e 54 45 47 45  f t2.b is INTEGE
1690: 52 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  R.    CREATE IND
16a0: 45 58 20 74 32 62 20 4f 4e 20 74 32 28 62 29 3b  EX t2b ON t2(b);
16b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
16c0: 20 74 32 20 56 41 4c 55 45 53 28 32 2c 39 39 29   t2 VALUES(2,99)
16d0: 3b 0a 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c  ;..    SELECT x,
16e0: 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c   a, y=b FROM t1,
16f0: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t2;.  }.} {1 2 
1700: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  1}.do_test where
1710: 42 2d 35 2e 32 20 7b 0a 20 20 64 62 20 65 76 61  B-5.2 {.  db eva
1720: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  l {.    SELECT x
1730: 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31  , a, y=b FROM t1
1740: 2c 20 74 32 20 57 48 45 52 45 20 79 3d 62 3b 0a  , t2 WHERE y=b;.
1750: 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f    }.} {1 2 1}.do
1760: 5f 74 65 73 74 20 77 68 65 72 65 42 2d 35 2e 33  _test whereB-5.3
1770: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
1780: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20     SELECT x, a, 
1790: 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20  y=b FROM t1, t2 
17a0: 57 48 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d  WHERE b=y;.  }.}
17b0: 20 7b 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74   {1 2 1}.do_test
17c0: 20 77 68 65 72 65 42 2d 35 2e 34 20 7b 0a 20 20   whereB-5.4 {.  
17d0: 23 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  # In this case t
17e0: 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65  he unary "+" ope
17f0: 72 61 74 6f 72 20 72 65 6d 6f 76 65 73 20 74 68  rator removes th
1800: 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
1810: 79 20 73 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c  y so.  # the col
1820: 75 6d 6e 73 20 63 6f 6d 70 61 72 65 20 66 61 6c  umns compare fal
1830: 73 65 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  se.  db eval {. 
1840: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20     SELECT x, a, 
1850: 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20  y=b FROM t1, t2 
1860: 57 48 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d  WHERE +y=+b;.  }
1870: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
1880: 65 72 65 42 2d 35 2e 31 30 30 20 7b 0a 20 20 64  ereB-5.100 {.  d
1890: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f  b eval {.    DRO
18a0: 50 20 49 4e 44 45 58 20 74 32 62 3b 0a 20 20 20  P INDEX t2b;.   
18b0: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
18c0: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
18d0: 45 52 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b  ERE y=b;.  }.} {
18e0: 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77  1 2 1}.do_test w
18f0: 68 65 72 65 42 2d 35 2e 31 30 31 20 7b 0a 20 20  hereB-5.101 {.  
1900: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
1910: 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46  LECT x, a, y=b F
1920: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
1930: 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32   b=y;.  }.} {1 2
1940: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   1}.do_test wher
1950: 65 42 2d 35 2e 31 30 32 20 7b 0a 20 20 23 20 49  eB-5.102 {.  # I
1960: 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
1970: 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74  unary "+" operat
1980: 6f 72 20 72 65 6d 6f 76 65 73 20 74 68 65 20 63  or removes the c
1990: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 73  olumn affinity s
19a0: 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c 75 6d 6e  o.  # the column
19b0: 73 20 63 6f 6d 70 61 72 65 20 66 61 6c 73 65 0a  s compare false.
19c0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
19d0: 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62  SELECT x, a, y=b
19e0: 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45   FROM t1, t2 WHE
19f0: 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d 20  RE +y=+b;.  }.} 
1a00: 7b 7d 0a 0a 0a 23 20 46 6f 72 20 74 68 69 73 20  {}...# For this 
1a10: 73 65 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a  set of tests:.#.
1a20: 23 20 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64  #  *   t1.y hold
1a30: 73 20 61 20 74 65 78 74 20 76 61 6c 75 65 20 77  s a text value w
1a40: 69 74 68 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  ith affinity NON
1a50: 45 0a 23 20 20 2a 20 20 20 74 32 2e 62 20 68 6f  E.#  *   t2.b ho
1a60: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76  lds an integer v
1a70: 61 6c 75 65 20 77 69 74 68 20 61 66 66 69 6e 69  alue with affini
1a80: 74 79 20 52 45 41 4c 0a 23 0a 23 20 42 65 63 61  ty REAL.#.# Beca
1a90: 75 73 65 20 74 32 2e 62 20 68 61 73 20 61 20 6e  use t2.b has a n
1aa0: 75 6d 65 72 69 63 20 61 66 66 69 6e 69 74 79 2c  umeric affinity,
1ab0: 20 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e   type conversion
1ac0: 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 23 20   should occur.# 
1ad0: 61 6e 64 20 74 68 65 20 74 77 6f 20 66 69 65 6c  and the two fiel
1ae0: 64 73 20 73 68 6f 75 6c 64 20 62 65 20 65 71 75  ds should be equ
1af0: 61 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  al..#.do_test wh
1b00: 65 72 65 42 2d 36 2e 31 20 7b 0a 20 20 64 62 20  ereB-6.1 {.  db 
1b10: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
1b20: 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 44 52  TABLE t1;.    DR
1b30: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 0a 20 20  OP TABLE t2;..  
1b40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1b50: 31 28 78 2c 20 79 20 42 4c 4f 42 29 3b 20 20 20  1(x, y BLOB);   
1b60: 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f 66 20   -- affinity of 
1b70: 74 31 2e 79 20 69 73 20 4e 4f 4e 45 0a 20 20 20  t1.y is NONE.   
1b80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1b90: 56 41 4c 55 45 53 28 31 2c 27 39 39 27 29 3b 0a  VALUES(1,'99');.
1ba0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1bb0: 45 20 74 32 28 61 2c 20 62 20 52 45 41 4c 29 3b  E t2(a, b REAL);
1bc0: 20 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f 66    -- affinity of
1bd0: 20 74 32 2e 62 20 69 73 20 52 45 41 4c 0a 20 20   t2.b is REAL.  
1be0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
1bf0: 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a 20 20 20  2b ON t2(b);.   
1c00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1c10: 56 41 4c 55 45 53 28 32 2c 39 39 2e 30 29 3b 0a  VALUES(2,99.0);.
1c20: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61  .    SELECT x, a
1c30: 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74  , y=b FROM t1, t
1c40: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d  2;.  }.} {1 2 1}
1c50: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d  .do_test whereB-
1c60: 36 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  6.2 {.  db eval 
1c70: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20  {.    SELECT x, 
1c80: 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20  a, y=b FROM t1, 
1c90: 74 32 20 57 48 45 52 45 20 79 3d 62 3b 0a 20 20  t2 WHERE y=b;.  
1ca0: 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f 5f 74  }.} {1 2 1}.do_t
1cb0: 65 73 74 20 77 68 65 72 65 42 2d 36 2e 33 20 7b  est whereB-6.3 {
1cc0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1cd0: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
1ce0: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
1cf0: 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b  ERE b=y;.  }.} {
1d00: 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77  1 2 1}.do_test w
1d10: 68 65 72 65 42 2d 36 2e 34 20 7b 0a 20 20 23 20  hereB-6.4 {.  # 
1d20: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
1d30: 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
1d40: 74 6f 72 20 72 65 6d 6f 76 65 73 20 74 68 65 20  tor removes the 
1d50: 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
1d60: 73 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c 75 6d  so.  # the colum
1d70: 6e 73 20 63 6f 6d 70 61 72 65 20 66 61 6c 73 65  ns compare false
1d80: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1d90: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
1da0: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
1db0: 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d  ERE +y=+b;.  }.}
1dc0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   {}.do_test wher
1dd0: 65 42 2d 36 2e 31 30 30 20 7b 0a 20 20 64 62 20  eB-6.100 {.  db 
1de0: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
1df0: 49 4e 44 45 58 20 74 32 62 3b 0a 20 20 20 20 53  INDEX t2b;.    S
1e00: 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20  ELECT x, a, y=b 
1e10: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
1e20: 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20  E y=b;.  }.} {1 
1e30: 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 1}.do_test whe
1e40: 72 65 42 2d 36 2e 31 30 31 20 7b 0a 20 20 64 62  reB-6.101 {.  db
1e50: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
1e60: 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f  CT x, a, y=b FRO
1e70: 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 62  M t1, t2 WHERE b
1e80: 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31  =y;.  }.} {1 2 1
1e90: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
1ea0: 2d 36 2e 31 30 32 20 7b 0a 20 20 23 20 49 6e 20  -6.102 {.  # In 
1eb0: 74 68 69 73 20 63 61 73 65 20 74 68 65 20 75 6e  this case the un
1ec0: 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
1ed0: 20 72 65 6d 6f 76 65 73 20 74 68 65 20 63 6f 6c   removes the col
1ee0: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 73 6f 0a  umn affinity so.
1ef0: 20 20 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20    # the columns 
1f00: 63 6f 6d 70 61 72 65 20 66 61 6c 73 65 0a 20 20  compare false.  
1f10: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45  db eval {.    SE
1f20: 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46  LECT x, a, y=b F
1f30: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
1f40: 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d   +y=+b;.  }.} {}
1f50: 0a 0a 0a 23 20 46 6f 72 20 74 68 69 73 20 73 65  ...# For this se
1f60: 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a 23 20  t of tests:.#.# 
1f70: 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64 73 20   *   t1.y holds 
1f80: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
1f90: 20 77 69 74 68 20 61 66 66 69 6e 69 74 79 20 4e   with affinity N
1fa0: 55 4d 45 52 49 43 0a 23 20 20 2a 20 20 20 74 32  UMERIC.#  *   t2
1fb0: 2e 62 20 68 6f 6c 64 73 20 61 20 74 65 78 74 20  .b holds a text 
1fc0: 76 61 6c 75 65 20 77 69 74 68 20 61 66 66 69 6e  value with affin
1fd0: 69 74 79 20 4e 4f 4e 45 0a 23 0a 23 20 42 65 63  ity NONE.#.# Bec
1fe0: 61 75 73 65 20 74 31 2e 79 20 68 61 73 20 61 20  ause t1.y has a 
1ff0: 6e 75 6d 65 72 69 63 20 61 66 66 69 6e 69 74 79  numeric affinity
2000: 2c 20 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  , type conversio
2010: 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 23  n should occur.#
2020: 20 61 6e 64 20 74 68 65 20 74 77 6f 20 66 69 65   and the two fie
2030: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 20 65 71  lds should be eq
2040: 75 61 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  ual..#.do_test w
2050: 68 65 72 65 42 2d 37 2e 31 20 7b 0a 20 20 64 62  hereB-7.1 {.  db
2060: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50   eval {.    DROP
2070: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 44   TABLE t1;.    D
2080: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 0a 20  ROP TABLE t2;.. 
2090: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
20a0: 74 31 28 78 2c 20 79 20 4e 55 4d 45 52 49 43 29  t1(x, y NUMERIC)
20b0: 3b 20 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f  ;  -- affinity o
20c0: 66 20 74 31 2e 79 20 69 73 20 4e 55 4d 45 52 49  f t1.y is NUMERI
20d0: 43 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  C.    INSERT INT
20e0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 39 39  O t1 VALUES(1,99
20f0: 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54  );..    CREATE T
2100: 41 42 4c 45 20 74 32 28 61 2c 20 62 20 42 4c 4f  ABLE t2(a, b BLO
2110: 42 29 3b 20 20 2d 2d 20 61 66 66 69 6e 69 74 79  B);  -- affinity
2120: 20 6f 66 20 74 32 2e 62 20 69 73 20 4e 4f 4e 45   of t2.b is NONE
2130: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
2140: 58 20 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a  X t2b ON t2(b);.
2150: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2160: 74 32 20 56 41 4c 55 45 53 28 32 2c 27 39 39 27  t2 VALUES(2,'99'
2170: 29 3b 0a 0a 20 20 20 20 53 45 4c 45 43 54 20 78  );..    SELECT x
2180: 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31  , a, y=b FROM t1
2190: 2c 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  , t2;.  }.} {1 2
21a0: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   1}.do_test wher
21b0: 65 42 2d 37 2e 32 20 7b 0a 20 20 64 62 20 65 76  eB-7.2 {.  db ev
21c0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
21d0: 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74  x, a, y=b FROM t
21e0: 31 2c 20 74 32 20 57 48 45 52 45 20 79 3d 62 3b  1, t2 WHERE y=b;
21f0: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64  .  }.} {1 2 1}.d
2200: 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d 37 2e  o_test whereB-7.
2210: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
2220: 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c      SELECT x, a,
2230: 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32   y=b FROM t1, t2
2240: 20 57 48 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a   WHERE b=y;.  }.
2250: 7d 20 7b 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73  } {1 2 1}.do_tes
2260: 74 20 77 68 65 72 65 42 2d 37 2e 34 20 7b 0a 20  t whereB-7.4 {. 
2270: 20 23 20 49 6e 20 74 68 69 73 20 63 61 73 65 20   # In this case 
2280: 74 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70  the unary "+" op
2290: 65 72 61 74 6f 72 20 72 65 6d 6f 76 65 73 20 74  erator removes t
22a0: 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
22b0: 74 79 20 73 6f 0a 20 20 23 20 74 68 65 20 63 6f  ty so.  # the co
22c0: 6c 75 6d 6e 73 20 63 6f 6d 70 61 72 65 20 66 61  lumns compare fa
22d0: 6c 73 65 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  lse.  db eval {.
22e0: 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c      SELECT x, a,
22f0: 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32   y=b FROM t1, t2
2300: 20 57 48 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20   WHERE +y=+b;.  
2310: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
2320: 68 65 72 65 42 2d 37 2e 31 30 30 20 7b 0a 20 20  hereB-7.100 {.  
2330: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52  db eval {.    DR
2340: 4f 50 20 49 4e 44 45 58 20 74 32 62 3b 0a 20 20  OP INDEX t2b;.  
2350: 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79    SELECT x, a, y
2360: 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  =b FROM t1, t2 W
2370: 48 45 52 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20  HERE y=b;.  }.} 
2380: 7b 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 1}.do_test 
2390: 77 68 65 72 65 42 2d 37 2e 31 30 31 20 7b 0a 20  whereB-7.101 {. 
23a0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
23b0: 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20  ELECT x, a, y=b 
23c0: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
23d0: 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20  E b=y;.  }.} {1 
23e0: 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  2 1}.do_test whe
23f0: 72 65 42 2d 37 2e 31 30 32 20 7b 0a 20 20 23 20  reB-7.102 {.  # 
2400: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
2410: 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
2420: 74 6f 72 20 72 65 6d 6f 76 65 73 20 74 68 65 20  tor removes the 
2430: 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
2440: 73 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c 75 6d  so.  # the colum
2450: 6e 73 20 63 6f 6d 70 61 72 65 20 66 61 6c 73 65  ns compare false
2460: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
2470: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
2480: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  b FROM t1, t2 WH
2490: 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d  ERE +y=+b;.  }.}
24a0: 20 7b 7d 0a 0a 23 20 46 6f 72 20 74 68 69 73 20   {}..# For this 
24b0: 73 65 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a  set of tests:.#.
24c0: 23 20 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64  #  *   t1.y hold
24d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
24e0: 75 65 20 77 69 74 68 20 61 66 66 69 6e 69 74 79  ue with affinity
24f0: 20 49 4e 54 45 47 45 52 0a 23 20 20 2a 20 20 20   INTEGER.#  *   
2500: 74 32 2e 62 20 68 6f 6c 64 73 20 61 20 74 65 78  t2.b holds a tex
2510: 74 20 76 61 6c 75 65 20 77 69 74 68 20 61 66 66  t value with aff
2520: 69 6e 69 74 79 20 4e 4f 4e 45 0a 23 0a 23 20 42  inity NONE.#.# B
2530: 65 63 61 75 73 65 20 74 31 2e 79 20 68 61 73 20  ecause t1.y has 
2540: 61 20 6e 75 6d 65 72 69 63 20 61 66 66 69 6e 69  a numeric affini
2550: 74 79 2c 20 74 79 70 65 20 63 6f 6e 76 65 72 73  ty, type convers
2560: 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63 63 75 72  ion should occur
2570: 0a 23 20 61 6e 64 20 74 68 65 20 74 77 6f 20 66  .# and the two f
2580: 69 65 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 20  ields should be 
2590: 65 71 75 61 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74  equal..#.do_test
25a0: 20 77 68 65 72 65 42 2d 38 2e 31 20 7b 0a 20 20   whereB-8.1 {.  
25b0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52  db eval {.    DR
25c0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20  OP TABLE t1;.   
25d0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a   DROP TABLE t2;.
25e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
25f0: 45 20 74 31 28 78 2c 20 79 20 49 4e 54 29 3b 20  E t1(x, y INT); 
2600: 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f 66 20   -- affinity of 
2610: 74 31 2e 79 20 69 73 20 49 4e 54 45 47 45 52 0a  t1.y is INTEGER.
2620: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2630: 74 31 20 56 41 4c 55 45 53 28 31 2c 39 39 29 3b  t1 VALUES(1,99);
2640: 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
2650: 4c 45 20 74 32 28 61 2c 20 62 20 42 4c 4f 42 29  LE t2(a, b BLOB)
2660: 3b 20 20 2d 2d 20 61 66 66 69 6e 69 74 79 20 6f  ;  -- affinity o
2670: 66 20 74 32 2e 62 20 69 73 20 4e 4f 4e 45 0a 20  f t2.b is NONE. 
2680: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
2690: 74 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a 20 20  t2b ON t2(b);.  
26a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
26b0: 20 56 41 4c 55 45 53 28 32 2c 27 39 39 27 29 3b   VALUES(2,'99');
26c0: 0a 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c 20  ..    SELECT x, 
26d0: 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c 20  a, y=b FROM t1, 
26e0: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31  t2;.  }.} {1 2 1
26f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42  }.do_test whereB
2700: 2d 38 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  -8.2 {.  db eval
2710: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c   {.    SELECT x,
2720: 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31 2c   a, y=b FROM t1,
2730: 20 74 32 20 57 48 45 52 45 20 79 3d 62 3b 0a 20   t2 WHERE y=b;. 
2740: 20 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f 5f   }.} {1 2 1}.do_
2750: 74 65 73 74 20 77 68 65 72 65 42 2d 38 2e 33 20  test whereB-8.3 
2760: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
2770: 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79    SELECT x, a, y
2780: 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  =b FROM t1, t2 W
2790: 48 45 52 45 20 62 3d 79 3b 0a 20 20 7d 0a 7d 20  HERE b=y;.  }.} 
27a0: 7b 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 1}.do_test 
27b0: 77 68 65 72 65 42 2d 38 2e 34 20 7b 0a 20 20 23  whereB-8.4 {.  #
27c0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
27d0: 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72  e unary "+" oper
27e0: 61 74 6f 72 20 72 65 6d 6f 76 65 73 20 74 68 65  ator removes the
27f0: 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
2800: 20 73 6f 0a 20 20 23 20 74 68 65 20 63 6f 6c 75   so.  # the colu
2810: 6d 6e 73 20 63 6f 6d 70 61 72 65 20 66 61 6c 73  mns compare fals
2820: 65 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  e.  db eval {.  
2830: 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79    SELECT x, a, y
2840: 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  =b FROM t1, t2 W
2850: 48 45 52 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a  HERE +y=+b;.  }.
2860: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  } {}.do_test whe
2870: 72 65 42 2d 38 2e 31 30 30 20 7b 0a 20 20 64 62  reB-8.100 {.  db
2880: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50   eval {.    DROP
2890: 20 49 4e 44 45 58 20 74 32 62 3b 0a 20 20 20 20   INDEX t2b;.    
28a0: 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62  SELECT x, a, y=b
28b0: 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45   FROM t1, t2 WHE
28c0: 52 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20 7b 31  RE y=b;.  }.} {1
28d0: 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68   2 1}.do_test wh
28e0: 65 72 65 42 2d 38 2e 31 30 31 20 7b 0a 20 20 64  ereB-8.101 {.  d
28f0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
2900: 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52  ECT x, a, y=b FR
2910: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
2920: 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  b=y;.  }.} {1 2 
2930: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  1}.do_test where
2940: 42 2d 38 2e 31 30 32 20 7b 0a 20 20 23 20 49 6e  B-8.102 {.  # In
2950: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 75   this case the u
2960: 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f  nary "+" operato
2970: 72 20 72 65 6d 6f 76 65 73 20 74 68 65 20 63 6f  r removes the co
2980: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 73 6f  lumn affinity so
2990: 0a 20 20 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73  .  # the columns
29a0: 20 63 6f 6d 70 61 72 65 20 66 61 6c 73 65 0a 20   compare false. 
29b0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
29c0: 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20  ELECT x, a, y=b 
29d0: 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52  FROM t1, t2 WHER
29e0: 45 20 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b  E +y=+b;.  }.} {
29f0: 7d 0a 0a 23 20 46 6f 72 20 74 68 69 73 20 73 65  }..# For this se
2a00: 74 20 6f 66 20 74 65 73 74 73 3a 0a 23 0a 23 20  t of tests:.#.# 
2a10: 20 2a 20 20 20 74 31 2e 79 20 68 6f 6c 64 73 20   *   t1.y holds 
2a20: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
2a30: 20 77 69 74 68 20 61 66 66 69 6e 69 74 79 20 52   with affinity R
2a40: 45 41 4c 0a 23 20 20 2a 20 20 20 74 32 2e 62 20  EAL.#  *   t2.b 
2a50: 68 6f 6c 64 73 20 61 20 74 65 78 74 20 76 61 6c  holds a text val
2a60: 75 65 20 77 69 74 68 20 61 66 66 69 6e 69 74 79  ue with affinity
2a70: 20 4e 4f 4e 45 0a 23 0a 23 20 42 65 63 61 75 73   NONE.#.# Becaus
2a80: 65 20 74 31 2e 79 20 68 61 73 20 61 20 6e 75 6d  e t1.y has a num
2a90: 65 72 69 63 20 61 66 66 69 6e 69 74 79 2c 20 74  eric affinity, t
2aa0: 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 73  ype conversion s
2ab0: 68 6f 75 6c 64 20 6f 63 63 75 72 0a 23 20 61 6e  hould occur.# an
2ac0: 64 20 74 68 65 20 74 77 6f 20 66 69 65 6c 64 73  d the two fields
2ad0: 20 73 68 6f 75 6c 64 20 62 65 20 65 71 75 61 6c   should be equal
2ae0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
2af0: 65 42 2d 39 2e 31 20 7b 0a 20 20 64 62 20 65 76  eB-9.1 {.  db ev
2b00: 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  al {.    DROP TA
2b10: 42 4c 45 20 74 31 3b 0a 20 20 20 20 44 52 4f 50  BLE t1;.    DROP
2b20: 20 54 41 42 4c 45 20 74 32 3b 0a 0a 20 20 20 20   TABLE t2;..    
2b30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2b40: 78 2c 20 79 20 52 45 41 4c 29 3b 20 20 2d 2d 20  x, y REAL);  -- 
2b50: 61 66 66 69 6e 69 74 79 20 6f 66 20 74 31 2e 79  affinity of t1.y
2b60: 20 69 73 20 52 45 41 4c 0a 20 20 20 20 49 4e 53   is REAL.    INS
2b70: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
2b80: 45 53 28 31 2c 39 39 2e 30 29 3b 0a 0a 20 20 20  ES(1,99.0);..   
2b90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
2ba0: 28 61 2c 20 62 20 42 4c 4f 42 29 3b 20 20 2d 2d  (a, b BLOB);  --
2bb0: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 32 2e   affinity of t2.
2bc0: 62 20 69 73 20 4e 4f 4e 45 0a 20 20 20 20 43 52  b is NONE.    CR
2bd0: 45 41 54 45 20 49 4e 44 45 58 20 74 32 62 20 4f  EATE INDEX t2b O
2be0: 4e 20 74 32 28 62 29 3b 0a 20 20 20 20 49 4e 53  N t2(b);.    INS
2bf0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
2c00: 45 53 28 32 2c 27 39 39 27 29 3b 0a 0a 20 20 20  ES(2,'99');..   
2c10: 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79 3d   SELECT x, a, y=
2c20: 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 3b 0a 20  b FROM t1, t2;. 
2c30: 20 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f 5f   }.} {1 2 1}.do_
2c40: 74 65 73 74 20 77 68 65 72 65 42 2d 39 2e 32 20  test whereB-9.2 
2c50: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
2c60: 20 20 53 45 4c 45 43 54 20 78 2c 20 61 2c 20 79    SELECT x, a, y
2c70: 3d 62 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  =b FROM t1, t2 W
2c80: 48 45 52 45 20 79 3d 62 3b 0a 20 20 7d 0a 7d 20  HERE y=b;.  }.} 
2c90: 7b 31 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 1}.do_test 
2ca0: 77 68 65 72 65 42 2d 39 2e 33 20 7b 0a 20 20 64  whereB-9.3 {.  d
2cb0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
2cc0: 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52  ECT x, a, y=b FR
2cd0: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
2ce0: 62 3d 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  b=y;.  }.} {1 2 
2cf0: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  1}.do_test where
2d00: 42 2d 39 2e 34 20 7b 0a 20 20 23 20 49 6e 20 74  B-9.4 {.  # In t
2d10: 68 69 73 20 63 61 73 65 20 74 68 65 20 75 6e 61  his case the una
2d20: 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 20  ry "+" operator 
2d30: 72 65 6d 6f 76 65 73 20 74 68 65 20 63 6f 6c 75  removes the colu
2d40: 6d 6e 20 61 66 66 69 6e 69 74 79 20 73 6f 0a 20  mn affinity so. 
2d50: 20 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 63   # the columns c
2d60: 6f 6d 70 61 72 65 20 66 61 6c 73 65 0a 20 20 64  ompare false.  d
2d70: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c  b eval {.    SEL
2d80: 45 43 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52  ECT x, a, y=b FR
2d90: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
2da0: 2b 79 3d 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  +y=+b;.  }.} {}.
2db0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d 39  do_test whereB-9
2dc0: 2e 31 30 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  .100 {.  db eval
2dd0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45   {.    DROP INDE
2de0: 58 20 74 32 62 3b 0a 20 20 20 20 53 45 4c 45 43  X t2b;.    SELEC
2df0: 54 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d  T x, a, y=b FROM
2e00: 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 79 3d   t1, t2 WHERE y=
2e10: 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d  b;.  }.} {1 2 1}
2e20: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 42 2d  .do_test whereB-
2e30: 39 2e 31 30 31 20 7b 0a 20 20 64 62 20 65 76 61  9.101 {.  db eva
2e40: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  l {.    SELECT x
2e50: 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20 74 31  , a, y=b FROM t1
2e60: 2c 20 74 32 20 57 48 45 52 45 20 62 3d 79 3b 0a  , t2 WHERE b=y;.
2e70: 20 20 7d 0a 7d 20 7b 31 20 32 20 31 7d 0a 64 6f    }.} {1 2 1}.do
2e80: 5f 74 65 73 74 20 77 68 65 72 65 42 2d 39 2e 31  _test whereB-9.1
2e90: 30 32 20 7b 0a 20 20 23 20 49 6e 20 74 68 69 73  02 {.  # In this
2ea0: 20 63 61 73 65 20 74 68 65 20 75 6e 61 72 79 20   case the unary 
2eb0: 22 2b 22 20 6f 70 65 72 61 74 6f 72 20 72 65 6d  "+" operator rem
2ec0: 6f 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  oves the column 
2ed0: 61 66 66 69 6e 69 74 79 20 73 6f 0a 20 20 23 20  affinity so.  # 
2ee0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 70  the columns comp
2ef0: 61 72 65 20 66 61 6c 73 65 0a 20 20 64 62 20 65  are false.  db e
2f00: 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  val {.    SELECT
2f10: 20 78 2c 20 61 2c 20 79 3d 62 20 46 52 4f 4d 20   x, a, y=b FROM 
2f20: 74 31 2c 20 74 32 20 57 48 45 52 45 20 2b 79 3d  t1, t2 WHERE +y=
2f30: 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 0a 0a  +b;.  }.} {}....
2f40: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.