/ Hex Artifact Content
Login

Artifact d125991eea1ffdea800d48471afd8fc4acc10b01:


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 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 6d  is testing the m
01d0: 61 67 69 63 20 52 4f 57 49 44 20 63 6f 6c 75 6d  agic ROWID colum
01e0: 6e 20 74 68 61 74 20 69 73 0a 23 20 66 6f 75 6e  n that is.# foun
01f0: 64 20 6f 6e 20 61 6c 6c 20 74 61 62 6c 65 73 2e  d on all tables.
0200: 0a 23 0a 23 20 24 49 64 3a 20 72 6f 77 69 64 2e  .#.# $Id: rowid.
0210: 74 65 73 74 2c 76 20 31 2e 31 39 20 32 30 30 37  test,v 1.19 2007
0220: 2f 30 34 2f 32 35 20 31 31 3a 33 32 3a 33 30 20  /04/25 11:32:30 
0230: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh Exp $..set t
0240: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0250: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0260: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0270: 74 65 72 2e 74 63 6c 0a 0a 23 20 42 61 73 69 63  ter.tcl..# Basic
0280: 20 52 4f 57 49 44 20 66 75 6e 63 74 69 6f 6e 61   ROWID functiona
0290: 6c 69 74 79 20 74 65 73 74 73 2e 0a 23 0a 64 6f  lity tests..#.do
02a0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 2e 31 20  _test rowid-1.1 
02b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
02c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
02d0: 31 28 78 20 69 6e 74 2c 20 79 20 69 6e 74 29 3b  1(x int, y int);
02e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
02f0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29 3b   t1 VALUES(1,2);
0300: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0310: 20 74 31 20 56 41 4c 55 45 53 28 33 2c 34 29 3b   t1 VALUES(3,4);
0320: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52  .    SELECT x FR
0330: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 79  OM t1 ORDER BY y
0340: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 33 7d 0a 64 6f  ;.  }.} {1 3}.do
0350: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 2e 32 20  _test rowid-1.2 
0360: 7b 0a 20 20 73 65 74 20 72 20 5b 65 78 65 63 73  {.  set r [execs
0370: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
0380: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
0390: 59 20 78 7d 5d 0a 20 20 67 6c 6f 62 61 6c 20 78  Y x}].  global x
03a0: 32 72 6f 77 69 64 20 72 6f 77 69 64 32 78 0a 20  2rowid rowid2x. 
03b0: 20 73 65 74 20 78 32 72 6f 77 69 64 28 31 29 20   set x2rowid(1) 
03c0: 5b 6c 69 6e 64 65 78 20 24 72 20 30 5d 0a 20 20  [lindex $r 0].  
03d0: 73 65 74 20 78 32 72 6f 77 69 64 28 33 29 20 5b  set x2rowid(3) [
03e0: 6c 69 6e 64 65 78 20 24 72 20 31 5d 0a 20 20 73  lindex $r 1].  s
03f0: 65 74 20 72 6f 77 69 64 32 78 28 24 78 32 72 6f  et rowid2x($x2ro
0400: 77 69 64 28 31 29 29 20 31 0a 20 20 73 65 74 20  wid(1)) 1.  set 
0410: 72 6f 77 69 64 32 78 28 24 78 32 72 6f 77 69 64  rowid2x($x2rowid
0420: 28 33 29 29 20 33 0a 20 20 6c 6c 65 6e 67 74 68  (3)) 3.  llength
0430: 20 24 72 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73   $r.} {2}.do_tes
0440: 74 20 72 6f 77 69 64 2d 31 2e 33 20 7b 0a 20 20  t rowid-1.3 {.  
0450: 67 6c 6f 62 61 6c 20 78 32 72 6f 77 69 64 0a 20  global x2rowid. 
0460: 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54   set sql "SELECT
0470: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0480: 20 72 6f 77 69 64 3d 3d 24 78 32 72 6f 77 69 64   rowid==$x2rowid
0490: 28 31 29 22 0a 20 20 65 78 65 63 73 71 6c 20 24  (1)".  execsql $
04a0: 73 71 6c 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73  sql.} {1}.do_tes
04b0: 74 20 72 6f 77 69 64 2d 31 2e 34 20 7b 0a 20 20  t rowid-1.4 {.  
04c0: 67 6c 6f 62 61 6c 20 78 32 72 6f 77 69 64 0a 20  global x2rowid. 
04d0: 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54   set sql "SELECT
04e0: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
04f0: 20 72 6f 77 69 64 3d 3d 24 78 32 72 6f 77 69 64   rowid==$x2rowid
0500: 28 33 29 22 0a 20 20 65 78 65 63 73 71 6c 20 24  (3)".  execsql $
0510: 73 71 6c 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73  sql.} {3}.do_tes
0520: 74 20 72 6f 77 69 64 2d 31 2e 35 20 7b 0a 20 20  t rowid-1.5 {.  
0530: 67 6c 6f 62 61 6c 20 78 32 72 6f 77 69 64 0a 20  global x2rowid. 
0540: 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54   set sql "SELECT
0550: 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   x FROM t1 WHERE
0560: 20 6f 69 64 3d 3d 24 78 32 72 6f 77 69 64 28 31   oid==$x2rowid(1
0570: 29 22 0a 20 20 65 78 65 63 73 71 6c 20 24 73 71  )".  execsql $sq
0580: 6c 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  l.} {1}.do_test 
0590: 72 6f 77 69 64 2d 31 2e 36 20 7b 0a 20 20 67 6c  rowid-1.6 {.  gl
05a0: 6f 62 61 6c 20 78 32 72 6f 77 69 64 0a 20 20 73  obal x2rowid.  s
05b0: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78  et sql "SELECT x
05c0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 4f   FROM t1 WHERE O
05d0: 49 44 3d 3d 24 78 32 72 6f 77 69 64 28 33 29 22  ID==$x2rowid(3)"
05e0: 0a 20 20 65 78 65 63 73 71 6c 20 24 73 71 6c 0a  .  execsql $sql.
05f0: 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  } {3}.do_test ro
0600: 77 69 64 2d 31 2e 37 20 7b 0a 20 20 67 6c 6f 62  wid-1.7 {.  glob
0610: 61 6c 20 78 32 72 6f 77 69 64 0a 20 20 73 65 74  al x2rowid.  set
0620: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78 20 46   sql "SELECT x F
0630: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 5f 72 6f  ROM t1 WHERE _ro
0640: 77 69 64 5f 3d 3d 24 78 32 72 6f 77 69 64 28 31  wid_==$x2rowid(1
0650: 29 22 0a 20 20 65 78 65 63 73 71 6c 20 24 73 71  )".  execsql $sq
0660: 6c 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  l.} {1}.do_test 
0670: 72 6f 77 69 64 2d 31 2e 37 2e 31 20 7b 0a 20 20  rowid-1.7.1 {.  
0680: 77 68 69 6c 65 20 31 20 7b 0a 20 20 20 20 73 65  while 1 {.    se
0690: 74 20 6e 6f 72 6f 77 20 5b 65 78 70 72 20 7b 69  t norow [expr {i
06a0: 6e 74 28 72 61 6e 64 28 29 2a 31 30 30 30 30 30  nt(rand()*100000
06b0: 30 29 7d 5d 0a 20 20 20 20 69 66 20 7b 24 6e 6f  0)}].    if {$no
06c0: 72 6f 77 21 3d 24 78 32 72 6f 77 69 64 28 31 29  row!=$x2rowid(1)
06d0: 20 26 26 20 24 6e 6f 72 6f 77 21 3d 24 78 32 72   && $norow!=$x2r
06e0: 6f 77 69 64 28 33 29 7d 20 62 72 65 61 6b 0a 20  owid(3)} break. 
06f0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 22 53 45   }.  execsql "SE
0700: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57  LECT x FROM t1 W
0710: 48 45 52 45 20 72 6f 77 69 64 3d 24 6e 6f 72 6f  HERE rowid=$noro
0720: 77 22 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  w".} {}.do_test 
0730: 72 6f 77 69 64 2d 31 2e 38 20 7b 0a 20 20 67 6c  rowid-1.8 {.  gl
0740: 6f 62 61 6c 20 78 32 72 6f 77 69 64 0a 20 20 73  obal x2rowid.  s
0750: 65 74 20 76 20 5b 65 78 65 63 73 71 6c 20 7b 53  et v [execsql {S
0760: 45 4c 45 43 54 20 78 2c 20 6f 69 64 20 46 52 4f  ELECT x, oid FRO
0770: 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20 78 7d  M t1 order by x}
0780: 5d 0a 20 20 73 65 74 20 76 32 20 5b 6c 69 73 74  ].  set v2 [list
0790: 20 31 20 24 78 32 72 6f 77 69 64 28 31 29 20 33   1 $x2rowid(1) 3
07a0: 20 24 78 32 72 6f 77 69 64 28 33 29 5d 0a 20 20   $x2rowid(3)].  
07b0: 65 78 70 72 20 7b 24 76 3d 3d 24 76 32 7d 0a 7d  expr {$v==$v2}.}
07c0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77   {1}.do_test row
07d0: 69 64 2d 31 2e 39 20 7b 0a 20 20 67 6c 6f 62 61  id-1.9 {.  globa
07e0: 6c 20 78 32 72 6f 77 69 64 0a 20 20 73 65 74 20  l x2rowid.  set 
07f0: 76 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  v [execsql {SELE
0800: 43 54 20 78 2c 20 52 6f 77 49 44 20 46 52 4f 4d  CT x, RowID FROM
0810: 20 74 31 20 6f 72 64 65 72 20 62 79 20 78 7d 5d   t1 order by x}]
0820: 0a 20 20 73 65 74 20 76 32 20 5b 6c 69 73 74 20  .  set v2 [list 
0830: 31 20 24 78 32 72 6f 77 69 64 28 31 29 20 33 20  1 $x2rowid(1) 3 
0840: 24 78 32 72 6f 77 69 64 28 33 29 5d 0a 20 20 65  $x2rowid(3)].  e
0850: 78 70 72 20 7b 24 76 3d 3d 24 76 32 7d 0a 7d 20  xpr {$v==$v2}.} 
0860: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  {1}.do_test rowi
0870: 64 2d 31 2e 31 30 20 7b 0a 20 20 67 6c 6f 62 61  d-1.10 {.  globa
0880: 6c 20 78 32 72 6f 77 69 64 0a 20 20 73 65 74 20  l x2rowid.  set 
0890: 76 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  v [execsql {SELE
08a0: 43 54 20 78 2c 20 5f 72 6f 77 69 64 5f 20 46 52  CT x, _rowid_ FR
08b0: 4f 4d 20 74 31 20 6f 72 64 65 72 20 62 79 20 78  OM t1 order by x
08c0: 7d 5d 0a 20 20 73 65 74 20 76 32 20 5b 6c 69 73  }].  set v2 [lis
08d0: 74 20 31 20 24 78 32 72 6f 77 69 64 28 31 29 20  t 1 $x2rowid(1) 
08e0: 33 20 24 78 32 72 6f 77 69 64 28 33 29 5d 0a 20  3 $x2rowid(3)]. 
08f0: 20 65 78 70 72 20 7b 24 76 3d 3d 24 76 32 7d 0a   expr {$v==$v2}.
0900: 7d 20 7b 31 7d 0a 0a 23 20 57 65 20 63 61 6e 20  } {1}..# We can 
0910: 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
0920: 20 74 68 65 20 52 4f 57 49 44 20 63 6f 6c 75 6d   the ROWID colum
0930: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72 6f 77  n..#.do_test row
0940: 69 64 2d 32 2e 31 20 7b 0a 20 20 63 61 74 63 68  id-2.1 {.  catch
0950: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
0960: 20 49 4e 54 4f 20 74 31 28 72 6f 77 69 64 2c 78   INTO t1(rowid,x
0970: 2c 79 29 20 56 41 4c 55 45 53 28 31 32 33 34 2c  ,y) VALUES(1234,
0980: 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  5,6);.    SELECT
0990: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
09a0: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 31  1;.  }.} {0 {1 1
09b0: 20 32 20 32 20 33 20 34 20 31 32 33 34 20 35 20   2 2 3 4 1234 5 
09c0: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  6}}.do_test rowi
09d0: 64 2d 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  d-2.2 {.  catchs
09e0: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
09f0: 74 31 20 53 45 54 20 72 6f 77 69 64 3d 31 32 33  t1 SET rowid=123
0a00: 34 35 20 57 48 45 52 45 20 78 3d 3d 31 3b 0a 20  45 WHERE x==1;. 
0a10: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
0a20: 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d   * FROM t1.  }.}
0a30: 20 7b 30 20 7b 32 20 33 20 34 20 31 32 33 34 20   {0 {2 3 4 1234 
0a40: 35 20 36 20 31 32 33 34 35 20 31 20 32 7d 7d 0a  5 6 12345 1 2}}.
0a50: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 32 2e  do_test rowid-2.
0a60: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
0a70: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0a80: 20 74 31 28 79 2c 78 2c 6f 69 64 29 20 56 41 4c   t1(y,x,oid) VAL
0a90: 55 45 53 28 38 2c 37 2c 31 32 33 35 29 3b 0a 20  UES(8,7,1235);. 
0aa0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
0ab0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
0ac0: 20 72 6f 77 69 64 3e 31 30 30 30 3b 0a 20 20 7d   rowid>1000;.  }
0ad0: 0a 7d 20 7b 30 20 7b 31 32 33 34 20 35 20 36 20  .} {0 {1234 5 6 
0ae0: 31 32 33 35 20 37 20 38 20 31 32 33 34 35 20 31  1235 7 8 12345 1
0af0: 20 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77   2}}.do_test row
0b00: 69 64 2d 32 2e 34 20 7b 0a 20 20 63 61 74 63 68  id-2.4 {.  catch
0b10: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
0b20: 20 74 31 20 53 45 54 20 6f 69 64 3d 31 32 33 34   t1 SET oid=1234
0b30: 36 20 57 48 45 52 45 20 78 3d 3d 31 3b 0a 20 20  6 WHERE x==1;.  
0b40: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
0b50: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
0b60: 20 7b 30 20 7b 32 20 33 20 34 20 31 32 33 34 20   {0 {2 3 4 1234 
0b70: 35 20 36 20 31 32 33 35 20 37 20 38 20 31 32 33  5 6 1235 7 8 123
0b80: 34 36 20 31 20 32 7d 7d 0a 64 6f 5f 74 65 73 74  46 1 2}}.do_test
0b90: 20 72 6f 77 69 64 2d 32 2e 35 20 7b 0a 20 20 63   rowid-2.5 {.  c
0ba0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
0bb0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 2c 5f  SERT INTO t1(x,_
0bc0: 72 6f 77 69 64 5f 2c 79 29 20 56 41 4c 55 45 53  rowid_,y) VALUES
0bd0: 28 39 2c 31 32 33 36 2c 31 30 29 3b 0a 20 20 20  (9,1236,10);.   
0be0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a   SELECT rowid, *
0bf0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72   FROM t1 WHERE r
0c00: 6f 77 69 64 3e 31 30 30 30 3b 0a 20 20 7d 0a 7d  owid>1000;.  }.}
0c10: 20 7b 30 20 7b 31 32 33 34 20 35 20 36 20 31 32   {0 {1234 5 6 12
0c20: 33 35 20 37 20 38 20 31 32 33 36 20 39 20 31 30  35 7 8 1236 9 10
0c30: 20 31 32 33 34 36 20 31 20 32 7d 7d 0a 64 6f 5f   12346 1 2}}.do_
0c40: 74 65 73 74 20 72 6f 77 69 64 2d 32 2e 36 20 7b  test rowid-2.6 {
0c50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
0c60: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
0c70: 5f 72 6f 77 69 64 5f 3d 31 32 33 34 37 20 57 48  _rowid_=12347 WH
0c80: 45 52 45 20 78 3d 3d 31 3b 0a 20 20 20 20 53 45  ERE x==1;.    SE
0c90: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
0ca0: 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69  OM t1 WHERE rowi
0cb0: 64 3e 31 30 30 30 3b 0a 20 20 7d 0a 7d 20 7b 30  d>1000;.  }.} {0
0cc0: 20 7b 31 32 33 34 20 35 20 36 20 31 32 33 35 20   {1234 5 6 1235 
0cd0: 37 20 38 20 31 32 33 36 20 39 20 31 30 20 31 32  7 8 1236 9 10 12
0ce0: 33 34 37 20 31 20 32 7d 7d 0a 0a 23 20 42 75 74  347 1 2}}..# But
0cf0: 20 77 65 20 63 61 6e 20 75 73 65 20 52 4f 57 49   we can use ROWI
0d00: 44 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63  D in the WHERE c
0d10: 6c 61 75 73 65 20 6f 66 20 61 6e 20 55 50 44 41  lause of an UPDA
0d20: 54 45 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  TE that does not
0d30: 0a 23 20 63 68 61 6e 67 65 20 74 68 65 20 52 4f  .# change the RO
0d40: 57 49 44 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72  WID..#.do_test r
0d50: 6f 77 69 64 2d 32 2e 37 20 7b 0a 20 20 67 6c 6f  owid-2.7 {.  glo
0d60: 62 61 6c 20 78 32 72 6f 77 69 64 0a 20 20 73 65  bal x2rowid.  se
0d70: 74 20 73 71 6c 20 22 55 50 44 41 54 45 20 74 31  t sql "UPDATE t1
0d80: 20 53 45 54 20 78 3d 32 20 57 48 45 52 45 20 4f   SET x=2 WHERE O
0d90: 49 44 3d 3d 24 78 32 72 6f 77 69 64 28 33 29 22  ID==$x2rowid(3)"
0da0: 0a 20 20 65 78 65 63 73 71 6c 20 24 73 71 6c 0a  .  execsql $sql.
0db0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0dc0: 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T x FROM t1 ORDE
0dd0: 52 20 42 59 20 78 7d 0a 7d 20 7b 31 20 32 20 35  R BY x}.} {1 2 5
0de0: 20 37 20 39 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   7 9}.do_test ro
0df0: 77 69 64 2d 32 2e 38 20 7b 0a 20 20 67 6c 6f 62  wid-2.8 {.  glob
0e00: 61 6c 20 78 32 72 6f 77 69 64 0a 20 20 73 65 74  al x2rowid.  set
0e10: 20 73 71 6c 20 22 55 50 44 41 54 45 20 74 31 20   sql "UPDATE t1 
0e20: 53 45 54 20 78 3d 33 20 57 48 45 52 45 20 5f 72  SET x=3 WHERE _r
0e30: 6f 77 69 64 5f 3d 3d 24 78 32 72 6f 77 69 64 28  owid_==$x2rowid(
0e40: 33 29 22 0a 20 20 65 78 65 63 73 71 6c 20 24 73  3)".  execsql $s
0e50: 71 6c 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  ql.  execsql {SE
0e60: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4f  LECT x FROM t1 O
0e70: 52 44 45 52 20 42 59 20 78 7d 0a 7d 20 7b 31 20  RDER BY x}.} {1 
0e80: 33 20 35 20 37 20 39 7d 0a 0a 23 20 57 65 20 63  3 5 7 9}..# We c
0e90: 61 6e 6e 6f 74 20 69 6e 64 65 78 20 62 79 20 52  annot index by R
0ea0: 4f 57 49 44 0a 23 0a 64 6f 5f 74 65 73 74 20 72  OWID.#.do_test r
0eb0: 6f 77 69 64 2d 32 2e 39 20 7b 0a 20 20 73 65 74  owid-2.9 {.  set
0ec0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0ed0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
0ee0: 20 69 64 78 74 31 20 4f 4e 20 74 31 28 72 6f 77   idxt1 ON t1(row
0ef0: 69 64 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  id)}} msg].  lap
0f00: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
0f10: 20 7b 74 61 62 6c 65 20 74 31 20 68 61 73 20 6e   {table t1 has n
0f20: 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 72  o column named r
0f30: 6f 77 69 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 72  owid}}.do_test r
0f40: 6f 77 69 64 2d 32 2e 31 30 20 7b 0a 20 20 73 65  owid-2.10 {.  se
0f50: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0f60: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
0f70: 58 20 69 64 78 74 31 20 4f 4e 20 74 31 28 5f 72  X idxt1 ON t1(_r
0f80: 6f 77 69 64 5f 29 7d 7d 20 6d 73 67 5d 0a 20 20  owid_)}} msg].  
0f90: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0fa0: 20 7b 31 20 7b 74 61 62 6c 65 20 74 31 20 68 61   {1 {table t1 ha
0fb0: 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  s no column name
0fc0: 64 20 5f 72 6f 77 69 64 5f 7d 7d 0a 64 6f 5f 74  d _rowid_}}.do_t
0fd0: 65 73 74 20 72 6f 77 69 64 2d 32 2e 31 31 20 7b  est rowid-2.11 {
0fe0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0ff0: 7b 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45  {execsql {CREATE
1000: 20 49 4e 44 45 58 20 69 64 78 74 31 20 4f 4e 20   INDEX idxt1 ON 
1010: 74 31 28 6f 69 64 29 7d 7d 20 6d 73 67 5d 0a 20  t1(oid)}} msg]. 
1020: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
1030: 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 31 20 68  } {1 {table t1 h
1040: 61 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d  as no column nam
1050: 65 64 20 6f 69 64 7d 7d 0a 64 6f 5f 74 65 73 74  ed oid}}.do_test
1060: 20 72 6f 77 69 64 2d 32 2e 31 32 20 7b 0a 20 20   rowid-2.12 {.  
1070: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
1080: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e  ecsql {CREATE IN
1090: 44 45 58 20 69 64 78 74 31 20 4f 4e 20 74 31 28  DEX idxt1 ON t1(
10a0: 78 2c 20 72 6f 77 69 64 29 7d 7d 20 6d 73 67 5d  x, rowid)}} msg]
10b0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
10c0: 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 31  g.} {1 {table t1
10d0: 20 68 61 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e   has no column n
10e0: 61 6d 65 64 20 72 6f 77 69 64 7d 7d 0a 0a 23 20  amed rowid}}..# 
10f0: 43 6f 6c 75 6d 6e 73 20 64 65 66 69 6e 65 64 20  Columns defined 
1100: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 73 74  in the CREATE st
1110: 61 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65  atement override
1120: 20 74 68 65 20 62 75 69 6c 64 69 6e 20 52 4f 57   the buildin ROW
1130: 49 44 0a 23 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ID.# column name
1140: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72 6f 77  s..#.do_test row
1150: 69 64 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  id-3.1 {.  execs
1160: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1170: 54 41 42 4c 45 20 74 32 28 72 6f 77 69 64 20 69  TABLE t2(rowid i
1180: 6e 74 2c 20 78 20 69 6e 74 2c 20 79 20 69 6e 74  nt, x int, y int
1190: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
11a0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2c 32  TO t2 VALUES(0,2
11b0: 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,3);.    INSERT 
11c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
11d0: 2c 35 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,5,6);.    INSER
11e0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
11f0: 28 37 2c 38 2c 39 29 3b 0a 20 20 20 20 53 45 4c  (7,8,9);.    SEL
1200: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 4f 52  ECT * FROM t2 OR
1210: 44 45 52 20 42 59 20 78 3b 0a 20 20 7d 0a 7d 20  DER BY x;.  }.} 
1220: 7b 30 20 32 20 33 20 34 20 35 20 36 20 37 20 38  {0 2 3 4 5 6 7 8
1230: 20 39 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   9}.do_test rowi
1240: 64 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  d-3.2 {.  execsq
1250: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1260: 20 74 32 20 4f 52 44 45 52 20 42 59 20 72 6f 77   t2 ORDER BY row
1270: 69 64 7d 0a 7d 20 7b 30 20 32 20 33 20 34 20 35  id}.} {0 2 3 4 5
1280: 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74 65 73   6 7 8 9}.do_tes
1290: 74 20 72 6f 77 69 64 2d 33 2e 33 20 7b 0a 20 20  t rowid-3.3 {.  
12a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
12b0: 72 6f 77 69 64 2c 20 78 2c 20 79 20 46 52 4f 4d  rowid, x, y FROM
12c0: 20 74 32 20 4f 52 44 45 52 20 42 59 20 72 6f 77   t2 ORDER BY row
12d0: 69 64 7d 0a 7d 20 7b 30 20 32 20 33 20 34 20 35  id}.} {0 2 3 4 5
12e0: 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74 65 73   6 7 8 9}.do_tes
12f0: 74 20 72 6f 77 69 64 2d 33 2e 34 20 7b 0a 20 20  t rowid-3.4 {.  
1300: 73 65 74 20 72 31 20 5b 65 78 65 63 73 71 6c 20  set r1 [execsql 
1310: 7b 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f 2c  {SELECT _rowid_,
1320: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 20 4f   rowid FROM t2 O
1330: 52 44 45 52 20 42 59 20 72 6f 77 69 64 7d 5d 0a  RDER BY rowid}].
1340: 20 20 66 6f 72 65 61 63 68 20 7b 61 20 62 20 63    foreach {a b c
1350: 20 64 20 65 20 66 7d 20 24 72 31 20 7b 7d 0a 20   d e f} $r1 {}. 
1360: 20 73 65 74 20 72 32 20 5b 65 78 65 63 73 71 6c   set r2 [execsql
1370: 20 7b 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f   {SELECT _rowid_
1380: 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 20  , rowid FROM t2 
1390: 4f 52 44 45 52 20 42 59 20 78 20 44 45 53 43 7d  ORDER BY x DESC}
13a0: 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 75 20 76  ].  foreach {u v
13b0: 20 77 20 78 20 79 20 7a 7d 20 24 72 32 20 7b 7d   w x y z} $r2 {}
13c0: 0a 20 20 65 78 70 72 20 7b 24 75 3d 3d 24 65 20  .  expr {$u==$e 
13d0: 26 26 20 24 77 3d 3d 24 63 20 26 26 20 24 79 3d  && $w==$c && $y=
13e0: 3d 24 61 7d 0a 7d 20 7b 31 7d 0a 23 20 73 71 6c  =$a}.} {1}.# sql
13f0: 69 74 65 33 20 76 33 20 2d 20 64 6f 5f 70 72 6f  ite3 v3 - do_pro
1400: 62 74 65 73 74 20 64 6f 65 73 6e 27 74 20 65 78  btest doesn't ex
1410: 69 73 74 20 61 6e 79 6d 6f 72 65 3f 0a 69 66 20  ist anymore?.if 
1420: 30 20 7b 0a 64 6f 5f 70 72 6f 62 74 65 73 74 20  0 {.do_probtest 
1430: 72 6f 77 69 64 2d 33 2e 35 20 7b 0a 20 20 73 65  rowid-3.5 {.  se
1440: 74 20 72 31 20 5b 65 78 65 63 73 71 6c 20 7b 53  t r1 [execsql {S
1450: 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f 2c 20 72  ELECT _rowid_, r
1460: 6f 77 69 64 20 46 52 4f 4d 20 74 32 20 4f 52 44  owid FROM t2 ORD
1470: 45 52 20 42 59 20 72 6f 77 69 64 7d 5d 0a 20 20  ER BY rowid}].  
1480: 66 6f 72 65 61 63 68 20 7b 61 20 62 20 63 20 64  foreach {a b c d
1490: 20 65 20 66 7d 20 24 72 31 20 7b 7d 0a 20 20 65   e f} $r1 {}.  e
14a0: 78 70 72 20 7b 24 61 21 3d 24 62 20 26 26 20 24  xpr {$a!=$b && $
14b0: 63 21 3d 24 64 20 26 26 20 24 65 21 3d 24 66 7d  c!=$d && $e!=$f}
14c0: 0a 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 4c 65 74 27  .} {1}.}..# Let'
14d0: 73 20 74 72 79 20 73 6f 6d 65 20 6d 6f 72 65 20  s try some more 
14e0: 63 6f 6d 70 6c 65 78 20 65 78 61 6d 70 6c 65 73  complex examples
14f0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 6f 6d 65  , including some
1500: 20 6a 6f 69 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73   joins..#.do_tes
1510: 74 20 72 6f 77 69 64 2d 34 2e 31 20 7b 0a 20 20  t rowid-4.1 {.  
1520: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
1530: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
1540: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32    DELETE FROM t2
1550: 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  ;.  }.  for {set
1560: 20 69 20 31 7d 20 7b 24 69 3c 3d 35 30 7d 20 7b   i 1} {$i<=50} {
1570: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
1580: 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e  ecsql "INSERT IN
1590: 54 4f 20 74 31 28 78 2c 79 29 20 56 41 4c 55 45  TO t1(x,y) VALUE
15a0: 53 28 24 69 2c 5b 65 78 70 72 20 7b 24 69 2a 24  S($i,[expr {$i*$
15b0: 69 7d 5d 29 22 0a 20 20 7d 0a 20 20 65 78 65 63  i}])".  }.  exec
15c0: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
15d0: 20 74 32 20 53 45 4c 45 43 54 20 5f 72 6f 77 69   t2 SELECT _rowi
15e0: 64 5f 2c 20 78 2a 79 2c 20 79 2a 79 20 46 52 4f  d_, x*y, y*y FRO
15f0: 4d 20 74 31 7d 0a 20 20 65 78 65 63 73 71 6c 20  M t1}.  execsql 
1600: 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52 4f  {SELECT t2.y FRO
1610: 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 74  M t1, t2 WHERE t
1620: 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e 72 6f  1.x==4 AND t1.ro
1630: 77 69 64 3d 3d 74 32 2e 72 6f 77 69 64 7d 0a 7d  wid==t2.rowid}.}
1640: 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72   {256}.do_test r
1650: 6f 77 69 64 2d 34 2e 32 20 7b 0a 20 20 65 78 65  owid-4.2 {.  exe
1660: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e  csql {SELECT t2.
1670: 79 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48  y FROM t2, t1 WH
1680: 45 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e 44 20  ERE t1.x==4 AND 
1690: 74 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f 77  t1.rowid==t2.row
16a0: 69 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74  id}.} {256}.do_t
16b0: 65 73 74 20 72 6f 77 69 64 2d 34 2e 32 2e 31 20  est rowid-4.2.1 
16c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
16d0: 45 43 54 20 74 32 2e 79 20 46 52 4f 4d 20 74 32  ECT t2.y FROM t2
16e0: 2c 20 74 31 20 57 48 45 52 45 20 74 31 2e 78 3d  , t1 WHERE t1.x=
16f0: 3d 34 20 41 4e 44 20 74 31 2e 6f 69 64 3d 3d 74  =4 AND t1.oid==t
1700: 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36 7d  2.rowid}.} {256}
1710: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34  .do_test rowid-4
1720: 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.2 {.  execsql
1730: 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52   {SELECT t2.y FR
1740: 4f 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45 20  OM t2, t1 WHERE 
1750: 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e 5f  t1.x==4 AND t1._
1760: 72 6f 77 69 64 5f 3d 3d 74 32 2e 72 6f 77 69 64  rowid_==t2.rowid
1770: 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73  }.} {256}.do_tes
1780: 74 20 72 6f 77 69 64 2d 34 2e 32 2e 33 20 7b 0a  t rowid-4.2.3 {.
1790: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
17a0: 54 20 74 32 2e 79 20 46 52 4f 4d 20 74 32 2c 20  T t2.y FROM t2, 
17b0: 74 31 20 57 48 45 52 45 20 74 31 2e 78 3d 3d 34  t1 WHERE t1.x==4
17c0: 20 41 4e 44 20 74 32 2e 72 6f 77 69 64 3d 3d 74   AND t2.rowid==t
17d0: 31 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36 7d  1.rowid}.} {256}
17e0: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34  .do_test rowid-4
17f0: 2e 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.4 {.  execsql
1800: 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52   {SELECT t2.y FR
1810: 4f 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45 20  OM t2, t1 WHERE 
1820: 74 32 2e 72 6f 77 69 64 3d 3d 74 31 2e 6f 69 64  t2.rowid==t1.oid
1830: 20 41 4e 44 20 74 31 2e 78 3d 3d 34 7d 0a 7d 20   AND t1.x==4}.} 
1840: 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  {256}.do_test ro
1850: 77 69 64 2d 34 2e 32 2e 35 20 7b 0a 20 20 65 78  wid-4.2.5 {.  ex
1860: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32  ecsql {SELECT t2
1870: 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  .y FROM t1, t2 W
1880: 48 45 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e 44  HERE t1.x==4 AND
1890: 20 74 31 2e 5f 72 6f 77 69 64 5f 3d 3d 74 32 2e   t1._rowid_==t2.
18a0: 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64  rowid}.} {256}.d
18b0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34 2e 32  o_test rowid-4.2
18c0: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
18d0: 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52 4f 4d  SELECT t2.y FROM
18e0: 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 74 31   t1, t2 WHERE t1
18f0: 2e 78 3d 3d 34 20 41 4e 44 20 74 32 2e 72 6f 77  .x==4 AND t2.row
1900: 69 64 3d 3d 74 31 2e 72 6f 77 69 64 7d 0a 7d 20  id==t1.rowid}.} 
1910: 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  {256}.do_test ro
1920: 77 69 64 2d 34 2e 32 2e 37 20 7b 0a 20 20 65 78  wid-4.2.7 {.  ex
1930: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32  ecsql {SELECT t2
1940: 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57  .y FROM t1, t2 W
1950: 48 45 52 45 20 74 32 2e 72 6f 77 69 64 3d 3d 74  HERE t2.rowid==t
1960: 31 2e 6f 69 64 20 41 4e 44 20 74 31 2e 78 3d 3d  1.oid AND t1.x==
1970: 34 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65  4}.} {256}.do_te
1980: 73 74 20 72 6f 77 69 64 2d 34 2e 33 20 7b 0a 20  st rowid-4.3 {. 
1990: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
19a0: 20 49 4e 44 45 58 20 69 64 78 74 31 20 4f 4e 20   INDEX idxt1 ON 
19b0: 74 31 28 78 29 7d 0a 20 20 65 78 65 63 73 71 6c  t1(x)}.  execsql
19c0: 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52   {SELECT t2.y FR
19d0: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
19e0: 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e 72  t1.x==4 AND t1.r
19f0: 6f 77 69 64 3d 3d 74 32 2e 72 6f 77 69 64 7d 0a  owid==t2.rowid}.
1a00: 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20  } {256}.do_test 
1a10: 72 6f 77 69 64 2d 34 2e 33 2e 31 20 7b 0a 20 20  rowid-4.3.1 {.  
1a20: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1a30: 74 32 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74 32  t2.y FROM t1, t2
1a40: 20 57 48 45 52 45 20 74 31 2e 78 3d 3d 34 20 41   WHERE t1.x==4 A
1a50: 4e 44 20 74 31 2e 5f 72 6f 77 69 64 5f 3d 3d 74  ND t1._rowid_==t
1a60: 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36 7d  2.rowid}.} {256}
1a70: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34  .do_test rowid-4
1a80: 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.2 {.  execsql
1a90: 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52   {SELECT t2.y FR
1aa0: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
1ab0: 74 32 2e 72 6f 77 69 64 3d 3d 74 31 2e 6f 69 64  t2.rowid==t1.oid
1ac0: 20 41 4e 44 20 34 3d 3d 74 31 2e 78 7d 0a 7d 20   AND 4==t1.x}.} 
1ad0: 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  {256}.do_test ro
1ae0: 77 69 64 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63  wid-4.4 {.  exec
1af0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79  sql {SELECT t2.y
1b00: 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45   FROM t2, t1 WHE
1b10: 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74  RE t1.x==4 AND t
1b20: 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f 77 69  1.rowid==t2.rowi
1b30: 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65  d}.} {256}.do_te
1b40: 73 74 20 72 6f 77 69 64 2d 34 2e 34 2e 31 20 7b  st rowid-4.4.1 {
1b50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1b60: 43 54 20 74 32 2e 79 20 46 52 4f 4d 20 74 32 2c  CT t2.y FROM t2,
1b70: 20 74 31 20 57 48 45 52 45 20 74 31 2e 78 3d 3d   t1 WHERE t1.x==
1b80: 34 20 41 4e 44 20 74 31 2e 5f 72 6f 77 69 64 5f  4 AND t1._rowid_
1b90: 3d 3d 74 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32  ==t2.rowid}.} {2
1ba0: 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  56}.do_test rowi
1bb0: 64 2d 34 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63  d-4.4.2 {.  exec
1bc0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79  sql {SELECT t2.y
1bd0: 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45   FROM t2, t1 WHE
1be0: 52 45 20 74 32 2e 72 6f 77 69 64 3d 3d 74 31 2e  RE t2.rowid==t1.
1bf0: 6f 69 64 20 41 4e 44 20 34 3d 3d 74 31 2e 78 7d  oid AND 4==t1.x}
1c00: 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74  .} {256}.do_test
1c10: 20 72 6f 77 69 64 2d 34 2e 35 20 7b 0a 20 20 65   rowid-4.5 {.  e
1c20: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 49  xecsql {CREATE I
1c30: 4e 44 45 58 20 69 64 78 74 32 20 4f 4e 20 74 32  NDEX idxt2 ON t2
1c40: 28 79 29 7d 0a 20 20 73 65 74 20 73 71 6c 69 74  (y)}.  set sqlit
1c50: 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30  e_search_count 0
1c60: 0a 20 20 63 6f 6e 63 61 74 20 5b 65 78 65 63 73  .  concat [execs
1c70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1c80: 74 31 2e 78 20 46 52 4f 4d 20 74 32 2c 20 74 31  t1.x FROM t2, t1
1c90: 20 0a 20 20 20 20 57 48 45 52 45 20 74 32 2e 79   .    WHERE t2.y
1ca0: 3d 3d 32 35 36 20 41 4e 44 20 74 31 2e 72 6f 77  ==256 AND t1.row
1cb0: 69 64 3d 3d 74 32 2e 72 6f 77 69 64 0a 20 20 7d  id==t2.rowid.  }
1cc0: 5d 20 24 73 71 6c 69 74 65 5f 73 65 61 72 63 68  ] $sqlite_search
1cd0: 5f 63 6f 75 6e 74 0a 7d 20 7b 34 20 33 7d 0a 64  _count.} {4 3}.d
1ce0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34 2e 35  o_test rowid-4.5
1cf0: 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74  .1 {.  set sqlit
1d00: 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30  e_search_count 0
1d10: 0a 20 20 63 6f 6e 63 61 74 20 5b 65 78 65 63 73  .  concat [execs
1d20: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1d30: 74 31 2e 78 20 46 52 4f 4d 20 74 32 2c 20 74 31  t1.x FROM t2, t1
1d40: 20 0a 20 20 20 20 57 48 45 52 45 20 74 31 2e 4f   .    WHERE t1.O
1d50: 49 44 3d 3d 74 32 2e 72 6f 77 69 64 20 41 4e 44  ID==t2.rowid AND
1d60: 20 74 32 2e 79 3d 3d 38 31 0a 20 20 7d 5d 20 24   t2.y==81.  }] $
1d70: 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
1d80: 75 6e 74 0a 7d 20 7b 33 20 33 7d 0a 64 6f 5f 74  unt.} {3 3}.do_t
1d90: 65 73 74 20 72 6f 77 69 64 2d 34 2e 36 20 7b 0a  est rowid-4.6 {.
1da0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1db0: 53 45 4c 45 43 54 20 74 31 2e 78 20 46 52 4f 4d  SELECT t1.x FROM
1dc0: 20 74 31 2c 20 74 32 0a 20 20 20 20 57 48 45 52   t1, t2.    WHER
1dd0: 45 20 74 32 2e 79 3d 3d 32 35 36 20 41 4e 44 20  E t2.y==256 AND 
1de0: 74 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f 77  t1.rowid==t2.row
1df0: 69 64 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 0a 64 6f  id.  }.} {4}..do
1e00: 5f 74 65 73 74 20 72 6f 77 69 64 2d 35 2e 31 2e  _test rowid-5.1.
1e10: 31 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20  1 {.  ifcapable 
1e20: 73 75 62 71 75 65 72 79 20 7b 0a 20 20 20 20 65  subquery {.    e
1e30: 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  xecsql {DELETE F
1e40: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 5f 72 6f  ROM t1 WHERE _ro
1e50: 77 69 64 5f 20 49 4e 20 28 53 45 4c 45 43 54 20  wid_ IN (SELECT 
1e60: 6f 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  oid FROM t1 WHER
1e70: 45 20 78 3e 38 29 7d 0a 20 20 7d 20 65 6c 73 65  E x>8)}.  } else
1e80: 20 7b 0a 20 20 20 20 73 65 74 20 6f 69 64 73 20   {.    set oids 
1e90: 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54  [execsql {SELECT
1ea0: 20 6f 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45   oid FROM t1 WHE
1eb0: 52 45 20 78 3e 38 7d 5d 0a 20 20 20 20 73 65 74  RE x>8}].    set
1ec0: 20 77 68 65 72 65 20 22 5f 72 6f 77 69 64 5f 20   where "_rowid_ 
1ed0: 3d 20 5b 6a 6f 69 6e 20 24 6f 69 64 73 20 7b 20  = [join $oids { 
1ee0: 4f 52 20 5f 72 6f 77 69 64 5f 20 3d 20 7d 5d 22  OR _rowid_ = }]"
1ef0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 44 45  .    execsql "DE
1f00: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1f10: 52 45 20 24 77 68 65 72 65 22 0a 20 20 7d 0a 7d  RE $where".  }.}
1f20: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   {}.do_test rowi
1f30: 64 2d 35 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  d-5.1.2 {.  exec
1f40: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78 28  sql {SELECT max(
1f50: 78 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 38  x) FROM t1}.} {8
1f60: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61  }..# Make sure a
1f70: 20 22 57 48 45 52 45 20 72 6f 77 69 64 3d 58 22   "WHERE rowid=X"
1f80: 20 63 6c 61 75 73 65 20 77 6f 72 6b 73 20 77 68   clause works wh
1f90: 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 52  en there is no R
1fa0: 4f 57 49 44 20 6f 66 20 58 2e 0a 23 0a 64 6f 5f  OWID of X..#.do_
1fb0: 74 65 73 74 20 72 6f 77 69 64 2d 36 2e 31 20 7b  test rowid-6.1 {
1fc0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1fd0: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74   SELECT x FROM t
1fe0: 31 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  1.  }.} {1 2 3 4
1ff0: 20 35 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65 73   5 6 7 8}.do_tes
2000: 74 20 72 6f 77 69 64 2d 36 2e 32 20 7b 0a 20 20  t rowid-6.2 {.  
2010: 66 6f 72 20 7b 73 65 74 20 3a 3a 6e 6f 72 6f 77  for {set ::norow
2020: 20 31 7d 20 7b 31 7d 20 7b 69 6e 63 72 20 3a 3a   1} {1} {incr ::
2030: 6e 6f 72 6f 77 7d 20 7b 0a 20 20 20 20 69 66 20  norow} {.    if 
2040: 7b 5b 65 78 65 63 73 71 6c 20 22 53 45 4c 45 43  {[execsql "SELEC
2050: 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T x FROM t1 WHER
2060: 45 20 72 6f 77 69 64 3d 24 3a 3a 6e 6f 72 6f 77  E rowid=$::norow
2070: 22 5d 3d 3d 22 22 7d 20 20 62 72 65 61 6b 0a 20  "]==""}  break. 
2080: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 75   }.  execsql [su
2090: 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  bst {.    DELETE
20a0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72   FROM t1 WHERE r
20b0: 6f 77 69 64 3d 24 3a 3a 6e 6f 72 6f 77 0a 20 20  owid=$::norow.  
20c0: 7d 5d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  }].} {}.do_test 
20d0: 72 6f 77 69 64 2d 36 2e 33 20 7b 0a 20 20 65 78  rowid-6.3 {.  ex
20e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
20f0: 43 54 20 78 20 46 52 4f 4d 20 74 31 0a 20 20 7d  CT x FROM t1.  }
2100: 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 20  .} {1 2 3 4 5 6 
2110: 37 20 38 7d 0a 0a 23 20 42 65 67 69 6e 6e 69 6e  7 8}..# Beginnin
2120: 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20 32  g with version 2
2130: 2e 33 2e 34 2c 20 53 51 4c 69 74 65 20 63 6f 6d  .3.4, SQLite com
2140: 70 75 74 65 73 20 72 6f 77 69 64 73 20 6f 66 20  putes rowids of 
2150: 6e 65 77 20 72 6f 77 73 20 62 79 0a 23 20 66 69  new rows by.# fi
2160: 6e 64 69 6e 67 20 74 68 65 20 6d 61 78 69 6d 75  nding the maximu
2170: 6d 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 20  m current rowid 
2180: 61 6e 64 20 61 64 64 69 6e 67 20 6f 6e 65 2e 20  and adding one. 
2190: 20 49 74 20 66 61 6c 6c 73 20 62 61 63 6b 20 74   It falls back t
21a0: 6f 0a 23 20 74 68 65 20 6f 6c 64 20 72 61 6e 64  o.# the old rand
21b0: 6f 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 66 20  om algorithm if 
21c0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 72 6f 77 69  the maximum rowi
21d0: 64 20 69 73 20 74 68 65 20 6c 61 72 67 65 73 74  d is the largest
21e0: 20 69 6e 74 65 67 65 72 2e 0a 23 20 54 68 65 20   integer..# The 
21f0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20  following tests 
2200: 61 72 65 20 66 6f 72 20 74 68 69 73 20 6e 65 77  are for this new
2210: 20 62 65 68 61 76 69 6f 72 2e 0a 23 0a 64 6f 5f   behavior..#.do_
2220: 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 30 20 7b  test rowid-7.0 {
2230: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2240: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
2250: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2260: 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44  t2;.    DROP IND
2270: 45 58 20 69 64 78 74 31 3b 0a 20 20 20 20 49 4e  EX idxt1;.    IN
2280: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
2290: 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 53 45  UES(1,2);.    SE
22a0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
22b0: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t1;.  }.} {1 
22c0: 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  1 2}.do_test row
22d0: 69 64 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73  id-7.1 {.  execs
22e0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
22f0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39  INTO t1 VALUES(9
2300: 39 2c 31 30 30 29 3b 0a 20 20 20 20 53 45 4c 45  9,100);.    SELE
2310: 43 54 20 72 6f 77 69 64 2c 2a 20 46 52 4f 4d 20  CT rowid,* FROM 
2320: 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20  t1.  }.} {1 1 2 
2330: 32 20 39 39 20 31 30 30 7d 0a 64 6f 5f 74 65 73  2 99 100}.do_tes
2340: 74 20 72 6f 77 69 64 2d 37 2e 32 20 7b 0a 20 20  t rowid-7.2 {.  
2350: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2360: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 20  EATE TABLE t2(a 
2370: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
2380: 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53  KEY, b);.    INS
2390: 45 52 54 20 49 4e 54 4f 20 74 32 28 62 29 20 56  ERT INTO t2(b) V
23a0: 41 4c 55 45 53 28 35 35 29 3b 0a 20 20 20 20 53  ALUES(55);.    S
23b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
23c0: 0a 20 20 7d 0a 7d 20 7b 31 20 35 35 7d 0a 64 6f  .  }.} {1 55}.do
23d0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 33 20  _test rowid-7.3 
23e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
23f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
2400: 28 62 29 20 56 41 4c 55 45 53 28 36 36 29 3b 0a  (b) VALUES(66);.
2410: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2420: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 35  M t2;.  }.} {1 5
2430: 35 20 32 20 36 36 7d 0a 64 6f 5f 74 65 73 74 20  5 2 66}.do_test 
2440: 72 6f 77 69 64 2d 37 2e 34 20 7b 0a 20 20 65 78  rowid-7.4 {.  ex
2450: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
2460: 52 54 20 49 4e 54 4f 20 74 32 28 61 2c 62 29 20  RT INTO t2(a,b) 
2470: 56 41 4c 55 45 53 28 31 30 30 30 30 30 30 2c 37  VALUES(1000000,7
2480: 37 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  7);.    INSERT I
2490: 4e 54 4f 20 74 32 28 62 29 20 56 41 4c 55 45 53  NTO t2(b) VALUES
24a0: 28 38 38 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  (88);.    SELECT
24b0: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
24c0: 7d 20 7b 31 20 35 35 20 32 20 36 36 20 31 30 30  } {1 55 2 66 100
24d0: 30 30 30 30 20 37 37 20 31 30 30 30 30 30 31 20  0000 77 1000001 
24e0: 38 38 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  88}.do_test rowi
24f0: 64 2d 37 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  d-7.5 {.  execsq
2500: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
2510: 4e 54 4f 20 74 32 28 61 2c 62 29 20 56 41 4c 55  NTO t2(a,b) VALU
2520: 45 53 28 32 31 34 37 34 38 33 36 34 37 2c 39 39  ES(2147483647,99
2530: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2540: 54 4f 20 74 32 28 62 29 20 56 41 4c 55 45 53 28  TO t2(b) VALUES(
2550: 31 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  11);.    SELECT 
2560: 62 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  b FROM t2 ORDER 
2570: 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20  BY b;.  }.} {11 
2580: 35 35 20 36 36 20 37 37 20 38 38 20 39 39 7d 0a  55 66 77 88 99}.
2590: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
25a0: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 72  ry {.  do_test r
25b0: 6f 77 69 64 2d 37 2e 36 20 7b 0a 20 20 20 20 65  owid-7.6 {.    e
25c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
25d0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 32 20  ELECT b FROM t2 
25e0: 57 48 45 52 45 20 61 20 4e 4f 54 20 49 4e 28 31  WHERE a NOT IN(1
25f0: 2c 32 2c 31 30 30 30 30 30 30 2c 31 30 30 30 30  ,2,1000000,10000
2600: 30 31 2c 32 31 34 37 34 38 33 36 34 37 29 3b 0a  01,2147483647);.
2610: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20      }.  } {11}. 
2620: 20 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 37   do_test rowid-7
2630: 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .7 {.    execsql
2640: 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20   {.      INSERT 
2650: 49 4e 54 4f 20 74 32 28 62 29 20 56 41 4c 55 45  INTO t2(b) VALUE
2660: 53 28 32 32 29 3b 0a 20 20 20 20 20 20 49 4e 53  S(22);.      INS
2670: 45 52 54 20 49 4e 54 4f 20 74 32 28 62 29 20 56  ERT INTO t2(b) V
2680: 41 4c 55 45 53 28 33 33 29 3b 0a 20 20 20 20 20  ALUES(33);.     
2690: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28   INSERT INTO t2(
26a0: 62 29 20 56 41 4c 55 45 53 28 34 34 29 3b 0a 20  b) VALUES(44);. 
26b0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
26c0: 20 74 32 28 62 29 20 56 41 4c 55 45 53 28 35 35   t2(b) VALUES(55
26d0: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
26e0: 62 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  b FROM t2 WHERE 
26f0: 61 20 4e 4f 54 20 49 4e 28 31 2c 32 2c 31 30 30  a NOT IN(1,2,100
2700: 30 30 30 30 2c 31 30 30 30 30 30 31 2c 32 31 34  0000,1000001,214
2710: 37 34 38 33 36 34 37 29 20 0a 20 20 20 20 20 20  7483647) .      
2720: 20 20 20 20 4f 52 44 45 52 20 42 59 20 62 3b 0a      ORDER BY b;.
2730: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 20 32 32      }.  } {11 22
2740: 20 33 33 20 34 34 20 35 35 7d 0a 7d 0a 64 6f 5f   33 44 55}.}.do_
2750: 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 38 20 7b  test rowid-7.8 {
2760: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2770: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20   DELETE FROM t2 
2780: 57 48 45 52 45 20 61 21 3d 32 3b 0a 20 20 20 20  WHERE a!=2;.    
2790: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 62  INSERT INTO t2(b
27a0: 29 20 56 41 4c 55 45 53 28 31 31 31 29 3b 0a 20  ) VALUES(111);. 
27b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
27c0: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 36 36   t2;.  }.} {2 66
27d0: 20 33 20 31 31 31 7d 0a 0a 69 66 63 61 70 61 62   3 111}..ifcapab
27e0: 6c 65 20 7b 74 72 69 67 67 65 72 7d 20 7b 0a 23  le {trigger} {.#
27f0: 20 4d 61 6b 65 20 73 75 72 65 20 41 46 54 45 52   Make sure AFTER
2800: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 64   triggers that d
2810: 6f 20 49 4e 53 45 52 54 73 20 64 6f 20 6e 6f 74  o INSERTs do not
2820: 20 63 68 61 6e 67 65 20 74 68 65 20 6c 61 73 74   change the last
2830: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 2e 0a 23  _insert_rowid..#
2840: 20 54 69 63 6b 65 74 20 23 32 39 30 0a 23 0a 64   Ticket #290.#.d
2850: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 38 2e 31  o_test rowid-8.1
2860: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2870: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2880: 74 33 28 61 20 69 6e 74 65 67 65 72 20 70 72 69  t3(a integer pri
2890: 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 20 20 43  mary key);.    C
28a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 78  REATE TABLE t4(x
28b0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
28c0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 29 3b  TO t4 VALUES(1);
28d0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
28e0: 47 45 52 20 72 33 20 41 46 54 45 52 20 49 4e 53  GER r3 AFTER INS
28f0: 45 52 54 20 6f 6e 20 74 33 20 46 4f 52 20 45 41  ERT on t3 FOR EA
2900: 43 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20 20  CH ROW BEGIN.   
2910: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2920: 34 20 56 41 4c 55 45 53 28 4e 45 57 2e 61 2b 31  4 VALUES(NEW.a+1
2930: 30 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  0);.    END;.   
2940: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2950: 33 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  3;.  }.} {}.do_t
2960: 65 73 74 20 72 6f 77 69 64 2d 38 2e 32 20 7b 0a  est rowid-8.2 {.
2970: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2980: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
2990: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  FROM t4;.  }.} {
29a0: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  1 1}.do_test row
29b0: 69 64 2d 38 2e 33 20 7b 0a 20 20 65 78 65 63 73  id-8.3 {.  execs
29c0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
29d0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31  INTO t3 VALUES(1
29e0: 32 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  23);.    SELECT 
29f0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
2a00: 64 28 29 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 7d  d();.  }.} {123}
2a10: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 38  .do_test rowid-8
2a20: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
2a30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2a40: 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31 32  OM t3;.  }.} {12
2a50: 33 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64  3}.do_test rowid
2a60: 2d 38 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.5 {.  execsql
2a70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
2a80: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  wid, * FROM t4;.
2a90: 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 31 33 33    }.} {1 1 2 133
2aa0: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
2ab0: 38 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.6 {.  execsql 
2ac0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
2ad0: 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t3 VALUES(NULL
2ae0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c 61  );.    SELECT la
2af0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
2b00: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 32 34 7d 0a 64  );.  }.} {124}.d
2b10: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 38 2e 37  o_test rowid-8.7
2b20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2b30: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2b40: 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20   t3;.  }.} {123 
2b50: 31 32 34 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  124}.do_test row
2b60: 69 64 2d 38 2e 38 20 7b 0a 20 20 65 78 65 63 73  id-8.8 {.  execs
2b70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2b80: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 34  rowid, * FROM t4
2b90: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 31  ;.  }.} {1 1 2 1
2ba0: 33 33 20 33 20 31 33 34 7d 0a 7d 20 3b 23 20 65  33 3 134}.} ;# e
2bb0: 6e 64 69 66 20 74 72 69 67 67 65 72 0a 0a 23 20  ndif trigger..# 
2bc0: 49 66 20 74 72 69 67 67 65 72 73 20 61 72 65 20  If triggers are 
2bd0: 6e 6f 74 20 65 6e 61 62 6c 65 2c 20 73 69 6d 75  not enable, simu
2be0: 6c 61 74 65 20 74 68 65 69 72 20 65 66 66 65 63  late their effec
2bf0: 74 20 66 6f 72 20 74 68 65 20 74 65 73 74 73 20  t for the tests 
2c00: 74 68 61 74 0a 23 20 66 6f 6c 6c 6f 77 2e 0a 69  that.# follow..i
2c10: 66 63 61 70 61 62 6c 65 20 7b 21 74 72 69 67 67  fcapable {!trigg
2c20: 65 72 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  er} {.  execsql 
2c30: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2c40: 4c 45 20 74 33 28 61 20 69 6e 74 65 67 65 72 20  LE t3(a integer 
2c50: 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20  primary key);.  
2c60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
2c70: 20 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20 20   VALUES(123);.  
2c80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
2c90: 20 56 41 4c 55 45 53 28 31 32 34 29 3b 0a 20 20   VALUES(124);.  
2ca0: 7d 0a 7d 0a 0a 23 20 74 69 63 6b 65 74 20 23 33  }.}..# ticket #3
2cb0: 37 37 3a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 62  77: Comparison b
2cc0: 65 74 77 65 65 6e 20 69 6e 74 65 67 65 72 20 70  etween integer p
2cd0: 72 69 6d 69 61 72 79 20 6b 65 79 20 61 6e 64 20  rimiary key and 
2ce0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 23  floating point.#
2cf0: 20 76 61 6c 75 65 73 2e 0a 23 0a 64 6f 5f 74 65   values..#.do_te
2d00: 73 74 20 72 6f 77 69 64 2d 39 2e 31 20 7b 0a 20  st rowid-9.1 {. 
2d10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2d20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2d30: 57 48 45 52 45 20 61 3c 31 32 33 2e 35 0a 20 20  WHERE a<123.5.  
2d40: 7d 0a 7d 20 7b 31 32 33 7d 0a 64 6f 5f 74 65 73  }.} {123}.do_tes
2d50: 74 20 72 6f 77 69 64 2d 39 2e 32 20 7b 0a 20 20  t rowid-9.2 {.  
2d60: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2d70: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2d80: 48 45 52 45 20 61 3c 31 32 34 2e 35 0a 20 20 7d  HERE a<124.5.  }
2d90: 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64 6f 5f  .} {123 124}.do_
2da0: 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 33 20 7b  test rowid-9.3 {
2db0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2dc0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2dd0: 33 20 57 48 45 52 45 20 61 3e 31 32 33 2e 35 0a  3 WHERE a>123.5.
2de0: 20 20 7d 0a 7d 20 7b 31 32 34 7d 0a 64 6f 5f 74    }.} {124}.do_t
2df0: 65 73 74 20 72 6f 77 69 64 2d 39 2e 34 20 7b 0a  est rowid-9.4 {.
2e00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2e10: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2e20: 20 57 48 45 52 45 20 61 3e 31 32 32 2e 35 0a 20   WHERE a>122.5. 
2e30: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64   }.} {123 124}.d
2e40: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 35  o_test rowid-9.5
2e50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2e60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2e70: 20 74 33 20 57 48 45 52 45 20 61 3d 3d 31 32 33   t3 WHERE a==123
2e80: 2e 35 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  .5.  }.} {}.do_t
2e90: 65 73 74 20 72 6f 77 69 64 2d 39 2e 36 20 7b 0a  est rowid-9.6 {.
2ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2eb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2ec0: 20 57 48 45 52 45 20 61 3d 3d 31 32 33 2e 30 30   WHERE a==123.00
2ed0: 30 0a 20 20 7d 0a 7d 20 7b 31 32 33 7d 0a 64 6f  0.  }.} {123}.do
2ee0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 37 20  _test rowid-9.7 
2ef0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2f00: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2f10: 74 33 20 57 48 45 52 45 20 61 3e 31 30 30 2e 35  t3 WHERE a>100.5
2f20: 20 41 4e 44 20 61 3c 32 30 30 2e 35 0a 20 20 7d   AND a<200.5.  }
2f30: 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64 6f 5f  .} {123 124}.do_
2f40: 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 38 20 7b  test rowid-9.8 {
2f50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2f60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f70: 33 20 57 48 45 52 45 20 61 3e 27 78 79 7a 27 3b  3 WHERE a>'xyz';
2f80: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
2f90: 74 20 72 6f 77 69 64 2d 39 2e 39 20 7b 0a 20 20  t rowid-9.9 {.  
2fa0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2fb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2fc0: 48 45 52 45 20 61 3c 27 78 79 7a 27 3b 0a 20 20  HERE a<'xyz';.  
2fd0: 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64 6f  }.} {123 124}.do
2fe0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 31 30  _test rowid-9.10
2ff0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3000: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3010: 20 74 33 20 57 48 45 52 45 20 61 3e 3d 31 32 32   t3 WHERE a>=122
3020: 2e 39 20 41 4e 44 20 61 3c 3d 31 32 33 2e 31 0a  .9 AND a<=123.1.
3030: 20 20 7d 0a 7d 20 7b 31 32 33 7d 0a 0a 23 20 54    }.} {123}..# T
3040: 69 63 6b 65 74 20 23 35 36 37 2e 20 20 43 6f 6d  icket #567.  Com
3050: 70 61 72 69 73 6f 6e 73 20 6f 66 20 52 4f 57 49  parisons of ROWI
3060: 44 20 6f 72 20 69 6e 74 65 67 65 72 79 20 70 72  D or integery pr
3070: 69 6d 61 72 79 20 6b 65 79 20 61 67 61 69 6e 73  imary key agains
3080: 74 0a 23 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  t.# floating poi
3090: 6e 74 20 6e 75 6d 62 65 72 73 20 73 74 69 6c 6c  nt numbers still
30a0: 20 64 6f 20 6e 6f 74 20 61 6c 77 61 79 73 20 77   do not always w
30b0: 6f 72 6b 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72  ork..#.do_test r
30c0: 6f 77 69 64 2d 31 30 2e 31 20 7b 0a 20 20 65 78  owid-10.1 {.  ex
30d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
30e0: 54 45 20 54 41 42 4c 45 20 74 35 28 61 29 3b 0a  TE TABLE t5(a);.
30f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3100: 74 35 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20  t5 VALUES(1);.  
3110: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
3120: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
3130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 53  INSERT INTO t5 S
3140: 45 4c 45 43 54 20 61 2b 32 20 46 52 4f 4d 20 74  ELECT a+2 FROM t
3150: 35 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  5;.    INSERT IN
3160: 54 4f 20 74 35 20 53 45 4c 45 43 54 20 61 2b 34  TO t5 SELECT a+4
3170: 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 53 45   FROM t5;.    SE
3180: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
3190: 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t5;.  }.} {1 
31a0: 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35 20  1 2 2 3 3 4 4 5 
31b0: 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a 64  5 6 6 7 7 8 8}.d
31c0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
31d0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
31e0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
31f0: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77  ROM t5 WHERE row
3200: 69 64 3e 3d 35 2e 35 7d 0a 7d 20 7b 36 20 36 20  id>=5.5}.} {6 6 
3210: 37 20 37 20 38 20 38 7d 0a 64 6f 5f 74 65 73 74  7 7 8 8}.do_test
3220: 20 72 6f 77 69 64 2d 31 30 2e 33 20 7b 0a 20 20   rowid-10.3 {.  
3230: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3240: 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35  rowid, a FROM t5
3250: 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 35 2e   WHERE rowid>=5.
3260: 30 7d 0a 7d 20 7b 35 20 35 20 36 20 36 20 37 20  0}.} {5 5 6 6 7 
3270: 37 20 38 20 38 7d 0a 64 6f 5f 74 65 73 74 20 72  7 8 8}.do_test r
3280: 6f 77 69 64 2d 31 30 2e 34 20 7b 0a 20 20 65 78  owid-10.4 {.  ex
3290: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
32a0: 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57  wid, a FROM t5 W
32b0: 48 45 52 45 20 72 6f 77 69 64 3e 35 2e 35 7d 0a  HERE rowid>5.5}.
32c0: 7d 20 7b 36 20 36 20 37 20 37 20 38 20 38 7d 0a  } {6 6 7 7 8 8}.
32d0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
32e0: 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.2 {.  execsql
32f0: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
3300: 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  a FROM t5 WHERE 
3310: 72 6f 77 69 64 3e 35 2e 30 7d 0a 7d 20 7b 36 20  rowid>5.0}.} {6 
3320: 36 20 37 20 37 20 38 20 38 7d 0a 64 6f 5f 74 65  6 7 7 8 8}.do_te
3330: 73 74 20 72 6f 77 69 64 2d 31 30 2e 35 20 7b 0a  st rowid-10.5 {.
3340: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3350: 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20  T rowid, a FROM 
3360: 74 35 20 57 48 45 52 45 20 35 2e 35 3c 3d 72 6f  t5 WHERE 5.5<=ro
3370: 77 69 64 7d 0a 7d 20 7b 36 20 36 20 37 20 37 20  wid}.} {6 6 7 7 
3380: 38 20 38 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  8 8}.do_test row
3390: 69 64 2d 31 30 2e 36 20 7b 0a 20 20 65 78 65 63  id-10.6 {.  exec
33a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
33b0: 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45  d, a FROM t5 WHE
33c0: 52 45 20 35 2e 35 3c 72 6f 77 69 64 7d 0a 7d 20  RE 5.5<rowid}.} 
33d0: 7b 36 20 36 20 37 20 37 20 38 20 38 7d 0a 64 6f  {6 6 7 7 8 8}.do
33e0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 37  _test rowid-10.7
33f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3400: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
3410: 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77 69  OM t5 WHERE rowi
3420: 64 3c 3d 35 2e 35 7d 0a 7d 20 7b 31 20 31 20 32  d<=5.5}.} {1 1 2
3430: 20 32 20 33 20 33 20 34 20 34 20 35 20 35 7d 0a   2 3 3 4 4 5 5}.
3440: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
3450: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
3460: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
3470: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
3480: 77 69 64 3c 35 2e 35 7d 0a 7d 20 7b 31 20 31 20  wid<5.5}.} {1 1 
3490: 32 20 32 20 33 20 33 20 34 20 34 20 35 20 35 7d  2 2 3 3 4 4 5 5}
34a0: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
34b0: 30 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.9 {.  execsql 
34c0: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
34d0: 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 35   FROM t5 WHERE 5
34e0: 2e 35 3e 3d 72 6f 77 69 64 7d 0a 7d 20 7b 31 20  .5>=rowid}.} {1 
34f0: 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35 20  1 2 2 3 3 4 4 5 
3500: 35 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64  5}.do_test rowid
3510: 2d 31 30 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  -10.10 {.  execs
3520: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
3530: 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52  , a FROM t5 WHER
3540: 45 20 35 2e 35 3e 72 6f 77 69 64 7d 0a 7d 20 7b  E 5.5>rowid}.} {
3550: 31 20 31 20 32 20 32 20 33 20 33 20 34 20 34 20  1 1 2 2 3 3 4 4 
3560: 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  5 5}.do_test row
3570: 69 64 2d 31 30 2e 31 31 20 7b 0a 20 20 65 78 65  id-10.11 {.  exe
3580: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
3590: 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48  id, a FROM t5 WH
35a0: 45 52 45 20 72 6f 77 69 64 3e 3d 35 2e 35 20 4f  ERE rowid>=5.5 O
35b0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
35c0: 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37 20 36  SC}.} {8 8 7 7 6
35d0: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   6}.do_test rowi
35e0: 64 2d 31 30 2e 31 31 2e 32 20 7b 0a 20 20 65 78  d-10.11.2 {.  ex
35f0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
3600: 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57  wid, a FROM t5 W
3610: 48 45 52 45 20 72 6f 77 69 64 3e 3d 35 2e 30 20  HERE rowid>=5.0 
3620: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
3630: 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37 20  ESC}.} {8 8 7 7 
3640: 36 20 36 20 35 20 35 7d 0a 64 6f 5f 74 65 73 74  6 6 5 5}.do_test
3650: 20 72 6f 77 69 64 2d 31 30 2e 31 32 20 7b 0a 20   rowid-10.12 {. 
3660: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3670: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
3680: 35 20 57 48 45 52 45 20 72 6f 77 69 64 3e 35 2e  5 WHERE rowid>5.
3690: 35 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  5 ORDER BY rowid
36a0: 20 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20   DESC}.} {8 8 7 
36b0: 37 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72  7 6 6}.do_test r
36c0: 6f 77 69 64 2d 31 30 2e 31 32 2e 32 20 7b 0a 20  owid-10.12.2 {. 
36d0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
36e0: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
36f0: 35 20 57 48 45 52 45 20 72 6f 77 69 64 3e 35 2e  5 WHERE rowid>5.
3700: 30 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  0 ORDER BY rowid
3710: 20 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20   DESC}.} {8 8 7 
3720: 37 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72  7 6 6}.do_test r
3730: 6f 77 69 64 2d 31 30 2e 31 33 20 7b 0a 20 20 65  owid-10.13 {.  e
3740: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
3750: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20  owid, a FROM t5 
3760: 57 48 45 52 45 20 35 2e 35 3c 3d 72 6f 77 69 64  WHERE 5.5<=rowid
3770: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
3780: 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37  DESC}.} {8 8 7 7
3790: 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   6 6}.do_test ro
37a0: 77 69 64 2d 31 30 2e 31 34 20 7b 0a 20 20 65 78  wid-10.14 {.  ex
37b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
37c0: 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57  wid, a FROM t5 W
37d0: 48 45 52 45 20 35 2e 35 3c 72 6f 77 69 64 20 4f  HERE 5.5<rowid O
37e0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
37f0: 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37 20 36  SC}.} {8 8 7 7 6
3800: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   6}.do_test rowi
3810: 64 2d 31 30 2e 31 35 20 7b 0a 20 20 65 78 65 63  d-10.15 {.  exec
3820: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3830: 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45  d, a FROM t5 WHE
3840: 52 45 20 72 6f 77 69 64 3c 3d 35 2e 35 20 4f 52  RE rowid<=5.5 OR
3850: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
3860: 43 7d 0a 7d 20 7b 35 20 35 20 34 20 34 20 33 20  C}.} {5 5 4 4 3 
3870: 33 20 32 20 32 20 31 20 31 7d 0a 64 6f 5f 74 65  3 2 2 1 1}.do_te
3880: 73 74 20 72 6f 77 69 64 2d 31 30 2e 31 36 20 7b  st rowid-10.16 {
3890: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
38a0: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
38b0: 20 74 35 20 57 48 45 52 45 20 72 6f 77 69 64 3c   t5 WHERE rowid<
38c0: 35 2e 35 20 4f 52 44 45 52 20 42 59 20 72 6f 77  5.5 ORDER BY row
38d0: 69 64 20 44 45 53 43 7d 0a 7d 20 7b 35 20 35 20  id DESC}.} {5 5 
38e0: 34 20 34 20 33 20 33 20 32 20 32 20 31 20 31 7d  4 4 3 3 2 2 1 1}
38f0: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
3900: 30 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  0.17 {.  execsql
3910: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
3920: 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  a FROM t5 WHERE 
3930: 35 2e 35 3e 3d 72 6f 77 69 64 20 4f 52 44 45 52  5.5>=rowid ORDER
3940: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a   BY rowid DESC}.
3950: 7d 20 7b 35 20 35 20 34 20 34 20 33 20 33 20 32  } {5 5 4 4 3 3 2
3960: 20 32 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20   2 1 1}.do_test 
3970: 72 6f 77 69 64 2d 31 30 2e 31 38 20 7b 0a 20 20  rowid-10.18 {.  
3980: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3990: 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35  rowid, a FROM t5
39a0: 20 57 48 45 52 45 20 35 2e 35 3e 72 6f 77 69 64   WHERE 5.5>rowid
39b0: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
39c0: 44 45 53 43 7d 0a 7d 20 7b 35 20 35 20 34 20 34  DESC}.} {5 5 4 4
39d0: 20 33 20 33 20 32 20 32 20 31 20 31 7d 0a 0a 64   3 3 2 2 1 1}..d
39e0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
39f0: 33 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  30 {.  execsql {
3a00: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3a10: 45 20 74 36 28 61 29 3b 0a 20 20 20 20 49 4e 53  E t6(a);.    INS
3a20: 45 52 54 20 49 4e 54 4f 20 74 36 28 72 6f 77 69  ERT INTO t6(rowi
3a30: 64 2c 61 29 20 53 45 4c 45 43 54 20 2d 61 2c 61  d,a) SELECT -a,a
3a40: 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 53 45   FROM t5;.    SE
3a50: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
3a60: 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 2d 38  OM t6;.  }.} {-8
3a70: 20 38 20 2d 37 20 37 20 2d 36 20 36 20 2d 35 20   8 -7 7 -6 6 -5 
3a80: 35 20 2d 34 20 34 20 2d 33 20 33 20 2d 32 20 32  5 -4 4 -3 3 -2 2
3a90: 20 2d 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 72   -1 1}.do_test r
3aa0: 6f 77 69 64 2d 31 30 2e 33 31 2e 31 20 7b 0a 20  owid-10.31.1 {. 
3ab0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3ac0: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
3ad0: 36 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 2d  6 WHERE rowid>=-
3ae0: 35 2e 35 7d 0a 7d 20 7b 2d 35 20 35 20 2d 34 20  5.5}.} {-5 5 -4 
3af0: 34 20 2d 33 20 33 20 2d 32 20 32 20 2d 31 20 31  4 -3 3 -2 2 -1 1
3b00: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
3b10: 31 30 2e 33 31 2e 32 20 7b 0a 20 20 65 78 65 63  10.31.2 {.  exec
3b20: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3b30: 64 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45  d, a FROM t6 WHE
3b40: 52 45 20 72 6f 77 69 64 3e 3d 2d 35 2e 30 7d 0a  RE rowid>=-5.0}.
3b50: 7d 20 7b 2d 35 20 35 20 2d 34 20 34 20 2d 33 20  } {-5 5 -4 4 -3 
3b60: 33 20 2d 32 20 32 20 2d 31 20 31 7d 0a 64 6f 5f  3 -2 2 -1 1}.do_
3b70: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 32  test rowid-10.32
3b80: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
3b90: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
3ba0: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f  FROM t6 WHERE ro
3bb0: 77 69 64 3e 3d 2d 35 2e 35 20 4f 52 44 45 52 20  wid>=-5.5 ORDER 
3bc0: 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d  BY rowid DESC}.}
3bd0: 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33   {-1 1 -2 2 -3 3
3be0: 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f 74   -4 4 -5 5}.do_t
3bf0: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 32 2e  est rowid-10.32.
3c00: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
3c10: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
3c20: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77  ROM t6 WHERE row
3c30: 69 64 3e 3d 2d 35 2e 30 20 4f 52 44 45 52 20 42  id>=-5.0 ORDER B
3c40: 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20  Y rowid DESC}.} 
3c50: 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33 20  {-1 1 -2 2 -3 3 
3c60: 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f 74 65  -4 4 -5 5}.do_te
3c70: 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 33 20 7b  st rowid-10.33 {
3c80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
3c90: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
3ca0: 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35 3c 3d   t6 WHERE -5.5<=
3cb0: 72 6f 77 69 64 7d 0a 7d 20 7b 2d 35 20 35 20 2d  rowid}.} {-5 5 -
3cc0: 34 20 34 20 2d 33 20 33 20 2d 32 20 32 20 2d 31  4 4 -3 3 -2 2 -1
3cd0: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   1}.do_test rowi
3ce0: 64 2d 31 30 2e 33 34 20 7b 0a 20 20 65 78 65 63  d-10.34 {.  exec
3cf0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3d00: 64 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45  d, a FROM t6 WHE
3d10: 52 45 20 2d 35 2e 35 3c 3d 72 6f 77 69 64 20 4f  RE -5.5<=rowid O
3d20: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
3d30: 53 43 7d 0a 7d 20 7b 2d 31 20 31 20 2d 32 20 32  SC}.} {-1 1 -2 2
3d40: 20 2d 33 20 33 20 2d 34 20 34 20 2d 35 20 35 7d   -3 3 -4 4 -5 5}
3d50: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
3d60: 30 2e 33 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  0.35.1 {.  execs
3d70: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
3d80: 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52  , a FROM t6 WHER
3d90: 45 20 72 6f 77 69 64 3e 2d 35 2e 35 7d 0a 7d 20  E rowid>-5.5}.} 
3da0: 7b 2d 35 20 35 20 2d 34 20 34 20 2d 33 20 33 20  {-5 5 -4 4 -3 3 
3db0: 2d 32 20 32 20 2d 31 20 31 7d 0a 64 6f 5f 74 65  -2 2 -1 1}.do_te
3dc0: 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 35 2e 32  st rowid-10.35.2
3dd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3de0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
3df0: 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77 69  OM t6 WHERE rowi
3e00: 64 3e 2d 35 2e 30 7d 0a 7d 20 7b 2d 34 20 34 20  d>-5.0}.} {-4 4 
3e10: 2d 33 20 33 20 2d 32 20 32 20 2d 31 20 31 7d 0a  -3 3 -2 2 -1 1}.
3e20: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
3e30: 2e 33 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  .36.1 {.  execsq
3e40: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
3e50: 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45   a FROM t6 WHERE
3e60: 20 72 6f 77 69 64 3e 2d 35 2e 35 20 4f 52 44 45   rowid>-5.5 ORDE
3e70: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d  R BY rowid DESC}
3e80: 0a 7d 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33  .} {-1 1 -2 2 -3
3e90: 20 33 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f   3 -4 4 -5 5}.do
3ea0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33  _test rowid-10.3
3eb0: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
3ec0: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
3ed0: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72   FROM t6 WHERE r
3ee0: 6f 77 69 64 3e 2d 35 2e 30 20 4f 52 44 45 52 20  owid>-5.0 ORDER 
3ef0: 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d  BY rowid DESC}.}
3f00: 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33   {-1 1 -2 2 -3 3
3f10: 20 2d 34 20 34 7d 0a 64 6f 5f 74 65 73 74 20 72   -4 4}.do_test r
3f20: 6f 77 69 64 2d 31 30 2e 33 37 20 7b 0a 20 20 65  owid-10.37 {.  e
3f30: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
3f40: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 36 20  owid, a FROM t6 
3f50: 57 48 45 52 45 20 2d 35 2e 35 3c 72 6f 77 69 64  WHERE -5.5<rowid
3f60: 7d 0a 7d 20 7b 2d 35 20 35 20 2d 34 20 34 20 2d  }.} {-5 5 -4 4 -
3f70: 33 20 33 20 2d 32 20 32 20 2d 31 20 31 7d 0a 64  3 3 -2 2 -1 1}.d
3f80: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
3f90: 33 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  38 {.  execsql {
3fa0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
3fb0: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35  FROM t6 WHERE -5
3fc0: 2e 35 3c 72 6f 77 69 64 20 4f 52 44 45 52 20 42  .5<rowid ORDER B
3fd0: 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20  Y rowid DESC}.} 
3fe0: 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33 20  {-1 1 -2 2 -3 3 
3ff0: 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f 74 65  -4 4 -5 5}.do_te
4000: 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 39 20 7b  st rowid-10.39 {
4010: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4020: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
4030: 20 74 36 20 57 48 45 52 45 20 72 6f 77 69 64 3c   t6 WHERE rowid<
4040: 3d 2d 35 2e 35 7d 0a 7d 20 7b 2d 38 20 38 20 2d  =-5.5}.} {-8 8 -
4050: 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f 74 65 73  7 7 -6 6}.do_tes
4060: 74 20 72 6f 77 69 64 2d 31 30 2e 34 30 20 7b 0a  t rowid-10.40 {.
4070: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4080: 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20  T rowid, a FROM 
4090: 74 36 20 57 48 45 52 45 20 72 6f 77 69 64 3c 3d  t6 WHERE rowid<=
40a0: 2d 35 2e 35 20 4f 52 44 45 52 20 42 59 20 72 6f  -5.5 ORDER BY ro
40b0: 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 2d 36 20  wid DESC}.} {-6 
40c0: 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a 64 6f 5f  6 -7 7 -8 8}.do_
40d0: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 31  test rowid-10.41
40e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
40f0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
4100: 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35  OM t6 WHERE -5.5
4110: 3e 3d 72 6f 77 69 64 7d 0a 7d 20 7b 2d 38 20 38  >=rowid}.} {-8 8
4120: 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f 74   -7 7 -6 6}.do_t
4130: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 32 20  est rowid-10.42 
4140: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4150: 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f  ECT rowid, a FRO
4160: 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35 3e  M t6 WHERE -5.5>
4170: 3d 72 6f 77 69 64 20 4f 52 44 45 52 20 42 59 20  =rowid ORDER BY 
4180: 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 2d  rowid DESC}.} {-
4190: 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a 64  6 6 -7 7 -8 8}.d
41a0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
41b0: 34 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  43 {.  execsql {
41c0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
41d0: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f  FROM t6 WHERE ro
41e0: 77 69 64 3c 2d 35 2e 35 7d 0a 7d 20 7b 2d 38 20  wid<-5.5}.} {-8 
41f0: 38 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f  8 -7 7 -6 6}.do_
4200: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 34  test rowid-10.44
4210: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
4220: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
4230: 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77 69  OM t6 WHERE rowi
4240: 64 3c 2d 35 2e 35 20 4f 52 44 45 52 20 42 59 20  d<-5.5 ORDER BY 
4250: 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 2d  rowid DESC}.} {-
4260: 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a 64  6 6 -7 7 -8 8}.d
4270: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
4280: 34 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  44 {.  execsql {
4290: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
42a0: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35  FROM t6 WHERE -5
42b0: 2e 35 3e 72 6f 77 69 64 7d 0a 7d 20 7b 2d 38 20  .5>rowid}.} {-8 
42c0: 38 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f  8 -7 7 -6 6}.do_
42d0: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 36  test rowid-10.46
42e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
42f0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
4300: 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35  OM t6 WHERE -5.5
4310: 3e 72 6f 77 69 64 20 4f 52 44 45 52 20 42 59 20  >rowid ORDER BY 
4320: 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 2d  rowid DESC}.} {-
4330: 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a 0a  6 6 -7 7 -8 8}..
4340: 23 20 43 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  # Comparison of 
4350: 72 6f 77 69 64 20 61 67 61 69 6e 73 74 20 73 74  rowid against st
4360: 72 69 6e 67 20 76 61 6c 75 65 73 2e 0a 23 0a 64  ring values..#.d
4370: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31 2e  o_test rowid-11.
4380: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
4390: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
43a0: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77  ROM t5 WHERE row
43b0: 69 64 3e 27 61 62 63 27 7d 0a 7d 20 7b 7d 0a 64  id>'abc'}.} {}.d
43c0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31 2e  o_test rowid-11.
43d0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
43e0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
43f0: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77  ROM t5 WHERE row
4400: 69 64 3e 3d 27 61 62 63 27 7d 0a 7d 20 7b 7d 0a  id>='abc'}.} {}.
4410: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31  do_test rowid-11
4420: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
4430: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
4440: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
4450: 77 69 64 3c 27 61 62 63 27 7d 0a 7d 20 7b 31 20  wid<'abc'}.} {1 
4460: 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35 20  1 2 2 3 3 4 4 5 
4470: 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a 64  5 6 6 7 7 8 8}.d
4480: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31 2e  o_test rowid-11.
4490: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
44a0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
44b0: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77  ROM t5 WHERE row
44c0: 69 64 3c 3d 27 61 62 63 27 7d 0a 7d 20 7b 31 20  id<='abc'}.} {1 
44d0: 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35 20  1 2 2 3 3 4 4 5 
44e0: 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a 0a  5 6 6 7 7 8 8}..
44f0: 23 20 54 65 73 74 20 74 68 65 20 61 75 74 6f 6d  # Test the autom
4500: 61 74 69 63 20 67 65 6e 65 72 61 74 69 6f 6e 20  atic generation 
4510: 6f 66 20 72 6f 77 69 64 73 20 77 68 65 6e 20 74  of rowids when t
4520: 68 65 20 74 61 62 6c 65 20 61 6c 72 65 61 64 79  he table already
4530: 20 63 6f 6e 74 61 69 6e 73 0a 23 20 61 20 72 6f   contains.# a ro
4540: 77 69 64 20 77 69 74 68 20 74 68 65 20 6d 61 78  wid with the max
4550: 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 23 0a 64 6f  imum value..#.do
4560: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 32 2e 31  _test rowid-12.1
4570: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4580: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4590: 74 37 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t7(x INTEGER PRI
45a0: 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20  MARY KEY, y);.  
45b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
45c0: 20 56 41 4c 55 45 53 28 39 32 32 33 33 37 32 30   VALUES(92233720
45d0: 33 36 38 35 34 37 37 35 38 30 37 2c 27 61 27 29  36854775807,'a')
45e0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  ;.    SELECT y F
45f0: 52 4f 4d 20 74 37 3b 0a 20 20 7d 0a 7d 20 7b 61  ROM t7;.  }.} {a
4600: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
4610: 31 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.2 {.  execsql
4620: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
4630: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 4e 55 4c  TO t7 VALUES(NUL
4640: 4c 2c 27 62 27 29 3b 0a 20 20 20 20 53 45 4c 45  L,'b');.    SELE
4650: 43 54 20 79 20 46 52 4f 4d 20 74 37 3b 0a 20 20  CT y FROM t7;.  
4660: 7d 0a 7d 20 7b 62 20 61 7d 0a 0a 66 69 6e 69 73  }.} {b a}..finis
4670: 68 5f 74 65 73 74 0a                             h_test.