/ Hex Artifact Content
Login

Artifact ac71107a49a06492b69b82aafaf225400598d3c8:


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 34 20 32 30 30 37  test,v 1.24 2007
0230: 2f 31 31 2f 32 39 20 31 37 3a 34 33 3a 32 38 20  /11/29 17:43:28 
0240: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0250: 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  $..set testdir [
0260: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0270: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0280: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0290: 0a 23 20 43 72 65 61 74 65 20 61 20 74 61 62 6c  .# Create a tabl
02a0: 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79  e with a primary
02b0: 20 6b 65 79 20 61 6e 64 20 61 20 64 61 74 61 74   key and a datat
02c0: 79 70 65 20 6f 74 68 65 72 20 74 68 61 6e 0a 23  ype other than.#
02d0: 20 69 6e 74 65 67 65 72 0a 23 0a 64 6f 5f 74 65   integer.#.do_te
02e0: 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 30 20 7b  st intpkey-1.0 {
02f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0300: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0310: 28 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  (a TEXT PRIMARY 
0320: 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 7d 0a  KEY, b, c);.  }.
0330: 7d 20 7b 7d 0a 0a 23 20 54 68 65 72 65 20 73 68  } {}..# There sh
0340: 6f 75 6c 64 20 62 65 20 61 6e 20 69 6e 64 65 78  ould be an index
0350: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0360: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
0370: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
0380: 65 79 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  ey-1.1 {.  execs
0390: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
03a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
03b0: 5f 6d 61 73 74 65 72 0a 20 20 20 20 57 48 45 52  _master.    WHER
03c0: 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 20 41  E type='index' A
03d0: 4e 44 20 74 62 6c 5f 6e 61 6d 65 3d 27 74 31 27  ND tbl_name='t1'
03e0: 3b 0a 20 20 7d 0a 7d 20 7b 73 71 6c 69 74 65 5f  ;.  }.} {sqlite_
03f0: 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f 31 7d 0a  autoindex_t1_1}.
0400: 0a 23 20 4e 6f 77 20 63 72 65 61 74 65 20 61 20  .# Now create a 
0410: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 69 6e  table with an in
0420: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
0430: 79 20 61 6e 64 20 76 65 72 69 66 79 20 74 68 61  y and verify tha
0440: 74 0a 23 20 74 68 65 72 65 20 69 73 20 6e 6f 20  t.# there is no 
0450: 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78  associated index
0460: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  ..#.do_test intp
0470: 6b 65 79 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  key-1.2 {.  exec
0480: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
0490: 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45  ABLE t1;.    CRE
04a0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49  ATE TABLE t1(a I
04b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
04c0: 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 53  EY, b, c);.    S
04d0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
04e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20 20  sqlite_master.  
04f0: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
0500: 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e  index' AND tbl_n
0510: 61 6d 65 3d 27 74 31 27 3b 0a 20 20 7d 0a 7d 20  ame='t1';.  }.} 
0520: 7b 7d 0a 0a 23 20 49 6e 73 65 72 74 20 73 6f 6d  {}..# Insert som
0530: 65 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 74  e records into t
0540: 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 20 20 53  he new table.  S
0550: 70 65 63 69 66 79 20 74 68 65 20 70 72 69 6d 61  pecify the prima
0560: 72 79 20 6b 65 79 0a 23 20 61 6e 64 20 76 65 72  ry key.# and ver
0570: 69 66 79 20 74 68 61 74 20 74 68 65 20 6b 65 79  ify that the key
0580: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
0590: 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 0a 23  record number..#
05a0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
05b0: 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.3 {.  execsql
05c0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
05d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 2c 27  TO t1 VALUES(5,'
05e0: 68 65 6c 6c 6f 27 2c 27 77 6f 72 6c 64 27 29 3b  hello','world');
05f0: 0a 20 20 7d 0a 20 20 64 62 20 6c 61 73 74 5f 69  .  }.  db last_i
0600: 6e 73 65 72 74 5f 72 6f 77 69 64 0a 7d 20 7b 35  nsert_rowid.} {5
0610: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
0620: 79 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  y-1.4 {.  execsq
0630: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0640: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
0650: 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a  {5 hello world}.
0660: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
0670: 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.5 {.  execsql 
0680: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
0690: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  id, * FROM t1;. 
06a0: 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20   }.} {5 5 hello 
06b0: 77 6f 72 6c 64 7d 0a 0a 23 20 41 74 74 65 6d 70  world}..# Attemp
06c0: 74 69 6e 67 20 74 6f 20 69 6e 73 65 72 74 20 61  ting to insert a
06d0: 20 64 75 70 6c 69 63 61 74 65 20 70 72 69 6d 61   duplicate prima
06e0: 72 79 20 6b 65 79 20 73 68 6f 75 6c 64 20 67 69  ry key should gi
06f0: 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
0700: 23 20 66 61 69 6c 75 72 65 2e 0a 23 0a 64 6f 5f  # failure..#.do_
0710: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 36  test intpkey-1.6
0720: 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63   {.  set r [catc
0730: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0740: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0750: 20 56 41 4c 55 45 53 28 35 2c 27 73 65 63 6f 6e   VALUES(5,'secon
0760: 64 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d  d','entry');.  }
0770: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0780: 20 72 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 55 4e   r $msg.} {1 {UN
0790: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
07a0: 66 61 69 6c 65 64 3a 20 74 31 2e 61 7d 7d 0a 64  failed: t1.a}}.d
07b0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  o_test intpkey-1
07c0: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
07d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
07e0: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  d, * FROM t1;.  
07f0: 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77  }.} {5 5 hello w
0800: 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  orld}.do_test in
0810: 74 70 6b 65 79 2d 31 2e 38 20 7b 0a 20 20 73 65  tpkey-1.8 {.  se
0820: 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t r [catch {exec
0830: 73 71 6c 20 7b 0a 20 20 20 20 20 49 4e 53 45 52  sql {.     INSER
0840: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0850: 28 36 2c 27 73 65 63 6f 6e 64 27 2c 27 65 6e 74  (6,'second','ent
0860: 72 79 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a  ry');.  }} msg].
0870: 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67    lappend r $msg
0880: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0890: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 38 2e 31 20  t intpkey-1.8.1 
08a0: 7b 0a 20 20 64 62 20 6c 61 73 74 5f 69 6e 73 65  {.  db last_inse
08b0: 72 74 5f 72 6f 77 69 64 0a 7d 20 7b 36 7d 0a 64  rt_rowid.} {6}.d
08c0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  o_test intpkey-1
08d0: 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .9 {.  execsql {
08e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
08f0: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  d, * FROM t1;.  
0900: 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77  }.} {5 5 hello w
0910: 6f 72 6c 64 20 36 20 36 20 73 65 63 6f 6e 64 20  orld 6 6 second 
0920: 65 6e 74 72 79 7d 0a 0a 23 20 41 20 52 4f 57 49  entry}..# A ROWI
0930: 44 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  D is automatical
0940: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  ly generated for
0950: 20 6e 65 77 20 72 65 63 6f 72 64 73 20 74 68 61   new records tha
0960: 74 20 64 6f 20 6e 6f 74 20 73 70 65 63 69 66 79  t do not specify
0970: 0a 23 20 74 68 65 20 69 6e 74 65 67 65 72 20 70  .# the integer p
0980: 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64 6f  rimary key..#.do
0990: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
09a0: 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  10 {.  execsql {
09b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
09c0: 20 74 31 28 62 2c 63 29 20 56 41 4c 55 45 53 28   t1(b,c) VALUES(
09d0: 27 6f 6e 65 27 2c 27 74 77 6f 27 29 3b 0a 20 20  'one','two');.  
09e0: 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20    SELECT b FROM 
09f0: 74 31 20 4f 52 44 45 52 20 42 59 20 62 3b 0a 20  t1 ORDER BY b;. 
0a00: 20 7d 0a 7d 20 7b 68 65 6c 6c 6f 20 6f 6e 65 20   }.} {hello one 
0a10: 73 65 63 6f 6e 64 7d 0a 0a 23 20 54 72 79 20 74  second}..# Try t
0a20: 6f 20 63 68 61 6e 67 65 20 74 68 65 20 52 4f 57  o change the ROW
0a30: 49 44 20 66 6f 72 20 74 68 65 20 6e 65 77 20 65  ID for the new e
0a40: 6e 74 72 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ntry..#.do_test 
0a50: 69 6e 74 70 6b 65 79 2d 31 2e 31 31 20 7b 0a 20  intpkey-1.11 {. 
0a60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
0a70: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 34  PDATE t1 SET a=4
0a80: 20 57 48 45 52 45 20 62 3d 27 6f 6e 65 27 3b 0a   WHERE b='one';.
0a90: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0aa0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 6f  M t1;.  }.} {4 o
0ab0: 6e 65 20 74 77 6f 20 35 20 68 65 6c 6c 6f 20 77  ne two 5 hello w
0ac0: 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20 65 6e  orld 6 second en
0ad0: 74 72 79 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  try}..# Make sur
0ae0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
0af0: 6e 74 73 20 61 72 65 20 61 62 6c 65 20 74 6f 20  nts are able to 
0b00: 75 73 65 20 74 68 65 20 70 72 69 6d 61 72 79 20  use the primary 
0b10: 6b 65 79 20 63 6f 6c 75 6d 6e 0a 23 20 61 73 20  key column.# as 
0b20: 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74  an index..#.do_t
0b30: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 32  est intpkey-1.12
0b40: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0b50: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0b60: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d 34  OM t1 WHERE a==4
0b70: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 6f 6e 65 20 74  ;.  }.} {4 one t
0b80: 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  wo}.do_test intp
0b90: 6b 65 79 2d 31 2e 31 32 2e 32 20 7b 0a 20 20 65  key-1.12.2 {.  e
0ba0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 45 58 50  xecsql {.    EXP
0bb0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 0a  LAIN QUERY PLAN.
0bc0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0bd0: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d 34 3b  M t1 WHERE a==4;
0be0: 0a 20 20 7d 0a 7d 20 7b 2f 53 45 41 52 43 48 20  .  }.} {/SEARCH 
0bf0: 54 41 42 4c 45 20 74 31 20 2f 7d 0a 0a 23 20 54  TABLE t1 /}..# T
0c00: 72 79 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  ry to insert a n
0c10: 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65  on-integer value
0c20: 20 69 6e 74 6f 20 74 68 65 20 70 72 69 6d 61 72   into the primar
0c30: 79 20 6b 65 79 20 66 69 65 6c 64 2e 20 20 54 68  y key field.  Th
0c40: 69 73 0a 23 20 73 68 6f 75 6c 64 20 72 65 73 75  is.# should resu
0c50: 6c 74 20 69 6e 20 61 20 64 61 74 61 20 74 79 70  lt in a data typ
0c60: 65 20 6d 69 73 6d 61 74 63 68 2e 0a 23 0a 64 6f  e mismatch..#.do
0c70: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0c80: 31 33 2e 31 20 7b 0a 20 20 73 65 74 20 72 20 5b  13.1 {.  set r [
0c90: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0ca0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0cb0: 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c 27   t1 VALUES('x','
0cc0: 79 27 2c 27 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73  y','z');.  }} ms
0cd0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24  g].  lappend r $
0ce0: 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79  msg.} {1 {dataty
0cf0: 70 65 20 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f  pe mismatch}}.do
0d00: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0d10: 31 33 2e 32 20 7b 0a 20 20 73 65 74 20 72 20 5b  13.2 {.  set r [
0d20: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0d30: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0d40: 20 74 31 20 56 41 4c 55 45 53 28 27 27 2c 27 79   t1 VALUES('','y
0d50: 27 2c 27 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73 67  ','z');.  }} msg
0d60: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6d  ].  lappend r $m
0d70: 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70  sg.} {1 {datatyp
0d80: 65 20 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f  e mismatch}}.do_
0d90: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31  test intpkey-1.1
0da0: 34 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74  4 {.  set r [cat
0db0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
0dc0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0dd0: 20 56 41 4c 55 45 53 28 33 2e 34 2c 27 79 27 2c   VALUES(3.4,'y',
0de0: 27 7a 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a  'z');.  }} msg].
0df0: 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67    lappend r $msg
0e00: 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20  .} {1 {datatype 
0e10: 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65  mismatch}}.do_te
0e20: 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 35 20  st intpkey-1.15 
0e30: 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68  {.  set r [catch
0e40: 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   {execsql {.    
0e50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0e60: 41 4c 55 45 53 28 2d 33 2c 27 79 27 2c 27 7a 27  ALUES(-3,'y','z'
0e70: 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  );.  }} msg].  l
0e80: 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20  append r $msg.} 
0e90: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  {0 {}}.do_test i
0ea0: 6e 74 70 6b 65 79 2d 31 2e 31 36 20 7b 0a 20 20  ntpkey-1.16 {.  
0eb0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0ec0: 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 2d 33  * FROM t1}.} {-3
0ed0: 20 79 20 7a 20 34 20 6f 6e 65 20 74 77 6f 20 35   y z 4 one two 5
0ee0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73   hello world 6 s
0ef0: 65 63 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a 23 23  econd entry}..##
0f00: 23 23 20 49 4e 44 49 43 45 53 0a 23 20 43 68 65  ## INDICES.# Che
0f10: 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ck to make sure 
0f20: 69 6e 64 69 63 65 73 20 77 6f 72 6b 20 63 6f 72  indices work cor
0f30: 72 65 63 74 6c 79 20 77 69 74 68 20 69 6e 74 65  rectly with inte
0f40: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ger primary keys
0f50: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
0f60: 65 79 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  ey-2.1 {.  execs
0f70: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0f80: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
0f90: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
0fa0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d  FROM t1 WHERE b=
0fb0: 3d 27 79 27 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79  ='y'.  }.} {-3 y
0fc0: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
0fd0: 6b 65 79 2d 32 2e 31 2e 31 20 7b 0a 20 20 65 78  key-2.1.1 {.  ex
0fe0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0ff0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1000: 52 45 20 62 3d 3d 27 79 27 20 41 4e 44 20 72 6f  RE b=='y' AND ro
1010: 77 69 64 3c 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20  wid<0.  }.} {-3 
1020: 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  y z}.do_test int
1030: 70 6b 65 79 2d 32 2e 31 2e 32 20 7b 0a 20 20 65  pkey-2.1.2 {.  e
1040: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1050: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1060: 45 52 45 20 62 3d 3d 27 79 27 20 41 4e 44 20 72  ERE b=='y' AND r
1070: 6f 77 69 64 3c 30 20 41 4e 44 20 72 6f 77 69 64  owid<0 AND rowid
1080: 3e 3d 2d 32 30 0a 20 20 7d 0a 7d 20 7b 2d 33 20  >=-20.  }.} {-3 
1090: 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  y z}.do_test int
10a0: 70 6b 65 79 2d 32 2e 31 2e 33 20 7b 0a 20 20 65  pkey-2.1.3 {.  e
10b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
10c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
10d0: 45 52 45 20 62 3e 3d 27 79 27 0a 20 20 7d 0a 7d  ERE b>='y'.  }.}
10e0: 20 7b 2d 33 20 79 20 7a 7d 0a 64 6f 5f 74 65 73   {-3 y z}.do_tes
10f0: 74 20 69 6e 74 70 6b 65 79 2d 32 2e 31 2e 34 20  t intpkey-2.1.4 
1100: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1110: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1120: 74 31 20 57 48 45 52 45 20 62 3e 3d 27 79 27 20  t1 WHERE b>='y' 
1130: 41 4e 44 20 72 6f 77 69 64 3c 31 30 0a 20 20 7d  AND rowid<10.  }
1140: 0a 7d 20 7b 2d 33 20 79 20 7a 7d 0a 0a 64 6f 5f  .} {-3 y z}..do_
1150: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 32  test intpkey-2.2
1160: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1170: 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54     UPDATE t1 SET
1180: 20 61 3d 38 20 57 48 45 52 45 20 62 3d 3d 27 79   a=8 WHERE b=='y
1190: 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  ';.    SELECT * 
11a0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d  FROM t1 WHERE b=
11b0: 3d 27 79 27 3b 0a 20 20 7d 0a 7d 20 7b 38 20 79  ='y';.  }.} {8 y
11c0: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
11d0: 6b 65 79 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63  key-2.3 {.  exec
11e0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
11f0: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
1200: 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e  1;.  }.} {4 4 on
1210: 65 20 74 77 6f 20 35 20 35 20 68 65 6c 6c 6f 20  e two 5 5 hello 
1220: 77 6f 72 6c 64 20 36 20 36 20 73 65 63 6f 6e 64  world 6 6 second
1230: 20 65 6e 74 72 79 20 38 20 38 20 79 20 7a 7d 0a   entry 8 8 y z}.
1240: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1250: 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.4 {.  execsql 
1260: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
1270: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  id, * FROM t1 WH
1280: 45 52 45 20 62 3c 27 73 65 63 6f 6e 64 27 0a 20  ERE b<'second'. 
1290: 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20   }.} {5 5 hello 
12a0: 77 6f 72 6c 64 20 34 20 34 20 6f 6e 65 20 74 77  world 4 4 one tw
12b0: 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  o}.do_test intpk
12c0: 65 79 2d 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65  ey-2.4.1 {.  exe
12d0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
12e0: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
12f0: 74 31 20 57 48 45 52 45 20 27 73 65 63 6f 6e 64  t1 WHERE 'second
1300: 27 3e 62 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68  '>b.  }.} {5 5 h
1310: 65 6c 6c 6f 20 77 6f 72 6c 64 20 34 20 34 20 6f  ello world 4 4 o
1320: 6e 65 20 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20  ne two}.do_test 
1330: 69 6e 74 70 6b 65 79 2d 32 2e 34 2e 32 20 7b 0a  intpkey-2.4.2 {.
1340: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1350: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
1360: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 38 3e  FROM t1 WHERE 8>
1370: 72 6f 77 69 64 20 41 4e 44 20 27 73 65 63 6f 6e  rowid AND 'secon
1380: 64 27 3e 62 0a 20 20 7d 0a 7d 20 7b 34 20 34 20  d'>b.  }.} {4 4 
1390: 6f 6e 65 20 74 77 6f 20 35 20 35 20 68 65 6c 6c  one two 5 5 hell
13a0: 6f 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74  o world}.do_test
13b0: 20 69 6e 74 70 6b 65 79 2d 32 2e 34 2e 33 20 7b   intpkey-2.4.3 {
13c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
13d0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a   SELECT rowid, *
13e0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 38   FROM t1 WHERE 8
13f0: 3e 72 6f 77 69 64 20 41 4e 44 20 27 73 65 63 6f  >rowid AND 'seco
1400: 6e 64 27 3e 62 20 41 4e 44 20 30 3c 72 6f 77 69  nd'>b AND 0<rowi
1410: 64 0a 20 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65  d.  }.} {4 4 one
1420: 20 74 77 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77   two 5 5 hello w
1430: 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  orld}.do_test in
1440: 74 70 6b 65 79 2d 32 2e 35 20 7b 0a 20 20 65 78  tpkey-2.5 {.  ex
1450: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1460: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
1470: 20 74 31 20 57 48 45 52 45 20 62 3e 27 61 27 0a   t1 WHERE b>'a'.
1480: 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f    }.} {5 5 hello
1490: 20 77 6f 72 6c 64 20 34 20 34 20 6f 6e 65 20 74   world 4 4 one t
14a0: 77 6f 20 36 20 36 20 73 65 63 6f 6e 64 20 65 6e  wo 6 6 second en
14b0: 74 72 79 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f  try 8 8 y z}.do_
14c0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 36  test intpkey-2.6
14d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
14e0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
14f0: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 34 3b  1 WHERE rowid=4;
1500: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1510: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 27 61  OM t1 WHERE b>'a
1520: 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c  ';.  }.} {5 hell
1530: 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64  o world 6 second
1540: 20 65 6e 74 72 79 20 38 20 79 20 7a 7d 0a 64 6f   entry 8 y z}.do
1550: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e  _test intpkey-2.
1560: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
1570: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
1580: 54 20 61 3d 2d 34 20 57 48 45 52 45 20 72 6f 77  T a=-4 WHERE row
1590: 69 64 3d 38 3b 0a 20 20 20 20 53 45 4c 45 43 54  id=8;.    SELECT
15a0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
15b0: 20 62 3e 27 61 27 3b 0a 20 20 7d 0a 7d 20 7b 35   b>'a';.  }.} {5
15c0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 36 20 73   hello world 6 s
15d0: 65 63 6f 6e 64 20 65 6e 74 72 79 20 2d 34 20 79  econd entry -4 y
15e0: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
15f0: 6b 65 79 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63  key-2.7 {.  exec
1600: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1610: 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d   * FROM t1.  }.}
1620: 20 7b 2d 34 20 79 20 7a 20 35 20 68 65 6c 6c 6f   {-4 y z 5 hello
1630: 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20   world 6 second 
1640: 65 6e 74 72 79 7d 0a 0a 23 20 44 6f 20 61 6e 20  entry}..# Do an 
1650: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  SQL statement.  
1660: 41 70 70 65 6e 64 20 74 68 65 20 73 65 61 72 63  Append the searc
1670: 68 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 65  h count to the e
1680: 6e 64 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  nd of the result
1690: 2e 0a 23 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73  ..#.proc count s
16a0: 71 6c 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c  ql {.  set ::sql
16b0: 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  ite_search_count
16c0: 20 30 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e   0.  return [con
16d0: 63 61 74 20 5b 65 78 65 63 73 71 6c 20 24 73 71  cat [execsql $sq
16e0: 6c 5d 20 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61  l] $::sqlite_sea
16f0: 72 63 68 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20  rch_count].}..# 
1700: 43 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 74  Create indices t
1710: 68 61 74 20 69 6e 63 6c 75 64 65 20 74 68 65 20  hat include the 
1720: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
1730: 6b 65 79 20 61 73 20 6f 6e 65 20 6f 66 20 74 68  key as one of th
1740: 65 69 72 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23  eir.# columns..#
1750: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1760: 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.1 {.  execsql
1770: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e   {.    CREATE IN
1780: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 61 29 3b  DEX i2 ON t1(a);
1790: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
17a0: 74 20 69 6e 74 70 6b 65 79 2d 33 2e 32 20 7b 0a  t intpkey-3.2 {.
17b0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
17c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
17d0: 48 45 52 45 20 61 3d 35 3b 0a 20 20 7d 0a 7d 20  HERE a=5;.  }.} 
17e0: 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30  {5 hello world 0
17f0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1800: 79 2d 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20  y-3.3 {.  count 
1810: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1820: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 34  ROM t1 WHERE a>4
1830: 20 41 4e 44 20 61 3c 36 3b 0a 20 20 7d 0a 7d 20   AND a<6;.  }.} 
1840: 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 32  {5 hello world 2
1850: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1860: 79 2d 33 2e 34 20 7b 0a 20 20 63 6f 75 6e 74 20  y-3.4 {.  count 
1870: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1880: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 3d  ROM t1 WHERE b>=
1890: 27 68 65 6c 6c 6f 27 20 41 4e 44 20 62 3c 27 68  'hello' AND b<'h
18a0: 65 6c 6c 6f 32 27 3b 0a 20 20 7d 0a 7d 20 7b 35  ello2';.  }.} {5
18b0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 33 7d 0a   hello world 3}.
18c0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
18d0: 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.5 {.  execsql 
18e0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
18f0: 45 58 20 69 33 20 4f 4e 20 74 31 28 63 2c 61 29  EX i3 ON t1(c,a)
1900: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
1910: 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 36 20 7b  st intpkey-3.6 {
1920: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1930: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1940: 57 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27  WHERE c=='world'
1950: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f  ;.  }.} {5 hello
1960: 20 77 6f 72 6c 64 20 33 7d 0a 64 6f 5f 74 65 73   world 3}.do_tes
1970: 74 20 69 6e 74 70 6b 65 79 2d 33 2e 37 20 7b 0a  t intpkey-3.7 {.
1980: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
1990: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
19a0: 28 31 31 2c 27 68 65 6c 6c 6f 27 2c 27 77 6f 72  (11,'hello','wor
19b0: 6c 64 27 29 7d 0a 20 20 63 6f 75 6e 74 20 7b 0a  ld')}.  count {.
19c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
19d0: 4d 20 74 31 20 57 48 45 52 45 20 63 3d 3d 27 77  M t1 WHERE c=='w
19e0: 6f 72 6c 64 27 3b 0a 20 20 7d 0a 7d 20 7b 35 20  orld';.  }.} {5 
19f0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 31 20 68  hello world 11 h
1a00: 65 6c 6c 6f 20 77 6f 72 6c 64 20 35 7d 0a 64 6f  ello world 5}.do
1a10: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e  _test intpkey-3.
1a20: 38 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  8 {.  count {.  
1a30: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1a40: 74 31 20 57 48 45 52 45 20 63 3d 3d 27 77 6f 72  t1 WHERE c=='wor
1a50: 6c 64 27 20 41 4e 44 20 61 3e 37 3b 0a 20 20 7d  ld' AND a>7;.  }
1a60: 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72  .} {11 hello wor
1a70: 6c 64 20 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  ld 3}.do_test in
1a80: 74 70 6b 65 79 2d 33 2e 39 20 7b 0a 20 20 63 6f  tpkey-3.9 {.  co
1a90: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1aa0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1ab0: 20 37 3c 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20   7<a;.  }.} {11 
1ac0: 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 0a  hello world 1}..
1ad0: 23 20 54 65 73 74 20 69 6e 65 71 75 61 6c 69 74  # Test inequalit
1ae0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e  y constraints on
1af0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
1b00: 20 6b 65 79 73 20 61 6e 64 20 72 6f 77 69 64 73   keys and rowids
1b10: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
1b20: 65 79 2d 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  ey-4.1 {.  count
1b30: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1b40: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31  FROM t1 WHERE 11
1b50: 3d 72 6f 77 69 64 0a 20 20 7d 0a 7d 20 7b 31 31  =rowid.  }.} {11
1b60: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a   hello world 0}.
1b70: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1b80: 34 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  4.2 {.  count {.
1b90: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1ba0: 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d 72 6f  M t1 WHERE 11=ro
1bb0: 77 69 64 20 41 4e 44 20 62 3d 3d 27 68 65 6c 6c  wid AND b=='hell
1bc0: 6f 27 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  o'.  }.} {11 hel
1bd0: 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74  lo world 0}.do_t
1be0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 33 20  est intpkey-4.3 
1bf0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1c00: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1c10: 20 57 48 45 52 45 20 31 31 3d 72 6f 77 69 64 20   WHERE 11=rowid 
1c20: 41 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 20 41  AND b=='hello' A
1c30: 4e 44 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c  ND c IS NOT NULL
1c40: 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c  ;.  }.} {11 hell
1c50: 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65  o world 0}.do_te
1c60: 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 34 20 7b  st intpkey-4.4 {
1c70: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1c80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1c90: 57 48 45 52 45 20 72 6f 77 69 64 3d 3d 31 31 0a  WHERE rowid==11.
1ca0: 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20    }.} {11 hello 
1cb0: 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74  world 0}.do_test
1cc0: 20 69 6e 74 70 6b 65 79 2d 34 2e 35 20 7b 0a 20   intpkey-4.5 {. 
1cd0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
1ce0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1cf0: 45 52 45 20 6f 69 64 3d 3d 31 31 20 41 4e 44 20  ERE oid==11 AND 
1d00: 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d  b=='hello'.  }.}
1d10: 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64   {11 hello world
1d20: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   0}.do_test intp
1d30: 6b 65 79 2d 34 2e 36 20 7b 0a 20 20 63 6f 75 6e  key-4.6 {.  coun
1d40: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1d50: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
1d60: 3d 3d 31 31 20 41 4e 44 20 62 3d 3d 27 68 65 6c  ==11 AND b=='hel
1d70: 6c 6f 27 20 41 4e 44 20 63 20 49 53 20 4e 4f 54  lo' AND c IS NOT
1d80: 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 31   NULL;.  }.} {11
1d90: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a   hello world 0}.
1da0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1db0: 2d 34 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -4.7 {.  count {
1dc0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1dd0: 4f 4d 20 74 31 20 57 48 45 52 45 20 38 3c 72 6f  OM t1 WHERE 8<ro
1de0: 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68  wid;.  }.} {11 h
1df0: 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 64 6f  ello world 1}.do
1e00: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e  _test intpkey-4.
1e10: 38 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  8 {.  count {.  
1e20: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1e30: 74 31 20 57 48 45 52 45 20 38 3c 72 6f 77 69 64  t1 WHERE 8<rowid
1e40: 20 41 4e 44 20 31 31 3e 3d 6f 69 64 3b 0a 20 20   AND 11>=oid;.  
1e50: 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f  }.} {11 hello wo
1e60: 72 6c 64 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69  rld 1}.do_test i
1e70: 6e 74 70 6b 65 79 2d 34 2e 39 20 7b 0a 20 20 63  ntpkey-4.9 {.  c
1e80: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1e90: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1ea0: 45 20 31 31 3c 3d 5f 72 6f 77 69 64 5f 20 41 4e  E 11<=_rowid_ AN
1eb0: 44 20 31 32 3e 3d 61 3b 0a 20 20 7d 0a 7d 20 7b  D 12>=a;.  }.} {
1ec0: 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31  11 hello world 1
1ed0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
1ee0: 79 2d 34 2e 31 30 20 7b 0a 20 20 63 6f 75 6e 74  y-4.10 {.  count
1ef0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1f00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 30 3e  FROM t1 WHERE 0>
1f10: 3d 5f 72 6f 77 69 64 5f 3b 0a 20 20 7d 0a 7d 20  =_rowid_;.  }.} 
1f20: 7b 2d 34 20 79 20 7a 20 31 7d 0a 64 6f 5f 74 65  {-4 y z 1}.do_te
1f30: 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31 31 20  st intpkey-4.11 
1f40: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1f50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1f60: 20 57 48 45 52 45 20 61 3c 30 3b 0a 20 20 7d 0a   WHERE a<0;.  }.
1f70: 7d 20 7b 2d 34 20 79 20 7a 20 31 7d 0a 64 6f 5f  } {-4 y z 1}.do_
1f80: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31  test intpkey-4.1
1f90: 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  2 {.  count {.  
1fa0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1fb0: 74 31 20 57 48 45 52 45 20 61 3c 30 20 41 4e 44  t1 WHERE a<0 AND
1fc0: 20 61 3e 31 30 3b 0a 20 20 7d 0a 7d 20 7b 31 7d   a>10;.  }.} {1}
1fd0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 69 74  ..# Make sure it
1fe0: 20 69 73 20 4f 4b 20 74 6f 20 69 6e 73 65 72 74   is OK to insert
1ff0: 20 61 20 72 6f 77 69 64 20 6f 66 20 30 0a 23 0a   a rowid of 0.#.
2000: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
2010: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
2020: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
2030: 4f 20 74 31 20 56 41 4c 55 45 53 28 30 2c 27 7a  O t1 VALUES(0,'z
2040: 65 72 6f 27 2c 27 65 6e 74 72 79 27 29 3b 0a 20  ero','entry');. 
2050: 20 7d 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   }.  count {.   
2060: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2070: 31 20 57 48 45 52 45 20 61 3d 30 3b 0a 20 20 7d  1 WHERE a=0;.  }
2080: 0a 7d 20 7b 30 20 7a 65 72 6f 20 65 6e 74 72 79  .} {0 zero entry
2090: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   0}.do_test intp
20a0: 6b 65 79 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  key-5.2 {.  exec
20b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
20c0: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
20d0: 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  1 ORDER BY rowid
20e0: 0a 20 20 7d 0a 7d 20 7b 2d 34 20 2d 34 20 30 20  .  }.} {-4 -4 0 
20f0: 30 20 35 20 35 20 36 20 36 20 31 31 20 31 31 7d  0 5 5 6 6 11 11}
2100: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 61 62 69  ..# Test the abi
2110: 6c 69 74 79 20 6f 66 20 74 68 65 20 43 4f 50 59  lity of the COPY
2120: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 75 74 20   command to put 
2130: 64 61 74 61 20 69 6e 74 6f 20 61 0a 23 20 74 61  data into a.# ta
2140: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
2150: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
2160: 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 23 20 43 4f  mary key..#.# CO
2170: 50 59 20 63 6f 6d 6d 61 6e 64 20 68 61 73 20 62  PY command has b
2180: 65 65 6e 20 72 65 6d 6f 76 65 64 2e 20 20 42 75  een removed.  Bu
2190: 74 20 77 65 20 72 65 74 61 69 6e 20 74 68 65 73  t we retain thes
21a0: 65 20 74 65 73 74 73 20 73 6f 0a 23 20 74 68 61  e tests so.# tha
21b0: 74 20 74 68 65 20 74 61 62 6c 65 73 20 77 69 6c  t the tables wil
21c0: 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 69  l contain the ri
21d0: 67 68 74 20 64 61 74 61 20 66 6f 72 20 74 65 73  ght data for tes
21e0: 74 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2e 0a  ts that follow..
21f0: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
2200: 79 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  y-6.1 {.  execsq
2210: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
2220: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2230: 31 20 56 41 4c 55 45 53 28 32 30 2c 27 62 2d 32  1 VALUES(20,'b-2
2240: 30 27 2c 27 63 2d 32 30 27 29 3b 0a 20 20 20 20  0','c-20');.    
2250: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2260: 41 4c 55 45 53 28 32 31 2c 27 62 2d 32 31 27 2c  ALUES(21,'b-21',
2270: 27 63 2d 32 31 27 29 3b 0a 20 20 20 20 49 4e 53  'c-21');.    INS
2280: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
2290: 45 53 28 32 32 2c 27 62 2d 32 32 27 2c 27 63 2d  ES(22,'b-22','c-
22a0: 32 32 27 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  22');.    COMMIT
22b0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
22c0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d  ROM t1 WHERE a>=
22d0: 32 30 3b 0a 20 20 7d 0a 7d 20 7b 32 30 20 62 2d  20;.  }.} {20 b-
22e0: 32 30 20 63 2d 32 30 20 32 31 20 62 2d 32 31 20  20 c-20 21 b-21 
22f0: 63 2d 32 31 20 32 32 20 62 2d 32 32 20 63 2d 32  c-21 22 b-22 c-2
2300: 32 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  2}.do_test intpk
2310: 65 79 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  ey-6.2 {.  execs
2320: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2330: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2340: 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d 0a 7d  b=='hello'.  }.}
2350: 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20   {5 hello world 
2360: 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a  11 hello world}.
2370: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
2380: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.3 {.  execsql 
2390: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
23a0: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 27 62 2d  M t1 WHERE b='b-
23b0: 32 31 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  21';.    SELECT 
23c0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
23d0: 62 3d 3d 27 62 2d 32 31 27 3b 0a 20 20 7d 0a 7d  b=='b-21';.  }.}
23e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   {}.do_test intp
23f0: 6b 65 79 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63  key-6.4 {.  exec
2400: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2410: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2420: 20 61 3e 3d 32 30 0a 20 20 7d 0a 7d 20 7b 32 30   a>=20.  }.} {20
2430: 20 62 2d 32 30 20 63 2d 32 30 20 32 32 20 62 2d   b-20 c-20 22 b-
2440: 32 32 20 63 2d 32 32 7d 0a 0a 23 20 44 6f 20 61  22 c-22}..# Do a
2450: 6e 20 69 6e 73 65 72 74 20 6f 66 20 76 61 6c 75  n insert of valu
2460: 65 73 20 77 69 74 68 20 74 68 65 20 63 6f 6c 75  es with the colu
2470: 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 6f 75  mns specified ou
2480: 74 20 6f 66 20 6f 72 64 65 72 2e 0a 23 0a 64 6f  t of order..#.do
2490: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 37 2e  _test intpkey-7.
24a0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
24b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
24c0: 74 31 28 63 2c 62 2c 61 29 20 56 41 4c 55 45 53  t1(c,b,a) VALUES
24d0: 28 27 72 6f 77 27 2c 27 6e 65 77 27 2c 33 30 29  ('row','new',30)
24e0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
24f0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77  ROM t1 WHERE row
2500: 69 64 3e 3d 33 30 3b 0a 20 20 7d 0a 7d 20 7b 33  id>=30;.  }.} {3
2510: 30 20 6e 65 77 20 72 6f 77 7d 0a 64 6f 5f 74 65  0 new row}.do_te
2520: 73 74 20 69 6e 74 70 6b 65 79 2d 37 2e 32 20 7b  st intpkey-7.2 {
2530: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2540: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2550: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3e 32 30  1 WHERE rowid>20
2560: 3b 0a 20 20 7d 0a 7d 20 7b 32 32 20 62 2d 32 32  ;.  }.} {22 b-22
2570: 20 63 2d 32 32 20 33 30 20 6e 65 77 20 72 6f 77   c-22 30 new row
2580: 7d 0a 0a 23 20 44 6f 20 61 6e 20 69 6e 73 65 72  }..# Do an inser
2590: 74 20 66 72 6f 6d 20 61 20 73 65 6c 65 63 74 20  t from a select 
25a0: 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 64 6f 5f  statement..#.do_
25b0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e 31  test intpkey-8.1
25c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
25d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
25e0: 74 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t2(x INTEGER PRI
25f0: 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29 3b  MARY KEY, y, z);
2600: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2610: 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t2 SELECT * FRO
2620: 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t1;.    SELECT
2630: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 3b 0a   rowid FROM t2;.
2640: 20 20 7d 0a 7d 20 7b 2d 34 20 30 20 35 20 36 20    }.} {-4 0 5 6 
2650: 31 31 20 32 30 20 32 32 20 33 30 7d 0a 64 6f 5f  11 20 22 30}.do_
2660: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 38 2e 32  test intpkey-8.2
2670: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2680: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
2690: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20 30   t2;.  }.} {-4 0
26a0: 20 35 20 36 20 31 31 20 32 30 20 32 32 20 33 30   5 6 11 20 22 30
26b0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  }..do_test intpk
26c0: 65 79 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  ey-9.1 {.  execs
26d0: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
26e0: 74 31 20 53 45 54 20 63 3d 27 77 77 77 27 20 57  t1 SET c='www' W
26f0: 48 45 52 45 20 63 3d 27 77 6f 72 6c 64 27 3b 0a  HERE c='world';.
2700: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
2710: 2c 20 61 2c 20 63 20 46 52 4f 4d 20 74 31 20 57  , a, c FROM t1 W
2720: 48 45 52 45 20 63 3d 3d 27 77 77 77 27 3b 0a 20  HERE c=='www';. 
2730: 20 7d 0a 7d 20 7b 35 20 35 20 77 77 77 20 31 31   }.} {5 5 www 11
2740: 20 31 31 20 77 77 77 7d 0a 0a 0a 23 20 43 68 65   11 www}...# Che
2750: 63 6b 20 69 6e 73 65 72 74 20 6f 66 20 4e 55 4c  ck insert of NUL
2760: 4c 20 66 6f 72 20 70 72 69 6d 61 72 79 20 6b 65  L for primary ke
2770: 79 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  y.#.do_test intp
2780: 6b 65 79 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65  key-10.1 {.  exe
2790: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
27a0: 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52  TABLE t2;.    CR
27b0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
27c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
27d0: 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20 20 20 20  KEY, y, z);.    
27e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
27f0: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 31 2c 20 32  ALUES(NULL, 1, 2
2800: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2810: 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  from t2;.  }.} {
2820: 31 20 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 69  1 1 2}.do_test i
2830: 6e 74 70 6b 65 79 2d 31 30 2e 32 20 7b 0a 20 20  ntpkey-10.2 {.  
2840: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
2850: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
2860: 55 45 53 28 4e 55 4c 4c 2c 20 32 2c 20 33 29 3b  UES(NULL, 2, 3);
2870: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 66 72  .    SELECT * fr
2880: 6f 6d 20 74 32 20 57 48 45 52 45 20 78 3d 32 3b  om t2 WHERE x=2;
2890: 0a 20 20 7d 0a 7d 20 7b 32 20 32 20 33 7d 0a 64  .  }.} {2 2 3}.d
28a0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  o_test intpkey-1
28b0: 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.3 {.  execsql 
28c0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
28d0: 4f 20 74 32 20 53 45 4c 45 43 54 20 4e 55 4c 4c  O t2 SELECT NULL
28e0: 2c 20 7a 2c 20 79 20 46 52 4f 4d 20 74 32 3b 0a  , z, y FROM t2;.
28f0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2900: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31  M t2;.  }.} {1 1
2910: 20 32 20 32 20 32 20 33 20 33 20 32 20 31 20 34   2 2 2 3 3 2 1 4
2920: 20 33 20 32 7d 0a 0a 23 20 54 68 69 73 20 74 65   3 2}..# This te
2930: 73 74 73 20 63 68 65 63 6b 73 20 74 6f 20 73 65  sts checks to se
2940: 65 20 69 66 20 61 20 66 6c 6f 61 74 69 6e 67 20  e if a floating 
2950: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 63 61 6e  point number can
2960: 20 62 65 20 75 73 65 64 0a 23 20 74 6f 20 72 65   be used.# to re
2970: 66 65 72 65 6e 63 65 20 61 6e 20 69 6e 74 65 67  ference an integ
2980: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a  er primary key..
2990: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
29a0: 79 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  y-11.1 {.  execs
29b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
29c0: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
29d0: 61 3d 32 2e 30 2b 33 2e 30 3b 0a 20 20 7d 0a 7d  a=2.0+3.0;.  }.}
29e0: 20 7b 68 65 6c 6c 6f 7d 0a 64 6f 5f 74 65 73 74   {hello}.do_test
29f0: 20 69 6e 74 70 6b 65 79 2d 31 31 2e 31 20 7b 0a   intpkey-11.1 {.
2a00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2a10: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
2a20: 20 57 48 45 52 45 20 61 3d 32 2e 30 2b 33 2e 35   WHERE a=2.0+3.5
2a30: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 6e 74 65  ;.  }.} {}..inte
2a40: 67 72 69 74 79 5f 63 68 65 63 6b 20 69 6e 74 70  grity_check intp
2a50: 6b 65 79 2d 31 32 2e 31 0a 0a 23 20 54 72 79 20  key-12.1..# Try 
2a60: 74 6f 20 75 73 65 20 61 20 73 74 72 69 6e 67 20  to use a string 
2a70: 74 68 61 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  that looks like 
2a80: 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
2a90: 20 6e 75 6d 62 65 72 20 61 73 0a 23 20 61 6e 20   number as.# an 
2aa0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
2ab0: 6b 65 79 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  key.  This shoul
2ac0: 64 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 20  d actually work 
2ad0: 77 68 65 6e 20 74 68 65 20 66 6c 6f 61 74 69 6e  when the floatin
2ae0: 67 0a 23 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  g.# point value 
2af0: 63 61 6e 20 62 65 20 72 6f 75 6e 64 65 64 20 74  can be rounded t
2b00: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
2b10: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
2b20: 61 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74  a..#.do_test int
2b30: 70 6b 65 79 2d 31 33 2e 31 20 7b 0a 20 20 65 78  pkey-13.1 {.  ex
2b40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2b50: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
2b60: 52 45 20 61 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  RE a=1;.  }.} {}
2b70: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
2b80: 2d 31 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  -13.2 {.  execsq
2b90: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
2ba0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 31  NTO t1 VALUES('1
2bb0: 2e 30 27 2c 32 2c 33 29 3b 0a 20 20 20 20 53 45  .0',2,3);.    SE
2bc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2bd0: 48 45 52 45 20 61 3d 31 3b 0a 20 20 7d 0a 7d 20  HERE a=1;.  }.} 
2be0: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
2bf0: 69 6e 74 70 6b 65 79 2d 31 33 2e 33 20 7b 0a 20  intpkey-13.3 {. 
2c00: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
2c10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2c20: 41 4c 55 45 53 28 27 31 2e 35 27 2c 33 2c 34 29  ALUES('1.5',3,4)
2c30: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61  ;.  }.} {1 {data
2c40: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d 7d 0a  type mismatch}}.
2c50: 69 66 63 61 70 61 62 6c 65 20 7b 62 6c 6f 62 6c  ifcapable {blobl
2c60: 69 74 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  it} {.  do_test 
2c70: 69 6e 74 70 6b 65 79 2d 31 33 2e 34 20 7b 0a 20  intpkey-13.4 {. 
2c80: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
2c90: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2ca0: 74 31 20 56 41 4c 55 45 53 28 78 27 31 32 33 34  t1 VALUES(x'1234
2cb0: 35 36 27 2c 33 2c 34 29 3b 0a 20 20 20 20 7d 0a  56',3,4);.    }.
2cc0: 20 20 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65    } {1 {datatype
2cd0: 20 6d 69 73 6d 61 74 63 68 7d 7d 0a 7d 0a 64 6f   mismatch}}.}.do
2ce0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 33  _test intpkey-13
2cf0: 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .5 {.  catchsql 
2d00: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
2d10: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 2b 31 32  O t1 VALUES('+12
2d20: 33 34 35 36 37 38 39 30 27 2c 33 2c 34 29 3b 0a  34567890',3,4);.
2d30: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20    }.} {0 {}}..# 
2d40: 43 6f 6d 70 61 72 65 20 61 6e 20 49 4e 54 45 47  Compare an INTEG
2d50: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
2d60: 67 61 69 6e 73 74 20 61 20 54 45 58 54 20 65 78  gainst a TEXT ex
2d70: 70 72 65 73 73 69 6f 6e 2e 20 54 68 65 20 49 4e  pression. The IN
2d80: 54 45 47 45 52 0a 23 20 61 66 66 69 6e 69 74 79  TEGER.# affinity
2d90: 20 73 68 6f 75 6c 64 20 62 65 20 61 70 70 6c 69   should be appli
2da0: 65 64 20 74 6f 20 74 68 65 20 74 65 78 74 20 76  ed to the text v
2db0: 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
2dc0: 63 6f 6d 70 61 72 69 73 6f 6e 0a 23 20 74 61 6b  comparison.# tak
2dd0: 65 73 20 70 6c 61 63 65 2e 0a 23 0a 64 6f 5f 74  es place..#.do_t
2de0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 34 2e 31  est intpkey-14.1
2df0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2e00: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2e10: 74 33 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t3(a INTEGER PRI
2e20: 4d 41 52 59 20 4b 45 59 2c 20 62 20 49 4e 54 45  MARY KEY, b INTE
2e30: 47 45 52 2c 20 63 20 54 45 58 54 29 3b 0a 20 20  GER, c TEXT);.  
2e40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
2e50: 20 56 41 4c 55 45 53 28 31 2c 20 31 2c 20 27 6f   VALUES(1, 1, 'o
2e60: 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ne');.    INSERT
2e70: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
2e80: 32 2c 20 32 2c 20 27 32 27 29 3b 0a 20 20 20 20  2, 2, '2');.    
2e90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
2ea0: 41 4c 55 45 53 28 33 2c 20 33 2c 20 33 29 3b 0a  ALUES(3, 3, 3);.
2eb0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2ec0: 20 69 6e 74 70 6b 65 79 2d 31 34 2e 32 20 7b 0a   intpkey-14.2 {.
2ed0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2ee0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2ef0: 20 57 48 45 52 45 20 61 3e 32 3b 0a 20 20 7d 0a   WHERE a>2;.  }.
2f00: 7d 20 7b 33 20 33 20 33 7d 0a 64 6f 5f 74 65 73  } {3 3 3}.do_tes
2f10: 74 20 69 6e 74 70 6b 65 79 2d 31 34 2e 33 20 7b  t intpkey-14.3 {
2f20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2f30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f40: 33 20 57 48 45 52 45 20 61 3e 27 32 27 3b 0a 20  3 WHERE a>'2';. 
2f50: 20 7d 0a 7d 20 7b 33 20 33 20 33 7d 0a 64 6f 5f   }.} {3 3 3}.do_
2f60: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 34 2e  test intpkey-14.
2f70: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
2f80: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2f90: 4d 20 74 33 20 57 48 45 52 45 20 61 3c 27 32 27  M t3 WHERE a<'2'
2fa0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 6f 6e 65  ;.  }.} {1 1 one
2fb0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
2fc0: 79 2d 31 34 2e 35 20 7b 0a 20 20 65 78 65 63 73  y-14.5 {.  execs
2fd0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2fe0: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
2ff0: 61 3c 63 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20  a<c;.  }.} {1 1 
3000: 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  one}.do_test int
3010: 70 6b 65 79 2d 31 34 2e 36 20 7b 0a 20 20 65 78  pkey-14.6 {.  ex
3020: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
3030: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
3040: 52 45 20 61 3d 63 3b 0a 20 20 7d 0a 7d 20 7b 32  RE a=c;.  }.} {2
3050: 20 32 20 32 20 33 20 33 20 33 7d 0a 0a 23 20 43   2 2 3 3 3}..# C
3060: 68 65 63 6b 20 66 6f 72 20 70 72 6f 70 65 72 20  heck for proper 
3070: 68 61 6e 64 6c 69 6e 67 20 6f 66 20 70 72 69 6d  handling of prim
3080: 61 72 79 20 6b 65 79 73 20 67 72 65 61 74 65 72  ary keys greater
3090: 20 74 68 61 6e 20 32 5e 33 31 2e 0a 23 20 54 69   than 2^31..# Ti
30a0: 63 6b 65 74 20 23 31 31 38 38 0a 23 0a 64 6f 5f  cket #1188.#.do_
30b0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 35 2e  test intpkey-15.
30c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
30d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
30e0: 74 31 20 56 41 4c 55 45 53 28 32 31 34 37 34 38  t1 VALUES(214748
30f0: 33 36 34 37 2c 20 27 62 69 67 2d 31 27 2c 20 31  3647, 'big-1', 1
3100: 32 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  23);.    SELECT 
3110: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
3120: 61 3e 32 31 34 37 34 38 33 36 34 38 3b 0a 20 20  a>2147483648;.  
3130: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69  }.} {}.do_test i
3140: 6e 74 70 6b 65 79 2d 31 35 2e 32 20 7b 0a 20 20  ntpkey-15.2 {.  
3150: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
3160: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3170: 55 45 53 28 4e 55 4c 4c 2c 20 27 62 69 67 2d 32  UES(NULL, 'big-2
3180: 27 2c 20 32 33 34 29 3b 0a 20 20 20 20 53 45 4c  ', 234);.    SEL
3190: 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48  ECT b FROM t1 WH
31a0: 45 52 45 20 61 3e 3d 32 31 34 37 34 38 33 36 34  ERE a>=214748364
31b0: 38 3b 0a 20 20 7d 0a 7d 20 7b 62 69 67 2d 32 7d  8;.  }.} {big-2}
31c0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
31d0: 2d 31 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -15.3 {.  execsq
31e0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  l {.    SELECT b
31f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
3200: 3e 32 31 34 37 34 38 33 36 34 38 3b 0a 20 20 7d  >2147483648;.  }
3210: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  .} {}.do_test in
3220: 74 70 6b 65 79 2d 31 35 2e 34 20 7b 0a 20 20 65  tpkey-15.4 {.  e
3230: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3240: 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48  ECT b FROM t1 WH
3250: 45 52 45 20 61 3e 3d 32 31 34 37 34 38 33 36 34  ERE a>=214748364
3260: 37 3b 0a 20 20 7d 0a 7d 20 7b 62 69 67 2d 31 20  7;.  }.} {big-1 
3270: 62 69 67 2d 32 7d 0a 64 6f 5f 74 65 73 74 20 69  big-2}.do_test i
3280: 6e 74 70 6b 65 79 2d 31 35 2e 35 20 7b 0a 20 20  ntpkey-15.5 {.  
3290: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
32a0: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57  LECT b FROM t1 W
32b0: 48 45 52 45 20 61 3c 32 31 34 37 34 38 33 36 34  HERE a<214748364
32c0: 38 3b 0a 20 20 7d 0a 7d 20 7b 79 20 7a 65 72 6f  8;.  }.} {y zero
32d0: 20 32 20 68 65 6c 6c 6f 20 73 65 63 6f 6e 64 20   2 hello second 
32e0: 68 65 6c 6c 6f 20 62 2d 32 30 20 62 2d 32 32 20  hello b-20 b-22 
32f0: 6e 65 77 20 33 20 62 69 67 2d 31 7d 0a 64 6f 5f  new 3 big-1}.do_
3300: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 35 2e  test intpkey-15.
3310: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
3320: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
3330: 4d 20 74 31 20 57 48 45 52 45 20 61 3c 31 32 33  M t1 WHERE a<123
3340: 34 35 36 37 38 39 30 31 3b 0a 20 20 7d 0a 7d 20  45678901;.  }.} 
3350: 7b 79 20 7a 65 72 6f 20 32 20 68 65 6c 6c 6f 20  {y zero 2 hello 
3360: 73 65 63 6f 6e 64 20 68 65 6c 6c 6f 20 62 2d 32  second hello b-2
3370: 30 20 62 2d 32 32 20 6e 65 77 20 33 20 62 69 67  0 b-22 new 3 big
3380: 2d 31 20 62 69 67 2d 32 7d 0a 64 6f 5f 74 65 73  -1 big-2}.do_tes
3390: 74 20 69 6e 74 70 6b 65 79 2d 31 35 2e 37 20 7b  t intpkey-15.7 {
33a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
33b0: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74   SELECT b FROM t
33c0: 31 20 57 48 45 52 45 20 61 3e 31 32 33 34 35 36  1 WHERE a>123456
33d0: 37 38 39 30 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  78901;.  }.} {}.
33e0: 0a 23 20 32 30 31 36 2d 30 34 2d 31 38 20 74 69  .# 2016-04-18 ti
33f0: 63 6b 65 74 20 68 74 74 70 73 3a 2f 2f 77 77 77  cket https://www
3400: 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
3410: 74 6b 74 76 69 65 77 2f 37 64 37 35 32 35 63 62  tktview/7d7525cb
3420: 30 31 62 36 38 37 31 32 34 39 35 64 33 61 0a 23  01b68712495d3a.#
3430: 20 42 65 20 73 75 72 65 20 74 6f 20 65 73 63 61   Be sure to esca
3440: 70 65 20 71 75 6f 74 65 64 20 74 79 70 65 6e 61  pe quoted typena
3450: 6d 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  mes..#.do_execsq
3460: 6c 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  l_test intpkey-1
3470: 36 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  6.0 {.  CREATE T
3480: 41 42 4c 45 20 74 31 36 61 28 69 64 20 22 49 4e  ABLE t16a(id "IN
3490: 54 45 47 45 52 22 20 50 52 49 4d 41 52 59 20 4b  TEGER" PRIMARY K
34a0: 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  EY AUTOINCREMENT
34b0: 2c 20 62 20 5b 54 45 58 54 5d 2c 20 63 20 60 49  , b [TEXT], c `I
34c0: 4e 54 60 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78  NT`);.} {}.do_ex
34d0: 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 74 70 6b  ecsql_test intpk
34e0: 65 79 2d 31 36 2e 31 20 7b 0a 20 20 50 52 41 47  ey-16.1 {.  PRAG
34f0: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 74 31  MA table_info=t1
3500: 36 61 3b 0a 7d 20 7b 30 20 69 64 20 49 4e 54 45  6a;.} {0 id INTE
3510: 47 45 52 20 30 20 7b 7d 20 31 20 31 20 62 20 54  GER 0 {} 1 1 b T
3520: 45 58 54 20 30 20 7b 7d 20 30 20 32 20 63 20 49  EXT 0 {} 0 2 c I
3530: 4e 54 20 30 20 7b 7d 20 30 7d 0a 0a 23 20 32 30  NT 0 {} 0}..# 20
3540: 31 36 2d 30 35 2d 30 36 20 74 69 63 6b 65 74 20  16-05-06 ticket 
3550: 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69  https://www.sqli
3560: 74 65 2e 6f 72 67 2f 73 72 63 2f 74 6b 74 76 69  te.org/src/tktvi
3570: 65 77 2f 31 36 63 39 38 30 31 63 65 62 61 34 39  ew/16c9801ceba49
3580: 32 33 39 33 39 30 38 35 0a 23 20 57 68 65 6e 20  23939085.# When 
3590: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6e 74 61  the schema conta
35a0: 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ins an index on 
35b0: 74 68 65 20 49 50 4b 20 61 6e 64 20 6e 6f 20 6f  the IPK and no o
35c0: 74 68 65 72 20 69 6e 64 65 78 0a 23 20 61 6e 64  ther index.# and
35d0: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
35e0: 6f 6e 20 61 20 64 65 6c 65 74 65 20 75 73 65 73  on a delete uses
35f0: 20 61 6e 20 4f 52 20 77 68 65 72 65 20 62 6f 74   an OR where bot
3600: 68 20 73 69 64 65 73 20 72 65 66 65 72 65 6e 63  h sides referenc
3610: 69 6e 67 0a 23 20 74 68 65 20 49 50 4b 2c 20 74  ing.# the IPK, t
3620: 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
3630: 6c 65 20 74 68 61 74 20 74 68 65 20 4f 50 5f 44  le that the OP_D
3640: 65 6c 65 74 65 20 77 69 6c 6c 20 66 61 69 6c 20  elete will fail 
3650: 62 65 63 61 75 73 65 20 74 68 65 72 65 0a 23 20  because there.# 
3660: 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66  deferred seek of
3670: 20 74 68 65 20 4f 50 5f 53 65 65 6b 20 69 73 20   the OP_Seek is 
3680: 6e 6f 74 20 72 65 73 6f 6c 76 65 64 20 70 72 69  not resolved pri
3690: 6f 72 20 74 6f 20 72 65 61 63 68 69 6e 67 20 74  or to reaching t
36a0: 68 65 20 4f 50 5f 44 65 6c 65 74 65 2e 0a 23 0a  he OP_Delete..#.
36b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
36c0: 69 6e 74 70 6b 65 79 2d 31 37 2e 30 20 7b 0a 20  intpkey-17.0 {. 
36d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
36e0: 37 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  7(x INTEGER PRIM
36f0: 41 52 59 20 4b 45 59 2c 20 79 20 54 45 58 54 29  ARY KEY, y TEXT)
3700: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
3710: 74 31 37 28 78 2c 79 29 20 56 41 4c 55 45 53 28  t17(x,y) VALUES(
3720: 31 32 33 2c 27 65 6c 65 70 68 61 6e 74 27 29 2c  123,'elephant'),
3730: 28 32 34 38 2c 27 67 69 72 61 66 66 65 27 29 3b  (248,'giraffe');
3740: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
3750: 74 31 37 78 20 4f 4e 20 74 31 37 28 78 29 3b 0a  t17x ON t17(x);.
3760: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
3770: 37 20 57 48 45 52 45 20 78 3d 39 39 20 4f 52 20  7 WHERE x=99 OR 
3780: 78 3c 31 33 30 3b 0a 20 20 53 45 4c 45 43 54 20  x<130;.  SELECT 
3790: 2a 20 46 52 4f 4d 20 74 31 37 3b 0a 7d 20 7b 32  * FROM t17;.} {2
37a0: 34 38 20 67 69 72 61 66 66 65 7d 0a 64 6f 5f 65  48 giraffe}.do_e
37b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 69 6e 74 70  xecsql_test intp
37c0: 6b 65 79 2d 31 37 2e 31 20 7b 0a 20 20 44 52 4f  key-17.1 {.  DRO
37d0: 50 20 49 4e 44 45 58 20 74 31 37 78 3b 0a 20 20  P INDEX t17x;.  
37e0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 37 3b  DELETE FROM t17;
37f0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
3800: 31 37 28 78 2c 79 29 20 56 41 4c 55 45 53 28 31  17(x,y) VALUES(1
3810: 32 33 2c 27 65 6c 65 70 68 61 6e 74 27 29 2c 28  23,'elephant'),(
3820: 32 34 38 2c 27 67 69 72 61 66 66 65 27 29 3b 0a  248,'giraffe');.
3830: 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20    CREATE UNIQUE 
3840: 49 4e 44 45 58 20 74 31 37 78 20 4f 4e 20 74 31  INDEX t17x ON t1
3850: 37 28 61 62 73 28 78 29 29 3b 0a 20 20 44 45 4c  7(abs(x));.  DEL
3860: 45 54 45 20 46 52 4f 4d 20 74 31 37 20 57 48 45  ETE FROM t17 WHE
3870: 52 45 20 61 62 73 28 78 29 20 49 53 20 4e 55 4c  RE abs(x) IS NUL
3880: 4c 20 4f 52 20 61 62 73 28 78 29 3c 31 33 30 3b  L OR abs(x)<130;
3890: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
38a0: 20 74 31 37 3b 0a 7d 20 7b 32 34 38 20 67 69 72   t17;.} {248 gir
38b0: 61 66 66 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  affe}.do_execsql
38c0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 37  _test intpkey-17
38d0: 2e 32 20 7b 0a 20 20 44 45 4c 45 54 45 20 46 52  .2 {.  DELETE FR
38e0: 4f 4d 20 74 31 37 3b 0a 20 20 49 4e 53 45 52 54  OM t17;.  INSERT
38f0: 20 49 4e 54 4f 20 74 31 37 28 78 2c 79 29 20 56   INTO t17(x,y) V
3900: 41 4c 55 45 53 28 31 32 33 2c 27 65 6c 65 70 68  ALUES(123,'eleph
3910: 61 6e 74 27 29 2c 28 32 34 38 2c 27 67 69 72 61  ant'),(248,'gira
3920: 66 66 65 27 29 3b 0a 20 20 55 50 44 41 54 45 20  ffe');.  UPDATE 
3930: 74 31 37 20 53 45 54 20 79 3d 27 6f 73 74 72 69  t17 SET y='ostri
3940: 63 68 27 20 57 48 45 52 45 20 61 62 73 28 78 29  ch' WHERE abs(x)
3950: 3d 32 34 38 3b 0a 20 20 53 45 4c 45 43 54 20 2a  =248;.  SELECT *
3960: 20 46 52 4f 4d 20 74 31 37 20 4f 52 44 45 52 20   FROM t17 ORDER 
3970: 42 59 20 2b 78 3b 0a 7d 20 7b 31 32 33 20 65 6c  BY +x;.} {123 el
3980: 65 70 68 61 6e 74 20 32 34 38 20 6f 73 74 72 69  ephant 248 ostri
3990: 63 68 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  ch}..finish_test
39a0: 0a                                               .