/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 31b5f28b2c44273e6695cf36ab2e4133aee7753c:


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 0a 23 0a 23 20 54 68 69 73 20 66  rary..#.# This f
01b0: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  ile implements t
01c0: 65 73 74 73 20 66 6f 72 20 74 68 65 20 73 70 65  ests for the spe
01d0: 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
01e0: 61 73 73 6f 63 69 61 74 65 64 0a 23 20 77 69 74  associated.# wit
01f0: 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
0200: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 23  Y KEY columns..#
0210: 0a 23 20 24 49 64 3a 20 69 6e 74 70 6b 65 79 2e  .# $Id: intpkey.
0220: 74 65 73 74 2c 76 20 31 2e 39 20 32 30 30 32 2f  test,v 1.9 2002/
0230: 30 33 2f 33 31 20 31 38 3a 32 39 3a 30 33 20 64  03/31 18:29:03 d
0240: 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65  rh Exp $..set te
0250: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0260: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0270: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
0280: 65 72 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74 65  er.tcl..# Create
0290: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
02a0: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
02b0: 61 20 64 61 74 61 74 79 70 65 20 6f 74 68 65 72  a datatype other
02c0: 20 74 68 61 6e 0a 23 20 69 6e 74 65 67 65 72 0a   than.# integer.
02d0: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
02e0: 79 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  y-1.0 {.  execsq
02f0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0300: 41 42 4c 45 20 74 31 28 61 20 54 45 58 54 20 50  ABLE t1(a TEXT P
0310: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
0320: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54  );.  }.} {}..# T
0330: 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61  here should be a
0340: 6e 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  n index associat
0350: 65 64 20 77 69 74 68 20 74 68 65 20 70 72 69 6d  ed with the prim
0360: 61 72 79 20 6b 65 79 0a 23 0a 64 6f 5f 74 65 73  ary key.#.do_tes
0370: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 20 7b 0a  t intpkey-1.1 {.
0380: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0390: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
03a0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20   sqlite_master. 
03b0: 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 69     WHERE type='i
03c0: 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e 61  ndex' AND tbl_na
03d0: 6d 65 3d 27 74 31 27 3b 0a 20 20 7d 0a 7d 20 7b  me='t1';.  }.} {
03e0: 7b 28 74 31 20 61 75 74 6f 69 6e 64 65 78 20 31  {(t1 autoindex 1
03f0: 29 7d 7d 0a 0a 23 20 4e 6f 77 20 63 72 65 61 74  )}}..# Now creat
0400: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
0410: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
0420: 79 20 6b 65 79 20 61 6e 64 20 76 65 72 69 66 79  y key and verify
0430: 20 74 68 61 74 0a 23 20 74 68 65 72 65 20 69 73   that.# there is
0440: 20 6e 6f 20 61 73 73 6f 63 69 61 74 65 64 20 69   no associated i
0450: 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ndex..#.do_test 
0460: 69 6e 74 70 6b 65 79 2d 31 2e 32 20 7b 0a 20 20  intpkey-1.2 {.  
0470: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
0480: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20  OP TABLE t1;.   
0490: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
04a0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
04b0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
04c0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
04d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
04e0: 72 0a 20 20 20 20 20 20 57 48 45 52 45 20 74 79  r.      WHERE ty
04f0: 70 65 3d 27 69 6e 64 65 78 27 20 41 4e 44 20 74  pe='index' AND t
0500: 62 6c 5f 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20  bl_name='t1';.  
0510: 7d 0a 7d 20 7b 7d 0a 0a 23 20 49 6e 73 65 72 74  }.} {}..# Insert
0520: 20 73 6f 6d 65 20 72 65 63 6f 72 64 73 20 69 6e   some records in
0530: 74 6f 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  to the new table
0540: 2e 20 20 53 70 65 63 69 66 79 20 74 68 65 20 70  .  Specify the p
0550: 72 69 6d 61 72 79 20 6b 65 79 0a 23 20 61 6e 64  rimary key.# and
0560: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
0570: 20 6b 65 79 20 69 73 20 75 73 65 64 20 61 73 20   key is used as 
0580: 74 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  the record numbe
0590: 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74  r..#.do_test int
05a0: 70 6b 65 79 2d 31 2e 33 20 7b 0a 20 20 65 78 65  pkey-1.3 {.  exe
05b0: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
05c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
05d0: 28 35 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72 6c  (5,'hello','worl
05e0: 64 27 29 3b 0a 20 20 7d 0a 20 20 64 62 20 6c 61  d');.  }.  db la
05f0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 0a  st_insert_rowid.
0600: 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  } {5}.do_test in
0610: 74 70 6b 65 79 2d 31 2e 34 20 7b 0a 20 20 65 78  tpkey-1.4 {.  ex
0620: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0630: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
0640: 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72  }.} {5 hello wor
0650: 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  ld}.do_test intp
0660: 6b 65 79 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63  key-1.5 {.  exec
0670: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0680: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
0690: 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65  1;.  }.} {5 5 he
06a0: 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 0a 23 20 41 74  llo world}..# At
06b0: 74 65 6d 70 74 69 6e 67 20 74 6f 20 69 6e 73 65  tempting to inse
06c0: 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 70  rt a duplicate p
06d0: 72 69 6d 61 72 79 20 6b 65 79 20 73 68 6f 75 6c  rimary key shoul
06e0: 64 20 67 69 76 65 20 61 20 63 6f 6e 73 74 72 61  d give a constra
06f0: 69 6e 74 0a 23 20 66 61 69 6c 75 72 65 2e 0a 23  int.# failure..#
0700: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0710: 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20 72 20 5b  -1.6 {.  set r [
0720: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0730: 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  .     INSERT INT
0740: 4f 20 74 31 20 56 41 4c 55 45 53 28 35 2c 27 73  O t1 VALUES(5,'s
0750: 65 63 6f 6e 64 27 2c 27 65 6e 74 72 79 27 29 3b  econd','entry');
0760: 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  .  }} msg].  lap
0770: 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 31  pend r $msg.} {1
0780: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
0790: 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  led}}.do_test in
07a0: 74 70 6b 65 79 2d 31 2e 37 20 7b 0a 20 20 65 78  tpkey-1.7 {.  ex
07b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
07c0: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
07d0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20   t1;.  }.} {5 5 
07e0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 64 6f 5f  hello world}.do_
07f0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 38  test intpkey-1.8
0800: 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63   {.  set r [catc
0810: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0820: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0830: 20 56 41 4c 55 45 53 28 36 2c 27 73 65 63 6f 6e   VALUES(6,'secon
0840: 64 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d  d','entry');.  }
0850: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0860: 20 72 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d   r $msg.} {0 {}}
0870: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0880: 2d 31 2e 38 2e 31 20 7b 0a 20 20 64 62 20 6c 61  -1.8.1 {.  db la
0890: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 0a  st_insert_rowid.
08a0: 7d 20 7b 36 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  } {6}.do_test in
08b0: 74 70 6b 65 79 2d 31 2e 39 20 7b 0a 20 20 65 78  tpkey-1.9 {.  ex
08c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
08d0: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
08e0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20   t1;.  }.} {5 5 
08f0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 36 20  hello world 6 6 
0900: 73 65 63 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a 23  second entry}..#
0910: 20 41 20 52 4f 57 49 44 20 69 73 20 61 75 74 6f   A ROWID is auto
0920: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
0930: 74 65 64 20 66 6f 72 20 6e 65 77 20 72 65 63 6f  ted for new reco
0940: 72 64 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  rds that do not 
0950: 73 70 65 63 69 66 79 0a 23 20 74 68 65 20 69 6e  specify.# the in
0960: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
0970: 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74  y..#.do_test int
0980: 70 6b 65 79 2d 31 2e 31 30 20 7b 0a 20 20 65 78  pkey-1.10 {.  ex
0990: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
09a0: 52 54 20 49 4e 54 4f 20 74 31 28 62 2c 63 29 20  RT INTO t1(b,c) 
09b0: 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 27 74 77  VALUES('one','tw
09c0: 6f 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  o');.    SELECT 
09d0: 62 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  b FROM t1 ORDER 
09e0: 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 68 65 6c  BY b;.  }.} {hel
09f0: 6c 6f 20 6f 6e 65 20 73 65 63 6f 6e 64 7d 0a 0a  lo one second}..
0a00: 23 20 54 72 79 20 74 6f 20 63 68 61 6e 67 65 20  # Try to change 
0a10: 74 68 65 20 52 4f 57 49 44 20 66 6f 72 20 74 68  the ROWID for th
0a20: 65 20 6e 65 77 20 65 6e 74 72 79 2e 0a 23 0a 64  e new entry..#.d
0a30: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  o_test intpkey-1
0a40: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
0a50: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
0a60: 53 45 54 20 61 3d 34 20 57 48 45 52 45 20 62 3d  SET a=4 WHERE b=
0a70: 27 6f 6e 65 27 3b 0a 20 20 20 20 53 45 4c 45 43  'one';.    SELEC
0a80: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
0a90: 0a 7d 20 7b 34 20 6f 6e 65 20 74 77 6f 20 35 20  .} {4 one two 5 
0aa0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65  hello world 6 se
0ab0: 63 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a 23 20 4d  cond entry}..# M
0ac0: 61 6b 65 20 73 75 72 65 20 53 45 4c 45 43 54 20  ake sure SELECT 
0ad0: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61  statements are a
0ae0: 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 70  ble to use the p
0af0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
0b00: 6e 0a 23 20 61 73 20 61 6e 20 69 6e 64 65 78 2e  n.# as an index.
0b10: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
0b20: 65 79 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65 63  ey-1.12 {.  exec
0b30: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0b40: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0b50: 20 61 3d 3d 34 3b 0a 20 20 7d 0a 7d 20 7b 34 20   a==4;.  }.} {4 
0b60: 6f 6e 65 20 74 77 6f 7d 0a 0a 23 20 54 72 79 20  one two}..# Try 
0b70: 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
0b80: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
0b90: 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  to the primary k
0ba0: 65 79 20 66 69 65 6c 64 2e 20 20 54 68 69 73 0a  ey field.  This.
0bb0: 23 20 73 68 6f 75 6c 64 20 72 65 73 75 6c 74 20  # should result 
0bc0: 69 6e 20 61 20 64 61 74 61 20 74 79 70 65 20 6d  in a data type m
0bd0: 69 73 6d 61 74 63 68 2e 0a 23 0a 64 6f 5f 74 65  ismatch..#.do_te
0be0: 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 33 20  st intpkey-1.13 
0bf0: 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68  {.  set r [catch
0c00: 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   {execsql {.    
0c10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0c20: 41 4c 55 45 53 28 27 78 27 2c 27 79 27 2c 27 7a  ALUES('x','y','z
0c30: 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20  ');.  }} msg].  
0c40: 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d  lappend r $msg.}
0c50: 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69   {1 {datatype mi
0c60: 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74  smatch}}.do_test
0c70: 20 69 6e 74 70 6b 65 79 2d 31 2e 31 34 20 7b 0a   intpkey-1.14 {.
0c80: 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b    set r [catch {
0c90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
0ca0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0cb0: 55 45 53 28 33 2e 34 2c 27 79 27 2c 27 7a 27 29  UES(3.4,'y','z')
0cc0: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
0cd0: 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b  ppend r $msg.} {
0ce0: 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d  1 {datatype mism
0cf0: 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  atch}}.do_test i
0d00: 6e 74 70 6b 65 79 2d 31 2e 31 35 20 7b 0a 20 20  ntpkey-1.15 {.  
0d10: 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78  set r [catch {ex
0d20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
0d30: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0d40: 53 28 2d 33 2c 27 79 27 2c 27 7a 27 29 3b 0a 20  S(-3,'y','z');. 
0d50: 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65   }} msg].  lappe
0d60: 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd r $msg.} {0 {
0d70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  }}.do_test intpk
0d80: 65 79 2d 31 2e 31 36 20 7b 0a 20 20 65 78 65 63  ey-1.16 {.  exec
0d90: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
0da0: 4f 4d 20 74 31 7d 0a 7d 20 7b 2d 33 20 79 20 7a  OM t1}.} {-3 y z
0db0: 20 34 20 6f 6e 65 20 74 77 6f 20 35 20 68 65 6c   4 one two 5 hel
0dc0: 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e  lo world 6 secon
0dd0: 64 20 65 6e 74 72 79 7d 0a 0a 23 23 23 23 20 49  d entry}..#### I
0de0: 4e 44 49 43 45 53 0a 23 20 43 68 65 63 6b 20 74  NDICES.# Check t
0df0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 6e 64 69  o make sure indi
0e00: 63 65 73 20 77 6f 72 6b 20 63 6f 72 72 65 63 74  ces work correct
0e10: 6c 79 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  ly with integer 
0e20: 70 72 69 6d 61 72 79 20 6b 65 79 73 0a 23 0a 64  primary keys.#.d
0e30: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32  o_test intpkey-2
0e40: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0e50: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
0e60: 58 20 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a 20  X i1 ON t1(b);. 
0e70: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0e80: 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 79 27   t1 WHERE b=='y'
0e90: 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d 0a  .  }.} {-3 y z}.
0ea0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
0eb0: 32 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.1.1 {.  execsq
0ec0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0ed0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
0ee0: 3d 3d 27 79 27 20 41 4e 44 20 72 6f 77 69 64 3c  =='y' AND rowid<
0ef0: 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d  0.  }.} {-3 y z}
0f00: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0f10: 2d 32 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -2.1.2 {.  execs
0f20: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0f30: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0f40: 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f 77 69 64  b=='y' AND rowid
0f50: 3c 30 20 41 4e 44 20 72 6f 77 69 64 3e 3d 2d 32  <0 AND rowid>=-2
0f60: 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d  0.  }.} {-3 y z}
0f70: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0f80: 2d 32 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  -2.1.3 {.  execs
0f90: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0fa0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0fb0: 62 3e 3d 27 79 27 0a 20 20 7d 0a 7d 20 7b 2d 33  b>='y'.  }.} {-3
0fc0: 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e   y z}.do_test in
0fd0: 74 70 6b 65 79 2d 32 2e 31 2e 34 20 7b 0a 20 20  tpkey-2.1.4 {.  
0fe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0ff0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1000: 48 45 52 45 20 62 3e 3d 27 79 27 20 41 4e 44 20  HERE b>='y' AND 
1010: 72 6f 77 69 64 3c 31 30 0a 20 20 7d 0a 7d 20 7b  rowid<10.  }.} {
1020: 2d 33 20 79 20 7a 7d 0a 0a 64 6f 5f 74 65 73 74  -3 y z}..do_test
1030: 20 69 6e 74 70 6b 65 79 2d 32 2e 32 20 7b 0a 20   intpkey-2.2 {. 
1040: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
1050: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 38  PDATE t1 SET a=8
1060: 20 57 48 45 52 45 20 62 3d 3d 27 79 27 3b 0a 20   WHERE b=='y';. 
1070: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1080: 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 79 27   t1 WHERE b=='y'
1090: 3b 0a 20 20 7d 0a 7d 20 7b 38 20 79 20 7a 7d 0a  ;.  }.} {8 y z}.
10a0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
10b0: 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.3 {.  execsql 
10c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
10d0: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  id, * FROM t1;. 
10e0: 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77   }.} {4 4 one tw
10f0: 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c  o 5 5 hello worl
1100: 64 20 36 20 36 20 73 65 63 6f 6e 64 20 65 6e 74  d 6 6 second ent
1110: 72 79 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f 74  ry 8 8 y z}.do_t
1120: 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 34 20  est intpkey-2.4 
1130: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1140: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
1150: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1160: 62 3c 27 73 65 63 6f 6e 64 27 0a 20 20 7d 0a 7d  b<'second'.  }.}
1170: 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c   {5 5 hello worl
1180: 64 20 34 20 34 20 6f 6e 65 20 74 77 6f 7d 0a 64  d 4 4 one two}.d
1190: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32  o_test intpkey-2
11a0: 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.1 {.  execsql
11b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
11c0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57  wid, * FROM t1 W
11d0: 48 45 52 45 20 27 73 65 63 6f 6e 64 27 3e 62 0a  HERE 'second'>b.
11e0: 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f    }.} {5 5 hello
11f0: 20 77 6f 72 6c 64 20 34 20 34 20 6f 6e 65 20 74   world 4 4 one t
1200: 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  wo}.do_test intp
1210: 6b 65 79 2d 32 2e 34 2e 32 20 7b 0a 20 20 65 78  key-2.4.2 {.  ex
1220: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1230: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
1240: 20 74 31 20 57 48 45 52 45 20 38 3e 72 6f 77 69   t1 WHERE 8>rowi
1250: 64 20 41 4e 44 20 27 73 65 63 6f 6e 64 27 3e 62  d AND 'second'>b
1260: 0a 20 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20  .  }.} {4 4 one 
1270: 74 77 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f  two 5 5 hello wo
1280: 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  rld}.do_test int
1290: 70 6b 65 79 2d 32 2e 34 2e 33 20 7b 0a 20 20 65  pkey-2.4.3 {.  e
12a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
12b0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
12c0: 4d 20 74 31 20 57 48 45 52 45 20 38 3e 72 6f 77  M t1 WHERE 8>row
12d0: 69 64 20 41 4e 44 20 27 73 65 63 6f 6e 64 27 3e  id AND 'second'>
12e0: 62 20 41 4e 44 20 30 3c 72 6f 77 69 64 0a 20 20  b AND 0<rowid.  
12f0: 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77 6f  }.} {4 4 one two
1300: 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64   5 5 hello world
1310: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1320: 79 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  y-2.5 {.  execsq
1330: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
1340: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20  owid, * FROM t1 
1350: 57 48 45 52 45 20 62 3e 27 61 27 0a 20 20 7d 0a  WHERE b>'a'.  }.
1360: 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72  } {5 5 hello wor
1370: 6c 64 20 34 20 34 20 6f 6e 65 20 74 77 6f 20 36  ld 4 4 one two 6
1380: 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 20   6 second entry 
1390: 38 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74  8 8 y z}.do_test
13a0: 20 69 6e 74 70 6b 65 79 2d 32 2e 36 20 7b 0a 20   intpkey-2.6 {. 
13b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
13c0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
13d0: 45 52 45 20 72 6f 77 69 64 3d 34 3b 0a 20 20 20  ERE rowid=4;.   
13e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
13f0: 31 20 57 48 45 52 45 20 62 3e 27 61 27 3b 0a 20  1 WHERE b>'a';. 
1400: 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f   }.} {5 hello wo
1410: 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e 74  rld 6 second ent
1420: 72 79 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73  ry 8 y z}.do_tes
1430: 74 20 69 6e 74 70 6b 65 79 2d 32 2e 37 20 7b 0a  t intpkey-2.7 {.
1440: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1450: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d  UPDATE t1 SET a=
1460: 2d 34 20 57 48 45 52 45 20 72 6f 77 69 64 3d 38  -4 WHERE rowid=8
1470: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1480: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 27  ROM t1 WHERE b>'
1490: 61 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c  a';.  }.} {5 hel
14a0: 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e  lo world 6 secon
14b0: 64 20 65 6e 74 72 79 20 2d 34 20 79 20 7a 7d 0a  d entry -4 y z}.
14c0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
14d0: 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.7 {.  execsql 
14e0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
14f0: 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 2d 34  ROM t1.  }.} {-4
1500: 20 79 20 7a 20 35 20 68 65 6c 6c 6f 20 77 6f 72   y z 5 hello wor
1510: 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72  ld 6 second entr
1520: 79 7d 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c 20  y}..# Do an SQL 
1530: 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 70 70 65  statement.  Appe
1540: 6e 64 20 74 68 65 20 73 65 61 72 63 68 20 63 6f  nd the search co
1550: 75 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  unt to the end o
1560: 66 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 23 0a  f the result..#.
1570: 70 72 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20 7b  proc count sql {
1580: 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f  .  set ::sqlite_
1590: 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20  search_count 0. 
15a0: 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20   return [concat 
15b0: 5b 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 20 24  [execsql $sql] $
15c0: 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f  ::sqlite_search_
15d0: 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 43 72 65 61  count].}..# Crea
15e0: 74 65 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  te indices that 
15f0: 69 6e 63 6c 75 64 65 20 74 68 65 20 69 6e 74 65  include the inte
1600: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
1610: 61 73 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 0a  as one of their.
1620: 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f 5f  # columns..#.do_
1630: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 31  test intpkey-3.1
1640: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1650: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1660: 69 32 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 7d  i2 ON t1(a);.  }
1670: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  .} {}.do_test in
1680: 74 70 6b 65 79 2d 33 2e 32 20 7b 0a 20 20 63 6f  tpkey-3.2 {.  co
1690: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
16a0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
16b0: 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68   a=5;.  }.} {5 h
16c0: 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f  ello world 0}.do
16d0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e  _test intpkey-3.
16e0: 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  3 {.  count {.  
16f0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1700: 74 31 20 57 48 45 52 45 20 61 3e 34 20 41 4e 44  t1 WHERE a>4 AND
1710: 20 61 3c 36 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68   a<6;.  }.} {5 h
1720: 65 6c 6c 6f 20 77 6f 72 6c 64 20 32 7d 0a 64 6f  ello world 2}.do
1730: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e  _test intpkey-3.
1740: 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  4 {.  count {.  
1750: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1760: 74 31 20 57 48 45 52 45 20 62 3e 3d 27 68 65 6c  t1 WHERE b>='hel
1770: 6c 6f 27 20 41 4e 44 20 62 3c 27 68 65 6c 6c 6f  lo' AND b<'hello
1780: 32 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c  2';.  }.} {5 hel
1790: 6c 6f 20 77 6f 72 6c 64 20 33 7d 0a 64 6f 5f 74  lo world 3}.do_t
17a0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 35 20  est intpkey-3.5 
17b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
17c0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
17d0: 33 20 4f 4e 20 74 31 28 63 2c 61 29 3b 0a 20 20  3 ON t1(c,a);.  
17e0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69  }.} {}.do_test i
17f0: 6e 74 70 6b 65 79 2d 33 2e 36 20 7b 0a 20 20 63  ntpkey-3.6 {.  c
1800: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1810: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1820: 45 20 63 3d 3d 27 77 6f 72 6c 64 27 3b 0a 20 20  E c=='world';.  
1830: 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72  }.} {5 hello wor
1840: 6c 64 20 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  ld 3}.do_test in
1850: 74 70 6b 65 79 2d 33 2e 37 20 7b 0a 20 20 65 78  tpkey-3.7 {.  ex
1860: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
1870: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 31 2c  TO t1 VALUES(11,
1880: 27 68 65 6c 6c 6f 27 2c 27 77 6f 72 6c 64 27 29  'hello','world')
1890: 7d 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  }.  count {.    
18a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
18b0: 20 57 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64   WHERE c=='world
18c0: 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c  ';.  }.} {5 hell
18d0: 6f 20 77 6f 72 6c 64 20 31 31 20 68 65 6c 6c 6f  o world 11 hello
18e0: 20 77 6f 72 6c 64 20 35 7d 0a 64 6f 5f 74 65 73   world 5}.do_tes
18f0: 74 20 69 6e 74 70 6b 65 79 2d 33 2e 38 20 7b 0a  t intpkey-3.8 {.
1900: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1910: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1920: 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27 20  HERE c=='world' 
1930: 41 4e 44 20 61 3e 37 3b 0a 20 20 7d 0a 7d 20 7b  AND a>7;.  }.} {
1940: 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 35  11 hello world 5
1950: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1960: 79 2d 33 2e 39 20 7b 0a 20 20 63 6f 75 6e 74 20  y-3.9 {.  count 
1970: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1980: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 37 3c 61  ROM t1 WHERE 7<a
1990: 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c  ;.  }.} {11 hell
19a0: 6f 20 77 6f 72 6c 64 20 31 7d 0a 0a 23 20 54 65  o world 1}..# Te
19b0: 73 74 20 69 6e 65 71 75 61 6c 69 74 79 20 63 6f  st inequality co
19c0: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 69 6e 74  nstraints on int
19d0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
19e0: 73 20 61 6e 64 20 72 6f 77 69 64 73 0a 23 0a 64  s and rowids.#.d
19f0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34  o_test intpkey-4
1a00: 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .1 {.  count {. 
1a10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1a20: 20 74 31 20 57 48 45 52 45 20 31 31 3d 72 6f 77   t1 WHERE 11=row
1a30: 69 64 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  id.  }.} {11 hel
1a40: 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74  lo world 0}.do_t
1a50: 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 32 20  est intpkey-4.2 
1a60: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1a70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1a80: 20 57 48 45 52 45 20 31 31 3d 72 6f 77 69 64 20   WHERE 11=rowid 
1a90: 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20  AND b=='hello'. 
1aa0: 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77   }.} {11 hello w
1ab0: 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20  orld 0}.do_test 
1ac0: 69 6e 74 70 6b 65 79 2d 34 2e 33 20 7b 0a 20 20  intpkey-4.3 {.  
1ad0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1ae0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1af0: 52 45 20 31 31 3d 72 6f 77 69 64 20 41 4e 44 20  RE 11=rowid AND 
1b00: 62 3d 3d 27 68 65 6c 6c 6f 27 20 41 4e 44 20 63  b=='hello' AND c
1b10: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 3b 0a 20 20   IS NOT NULL;.  
1b20: 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f  }.} {11 hello wo
1b30: 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69  rld 0}.do_test i
1b40: 6e 74 70 6b 65 79 2d 34 2e 34 20 7b 0a 20 20 63  ntpkey-4.4 {.  c
1b50: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1b60: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1b70: 45 20 72 6f 77 69 64 3d 3d 31 31 0a 20 20 7d 0a  E rowid==11.  }.
1b80: 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c  } {11 hello worl
1b90: 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  d 0}.do_test int
1ba0: 70 6b 65 79 2d 34 2e 35 20 7b 0a 20 20 63 6f 75  pkey-4.5 {.  cou
1bb0: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1bc0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1bd0: 6f 69 64 3d 3d 31 31 20 41 4e 44 20 62 3d 3d 27  oid==11 AND b=='
1be0: 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d 20 7b 31 31  hello'.  }.} {11
1bf0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a   hello world 0}.
1c00: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1c10: 34 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  4.6 {.  count {.
1c20: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1c30: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d 31 31  M t1 WHERE a==11
1c40: 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 20   AND b=='hello' 
1c50: 41 4e 44 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c  AND c IS NOT NUL
1c60: 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  L;.  }.} {11 hel
1c70: 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 0a 64 6f 5f  lo world 0}..do_
1c80: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 37  test intpkey-4.7
1c90: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1ca0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1cb0: 31 20 57 48 45 52 45 20 38 3c 72 6f 77 69 64 3b  1 WHERE 8<rowid;
1cc0: 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f  .  }.} {11 hello
1cd0: 20 77 6f 72 6c 64 20 31 7d 0a 64 6f 5f 74 65 73   world 1}.do_tes
1ce0: 74 20 69 6e 74 70 6b 65 79 2d 34 2e 38 20 7b 0a  t intpkey-4.8 {.
1cf0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1d00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1d10: 48 45 52 45 20 38 3c 72 6f 77 69 64 20 41 4e 44  HERE 8<rowid AND
1d20: 20 31 31 3e 3d 6f 69 64 3b 0a 20 20 7d 0a 7d 20   11>=oid;.  }.} 
1d30: 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  {11 hello world 
1d40: 31 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  1}.do_test intpk
1d50: 65 79 2d 34 2e 39 20 7b 0a 20 20 63 6f 75 6e 74  ey-4.9 {.  count
1d60: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1d70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31  FROM t1 WHERE 11
1d80: 3c 3d 5f 72 6f 77 69 64 5f 20 41 4e 44 20 31 32  <=_rowid_ AND 12
1d90: 3e 3d 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68  >=a;.  }.} {11 h
1da0: 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 64 6f  ello world 1}.do
1db0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e  _test intpkey-4.
1dc0: 31 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  10 {.  count {. 
1dd0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1de0: 20 74 31 20 57 48 45 52 45 20 30 3e 3d 5f 72 6f   t1 WHERE 0>=_ro
1df0: 77 69 64 5f 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20  wid_;.  }.} {-4 
1e00: 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69  y z 1}.do_test i
1e10: 6e 74 70 6b 65 79 2d 34 2e 31 31 20 7b 0a 20 20  ntpkey-4.11 {.  
1e20: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1e30: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1e40: 52 45 20 61 3c 30 3b 0a 20 20 7d 0a 7d 20 7b 2d  RE a<0;.  }.} {-
1e50: 34 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73 74  4 y z 1}.do_test
1e60: 20 69 6e 74 70 6b 65 79 2d 34 2e 31 32 20 7b 0a   intpkey-4.12 {.
1e70: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1e80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1e90: 48 45 52 45 20 61 3c 30 20 41 4e 44 20 61 3e 31  HERE a<0 AND a>1
1ea0: 30 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23 20  0;.  }.} {1}..# 
1eb0: 4d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  Make sure it is 
1ec0: 4f 4b 20 74 6f 20 69 6e 73 65 72 74 20 61 20 72  OK to insert a r
1ed0: 6f 77 69 64 20 6f 66 20 30 0a 23 0a 64 6f 5f 74  owid of 0.#.do_t
1ee0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 35 2e 31 20  est intpkey-5.1 
1ef0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1f00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1f10: 20 56 41 4c 55 45 53 28 30 2c 27 7a 65 72 6f 27   VALUES(0,'zero'
1f20: 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d 0a 20  ,'entry');.  }. 
1f30: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
1f40: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1f50: 45 52 45 20 61 3d 30 3b 0a 20 20 7d 0a 7d 20 7b  ERE a=0;.  }.} {
1f60: 30 20 7a 65 72 6f 20 65 6e 74 72 79 20 30 7d 0a  0 zero entry 0}.
1f70: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 3d  do_test intpkey=
1f80: 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.2 {.  execsql 
1f90: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
1fa0: 69 64 2c 20 61 20 46 52 4f 4d 20 74 31 0a 20 20  id, a FROM t1.  
1fb0: 7d 0a 7d 20 7b 2d 34 20 2d 34 20 30 20 30 20 35  }.} {-4 -4 0 0 5
1fc0: 20 35 20 36 20 36 20 31 31 20 31 31 7d 0a 0a 23   5 6 6 11 11}..#
1fd0: 20 54 65 73 74 20 74 68 65 20 61 62 69 6c 69 74   Test the abilit
1fe0: 79 20 6f 66 20 74 68 65 20 43 4f 50 59 20 63 6f  y of the COPY co
1ff0: 6d 6d 61 6e 64 20 74 6f 20 70 75 74 20 64 61 74  mmand to put dat
2000: 61 20 69 6e 74 6f 20 61 0a 23 20 74 61 62 6c 65  a into a.# table
2010: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
2020: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
2030: 79 20 6b 65 79 2e 0a 23 0a 64 6f 5f 74 65 73 74  y key..#.do_test
2040: 20 69 6e 74 70 6b 65 79 2d 36 2e 31 20 7b 0a 20   intpkey-6.1 {. 
2050: 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 2e 2f 64   set f [open ./d
2060: 61 74 61 31 2e 74 78 74 20 77 5d 0a 20 20 70 75  ata1.txt w].  pu
2070: 74 73 20 24 66 20 22 32 30 5c 74 62 2d 32 30 5c  ts $f "20\tb-20\
2080: 74 63 2d 32 30 22 0a 20 20 70 75 74 73 20 24 66  tc-20".  puts $f
2090: 20 22 32 31 5c 74 62 2d 32 31 5c 74 63 2d 32 31   "21\tb-21\tc-21
20a0: 22 0a 20 20 70 75 74 73 20 24 66 20 22 32 32 5c  ".  puts $f "22\
20b0: 74 62 2d 32 32 5c 74 63 2d 32 32 22 0a 20 20 63  tb-22\tc-22".  c
20c0: 6c 6f 73 65 20 24 66 0a 20 20 65 78 65 63 73 71  lose $f.  execsq
20d0: 6c 20 7b 0a 20 20 20 20 43 4f 50 59 20 74 31 20  l {.    COPY t1 
20e0: 46 52 4f 4d 20 27 64 61 74 61 31 2e 74 78 74 27  FROM 'data1.txt'
20f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2100: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d  ROM t1 WHERE a>=
2110: 32 30 3b 0a 20 20 7d 0a 7d 20 7b 32 30 20 62 2d  20;.  }.} {20 b-
2120: 32 30 20 63 2d 32 30 20 32 31 20 62 2d 32 31 20  20 c-20 21 b-21 
2130: 63 2d 32 31 20 32 32 20 62 2d 32 32 20 63 2d 32  c-21 22 b-22 c-2
2140: 32 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  2}.do_test intpk
2150: 65 79 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  ey-6.2 {.  execs
2160: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2170: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2180: 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d  b=='hello'.  }.}
2190: 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20   {5 hello world 
21a0: 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a  11 hello world}.
21b0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
21c0: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.3 {.  execsql 
21d0: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
21e0: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 27 62 2d  M t1 WHERE b='b-
21f0: 32 31 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  21';.    SELECT 
2200: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2210: 62 3d 3d 27 62 2d 32 31 27 3b 0a 20 20 7d 0a 7d  b=='b-21';.  }.}
2220: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   {}.do_test intp
2230: 6b 65 79 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63  key-6.4 {.  exec
2240: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2250: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2260: 20 61 3e 3d 32 30 0a 20 20 7d 0a 7d 20 7b 32 30   a>=20.  }.} {20
2270: 20 62 2d 32 30 20 63 2d 32 30 20 32 32 20 62 2d   b-20 c-20 22 b-
2280: 32 32 20 63 2d 32 32 7d 0a 0a 23 20 44 6f 20 61  22 c-22}..# Do a
2290: 6e 20 69 6e 73 65 72 74 20 6f 66 20 76 61 6c 75  n insert of valu
22a0: 65 73 20 77 69 74 68 20 74 68 65 20 63 6f 6c 75  es with the colu
22b0: 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 6f 75  mns specified ou
22c0: 74 20 6f 66 20 6f 72 64 65 72 2e 0a 23 0a 64 6f  t of order..#.do
22d0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 37 2e  _test intpkey-7.
22e0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
22f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2300: 74 31 28 63 2c 62 2c 61 29 20 56 41 4c 55 45 53  t1(c,b,a) VALUES
2310: 28 27 72 6f 77 27 2c 27 6e 65 77 27 2c 33 30 29  ('row','new',30)
2320: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2330: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77  ROM t1 WHERE row
2340: 69 64 3e 3d 33 30 3b 0a 20 20 7d 0a 7d 20 7b 33  id>=30;.  }.} {3
2350: 30 20 6e 65 77 20 72 6f 77 7d 0a 64 6f 5f 74 65  0 new row}.do_te
2360: 73 74 20 69 6e 74 70 6b 65 79 2d 37 2e 32 20 7b  st intpkey-7.2 {
2370: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2380: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2390: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3e 32 30  1 WHERE rowid>20
23a0: 3b 0a 20 20 7d 0a 7d 20 7b 32 32 20 62 2d 32 32  ;.  }.} {22 b-22
23b0: 20 63 2d 32 32 20 33 30 20 6e 65 77 20 72 6f 77   c-22 30 new row
23c0: 7d 0a 0a 23 20 44 6f 20 61 6e 20 69 6e 73 65 72  }..# Do an inser
23d0: 74 20 66 72 6f 6d 20 61 20 73 65 6c 65 63 74 20  t from a select 
23e0: 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 64 6f 5f  statement..#.do_
23f0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e 31  test intpkey-8.1
2400: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2410: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2420: 74 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t2(x INTEGER PRI
2430: 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29 3b  MARY KEY, y, z);
2440: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2450: 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t2 SELECT * FRO
2460: 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t1;.    SELECT
2470: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 3b 0a   rowid FROM t2;.
2480: 20 20 7d 0a 7d 20 7b 2d 34 20 30 20 35 20 36 20    }.} {-4 0 5 6 
2490: 31 31 20 32 30 20 32 32 20 33 30 7d 0a 64 6f 5f  11 20 22 30}.do_
24a0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e 32  test intpkey-8.2
24b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
24c0: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
24d0: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20 30   t2;.  }.} {-4 0
24e0: 20 35 20 36 20 31 31 20 32 30 20 32 32 20 33 30   5 6 11 20 22 30
24f0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  }..do_test intpk
2500: 65 79 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  ey-9.1 {.  execs
2510: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
2520: 74 31 20 53 45 54 20 63 3d 27 77 77 77 27 20 57  t1 SET c='www' W
2530: 48 45 52 45 20 63 3d 27 77 6f 72 6c 64 27 3b 0a  HERE c='world';.
2540: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
2550: 2c 20 61 2c 20 63 20 46 52 4f 4d 20 74 31 20 57  , a, c FROM t1 W
2560: 48 45 52 45 20 63 3d 3d 27 77 77 77 27 3b 0a 20  HERE c=='www';. 
2570: 20 7d 0a 7d 20 7b 35 20 35 20 77 77 77 20 31 31   }.} {5 5 www 11
2580: 20 31 31 20 77 77 77 7d 0a 0a 0a 23 20 43 68 65   11 www}...# Che
2590: 63 6b 20 69 6e 73 65 72 74 20 6f 66 20 4e 55 4c  ck insert of NUL
25a0: 4c 20 66 6f 72 20 70 72 69 6d 61 72 79 20 6b 65  L for primary ke
25b0: 79 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  y.#.do_test intp
25c0: 6b 65 79 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65  key-10.1 {.  exe
25d0: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
25e0: 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52  TABLE t2;.    CR
25f0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
2600: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
2610: 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20 20 20 20  KEY, y, z);.    
2620: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
2630: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 31 2c 20 32  ALUES(NULL, 1, 2
2640: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2650: 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  from t2;.  }.} {
2660: 31 20 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 69  1 1 2}.do_test i
2670: 6e 74 70 6b 65 79 2d 31 30 2e 32 20 7b 0a 20 20  ntpkey-10.2 {.  
2680: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
2690: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
26a0: 55 45 53 28 4e 55 4c 4c 2c 20 32 2c 20 33 29 3b  UES(NULL, 2, 3);
26b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 66 72  .    SELECT * fr
26c0: 6f 6d 20 74 32 20 57 48 45 52 45 20 78 3d 32 3b  om t2 WHERE x=2;
26d0: 0a 20 20 7d 0a 7d 20 7b 32 20 32 20 33 7d 0a 0a  .  }.} {2 2 3}..
26e0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.