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

Artifact 69a6a9b41e541f27a2ffcd20264fb35adc3c2680:


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 31 30 20 32 30 30 32  test,v 1.10 2002
0230: 2f 30 36 2f 31 39 20 32 30 3a 33 32 3a 34 35 20  /06/19 20:32:45 
0240: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh Exp $..set t
0250: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0260: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0270: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0280: 74 65 72 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74  ter.tcl..# Creat
0290: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
02a0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64   primary key and
02b0: 20 61 20 64 61 74 61 74 79 70 65 20 6f 74 68 65   a datatype othe
02c0: 72 20 74 68 61 6e 0a 23 20 69 6e 74 65 67 65 72  r than.# integer
02d0: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
02e0: 65 79 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73  ey-1.0 {.  execs
02f0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0300: 54 41 42 4c 45 20 74 31 28 61 20 54 45 58 54 20  TABLE t1(a TEXT 
0310: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
0320: 63 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  c);.  }.} {}..# 
0330: 54 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20  There should be 
0340: 61 6e 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  an index associa
0350: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72 69  ted with the pri
0360: 6d 61 72 79 20 6b 65 79 0a 23 0a 64 6f 5f 74 65  mary key.#.do_te
0370: 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 20 7b  st intpkey-1.1 {
0380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0390: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
03a0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  M sqlite_master.
03b0: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
03c0: 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e  index' AND tbl_n
03d0: 61 6d 65 3d 27 74 31 27 3b 0a 20 20 7d 0a 7d 20  ame='t1';.  }.} 
03e0: 7b 7b 28 74 31 20 61 75 74 6f 69 6e 64 65 78 20  {{(t1 autoindex 
03f0: 31 29 7d 7d 0a 0a 23 20 4e 6f 77 20 63 72 65 61  1)}}..# Now crea
0400: 74 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  te a table with 
0410: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
0420: 72 79 20 6b 65 79 20 61 6e 64 20 76 65 72 69 66  ry key and verif
0430: 79 20 74 68 61 74 0a 23 20 74 68 65 72 65 20 69  y that.# there i
0440: 73 20 6e 6f 20 61 73 73 6f 63 69 61 74 65 64 20  s no associated 
0450: 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65 73 74  index..#.do_test
0460: 20 69 6e 74 70 6b 65 79 2d 31 2e 32 20 7b 0a 20   intpkey-1.2 {. 
0470: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
0480: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
0490: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
04a0: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
04b0: 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a  ARY KEY, b, c);.
04c0: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
04d0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
04e0: 65 72 0a 20 20 20 20 20 20 57 48 45 52 45 20 74  er.      WHERE t
04f0: 79 70 65 3d 27 69 6e 64 65 78 27 20 41 4e 44 20  ype='index' AND 
0500: 74 62 6c 5f 6e 61 6d 65 3d 27 74 31 27 3b 0a 20  tbl_name='t1';. 
0510: 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 49 6e 73 65 72   }.} {}..# Inser
0520: 74 20 73 6f 6d 65 20 72 65 63 6f 72 64 73 20 69  t some records i
0530: 6e 74 6f 20 74 68 65 20 6e 65 77 20 74 61 62 6c  nto the new tabl
0540: 65 2e 20 20 53 70 65 63 69 66 79 20 74 68 65 20  e.  Specify the 
0550: 70 72 69 6d 61 72 79 20 6b 65 79 0a 23 20 61 6e  primary key.# an
0560: 64 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  d verify that th
0570: 65 20 6b 65 79 20 69 73 20 75 73 65 64 20 61 73  e key is used as
0580: 20 74 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   the record numb
0590: 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e  er..#.do_test in
05a0: 74 70 6b 65 79 2d 31 2e 33 20 7b 0a 20 20 65 78  tpkey-1.3 {.  ex
05b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
05c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
05d0: 53 28 35 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72  S(5,'hello','wor
05e0: 6c 64 27 29 3b 0a 20 20 7d 0a 20 20 64 62 20 6c  ld');.  }.  db l
05f0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
0600: 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 69  .} {5}.do_test i
0610: 6e 74 70 6b 65 79 2d 31 2e 34 20 7b 0a 20 20 65  ntpkey-1.4 {.  e
0620: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0630: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
0640: 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f   }.} {5 hello wo
0650: 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  rld}.do_test int
0660: 70 6b 65 79 2d 31 2e 35 20 7b 0a 20 20 65 78 65  pkey-1.5 {.  exe
0670: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0680: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
0690: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68  t1;.  }.} {5 5 h
06a0: 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 0a 23 20 41  ello world}..# A
06b0: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 69 6e 73  ttempting to ins
06c0: 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20  ert a duplicate 
06d0: 70 72 69 6d 61 72 79 20 6b 65 79 20 73 68 6f 75  primary key shou
06e0: 6c 64 20 67 69 76 65 20 61 20 63 6f 6e 73 74 72  ld give a constr
06f0: 61 69 6e 74 0a 23 20 66 61 69 6c 75 72 65 2e 0a  aint.# failure..
0700: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
0710: 79 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20 72 20  y-1.6 {.  set r 
0720: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0730: 7b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  {.     INSERT IN
0740: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 2c 27  TO t1 VALUES(5,'
0750: 73 65 63 6f 6e 64 27 2c 27 65 6e 74 72 79 27 29  second','entry')
0760: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
0770: 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b  ppend r $msg.} {
0780: 31 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  1 {constraint fa
0790: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  iled}}.do_test i
07a0: 6e 74 70 6b 65 79 2d 31 2e 37 20 7b 0a 20 20 65  ntpkey-1.7 {.  e
07b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
07c0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
07d0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35  M t1;.  }.} {5 5
07e0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 64 6f   hello world}.do
07f0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0800: 38 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74  8 {.  set r [cat
0810: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
0820: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0830: 31 20 56 41 4c 55 45 53 28 36 2c 27 73 65 63 6f  1 VALUES(6,'seco
0840: 6e 64 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20  nd','entry');.  
0850: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0860: 64 20 72 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d r $msg.} {0 {}
0870: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
0880: 79 2d 31 2e 38 2e 31 20 7b 0a 20 20 64 62 20 6c  y-1.8.1 {.  db l
0890: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
08a0: 0a 7d 20 7b 36 7d 0a 64 6f 5f 74 65 73 74 20 69  .} {6}.do_test i
08b0: 6e 74 70 6b 65 79 2d 31 2e 39 20 7b 0a 20 20 65  ntpkey-1.9 {.  e
08c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
08d0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
08e0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35  M t1;.  }.} {5 5
08f0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 36   hello world 6 6
0900: 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a   second entry}..
0910: 23 20 41 20 52 4f 57 49 44 20 69 73 20 61 75 74  # A ROWID is aut
0920: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
0930: 61 74 65 64 20 66 6f 72 20 6e 65 77 20 72 65 63  ated for new rec
0940: 6f 72 64 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  ords that do not
0950: 20 73 70 65 63 69 66 79 0a 23 20 74 68 65 20 69   specify.# the i
0960: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
0970: 65 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e  ey..#.do_test in
0980: 74 70 6b 65 79 2d 31 2e 31 30 20 7b 0a 20 20 65  tpkey-1.10 {.  e
0990: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
09a0: 45 52 54 20 49 4e 54 4f 20 74 31 28 62 2c 63 29  ERT INTO t1(b,c)
09b0: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 27 74   VALUES('one','t
09c0: 77 6f 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  wo');.    SELECT
09d0: 20 62 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   b FROM t1 ORDER
09e0: 20 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 68 65   BY b;.  }.} {he
09f0: 6c 6c 6f 20 6f 6e 65 20 73 65 63 6f 6e 64 7d 0a  llo one second}.
0a00: 0a 23 20 54 72 79 20 74 6f 20 63 68 61 6e 67 65  .# Try to change
0a10: 20 74 68 65 20 52 4f 57 49 44 20 66 6f 72 20 74   the ROWID for t
0a20: 68 65 20 6e 65 77 20 65 6e 74 72 79 2e 0a 23 0a  he new entry..#.
0a30: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
0a40: 31 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.11 {.  execsql
0a50: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31   {.    UPDATE t1
0a60: 20 53 45 54 20 61 3d 34 20 57 48 45 52 45 20 62   SET a=4 WHERE b
0a70: 3d 27 6f 6e 65 27 3b 0a 20 20 20 20 53 45 4c 45  ='one';.    SELE
0a80: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
0a90: 7d 0a 7d 20 7b 34 20 6f 6e 65 20 74 77 6f 20 35  }.} {4 one two 5
0aa0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73   hello world 6 s
0ab0: 65 63 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a 23 20  econd entry}..# 
0ac0: 4d 61 6b 65 20 73 75 72 65 20 53 45 4c 45 43 54  Make sure SELECT
0ad0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
0ae0: 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20  able to use the 
0af0: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
0b00: 6d 6e 0a 23 20 61 73 20 61 6e 20 69 6e 64 65 78  mn.# as an index
0b10: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  ..#.do_test intp
0b20: 6b 65 79 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65  key-1.12 {.  exe
0b30: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0b40: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
0b50: 45 20 61 3d 3d 34 3b 0a 20 20 7d 0a 7d 20 7b 34  E a==4;.  }.} {4
0b60: 20 6f 6e 65 20 74 77 6f 7d 0a 0a 23 20 54 72 79   one two}..# Try
0b70: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
0b80: 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69  -integer value i
0b90: 6e 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20  nto the primary 
0ba0: 6b 65 79 20 66 69 65 6c 64 2e 20 20 54 68 69 73  key field.  This
0bb0: 0a 23 20 73 68 6f 75 6c 64 20 72 65 73 75 6c 74  .# should result
0bc0: 20 69 6e 20 61 20 64 61 74 61 20 74 79 70 65 20   in a data type 
0bd0: 6d 69 73 6d 61 74 63 68 2e 0a 23 0a 64 6f 5f 74  mismatch..#.do_t
0be0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 33  est intpkey-1.13
0bf0: 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63   {.  set r [catc
0c00: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0c10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0c20: 56 41 4c 55 45 53 28 27 78 27 2c 27 79 27 2c 27  VALUES('x','y','
0c30: 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  z');.  }} msg]. 
0c40: 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a   lappend r $msg.
0c50: 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20 6d  } {1 {datatype m
0c60: 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73  ismatch}}.do_tes
0c70: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 34 20 7b  t intpkey-1.14 {
0c80: 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20  .  set r [catch 
0c90: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49  {execsql {.    I
0ca0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0cb0: 4c 55 45 53 28 33 2e 34 2c 27 79 27 2c 27 7a 27  LUES(3.4,'y','z'
0cc0: 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  );.  }} msg].  l
0cd0: 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20  append r $msg.} 
0ce0: 7b 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73  {1 {datatype mis
0cf0: 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20  match}}.do_test 
0d00: 69 6e 74 70 6b 65 79 2d 31 2e 31 35 20 7b 0a 20  intpkey-1.15 {. 
0d10: 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b 65   set r [catch {e
0d20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
0d30: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0d40: 45 53 28 2d 33 2c 27 79 27 2c 27 7a 27 29 3b 0a  ES(-3,'y','z');.
0d50: 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70    }} msg].  lapp
0d60: 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 30 20  end r $msg.} {0 
0d70: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  {}}.do_test intp
0d80: 6b 65 79 2d 31 2e 31 36 20 7b 0a 20 20 65 78 65  key-1.16 {.  exe
0d90: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
0da0: 52 4f 4d 20 74 31 7d 0a 7d 20 7b 2d 33 20 79 20  ROM t1}.} {-3 y 
0db0: 7a 20 34 20 6f 6e 65 20 74 77 6f 20 35 20 68 65  z 4 one two 5 he
0dc0: 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f  llo world 6 seco
0dd0: 6e 64 20 65 6e 74 72 79 7d 0a 0a 23 23 23 23 20  nd entry}..#### 
0de0: 49 4e 44 49 43 45 53 0a 23 20 43 68 65 63 6b 20  INDICES.# Check 
0df0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 6e 64  to make sure ind
0e00: 69 63 65 73 20 77 6f 72 6b 20 63 6f 72 72 65 63  ices work correc
0e10: 74 6c 79 20 77 69 74 68 20 69 6e 74 65 67 65 72  tly with integer
0e20: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 0a 23 0a   primary keys.#.
0e30: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
0e40: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
0e50: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
0e60: 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a  EX i1 ON t1(b);.
0e70: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0e80: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 79  M t1 WHERE b=='y
0e90: 27 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d  '.  }.} {-3 y z}
0ea0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0eb0: 2d 32 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  -2.1.1 {.  execs
0ec0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0ed0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
0ee0: 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f 77 69 64  b=='y' AND rowid
0ef0: 3c 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a  <0.  }.} {-3 y z
0f00: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
0f10: 79 2d 32 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  y-2.1.2 {.  exec
0f20: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0f30: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0f40: 20 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f 77 69   b=='y' AND rowi
0f50: 64 3c 30 20 41 4e 44 20 72 6f 77 69 64 3e 3d 2d  d<0 AND rowid>=-
0f60: 32 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a  20.  }.} {-3 y z
0f70: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
0f80: 79 2d 32 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63  y-2.1.3 {.  exec
0f90: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0fa0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0fb0: 20 62 3e 3d 27 79 27 0a 20 20 7d 0a 7d 20 7b 2d   b>='y'.  }.} {-
0fc0: 33 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69  3 y z}.do_test i
0fd0: 6e 74 70 6b 65 79 2d 32 2e 31 2e 34 20 7b 0a 20  ntpkey-2.1.4 {. 
0fe0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0ff0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1000: 57 48 45 52 45 20 62 3e 3d 27 79 27 20 41 4e 44  WHERE b>='y' AND
1010: 20 72 6f 77 69 64 3c 31 30 0a 20 20 7d 0a 7d 20   rowid<10.  }.} 
1020: 7b 2d 33 20 79 20 7a 7d 0a 0a 64 6f 5f 74 65 73  {-3 y z}..do_tes
1030: 74 20 69 6e 74 70 6b 65 79 2d 32 2e 32 20 7b 0a  t intpkey-2.2 {.
1040: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1050: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d  UPDATE t1 SET a=
1060: 38 20 57 48 45 52 45 20 62 3d 3d 27 79 27 3b 0a  8 WHERE b=='y';.
1070: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1080: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 79  M t1 WHERE b=='y
1090: 27 3b 0a 20 20 7d 0a 7d 20 7b 38 20 79 20 7a 7d  ';.  }.} {8 y z}
10a0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
10b0: 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.3 {.  execsql
10c0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
10d0: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  wid, * FROM t1;.
10e0: 20 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74    }.} {4 4 one t
10f0: 77 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72  wo 5 5 hello wor
1100: 6c 64 20 36 20 36 20 73 65 63 6f 6e 64 20 65 6e  ld 6 6 second en
1110: 74 72 79 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f  try 8 8 y z}.do_
1120: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 34  test intpkey-2.4
1130: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1140: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
1150: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1160: 20 62 3c 27 73 65 63 6f 6e 64 27 0a 20 20 7d 0a   b<'second'.  }.
1170: 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72  } {5 5 hello wor
1180: 6c 64 20 34 20 34 20 6f 6e 65 20 74 77 6f 7d 0a  ld 4 4 one two}.
1190: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
11a0: 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.4.1 {.  execsq
11b0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
11c0: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20  owid, * FROM t1 
11d0: 57 48 45 52 45 20 27 73 65 63 6f 6e 64 27 3e 62  WHERE 'second'>b
11e0: 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c  .  }.} {5 5 hell
11f0: 6f 20 77 6f 72 6c 64 20 34 20 34 20 6f 6e 65 20  o world 4 4 one 
1200: 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  two}.do_test int
1210: 70 6b 65 79 2d 32 2e 34 2e 32 20 7b 0a 20 20 65  pkey-2.4.2 {.  e
1220: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1230: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
1240: 4d 20 74 31 20 57 48 45 52 45 20 38 3e 72 6f 77  M t1 WHERE 8>row
1250: 69 64 20 41 4e 44 20 27 73 65 63 6f 6e 64 27 3e  id AND 'second'>
1260: 62 0a 20 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65  b.  }.} {4 4 one
1270: 20 74 77 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77   two 5 5 hello w
1280: 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  orld}.do_test in
1290: 74 70 6b 65 79 2d 32 2e 34 2e 33 20 7b 0a 20 20  tpkey-2.4.3 {.  
12a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
12b0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
12c0: 4f 4d 20 74 31 20 57 48 45 52 45 20 38 3e 72 6f  OM t1 WHERE 8>ro
12d0: 77 69 64 20 41 4e 44 20 27 73 65 63 6f 6e 64 27  wid AND 'second'
12e0: 3e 62 20 41 4e 44 20 30 3c 72 6f 77 69 64 0a 20  >b AND 0<rowid. 
12f0: 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77   }.} {4 4 one tw
1300: 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c  o 5 5 hello worl
1310: 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  d}.do_test intpk
1320: 65 79 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73  ey-2.5 {.  execs
1330: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1340: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
1350: 20 57 48 45 52 45 20 62 3e 27 61 27 0a 20 20 7d   WHERE b>'a'.  }
1360: 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f  .} {5 5 hello wo
1370: 72 6c 64 20 34 20 34 20 6f 6e 65 20 74 77 6f 20  rld 4 4 one two 
1380: 36 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  6 6 second entry
1390: 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73   8 8 y z}.do_tes
13a0: 74 20 69 6e 74 70 6b 65 79 2d 32 2e 36 20 7b 0a  t intpkey-2.6 {.
13b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
13c0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
13d0: 48 45 52 45 20 72 6f 77 69 64 3d 34 3b 0a 20 20  HERE rowid=4;.  
13e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
13f0: 74 31 20 57 48 45 52 45 20 62 3e 27 61 27 3b 0a  t1 WHERE b>'a';.
1400: 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77    }.} {5 hello w
1410: 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e  orld 6 second en
1420: 74 72 79 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65  try 8 y z}.do_te
1430: 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 37 20 7b  st intpkey-2.7 {
1440: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1450: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61   UPDATE t1 SET a
1460: 3d 2d 34 20 57 48 45 52 45 20 72 6f 77 69 64 3d  =-4 WHERE rowid=
1470: 38 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  8;.    SELECT * 
1480: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e  FROM t1 WHERE b>
1490: 27 61 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65  'a';.  }.} {5 he
14a0: 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f  llo world 6 seco
14b0: 6e 64 20 65 6e 74 72 79 20 2d 34 20 79 20 7a 7d  nd entry -4 y z}
14c0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
14d0: 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.7 {.  execsql
14e0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
14f0: 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 2d  FROM t1.  }.} {-
1500: 34 20 79 20 7a 20 35 20 68 65 6c 6c 6f 20 77 6f  4 y z 5 hello wo
1510: 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e 74  rld 6 second ent
1520: 72 79 7d 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c  ry}..# Do an SQL
1530: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 70 70   statement.  App
1540: 65 6e 64 20 74 68 65 20 73 65 61 72 63 68 20 63  end the search c
1550: 6f 75 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20  ount to the end 
1560: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 23  of the result..#
1570: 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20  .proc count sql 
1580: 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65  {.  set ::sqlite
1590: 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a  _search_count 0.
15a0: 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74    return [concat
15b0: 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 20   [execsql $sql] 
15c0: 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68  $::sqlite_search
15d0: 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 43 72 65  _count].}..# Cre
15e0: 61 74 65 20 69 6e 64 69 63 65 73 20 74 68 61 74  ate indices that
15f0: 20 69 6e 63 6c 75 64 65 20 74 68 65 20 69 6e 74   include the int
1600: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
1610: 20 61 73 20 6f 6e 65 20 6f 66 20 74 68 65 69 72   as one of their
1620: 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f  .# columns..#.do
1630: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e  _test intpkey-3.
1640: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1650: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1660: 20 69 32 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20   i2 ON t1(a);.  
1670: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69  }.} {}.do_test i
1680: 6e 74 70 6b 65 79 2d 33 2e 32 20 7b 0a 20 20 63  ntpkey-3.2 {.  c
1690: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
16a0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
16b0: 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 35 20  E a=5;.  }.} {5 
16c0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64  hello world 0}.d
16d0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33  o_test intpkey-3
16e0: 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .3 {.  count {. 
16f0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1700: 20 74 31 20 57 48 45 52 45 20 61 3e 34 20 41 4e   t1 WHERE a>4 AN
1710: 44 20 61 3c 36 3b 0a 20 20 7d 0a 7d 20 7b 35 20  D a<6;.  }.} {5 
1720: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 32 7d 0a 64  hello world 2}.d
1730: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33  o_test intpkey-3
1740: 2e 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .4 {.  count {. 
1750: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1760: 20 74 31 20 57 48 45 52 45 20 62 3e 3d 27 68 65   t1 WHERE b>='he
1770: 6c 6c 6f 27 20 41 4e 44 20 62 3c 27 68 65 6c 6c  llo' AND b<'hell
1780: 6f 32 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65  o2';.  }.} {5 he
1790: 6c 6c 6f 20 77 6f 72 6c 64 20 33 7d 0a 64 6f 5f  llo world 3}.do_
17a0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 35  test intpkey-3.5
17b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
17c0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
17d0: 69 33 20 4f 4e 20 74 31 28 63 2c 61 29 3b 0a 20  i3 ON t1(c,a);. 
17e0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
17f0: 69 6e 74 70 6b 65 79 2d 33 2e 36 20 7b 0a 20 20  intpkey-3.6 {.  
1800: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1810: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1820: 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27 3b 0a 20  RE c=='world';. 
1830: 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f   }.} {5 hello wo
1840: 72 6c 64 20 33 7d 0a 64 6f 5f 74 65 73 74 20 69  rld 3}.do_test i
1850: 6e 74 70 6b 65 79 2d 33 2e 37 20 7b 0a 20 20 65  ntpkey-3.7 {.  e
1860: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
1870: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 31  NTO t1 VALUES(11
1880: 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72 6c 64 27  ,'hello','world'
1890: 29 7d 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  )}.  count {.   
18a0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
18b0: 31 20 57 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c  1 WHERE c=='worl
18c0: 64 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c  d';.  }.} {5 hel
18d0: 6c 6f 20 77 6f 72 6c 64 20 31 31 20 68 65 6c 6c  lo world 11 hell
18e0: 6f 20 77 6f 72 6c 64 20 35 7d 0a 64 6f 5f 74 65  o world 5}.do_te
18f0: 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 38 20 7b  st intpkey-3.8 {
1900: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1910: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1920: 57 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27  WHERE c=='world'
1930: 20 41 4e 44 20 61 3e 37 3b 0a 20 20 7d 0a 7d 20   AND a>7;.  }.} 
1940: 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  {11 hello world 
1950: 35 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  5}.do_test intpk
1960: 65 79 2d 33 2e 39 20 7b 0a 20 20 63 6f 75 6e 74  ey-3.9 {.  count
1970: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1980: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 37 3c  FROM t1 WHERE 7<
1990: 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  a;.  }.} {11 hel
19a0: 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 0a 23 20 54  lo world 1}..# T
19b0: 65 73 74 20 69 6e 65 71 75 61 6c 69 74 79 20 63  est inequality c
19c0: 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 69 6e  onstraints on in
19d0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
19e0: 79 73 20 61 6e 64 20 72 6f 77 69 64 73 0a 23 0a  ys and rowids.#.
19f0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1a00: 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  4.1 {.  count {.
1a10: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1a20: 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d 72 6f  M t1 WHERE 11=ro
1a30: 77 69 64 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65  wid.  }.} {11 he
1a40: 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f  llo world 0}.do_
1a50: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 32  test intpkey-4.2
1a60: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1a70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1a80: 31 20 57 48 45 52 45 20 31 31 3d 72 6f 77 69 64  1 WHERE 11=rowid
1a90: 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 0a   AND b=='hello'.
1aa0: 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20    }.} {11 hello 
1ab0: 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74  world 0}.do_test
1ac0: 20 69 6e 74 70 6b 65 79 2d 34 2e 33 20 7b 0a 20   intpkey-4.3 {. 
1ad0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
1ae0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1af0: 45 52 45 20 31 31 3d 72 6f 77 69 64 20 41 4e 44  ERE 11=rowid AND
1b00: 20 62 3d 3d 27 68 65 6c 6c 6f 27 20 41 4e 44 20   b=='hello' AND 
1b10: 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 3b 0a 20  c IS NOT NULL;. 
1b20: 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77   }.} {11 hello w
1b30: 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20  orld 0}.do_test 
1b40: 69 6e 74 70 6b 65 79 2d 34 2e 34 20 7b 0a 20 20  intpkey-4.4 {.  
1b50: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1b60: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1b70: 52 45 20 72 6f 77 69 64 3d 3d 31 31 0a 20 20 7d  RE rowid==11.  }
1b80: 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72  .} {11 hello wor
1b90: 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  ld 0}.do_test in
1ba0: 74 70 6b 65 79 2d 34 2e 35 20 7b 0a 20 20 63 6f  tpkey-4.5 {.  co
1bb0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1bc0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1bd0: 20 6f 69 64 3d 3d 31 31 20 41 4e 44 20 62 3d 3d   oid==11 AND b==
1be0: 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d 20 7b 31  'hello'.  }.} {1
1bf0: 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d  1 hello world 0}
1c00: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1c10: 2d 34 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -4.6 {.  count {
1c20: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1c30: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d 31  OM t1 WHERE a==1
1c40: 31 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27  1 AND b=='hello'
1c50: 20 41 4e 44 20 63 20 49 53 20 4e 4f 54 20 4e 55   AND c IS NOT NU
1c60: 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65  LL;.  }.} {11 he
1c70: 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 0a 64 6f  llo world 0}..do
1c80: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e  _test intpkey-4.
1c90: 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  7 {.  count {.  
1ca0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1cb0: 74 31 20 57 48 45 52 45 20 38 3c 72 6f 77 69 64  t1 WHERE 8<rowid
1cc0: 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c  ;.  }.} {11 hell
1cd0: 6f 20 77 6f 72 6c 64 20 31 7d 0a 64 6f 5f 74 65  o world 1}.do_te
1ce0: 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 38 20 7b  st intpkey-4.8 {
1cf0: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1d00: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1d10: 57 48 45 52 45 20 38 3c 72 6f 77 69 64 20 41 4e  WHERE 8<rowid AN
1d20: 44 20 31 31 3e 3d 6f 69 64 3b 0a 20 20 7d 0a 7d  D 11>=oid;.  }.}
1d30: 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64   {11 hello world
1d40: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   1}.do_test intp
1d50: 6b 65 79 2d 34 2e 39 20 7b 0a 20 20 63 6f 75 6e  key-4.9 {.  coun
1d60: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1d70: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31   FROM t1 WHERE 1
1d80: 31 3c 3d 5f 72 6f 77 69 64 5f 20 41 4e 44 20 31  1<=_rowid_ AND 1
1d90: 32 3e 3d 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20  2>=a;.  }.} {11 
1da0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 64  hello world 1}.d
1db0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34  o_test intpkey-4
1dc0: 2e 31 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  .10 {.  count {.
1dd0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1de0: 4d 20 74 31 20 57 48 45 52 45 20 30 3e 3d 5f 72  M t1 WHERE 0>=_r
1df0: 6f 77 69 64 5f 3b 0a 20 20 7d 0a 7d 20 7b 2d 34  owid_;.  }.} {-4
1e00: 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73 74 20   y z 1}.do_test 
1e10: 69 6e 74 70 6b 65 79 2d 34 2e 31 31 20 7b 0a 20  intpkey-4.11 {. 
1e20: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
1e30: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1e40: 45 52 45 20 61 3c 30 3b 0a 20 20 7d 0a 7d 20 7b  ERE a<0;.  }.} {
1e50: 2d 34 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73  -4 y z 1}.do_tes
1e60: 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31 32 20 7b  t intpkey-4.12 {
1e70: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1e80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1e90: 57 48 45 52 45 20 61 3c 30 20 41 4e 44 20 61 3e  WHERE a<0 AND a>
1ea0: 31 30 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23  10;.  }.} {1}..#
1eb0: 20 4d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73   Make sure it is
1ec0: 20 4f 4b 20 74 6f 20 69 6e 73 65 72 74 20 61 20   OK to insert a 
1ed0: 72 6f 77 69 64 20 6f 66 20 30 0a 23 0a 64 6f 5f  rowid of 0.#.do_
1ee0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 35 2e 31  test intpkey-5.1
1ef0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1f00: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1f10: 31 20 56 41 4c 55 45 53 28 30 2c 27 7a 65 72 6f  1 VALUES(0,'zero
1f20: 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d 0a  ','entry');.  }.
1f30: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1f40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1f50: 48 45 52 45 20 61 3d 30 3b 0a 20 20 7d 0a 7d 20  HERE a=0;.  }.} 
1f60: 7b 30 20 7a 65 72 6f 20 65 6e 74 72 79 20 30 7d  {0 zero entry 0}
1f70: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1f80: 3d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  =5.2 {.  execsql
1f90: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
1fa0: 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 31 0a 20  wid, a FROM t1. 
1fb0: 20 7d 0a 7d 20 7b 2d 34 20 2d 34 20 30 20 30 20   }.} {-4 -4 0 0 
1fc0: 35 20 35 20 36 20 36 20 31 31 20 31 31 7d 0a 0a  5 5 6 6 11 11}..
1fd0: 23 20 54 65 73 74 20 74 68 65 20 61 62 69 6c 69  # Test the abili
1fe0: 74 79 20 6f 66 20 74 68 65 20 43 4f 50 59 20 63  ty of the COPY c
1ff0: 6f 6d 6d 61 6e 64 20 74 6f 20 70 75 74 20 64 61  ommand to put da
2000: 74 61 20 69 6e 74 6f 20 61 0a 23 20 74 61 62 6c  ta into a.# tabl
2010: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
2020: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
2030: 72 79 20 6b 65 79 2e 0a 23 0a 64 6f 5f 74 65 73  ry key..#.do_tes
2040: 74 20 69 6e 74 70 6b 65 79 2d 36 2e 31 20 7b 0a  t intpkey-6.1 {.
2050: 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 2e 2f    set f [open ./
2060: 64 61 74 61 31 2e 74 78 74 20 77 5d 0a 20 20 70  data1.txt w].  p
2070: 75 74 73 20 24 66 20 22 32 30 5c 74 62 2d 32 30  uts $f "20\tb-20
2080: 5c 74 63 2d 32 30 22 0a 20 20 70 75 74 73 20 24  \tc-20".  puts $
2090: 66 20 22 32 31 5c 74 62 2d 32 31 5c 74 63 2d 32  f "21\tb-21\tc-2
20a0: 31 22 0a 20 20 70 75 74 73 20 24 66 20 22 32 32  1".  puts $f "22
20b0: 5c 74 62 2d 32 32 5c 74 63 2d 32 32 22 0a 20 20  \tb-22\tc-22".  
20c0: 63 6c 6f 73 65 20 24 66 0a 20 20 65 78 65 63 73  close $f.  execs
20d0: 71 6c 20 7b 0a 20 20 20 20 43 4f 50 59 20 74 31  ql {.    COPY t1
20e0: 20 46 52 4f 4d 20 27 64 61 74 61 31 2e 74 78 74   FROM 'data1.txt
20f0: 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  ';.    SELECT * 
2100: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e  FROM t1 WHERE a>
2110: 3d 32 30 3b 0a 20 20 7d 0a 7d 20 7b 32 30 20 62  =20;.  }.} {20 b
2120: 2d 32 30 20 63 2d 32 30 20 32 31 20 62 2d 32 31  -20 c-20 21 b-21
2130: 20 63 2d 32 31 20 32 32 20 62 2d 32 32 20 63 2d   c-21 22 b-22 c-
2140: 32 32 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  22}.do_test intp
2150: 6b 65 79 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63  key-6.2 {.  exec
2160: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2170: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2180: 20 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a   b=='hello'.  }.
2190: 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64  } {5 hello world
21a0: 20 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d   11 hello world}
21b0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
21c0: 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.3 {.  execsql
21d0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
21e0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 27 62  OM t1 WHERE b='b
21f0: 2d 32 31 27 3b 0a 20 20 20 20 53 45 4c 45 43 54  -21';.    SELECT
2200: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2210: 20 62 3d 3d 27 62 2d 32 31 27 3b 0a 20 20 7d 0a   b=='b-21';.  }.
2220: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  } {}.do_test int
2230: 70 6b 65 79 2d 36 2e 34 20 7b 0a 20 20 65 78 65  pkey-6.4 {.  exe
2240: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2250: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
2260: 45 20 61 3e 3d 32 30 0a 20 20 7d 0a 7d 20 7b 32  E a>=20.  }.} {2
2270: 30 20 62 2d 32 30 20 63 2d 32 30 20 32 32 20 62  0 b-20 c-20 22 b
2280: 2d 32 32 20 63 2d 32 32 7d 0a 0a 23 20 44 6f 20  -22 c-22}..# Do 
2290: 61 6e 20 69 6e 73 65 72 74 20 6f 66 20 76 61 6c  an insert of val
22a0: 75 65 73 20 77 69 74 68 20 74 68 65 20 63 6f 6c  ues with the col
22b0: 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 6f  umns specified o
22c0: 75 74 20 6f 66 20 6f 72 64 65 72 2e 0a 23 0a 64  ut of order..#.d
22d0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 37  o_test intpkey-7
22e0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
22f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2300: 20 74 31 28 63 2c 62 2c 61 29 20 56 41 4c 55 45   t1(c,b,a) VALUE
2310: 53 28 27 72 6f 77 27 2c 27 6e 65 77 27 2c 33 30  S('row','new',30
2320: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2330: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f  FROM t1 WHERE ro
2340: 77 69 64 3e 3d 33 30 3b 0a 20 20 7d 0a 7d 20 7b  wid>=30;.  }.} {
2350: 33 30 20 6e 65 77 20 72 6f 77 7d 0a 64 6f 5f 74  30 new row}.do_t
2360: 65 73 74 20 69 6e 74 70 6b 65 79 2d 37 2e 32 20  est intpkey-7.2 
2370: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2380: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2390: 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 3e 32  t1 WHERE rowid>2
23a0: 30 3b 0a 20 20 7d 0a 7d 20 7b 32 32 20 62 2d 32  0;.  }.} {22 b-2
23b0: 32 20 63 2d 32 32 20 33 30 20 6e 65 77 20 72 6f  2 c-22 30 new ro
23c0: 77 7d 0a 0a 23 20 44 6f 20 61 6e 20 69 6e 73 65  w}..# Do an inse
23d0: 72 74 20 66 72 6f 6d 20 61 20 73 65 6c 65 63 74  rt from a select
23e0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 64 6f   statement..#.do
23f0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e  _test intpkey-8.
2400: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2410: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2420: 20 74 32 28 78 20 49 4e 54 45 47 45 52 20 50 52   t2(x INTEGER PR
2430: 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29  IMARY KEY, y, z)
2440: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2450: 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52  O t2 SELECT * FR
2460: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
2470: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 3b  T rowid FROM t2;
2480: 0a 20 20 7d 0a 7d 20 7b 2d 34 20 30 20 35 20 36  .  }.} {-4 0 5 6
2490: 20 31 31 20 32 30 20 32 32 20 33 30 7d 0a 64 6f   11 20 22 30}.do
24a0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e  _test intpkey-8.
24b0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
24c0: 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f      SELECT x FRO
24d0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20  M t2;.  }.} {-4 
24e0: 30 20 35 20 36 20 31 31 20 32 30 20 32 32 20 33  0 5 6 11 20 22 3
24f0: 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  0}..do_test intp
2500: 6b 65 79 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63  key-9.1 {.  exec
2510: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
2520: 20 74 31 20 53 45 54 20 63 3d 27 77 77 77 27 20   t1 SET c='www' 
2530: 57 48 45 52 45 20 63 3d 27 77 6f 72 6c 64 27 3b  WHERE c='world';
2540: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
2550: 64 2c 20 61 2c 20 63 20 46 52 4f 4d 20 74 31 20  d, a, c FROM t1 
2560: 57 48 45 52 45 20 63 3d 3d 27 77 77 77 27 3b 0a  WHERE c=='www';.
2570: 20 20 7d 0a 7d 20 7b 35 20 35 20 77 77 77 20 31    }.} {5 5 www 1
2580: 31 20 31 31 20 77 77 77 7d 0a 0a 0a 23 20 43 68  1 11 www}...# Ch
2590: 65 63 6b 20 69 6e 73 65 72 74 20 6f 66 20 4e 55  eck insert of NU
25a0: 4c 4c 20 66 6f 72 20 70 72 69 6d 61 72 79 20 6b  LL for primary k
25b0: 65 79 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74  ey.#.do_test int
25c0: 70 6b 65 79 2d 31 30 2e 31 20 7b 0a 20 20 65 78  pkey-10.1 {.  ex
25d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
25e0: 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43   TABLE t2;.    C
25f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78  REATE TABLE t2(x
2600: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2610: 20 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20 20 20   KEY, y, z);.   
2620: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
2630: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 31 2c 20  VALUES(NULL, 1, 
2640: 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2);.    SELECT *
2650: 20 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20   from t2;.  }.} 
2660: 7b 31 20 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20  {1 1 2}.do_test 
2670: 69 6e 74 70 6b 65 79 2d 31 30 2e 32 20 7b 0a 20  intpkey-10.2 {. 
2680: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
2690: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
26a0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 32 2c 20 33 29  LUES(NULL, 2, 3)
26b0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 66  ;.    SELECT * f
26c0: 72 6f 6d 20 74 32 20 57 48 45 52 45 20 78 3d 32  rom t2 WHERE x=2
26d0: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 32 20 33 7d 0a  ;.  }.} {2 2 3}.
26e0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
26f0: 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.3 {.  execsql
2700: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2710: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 4e 55 4c  TO t2 SELECT NUL
2720: 4c 2c 20 7a 2c 20 79 20 46 52 4f 4d 20 74 32 3b  L, z, y FROM t2;
2730: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2740: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
2750: 31 20 32 20 32 20 32 20 33 20 33 20 32 20 31 20  1 2 2 2 3 3 2 1 
2760: 34 20 33 20 32 7d 0a 0a 66 69 6e 69 73 68 5f 74  4 3 2}..finish_t
2770: 65 73 74 0a                                      est.