/ Hex Artifact Content
Login

Artifact 742b5741584a8a44fd83e856cc2896688401d645:


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