/ Hex Artifact Content
Login

Artifact b9b528e5ec6c5d8ee149ff27d48a23ce3f6075d9:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 54 68 65 20 66 6f 63 75 73 0a  rary. The focus.
01b0: 23 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  # of this file i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 69 6e  s testing the in
01d0: 74 65 72 61 63 74 69 6f 6e 20 6f 66 20 6d 61 6e  teraction of man
01e0: 69 66 65 73 74 20 74 79 70 65 73 2c 20 74 79 70  ifest types, typ
01f0: 65 20 61 66 66 69 6e 69 74 79 0a 23 20 61 6e 64  e affinity.# and
0200: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72   comparison expr
0210: 65 73 73 69 6f 6e 73 2e 0a 23 0a 23 20 24 49 64  essions..#.# $Id
0220: 3a 20 74 79 70 65 73 32 2e 74 65 73 74 2c 76 20  : types2.test,v 
0230: 31 2e 32 20 32 30 30 34 2f 30 35 2f 31 37 20 31  1.2 2004/05/17 1
0240: 30 3a 34 38 3a 35 38 20 64 61 6e 69 65 6c 6b 31  0:48:58 danielk1
0250: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0260: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0270: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0280: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0290: 74 65 72 2e 74 63 6c 0a 0a 23 20 54 65 73 74 73  ter.tcl..# Tests
02a0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 72   in this file ar
02b0: 65 20 6f 72 67 61 6e 69 7a 65 64 20 72 6f 75 67  e organized roug
02c0: 68 6c 79 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  hly as follows:.
02d0: 23 0a 23 20 74 79 70 65 73 32 2d 31 2e 2a 3a 20  #.# types2-1.*: 
02e0: 54 68 65 20 27 3d 27 20 6f 70 65 72 61 74 6f 72  The '=' operator
02f0: 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
0300: 6f 66 20 61 6e 20 69 6e 64 65 78 2e 0a 23 20 74  of an index..# t
0310: 79 70 65 73 32 2d 32 2e 2a 3a 20 54 68 65 20 27  ypes2-2.*: The '
0320: 3d 27 20 6f 70 65 72 61 74 6f 72 20 69 6d 70 6c  =' operator impl
0330: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 61 6e  emented using an
0340: 20 69 6e 64 65 78 2e 0a 23 20 74 79 70 65 73 32   index..# types2
0350: 2d 33 2e 2a 3a 20 54 68 65 20 27 3c 27 20 6f 70  -3.*: The '<' op
0360: 65 72 61 74 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  erator implement
0370: 65 64 20 75 73 69 6e 67 20 61 6e 20 69 6e 64 65  ed using an inde
0380: 78 2e 0a 23 20 74 79 70 65 73 32 2d 34 2e 2a 3a  x..# types2-4.*:
0390: 20 54 68 65 20 27 3e 27 20 6f 70 65 72 61 74 6f   The '>' operato
03a0: 72 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65  r in the absence
03b0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 0a 23 20   of an index..# 
03c0: 74 79 70 65 73 32 2d 35 2e 2a 3a 20 54 68 65 20  types2-5.*: The 
03d0: 27 49 4e 28 78 2c 20 79 2e 2e 2e 29 27 20 6f 70  'IN(x, y...)' op
03e0: 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 61 62  erator in the ab
03f0: 73 65 6e 63 65 20 6f 66 20 61 6e 20 69 6e 64 65  sence of an inde
0400: 78 2e 0a 23 20 74 79 70 65 73 32 2d 36 2e 2a 3a  x..# types2-6.*:
0410: 20 54 68 65 20 27 49 4e 28 78 2c 20 79 2e 2e 2e   The 'IN(x, y...
0420: 29 27 20 6f 70 65 72 61 74 6f 72 20 77 69 74 68  )' operator with
0430: 20 61 6e 20 69 6e 64 65 78 2e 0a 23 20 74 79 70   an index..# typ
0440: 65 73 32 2d 37 2e 2a 3a 20 54 68 65 20 27 49 4e  es2-7.*: The 'IN
0450: 28 53 45 4c 45 43 54 2e 2e 2e 29 27 20 6f 70 65  (SELECT...)' ope
0460: 72 61 74 6f 72 20 69 6e 20 74 68 65 20 61 62 73  rator in the abs
0470: 65 6e 63 65 20 6f 66 20 61 6e 20 69 6e 64 65 78  ence of an index
0480: 2e 0a 23 20 74 79 70 65 73 32 2d 38 2e 2a 3a 20  ..# types2-8.*: 
0490: 54 68 65 20 27 49 4e 28 53 45 4c 45 43 54 2e 2e  The 'IN(SELECT..
04a0: 2e 29 27 20 6f 70 65 72 61 74 6f 72 20 77 69 74  .)' operator wit
04b0: 68 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 23 20  h an index..#.# 
04c0: 41 6c 6c 20 74 65 73 74 73 20 74 65 73 74 20 74  All tests test t
04d0: 68 65 20 6f 70 65 72 61 74 6f 72 73 20 75 73 69  he operators usi
04e0: 6e 67 20 6c 69 74 65 72 61 6c 73 20 61 6e 64 20  ng literals and 
04f0: 63 6f 6c 75 6d 6e 73 2c 20 62 75 74 20 6e 6f 0a  columns, but no.
0500: 23 20 6f 74 68 65 72 20 74 79 70 65 73 20 6f 66  # other types of
0510: 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 41 6c   expressions. Al
0520: 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 78  l expressions ex
0530: 63 65 70 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65  cept columns are
0540: 0a 23 20 68 61 6e 64 6c 65 64 20 73 69 6d 69 6c  .# handled simil
0550: 61 72 6c 79 20 69 6e 20 74 68 65 20 69 6d 70 6c  arly in the impl
0560: 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 0a 65 78 65  ementation...exe
0570: 63 73 71 6c 20 7b 0a 20 20 43 52 45 41 54 45 20  csql {.  CREATE 
0580: 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20 69 31  TABLE t1(.    i1
0590: 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 69 32   INTEGER,.    i2
05a0: 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 6e 31   INTEGER,.    n1
05b0: 20 4e 55 4d 45 52 49 43 2c 0a 20 20 20 20 6e 32   NUMERIC,.    n2
05c0: 20 4e 55 4d 45 52 49 43 2c 0a 20 20 20 20 74 31   NUMERIC,.    t1
05d0: 20 54 45 58 54 2c 0a 20 20 20 20 74 32 20 54 45   TEXT,.    t2 TE
05e0: 58 54 2c 0a 20 20 20 20 6f 31 2c 0a 20 20 20 20  XT,.    o1,.    
05f0: 6f 32 0a 20 20 29 3b 0a 20 20 49 4e 53 45 52 54  o2.  );.  INSERT
0600: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0610: 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e  NULL,NULL,NULL,N
0620: 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55  ULL,NULL,NULL,NU
0630: 4c 4c 2c 4e 55 4c 4c 29 3b 0a 7d 0a 0a 70 72 6f  LL,NULL);.}..pro
0640: 63 20 74 65 73 74 5f 62 6f 6f 6c 20 7b 74 65 73  c test_bool {tes
0650: 74 6e 61 6d 65 20 76 61 72 73 20 65 78 70 72 20  tname vars expr 
0660: 72 65 73 7d 20 7b 0a 20 20 69 66 20 7b 20 24 76  res} {.  if { $v
0670: 61 72 73 20 21 3d 20 22 22 20 7d 20 7b 0a 20 20  ars != "" } {.  
0680: 20 20 65 78 65 63 73 71 6c 20 22 55 50 44 41 54    execsql "UPDAT
0690: 45 20 74 31 20 53 45 54 20 24 76 61 72 73 22 0a  E t1 SET $vars".
06a0: 20 20 7d 0a 0a 20 20 66 6f 72 65 61 63 68 20 7b    }..  foreach {
06b0: 74 20 65 20 72 7d 20 5b 6c 69 73 74 20 24 74 65  t e r} [list $te
06c0: 73 74 6e 61 6d 65 20 24 65 78 70 72 20 24 72 65  stname $expr $re
06d0: 73 5d 20 7b 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  s] {}..  do_test
06e0: 20 24 74 2e 31 20 22 65 78 65 63 73 71 6c 20 7b   $t.1 "execsql {
06f0: 53 45 4c 45 43 54 20 24 65 20 46 52 4f 4d 20 74  SELECT $e FROM t
0700: 31 7d 22 20 24 72 0a 20 20 64 6f 5f 74 65 73 74  1}" $r.  do_test
0710: 20 24 74 2e 32 20 22 65 78 65 63 73 71 6c 20 7b   $t.2 "execsql {
0720: 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 31  SELECT 1 FROM t1
0730: 20 57 48 45 52 45 20 24 65 78 70 72 7d 22 20 5b   WHERE $expr}" [
0740: 65 78 70 72 20 24 72 3f 22 31 22 3a 22 22 5d 0a  expr $r?"1":""].
0750: 20 20 64 6f 5f 74 65 73 74 20 24 74 2e 33 20 22    do_test $t.3 "
0760: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0770: 31 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  1 FROM t1 WHERE 
0780: 4e 4f 54 20 28 24 65 29 7d 22 20 5b 65 78 70 72  NOT ($e)}" [expr
0790: 20 24 72 3f 22 22 3a 22 31 22 5d 0a 7d 0a 0a 23   $r?"":"1"].}..#
07a0: 20 43 6f 6d 70 61 72 65 20 6c 69 74 65 72 61 6c   Compare literal
07b0: 73 20 61 67 61 69 6e 73 74 20 6c 69 74 65 72 61  s against litera
07c0: 6c 73 2e 20 54 68 69 73 20 73 68 6f 75 6c 64 20  ls. This should 
07d0: 61 6c 77 61 79 73 20 75 73 65 20 61 20 6e 75 6d  always use a num
07e0: 65 72 69 63 0a 23 20 63 6f 6d 70 61 72 69 73 6f  eric.# compariso
07f0: 6e 2e 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70  n..test_bool typ
0800: 65 73 32 2d 31 2e 31 20 22 22 20 7b 35 30 30 20  es2-1.1 "" {500 
0810: 3d 20 35 30 30 2e 30 7d 20 31 0a 74 65 73 74 5f  = 500.0} 1.test_
0820: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e 32 20  bool types2-1.2 
0830: 22 22 20 7b 27 35 30 30 27 20 3d 20 35 30 30 2e  "" {'500' = 500.
0840: 30 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74  0} 1.test_bool t
0850: 79 70 65 73 32 2d 31 2e 33 20 22 22 20 7b 35 30  ypes2-1.3 "" {50
0860: 30 20 3d 20 27 35 30 30 2e 30 27 7d 20 31 0a 74  0 = '500.0'} 1.t
0870: 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d  est_bool types2-
0880: 31 2e 34 20 22 22 20 7b 27 35 30 30 27 20 3d 20  1.4 "" {'500' = 
0890: 27 35 30 30 2e 30 27 7d 20 31 0a 0a 23 20 43 6f  '500.0'} 1..# Co
08a0: 6d 70 61 72 65 20 6c 69 74 65 72 61 6c 73 20 61  mpare literals a
08b0: 67 61 69 6e 73 74 20 61 20 63 6f 6c 75 6d 6e 20  gainst a column 
08c0: 77 69 74 68 20 54 45 58 54 20 61 66 66 69 6e 69  with TEXT affini
08d0: 74 79 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70  ty.test_bool typ
08e0: 65 73 32 2d 31 2e 35 20 7b 74 31 3d 35 30 30 7d  es2-1.5 {t1=500}
08f0: 20 7b 35 30 30 20 3d 20 74 31 7d 20 31 0a 74 65   {500 = t1} 1.te
0900: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31  st_bool types2-1
0910: 2e 36 20 7b 74 31 3d 35 30 30 7d 20 7b 27 35 30  .6 {t1=500} {'50
0920: 30 27 20 3d 20 74 31 7d 20 31 0a 74 65 73 74 5f  0' = t1} 1.test_
0930: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e 37 20  bool types2-1.7 
0940: 7b 74 31 3d 35 30 30 7d 20 7b 35 30 30 2e 30 20  {t1=500} {500.0 
0950: 3d 20 74 31 7d 20 30 0a 74 65 73 74 5f 62 6f 6f  = t1} 0.test_boo
0960: 6c 20 74 79 70 65 73 32 2d 31 2e 38 20 7b 74 31  l types2-1.8 {t1
0970: 3d 35 30 30 7d 20 7b 27 35 30 30 2e 30 27 20 3d  =500} {'500.0' =
0980: 20 74 31 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c   t1} 0.test_bool
0990: 20 74 79 70 65 73 32 2d 31 2e 39 20 7b 74 31 3d   types2-1.9 {t1=
09a0: 27 35 30 30 27 7d 20 7b 35 30 30 20 3d 20 74 31  '500'} {500 = t1
09b0: 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 1.test_bool ty
09c0: 70 65 73 32 2d 31 2e 31 30 20 7b 74 31 3d 27 35  pes2-1.10 {t1='5
09d0: 30 30 27 7d 20 7b 27 35 30 30 27 20 3d 20 74 31  00'} {'500' = t1
09e0: 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 1.test_bool ty
09f0: 70 65 73 32 2d 31 2e 31 31 20 7b 74 31 3d 27 35  pes2-1.11 {t1='5
0a00: 30 30 27 7d 20 7b 35 30 30 2e 30 20 3d 20 74 31  00'} {500.0 = t1
0a10: 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 0.test_bool ty
0a20: 70 65 73 32 2d 31 2e 31 32 20 7b 74 31 3d 27 35  pes2-1.12 {t1='5
0a30: 30 30 27 7d 20 7b 27 35 30 30 2e 30 27 20 3d 20  00'} {'500.0' = 
0a40: 74 31 7d 20 30 0a 0a 23 20 43 6f 6d 70 61 72 65  t1} 0..# Compare
0a50: 20 6c 69 74 65 72 61 6c 73 20 61 67 61 69 6e 73   literals agains
0a60: 74 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  t a column with 
0a70: 4e 55 4d 45 52 49 43 20 61 66 66 69 6e 69 74 79  NUMERIC affinity
0a80: 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73  .test_bool types
0a90: 32 2d 31 2e 31 33 20 7b 6e 31 3d 35 30 30 7d 20  2-1.13 {n1=500} 
0aa0: 7b 35 30 30 20 3d 20 6e 31 7d 20 31 0a 74 65 73  {500 = n1} 1.tes
0ab0: 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e  t_bool types2-1.
0ac0: 31 34 20 7b 6e 31 3d 35 30 30 7d 20 7b 27 35 30  14 {n1=500} {'50
0ad0: 30 27 20 3d 20 6e 31 7d 20 31 0a 74 65 73 74 5f  0' = n1} 1.test_
0ae0: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e 31 35  bool types2-1.15
0af0: 20 7b 6e 31 3d 35 30 30 7d 20 7b 35 30 30 2e 30   {n1=500} {500.0
0b00: 20 3d 20 6e 31 7d 20 31 0a 74 65 73 74 5f 62 6f   = n1} 1.test_bo
0b10: 6f 6c 20 74 79 70 65 73 32 2d 31 2e 31 36 20 7b  ol types2-1.16 {
0b20: 6e 31 3d 35 30 30 7d 20 7b 27 35 30 30 2e 30 27  n1=500} {'500.0'
0b30: 20 3d 20 6e 31 7d 20 31 0a 74 65 73 74 5f 62 6f   = n1} 1.test_bo
0b40: 6f 6c 20 74 79 70 65 73 32 2d 31 2e 31 37 20 7b  ol types2-1.17 {
0b50: 6e 31 3d 27 35 30 30 27 7d 20 7b 35 30 30 20 3d  n1='500'} {500 =
0b60: 20 6e 31 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c   n1} 1.test_bool
0b70: 20 74 79 70 65 73 32 2d 31 2e 31 38 20 7b 6e 31   types2-1.18 {n1
0b80: 3d 27 35 30 30 27 7d 20 7b 27 35 30 30 27 20 3d  ='500'} {'500' =
0b90: 20 6e 31 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c   n1} 1.test_bool
0ba0: 20 74 79 70 65 73 32 2d 31 2e 31 39 20 7b 6e 31   types2-1.19 {n1
0bb0: 3d 27 35 30 30 27 7d 20 7b 35 30 30 2e 30 20 3d  ='500'} {500.0 =
0bc0: 20 6e 31 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c   n1} 1.test_bool
0bd0: 20 74 79 70 65 73 32 2d 31 2e 32 30 20 7b 6e 31   types2-1.20 {n1
0be0: 3d 27 35 30 30 27 7d 20 7b 27 35 30 30 2e 30 27  ='500'} {'500.0'
0bf0: 20 3d 20 6e 31 7d 20 31 0a 0a 23 20 43 6f 6d 70   = n1} 1..# Comp
0c00: 61 72 65 20 6c 69 74 65 72 61 6c 73 20 61 67 61  are literals aga
0c10: 69 6e 73 74 20 61 20 63 6f 6c 75 6d 6e 20 77 69  inst a column wi
0c20: 74 68 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  th affinity NONE
0c30: 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73  .test_bool types
0c40: 32 2d 31 2e 32 31 20 7b 6f 31 3d 35 30 30 7d 20  2-1.21 {o1=500} 
0c50: 7b 35 30 30 20 3d 20 6f 31 7d 20 31 0a 74 65 73  {500 = o1} 1.tes
0c60: 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e  t_bool types2-1.
0c70: 32 32 20 7b 6f 31 3d 35 30 30 7d 20 7b 27 35 30  22 {o1=500} {'50
0c80: 30 27 20 3d 20 6f 31 7d 20 30 0a 74 65 73 74 5f  0' = o1} 0.test_
0c90: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 31 2e 32 33  bool types2-1.23
0ca0: 20 7b 6f 31 3d 35 30 30 7d 20 7b 35 30 30 2e 30   {o1=500} {500.0
0cb0: 20 3d 20 6f 31 7d 20 31 0a 74 65 73 74 5f 62 6f   = o1} 1.test_bo
0cc0: 6f 6c 20 74 79 70 65 73 32 2d 31 2e 32 34 20 7b  ol types2-1.24 {
0cd0: 6f 31 3d 35 30 30 7d 20 7b 27 35 30 30 2e 30 27  o1=500} {'500.0'
0ce0: 20 3d 20 6f 31 7d 20 30 0a 74 65 73 74 5f 62 6f   = o1} 0.test_bo
0cf0: 6f 6c 20 74 79 70 65 73 32 2d 31 2e 32 35 20 7b  ol types2-1.25 {
0d00: 6f 31 3d 27 35 30 30 27 7d 20 7b 35 30 30 20 3d  o1='500'} {500 =
0d10: 20 6f 31 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c   o1} 0.test_bool
0d20: 20 74 79 70 65 73 32 2d 31 2e 32 36 20 7b 6f 31   types2-1.26 {o1
0d30: 3d 27 35 30 30 27 7d 20 7b 27 35 30 30 27 20 3d  ='500'} {'500' =
0d40: 20 6f 31 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c   o1} 1.test_bool
0d50: 20 74 79 70 65 73 32 2d 31 2e 32 37 20 7b 6f 31   types2-1.27 {o1
0d60: 3d 27 35 30 30 27 7d 20 7b 35 30 30 2e 30 20 3d  ='500'} {500.0 =
0d70: 20 6f 31 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c   o1} 0.test_bool
0d80: 20 74 79 70 65 73 32 2d 31 2e 32 38 20 7b 6f 31   types2-1.28 {o1
0d90: 3d 27 35 30 30 27 7d 20 7b 27 35 30 30 2e 30 27  ='500'} {'500.0'
0da0: 20 3d 20 6f 31 7d 20 30 0a 0a 73 65 74 20 76 61   = o1} 0..set va
0db0: 6c 73 20 5b 6c 69 73 74 20 31 30 20 31 30 2e 30  ls [list 10 10.0
0dc0: 20 27 31 30 27 20 27 31 30 2e 30 27 20 32 30 20   '10' '10.0' 20 
0dd0: 32 30 2e 30 20 27 32 30 27 20 27 32 30 2e 30 27  20.0 '20' '20.0'
0de0: 20 33 30 20 33 30 2e 30 20 27 33 30 27 20 27 33   30 30.0 '30' '3
0df0: 30 2e 30 27 5d 0a 23 20 20 20 20 20 20 20 20 20  0.0'].#         
0e00: 20 20 20 20 20 31 20 20 32 20 20 20 20 33 20 20       1  2    3  
0e10: 20 20 34 20 20 20 20 20 20 35 20 20 36 20 20 20    4      5  6   
0e20: 20 37 20 20 20 20 38 20 20 20 20 20 20 39 20 20   7    8      9  
0e30: 31 30 20 20 20 31 31 20 20 20 31 32 0a 0a 65 78  10   11   12..ex
0e40: 65 63 73 71 6c 20 7b 0a 20 20 43 52 45 41 54 45  ecsql {.  CREATE
0e50: 20 54 41 42 4c 45 20 74 32 28 69 20 49 4e 54 45   TABLE t2(i INTE
0e60: 47 45 52 2c 20 6e 20 4e 55 4d 45 52 49 43 2c 20  GER, n NUMERIC, 
0e70: 74 20 54 45 58 54 2c 20 6f 29 3b 0a 20 20 43 52  t TEXT, o);.  CR
0e80: 45 41 54 45 20 49 4e 44 45 58 20 74 32 69 31 20  EATE INDEX t2i1 
0e90: 4f 4e 20 74 32 28 69 29 3b 0a 20 20 43 52 45 41  ON t2(i);.  CREA
0ea0: 54 45 20 49 4e 44 45 58 20 74 32 69 32 20 4f 4e  TE INDEX t2i2 ON
0eb0: 20 74 32 28 6e 29 3b 0a 20 20 43 52 45 41 54 45   t2(n);.  CREATE
0ec0: 20 49 4e 44 45 58 20 74 32 69 33 20 4f 4e 20 74   INDEX t2i3 ON t
0ed0: 32 28 74 29 3b 0a 20 20 43 52 45 41 54 45 20 49  2(t);.  CREATE I
0ee0: 4e 44 45 58 20 74 32 69 34 20 4f 4e 20 74 32 28  NDEX t2i4 ON t2(
0ef0: 6f 29 3b 0a 7d 0a 66 6f 72 65 61 63 68 20 76 20  o);.}.foreach v 
0f00: 24 76 61 6c 73 20 7b 0a 20 20 65 78 65 63 73 71  $vals {.  execsq
0f10: 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l "INSERT INTO t
0f20: 32 20 56 41 4c 55 45 53 28 24 76 2c 20 24 76 2c  2 VALUES($v, $v,
0f30: 20 24 76 2c 20 24 76 29 3b 22 0a 7d 0a 0a 70 72   $v, $v);".}..pr
0f40: 6f 63 20 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  oc test_boolset 
0f50: 7b 74 65 73 74 6e 61 6d 65 20 77 68 65 72 65 20  {testname where 
0f60: 73 65 74 7d 20 7b 0a 20 20 73 65 74 20 3a 3a 74  set} {.  set ::t
0f70: 62 5f 73 71 6c 20 22 53 45 4c 45 43 54 20 72 6f  b_sql "SELECT ro
0f80: 77 69 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52  wid FROM t2 WHER
0f90: 45 20 24 77 68 65 72 65 22 0a 20 20 64 6f 5f 74  E $where".  do_t
0fa0: 65 73 74 20 24 74 65 73 74 6e 61 6d 65 20 7b 0a  est $testname {.
0fb0: 20 20 20 20 6c 73 6f 72 74 20 2d 69 6e 74 65 67      lsort -integ
0fc0: 65 72 20 5b 65 78 65 63 73 71 6c 20 24 3a 3a 74  er [execsql $::t
0fd0: 62 5f 73 71 6c 5d 0a 20 20 7d 20 24 73 65 74 0a  b_sql].  } $set.
0fe0: 7d 0a 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  }..test_boolset 
0ff0: 74 79 70 65 73 32 2d 32 2e 31 20 7b 69 20 3d 20  types2-2.1 {i = 
1000: 31 30 7d 20 7b 31 20 32 20 33 20 34 7d 0a 74 65  10} {1 2 3 4}.te
1010: 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73  st_boolset types
1020: 32 2d 32 2e 32 20 7b 69 20 3d 20 31 30 2e 30 7d  2-2.2 {i = 10.0}
1030: 20 7b 31 20 32 20 33 20 34 7d 0a 74 65 73 74 5f   {1 2 3 4}.test_
1040: 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 32  boolset types2-2
1050: 2e 33 20 7b 69 20 3d 20 27 31 30 27 7d 20 7b 31  .3 {i = '10'} {1
1060: 20 32 20 33 20 34 7d 0a 74 65 73 74 5f 62 6f 6f   2 3 4}.test_boo
1070: 6c 73 65 74 20 74 79 70 65 73 32 2d 32 2e 34 20  lset types2-2.4 
1080: 7b 69 20 3d 20 27 31 30 2e 30 27 7d 20 7b 31 20  {i = '10.0'} {1 
1090: 32 20 33 20 34 7d 0a 0a 74 65 73 74 5f 62 6f 6f  2 3 4}..test_boo
10a0: 6c 73 65 74 20 74 79 70 65 73 32 2d 32 2e 35 20  lset types2-2.5 
10b0: 7b 6e 20 3d 20 32 30 7d 20 7b 35 20 36 20 37 20  {n = 20} {5 6 7 
10c0: 38 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  8}.test_boolset 
10d0: 74 79 70 65 73 32 2d 32 2e 36 20 7b 6e 20 3d 20  types2-2.6 {n = 
10e0: 32 30 2e 30 7d 20 7b 35 20 36 20 37 20 38 7d 0a  20.0} {5 6 7 8}.
10f0: 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70  test_boolset typ
1100: 65 73 32 2d 32 2e 37 20 7b 6e 20 3d 20 27 32 30  es2-2.7 {n = '20
1110: 27 7d 20 7b 35 20 36 20 37 20 38 7d 0a 74 65 73  '} {5 6 7 8}.tes
1120: 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32  t_boolset types2
1130: 2d 32 2e 38 20 7b 6e 20 3d 20 27 32 30 2e 30 27  -2.8 {n = '20.0'
1140: 7d 20 7b 35 20 36 20 37 20 38 7d 0a 0a 74 65 73  } {5 6 7 8}..tes
1150: 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32  t_boolset types2
1160: 2d 32 2e 39 20 7b 74 20 3d 20 32 30 7d 20 7b 35  -2.9 {t = 20} {5
1170: 20 37 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74   7}.test_boolset
1180: 20 74 79 70 65 73 32 2d 32 2e 31 30 20 7b 74 20   types2-2.10 {t 
1190: 3d 20 32 30 2e 30 7d 20 7b 36 20 38 7d 0a 74 65  = 20.0} {6 8}.te
11a0: 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73  st_boolset types
11b0: 32 2d 32 2e 31 31 20 7b 74 20 3d 20 27 32 30 27  2-2.11 {t = '20'
11c0: 7d 20 7b 35 20 37 7d 0a 74 65 73 74 5f 62 6f 6f  } {5 7}.test_boo
11d0: 6c 73 65 74 20 74 79 70 65 73 32 2d 32 2e 31 32  lset types2-2.12
11e0: 20 7b 74 20 3d 20 27 32 30 2e 30 27 7d 20 7b 36   {t = '20.0'} {6
11f0: 20 38 7d 0a 0a 74 65 73 74 5f 62 6f 6f 6c 73 65   8}..test_boolse
1200: 74 20 74 79 70 65 73 32 2d 32 2e 31 30 20 7b 6f  t types2-2.10 {o
1210: 20 3d 20 33 30 7d 20 7b 39 20 31 30 7d 0a 74 65   = 30} {9 10}.te
1220: 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73  st_boolset types
1230: 32 2d 32 2e 31 31 20 7b 6f 20 3d 20 33 30 2e 30  2-2.11 {o = 30.0
1240: 7d 20 7b 39 20 31 30 7d 0a 74 65 73 74 5f 62 6f  } {9 10}.test_bo
1250: 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 32 2e 31  olset types2-2.1
1260: 32 20 7b 6f 20 3d 20 27 33 30 27 7d 20 31 31 0a  2 {o = '30'} 11.
1270: 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70  test_boolset typ
1280: 65 73 32 2d 32 2e 31 33 20 7b 6f 20 3d 20 27 33  es2-2.13 {o = '3
1290: 30 2e 30 27 7d 20 31 32 0a 0a 74 65 73 74 5f 62  0.0'} 12..test_b
12a0: 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 33 2e  oolset types2-3.
12b0: 31 20 7b 69 20 3c 20 32 30 7d 20 7b 31 20 32 20  1 {i < 20} {1 2 
12c0: 33 20 34 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65  3 4}.test_boolse
12d0: 74 20 74 79 70 65 73 32 2d 33 2e 32 20 7b 69 20  t types2-3.2 {i 
12e0: 3c 20 32 30 2e 30 7d 20 7b 31 20 32 20 33 20 34  < 20.0} {1 2 3 4
12f0: 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74  }.test_boolset t
1300: 79 70 65 73 32 2d 33 2e 33 20 7b 69 20 3c 20 27  ypes2-3.3 {i < '
1310: 32 30 27 7d 20 7b 31 20 32 20 33 20 34 7d 0a 74  20'} {1 2 3 4}.t
1320: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
1330: 73 32 2d 33 2e 34 20 7b 69 20 3c 20 27 32 30 2e  s2-3.4 {i < '20.
1340: 30 27 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 74  0'} {1 2 3 4}..t
1350: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
1360: 73 32 2d 33 2e 31 20 7b 6e 20 3c 20 32 30 7d 20  s2-3.1 {n < 20} 
1370: 7b 31 20 32 20 33 20 34 7d 0a 74 65 73 74 5f 62  {1 2 3 4}.test_b
1380: 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 33 2e  oolset types2-3.
1390: 32 20 7b 6e 20 3c 20 32 30 2e 30 7d 20 7b 31 20  2 {n < 20.0} {1 
13a0: 32 20 33 20 34 7d 0a 74 65 73 74 5f 62 6f 6f 6c  2 3 4}.test_bool
13b0: 73 65 74 20 74 79 70 65 73 32 2d 33 2e 33 20 7b  set types2-3.3 {
13c0: 6e 20 3c 20 27 32 30 27 7d 20 7b 31 20 32 20 33  n < '20'} {1 2 3
13d0: 20 34 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74   4}.test_boolset
13e0: 20 74 79 70 65 73 32 2d 33 2e 34 20 7b 6e 20 3c   types2-3.4 {n <
13f0: 20 27 32 30 2e 30 27 7d 20 7b 31 20 32 20 33 20   '20.0'} {1 2 3 
1400: 34 7d 0a 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74  4}..test_boolset
1410: 20 74 79 70 65 73 32 2d 33 2e 31 20 7b 74 20 3c   types2-3.1 {t <
1420: 20 32 30 7d 20 7b 31 20 32 20 33 20 34 7d 0a 74   20} {1 2 3 4}.t
1430: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
1440: 73 32 2d 33 2e 32 20 7b 74 20 3c 20 32 30 2e 30  s2-3.2 {t < 20.0
1450: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 37 7d 0a  } {1 2 3 4 5 7}.
1460: 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70  test_boolset typ
1470: 65 73 32 2d 33 2e 33 20 7b 74 20 3c 20 27 32 30  es2-3.3 {t < '20
1480: 27 7d 20 7b 31 20 32 20 33 20 34 7d 0a 74 65 73  '} {1 2 3 4}.tes
1490: 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32  t_boolset types2
14a0: 2d 33 2e 34 20 7b 74 20 3c 20 27 32 30 2e 30 27  -3.4 {t < '20.0'
14b0: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 37 7d 0a  } {1 2 3 4 5 7}.
14c0: 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79  .test_boolset ty
14d0: 70 65 73 32 2d 33 2e 31 20 7b 6f 20 3c 20 32 30  pes2-3.1 {o < 20
14e0: 7d 20 7b 31 20 32 7d 0a 74 65 73 74 5f 62 6f 6f  } {1 2}.test_boo
14f0: 6c 73 65 74 20 74 79 70 65 73 32 2d 33 2e 32 20  lset types2-3.2 
1500: 7b 6f 20 3c 20 32 30 2e 30 7d 20 7b 31 20 32 7d  {o < 20.0} {1 2}
1510: 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79  .test_boolset ty
1520: 70 65 73 32 2d 33 2e 33 20 7b 6f 20 3c 20 27 32  pes2-3.3 {o < '2
1530: 30 27 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36  0'} {1 2 3 4 5 6
1540: 20 39 20 31 30 7d 0a 74 65 73 74 5f 62 6f 6f 6c   9 10}.test_bool
1550: 73 65 74 20 74 79 70 65 73 32 2d 33 2e 33 20 7b  set types2-3.3 {
1560: 6f 20 3c 20 27 32 30 2e 30 27 7d 20 7b 31 20 32  o < '20.0'} {1 2
1570: 20 33 20 34 20 35 20 36 20 37 20 39 20 31 30 7d   3 4 5 6 7 9 10}
1580: 0a 0a 23 20 43 6f 6d 70 61 72 65 20 6c 69 74 65  ..# Compare lite
1590: 72 61 6c 73 20 61 67 61 69 6e 73 74 20 6c 69 74  rals against lit
15a0: 65 72 61 6c 73 20 28 61 6c 77 61 79 73 20 61 20  erals (always a 
15b0: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
15c0: 6f 6e 29 2e 0a 74 65 73 74 5f 62 6f 6f 6c 20 74  on)..test_bool t
15d0: 79 70 65 73 32 2d 34 2e 31 20 22 22 20 7b 35 30  ypes2-4.1 "" {50
15e0: 30 20 3e 20 36 30 2e 30 7d 20 31 0a 74 65 73 74  0 > 60.0} 1.test
15f0: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 32  _bool types2-4.2
1600: 20 22 22 20 7b 27 35 30 30 27 20 3e 20 36 30 2e   "" {'500' > 60.
1610: 30 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74  0} 1.test_bool t
1620: 79 70 65 73 32 2d 34 2e 33 20 22 22 20 7b 35 30  ypes2-4.3 "" {50
1630: 30 20 3e 20 27 36 30 2e 30 27 7d 20 31 0a 74 65  0 > '60.0'} 1.te
1640: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1650: 2e 34 20 22 22 20 7b 27 35 30 30 27 20 3e 20 27  .4 "" {'500' > '
1660: 36 30 2e 30 27 7d 20 31 0a 0a 23 20 43 6f 6d 70  60.0'} 1..# Comp
1670: 61 72 65 20 6c 69 74 65 72 61 6c 73 20 61 67 61  are literals aga
1680: 69 6e 73 74 20 61 20 63 6f 6c 75 6d 6e 20 77 69  inst a column wi
1690: 74 68 20 54 45 58 54 20 61 66 66 69 6e 69 74 79  th TEXT affinity
16a0: 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73  .test_bool types
16b0: 32 2d 34 2e 35 20 7b 74 31 3d 35 30 30 2e 30 7d  2-4.5 {t1=500.0}
16c0: 20 7b 74 31 20 3e 20 35 30 30 7d 20 31 0a 74 65   {t1 > 500} 1.te
16d0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
16e0: 2e 36 20 7b 74 31 3d 35 30 30 2e 30 7d 20 7b 74  .6 {t1=500.0} {t
16f0: 31 20 3e 20 27 35 30 30 27 20 7d 20 31 0a 74 65  1 > '500' } 1.te
1700: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1710: 2e 37 20 7b 74 31 3d 35 30 30 2e 30 7d 20 7b 74  .7 {t1=500.0} {t
1720: 31 20 3e 20 35 30 30 2e 30 20 7d 20 30 0a 74 65  1 > 500.0 } 0.te
1730: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1740: 2e 38 20 7b 74 31 3d 35 30 30 2e 30 7d 20 7b 74  .8 {t1=500.0} {t
1750: 31 20 3e 20 27 35 30 30 2e 30 27 20 7d 20 30 0a  1 > '500.0' } 0.
1760: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
1770: 2d 34 2e 39 20 7b 74 31 3d 27 35 30 30 2e 30 27  -4.9 {t1='500.0'
1780: 7d 20 7b 74 31 20 3e 20 35 30 30 20 7d 20 31 0a  } {t1 > 500 } 1.
1790: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
17a0: 2d 34 2e 31 30 20 7b 74 31 3d 27 35 30 30 2e 30  -4.10 {t1='500.0
17b0: 27 7d 20 7b 74 31 20 3e 20 27 35 30 30 27 20 7d  '} {t1 > '500' }
17c0: 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70   1.test_bool typ
17d0: 65 73 32 2d 34 2e 31 31 20 7b 74 31 3d 27 35 30  es2-4.11 {t1='50
17e0: 30 2e 30 27 7d 20 7b 74 31 20 3e 20 35 30 30 2e  0.0'} {t1 > 500.
17f0: 30 20 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c 20  0 } 0.test_bool 
1800: 74 79 70 65 73 32 2d 34 2e 31 32 20 7b 74 31 3d  types2-4.12 {t1=
1810: 27 35 30 30 2e 30 27 7d 20 7b 74 31 20 3e 20 27  '500.0'} {t1 > '
1820: 35 30 30 2e 30 27 20 7d 20 30 0a 0a 23 20 43 6f  500.0' } 0..# Co
1830: 6d 70 61 72 65 20 6c 69 74 65 72 61 6c 73 20 61  mpare literals a
1840: 67 61 69 6e 73 74 20 61 20 63 6f 6c 75 6d 6e 20  gainst a column 
1850: 77 69 74 68 20 4e 55 4d 45 52 49 43 20 61 66 66  with NUMERIC aff
1860: 69 6e 69 74 79 0a 74 65 73 74 5f 62 6f 6f 6c 20  inity.test_bool 
1870: 74 79 70 65 73 32 2d 34 2e 31 33 20 7b 6e 31 3d  types2-4.13 {n1=
1880: 34 30 30 7d 20 7b 35 30 30 20 3e 20 6e 31 7d 20  400} {500 > n1} 
1890: 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65  1.test_bool type
18a0: 73 32 2d 34 2e 31 34 20 7b 6e 31 3d 34 30 30 7d  s2-4.14 {n1=400}
18b0: 20 7b 27 35 30 30 27 20 3e 20 6e 31 7d 20 31 0a   {'500' > n1} 1.
18c0: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
18d0: 2d 34 2e 31 35 20 7b 6e 31 3d 34 30 30 7d 20 7b  -4.15 {n1=400} {
18e0: 35 30 30 2e 30 20 3e 20 6e 31 7d 20 31 0a 74 65  500.0 > n1} 1.te
18f0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1900: 2e 31 36 20 7b 6e 31 3d 34 30 30 7d 20 7b 27 35  .16 {n1=400} {'5
1910: 30 30 2e 30 27 20 3e 20 6e 31 7d 20 31 0a 74 65  00.0' > n1} 1.te
1920: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1930: 2e 31 37 20 7b 6e 31 3d 27 34 30 30 27 7d 20 7b  .17 {n1='400'} {
1940: 35 30 30 20 3e 20 6e 31 7d 20 31 0a 74 65 73 74  500 > n1} 1.test
1950: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 31  _bool types2-4.1
1960: 38 20 7b 6e 31 3d 27 34 30 30 27 7d 20 7b 27 35  8 {n1='400'} {'5
1970: 30 30 27 20 3e 20 6e 31 7d 20 31 0a 74 65 73 74  00' > n1} 1.test
1980: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 31  _bool types2-4.1
1990: 39 20 7b 6e 31 3d 27 34 30 30 27 7d 20 7b 35 30  9 {n1='400'} {50
19a0: 30 2e 30 20 3e 20 6e 31 7d 20 31 0a 74 65 73 74  0.0 > n1} 1.test
19b0: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 32  _bool types2-4.2
19c0: 30 20 7b 6e 31 3d 27 34 30 30 27 7d 20 7b 27 35  0 {n1='400'} {'5
19d0: 30 30 2e 30 27 20 3e 20 6e 31 7d 20 31 0a 0a 23  00.0' > n1} 1..#
19e0: 20 43 6f 6d 70 61 72 65 20 6c 69 74 65 72 61 6c   Compare literal
19f0: 73 20 61 67 61 69 6e 73 74 20 61 20 63 6f 6c 75  s against a colu
1a00: 6d 6e 20 77 69 74 68 20 61 66 66 69 6e 69 74 79  mn with affinity
1a10: 20 4e 4f 4e 45 0a 74 65 73 74 5f 62 6f 6f 6c 20   NONE.test_bool 
1a20: 74 79 70 65 73 32 2d 34 2e 32 31 20 7b 6f 31 3d  types2-4.21 {o1=
1a30: 35 30 30 7d 20 7b 35 30 30 20 3e 20 6f 31 7d 20  500} {500 > o1} 
1a40: 30 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65  0.test_bool type
1a50: 73 32 2d 34 2e 32 32 20 7b 6f 31 3d 35 30 30 7d  s2-4.22 {o1=500}
1a60: 20 7b 27 35 30 30 27 20 3e 20 6f 31 7d 20 31 0a   {'500' > o1} 1.
1a70: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
1a80: 2d 34 2e 32 33 20 7b 6f 31 3d 35 30 30 7d 20 7b  -4.23 {o1=500} {
1a90: 35 30 30 2e 30 20 3e 20 6f 31 7d 20 30 0a 74 65  500.0 > o1} 0.te
1aa0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1ab0: 2e 32 34 20 7b 6f 31 3d 35 30 30 7d 20 7b 27 35  .24 {o1=500} {'5
1ac0: 30 30 2e 30 27 20 3e 20 6f 31 7d 20 31 0a 74 65  00.0' > o1} 1.te
1ad0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34  st_bool types2-4
1ae0: 2e 32 35 20 7b 6f 31 3d 27 35 30 30 27 7d 20 7b  .25 {o1='500'} {
1af0: 35 30 30 20 3e 20 6f 31 7d 20 30 0a 74 65 73 74  500 > o1} 0.test
1b00: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 32  _bool types2-4.2
1b10: 36 20 7b 6f 31 3d 27 35 30 30 27 7d 20 7b 27 35  6 {o1='500'} {'5
1b20: 30 30 27 20 3e 20 6f 31 7d 20 30 0a 74 65 73 74  00' > o1} 0.test
1b30: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 32  _bool types2-4.2
1b40: 37 20 7b 6f 31 3d 27 35 30 30 27 7d 20 7b 35 30  7 {o1='500'} {50
1b50: 30 2e 30 20 3e 20 6f 31 7d 20 30 0a 74 65 73 74  0.0 > o1} 0.test
1b60: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 34 2e 32  _bool types2-4.2
1b70: 38 20 7b 6f 31 3d 27 35 30 30 27 7d 20 7b 27 35  8 {o1='500'} {'5
1b80: 30 30 2e 30 27 20 3e 20 6f 31 7d 20 31 0a 0a 23  00.0' > o1} 1..#
1b90: 20 74 79 70 65 73 32 2d 35 2e 2a 20 2d 20 54 68   types2-5.* - Th
1ba0: 65 20 27 49 4e 20 28 78 2c 20 79 2e 2e 2e 2e 29  e 'IN (x, y....)
1bb0: 27 20 6f 70 65 72 61 74 6f 72 20 77 69 74 68 20  ' operator with 
1bc0: 6e 6f 20 69 6e 64 65 78 2e 0a 23 20 0a 23 20 43  no index..# .# C
1bd0: 6f 6d 70 61 72 65 20 6c 69 74 65 72 61 6c 73 20  ompare literals 
1be0: 61 67 61 69 6e 73 74 20 6c 69 74 65 72 61 6c 73  against literals
1bf0: 20 28 61 6c 77 61 79 73 20 61 20 6e 75 6d 65 72   (always a numer
1c00: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 29 2e 0a  ic comparison)..
1c10: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
1c20: 2d 35 2e 31 20 7b 7d 20 7b 28 4e 55 4c 4c 20 49  -5.1 {} {(NULL I
1c30: 4e 20 28 27 31 30 2e 30 27 2c 20 32 30 29 29 20  N ('10.0', 20)) 
1c40: 49 53 4e 55 4c 4c 7d 20 31 0a 74 65 73 74 5f 62  ISNULL} 1.test_b
1c50: 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 32 20 7b  ool types2-5.2 {
1c60: 7d 20 7b 31 30 20 49 4e 20 28 27 31 30 2e 30 27  } {10 IN ('10.0'
1c70: 2c 20 32 30 29 7d 20 31 0a 74 65 73 74 5f 62 6f  , 20)} 1.test_bo
1c80: 6f 6c 20 74 79 70 65 73 32 2d 35 2e 33 20 7b 7d  ol types2-5.3 {}
1c90: 20 7b 27 31 30 27 20 49 4e 20 28 27 31 30 2e 30   {'10' IN ('10.0
1ca0: 27 2c 20 32 30 29 7d 20 31 0a 74 65 73 74 5f 62  ', 20)} 1.test_b
1cb0: 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 34 20 7b  ool types2-5.4 {
1cc0: 7d 20 7b 31 30 20 49 4e 20 28 31 30 2e 30 2c 20  } {10 IN (10.0, 
1cd0: 32 30 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c  20)} 1.test_bool
1ce0: 20 74 79 70 65 73 32 2d 35 2e 35 20 7b 7d 20 7b   types2-5.5 {} {
1cf0: 27 31 30 2e 30 27 20 49 4e 20 28 31 30 2c 20 32  '10.0' IN (10, 2
1d00: 30 29 7d 20 31 0a 0a 23 20 43 6f 6d 70 61 72 65  0)} 1..# Compare
1d10: 20 6c 69 74 65 72 61 6c 73 20 61 67 61 69 6e 73   literals agains
1d20: 74 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  t a column with 
1d30: 54 45 58 54 20 61 66 66 69 6e 69 74 79 0a 74 65  TEXT affinity.te
1d40: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35  st_bool types2-5
1d50: 2e 36 20 7b 74 31 3d 27 31 30 2e 30 27 7d 20 7b  .6 {t1='10.0'} {
1d60: 74 31 20 49 4e 20 28 31 30 2e 30 2c 20 32 30 29  t1 IN (10.0, 20)
1d70: 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 1.test_bool ty
1d80: 70 65 73 32 2d 35 2e 37 20 7b 74 31 3d 27 31 30  pes2-5.7 {t1='10
1d90: 2e 30 27 7d 20 7b 74 31 20 49 4e 20 28 31 30 2c  .0'} {t1 IN (10,
1da0: 20 32 30 29 7d 20 30 0a 74 65 73 74 5f 62 6f 6f   20)} 0.test_boo
1db0: 6c 20 74 79 70 65 73 32 2d 35 2e 38 20 7b 74 31  l types2-5.8 {t1
1dc0: 3d 27 31 30 27 7d 20 7b 74 31 20 49 4e 20 28 31  ='10'} {t1 IN (1
1dd0: 30 2e 30 2c 20 32 30 29 7d 20 30 0a 74 65 73 74  0.0, 20)} 0.test
1de0: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 39  _bool types2-5.9
1df0: 20 7b 74 31 3d 27 31 30 27 7d 20 7b 74 31 20 49   {t1='10'} {t1 I
1e00: 4e 20 28 32 30 2c 20 27 31 30 2e 30 27 29 7d 20  N (20, '10.0')} 
1e10: 30 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65  0.test_bool type
1e20: 73 32 2d 35 2e 31 30 20 7b 74 31 3d 31 30 7d 20  s2-5.10 {t1=10} 
1e30: 7b 74 31 20 49 4e 20 28 32 30 2c 20 27 31 30 27  {t1 IN (20, '10'
1e40: 29 7d 20 31 0a 0a 23 20 43 6f 6d 70 61 72 65 20  )} 1..# Compare 
1e50: 6c 69 74 65 72 61 6c 73 20 61 67 61 69 6e 73 74  literals against
1e60: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 4e   a column with N
1e70: 55 4d 45 52 49 43 20 61 66 66 69 6e 69 74 79 0a  UMERIC affinity.
1e80: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
1e90: 2d 35 2e 31 31 20 7b 6e 31 3d 27 31 30 2e 30 27  -5.11 {n1='10.0'
1ea0: 7d 20 7b 6e 31 20 49 4e 20 28 31 30 2e 30 2c 20  } {n1 IN (10.0, 
1eb0: 32 30 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c  20)} 1.test_bool
1ec0: 20 74 79 70 65 73 32 2d 35 2e 31 32 20 7b 6e 31   types2-5.12 {n1
1ed0: 3d 27 31 30 2e 30 27 7d 20 7b 6e 31 20 49 4e 20  ='10.0'} {n1 IN 
1ee0: 28 31 30 2c 20 32 30 29 7d 20 31 0a 74 65 73 74  (10, 20)} 1.test
1ef0: 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 31  _bool types2-5.1
1f00: 33 20 7b 6e 31 3d 27 31 30 27 7d 20 7b 6e 31 20  3 {n1='10'} {n1 
1f10: 49 4e 20 28 31 30 2e 30 2c 20 32 30 29 7d 20 31  IN (10.0, 20)} 1
1f20: 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73  .test_bool types
1f30: 32 2d 35 2e 31 34 20 7b 6e 31 3d 27 31 30 27 7d  2-5.14 {n1='10'}
1f40: 20 7b 6e 31 20 49 4e 20 28 32 30 2c 20 27 31 30   {n1 IN (20, '10
1f50: 2e 30 27 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f  .0')} 1.test_boo
1f60: 6c 20 74 79 70 65 73 32 2d 35 2e 31 35 20 7b 6e  l types2-5.15 {n
1f70: 31 3d 31 30 7d 20 7b 6e 31 20 49 4e 20 28 32 30  1=10} {n1 IN (20
1f80: 2c 20 27 31 30 27 29 7d 20 31 0a 0a 23 20 43 6f  , '10')} 1..# Co
1f90: 6d 70 61 72 65 20 6c 69 74 65 72 61 6c 73 20 61  mpare literals a
1fa0: 67 61 69 6e 73 74 20 61 20 63 6f 6c 75 6d 6e 20  gainst a column 
1fb0: 77 69 74 68 20 61 66 66 69 6e 69 74 79 20 4e 4f  with affinity NO
1fc0: 4e 45 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70  NE.test_bool typ
1fd0: 65 73 32 2d 35 2e 31 36 20 7b 6f 31 3d 27 31 30  es2-5.16 {o1='10
1fe0: 2e 30 27 7d 20 7b 6f 31 20 49 4e 20 28 31 30 2e  .0'} {o1 IN (10.
1ff0: 30 2c 20 32 30 29 7d 20 30 0a 74 65 73 74 5f 62  0, 20)} 0.test_b
2000: 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 31 37 20  ool types2-5.17 
2010: 7b 6f 31 3d 27 31 30 2e 30 27 7d 20 7b 6f 31 20  {o1='10.0'} {o1 
2020: 49 4e 20 28 31 30 2c 20 32 30 29 7d 20 30 0a 74  IN (10, 20)} 0.t
2030: 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d  est_bool types2-
2040: 35 2e 31 38 20 7b 6f 31 3d 27 31 30 27 7d 20 7b  5.18 {o1='10'} {
2050: 6f 31 20 49 4e 20 28 31 30 2e 30 2c 20 32 30 29  o1 IN (10.0, 20)
2060: 7d 20 30 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 0.test_bool ty
2070: 70 65 73 32 2d 35 2e 31 39 20 7b 6f 31 3d 27 31  pes2-5.19 {o1='1
2080: 30 27 7d 20 7b 6f 31 20 49 4e 20 28 32 30 2c 20  0'} {o1 IN (20, 
2090: 27 31 30 2e 30 27 29 7d 20 30 0a 74 65 73 74 5f  '10.0')} 0.test_
20a0: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 32 30  bool types2-5.20
20b0: 20 7b 6f 31 3d 31 30 7d 20 7b 6f 31 20 49 4e 20   {o1=10} {o1 IN 
20c0: 28 32 30 2c 20 27 31 30 27 29 7d 20 30 0a 74 65  (20, '10')} 0.te
20d0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35  st_bool types2-5
20e0: 2e 32 31 20 7b 6f 31 3d 27 31 30 2e 30 27 7d 20  .21 {o1='10.0'} 
20f0: 7b 6f 31 20 49 4e 20 28 31 30 2c 20 32 30 2c 20  {o1 IN (10, 20, 
2100: 27 31 30 2e 30 27 29 7d 20 31 0a 74 65 73 74 5f  '10.0')} 1.test_
2110: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 35 2e 32 32  bool types2-5.22
2120: 20 7b 6f 31 3d 27 31 30 27 7d 20 7b 6f 31 20 49   {o1='10'} {o1 I
2130: 4e 20 28 31 30 2e 30 2c 20 32 30 2c 20 27 31 30  N (10.0, 20, '10
2140: 27 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20  ')} 1.test_bool 
2150: 74 79 70 65 73 32 2d 35 2e 32 33 20 7b 6f 31 3d  types2-5.23 {o1=
2160: 31 30 7d 20 7b 6e 31 20 49 4e 20 28 32 30 2c 20  10} {n1 IN (20, 
2170: 27 31 30 27 2c 20 31 30 29 7d 20 31 0a 0a 23 20  '10', 10)} 1..# 
2180: 54 65 73 74 73 20 6e 61 6d 65 64 20 74 79 70 65  Tests named type
2190: 73 32 2d 36 2e 2a 20 75 73 65 20 74 68 65 20 73  s2-6.* use the s
21a0: 61 6d 65 20 69 6e 66 72 61 73 74 72 75 63 74 75  ame infrastructu
21b0: 72 65 20 61 73 20 74 68 65 20 74 79 70 65 73 32  re as the types2
21c0: 2d 32 2e 2a 0a 23 20 74 65 73 74 73 2e 20 54 68  -2.*.# tests. Th
21d0: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
21e0: 65 20 76 61 6c 73 20 61 72 72 61 79 20 69 73 20  e vals array is 
21f0: 72 65 70 65 61 74 65 64 20 68 65 72 65 20 66 6f  repeated here fo
2200: 72 20 65 61 73 79 20 0a 23 20 72 65 66 65 72 65  r easy .# refere
2210: 6e 63 65 2e 0a 23 20 0a 23 20 73 65 74 20 76 61  nce..# .# set va
2220: 6c 73 20 5b 6c 69 73 74 20 31 30 20 31 30 2e 30  ls [list 10 10.0
2230: 20 27 31 30 27 20 27 31 30 2e 30 27 20 32 30 20   '10' '10.0' 20 
2240: 32 30 2e 30 20 27 32 30 27 20 27 32 30 2e 30 27  20.0 '20' '20.0'
2250: 20 33 30 20 33 30 2e 30 20 27 33 30 27 20 27 33   30 30.0 '30' '3
2260: 30 2e 30 27 5d 0a 23 20 20 20 20 20 20 20 20 20  0.0'].#         
2270: 20 20 20 20 20 20 20 31 20 20 32 20 20 20 20 33         1  2    3
2280: 20 20 20 20 34 20 20 20 20 20 20 35 20 20 36 20      4      5  6 
2290: 20 20 20 37 20 20 20 20 38 20 20 20 20 20 20 39     7    8      9
22a0: 20 20 31 30 20 20 20 31 31 20 20 20 31 32 0a 0a    10   11   12..
22b0: 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70  test_boolset typ
22c0: 65 73 32 2d 36 2e 31 20 7b 6f 20 49 4e 20 28 27  es2-6.1 {o IN ('
22d0: 31 30 27 2c 20 33 30 29 7d 20 7b 33 20 39 20 31  10', 30)} {3 9 1
22e0: 30 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  0}.test_boolset 
22f0: 74 79 70 65 73 32 2d 36 2e 32 20 7b 6f 20 49 4e  types2-6.2 {o IN
2300: 20 28 32 30 2e 30 2c 20 33 30 2e 30 29 7d 20 7b   (20.0, 30.0)} {
2310: 35 20 36 20 39 20 31 30 7d 0a 74 65 73 74 5f 62  5 6 9 10}.test_b
2320: 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 36 2e  oolset types2-6.
2330: 33 20 7b 74 20 49 4e 20 28 27 31 30 27 2c 20 33  3 {t IN ('10', 3
2340: 30 29 7d 20 7b 31 20 33 20 39 20 31 31 7d 0a 74  0)} {1 3 9 11}.t
2350: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
2360: 73 32 2d 36 2e 34 20 7b 74 20 49 4e 20 28 32 30  s2-6.4 {t IN (20
2370: 2e 30 2c 20 33 30 2e 30 29 7d 20 7b 36 20 38 20  .0, 30.0)} {6 8 
2380: 31 30 20 31 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c  10 12}.test_bool
2390: 73 65 74 20 74 79 70 65 73 32 2d 36 2e 35 20 7b  set types2-6.5 {
23a0: 6e 20 49 4e 20 28 27 31 30 27 2c 20 33 30 29 7d  n IN ('10', 30)}
23b0: 20 7b 31 20 32 20 33 20 34 20 39 20 31 30 20 31   {1 2 3 4 9 10 1
23c0: 31 20 31 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73  1 12}.test_bools
23d0: 65 74 20 74 79 70 65 73 32 2d 36 2e 36 20 7b 6e  et types2-6.6 {n
23e0: 20 49 4e 20 28 32 30 2e 30 2c 20 33 30 2e 30 29   IN (20.0, 30.0)
23f0: 7d 20 7b 35 20 36 20 37 20 38 20 39 20 31 30 20  } {5 6 7 8 9 10 
2400: 31 31 20 31 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c  11 12}.test_bool
2410: 73 65 74 20 74 79 70 65 73 32 2d 36 2e 37 20 7b  set types2-6.7 {
2420: 69 20 49 4e 20 28 27 31 30 27 2c 20 33 30 29 7d  i IN ('10', 30)}
2430: 20 7b 31 20 32 20 33 20 34 20 39 20 31 30 20 31   {1 2 3 4 9 10 1
2440: 31 20 31 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73  1 12}.test_bools
2450: 65 74 20 74 79 70 65 73 32 2d 36 2e 38 20 7b 69  et types2-6.8 {i
2460: 20 49 4e 20 28 32 30 2e 30 2c 20 33 30 2e 30 29   IN (20.0, 30.0)
2470: 7d 20 7b 35 20 36 20 37 20 38 20 39 20 31 30 20  } {5 6 7 8 9 10 
2480: 31 31 20 31 32 7d 0a 0a 23 20 41 6c 73 6f 20 74  11 12}..# Also t
2490: 65 73 74 20 74 68 61 6e 20 49 4e 28 78 2c 20 79  est than IN(x, y
24a0: 2c 20 7a 29 20 77 6f 72 6b 73 20 6f 6e 20 61 20  , z) works on a 
24b0: 72 6f 77 69 64 3a 0a 74 65 73 74 5f 62 6f 6f 6c  rowid:.test_bool
24c0: 73 65 74 20 74 79 70 65 73 32 2d 36 2e 39 20 7b  set types2-6.9 {
24d0: 72 6f 77 69 64 20 49 4e 20 28 31 2c 20 36 2c 20  rowid IN (1, 6, 
24e0: 31 30 29 7d 20 7b 31 20 36 20 31 30 7d 0a 0a 23  10)} {1 6 10}..#
24f0: 20 54 65 73 74 73 20 74 79 70 65 73 32 2d 37 2e   Tests types2-7.
2500: 2a 20 63 6f 6e 63 65 6e 74 72 61 74 65 20 6f 6e  * concentrate on
2510: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20   expressions of 
2520: 74 68 65 20 66 6f 72 6d 20 0a 23 20 22 78 20 49  the form .# "x I
2530: 4e 20 28 53 45 4c 45 43 54 2e 2e 2e 29 22 20 77  N (SELECT...)" w
2540: 69 74 68 20 6e 6f 20 69 6e 64 65 78 2e 0a 65 78  ith no index..ex
2550: 65 63 73 71 6c 20 7b 0a 20 20 43 52 45 41 54 45  ecsql {.  CREATE
2560: 20 54 41 42 4c 45 20 74 33 28 69 20 49 4e 54 45   TABLE t3(i INTE
2570: 47 45 52 2c 20 6e 20 4e 55 4d 45 52 49 43 2c 20  GER, n NUMERIC, 
2580: 74 20 54 45 58 54 2c 20 6f 29 3b 0a 20 20 49 4e  t TEXT, o);.  IN
2590: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
25a0: 55 45 53 28 31 2c 20 31 2c 20 31 2c 20 31 29 3b  UES(1, 1, 1, 1);
25b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
25c0: 33 20 56 41 4c 55 45 53 28 32 2c 20 32 2c 20 32  3 VALUES(2, 2, 2
25d0: 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 2);.  INSERT I
25e0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 33 2c  NTO t3 VALUES(3,
25f0: 20 33 2c 20 33 2c 20 33 29 3b 0a 20 20 49 4e 53   3, 3, 3);.  INS
2600: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
2610: 45 53 28 27 31 27 2c 20 27 31 27 2c 20 27 31 27  ES('1', '1', '1'
2620: 2c 20 27 31 27 29 3b 0a 20 20 49 4e 53 45 52 54  , '1');.  INSERT
2630: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
2640: 27 31 2e 30 27 2c 20 27 31 2e 30 27 2c 20 27 31  '1.0', '1.0', '1
2650: 2e 30 27 2c 20 27 31 2e 30 27 29 3b 0a 7d 0a 0a  .0', '1.0');.}..
2660: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
2670: 2d 37 2e 31 20 7b 69 31 3d 31 7d 20 7b 69 31 20  -7.1 {i1=1} {i1 
2680: 49 4e 20 28 53 45 4c 45 43 54 20 69 20 46 52 4f  IN (SELECT i FRO
2690: 4d 20 74 33 29 7d 20 31 0a 74 65 73 74 5f 62 6f  M t3)} 1.test_bo
26a0: 6f 6c 20 74 79 70 65 73 32 2d 37 2e 32 20 7b 69  ol types2-7.2 {i
26b0: 31 3d 27 32 2e 30 27 7d 20 7b 69 31 20 49 4e 20  1='2.0'} {i1 IN 
26c0: 28 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74  (SELECT i FROM t
26d0: 33 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20  3)} 1.test_bool 
26e0: 74 79 70 65 73 32 2d 37 2e 33 20 7b 69 31 3d 27  types2-7.3 {i1='
26f0: 32 2e 30 27 7d 20 7b 69 31 20 49 4e 20 28 53 45  2.0'} {i1 IN (SE
2700: 4c 45 43 54 20 6e 20 46 52 4f 4d 20 74 33 29 7d  LECT n FROM t3)}
2710: 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70   1.test_bool typ
2720: 65 73 32 2d 37 2e 34 20 7b 69 31 3d 27 32 2e 30  es2-7.4 {i1='2.0
2730: 27 7d 20 7b 69 31 20 49 4e 20 28 53 45 4c 45 43  '} {i1 IN (SELEC
2740: 54 20 74 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a  T t FROM t3)} 1.
2750: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
2760: 2d 37 2e 35 20 7b 69 31 3d 27 32 2e 30 27 7d 20  -7.5 {i1='2.0'} 
2770: 7b 69 31 20 49 4e 20 28 53 45 4c 45 43 54 20 6f  {i1 IN (SELECT o
2780: 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a 0a 74 65   FROM t3)} 1..te
2790: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37  st_bool types2-7
27a0: 2e 36 20 7b 6e 31 3d 31 7d 20 7b 6e 31 20 49 4e  .6 {n1=1} {n1 IN
27b0: 20 28 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d 20   (SELECT n FROM 
27c0: 74 33 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c  t3)} 1.test_bool
27d0: 20 74 79 70 65 73 32 2d 37 2e 37 20 7b 6e 31 3d   types2-7.7 {n1=
27e0: 27 32 2e 30 27 7d 20 7b 6e 31 20 49 4e 20 28 53  '2.0'} {n1 IN (S
27f0: 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 33 29  ELECT i FROM t3)
2800: 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79  } 1.test_bool ty
2810: 70 65 73 32 2d 37 2e 38 20 7b 6e 31 3d 27 32 2e  pes2-7.8 {n1='2.
2820: 30 27 7d 20 7b 6e 31 20 49 4e 20 28 53 45 4c 45  0'} {n1 IN (SELE
2830: 43 54 20 6e 20 46 52 4f 4d 20 74 33 29 7d 20 31  CT n FROM t3)} 1
2840: 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73  .test_bool types
2850: 32 2d 37 2e 39 20 7b 6e 31 3d 27 32 2e 30 27 7d  2-7.9 {n1='2.0'}
2860: 20 7b 6e 31 20 49 4e 20 28 53 45 4c 45 43 54 20   {n1 IN (SELECT 
2870: 74 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a 74 65  t FROM t3)} 1.te
2880: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37  st_bool types2-7
2890: 2e 31 30 20 7b 6e 31 3d 27 32 2e 30 27 7d 20 7b  .10 {n1='2.0'} {
28a0: 6e 31 20 49 4e 20 28 53 45 4c 45 43 54 20 6f 20  n1 IN (SELECT o 
28b0: 46 52 4f 4d 20 74 33 29 7d 20 31 0a 0a 74 65 73  FROM t3)} 1..tes
28c0: 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37 2e  t_bool types2-7.
28d0: 36 20 7b 74 31 3d 31 7d 20 7b 74 31 20 49 4e 20  6 {t1=1} {t1 IN 
28e0: 28 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74  (SELECT t FROM t
28f0: 33 29 7d 20 31 0a 74 65 73 74 5f 62 6f 6f 6c 20  3)} 1.test_bool 
2900: 74 79 70 65 73 32 2d 37 2e 37 20 7b 74 31 3d 27  types2-7.7 {t1='
2910: 32 2e 30 27 7d 20 7b 74 31 20 49 4e 20 28 53 45  2.0'} {t1 IN (SE
2920: 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 33 29 7d  LECT t FROM t3)}
2930: 20 30 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70   0.test_bool typ
2940: 65 73 32 2d 37 2e 38 20 7b 74 31 3d 27 32 2e 30  es2-7.8 {t1='2.0
2950: 27 7d 20 7b 74 31 20 49 4e 20 28 53 45 4c 45 43  '} {t1 IN (SELEC
2960: 54 20 6e 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a  T n FROM t3)} 1.
2970: 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32  test_bool types2
2980: 2d 37 2e 39 20 7b 74 31 3d 27 32 2e 30 27 7d 20  -7.9 {t1='2.0'} 
2990: 7b 74 31 20 49 4e 20 28 53 45 4c 45 43 54 20 69  {t1 IN (SELECT i
29a0: 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a 74 65 73   FROM t3)} 1.tes
29b0: 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37 2e  t_bool types2-7.
29c0: 31 30 20 7b 74 31 3d 27 32 2e 30 27 7d 20 7b 74  10 {t1='2.0'} {t
29d0: 31 20 49 4e 20 28 53 45 4c 45 43 54 20 6f 20 46  1 IN (SELECT o F
29e0: 52 4f 4d 20 74 33 29 7d 20 30 0a 74 65 73 74 5f  ROM t3)} 0.test_
29f0: 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37 2e 31 31  bool types2-7.11
2a00: 20 7b 74 31 3d 27 31 2e 30 27 7d 20 7b 74 31 20   {t1='1.0'} {t1 
2a10: 49 4e 20 28 53 45 4c 45 43 54 20 74 20 46 52 4f  IN (SELECT t FRO
2a20: 4d 20 74 33 29 7d 20 31 0a 74 65 73 74 5f 62 6f  M t3)} 1.test_bo
2a30: 6f 6c 20 74 79 70 65 73 32 2d 37 2e 31 32 20 7b  ol types2-7.12 {
2a40: 74 31 3d 27 31 2e 30 27 7d 20 7b 74 31 20 49 4e  t1='1.0'} {t1 IN
2a50: 20 28 53 45 4c 45 43 54 20 6f 20 46 52 4f 4d 20   (SELECT o FROM 
2a60: 74 33 29 7d 20 31 0a 0a 74 65 73 74 5f 62 6f 6f  t3)} 1..test_boo
2a70: 6c 20 74 79 70 65 73 32 2d 37 2e 31 33 20 7b 6f  l types2-7.13 {o
2a80: 31 3d 32 7d 20 7b 6f 31 20 49 4e 20 28 53 45 4c  1=2} {o1 IN (SEL
2a90: 45 43 54 20 6f 20 46 52 4f 4d 20 74 33 29 7d 20  ECT o FROM t3)} 
2aa0: 31 0a 74 65 73 74 5f 62 6f 6f 6c 20 74 79 70 65  1.test_bool type
2ab0: 73 32 2d 37 2e 31 34 20 7b 6f 31 3d 27 32 27 7d  s2-7.14 {o1='2'}
2ac0: 20 7b 6f 31 20 49 4e 20 28 53 45 4c 45 43 54 20   {o1 IN (SELECT 
2ad0: 6f 20 46 52 4f 4d 20 74 33 29 7d 20 30 0a 74 65  o FROM t3)} 0.te
2ae0: 73 74 5f 62 6f 6f 6c 20 74 79 70 65 73 32 2d 37  st_bool types2-7
2af0: 2e 31 35 20 7b 6f 31 3d 27 32 27 7d 20 7b 6f 31  .15 {o1='2'} {o1
2b00: 20 49 4e 20 28 53 45 4c 45 43 54 20 6f 7c 7c 27   IN (SELECT o||'
2b10: 27 20 46 52 4f 4d 20 74 33 29 7d 20 31 0a 0a 23  ' FROM t3)} 1..#
2b20: 20 73 65 74 20 76 61 6c 73 20 5b 6c 69 73 74 20   set vals [list 
2b30: 31 30 20 31 30 2e 30 20 27 31 30 27 20 27 31 30  10 10.0 '10' '10
2b40: 2e 30 27 20 32 30 20 32 30 2e 30 20 27 32 30 27  .0' 20 20.0 '20'
2b50: 20 27 32 30 2e 30 27 20 33 30 20 33 30 2e 30 20   '20.0' 30 30.0 
2b60: 27 33 30 27 20 27 33 30 2e 30 27 5d 0a 23 20 20  '30' '30.0'].#  
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
2b80: 20 32 20 20 20 20 33 20 20 20 20 34 20 20 20 20   2    3    4    
2b90: 20 20 35 20 20 36 20 20 20 20 37 20 20 20 20 38    5  6    7    8
2ba0: 20 20 20 20 20 20 39 20 20 31 30 20 20 20 31 31        9  10   11
2bb0: 20 20 20 31 32 0a 65 78 65 63 73 71 6c 20 7b 0a     12.execsql {.
2bc0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2bd0: 34 28 69 20 49 4e 54 45 47 45 52 2c 20 6e 20 4e  4(i INTEGER, n N
2be0: 55 4d 45 52 49 43 2c 20 74 20 54 45 58 54 2c 20  UMERIC, t TEXT, 
2bf0: 6f 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  o);.  INSERT INT
2c00: 4f 20 74 34 20 56 41 4c 55 45 53 28 31 30 2c 20  O t4 VALUES(10, 
2c10: 32 30 2c 20 32 30 2c 20 33 30 29 3b 0a 7d 0a 74  20, 20, 30);.}.t
2c20: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
2c30: 73 32 2d 38 2e 31 20 7b 69 20 49 4e 20 28 53 45  s2-8.1 {i IN (SE
2c40: 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 34 29 7d  LECT i FROM t4)}
2c50: 20 7b 31 20 32 20 33 20 34 7d 0a 74 65 73 74 5f   {1 2 3 4}.test_
2c60: 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 38  boolset types2-8
2c70: 2e 32 20 7b 6e 20 49 4e 20 28 53 45 4c 45 43 54  .2 {n IN (SELECT
2c80: 20 69 20 46 52 4f 4d 20 74 34 29 7d 20 7b 31 20   i FROM t4)} {1 
2c90: 32 20 33 20 34 7d 0a 74 65 73 74 5f 62 6f 6f 6c  2 3 4}.test_bool
2ca0: 73 65 74 20 74 79 70 65 73 32 2d 38 2e 33 20 7b  set types2-8.3 {
2cb0: 74 20 49 4e 20 28 53 45 4c 45 43 54 20 69 20 46  t IN (SELECT i F
2cc0: 52 4f 4d 20 74 34 29 7d 20 7b 31 20 32 20 33 20  ROM t4)} {1 2 3 
2cd0: 34 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  4}.test_boolset 
2ce0: 74 79 70 65 73 32 2d 38 2e 34 20 7b 6f 20 49 4e  types2-8.4 {o IN
2cf0: 20 28 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20   (SELECT i FROM 
2d00: 74 34 29 7d 20 7b 31 20 32 20 33 20 34 7d 0a 74  t4)} {1 2 3 4}.t
2d10: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
2d20: 73 32 2d 38 2e 35 20 7b 69 20 49 4e 20 28 53 45  s2-8.5 {i IN (SE
2d30: 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 34 29 7d  LECT t FROM t4)}
2d40: 20 7b 35 20 36 20 37 20 38 7d 0a 74 65 73 74 5f   {5 6 7 8}.test_
2d50: 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d 38  boolset types2-8
2d60: 2e 36 20 7b 6e 20 49 4e 20 28 53 45 4c 45 43 54  .6 {n IN (SELECT
2d70: 20 74 20 46 52 4f 4d 20 74 34 29 7d 20 7b 35 20   t FROM t4)} {5 
2d80: 36 20 37 20 38 7d 0a 74 65 73 74 5f 62 6f 6f 6c  6 7 8}.test_bool
2d90: 73 65 74 20 74 79 70 65 73 32 2d 38 2e 37 20 7b  set types2-8.7 {
2da0: 74 20 49 4e 20 28 53 45 4c 45 43 54 20 74 20 46  t IN (SELECT t F
2db0: 52 4f 4d 20 74 34 29 7d 20 7b 35 20 37 7d 0a 74  ROM t4)} {5 7}.t
2dc0: 65 73 74 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65  est_boolset type
2dd0: 73 32 2d 38 2e 38 20 7b 6f 20 49 4e 20 28 53 45  s2-8.8 {o IN (SE
2de0: 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 34 29 7d  LECT t FROM t4)}
2df0: 20 7b 37 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65   {7}.test_boolse
2e00: 74 20 74 79 70 65 73 32 2d 38 2e 39 20 7b 69 20  t types2-8.9 {i 
2e10: 49 4e 20 28 53 45 4c 45 43 54 20 6f 20 46 52 4f  IN (SELECT o FRO
2e20: 4d 20 74 34 29 7d 20 7b 39 20 31 30 20 31 31 20  M t4)} {9 10 11 
2e30: 31 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74  12}.test_boolset
2e40: 20 74 79 70 65 73 32 2d 38 2e 36 20 7b 6e 20 49   types2-8.6 {n I
2e50: 4e 20 28 53 45 4c 45 43 54 20 6f 20 46 52 4f 4d  N (SELECT o FROM
2e60: 20 74 34 29 7d 20 7b 39 20 31 30 20 31 31 20 31   t4)} {9 10 11 1
2e70: 32 7d 0a 74 65 73 74 5f 62 6f 6f 6c 73 65 74 20  2}.test_boolset 
2e80: 74 79 70 65 73 32 2d 38 2e 37 20 7b 74 20 49 4e  types2-8.7 {t IN
2e90: 20 28 53 45 4c 45 43 54 20 6f 20 46 52 4f 4d 20   (SELECT o FROM 
2ea0: 74 34 29 7d 20 7b 39 20 31 31 7d 0a 74 65 73 74  t4)} {9 11}.test
2eb0: 5f 62 6f 6f 6c 73 65 74 20 74 79 70 65 73 32 2d  _boolset types2-
2ec0: 38 2e 38 20 7b 6f 20 49 4e 20 28 53 45 4c 45 43  8.8 {o IN (SELEC
2ed0: 54 20 6f 20 46 52 4f 4d 20 74 34 29 7d 20 7b 39  T o FROM t4)} {9
2ee0: 20 31 30 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73   10}..finish_tes
2ef0: 74 0a 0a 0a 0a 0a 0a 0a 0a                       t........