/ Hex Artifact Content
Login

Artifact 422027884ffb67ebba32bb78487c67cf67643496d19c077b07044bdba071a3f6:


0000: 23 20 32 30 31 38 2d 30 31 2d 30 38 0a 23 0a 23  # 2018-01-08.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 0a 23 20 54 65 73 74 73 20 66 6f 72  **.#.# Tests for
0170: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6e 6f 72   the sqlite3_nor
0180: 6d 61 6c 69 7a 65 28 29 20 65 78 74 65 6e 73 69  malize() extensi
0190: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2e 0a 23 0a 0a  on function..#..
01a0: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
01b0: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
01c0: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
01d0: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74  r/tester.tcl.set
01e0: 20 74 65 73 74 70 72 65 66 69 78 20 6e 6f 72 6d   testprefix norm
01f0: 61 6c 69 7a 65 0a 0a 66 6f 72 65 61 63 68 20 7b  alize..foreach {
0200: 74 6e 75 6d 20 73 71 6c 20 6e 6f 72 6d 7d 20 7b  tnum sql norm} {
0210: 0a 20 20 31 30 30 0a 20 20 7b 53 45 4c 45 43 54  .  100.  {SELECT
0220: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0230: 20 61 20 49 4e 20 28 31 29 20 41 4e 44 20 62 3d   a IN (1) AND b=
0240: 35 31 2e 34 32 7d 0a 20 20 7b 73 65 6c 65 63 74  51.42}.  {select
0250: 2a 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 61  *from t1 where a
0260: 20 69 6e 28 3f 2c 3f 2c 3f 29 61 6e 64 20 62 3d   in(?,?,?)and b=
0270: 3f 3b 7d 0a 0a 20 20 31 31 30 0a 20 20 7b 53 45  ?;}..  110.  {SE
0280: 4c 45 43 54 20 61 2c 20 62 2b 31 35 2c 20 63 20  LECT a, b+15, c 
0290: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 64 20  FROM t1 WHERE d 
02a0: 4e 4f 54 20 49 4e 20 28 53 45 4c 45 43 54 20 78  NOT IN (SELECT x
02b0: 20 46 52 4f 4d 20 74 32 29 3b 7d 0a 20 20 7b 73   FROM t2);}.  {s
02c0: 65 6c 65 63 74 20 61 2c 62 2b 3f 2c 63 20 66 72  elect a,b+?,c fr
02d0: 6f 6d 20 74 31 20 77 68 65 72 65 20 64 20 6e 6f  om t1 where d no
02e0: 74 20 69 6e 28 73 65 6c 65 63 74 20 78 20 66 72  t in(select x fr
02f0: 6f 6d 20 74 32 29 3b 7d 0a 0a 20 20 31 32 30 0a  om t2);}..  120.
0300: 20 20 7b 20 53 45 4c 45 43 54 20 4e 55 4c 4c 2c    { SELECT NULL,
0310: 20 62 20 46 52 4f 4d 20 74 31 20 2d 2d 20 63 6f   b FROM t1 -- co
0320: 6d 6d 65 6e 74 20 74 65 78 74 0a 20 20 20 20 20  mment text.     
0330: 57 48 45 52 45 20 64 20 49 4e 20 28 57 49 54 48  WHERE d IN (WITH
0340: 20 74 28 61 29 20 41 53 20 28 56 41 4c 55 45 53   t(a) AS (VALUES
0350: 28 35 29 29 20 2f 2a 20 43 54 45 20 2a 2f 0a 20  (5)) /* CTE */. 
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 29  SELECT a FROM t)
0380: 0a 20 20 20 20 20 20 20 20 4f 52 20 65 3d 27 68  .        OR e='h
0390: 65 6c 6c 6f 27 3b 0a 20 20 7d 0a 20 20 7b 73 65  ello';.  }.  {se
03a0: 6c 65 63 74 3f 2c 62 20 66 72 6f 6d 20 74 31 20  lect?,b from t1 
03b0: 77 68 65 72 65 20 64 20 69 6e 28 77 69 74 68 20  where d in(with 
03c0: 74 28 61 29 61 73 28 76 61 6c 75 65 73 28 3f 29  t(a)as(values(?)
03d0: 29 73 65 6c 65 63 74 20 61 20 66 72 6f 6d 20 74  )select a from t
03e0: 29 6f 72 20 65 3d 3f 3b 7d 0a 0a 20 20 31 32 31  )or e=?;}..  121
03f0: 0a 20 20 7b 2f 2a 49 6e 69 74 69 61 6c 20 63 6f  .  {/*Initial co
0400: 6d 6d 65 6e 74 2a 2f 0a 20 20 20 2d 2d 20 61 6e  mment*/.   -- an
0410: 6f 74 68 65 72 20 63 6f 6d 6d 65 6e 74 20 6c 69  other comment li
0420: 6e 65 0a 20 20 20 53 45 4c 45 43 54 20 4e 55 4c  ne.   SELECT NUL
0430: 4c 20 20 2f 2a 20 63 6f 6d 6d 65 6e 74 20 2a 2f  L  /* comment */
0440: 20 2c 20 62 20 46 52 4f 4d 20 74 31 20 2d 2d 20   , b FROM t1 -- 
0450: 63 6f 6d 6d 65 6e 74 20 74 65 78 74 0a 20 20 20  comment text.   
0460: 20 20 57 48 45 52 45 20 64 20 49 4e 20 28 57 49    WHERE d IN (WI
0470: 54 48 20 74 28 61 29 20 41 53 20 28 56 41 4c 55  TH t(a) AS (VALU
0480: 45 53 28 35 29 29 20 2f 2a 20 43 54 45 20 2a 2f  ES(5)) /* CTE */
0490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
04a0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
04b0: 74 29 0a 20 20 20 20 20 20 20 20 4f 52 20 65 3d  t).        OR e=
04c0: 27 68 65 6c 6c 6f 27 3b 0a 20 20 7d 0a 20 20 7b  'hello';.  }.  {
04d0: 73 65 6c 65 63 74 3f 2c 62 20 66 72 6f 6d 20 74  select?,b from t
04e0: 31 20 77 68 65 72 65 20 64 20 69 6e 28 77 69 74  1 where d in(wit
04f0: 68 20 74 28 61 29 61 73 28 76 61 6c 75 65 73 28  h t(a)as(values(
0500: 3f 29 29 73 65 6c 65 63 74 20 61 20 66 72 6f 6d  ?))select a from
0510: 20 74 29 6f 72 20 65 3d 3f 3b 7d 0a 0a 20 20 31   t)or e=?;}..  1
0520: 33 30 0a 20 20 7b 2f 2a 20 51 75 65 72 79 20 63  30.  {/* Query c
0530: 6f 6e 74 61 69 6e 69 6e 67 20 70 61 72 61 6d 65  ontaining parame
0540: 74 65 72 73 20 2a 2f 0a 20 20 20 53 45 4c 45 43  ters */.   SELEC
0550: 54 20 78 2c 24 3a 3a 61 62 63 28 31 35 29 2c 79  T x,$::abc(15),y
0560: 2c 40 61 62 63 2c 7a 2c 3f 39 39 2c 77 20 46 52  ,@abc,z,?99,w FR
0570: 4f 4d 20 74 31 20 2f 2a 20 54 72 61 69 6c 69 6e  OM t1 /* Trailin
0580: 67 20 63 6f 6d 6d 65 6e 74 20 2a 2f 7d 0a 20 20  g comment */}.  
0590: 7b 73 65 6c 65 63 74 20 78 2c 3f 2c 79 2c 3f 2c  {select x,?,y,?,
05a0: 7a 2c 3f 2c 77 20 66 72 6f 6d 20 74 31 3b 7d 0a  z,?,w from t1;}.
05b0: 0a 20 20 31 34 30 0a 20 20 7b 2f 2a 20 4c 6f 6e  .  140.  {/* Lon
05c0: 67 20 6c 69 73 74 20 6f 6e 20 74 68 65 20 52 48  g list on the RH
05d0: 53 20 6f 66 20 49 4e 20 2a 2f 0a 20 20 20 53 45  S of IN */.   SE
05e0: 4c 45 43 54 20 31 35 20 49 4e 20 28 31 2c 32 2c  LECT 15 IN (1,2,
05f0: 33 2c 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  3,(SELECT * FROM
0600: 20 74 31 29 2c 27 78 79 7a 27 2c 78 27 61 62 63   t1),'xyz',x'abc
0610: 64 27 2c 32 32 2a 28 78 2b 35 29 2c 6e 75 6c 6c  d',22*(x+5),null
0620: 29 3b 7d 0a 20 20 7b 73 65 6c 65 63 74 3f 69 6e  );}.  {select?in
0630: 28 3f 2c 3f 2c 3f 29 3b 7d 0a 0a 20 20 31 35 30  (?,?,?);}..  150
0640: 0a 20 20 7b 53 45 4c 45 43 54 20 78 27 61 62 63  .  {SELECT x'abc
0650: 27 3b 20 2d 2d 20 69 6c 6c 65 67 61 6c 20 74 6f  '; -- illegal to
0660: 6b 65 6e 7d 0a 20 20 7b 7d 0a 0a 20 20 31 36 30  ken}.  {}..  160
0670: 0a 20 20 7b 53 45 4c 45 43 54 20 61 2c 4e 55 4c  .  {SELECT a,NUL
0680: 4c 2c 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  L,b FROM t1 WHER
0690: 45 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20  E c IS NOT NULL 
06a0: 6f 72 20 44 20 69 73 20 6e 75 6c 6c 20 6f 72 20  or D is null or 
06b0: 65 3d 35 7d 0a 20 20 7b 73 65 6c 65 63 74 20 61  e=5}.  {select a
06c0: 2c 3f 2c 62 20 66 72 6f 6d 20 74 31 20 77 68 65  ,?,b from t1 whe
06d0: 72 65 20 63 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  re c is not null
06e0: 20 6f 72 20 64 20 69 73 20 6e 75 6c 6c 20 6f 72   or d is null or
06f0: 20 65 3d 3f 3b 7d 0a 0a 20 20 31 37 30 0a 20 20   e=?;}..  170.  
0700: 7b 2f 2a 20 49 4e 20 6c 69 73 74 20 65 78 61 63  {/* IN list exac
0710: 74 6c 79 20 35 20 62 79 74 65 73 20 6c 6f 6e 67  tly 5 bytes long
0720: 20 2a 2f 0a 20 20 20 53 45 4c 45 43 54 20 2a 20   */.   SELECT * 
0730: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
0740: 49 4e 20 28 31 2c 32 2c 33 29 3b 7d 0a 20 20 7b  IN (1,2,3);}.  {
0750: 73 65 6c 65 63 74 2a 66 72 6f 6d 20 74 31 20 77  select*from t1 w
0760: 68 65 72 65 20 78 20 69 6e 28 3f 2c 3f 2c 3f 29  here x in(?,?,?)
0770: 3b 7d 0a 20 20 31 38 30 0a 20 20 7b 20 20 20 20  ;}.  180.  {    
0780: 7d 0a 20 20 7b 7d 0a 7d 20 7b 0a 20 20 64 6f 5f  }.  {}.} {.  do_
0790: 74 65 73 74 20 24 74 6e 75 6d 20 5b 6c 69 73 74  test $tnum [list
07a0: 20 73 71 6c 69 74 65 33 5f 6e 6f 72 6d 61 6c 69   sqlite3_normali
07b0: 7a 65 20 24 73 71 6c 5d 20 24 6e 6f 72 6d 0a 7d  ze $sql] $norm.}
07c0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 6e 6f 72 6d  ..ifcapable norm
07d0: 61 6c 69 7a 65 20 7b 0a 64 6f 5f 74 65 73 74 20  alize {.do_test 
07e0: 32 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  200 {.  execsql 
07f0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
0800: 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20 20 7d 0a  LE t1(a,b);.  }.
0810: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 32 30 31  } {}.do_test 201
0820: 20 7b 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73   {.  set STMT [s
0830: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
0840: 33 20 24 44 42 20 5c 0a 20 20 20 20 20 20 22 53  3 $DB \.      "S
0850: 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20  ELECT a, b FROM 
0860: 74 31 20 57 48 45 52 45 20 62 20 3d 20 3f 20 4f  t1 WHERE b = ? O
0870: 52 44 45 52 20 42 59 20 61 3b 22 20 2d 31 20 30  RDER BY a;" -1 0
0880: 20 54 41 49 4c 5d 0a 0a 20 20 73 71 6c 69 74 65   TAIL]..  sqlite
0890: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24 53 54 4d  3_bind_null $STM
08a0: 54 20 31 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  T 1.} {}.do_test
08b0: 20 32 30 32 20 7b 0a 20 20 73 71 6c 69 74 65 33   202 {.  sqlite3
08c0: 5f 6e 6f 72 6d 61 6c 69 7a 65 64 5f 73 71 6c 20  _normalized_sql 
08d0: 24 53 54 4d 54 0a 7d 20 7b 53 45 4c 45 43 54 20  $STMT.} {SELECT 
08e0: 61 2c 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  a,b FROM t1 WHER
08f0: 45 20 62 3d 3f 4f 52 44 45 52 20 42 59 20 61 3b  E b=?ORDER BY a;
0900: 7d 0a 64 6f 5f 74 65 73 74 20 32 30 33 20 7b 0a  }.do_test 203 {.
0910: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
0920: 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49  ze $STMT.} {SQLI
0930: 54 45 5f 4f 4b 7d 0a 0a 64 6f 5f 74 65 73 74 20  TE_OK}..do_test 
0940: 32 31 30 20 7b 0a 20 20 73 65 74 20 53 54 4d 54  210 {.  set STMT
0950: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0960: 65 5f 76 33 20 24 44 42 20 5c 0a 20 20 20 20 20  e_v3 $DB \.     
0970: 20 22 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52   "SELECT a, b FR
0980: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20 3d 20  OM t1 WHERE b = 
0990: 3f 20 4f 52 44 45 52 20 42 59 20 61 3b 22 20 2d  ? ORDER BY a;" -
09a0: 31 20 32 20 54 41 49 4c 5d 0a 0a 20 20 73 71 6c  1 2 TAIL]..  sql
09b0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 24  ite3_bind_null $
09c0: 53 54 4d 54 20 31 0a 7d 20 7b 7d 0a 64 6f 5f 74  STMT 1.} {}.do_t
09d0: 65 73 74 20 32 31 31 20 7b 0a 20 20 73 71 6c 69  est 211 {.  sqli
09e0: 74 65 33 5f 6e 6f 72 6d 61 6c 69 7a 65 64 5f 73  te3_normalized_s
09f0: 71 6c 20 24 53 54 4d 54 0a 7d 20 7b 53 45 4c 45  ql $STMT.} {SELE
0a00: 43 54 20 61 2c 62 20 46 52 4f 4d 20 74 31 20 57  CT a,b FROM t1 W
0a10: 48 45 52 45 20 62 3d 3f 4f 52 44 45 52 20 42 59  HERE b=?ORDER BY
0a20: 20 61 3b 7d 0a 64 6f 5f 74 65 73 74 20 32 31 32   a;}.do_test 212
0a30: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
0a40: 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20 7b 53  alize $STMT.} {S
0a50: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 64 6f 5f 74 65  QLITE_OK}..do_te
0a60: 73 74 20 32 32 30 20 7b 0a 20 20 73 65 74 20 53  st 220 {.  set S
0a70: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
0a80: 70 61 72 65 5f 76 33 20 24 44 42 20 5c 0a 20 20  pare_v3 $DB \.  
0a90: 20 20 20 20 22 53 45 4c 45 43 54 20 61 2c 20 62      "SELECT a, b
0aa0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
0ab0: 20 3d 20 27 61 27 20 4f 52 44 45 52 20 42 59 20   = 'a' ORDER BY 
0ac0: 61 3b 22 20 2d 31 20 32 20 54 41 49 4c 5d 0a 7d  a;" -1 2 TAIL].}
0ad0: 20 7b 2f 5e 5b 30 2d 39 41 2d 46 61 2d 66 5d 2b   {/^[0-9A-Fa-f]+
0ae0: 24 2f 7d 0a 64 6f 5f 74 65 73 74 20 32 32 31 20  $/}.do_test 221 
0af0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6e 6f 72 6d  {.  sqlite3_norm
0b00: 61 6c 69 7a 65 64 5f 73 71 6c 20 24 53 54 4d 54  alized_sql $STMT
0b10: 0a 7d 20 7b 53 45 4c 45 43 54 20 61 2c 62 20 46  .} {SELECT a,b F
0b20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3f  ROM t1 WHERE b=?
0b30: 4f 52 44 45 52 20 42 59 20 61 3b 7d 0a 64 6f 5f  ORDER BY a;}.do_
0b40: 74 65 73 74 20 32 32 32 20 7b 0a 20 20 73 71 6c  test 222 {.  sql
0b50: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53  ite3_finalize $S
0b60: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b  TMT.} {SQLITE_OK
0b70: 7d 0a 0a 64 6f 5f 74 65 73 74 20 32 39 37 20 7b  }..do_test 297 {
0b80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0b90: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
0ba0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
0bb0: 20 32 39 38 20 7b 0a 20 20 65 78 65 63 73 71 6c   298 {.  execsql
0bc0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0bd0: 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 64 2c 65  BLE t1(a,b,c,d,e
0be0: 2c 22 63 6f 6c 20 66 22 2c 77 2c 78 2c 79 2c 7a  ,"col f",w,x,y,z
0bf0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
0c00: 42 4c 45 20 74 32 28 78 2c 22 63 6f 6c 20 79 22  BLE t2(x,"col y"
0c10: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
0c20: 65 73 74 20 32 39 39 20 7b 0a 20 20 73 71 6c 69  est 299 {.  sqli
0c30: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
0c40: 69 6f 6e 20 64 62 0a 7d 20 7b 53 51 4c 49 54 45  ion db.} {SQLITE
0c50: 5f 4f 4b 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74  _OK}..foreach {t
0c60: 6e 75 6d 20 73 71 6c 20 66 6c 61 67 73 20 6e 6f  num sql flags no
0c70: 72 6d 7d 20 7b 0a 20 20 33 30 30 0a 20 20 7b 53  rm} {.  300.  {S
0c80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0c90: 57 48 45 52 45 20 61 20 49 4e 20 28 31 29 20 41  WHERE a IN (1) A
0ca0: 4e 44 20 62 3d 35 31 2e 34 32 7d 0a 20 20 30 78  ND b=51.42}.  0x
0cb0: 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46  2.  {0 {SELECT*F
0cc0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20 49  ROM t1 WHERE a I
0cd0: 4e 28 3f 2c 3f 2c 3f 29 41 4e 44 20 62 3d 3f 3b  N(?,?,?)AND b=?;
0ce0: 7d 7d 0a 0a 20 20 33 31 30 0a 20 20 7b 53 45 4c  }}..  310.  {SEL
0cf0: 45 43 54 20 61 2c 20 62 2b 31 35 2c 20 63 20 46  ECT a, b+15, c F
0d00: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 64 20 4e  ROM t1 WHERE d N
0d10: 4f 54 20 49 4e 20 28 53 45 4c 45 43 54 20 78 20  OT IN (SELECT x 
0d20: 46 52 4f 4d 20 74 32 29 3b 7d 0a 20 20 30 78 32  FROM t2);}.  0x2
0d30: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 20 61 2c  .  {0 {SELECT a,
0d40: 62 2b 3f 2c 63 20 46 52 4f 4d 20 74 31 20 57 48  b+?,c FROM t1 WH
0d50: 45 52 45 20 64 20 4e 4f 54 20 49 4e 28 53 45 4c  ERE d NOT IN(SEL
0d60: 45 43 54 20 78 20 46 52 4f 4d 20 74 32 29 3b 7d  ECT x FROM t2);}
0d70: 7d 0a 0a 20 20 33 32 30 0a 20 20 7b 20 53 45 4c  }..  320.  { SEL
0d80: 45 43 54 20 4e 55 4c 4c 2c 20 62 20 46 52 4f 4d  ECT NULL, b FROM
0d90: 20 74 31 20 2d 2d 20 63 6f 6d 6d 65 6e 74 20 74   t1 -- comment t
0da0: 65 78 74 0a 20 20 20 20 20 57 48 45 52 45 20 64  ext.     WHERE d
0db0: 20 49 4e 20 28 57 49 54 48 20 74 28 61 29 20 41   IN (WITH t(a) A
0dc0: 53 20 28 56 41 4c 55 45 53 28 35 29 29 20 2f 2a  S (VALUES(5)) /*
0dd0: 20 43 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20   CTE */.        
0de0: 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
0df0: 61 20 46 52 4f 4d 20 74 29 0a 20 20 20 20 20 20  a FROM t).      
0e00: 20 20 4f 52 20 65 3d 27 68 65 6c 6c 6f 27 3b 0a    OR e='hello';.
0e10: 20 20 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b    }.  0x2.  {0 {
0e20: 53 45 4c 45 43 54 3f 2c 62 20 46 52 4f 4d 20 74  SELECT?,b FROM t
0e30: 31 20 57 48 45 52 45 20 64 20 49 4e 28 57 49 54  1 WHERE d IN(WIT
0e40: 48 20 74 28 61 29 41 53 28 56 41 4c 55 45 53 28  H t(a)AS(VALUES(
0e50: 3f 29 29 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  ?))SELECT a FROM
0e60: 20 74 29 4f 52 20 65 3d 3f 3b 7d 7d 0a 0a 20 20   t)OR e=?;}}..  
0e70: 33 32 31 0a 20 20 7b 2f 2a 49 6e 69 74 69 61 6c  321.  {/*Initial
0e80: 20 63 6f 6d 6d 65 6e 74 2a 2f 0a 20 20 20 2d 2d   comment*/.   --
0e90: 20 61 6e 6f 74 68 65 72 20 63 6f 6d 6d 65 6e 74   another comment
0ea0: 20 6c 69 6e 65 0a 20 20 20 53 45 4c 45 43 54 20   line.   SELECT 
0eb0: 4e 55 4c 4c 20 20 2f 2a 20 63 6f 6d 6d 65 6e 74  NULL  /* comment
0ec0: 20 2a 2f 20 2c 20 62 20 46 52 4f 4d 20 74 31 20   */ , b FROM t1 
0ed0: 2d 2d 20 63 6f 6d 6d 65 6e 74 20 74 65 78 74 0a  -- comment text.
0ee0: 20 20 20 20 20 57 48 45 52 45 20 64 20 49 4e 20       WHERE d IN 
0ef0: 28 57 49 54 48 20 74 28 61 29 20 41 53 20 28 56  (WITH t(a) AS (V
0f00: 41 4c 55 45 53 28 35 29 29 20 2f 2a 20 43 54 45  ALUES(5)) /* CTE
0f10: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
0f20: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52       SELECT a FR
0f30: 4f 4d 20 74 29 0a 20 20 20 20 20 20 20 20 4f 52  OM t).        OR
0f40: 20 65 3d 27 68 65 6c 6c 6f 27 3b 0a 20 20 7d 0a   e='hello';.  }.
0f50: 20 20 30 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45    0x2.  {0 {SELE
0f60: 43 54 3f 2c 62 20 46 52 4f 4d 20 74 31 20 57 48  CT?,b FROM t1 WH
0f70: 45 52 45 20 64 20 49 4e 28 57 49 54 48 20 74 28  ERE d IN(WITH t(
0f80: 61 29 41 53 28 56 41 4c 55 45 53 28 3f 29 29 53  a)AS(VALUES(?))S
0f90: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 29 4f  ELECT a FROM t)O
0fa0: 52 20 65 3d 3f 3b 7d 7d 0a 0a 20 20 33 33 30 0a  R e=?;}}..  330.
0fb0: 20 20 7b 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74    {/* Query cont
0fc0: 61 69 6e 69 6e 67 20 70 61 72 61 6d 65 74 65 72  aining parameter
0fd0: 73 20 2a 2f 0a 20 20 20 53 45 4c 45 43 54 20 78  s */.   SELECT x
0fe0: 2c 24 3a 3a 61 62 63 28 31 35 29 2c 79 2c 40 61  ,$::abc(15),y,@a
0ff0: 62 63 2c 7a 2c 3f 39 39 2c 77 20 46 52 4f 4d 20  bc,z,?99,w FROM 
1000: 74 31 20 2f 2a 20 54 72 61 69 6c 69 6e 67 20 63  t1 /* Trailing c
1010: 6f 6d 6d 65 6e 74 20 2a 2f 7d 0a 20 20 30 78 32  omment */}.  0x2
1020: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 20 78 2c  .  {0 {SELECT x,
1030: 3f 2c 79 2c 3f 2c 7a 2c 3f 2c 77 20 46 52 4f 4d  ?,y,?,z,?,w FROM
1040: 20 74 31 3b 7d 7d 0a 0a 20 20 33 34 30 0a 20 20   t1;}}..  340.  
1050: 7b 2f 2a 20 4c 6f 6e 67 20 6c 69 73 74 20 6f 6e  {/* Long list on
1060: 20 74 68 65 20 52 48 53 20 6f 66 20 49 4e 20 2a   the RHS of IN *
1070: 2f 0a 20 20 20 53 45 4c 45 43 54 20 31 35 20 49  /.   SELECT 15 I
1080: 4e 20 28 31 2c 32 2c 33 2c 28 53 45 4c 45 43 54  N (1,2,3,(SELECT
1090: 20 2a 20 46 52 4f 4d 20 74 31 29 2c 27 78 79 7a   * FROM t1),'xyz
10a0: 27 2c 78 27 61 62 63 64 27 2c 32 32 2a 28 78 2b  ',x'abcd',22*(x+
10b0: 35 29 2c 6e 75 6c 6c 29 3b 7d 0a 20 20 30 78 32  5),null);}.  0x2
10c0: 0a 20 20 7b 31 20 7b 28 31 29 20 6e 6f 20 73 75  .  {1 {(1) no su
10d0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d 7d 0a 0a  ch column: x}}..
10e0: 20 20 33 35 30 0a 20 20 7b 53 45 4c 45 43 54 20    350.  {SELECT 
10f0: 78 27 61 62 63 27 3b 20 2d 2d 20 69 6c 6c 65 67  x'abc'; -- illeg
1100: 61 6c 20 74 6f 6b 65 6e 7d 0a 20 20 30 78 32 0a  al token}.  0x2.
1110: 20 20 7b 31 20 7b 28 31 29 20 75 6e 72 65 63 6f    {1 {(1) unreco
1120: 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 3a 20 22 78  gnized token: "x
1130: 27 61 62 63 27 22 7d 7d 0a 0a 20 20 33 36 30 0a  'abc'"}}..  360.
1140: 20 20 7b 53 45 4c 45 43 54 20 61 2c 4e 55 4c 4c    {SELECT a,NULL
1150: 2c 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  ,b FROM t1 WHERE
1160: 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 6f   c IS NOT NULL o
1170: 72 20 44 20 69 73 20 6e 75 6c 6c 20 6f 72 20 65  r D is null or e
1180: 3d 35 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b  =5}.  0x2.  {0 {
1190: 53 45 4c 45 43 54 20 61 2c 3f 2c 62 20 46 52 4f  SELECT a,?,b FRO
11a0: 4d 20 74 31 20 57 48 45 52 45 20 63 20 49 53 20  M t1 WHERE c IS 
11b0: 4e 4f 54 20 4e 55 4c 4c 20 4f 52 20 64 20 49 53  NOT NULL OR d IS
11c0: 20 4e 55 4c 4c 20 4f 52 20 65 3d 3f 3b 7d 7d 0a   NULL OR e=?;}}.
11d0: 0a 20 20 33 37 30 0a 20 20 7b 2f 2a 20 49 4e 20  .  370.  {/* IN 
11e0: 6c 69 73 74 20 65 78 61 63 74 6c 79 20 35 20 62  list exactly 5 b
11f0: 79 74 65 73 20 6c 6f 6e 67 20 2a 2f 0a 20 20 20  ytes long */.   
1200: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1210: 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c 32   WHERE x IN (1,2
1220: 2c 33 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30  ,3);}.  0x2.  {0
1230: 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d 20 74 31   {SELECT*FROM t1
1240: 20 57 48 45 52 45 20 78 20 49 4e 28 3f 2c 3f 2c   WHERE x IN(?,?,
1250: 3f 29 3b 7d 7d 0a 0a 20 20 34 30 30 0a 20 20 7b  ?);}}..  400.  {
1260: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
1270: 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c 32   WHERE x IN (1,2
1280: 2c 33 29 20 41 4e 44 20 73 71 6c 69 74 65 5f 76  ,3) AND sqlite_v
1290: 65 72 73 69 6f 6e 28 29 3b 7d 0a 20 20 30 78 32  ersion();}.  0x2
12a0: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 20 61 20  .  {0 {SELECT a 
12b0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
12c0: 49 4e 28 3f 2c 3f 2c 3f 29 41 4e 44 20 73 71 6c  IN(?,?,?)AND sql
12d0: 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 3b 7d 7d  ite_version();}}
12e0: 0a 0a 20 20 34 31 30 0a 20 20 7b 53 45 4c 45 43  ..  410.  {SELEC
12f0: 54 20 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T a FROM t1 WHER
1300: 45 20 78 20 49 4e 20 28 31 2c 32 2c 33 29 20 41  E x IN (1,2,3) A
1310: 4e 44 20 68 65 78 38 28 29 3b 7d 0a 20 20 30 78  ND hex8();}.  0x
1320: 32 0a 20 20 7b 31 20 7b 28 31 29 20 77 72 6f 6e  2.  {1 {(1) wron
1330: 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  g number of argu
1340: 6d 65 6e 74 73 20 74 6f 20 66 75 6e 63 74 69 6f  ments to functio
1350: 6e 20 68 65 78 38 28 29 7d 7d 0a 0a 20 20 34 32  n hex8()}}..  42
1360: 30 0a 20 20 7b 53 45 4c 45 43 54 20 61 20 46 52  0.  {SELECT a FR
1370: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1380: 20 28 31 2c 32 2c 33 29 20 41 4e 44 20 68 65 78   (1,2,3) AND hex
1390: 38 28 27 61 62 63 27 29 3b 7d 0a 20 20 30 78 32  8('abc');}.  0x2
13a0: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 20 61 20  .  {0 {SELECT a 
13b0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
13c0: 49 4e 28 3f 2c 3f 2c 3f 29 41 4e 44 20 68 65 78  IN(?,?,?)AND hex
13d0: 38 28 3f 29 3b 7d 7d 0a 0a 20 20 34 33 30 0a 20  8(?);}}..  430. 
13e0: 20 7b 53 45 4c 45 43 54 20 22 61 22 20 46 52 4f   {SELECT "a" FRO
13f0: 4d 20 74 31 20 57 48 45 52 45 20 22 78 22 20 49  M t1 WHERE "x" I
1400: 4e 20 28 22 31 22 2c 22 32 22 2c 27 33 27 29 3b  N ("1","2",'3');
1410: 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b 53 45  }.  0x2.  {0 {SE
1420: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 20 57  LECT a FROM t1 W
1430: 48 45 52 45 20 78 20 49 4e 28 3f 2c 3f 2c 3f 29  HERE x IN(?,?,?)
1440: 3b 7d 7d 0a 0a 20 20 34 34 30 0a 20 20 7b 53 45  ;}}..  440.  {SE
1450: 4c 45 43 54 20 27 61 27 20 46 52 4f 4d 20 74 31  LECT 'a' FROM t1
1460: 20 57 48 45 52 45 20 27 78 27 3b 7d 0a 20 20 30   WHERE 'x';}.  0
1470: 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 3f  x2.  {0 {SELECT?
1480: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 3f 3b 7d  FROM t1 WHERE?;}
1490: 7d 0a 0a 20 20 34 35 30 0a 20 20 7b 53 45 4c 45  }..  450.  {SELE
14a0: 43 54 20 5b 61 5d 20 46 52 4f 4d 20 74 31 20 57  CT [a] FROM t1 W
14b0: 48 45 52 45 20 5b 78 5d 3b 7d 0a 20 20 30 78 32  HERE [x];}.  0x2
14c0: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 20 61 20  .  {0 {SELECT a 
14d0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3b  FROM t1 WHERE x;
14e0: 7d 7d 0a 0a 20 20 34 36 30 0a 20 20 7b 53 45 4c  }}..  460.  {SEL
14f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1500: 45 52 45 20 78 20 49 4e 20 28 78 29 3b 7d 0a 20  ERE x IN (x);}. 
1510: 20 30 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43   0x2.  {0 {SELEC
1520: 54 2a 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  T*FROM t1 WHERE 
1530: 78 20 49 4e 28 78 29 3b 7d 7d 0a 0a 20 20 34 37  x IN(x);}}..  47
1540: 30 0a 20 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  0.  {SELECT * FR
1550: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1560: 20 28 78 2c 61 29 3b 7d 0a 20 20 30 78 32 0a 20   (x,a);}.  0x2. 
1570: 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d   {0 {SELECT*FROM
1580: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 78   t1 WHERE x IN(x
1590: 2c 61 29 3b 7d 7d 0a 0a 20 20 34 38 30 0a 20 20  ,a);}}..  480.  
15a0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
15b0: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 5b 78  1 WHERE x IN ([x
15c0: 5d 2c 22 61 22 29 3b 7d 0a 20 20 30 78 32 0a 20  ],"a");}.  0x2. 
15d0: 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d   {0 {SELECT*FROM
15e0: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 78   t1 WHERE x IN(x
15f0: 2c 61 29 3b 7d 7d 0a 0a 20 20 35 30 30 0a 20 20  ,a);}}..  500.  
1600: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1610: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 5b 78  1 WHERE x IN ([x
1620: 5d 2c 22 61 22 2c 27 62 27 2c 73 71 6c 69 74 65  ],"a",'b',sqlite
1630: 5f 76 65 72 73 69 6f 6e 28 29 29 3b 7d 0a 20 20  _version());}.  
1640: 30 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54  0x2.  {0 {SELECT
1650: 2a 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78  *FROM t1 WHERE x
1660: 20 49 4e 28 78 2c 61 2c 3f 2c 73 71 6c 69 74 65   IN(x,a,?,sqlite
1670: 5f 76 65 72 73 69 6f 6e 28 29 29 3b 7d 7d 0a 0a  _version());}}..
1680: 20 20 35 32 30 0a 20 20 7b 53 45 4c 45 43 54 20    520.  {SELECT 
1690: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
16a0: 78 20 49 4e 20 28 53 45 4c 45 43 54 20 78 20 46  x IN (SELECT x F
16b0: 52 4f 4d 20 74 31 29 3b 7d 0a 20 20 30 78 32 0a  ROM t1);}.  0x2.
16c0: 20 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f    {0 {SELECT*FRO
16d0: 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28  M t1 WHERE x IN(
16e0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
16f0: 29 3b 7d 7d 0a 0a 20 20 35 34 30 0a 20 20 7b 53  );}}..  540.  {S
1700: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1710: 57 48 45 52 45 20 78 20 49 4e 20 28 28 53 45 4c  WHERE x IN ((SEL
1720: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 29 29 3b  ECT x FROM t1));
1730: 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b 53 45  }.  0x2.  {0 {SE
1740: 4c 45 43 54 2a 46 52 4f 4d 20 74 31 20 57 48 45  LECT*FROM t1 WHE
1750: 52 45 20 78 20 49 4e 28 28 53 45 4c 45 43 54 20  RE x IN((SELECT 
1760: 78 20 46 52 4f 4d 20 74 31 29 29 3b 7d 7d 0a 0a  x FROM t1));}}..
1770: 20 20 35 35 30 0a 20 20 7b 53 45 4c 45 43 54 20    550.  {SELECT 
1780: 61 2c 20 61 2b 31 2c 20 61 7c 7c 27 62 27 2c 20  a, a+1, a||'b', 
1790: 61 2b 22 62 22 20 46 52 4f 4d 20 74 31 3b 7d 0a  a+"b" FROM t1;}.
17a0: 20 20 30 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45    0x2.  {0 {SELE
17b0: 43 54 20 61 2c 61 2b 3f 2c 61 7c 7c 3f 2c 61 2b  CT a,a+?,a||?,a+
17c0: 62 20 46 52 4f 4d 20 74 31 3b 7d 7d 0a 0a 20 20  b FROM t1;}}..  
17d0: 35 37 30 0a 20 20 7b 53 45 4c 45 43 54 20 2a 20  570.  {SELECT * 
17e0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
17f0: 49 4e 20 28 31 29 3b 7d 0a 20 20 30 78 32 0a 20  IN (1);}.  0x2. 
1800: 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d   {0 {SELECT*FROM
1810: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f   t1 WHERE x IN(?
1820: 2c 3f 2c 3f 29 3b 7d 7d 0a 0a 20 20 35 38 30 0a  ,?,?);}}..  580.
1830: 20 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d    {SELECT * FROM
1840: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
1850: 31 2c 32 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b  1,2);}.  0x2.  {
1860: 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d 20 74  0 {SELECT*FROM t
1870: 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f 2c 3f  1 WHERE x IN(?,?
1880: 2c 3f 29 3b 7d 7d 0a 0a 20 20 35 39 30 0a 20 20  ,?);}}..  590.  
1890: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
18a0: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c  1 WHERE x IN (1,
18b0: 32 2c 33 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b  2,3);}.  0x2.  {
18c0: 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d 20 74  0 {SELECT*FROM t
18d0: 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f 2c 3f  1 WHERE x IN(?,?
18e0: 2c 3f 29 3b 7d 7d 0a 0a 20 20 36 30 30 0a 20 20  ,?);}}..  600.  
18f0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1900: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c  1 WHERE x IN (1,
1910: 32 2c 33 2c 34 29 3b 7d 0a 20 20 30 78 32 0a 20  2,3,4);}.  0x2. 
1920: 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52 4f 4d   {0 {SELECT*FROM
1930: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f   t1 WHERE x IN(?
1940: 2c 3f 2c 3f 29 3b 7d 7d 0a 0a 20 20 36 31 30 0a  ,?,?);}}..  610.
1950: 20 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d    {SELECT * FROM
1960: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
1970: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
1980: 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b  );}.  0x2.  {0 {
1990: 53 45 4c 45 43 54 2a 46 52 4f 4d 20 74 31 20 57  SELECT*FROM t1 W
19a0: 48 45 52 45 20 78 20 49 4e 28 53 45 4c 45 43 54  HERE x IN(SELECT
19b0: 20 78 20 46 52 4f 4d 20 74 31 29 3b 7d 7d 0a 0a   x FROM t1);}}..
19c0: 20 20 36 32 30 0a 20 20 7b 53 45 4c 45 43 54 20    620.  {SELECT 
19d0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
19e0: 78 20 49 4e 20 28 53 45 4c 45 43 54 20 78 20 46  x IN (SELECT x F
19f0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49  ROM t1 WHERE x I
1a00: 4e 20 28 31 2c 32 2c 33 29 29 3b 7d 0a 20 20 30  N (1,2,3));}.  0
1a10: 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 2a  x2.  {0 {SELECT*
1a20: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
1a30: 49 4e 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  IN(SELECT x FROM
1a40: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f   t1 WHERE x IN(?
1a50: 2c 3f 2c 3f 29 29 3b 7d 7d 0a 0a 20 20 36 33 30  ,?,?));}}..  630
1a60: 0a 20 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  .  {SELECT * FRO
1a70: 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20  M t1 WHERE x IN 
1a80: 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  (SELECT x FROM t
1a90: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 78 29  1 WHERE x IN (x)
1aa0: 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b  );}.  0x2.  {0 {
1ab0: 53 45 4c 45 43 54 2a 46 52 4f 4d 20 74 31 20 57  SELECT*FROM t1 W
1ac0: 48 45 52 45 20 78 20 49 4e 28 53 45 4c 45 43 54  HERE x IN(SELECT
1ad0: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
1ae0: 20 78 20 49 4e 28 78 29 29 3b 7d 7d 0a 0a 20 20   x IN(x));}}..  
1af0: 36 34 30 0a 20 20 7b 53 45 4c 45 43 54 20 78 20  640.  {SELECT x 
1b00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
1b10: 49 4e 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f  IN (SELECT x FRO
1b20: 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20  M t1 WHERE x IN 
1b30: 28 0a 20 20 20 53 45 4c 45 43 54 20 78 20 46 52  (.   SELECT x FR
1b40: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1b50: 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   (SELECT x FROM 
1b60: 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 0a  t1 WHERE x IN (.
1b70: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
1b80: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
1b90: 78 29 29 29 29 29 3b 7d 0a 20 20 30 78 32 0a 20  x)))));}.  0x2. 
1ba0: 20 7b 30 20 7b 53 45 4c 45 43 54 20 78 20 46 52   {0 {SELECT x FR
1bb0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1bc0: 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  (SELECT x FROM t
1bd0: 31 20 57 48 45 52 45 20 78 20 49 4e 28 53 45 4c  1 WHERE x IN(SEL
1be0: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48  ECT x FROM t1 WH
1bf0: 45 52 45 20 78 20 49 4e 28 53 45 4c 45 43 54 20  ERE x IN(SELECT 
1c00: 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  x FROM t1 WHERE 
1c10: 78 20 49 4e 28 53 45 4c 45 43 54 20 78 20 46 52  x IN(SELECT x FR
1c20: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1c30: 28 78 29 29 29 29 29 3b 7d 7d 0a 0a 20 20 36 35  (x)))));}}..  65
1c40: 30 0a 20 20 7b 53 45 4c 45 43 54 20 78 20 46 52  0.  {SELECT x FR
1c50: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
1c60: 20 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   (SELECT x FROM 
1c70: 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 0a  t1 WHERE x IN (.
1c80: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
1c90: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
1ca0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
1cb0: 20 57 48 45 52 45 20 78 20 49 4e 20 28 0a 20 20   WHERE x IN (.  
1cc0: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74   SELECT x FROM t
1cd0: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 29  1 WHERE x IN (1)
1ce0: 29 29 29 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b  ))));}.  0x2.  {
1cf0: 30 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0 {SELECT x FROM
1d00: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 53   t1 WHERE x IN(S
1d10: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20  ELECT x FROM t1 
1d20: 57 48 45 52 45 20 78 20 49 4e 28 53 45 4c 45 43  WHERE x IN(SELEC
1d30: 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T x FROM t1 WHER
1d40: 45 20 78 20 49 4e 28 53 45 4c 45 43 54 20 78 20  E x IN(SELECT x 
1d50: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
1d60: 49 4e 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  IN(SELECT x FROM
1d70: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 28 3f   t1 WHERE x IN(?
1d80: 2c 3f 2c 3f 29 29 29 29 29 3b 7d 7d 0a 0a 20 20  ,?,?)))));}}..  
1d90: 36 36 30 0a 20 20 7b 53 45 4c 45 43 54 20 78 20  660.  {SELECT x 
1da0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
1db0: 49 4e 20 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c  IN (1) UNION ALL
1dc0: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74   SELECT x FROM t
1dd0: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 29  1 WHERE x IN (1)
1de0: 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b 53  ;}.  0x2.  {0 {S
1df0: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20  ELECT x FROM t1 
1e00: 57 48 45 52 45 20 78 20 49 4e 28 3f 2c 3f 2c 3f  WHERE x IN(?,?,?
1e10: 29 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43  )UNION ALL SELEC
1e20: 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T x FROM t1 WHER
1e30: 45 20 78 20 49 4e 28 3f 2c 3f 2c 3f 29 3b 7d 7d  E x IN(?,?,?);}}
1e40: 0a 0a 20 20 36 37 30 0a 20 20 7b 53 45 4c 45 43  ..  670.  {SELEC
1e50: 54 20 22 63 6f 6c 20 66 22 2c 20 5b 63 6f 6c 20  T "col f", [col 
1e60: 66 5d 20 46 52 4f 4d 20 74 31 3b 7d 0a 20 20 30  f] FROM t1;}.  0
1e70: 78 32 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 22  x2.  {0 {SELECT"
1e80: 63 6f 6c 20 66 22 2c 22 63 6f 6c 20 66 22 46 52  col f","col f"FR
1e90: 4f 4d 20 74 31 3b 7d 7d 0a 0a 20 20 36 38 30 0a  OM t1;}}..  680.
1ea0: 20 20 7b 53 45 4c 45 43 54 20 61 2c 20 22 63 6f    {SELECT a, "co
1eb0: 6c 20 66 22 20 46 52 4f 4d 20 74 31 20 4c 45 46  l f" FROM t1 LEF
1ec0: 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 74 32 20  T OUTER JOIN t2 
1ed0: 4f 4e 20 5b 74 31 5d 2e 5b 63 6f 6c 20 66 5d 20  ON [t1].[col f] 
1ee0: 3d 3d 20 5b 74 32 5d 2e 5b 63 6f 6c 20 79 5d 3b  == [t2].[col y];
1ef0: 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20 7b 53 45  }.  0x2.  {0 {SE
1f00: 4c 45 43 54 20 61 2c 22 63 6f 6c 20 66 22 46 52  LECT a,"col f"FR
1f10: 4f 4d 20 74 31 20 4c 45 46 54 20 4f 55 54 45 52  OM t1 LEFT OUTER
1f20: 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 74 31 2e 22   JOIN t2 ON t1."
1f30: 63 6f 6c 20 66 22 3d 3d 74 32 2e 22 63 6f 6c 20  col f"==t2."col 
1f40: 79 22 3b 7d 7d 0a 0a 20 20 36 39 30 0a 20 20 7b  y";}}..  690.  {
1f50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 20  SELECT * FROM ( 
1f60: 57 49 54 48 20 78 20 41 53 20 28 20 53 45 4c 45  WITH x AS ( SELE
1f70: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1f80: 52 45 20 78 20 49 4e 20 28 20 31 29 29 20 53 45  RE x IN ( 1)) SE
1f90: 4c 45 43 54 20 31 30 29 3b 7d 0a 20 20 30 78 32  LECT 10);}.  0x2
1fa0: 0a 20 20 7b 30 20 7b 53 45 4c 45 43 54 2a 46 52  .  {0 {SELECT*FR
1fb0: 4f 4d 28 57 49 54 48 20 78 20 41 53 28 53 45 4c  OM(WITH x AS(SEL
1fc0: 45 43 54 2a 46 52 4f 4d 20 74 31 20 57 48 45 52  ECT*FROM t1 WHER
1fd0: 45 20 78 20 49 4e 28 3f 2c 3f 2c 3f 29 29 53 45  E x IN(?,?,?))SE
1fe0: 4c 45 43 54 3f 29 3b 7d 7d 0a 0a 20 20 37 30 30  LECT?);}}..  700
1ff0: 0a 20 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  .  {SELECT rowid
2000: 2c 20 6f 69 64 2c 20 5f 72 6f 77 69 64 5f 20 46  , oid, _rowid_ F
2010: 52 4f 4d 20 74 31 3b 7d 0a 20 20 30 78 32 0a 20  ROM t1;}.  0x2. 
2020: 20 7b 30 20 7b 53 45 4c 45 43 54 20 72 6f 77 69   {0 {SELECT rowi
2030: 64 2c 6f 69 64 2c 5f 72 6f 77 69 64 5f 20 46 52  d,oid,_rowid_ FR
2040: 4f 4d 20 74 31 3b 7d 7d 0a 0a 20 20 37 31 30 0a  OM t1;}}..  710.
2050: 20 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d    {SELECT x FROM
2060: 20 74 31 20 57 48 45 52 45 20 78 20 49 53 20 4e   t1 WHERE x IS N
2070: 55 4c 4c 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30  ULL;}.  0x2.  {0
2080: 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   {SELECT x FROM 
2090: 74 31 20 57 48 45 52 45 20 78 20 49 53 20 4e 55  t1 WHERE x IS NU
20a0: 4c 4c 3b 7d 7d 0a 0a 20 20 37 34 30 0a 20 20 7b  LL;}}..  740.  {
20b0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
20c0: 20 57 48 45 52 45 20 78 20 49 53 20 4e 4f 54 20   WHERE x IS NOT 
20d0: 4e 55 4c 4c 3b 7d 0a 20 20 30 78 32 0a 20 20 7b  NULL;}.  0x2.  {
20e0: 30 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0 {SELECT x FROM
20f0: 20 74 31 20 57 48 45 52 45 20 78 20 49 53 20 4e   t1 WHERE x IS N
2100: 4f 54 20 4e 55 4c 4c 3b 7d 7d 0a 0a 20 20 37 35  OT NULL;}}..  75
2110: 30 0a 20 20 7b 53 45 4c 45 43 54 20 78 20 46 52  0.  {SELECT x FR
2120: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 3d 20  OM t1 WHERE x = 
2130: 4e 55 4c 4c 3b 7d 0a 20 20 30 78 32 0a 20 20 7b  NULL;}.  0x2.  {
2140: 30 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0 {SELECT x FROM
2150: 20 74 31 20 57 48 45 52 45 20 78 3d 3f 3b 7d 7d   t1 WHERE x=?;}}
2160: 0a 0a 20 20 37 36 30 0a 20 20 7b 53 45 4c 45 43  ..  760.  {SELEC
2170: 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T x FROM t1 WHER
2180: 45 20 78 20 49 4e 20 28 5b 78 5d 20 49 53 20 4e  E x IN ([x] IS N
2190: 4f 54 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 31  OT NULL, NULL, 1
21a0: 2c 20 27 61 27 2c 20 22 62 22 2c 20 78 27 30 30  , 'a', "b", x'00
21b0: 27 29 3b 7d 0a 20 20 30 78 32 0a 20 20 7b 30 20  ');}.  0x2.  {0 
21c0: 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  {SELECT x FROM t
21d0: 31 20 57 48 45 52 45 20 78 20 49 4e 28 78 20 49  1 WHERE x IN(x I
21e0: 53 20 4e 4f 54 20 4e 55 4c 4c 2c 3f 2c 3f 2c 3f  S NOT NULL,?,?,?
21f0: 2c 62 2c 3f 29 3b 7d 7d 0a 7d 20 7b 0a 20 20 64  ,b,?);}}.} {.  d
2200: 6f 5f 74 65 73 74 20 24 74 6e 75 6d 20 7b 0a 20  o_test $tnum {. 
2210: 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74     set code [cat
2220: 63 68 20 7b 0a 20 20 20 20 20 20 73 65 74 20 53  ch {.      set S
2230: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
2240: 70 61 72 65 5f 76 33 20 24 44 42 20 24 73 71 6c  pare_v3 $DB $sql
2250: 20 2d 31 20 24 66 6c 61 67 73 20 54 41 49 4c 5d   -1 $flags TAIL]
2260: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6e  .      sqlite3_n
2270: 6f 72 6d 61 6c 69 7a 65 64 5f 73 71 6c 20 24 53  ormalized_sql $S
2280: 54 4d 54 0a 20 20 20 20 7d 20 72 65 73 5d 0a 20  TMT.    } res]. 
2290: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
22a0: 73 74 73 20 53 54 4d 54 5d 7d 20 7b 0a 20 20 20  sts STMT]} {.   
22b0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
22c0: 69 7a 65 20 24 53 54 4d 54 3b 20 75 6e 73 65 74  ize $STMT; unset
22d0: 20 53 54 4d 54 0a 20 20 20 20 7d 0a 20 20 20 20   STMT.    }.    
22e0: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 0a  list $code $res.
22f0: 20 20 7d 20 24 6e 6f 72 6d 0a 7d 0a 7d 0a 0a 66    } $norm.}.}..f
2300: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.