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

Artifact 3956a34cc82374821a017cf1646c9ff32f5e3c81:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66  rary..#.# This f
01b0: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  ile implements t
01c0: 65 73 74 73 20 66 6f 72 20 74 68 65 20 73 70 65  ests for the spe
01d0: 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
01e0: 61 73 73 6f 63 69 61 74 65 64 0a 23 20 77 69 74  associated.# wit
01f0: 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
0200: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 23  Y KEY columns..#
0210: 0a 23 20 24 49 64 3a 20 69 6e 74 70 6b 65 79 2e  .# $Id: intpkey.
0220: 74 65 73 74 2c 76 20 31 2e 31 39 20 32 30 30 34  test,v 1.19 2004
0230: 2f 31 30 2f 31 38 20 32 31 3a 33 34 3a 34 37 20  /10/18 21:34:47 
0240: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh Exp $..set t
0250: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0260: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0270: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0280: 74 65 72 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74  ter.tcl..# Creat
0290: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
02a0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64   primary key and
02b0: 20 61 20 64 61 74 61 74 79 70 65 20 6f 74 68 65   a datatype othe
02c0: 72 20 74 68 61 6e 0a 23 20 69 6e 74 65 67 65 72  r than.# integer
02d0: 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  .#.do_test intpk
02e0: 65 79 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73  ey-1.0 {.  execs
02f0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0300: 54 41 42 4c 45 20 74 31 28 61 20 54 45 58 54 20  TABLE t1(a TEXT 
0310: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
0320: 63 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  c);.  }.} {}..# 
0330: 54 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20  There should be 
0340: 61 6e 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  an index associa
0350: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 72 69  ted with the pri
0360: 6d 61 72 79 20 6b 65 79 0a 23 0a 64 6f 5f 74 65  mary key.#.do_te
0370: 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 20 7b  st intpkey-1.1 {
0380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0390: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
03a0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  M sqlite_master.
03b0: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
03c0: 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e  index' AND tbl_n
03d0: 61 6d 65 3d 27 74 31 27 3b 0a 20 20 7d 0a 7d 20  ame='t1';.  }.} 
03e0: 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  {sqlite_autoinde
03f0: 78 5f 74 31 5f 31 7d 0a 0a 23 20 4e 6f 77 20 63  x_t1_1}..# Now c
0400: 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 77 69  reate a table wi
0410: 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  th an integer pr
0420: 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 76 65  imary key and ve
0430: 72 69 66 79 20 74 68 61 74 0a 23 20 74 68 65 72  rify that.# ther
0440: 65 20 69 73 20 6e 6f 20 61 73 73 6f 63 69 61 74  e is no associat
0450: 65 64 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74  ed index..#.do_t
0460: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 32 20  est intpkey-1.2 
0470: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0480: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
0490: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
04a0: 45 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50  E t1(a INTEGER P
04b0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
04c0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61  );.    SELECT na
04d0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
04e0: 61 73 74 65 72 0a 20 20 20 20 20 20 57 48 45 52  aster.      WHER
04f0: 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 20 41  E type='index' A
0500: 4e 44 20 74 62 6c 5f 6e 61 6d 65 3d 27 74 31 27  ND tbl_name='t1'
0510: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 49 6e  ;.  }.} {}..# In
0520: 73 65 72 74 20 73 6f 6d 65 20 72 65 63 6f 72 64  sert some record
0530: 73 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 20 74  s into the new t
0540: 61 62 6c 65 2e 20 20 53 70 65 63 69 66 79 20 74  able.  Specify t
0550: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 23  he primary key.#
0560: 20 61 6e 64 20 76 65 72 69 66 79 20 74 68 61 74   and verify that
0570: 20 74 68 65 20 6b 65 79 20 69 73 20 75 73 65 64   the key is used
0580: 20 61 73 20 74 68 65 20 72 65 63 6f 72 64 20 6e   as the record n
0590: 75 6d 62 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  umber..#.do_test
05a0: 20 69 6e 74 70 6b 65 79 2d 31 2e 33 20 7b 0a 20   intpkey-1.3 {. 
05b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
05c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
05d0: 4c 55 45 53 28 35 2c 27 68 65 6c 6c 6f 27 2c 27  LUES(5,'hello','
05e0: 77 6f 72 6c 64 27 29 3b 0a 20 20 7d 0a 20 20 64  world');.  }.  d
05f0: 62 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  b last_insert_ro
0600: 77 69 64 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73  wid.} {5}.do_tes
0610: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 34 20 7b 0a  t intpkey-1.4 {.
0620: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0630: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0640: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f  ;.  }.} {5 hello
0650: 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73 74 20   world}.do_test 
0660: 69 6e 74 70 6b 65 79 2d 31 2e 35 20 7b 0a 20 20  intpkey-1.5 {.  
0670: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0680: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
0690: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20  OM t1;.  }.} {5 
06a0: 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 0a  5 hello world}..
06b0: 23 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  # Attempting to 
06c0: 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63 61  insert a duplica
06d0: 74 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 73  te primary key s
06e0: 68 6f 75 6c 64 20 67 69 76 65 20 61 20 63 6f 6e  hould give a con
06f0: 73 74 72 61 69 6e 74 0a 23 20 66 61 69 6c 75 72  straint.# failur
0700: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74  e..#.do_test int
0710: 70 6b 65 79 2d 31 2e 36 20 7b 0a 20 20 73 65 74  pkey-1.6 {.  set
0720: 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   r [catch {execs
0730: 71 6c 20 7b 0a 20 20 20 20 20 49 4e 53 45 52 54  ql {.     INSERT
0740: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0750: 35 2c 27 73 65 63 6f 6e 64 27 2c 27 65 6e 74 72  5,'second','entr
0760: 79 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20  y');.  }} msg]. 
0770: 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a   lappend r $msg.
0780: 7d 20 7b 31 20 7b 50 52 49 4d 41 52 59 20 4b 45  } {1 {PRIMARY KE
0790: 59 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  Y must be unique
07a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  }}.do_test intpk
07b0: 65 79 2d 31 2e 37 20 7b 0a 20 20 65 78 65 63 73  ey-1.7 {.  execs
07c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
07d0: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
07e0: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c  ;.  }.} {5 5 hel
07f0: 6c 6f 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74 65 73  lo world}.do_tes
0800: 74 20 69 6e 74 70 6b 65 79 2d 31 2e 38 20 7b 0a  t intpkey-1.8 {.
0810: 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b    set r [catch {
0820: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 49  execsql {.     I
0830: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0840: 4c 55 45 53 28 36 2c 27 73 65 63 6f 6e 64 27 2c  LUES(6,'second',
0850: 27 65 6e 74 72 79 27 29 3b 0a 20 20 7d 7d 20 6d  'entry');.  }} m
0860: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20  sg].  lappend r 
0870: 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  $msg.} {0 {}}.do
0880: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e  _test intpkey-1.
0890: 38 2e 31 20 7b 0a 20 20 64 62 20 6c 61 73 74 5f  8.1 {.  db last_
08a0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 0a 7d 20 7b  insert_rowid.} {
08b0: 36 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  6}.do_test intpk
08c0: 65 79 2d 31 2e 39 20 7b 0a 20 20 65 78 65 63 73  ey-1.9 {.  execs
08d0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
08e0: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
08f0: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 35 20 68 65 6c  ;.  }.} {5 5 hel
0900: 6c 6f 20 77 6f 72 6c 64 20 36 20 36 20 73 65 63  lo world 6 6 sec
0910: 6f 6e 64 20 65 6e 74 72 79 7d 0a 0a 23 20 41 20  ond entry}..# A 
0920: 52 4f 57 49 44 20 69 73 20 61 75 74 6f 6d 61 74  ROWID is automat
0930: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64  ically generated
0940: 20 66 6f 72 20 6e 65 77 20 72 65 63 6f 72 64 73   for new records
0950: 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 73 70 65   that do not spe
0960: 63 69 66 79 0a 23 20 74 68 65 20 69 6e 74 65 67  cify.# the integ
0970: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a  er primary key..
0980: 23 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  #.do_test intpke
0990: 79 2d 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  y-1.10 {.  execs
09a0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
09b0: 49 4e 54 4f 20 74 31 28 62 2c 63 29 20 56 41 4c  INTO t1(b,c) VAL
09c0: 55 45 53 28 27 6f 6e 65 27 2c 27 74 77 6f 27 29  UES('one','two')
09d0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 46  ;.    SELECT b F
09e0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
09f0: 62 3b 0a 20 20 7d 0a 7d 20 7b 68 65 6c 6c 6f 20  b;.  }.} {hello 
0a00: 6f 6e 65 20 73 65 63 6f 6e 64 7d 0a 0a 23 20 54  one second}..# T
0a10: 72 79 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65  ry to change the
0a20: 20 52 4f 57 49 44 20 66 6f 72 20 74 68 65 20 6e   ROWID for the n
0a30: 65 77 20 65 6e 74 72 79 2e 0a 23 0a 64 6f 5f 74  ew entry..#.do_t
0a40: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 2e 31 31  est intpkey-1.11
0a50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0a60: 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54     UPDATE t1 SET
0a70: 20 61 3d 34 20 57 48 45 52 45 20 62 3d 27 6f 6e   a=4 WHERE b='on
0a80: 65 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  e';.    SELECT *
0a90: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
0aa0: 7b 34 20 6f 6e 65 20 74 77 6f 20 35 20 68 65 6c  {4 one two 5 hel
0ab0: 6c 6f 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e  lo world 6 secon
0ac0: 64 20 65 6e 74 72 79 7d 0a 0a 23 20 4d 61 6b 65  d entry}..# Make
0ad0: 20 73 75 72 65 20 53 45 4c 45 43 54 20 73 74 61   sure SELECT sta
0ae0: 74 65 6d 65 6e 74 73 20 61 72 65 20 61 62 6c 65  tements are able
0af0: 20 74 6f 20 75 73 65 20 74 68 65 20 70 72 69 6d   to use the prim
0b00: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 0a 23  ary key column.#
0b10: 20 61 73 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a   as an index..#.
0b20: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
0b30: 31 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.12 {.  execsql
0b40: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
0b50: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
0b60: 3d 34 3b 0a 20 20 7d 0a 7d 20 7b 34 20 6f 6e 65  =4;.  }.} {4 one
0b70: 20 74 77 6f 7d 0a 0a 23 20 54 72 79 20 74 6f 20   two}..# Try to 
0b80: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 69 6e 74  insert a non-int
0b90: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 74 6f 20  eger value into 
0ba0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
0bb0: 66 69 65 6c 64 2e 20 20 54 68 69 73 0a 23 20 73  field.  This.# s
0bc0: 68 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20  hould result in 
0bd0: 61 20 64 61 74 61 20 74 79 70 65 20 6d 69 73 6d  a data type mism
0be0: 61 74 63 68 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  atch..#.do_test 
0bf0: 69 6e 74 70 6b 65 79 2d 31 2e 31 33 2e 31 20 7b  intpkey-1.13.1 {
0c00: 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20  .  set r [catch 
0c10: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49  {execsql {.    I
0c20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0c30: 4c 55 45 53 28 27 78 27 2c 27 79 27 2c 27 7a 27  LUES('x','y','z'
0c40: 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  );.  }} msg].  l
0c50: 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20  append r $msg.} 
0c60: 7b 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73  {1 {datatype mis
0c70: 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20  match}}.do_test 
0c80: 69 6e 74 70 6b 65 79 2d 31 2e 31 33 2e 32 20 7b  intpkey-1.13.2 {
0c90: 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20  .  set r [catch 
0ca0: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49  {execsql {.    I
0cb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0cc0: 4c 55 45 53 28 27 27 2c 27 79 27 2c 27 7a 27 29  LUES('','y','z')
0cd0: 3b 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ;.  }} msg].  la
0ce0: 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b  ppend r $msg.} {
0cf0: 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d  1 {datatype mism
0d00: 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  atch}}.do_test i
0d10: 6e 74 70 6b 65 79 2d 31 2e 31 34 20 7b 0a 20 20  ntpkey-1.14 {.  
0d20: 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78  set r [catch {ex
0d30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
0d40: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0d50: 53 28 33 2e 34 2c 27 79 27 2c 27 7a 27 29 3b 0a  S(3.4,'y','z');.
0d60: 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70    }} msg].  lapp
0d70: 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 31 20  end r $msg.} {1 
0d80: 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  {datatype mismat
0d90: 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  ch}}.do_test int
0da0: 70 6b 65 79 2d 31 2e 31 35 20 7b 0a 20 20 73 65  pkey-1.15 {.  se
0db0: 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t r [catch {exec
0dc0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
0dd0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0de0: 2d 33 2c 27 79 27 2c 27 7a 27 29 3b 0a 20 20 7d  -3,'y','z');.  }
0df0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0e00: 20 72 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d   r $msg.} {0 {}}
0e10: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
0e20: 2d 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  -1.16 {.  execsq
0e30: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0e40: 20 74 31 7d 0a 7d 20 7b 2d 33 20 79 20 7a 20 34   t1}.} {-3 y z 4
0e50: 20 6f 6e 65 20 74 77 6f 20 35 20 68 65 6c 6c 6f   one two 5 hello
0e60: 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20   world 6 second 
0e70: 65 6e 74 72 79 7d 0a 0a 23 23 23 23 20 49 4e 44  entry}..#### IND
0e80: 49 43 45 53 0a 23 20 43 68 65 63 6b 20 74 6f 20  ICES.# Check to 
0e90: 6d 61 6b 65 20 73 75 72 65 20 69 6e 64 69 63 65  make sure indice
0ea0: 73 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  s work correctly
0eb0: 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 70 72   with integer pr
0ec0: 69 6d 61 72 79 20 6b 65 79 73 0a 23 0a 64 6f 5f  imary keys.#.do_
0ed0: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 31  test intpkey-2.1
0ee0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0ef0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
0f00: 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20  i1 ON t1(b);.   
0f10: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0f20: 31 20 57 48 45 52 45 20 62 3d 3d 27 79 27 0a 20  1 WHERE b=='y'. 
0f30: 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d 0a 64 6f   }.} {-3 y z}.do
0f40: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e  _test intpkey-2.
0f50: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
0f60: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
0f70: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d  ROM t1 WHERE b==
0f80: 27 79 27 20 41 4e 44 20 72 6f 77 69 64 3c 30 0a  'y' AND rowid<0.
0f90: 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d 0a 64    }.} {-3 y z}.d
0fa0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32  o_test intpkey-2
0fb0: 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.2 {.  execsql
0fc0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
0fd0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d  FROM t1 WHERE b=
0fe0: 3d 27 79 27 20 41 4e 44 20 72 6f 77 69 64 3c 30  ='y' AND rowid<0
0ff0: 20 41 4e 44 20 72 6f 77 69 64 3e 3d 2d 32 30 0a   AND rowid>=-20.
1000: 20 20 7d 0a 7d 20 7b 2d 33 20 79 20 7a 7d 0a 64    }.} {-3 y z}.d
1010: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32  o_test intpkey-2
1020: 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.3 {.  execsql
1030: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1040: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e  FROM t1 WHERE b>
1050: 3d 27 79 27 0a 20 20 7d 0a 7d 20 7b 2d 33 20 79  ='y'.  }.} {-3 y
1060: 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   z}.do_test intp
1070: 6b 65 79 2d 32 2e 31 2e 34 20 7b 0a 20 20 65 78  key-2.1.4 {.  ex
1080: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1090: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
10a0: 52 45 20 62 3e 3d 27 79 27 20 41 4e 44 20 72 6f  RE b>='y' AND ro
10b0: 77 69 64 3c 31 30 0a 20 20 7d 0a 7d 20 7b 2d 33  wid<10.  }.} {-3
10c0: 20 79 20 7a 7d 0a 0a 64 6f 5f 74 65 73 74 20 69   y z}..do_test i
10d0: 6e 74 70 6b 65 79 2d 32 2e 32 20 7b 0a 20 20 65  ntpkey-2.2 {.  e
10e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
10f0: 41 54 45 20 74 31 20 53 45 54 20 61 3d 38 20 57  ATE t1 SET a=8 W
1100: 48 45 52 45 20 62 3d 3d 27 79 27 3b 0a 20 20 20  HERE b=='y';.   
1110: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1120: 31 20 57 48 45 52 45 20 62 3d 3d 27 79 27 3b 0a  1 WHERE b=='y';.
1130: 20 20 7d 0a 7d 20 7b 38 20 79 20 7a 7d 0a 64 6f    }.} {8 y z}.do
1140: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e  _test intpkey-2.
1150: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1160: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
1170: 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  , * FROM t1;.  }
1180: 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77 6f 20  .} {4 4 one two 
1190: 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  5 5 hello world 
11a0: 36 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  6 6 second entry
11b0: 20 38 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73   8 8 y z}.do_tes
11c0: 74 20 69 6e 74 70 6b 65 79 2d 32 2e 34 20 7b 0a  t intpkey-2.4 {.
11d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
11e0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
11f0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c  FROM t1 WHERE b<
1200: 27 73 65 63 6f 6e 64 27 0a 20 20 7d 0a 7d 20 7b  'second'.  }.} {
1210: 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  5 5 hello world 
1220: 34 20 34 20 6f 6e 65 20 74 77 6f 7d 0a 64 6f 5f  4 4 one two}.do_
1230: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e 34  test intpkey-2.4
1240: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1250: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
1260: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  d, * FROM t1 WHE
1270: 52 45 20 27 73 65 63 6f 6e 64 27 3e 62 0a 20 20  RE 'second'>b.  
1280: 7d 0a 7d 20 7b 35 20 35 20 68 65 6c 6c 6f 20 77  }.} {5 5 hello w
1290: 6f 72 6c 64 20 34 20 34 20 6f 6e 65 20 74 77 6f  orld 4 4 one two
12a0: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
12b0: 79 2d 32 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63  y-2.4.2 {.  exec
12c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
12d0: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
12e0: 31 20 57 48 45 52 45 20 38 3e 72 6f 77 69 64 20  1 WHERE 8>rowid 
12f0: 41 4e 44 20 27 73 65 63 6f 6e 64 27 3e 62 0a 20  AND 'second'>b. 
1300: 20 7d 0a 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77   }.} {4 4 one tw
1310: 6f 20 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c  o 5 5 hello worl
1320: 64 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  d}.do_test intpk
1330: 65 79 2d 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65  ey-2.4.3 {.  exe
1340: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1350: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
1360: 74 31 20 57 48 45 52 45 20 38 3e 72 6f 77 69 64  t1 WHERE 8>rowid
1370: 20 41 4e 44 20 27 73 65 63 6f 6e 64 27 3e 62 20   AND 'second'>b 
1380: 41 4e 44 20 30 3c 72 6f 77 69 64 0a 20 20 7d 0a  AND 0<rowid.  }.
1390: 7d 20 7b 34 20 34 20 6f 6e 65 20 74 77 6f 20 35  } {4 4 one two 5
13a0: 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 7d 0a   5 hello world}.
13b0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
13c0: 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.5 {.  execsql 
13d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
13e0: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  id, * FROM t1 WH
13f0: 45 52 45 20 62 3e 27 61 27 0a 20 20 7d 0a 7d 20  ERE b>'a'.  }.} 
1400: 7b 35 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64  {5 5 hello world
1410: 20 34 20 34 20 6f 6e 65 20 74 77 6f 20 36 20 36   4 4 one two 6 6
1420: 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 20 38 20   second entry 8 
1430: 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 69  8 y z}.do_test i
1440: 6e 74 70 6b 65 79 2d 32 2e 36 20 7b 0a 20 20 65  ntpkey-2.6 {.  e
1450: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
1460: 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ETE FROM t1 WHER
1470: 45 20 72 6f 77 69 64 3d 34 3b 0a 20 20 20 20 53  E rowid=4;.    S
1480: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1490: 57 48 45 52 45 20 62 3e 27 61 27 3b 0a 20 20 7d  WHERE b>'a';.  }
14a0: 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c  .} {5 hello worl
14b0: 64 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  d 6 second entry
14c0: 20 38 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20   8 y z}.do_test 
14d0: 69 6e 74 70 6b 65 79 2d 32 2e 37 20 7b 0a 20 20  intpkey-2.7 {.  
14e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
14f0: 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 2d 34  DATE t1 SET a=-4
1500: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 38 3b 0a   WHERE rowid=8;.
1510: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1520: 4d 20 74 31 20 57 48 45 52 45 20 62 3e 27 61 27  M t1 WHERE b>'a'
1530: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f  ;.  }.} {5 hello
1540: 20 77 6f 72 6c 64 20 36 20 73 65 63 6f 6e 64 20   world 6 second 
1550: 65 6e 74 72 79 20 2d 34 20 79 20 7a 7d 0a 64 6f  entry -4 y z}.do
1560: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 32 2e  _test intpkey-2.
1570: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
1580: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1590: 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 2d 34 20 79  M t1.  }.} {-4 y
15a0: 20 7a 20 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64   z 5 hello world
15b0: 20 36 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 7d   6 second entry}
15c0: 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c 20 73 74  ..# Do an SQL st
15d0: 61 74 65 6d 65 6e 74 2e 20 20 41 70 70 65 6e 64  atement.  Append
15e0: 20 74 68 65 20 73 65 61 72 63 68 20 63 6f 75 6e   the search coun
15f0: 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  t to the end of 
1600: 74 68 65 20 72 65 73 75 6c 74 2e 0a 23 0a 70 72  the result..#.pr
1610: 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20 7b 0a 20  oc count sql {. 
1620: 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f 73 65   set ::sqlite_se
1630: 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20 72  arch_count 0.  r
1640: 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5b 65  eturn [concat [e
1650: 78 65 63 73 71 6c 20 24 73 71 6c 5d 20 24 3a 3a  xecsql $sql] $::
1660: 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
1670: 75 6e 74 5d 0a 7d 0a 0a 23 20 43 72 65 61 74 65  unt].}..# Create
1680: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 69 6e   indices that in
1690: 63 6c 75 64 65 20 74 68 65 20 69 6e 74 65 67 65  clude the intege
16a0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 73  r primary key as
16b0: 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 0a 23 20   one of their.# 
16c0: 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65  columns..#.do_te
16d0: 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 31 20 7b  st intpkey-3.1 {
16e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
16f0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32   CREATE INDEX i2
1700: 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 7d 0a 7d   ON t1(a);.  }.}
1710: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   {}.do_test intp
1720: 6b 65 79 2d 33 2e 32 20 7b 0a 20 20 63 6f 75 6e  key-3.2 {.  coun
1730: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1740: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
1750: 3d 35 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c  =5;.  }.} {5 hel
1760: 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74  lo world 0}.do_t
1770: 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 33 20  est intpkey-3.3 
1780: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1790: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
17a0: 20 57 48 45 52 45 20 61 3e 34 20 41 4e 44 20 61   WHERE a>4 AND a
17b0: 3c 36 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c  <6;.  }.} {5 hel
17c0: 6c 6f 20 77 6f 72 6c 64 20 32 7d 0a 64 6f 5f 74  lo world 2}.do_t
17d0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 33 2e 34 20  est intpkey-3.4 
17e0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
17f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1800: 20 57 48 45 52 45 20 62 3e 3d 27 68 65 6c 6c 6f   WHERE b>='hello
1810: 27 20 41 4e 44 20 62 3c 27 68 65 6c 6c 6f 32 27  ' AND b<'hello2'
1820: 3b 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f  ;.  }.} {5 hello
1830: 20 77 6f 72 6c 64 20 33 7d 0a 64 6f 5f 74 65 73   world 3}.do_tes
1840: 74 20 69 6e 74 70 6b 65 79 2d 33 2e 35 20 7b 0a  t intpkey-3.5 {.
1850: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1860: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 33 20  CREATE INDEX i3 
1870: 4f 4e 20 74 31 28 63 2c 61 29 3b 0a 20 20 7d 0a  ON t1(c,a);.  }.
1880: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  } {}.do_test int
1890: 70 6b 65 79 2d 33 2e 36 20 7b 0a 20 20 63 6f 75  pkey-3.6 {.  cou
18a0: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
18b0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
18c0: 63 3d 3d 27 77 6f 72 6c 64 27 3b 0a 20 20 7d 0a  c=='world';.  }.
18d0: 7d 20 7b 35 20 68 65 6c 6c 6f 20 77 6f 72 6c 64  } {5 hello world
18e0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70   3}.do_test intp
18f0: 6b 65 79 2d 33 2e 37 20 7b 0a 20 20 65 78 65 63  key-3.7 {.  exec
1900: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
1910: 20 74 31 20 56 41 4c 55 45 53 28 31 31 2c 27 68   t1 VALUES(11,'h
1920: 65 6c 6c 6f 27 2c 27 77 6f 72 6c 64 27 29 7d 0a  ello','world')}.
1930: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1940: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1950: 48 45 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27 3b  HERE c=='world';
1960: 0a 20 20 7d 0a 7d 20 7b 35 20 68 65 6c 6c 6f 20  .  }.} {5 hello 
1970: 77 6f 72 6c 64 20 31 31 20 68 65 6c 6c 6f 20 77  world 11 hello w
1980: 6f 72 6c 64 20 35 7d 0a 64 6f 5f 74 65 73 74 20  orld 5}.do_test 
1990: 69 6e 74 70 6b 65 79 2d 33 2e 38 20 7b 0a 20 20  intpkey-3.8 {.  
19a0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
19b0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
19c0: 52 45 20 63 3d 3d 27 77 6f 72 6c 64 27 20 41 4e  RE c=='world' AN
19d0: 44 20 61 3e 37 3b 0a 20 20 7d 0a 7d 20 7b 31 31  D a>7;.  }.} {11
19e0: 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 35 7d 0a   hello world 5}.
19f0: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
1a00: 33 2e 39 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  3.9 {.  count {.
1a10: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1a20: 4d 20 74 31 20 57 48 45 52 45 20 37 3c 61 3b 0a  M t1 WHERE 7<a;.
1a30: 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20    }.} {11 hello 
1a40: 77 6f 72 6c 64 20 31 7d 0a 0a 23 20 54 65 73 74  world 1}..# Test
1a50: 20 69 6e 65 71 75 61 6c 69 74 79 20 63 6f 6e 73   inequality cons
1a60: 74 72 61 69 6e 74 73 20 6f 6e 20 69 6e 74 65 67  traints on integ
1a70: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20  er primary keys 
1a80: 61 6e 64 20 72 6f 77 69 64 73 0a 23 0a 64 6f 5f  and rowids.#.do_
1a90: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31  test intpkey-4.1
1aa0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1ab0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1ac0: 31 20 57 48 45 52 45 20 31 31 3d 72 6f 77 69 64  1 WHERE 11=rowid
1ad0: 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f  .  }.} {11 hello
1ae0: 20 77 6f 72 6c 64 20 30 7d 0a 64 6f 5f 74 65 73   world 0}.do_tes
1af0: 74 20 69 6e 74 70 6b 65 79 2d 34 2e 32 20 7b 0a  t intpkey-4.2 {.
1b00: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1b10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
1b20: 48 45 52 45 20 31 31 3d 72 6f 77 69 64 20 41 4e  HERE 11=rowid AN
1b30: 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 0a 20 20 7d  D b=='hello'.  }
1b40: 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72  .} {11 hello wor
1b50: 6c 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e  ld 0}.do_test in
1b60: 74 70 6b 65 79 2d 34 2e 33 20 7b 0a 20 20 63 6f  tpkey-4.3 {.  co
1b70: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1b80: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1b90: 20 31 31 3d 72 6f 77 69 64 20 41 4e 44 20 62 3d   11=rowid AND b=
1ba0: 3d 27 68 65 6c 6c 6f 27 20 41 4e 44 20 63 20 49  ='hello' AND c I
1bb0: 53 20 4e 4f 54 20 4e 55 4c 4c 3b 0a 20 20 7d 0a  S NOT NULL;.  }.
1bc0: 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c  } {11 hello worl
1bd0: 64 20 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  d 0}.do_test int
1be0: 70 6b 65 79 2d 34 2e 34 20 7b 0a 20 20 63 6f 75  pkey-4.4 {.  cou
1bf0: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1c00: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1c10: 72 6f 77 69 64 3d 3d 31 31 0a 20 20 7d 0a 7d 20  rowid==11.  }.} 
1c20: 7b 31 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20  {11 hello world 
1c30: 30 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  0}.do_test intpk
1c40: 65 79 2d 34 2e 35 20 7b 0a 20 20 63 6f 75 6e 74  ey-4.5 {.  count
1c50: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1c60: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 6f 69  FROM t1 WHERE oi
1c70: 64 3d 3d 31 31 20 41 4e 44 20 62 3d 3d 27 68 65  d==11 AND b=='he
1c80: 6c 6c 6f 27 0a 20 20 7d 0a 7d 20 7b 31 31 20 68  llo'.  }.} {11 h
1c90: 65 6c 6c 6f 20 77 6f 72 6c 64 20 30 7d 0a 64 6f  ello world 0}.do
1ca0: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e  _test intpkey-4.
1cb0: 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  6 {.  count {.  
1cc0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1cd0: 74 31 20 57 48 45 52 45 20 61 3d 3d 31 31 20 41  t1 WHERE a==11 A
1ce0: 4e 44 20 62 3d 3d 27 68 65 6c 6c 6f 27 20 41 4e  ND b=='hello' AN
1cf0: 44 20 63 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 3b  D c IS NOT NULL;
1d00: 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f  .  }.} {11 hello
1d10: 20 77 6f 72 6c 64 20 30 7d 0a 0a 64 6f 5f 74 65   world 0}..do_te
1d20: 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 37 20 7b  st intpkey-4.7 {
1d30: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
1d40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
1d50: 57 48 45 52 45 20 38 3c 72 6f 77 69 64 3b 0a 20  WHERE 8<rowid;. 
1d60: 20 7d 0a 7d 20 7b 31 31 20 68 65 6c 6c 6f 20 77   }.} {11 hello w
1d70: 6f 72 6c 64 20 31 7d 0a 64 6f 5f 74 65 73 74 20  orld 1}.do_test 
1d80: 69 6e 74 70 6b 65 79 2d 34 2e 38 20 7b 0a 20 20  intpkey-4.8 {.  
1d90: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1da0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1db0: 52 45 20 38 3c 72 6f 77 69 64 20 41 4e 44 20 31  RE 8<rowid AND 1
1dc0: 31 3e 3d 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31  1>=oid;.  }.} {1
1dd0: 31 20 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 7d  1 hello world 1}
1de0: 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79  .do_test intpkey
1df0: 2d 34 2e 39 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -4.9 {.  count {
1e00: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1e10: 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31 3c 3d  OM t1 WHERE 11<=
1e20: 5f 72 6f 77 69 64 5f 20 41 4e 44 20 31 32 3e 3d  _rowid_ AND 12>=
1e30: 61 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 68 65 6c  a;.  }.} {11 hel
1e40: 6c 6f 20 77 6f 72 6c 64 20 31 7d 0a 64 6f 5f 74  lo world 1}.do_t
1e50: 65 73 74 20 69 6e 74 70 6b 65 79 2d 34 2e 31 30  est intpkey-4.10
1e60: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1e70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1e80: 31 20 57 48 45 52 45 20 30 3e 3d 5f 72 6f 77 69  1 WHERE 0>=_rowi
1e90: 64 5f 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20 79 20  d_;.  }.} {-4 y 
1ea0: 7a 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74  z 1}.do_test int
1eb0: 70 6b 65 79 2d 34 2e 31 31 20 7b 0a 20 20 63 6f  pkey-4.11 {.  co
1ec0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1ed0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1ee0: 20 61 3c 30 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 20   a<0;.  }.} {-4 
1ef0: 79 20 7a 20 31 7d 0a 64 6f 5f 74 65 73 74 20 69  y z 1}.do_test i
1f00: 6e 74 70 6b 65 79 2d 34 2e 31 32 20 7b 0a 20 20  ntpkey-4.12 {.  
1f10: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1f20: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1f30: 52 45 20 61 3c 30 20 41 4e 44 20 61 3e 31 30 3b  RE a<0 AND a>10;
1f40: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 4d 61  .  }.} {1}..# Ma
1f50: 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 4f 4b  ke sure it is OK
1f60: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 72 6f 77   to insert a row
1f70: 69 64 20 6f 66 20 30 0a 23 0a 64 6f 5f 74 65 73  id of 0.#.do_tes
1f80: 74 20 69 6e 74 70 6b 65 79 2d 35 2e 31 20 7b 0a  t intpkey-5.1 {.
1f90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1fa0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1fb0: 41 4c 55 45 53 28 30 2c 27 7a 65 72 6f 27 2c 27  ALUES(0,'zero','
1fc0: 65 6e 74 72 79 27 29 3b 0a 20 20 7d 0a 20 20 63  entry');.  }.  c
1fd0: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1fe0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1ff0: 45 20 61 3d 30 3b 0a 20 20 7d 0a 7d 20 7b 30 20  E a=0;.  }.} {0 
2000: 7a 65 72 6f 20 65 6e 74 72 79 20 30 7d 0a 64 6f  zero entry 0}.do
2010: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 35 2e  _test intpkey-5.
2020: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2030: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
2040: 2c 20 61 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a  , a FROM t1.  }.
2050: 7d 20 7b 2d 34 20 2d 34 20 30 20 30 20 35 20 35  } {-4 -4 0 0 5 5
2060: 20 36 20 36 20 31 31 20 31 31 7d 0a 0a 23 20 54   6 6 11 11}..# T
2070: 65 73 74 20 74 68 65 20 61 62 69 6c 69 74 79 20  est the ability 
2080: 6f 66 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d  of the COPY comm
2090: 61 6e 64 20 74 6f 20 70 75 74 20 64 61 74 61 20  and to put data 
20a0: 69 6e 74 6f 20 61 0a 23 20 74 61 62 6c 65 20 74  into a.# table t
20b0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  hat contains an 
20c0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
20d0: 6b 65 79 2e 0a 23 0a 23 20 43 4f 50 59 20 63 6f  key..#.# COPY co
20e0: 6d 6d 61 6e 64 20 68 61 73 20 62 65 65 6e 20 72  mmand has been r
20f0: 65 6d 6f 76 65 64 2e 20 20 42 75 74 20 77 65 20  emoved.  But we 
2100: 72 65 74 61 69 6e 20 74 68 65 73 65 20 74 65 73  retain these tes
2110: 74 73 20 73 6f 0a 23 20 74 68 61 74 20 74 68 65  ts so.# that the
2120: 20 74 61 62 6c 65 73 20 77 69 6c 6c 20 63 6f 6e   tables will con
2130: 74 61 69 6e 20 74 68 65 20 72 69 67 68 74 20 64  tain the right d
2140: 61 74 61 20 66 6f 72 20 74 65 73 74 73 20 74 68  ata for tests th
2150: 61 74 20 66 6f 6c 6c 6f 77 2e 0a 23 0a 64 6f 5f  at follow..#.do_
2160: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 36 2e 31  test intpkey-6.1
2170: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2180: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e     BEGIN;.    IN
2190: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
21a0: 55 45 53 28 32 30 2c 27 62 2d 32 30 27 2c 27 63  UES(20,'b-20','c
21b0: 2d 32 30 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  -20');.    INSER
21c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
21d0: 28 32 31 2c 27 62 2d 32 31 27 2c 27 63 2d 32 31  (21,'b-21','c-21
21e0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
21f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 32  NTO t1 VALUES(22
2200: 2c 27 62 2d 32 32 27 2c 27 63 2d 32 32 27 29 3b  ,'b-22','c-22');
2210: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
2220: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2230: 31 20 57 48 45 52 45 20 61 3e 3d 32 30 3b 0a 20  1 WHERE a>=20;. 
2240: 20 7d 0a 7d 20 7b 32 30 20 62 2d 32 30 20 63 2d   }.} {20 b-20 c-
2250: 32 30 20 32 31 20 62 2d 32 31 20 63 2d 32 31 20  20 21 b-21 c-21 
2260: 32 32 20 62 2d 32 32 20 63 2d 32 32 7d 0a 64 6f  22 b-22 c-22}.do
2270: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 36 2e  _test intpkey-6.
2280: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2290: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
22a0: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 68  M t1 WHERE b=='h
22b0: 65 6c 6c 6f 27 0a 20 20 7d 0a 7d 20 7b 35 20 68  ello'.  }.} {5 h
22c0: 65 6c 6c 6f 20 77 6f 72 6c 64 20 31 31 20 68 65  ello world 11 he
22d0: 6c 6c 6f 20 77 6f 72 6c 64 7d 0a 64 6f 5f 74 65  llo world}.do_te
22e0: 73 74 20 69 6e 74 70 6b 65 79 2d 36 2e 33 20 7b  st intpkey-6.3 {
22f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2300: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
2310: 57 48 45 52 45 20 62 3d 27 62 2d 32 31 27 3b 0a  WHERE b='b-21';.
2320: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2330: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 3d 27 62  M t1 WHERE b=='b
2340: 2d 32 31 27 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  -21';.  }.} {}.d
2350: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 36  o_test intpkey-6
2360: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
2370: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2380: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 3d 32  OM t1 WHERE a>=2
2390: 30 0a 20 20 7d 0a 7d 20 7b 32 30 20 62 2d 32 30  0.  }.} {20 b-20
23a0: 20 63 2d 32 30 20 32 32 20 62 2d 32 32 20 63 2d   c-20 22 b-22 c-
23b0: 32 32 7d 0a 0a 23 20 44 6f 20 61 6e 20 69 6e 73  22}..# Do an ins
23c0: 65 72 74 20 6f 66 20 76 61 6c 75 65 73 20 77 69  ert of values wi
23d0: 74 68 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 73  th the columns s
23e0: 70 65 63 69 66 69 65 64 20 6f 75 74 20 6f 66 20  pecified out of 
23f0: 6f 72 64 65 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  order..#.do_test
2400: 20 69 6e 74 70 6b 65 79 2d 37 2e 31 20 7b 0a 20   intpkey-7.1 {. 
2410: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
2420: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 63 2c  NSERT INTO t1(c,
2430: 62 2c 61 29 20 56 41 4c 55 45 53 28 27 72 6f 77  b,a) VALUES('row
2440: 27 2c 27 6e 65 77 27 2c 33 30 29 3b 0a 20 20 20  ','new',30);.   
2450: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2460: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 33  1 WHERE rowid>=3
2470: 30 3b 0a 20 20 7d 0a 7d 20 7b 33 30 20 6e 65 77  0;.  }.} {30 new
2480: 20 72 6f 77 7d 0a 64 6f 5f 74 65 73 74 20 69 6e   row}.do_test in
2490: 74 70 6b 65 79 2d 37 2e 32 20 7b 0a 20 20 65 78  tpkey-7.2 {.  ex
24a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
24b0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
24c0: 52 45 20 72 6f 77 69 64 3e 32 30 3b 0a 20 20 7d  RE rowid>20;.  }
24d0: 0a 7d 20 7b 32 32 20 62 2d 32 32 20 63 2d 32 32  .} {22 b-22 c-22
24e0: 20 33 30 20 6e 65 77 20 72 6f 77 7d 0a 0a 23 20   30 new row}..# 
24f0: 44 6f 20 61 6e 20 69 6e 73 65 72 74 20 66 72 6f  Do an insert fro
2500: 6d 20 61 20 73 65 6c 65 63 74 20 73 74 61 74 65  m a select state
2510: 6d 65 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ment..#.do_test 
2520: 69 6e 74 70 6b 65 79 2d 38 2e 31 20 7b 0a 20 20  intpkey-8.1 {.  
2530: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2540: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
2550: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
2560: 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20 20 20 20  KEY, y, z);.    
2570: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
2580: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
2590: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
25a0: 64 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  d FROM t2;.  }.}
25b0: 20 7b 2d 34 20 30 20 35 20 36 20 31 31 20 32 30   {-4 0 5 6 11 20
25c0: 20 32 32 20 33 30 7d 0a 64 6f 5f 74 65 73 74 20   22 30}.do_test 
25d0: 69 6e 74 70 6b 65 79 2d 38 2e 32 20 7b 0a 20 20  intpkey-8.2 {.  
25e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
25f0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 32 3b 0a  LECT x FROM t2;.
2600: 20 20 7d 0a 7d 20 7b 2d 34 20 30 20 35 20 36 20    }.} {-4 0 5 6 
2610: 31 31 20 32 30 20 32 32 20 33 30 7d 0a 0a 64 6f  11 20 22 30}..do
2620: 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 39 2e  _test intpkey-9.
2630: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2640: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
2650: 54 20 63 3d 27 77 77 77 27 20 57 48 45 52 45 20  T c='www' WHERE 
2660: 63 3d 27 77 6f 72 6c 64 27 3b 0a 20 20 20 20 53  c='world';.    S
2670: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 2c 20  ELECT rowid, a, 
2680: 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  c FROM t1 WHERE 
2690: 63 3d 3d 27 77 77 77 27 3b 0a 20 20 7d 0a 7d 20  c=='www';.  }.} 
26a0: 7b 35 20 35 20 77 77 77 20 31 31 20 31 31 20 77  {5 5 www 11 11 w
26b0: 77 77 7d 0a 0a 0a 23 20 43 68 65 63 6b 20 69 6e  ww}...# Check in
26c0: 73 65 72 74 20 6f 66 20 4e 55 4c 4c 20 66 6f 72  sert of NULL for
26d0: 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 23 0a 64   primary key.#.d
26e0: 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31  o_test intpkey-1
26f0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
2700: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
2710: 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t2;.    CREATE 
2720: 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54 45 47  TABLE t2(x INTEG
2730: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
2740: 79 2c 20 7a 29 3b 0a 20 20 20 20 49 4e 53 45 52  y, z);.    INSER
2750: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
2760: 28 4e 55 4c 4c 2c 20 31 2c 20 32 29 3b 0a 20 20  (NULL, 1, 2);.  
2770: 20 20 53 45 4c 45 43 54 20 2a 20 66 72 6f 6d 20    SELECT * from 
2780: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32  t2;.  }.} {1 1 2
2790: 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65  }.do_test intpke
27a0: 79 2d 31 30 2e 32 20 7b 0a 20 20 65 78 65 63 73  y-10.2 {.  execs
27b0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
27c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e  INTO t2 VALUES(N
27d0: 55 4c 4c 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20  ULL, 2, 3);.    
27e0: 53 45 4c 45 43 54 20 2a 20 66 72 6f 6d 20 74 32  SELECT * from t2
27f0: 20 57 48 45 52 45 20 78 3d 32 3b 0a 20 20 7d 0a   WHERE x=2;.  }.
2800: 7d 20 7b 32 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {2 2 3}.do_tes
2810: 74 20 69 6e 74 70 6b 65 79 2d 31 30 2e 33 20 7b  t intpkey-10.3 {
2820: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2830: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
2840: 53 45 4c 45 43 54 20 4e 55 4c 4c 2c 20 7a 2c 20  SELECT NULL, z, 
2850: 79 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 53  y FROM t2;.    S
2860: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
2870: 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 32 20  .  }.} {1 1 2 2 
2880: 32 20 33 20 33 20 32 20 31 20 34 20 33 20 32 7d  2 3 3 2 1 4 3 2}
2890: 0a 0a 23 20 54 68 69 73 20 74 65 73 74 73 20 63  ..# This tests c
28a0: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
28b0: 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
28c0: 20 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 75   number can be u
28d0: 73 65 64 0a 23 20 74 6f 20 72 65 66 65 72 65 6e  sed.# to referen
28e0: 63 65 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  ce an integer pr
28f0: 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64 6f 5f  imary key..#.do_
2900: 74 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 31 2e  test intpkey-11.
2910: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2920: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
2930: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 32 2e 30  M t1 WHERE a=2.0
2940: 2b 33 2e 30 3b 0a 20 20 7d 0a 7d 20 7b 68 65 6c  +3.0;.  }.} {hel
2950: 6c 6f 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70  lo}.do_test intp
2960: 6b 65 79 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65  key-11.1 {.  exe
2970: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2980: 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T b FROM t1 WHER
2990: 45 20 61 3d 32 2e 30 2b 33 2e 35 3b 0a 20 20 7d  E a=2.0+3.5;.  }
29a0: 0a 7d 20 7b 7d 0a 0a 69 6e 74 65 67 72 69 74 79  .} {}..integrity
29b0: 5f 63 68 65 63 6b 20 69 6e 74 70 6b 65 79 2d 31  _check intpkey-1
29c0: 32 2e 31 0a 0a 23 20 54 72 79 20 74 6f 20 75 73  2.1..# Try to us
29d0: 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
29e0: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 66 6c 6f  looks like a flo
29f0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
2a00: 65 72 20 61 73 0a 23 20 61 6e 20 69 6e 74 65 67  er as.# an integ
2a10: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 20  er primary key. 
2a20: 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 63 74   This should act
2a30: 75 61 6c 6c 79 20 77 6f 72 6b 20 77 68 65 6e 20  ually work when 
2a40: 74 68 65 20 66 6c 6f 61 74 69 6e 67 0a 23 20 70  the floating.# p
2a50: 6f 69 6e 74 20 76 61 6c 75 65 20 63 61 6e 20 62  oint value can b
2a60: 65 20 72 6f 75 6e 64 65 64 20 74 6f 20 61 6e 20  e rounded to an 
2a70: 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 20  integer without 
2a80: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 0a 23 0a  loss of data..#.
2a90: 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b 65 79 2d  do_test intpkey-
2aa0: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
2ab0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2ac0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d  FROM t1 WHERE a=
2ad0: 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  1;.  }.} {}.do_t
2ae0: 65 73 74 20 69 6e 74 70 6b 65 79 2d 31 33 2e 32  est intpkey-13.2
2af0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2b00: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2b10: 31 20 56 41 4c 55 45 53 28 27 31 2e 30 27 2c 32  1 VALUES('1.0',2
2b20: 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,3);.    SELECT 
2b30: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2b40: 61 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20  a=1;.  }.} {1 2 
2b50: 33 7d 0a 64 6f 5f 74 65 73 74 20 69 6e 74 70 6b  3}.do_test intpk
2b60: 65 79 2d 31 33 2e 33 20 7b 0a 20 20 63 61 74 63  ey-13.3 {.  catc
2b70: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
2b80: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
2b90: 28 27 31 2e 35 27 2c 33 2c 34 29 3b 0a 20 20 7d  ('1.5',3,4);.  }
2ba0: 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20  .} {1 {datatype 
2bb0: 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 74 65  mismatch}}.do_te
2bc0: 73 74 20 69 6e 74 70 6b 65 79 2d 31 33 2e 34 20  st intpkey-13.4 
2bd0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2be0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2bf0: 31 20 56 41 4c 55 45 53 28 78 27 31 32 33 34 35  1 VALUES(x'12345
2c00: 36 27 2c 33 2c 34 29 3b 0a 20 20 7d 0a 7d 20 7b  6',3,4);.  }.} {
2c10: 31 20 7b 64 61 74 61 74 79 70 65 20 6d 69 73 6d  1 {datatype mism
2c20: 61 74 63 68 7d 7d 0a 64 6f 5f 74 65 73 74 20 69  atch}}.do_test i
2c30: 6e 74 70 6b 65 79 2d 31 33 2e 35 20 7b 0a 20 20  ntpkey-13.5 {.  
2c40: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49  catchsql {.    I
2c50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2c60: 4c 55 45 53 28 27 2b 31 32 33 34 35 36 37 38 39  LUES('+123456789
2c70: 30 27 2c 33 2c 34 29 3b 0a 20 20 7d 0a 7d 20 7b  0',3,4);.  }.} {
2c80: 30 20 7b 7d 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74  0 {}}...finish_t
2c90: 65 73 74 0a                                      est.