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

Artifact 1f3b36bcf772597809fb445202af77d1d17bb39f:


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 32 20 32 30 30 31 2f  test,v 1.2 2001/
0230: 31 32 2f 32 32 20 31 34 3a 34 39 3a 32 36 20 64  12/22 14:49:26 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 7d 20 7b 7d 0a 64 6f  d');.  }.} {}.do
05f0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0600: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
0610: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0620: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68  M t1;.  }.} {5 h
0630: 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74  ello world}.do_t
0640: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 35 20  est intpkey-1.5 
0650: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0660: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
0670: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
0680: 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c   {5 5 hello worl
0690: 64 7d 0a 0a 23 20 41 74 74 65 6d 70 74 69 6e 67  d}..# Attempting
06a0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
06b0: 6c 69 63 61 74 65 20 70 72 69 6d 61 72 79 20 6b  licate primary k
06c0: 65 79 20 73 68 6f 75 6c 64 20 67 69 76 65 20 61  ey should give a
06d0: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 23 20 66 61   constraint.# fa
06e0: 69 6c 75 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  ilure..#.do_test
06f0: 20 69 6e 74 70 6b 65 79 2d 31 2e 36 20 7b 0a 20   intpkey-1.6 {. 
0700: 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b 65   set r [catch {e
0710: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 49 4e  xecsql {.     IN
0720: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0730: 55 45 53 28 35 2c 27 73 65 63 6f 6e 64 27 2c 27  UES(5,'second','
0740: 65 6e 74 72 79 27 29 3b 0a 20 20 7d 7d 20 6d 73  entry');.  }} ms
0750: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24  g].  lappend r $
0760: 6d 73 67 0a 7d 20 7b 31 20 7b 63 6f 6e 73 74 72  msg.} {1 {constr
0770: 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f  aint failed}}.do
0780: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0790: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
07a0: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
07b0: 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  , * FROM t1;.  }
07c0: 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f  .} {5 5 hello wo
07d0: 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  rld}.do_test int
07e0: 70 6b 65 79 2d 31 2e 38 20 7b 0a 20 20 73 65 74  pkey-1.8 {.  set
07f0: 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   r [catch {execs
0800: 71 6c 20 7b 0a 20 20 20 20 20 49 4e 53 45 52 54  ql {.     INSERT
0810: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0820: 36 2c 27 73 65 63 6f 6e 64 27 2c 27 65 6e 74 72  6,'second','entr
0830: 79 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  y');.  }} msg]. 
0840: 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a   lappend r $msg.
0850: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0860: 20 69 6e 74 70 6b 65 79 2d 31 2e 39 20 7b 0a 20   intpkey-1.9 {. 
0870: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0880: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
0890: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35  ROM t1;.  }.} {5
08a0: 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36   5 hello world 6
08b0: 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 7d   6 second entry}
08c0: 0a 0a 23 20 41 20 52 4f 57 49 44 20 69 73 20 61  ..# A ROWID is a
08d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
08e0: 65 72 61 74 65 64 20 66 6f 72 20 6e 65 77 20 72  erated for new r
08f0: 65 63 6f 72 64 73 20 74 68 61 74 20 64 6f 20 6e  ecords that do n
0900: 6f 74 20 73 70 65 63 69 66 79 0a 23 20 74 68 65  ot specify.# the
0910: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
0920: 20 6b 65 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20   key..#.do_test 
0930: 69 6e 74 70 6b 65 79 2d 31 2e 31 30 20 7b 0a 20  intpkey-1.10 {. 
0940: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
0950: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 62 2c  NSERT INTO t1(b,
0960: 63 29 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  c) VALUES('one',
0970: 27 74 77 6f 27 29 3b 0a 20 20 20 20 53 45 4c 45  'two');.    SELE
0980: 43 54 20 62 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT b FROM t1 ORD
0990: 45 52 20 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b  ER BY b;.  }.} {
09a0: 68 65 6c 6c 6f 20 6f 6e 65 20 73 65 63 6f 6e 64  hello one second
09b0: 7d 0a 0a 23 20 54 72 79 20 74 6f 20 63 68 61 6e  }..# Try to chan
09c0: 67 65 20 74 68 65 20 52 4f 57 49 44 20 66 6f 72  ge the ROWID for
09d0: 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 2e 0a   the new entry..
09e0: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
09f0: 79 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63 73  y-1.11 {.  execs
0a00: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
0a10: 74 31 20 53 45 54 20 61 3d 37 20 57 48 45 52 45  t1 SET a=7 WHERE
0a20: 20 62 3d 27 6f 6e 65 27 3b 0a 20 20 20 20 53 45   b='one';.    SE
0a30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
0a40: 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77    }.} {5 hello w
0a50: 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e  orld 6 second en
0a60: 74 72 79 20 37 20 6f 6e 65 20 74 77 6f 7d 0a 0a  try 7 one two}..
0a70: 23 20 4d 61 6b 65 20 73 75 72 65 20 53 45 4c 45  # Make sure SELE
0a80: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  CT statements ar
0a90: 65 20 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  e able to use th
0aa0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  e primary key co
0ab0: 6c 75 6d 6e 0a 23 20 61 73 20 61 6e 20 69 6e 64  lumn.# as an ind
0ac0: 65 78 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e  ex..#.do_test in
0ad0: 74 70 6b 65 79 2d 31 2e 31 32 20 7b 0a 20 20 65  tpkey-1.12 {.  e
0ae0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0af0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
0b00: 45 52 45 20 61 3d 3d 37 3b 0a 20 20 7d 0a 7d 20  ERE a==7;.  }.} 
0b10: 7b 37 20 6f 6e 65 20 74 77 6f 7d 0a 0a 23 20 54  {7 one two}..# T
0b20: 72 79 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  ry to insert a n
0b30: 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65  on-integer value
0b40: 20 69 6e 74 6f 20 74 68 65 20 70 72 69 6d 61 72   into the primar
0b50: 79 20 6b 65 79 20 66 69 65 6c 64 2e 20 20 54 68  y key field.  Th
0b60: 69 73 0a 23 20 73 68 6f 75 6c 64 20 72 65 73 75  is.# should resu
0b70: 6c 74 20 69 6e 20 61 20 64 61 74 61 20 74 79 70  lt in a data typ
0b80: 65 20 6d 69 73 6d 61 74 63 68 2e 0a 23 0a 64 6f  e mismatch..#.do
0b90: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0ba0: 31 33 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61  13 {.  set r [ca
0bb0: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20  tch {execsql {. 
0bc0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0bd0: 31 20 56 41 4c 55 45 53 28 27 78 27 2c 27 79 27  1 VALUES('x','y'
0be0: 2c 27 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d  ,'z');.  }} msg]
0bf0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73  .  lappend r $ms
0c00: 67 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65  g.} {1 {datatype
0c10: 20 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74   mismatch}}.do_t
0c20: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 34  est intpkey-1.14
0c30: 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63   {.  set r [catc
0c40: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0c50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0c60: 56 41 4c 55 45 53 28 33 2e 34 2c 27 79 27 2c 27  VALUES(3.4,'y','
0c70: 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  z');.  }} msg]. 
0c80: 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a   lappend r $msg.
0c90: 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20 6d  } {1 {datatype m
0ca0: 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73  ismatch}}.do_tes
0cb0: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 35 20 7b  t intpkey-1.15 {
0cc0: 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20  .  set r [catch 
0cd0: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49  {execsql {.    I
0ce0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0cf0: 4c 55 45 53 28 2d 33 2c 27 79 27 2c 27 7a 27 29  LUES(-3,'y','z')
0d00: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
0d10: 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b  ppend r $msg.} {
0d20: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  0 {}}.do_test in
0d30: 74 70 6b 65 79 2d 31 2e 31 36 20 7b 0a 20 20 65  tpkey-1.16 {.  e
0d40: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
0d50: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 2d 33 20   FROM t1}.} {-3 
0d60: 79 20 7a 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c  y z 5 hello worl
0d70: 64 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  d 6 second entry
0d80: 20 37 20 6f 6e 65 20 74 77 6f 7d 0a 0a 23 23 23   7 one two}..###
0d90: 23 20 49 4e 44 49 43 45 53 0a 23 20 43 68 65 63  # INDICES.# Chec
0da0: 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69  k to make sure i
0db0: 6e 64 69 63 65 73 20 77 6f 72 6b 20 63 6f 72 72  ndices work corr
0dc0: 65 63 74 6c 79 20 77 69 74 68 20 69 6e 74 65 67  ectly with integ
0dd0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 0a  er primary keys.
0de0: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
0df0: 79 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  y-2.1 {.  execsq
0e00: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49  l {.    CREATE I
0e10: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29  NDEX i1 ON t1(b)
0e20: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0e30: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d  ROM t1 WHERE b==
0e40: 27 79 27 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79 20  'y'.  }.} {-3 y 
0e50: 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  z}.do_test intpk
0e60: 65 79 2d 32 2e 31 2e 31 20 7b 0a 20 20 65 78 65  ey-2.1.1 {.  exe
0e70: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0e80: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
0e90: 45 20 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f 77  E b=='y' AND row
0ea0: 69 64 3c 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79  id<0.  }.} {-3 y
0eb0: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
0ec0: 6b 65 79 2d 32 2e 31 2e 32 20 7b 0a 20 20 65 78  key-2.1.2 {.  ex
0ed0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0ee0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
0ef0: 52 45 20 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f  RE b=='y' AND ro
0f00: 77 69 64 3c 30 20 41 4e 44 20 72 6f 77 69 64 3e  wid<0 AND rowid>
0f10: 3d 2d 32 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79  =-20.  }.} {-3 y
0f20: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
0f30: 6b 65 79 2d 32 2e 31 2e 33 20 7b 0a 20 20 65 78  key-2.1.3 {.  ex
0f40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0f50: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
0f60: 52 45 20 62 3e 3d 27 79 27 0a 20 20 7d 0a 7d 20  RE b>='y'.  }.} 
0f70: 7b 2d 33 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74  {-3 y z}.do_test
0f80: 20 69 6e 74 70 6b 65 79 2d 32 2e 31 2e 34 20 7b   intpkey-2.1.4 {
0f90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0fa0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0fb0: 31 20 57 48 45 52 45 20 62 3e 3d 27 79 27 20 41  1 WHERE b>='y' A
0fc0: 4e 44 20 72 6f 77 69 64 3c 31 30 0a 20 20 7d 0a  ND rowid<10.  }.
0fd0: 7d 20 7b 2d 33 20 79 20 7a 7d 0a 64 6f 5f 74 65  } {-3 y z}.do_te
0fe0: 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 32 20 7b  st intpkey-2.2 {
0ff0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1000: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61   UPDATE t1 SET a
1010: 3d 38 20 57 48 45 52 45 20 62 3d 3d 27 79 27 3b  =8 WHERE b=='y';
1020: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1030: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27  OM t1 WHERE b=='
1040: 79 27 3b 0a 20 20 7d 0a 7d 20 7b 38 20 79 20 7a  y';.  }.} {8 y z
1050: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1060: 79 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  y-2.3 {.  execsq
1070: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
1080: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b  owid, * FROM t1;
1090: 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c  .  }.} {5 5 hell
10a0: 6f 20 77 6f 72 6c 64 20 36 20 36 20 73 65 63 6f  o world 6 6 seco
10b0: 6e 64 20 65 6e 74 72 79 20 37 20 37 20 6f 6e 65  nd entry 7 7 one
10c0: 20 74 77 6f 20 38 20 38 20 79 20 7a 7d 0a 64 6f   two 8 8 y z}.do
10d0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e  _test intpkey-2.
10e0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
10f0: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
1100: 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , * FROM t1 WHER
1110: 45 20 62 3c 27 73 65 63 6f 6e 64 27 0a 20 20 7d  E b<'second'.  }
1120: 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f  .} {5 5 hello wo
1130: 72 6c 64 20 37 20 37 20 6f 6e 65 20 74 77 6f 7d  rld 7 7 one two}
1140: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1150: 2d 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73  -2.4.1 {.  execs
1160: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1170: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
1180: 20 57 48 45 52 45 20 27 73 65 63 6f 6e 64 27 3e   WHERE 'second'>
1190: 62 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c  b.  }.} {5 5 hel
11a0: 6c 6f 20 77 6f 72 6c 64 20 37 20 37 20 6f 6e 65  lo world 7 7 one
11b0: 20 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e   two}.do_test in
11c0: 74 70 6b 65 79 2d 32 2e 34 2e 32 20 7b 0a 20 20  tpkey-2.4.2 {.  
11d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
11e0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
11f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 38 3e 72 6f  OM t1 WHERE 8>ro
1200: 77 69 64 20 41 4e 44 20 27 73 65 63 6f 6e 64 27  wid AND 'second'
1210: 3e 62 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65  >b.  }.} {5 5 he
1220: 6c 6c 6f 20 77 6f 72 6c 64 20 37 20 37 20 6f 6e  llo world 7 7 on
1230: 65 20 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69  e two}.do_test i
1240: 6e 74 70 6b 65 79 2d 32 2e 34 2e 33 20 7b 0a 20  ntpkey-2.4.3 {. 
1250: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1260: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
1270: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 38 3e 72  ROM t1 WHERE 8>r
1280: 6f 77 69 64 20 41 4e 44 20 27 73 65 63 6f 6e 64  owid AND 'second
1290: 27 3e 62 20 41 4e 44 20 30 3c 72 6f 77 69 64 0a  '>b AND 0<rowid.
12a0: 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f    }.} {5 5 hello
12b0: 20 77 6f 72 6c 64 20 37 20 37 20 6f 6e 65 20 74   world 7 7 one t
12c0: 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  wo}.do_test intp
12d0: 6b 65 79 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63  key-2.5 {.  exec
12e0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
12f0: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
1300: 31 20 57 48 45 52 45 20 62 3e 27 61 27 0a 20 20  1 WHERE b>'a'.  
1310: 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77  }.} {5 5 hello w
1320: 6f 72 6c 64 20 37 20 37 20 6f 6e 65 20 74 77 6f  orld 7 7 one two
1330: 20 36 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72   6 6 second entr
1340: 79 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65  y 8 8 y z}.do_te
1350: 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 36 20 7b  st intpkey-2.6 {
1360: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1370: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
1380: 57 48 45 52 45 20 72 6f 77 69 64 3d 37 3b 0a 20  WHERE rowid=7;. 
1390: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
13a0: 20 74 31 20 57 48 45 52 45 20 62 3e 27 61 27 3b   t1 WHERE b>'a';
13b0: 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20  .  }.} {5 hello 
13c0: 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65  world 6 second e
13d0: 6e 74 72 79 20 38 20 79 20 7a 7d 0a 64 6f 5f 74  ntry 8 y z}.do_t
13e0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 37 20  est intpkey-2.7 
13f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1400: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
1410: 61 3d 2d 34 20 57 48 45 52 45 20 72 6f 77 69 64  a=-4 WHERE rowid
1420: 3d 38 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  =8;.    SELECT *
1430: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
1440: 3e 27 61 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68  >'a';.  }.} {5 h
1450: 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63  ello world 6 sec
1460: 6f 6e 64 20 65 6e 74 72 79 20 2d 34 20 79 20 7a  ond entry -4 y z
1470: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1480: 79 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  y-2.7 {.  execsq
1490: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
14a0: 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b   FROM t1.  }.} {
14b0: 2d 34 20 79 20 7a 20 35 20 68 65 6c 6c 6f 20 77  -4 y z 5 hello w
14c0: 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e  orld 6 second en
14d0: 74 72 79 7d 0a 0a 23 20 44 6f 20 61 6e 20 53 51  try}..# Do an SQ
14e0: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 70  L statement.  Ap
14f0: 70 65 6e 64 20 74 68 65 20 73 65 61 72 63 68 20  pend the search 
1500: 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 65 6e 64  count to the end
1510: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2e 0a   of the result..
1520: 23 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73 71 6c  #.proc count sql
1530: 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74   {.  set ::sqlit
1540: 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30  e_search_count 0
1550: 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61  .  return [conca
1560: 74 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c 5d  t [execsql $sql]
1570: 20 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72 63   $::sqlite_searc
1580: 68 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 43 72  h_count].}..# Cr
1590: 65 61 74 65 20 69 6e 64 69 63 65 73 20 74 68 61  eate indices tha
15a0: 74 20 69 6e 63 6c 75 64 65 20 74 68 65 20 69 6e  t include the in
15b0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
15c0: 79 20 61 73 20 6f 6e 65 20 6f 66 20 74 68 65 69  y as one of thei
15d0: 72 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64  r.# columns..#.d
15e0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33  o_test intpkey-3
15f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1600: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
1610: 58 20 69 32 20 4f 4e 20 74 31 28 61 29 3b 0a 20  X i2 ON t1(a);. 
1620: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
1630: 69 6e 74 70 6b 65 79 2d 33 2e 32 20 7b 0a 20 20  intpkey-3.2 {.  
1640: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1650: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1660: 52 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 35  RE a=5;.  }.} {5
1670: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a   hello world 0}.
1680: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1690: 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  3.3 {.  count {.
16a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
16b0: 4d 20 74 31 20 57 48 45 52 45 20 61 3e 34 20 41  M t1 WHERE a>4 A
16c0: 4e 44 20 61 3c 36 3b 0a 20 20 7d 0a 7d 20 7b 35  ND a<6;.  }.} {5
16d0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 32 7d 0a   hello world 2}.
16e0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
16f0: 33 2e 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  3.4 {.  count {.
1700: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1710: 4d 20 74 31 20 57 48 45 52 45 20 62 3e 3d 27 68  M t1 WHERE b>='h
1720: 65 6c 6c 6f 27 20 41 4e 44 20 62 3c 27 68 65 6c  ello' AND b<'hel
1730: 6c 6f 32 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68  lo2';.  }.} {5 h
1740: 65 6c 6c 6f 20 77 6f 72 6c 64 20 33 7d 0a 64 6f  ello world 3}.do
1750: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e  _test intpkey-3.
1760: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
1770: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1780: 20 69 33 20 4f 4e 20 74 31 28 63 2c 61 29 3b 0a   i3 ON t1(c,a);.
1790: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
17a0: 20 69 6e 74 70 6b 65 79 2d 33 2e 36 20 7b 0a 20   intpkey-3.6 {. 
17b0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
17c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
17d0: 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27 3b 0a  ERE c=='world';.
17e0: 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77    }.} {5 hello w
17f0: 6f 72 6c 64 20 33 7d 0a 64 6f 5f 74 65 73 74 20  orld 3}.do_test 
1800: 69 6e 74 70 6b 65 79 2d 33 2e 37 20 7b 0a 20 20  intpkey-3.7 {.  
1810: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
1820: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
1830: 31 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72 6c 64  1,'hello','world
1840: 27 29 7d 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  ')}.  count {.  
1850: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1860: 74 31 20 57 48 45 52 45 20 63 3d 3d 27 77 6f 72  t1 WHERE c=='wor
1870: 6c 64 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65  ld';.  }.} {5 he
1880: 6c 6c 6f 20 77 6f 72 6c 64 20 31 31 20 68 65 6c  llo world 11 hel
1890: 6c 6f 20 77 6f 72 6c 64 20 35 7d 0a 64 6f 5f 74  lo world 5}.do_t
18a0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 38 20  est intpkey-3.8 
18b0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
18c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
18d0: 20 57 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64   WHERE c=='world
18e0: 27 20 41 4e 44 20 61 3e 37 3b 0a 20 20 7d 0a 7d  ' AND a>7;.  }.}
18f0: 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64   {11 hello world
1900: 20 35 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   5}.do_test intp
1910: 6b 65 79 2d 33 2e 39 20 7b 0a 20 20 63 6f 75 6e  key-3.9 {.  coun
1920: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1930: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 37   FROM t1 WHERE 7
1940: 3c 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65  <a;.  }.} {11 he
1950: 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 0a 23 20  llo world 1}..# 
1960: 54 65 73 74 20 69 6e 65 71 75 61 6c 69 74 79 20  Test inequality 
1970: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 69  constraints on i
1980: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
1990: 65 79 73 20 61 6e 64 20 72 6f 77 69 64 73 0a 23  eys and rowids.#
19a0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
19b0: 2d 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -4.1 {.  count {
19c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
19d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d 72  OM t1 WHERE 11=r
19e0: 6f 77 69 64 0a 20 20 7d 0a 7d 20 7b 31 31 20 68  owid.  }.} {11 h
19f0: 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f  ello world 0}.do
1a00: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e  _test intpkey-4.
1a10: 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  2 {.  count {.  
1a20: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1a30: 74 31 20 57 48 45 52 45 20 31 31 3d 72 6f 77 69  t1 WHERE 11=rowi
1a40: 64 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27  d AND b=='hello'
1a50: 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f  .  }.} {11 hello
1a60: 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73   world 0}.do_tes
1a70: 74 20 69 6e 74 70 6b 65 79 2d 34 2e 33 20 7b 0a  t intpkey-4.3 {.
1a80: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1a90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1aa0: 48 45 52 45 20 31 31 3d 72 6f 77 69 64 20 41 4e  HERE 11=rowid AN
1ab0: 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 20 41 4e 44  D b=='hello' AND
1ac0: 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 3b 0a   c IS NOT NULL;.
1ad0: 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20    }.} {11 hello 
1ae0: 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74  world 0}.do_test
1af0: 20 69 6e 74 70 6b 65 79 2d 34 2e 34 20 7b 0a 20   intpkey-4.4 {. 
1b00: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
1b10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1b20: 45 52 45 20 72 6f 77 69 64 3d 3d 31 31 0a 20 20  ERE rowid==11.  
1b30: 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f  }.} {11 hello wo
1b40: 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69  rld 0}.do_test i
1b50: 6e 74 70 6b 65 79 2d 34 2e 35 20 7b 0a 20 20 63  ntpkey-4.5 {.  c
1b60: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1b70: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1b80: 45 20 6f 69 64 3d 3d 31 31 20 41 4e 44 20 62 3d  E oid==11 AND b=
1b90: 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d 20 7b  ='hello'.  }.} {
1ba0: 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30  11 hello world 0
1bb0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1bc0: 79 2d 34 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20  y-4.6 {.  count 
1bd0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1be0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d  ROM t1 WHERE a==
1bf0: 31 31 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f  11 AND b=='hello
1c00: 27 20 41 4e 44 20 63 20 49 53 20 4e 4f 54 20 4e  ' AND c IS NOT N
1c10: 55 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68  ULL;.  }.} {11 h
1c20: 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 0a 64  ello world 0}..d
1c30: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34  o_test intpkey-4
1c40: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .7 {.  count {. 
1c50: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1c60: 20 74 31 20 57 48 45 52 45 20 38 3c 72 6f 77 69   t1 WHERE 8<rowi
1c70: 64 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  d;.  }.} {11 hel
1c80: 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 64 6f 5f 74  lo world 1}.do_t
1c90: 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 38 20  est intpkey-4.8 
1ca0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1cb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1cc0: 20 57 48 45 52 45 20 38 3c 72 6f 77 69 64 20 41   WHERE 8<rowid A
1cd0: 4e 44 20 31 31 3e 3d 6f 69 64 3b 0a 20 20 7d 0a  ND 11>=oid;.  }.
1ce0: 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c  } {11 hello worl
1cf0: 64 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  d 1}.do_test int
1d00: 70 6b 65 79 2d 34 2e 39 20 7b 0a 20 20 63 6f 75  pkey-4.9 {.  cou
1d10: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1d20: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1d30: 31 31 3c 3d 5f 72 6f 77 69 64 5f 20 41 4e 44 20  11<=_rowid_ AND 
1d40: 31 32 3e 3d 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31  12>=a;.  }.} {11
1d50: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a   hello world 1}.
1d60: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1d70: 34 2e 31 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  4.10 {.  count {
1d80: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1d90: 4f 4d 20 74 31 20 57 48 45 52 45 20 30 3e 3d 5f  OM t1 WHERE 0>=_
1da0: 72 6f 77 69 64 5f 3b 0a 20 20 7d 0a 7d 20 7b 2d  rowid_;.  }.} {-
1db0: 34 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73 74  4 y z 1}.do_test
1dc0: 20 69 6e 74 70 6b 65 79 2d 34 2e 31 31 20 7b 0a   intpkey-4.11 {.
1dd0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1de0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1df0: 48 45 52 45 20 61 3c 30 3b 0a 20 20 7d 0a 7d 20  HERE a<0;.  }.} 
1e00: 7b 2d 34 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65  {-4 y z 1}.do_te
1e10: 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31 32 20  st intpkey-4.12 
1e20: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1e30: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1e40: 20 57 48 45 52 45 20 61 3c 30 20 41 4e 44 20 61   WHERE a<0 AND a
1e50: 3e 31 30 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a  >10;.  }.} {1}..
1e60: 23 20 4d 61 6b 65 20 73 75 72 65 20 69 74 20 69  # Make sure it i
1e70: 73 20 4f 4b 20 74 6f 20 69 6e 73 65 72 74 20 61  s OK to insert a
1e80: 20 72 6f 77 69 64 20 6f 66 20 30 0a 23 0a 64 6f   rowid of 0.#.do
1e90: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 35 2e  _test intpkey-5.
1ea0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1eb0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1ec0: 74 31 20 56 41 4c 55 45 53 28 30 2c 27 7a 65 72  t1 VALUES(0,'zer
1ed0: 6f 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d  o','entry');.  }
1ee0: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1ef0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1f00: 57 48 45 52 45 20 61 3d 30 3b 0a 20 20 7d 0a 7d  WHERE a=0;.  }.}
1f10: 20 7b 30 20 7a 65 72 6f 20 65 6e 74 72 79 20 30   {0 zero entry 0
1f20: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1f30: 79 3d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  y=5.2 {.  execsq
1f40: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
1f50: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 31 0a  owid, a FROM t1.
1f60: 20 20 7d 0a 7d 20 7b 2d 34 20 2d 34 20 30 20 30    }.} {-4 -4 0 0
1f70: 20 35 20 35 20 36 20 36 20 31 31 20 31 31 7d 0a   5 5 6 6 11 11}.
1f80: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.