/ Hex Artifact Content
Login

Artifact 5b7509f384f4f6fae1af3c8c104c8ca299fea18d:


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 69 66 20 30 20 7b  3 5 7 9}..if 0 {
0f00: 20 20 23 20 57 69 74 68 20 74 68 65 20 69 6e 64    # With the ind
0f10: 65 78 2d 6f 6e 2d 65 78 70 72 65 73 73 69 6f 6e  ex-on-expression
0f20: 73 20 65 6e 68 61 6e 63 65 6d 65 6e 74 2c 20 63  s enhancement, c
0f30: 72 65 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20  reating.        
0f40: 23 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 52 4f  # an index on RO
0f50: 57 49 44 20 68 61 73 20 62 65 63 6f 6d 65 20 70  WID has become p
0f60: 6f 73 73 69 62 6c 65 2e 0a 23 20 57 65 20 63 61  ossible..# We ca
0f70: 6e 6e 6f 74 20 69 6e 64 65 78 20 62 79 20 52 4f  nnot index by RO
0f80: 57 49 44 0a 23 0a 64 6f 5f 74 65 73 74 20 72 6f  WID.#.do_test ro
0f90: 77 69 64 2d 32 2e 39 20 7b 0a 20 20 73 65 74 20  wid-2.9 {.  set 
0fa0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0fb0: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
0fc0: 69 64 78 74 31 20 4f 4e 20 74 31 28 72 6f 77 69  idxt1 ON t1(rowi
0fd0: 64 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  d)}} msg].  lapp
0fe0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20  end v $msg.} {1 
0ff0: 7b 74 61 62 6c 65 20 74 31 20 68 61 73 20 6e 6f  {table t1 has no
1000: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 72 6f   column named ro
1010: 77 69 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  wid}}.do_test ro
1020: 77 69 64 2d 32 2e 31 30 20 7b 0a 20 20 73 65 74  wid-2.10 {.  set
1030: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
1040: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
1050: 20 69 64 78 74 31 20 4f 4e 20 74 31 28 5f 72 6f   idxt1 ON t1(_ro
1060: 77 69 64 5f 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c  wid_)}} msg].  l
1070: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
1080: 7b 31 20 7b 74 61 62 6c 65 20 74 31 20 68 61 73  {1 {table t1 has
1090: 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64   no column named
10a0: 20 5f 72 6f 77 69 64 5f 7d 7d 0a 64 6f 5f 74 65   _rowid_}}.do_te
10b0: 73 74 20 72 6f 77 69 64 2d 32 2e 31 31 20 7b 0a  st rowid-2.11 {.
10c0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
10d0: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
10e0: 49 4e 44 45 58 20 69 64 78 74 31 20 4f 4e 20 74  INDEX idxt1 ON t
10f0: 31 28 6f 69 64 29 7d 7d 20 6d 73 67 5d 0a 20 20  1(oid)}} msg].  
1100: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
1110: 20 7b 31 20 7b 74 61 62 6c 65 20 74 31 20 68 61   {1 {table t1 ha
1120: 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  s no column name
1130: 64 20 6f 69 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  d oid}}.do_test 
1140: 72 6f 77 69 64 2d 32 2e 31 32 20 7b 0a 20 20 73  rowid-2.12 {.  s
1150: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
1160: 63 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  csql {CREATE IND
1170: 45 58 20 69 64 78 74 31 20 4f 4e 20 74 31 28 78  EX idxt1 ON t1(x
1180: 2c 20 72 6f 77 69 64 29 7d 7d 20 6d 73 67 5d 0a  , rowid)}} msg].
1190: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
11a0: 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 31 20  .} {1 {table t1 
11b0: 68 61 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 6e 61  has no column na
11c0: 6d 65 64 20 72 6f 77 69 64 7d 7d 0a 7d 0a 0a 23  med rowid}}.}..#
11d0: 20 43 6f 6c 75 6d 6e 73 20 64 65 66 69 6e 65 64   Columns defined
11e0: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 73   in the CREATE s
11f0: 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64  tatement overrid
1200: 65 20 74 68 65 20 62 75 69 6c 64 69 6e 20 52 4f  e the buildin RO
1210: 57 49 44 0a 23 20 63 6f 6c 75 6d 6e 20 6e 61 6d  WID.# column nam
1220: 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72 6f  es..#.do_test ro
1230: 77 69 64 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63  wid-3.1 {.  exec
1240: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1250: 20 54 41 42 4c 45 20 74 32 28 72 6f 77 69 64 20   TABLE t2(rowid 
1260: 69 6e 74 2c 20 78 20 69 6e 74 2c 20 79 20 69 6e  int, x int, y in
1270: 74 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t);.    INSERT I
1280: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2c  NTO t2 VALUES(0,
1290: 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,3);.    INSERT
12a0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
12b0: 34 2c 35 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45  4,5,6);.    INSE
12c0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
12d0: 53 28 37 2c 38 2c 39 29 3b 0a 20 20 20 20 53 45  S(7,8,9);.    SE
12e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 4f  LECT * FROM t2 O
12f0: 52 44 45 52 20 42 59 20 78 3b 0a 20 20 7d 0a 7d  RDER BY x;.  }.}
1300: 20 7b 30 20 32 20 33 20 34 20 35 20 36 20 37 20   {0 2 3 4 5 6 7 
1310: 38 20 39 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  8 9}.do_test row
1320: 69 64 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73  id-3.2 {.  execs
1330: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
1340: 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 72 6f  M t2 ORDER BY ro
1350: 77 69 64 7d 0a 7d 20 7b 30 20 32 20 33 20 34 20  wid}.} {0 2 3 4 
1360: 35 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74 65  5 6 7 8 9}.do_te
1370: 73 74 20 72 6f 77 69 64 2d 33 2e 33 20 7b 0a 20  st rowid-3.3 {. 
1380: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1390: 20 72 6f 77 69 64 2c 20 78 2c 20 79 20 46 52 4f   rowid, x, y FRO
13a0: 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 72 6f  M t2 ORDER BY ro
13b0: 77 69 64 7d 0a 7d 20 7b 30 20 32 20 33 20 34 20  wid}.} {0 2 3 4 
13c0: 35 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74 65  5 6 7 8 9}.do_te
13d0: 73 74 20 72 6f 77 69 64 2d 33 2e 34 20 7b 0a 20  st rowid-3.4 {. 
13e0: 20 73 65 74 20 72 31 20 5b 65 78 65 63 73 71 6c   set r1 [execsql
13f0: 20 7b 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f   {SELECT _rowid_
1400: 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 20  , rowid FROM t2 
1410: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 7d 5d  ORDER BY rowid}]
1420: 0a 20 20 66 6f 72 65 61 63 68 20 7b 61 20 62 20  .  foreach {a b 
1430: 63 20 64 20 65 20 66 7d 20 24 72 31 20 7b 7d 0a  c d e f} $r1 {}.
1440: 20 20 73 65 74 20 72 32 20 5b 65 78 65 63 73 71    set r2 [execsq
1450: 6c 20 7b 53 45 4c 45 43 54 20 5f 72 6f 77 69 64  l {SELECT _rowid
1460: 5f 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 32  _, rowid FROM t2
1470: 20 4f 52 44 45 52 20 42 59 20 78 20 44 45 53 43   ORDER BY x DESC
1480: 7d 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 75 20  }].  foreach {u 
1490: 76 20 77 20 78 20 79 20 7a 7d 20 24 72 32 20 7b  v w x y z} $r2 {
14a0: 7d 0a 20 20 65 78 70 72 20 7b 24 75 3d 3d 24 65  }.  expr {$u==$e
14b0: 20 26 26 20 24 77 3d 3d 24 63 20 26 26 20 24 79   && $w==$c && $y
14c0: 3d 3d 24 61 7d 0a 7d 20 7b 31 7d 0a 23 20 73 71  ==$a}.} {1}.# sq
14d0: 6c 69 74 65 33 20 76 33 20 2d 20 64 6f 5f 70 72  lite3 v3 - do_pr
14e0: 6f 62 74 65 73 74 20 64 6f 65 73 6e 27 74 20 65  obtest doesn't e
14f0: 78 69 73 74 20 61 6e 79 6d 6f 72 65 3f 0a 69 66  xist anymore?.if
1500: 20 30 20 7b 0a 64 6f 5f 70 72 6f 62 74 65 73 74   0 {.do_probtest
1510: 20 72 6f 77 69 64 2d 33 2e 35 20 7b 0a 20 20 73   rowid-3.5 {.  s
1520: 65 74 20 72 31 20 5b 65 78 65 63 73 71 6c 20 7b  et r1 [execsql {
1530: 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f 2c 20  SELECT _rowid_, 
1540: 72 6f 77 69 64 20 46 52 4f 4d 20 74 32 20 4f 52  rowid FROM t2 OR
1550: 44 45 52 20 42 59 20 72 6f 77 69 64 7d 5d 0a 20  DER BY rowid}]. 
1560: 20 66 6f 72 65 61 63 68 20 7b 61 20 62 20 63 20   foreach {a b c 
1570: 64 20 65 20 66 7d 20 24 72 31 20 7b 7d 0a 20 20  d e f} $r1 {}.  
1580: 65 78 70 72 20 7b 24 61 21 3d 24 62 20 26 26 20  expr {$a!=$b && 
1590: 24 63 21 3d 24 64 20 26 26 20 24 65 21 3d 24 66  $c!=$d && $e!=$f
15a0: 7d 0a 7d 20 7b 31 7d 0a 7d 0a 0a 23 20 4c 65 74  }.} {1}.}..# Let
15b0: 27 73 20 74 72 79 20 73 6f 6d 65 20 6d 6f 72 65  's try some more
15c0: 20 63 6f 6d 70 6c 65 78 20 65 78 61 6d 70 6c 65   complex example
15d0: 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 6f 6d  s, including som
15e0: 65 20 6a 6f 69 6e 73 2e 0a 23 0a 64 6f 5f 74 65  e joins..#.do_te
15f0: 73 74 20 72 6f 77 69 64 2d 34 2e 31 20 7b 0a 20  st rowid-4.1 {. 
1600: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
1610: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20  ELETE FROM t1;. 
1620: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
1630: 32 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65  2;.  }.  for {se
1640: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 35 30 7d 20  t i 1} {$i<=50} 
1650: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65  {incr i} {.    e
1660: 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49  xecsql "INSERT I
1670: 4e 54 4f 20 74 31 28 78 2c 79 29 20 56 41 4c 55  NTO t1(x,y) VALU
1680: 45 53 28 24 69 2c 5b 65 78 70 72 20 7b 24 69 2a  ES($i,[expr {$i*
1690: 24 69 7d 5d 29 22 0a 20 20 7d 0a 20 20 65 78 65  $i}])".  }.  exe
16a0: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
16b0: 4f 20 74 32 20 53 45 4c 45 43 54 20 5f 72 6f 77  O t2 SELECT _row
16c0: 69 64 5f 2c 20 78 2a 79 2c 20 79 2a 79 20 46 52  id_, x*y, y*y FR
16d0: 4f 4d 20 74 31 7d 0a 20 20 65 78 65 63 73 71 6c  OM t1}.  execsql
16e0: 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52   {SELECT t2.y FR
16f0: 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20  OM t1, t2 WHERE 
1700: 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e 72  t1.x==4 AND t1.r
1710: 6f 77 69 64 3d 3d 74 32 2e 72 6f 77 69 64 7d 0a  owid==t2.rowid}.
1720: 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20  } {256}.do_test 
1730: 72 6f 77 69 64 2d 34 2e 32 20 7b 0a 20 20 65 78  rowid-4.2 {.  ex
1740: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32  ecsql {SELECT t2
1750: 2e 79 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57  .y FROM t2, t1 W
1760: 48 45 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e 44  HERE t1.x==4 AND
1770: 20 74 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f   t1.rowid==t2.ro
1780: 77 69 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f  wid}.} {256}.do_
1790: 74 65 73 74 20 72 6f 77 69 64 2d 34 2e 32 2e 31  test rowid-4.2.1
17a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
17b0: 4c 45 43 54 20 74 32 2e 79 20 46 52 4f 4d 20 74  LECT t2.y FROM t
17c0: 32 2c 20 74 31 20 57 48 45 52 45 20 74 31 2e 78  2, t1 WHERE t1.x
17d0: 3d 3d 34 20 41 4e 44 20 74 31 2e 6f 69 64 3d 3d  ==4 AND t1.oid==
17e0: 74 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36  t2.rowid}.} {256
17f0: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
1800: 34 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  4.2.2 {.  execsq
1810: 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46  l {SELECT t2.y F
1820: 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45  ROM t2, t1 WHERE
1830: 20 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e   t1.x==4 AND t1.
1840: 5f 72 6f 77 69 64 5f 3d 3d 74 32 2e 72 6f 77 69  _rowid_==t2.rowi
1850: 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65  d}.} {256}.do_te
1860: 73 74 20 72 6f 77 69 64 2d 34 2e 32 2e 33 20 7b  st rowid-4.2.3 {
1870: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1880: 43 54 20 74 32 2e 79 20 46 52 4f 4d 20 74 32 2c  CT t2.y FROM t2,
1890: 20 74 31 20 57 48 45 52 45 20 74 31 2e 78 3d 3d   t1 WHERE t1.x==
18a0: 34 20 41 4e 44 20 74 32 2e 72 6f 77 69 64 3d 3d  4 AND t2.rowid==
18b0: 74 31 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36  t1.rowid}.} {256
18c0: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
18d0: 34 2e 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  4.2.4 {.  execsq
18e0: 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46  l {SELECT t2.y F
18f0: 52 4f 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45  ROM t2, t1 WHERE
1900: 20 74 32 2e 72 6f 77 69 64 3d 3d 74 31 2e 6f 69   t2.rowid==t1.oi
1910: 64 20 41 4e 44 20 74 31 2e 78 3d 3d 34 7d 0a 7d  d AND t1.x==4}.}
1920: 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72   {256}.do_test r
1930: 6f 77 69 64 2d 34 2e 32 2e 35 20 7b 0a 20 20 65  owid-4.2.5 {.  e
1940: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
1950: 32 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74 32 20  2.y FROM t1, t2 
1960: 57 48 45 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e  WHERE t1.x==4 AN
1970: 44 20 74 31 2e 5f 72 6f 77 69 64 5f 3d 3d 74 32  D t1._rowid_==t2
1980: 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36 7d 0a  .rowid}.} {256}.
1990: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34 2e  do_test rowid-4.
19a0: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.6 {.  execsql 
19b0: 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46 52 4f  {SELECT t2.y FRO
19c0: 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45 20 74  M t1, t2 WHERE t
19d0: 31 2e 78 3d 3d 34 20 41 4e 44 20 74 32 2e 72 6f  1.x==4 AND t2.ro
19e0: 77 69 64 3d 3d 74 31 2e 72 6f 77 69 64 7d 0a 7d  wid==t1.rowid}.}
19f0: 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72   {256}.do_test r
1a00: 6f 77 69 64 2d 34 2e 32 2e 37 20 7b 0a 20 20 65  owid-4.2.7 {.  e
1a10: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
1a20: 32 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74 32 20  2.y FROM t1, t2 
1a30: 57 48 45 52 45 20 74 32 2e 72 6f 77 69 64 3d 3d  WHERE t2.rowid==
1a40: 74 31 2e 6f 69 64 20 41 4e 44 20 74 31 2e 78 3d  t1.oid AND t1.x=
1a50: 3d 34 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74  =4}.} {256}.do_t
1a60: 65 73 74 20 72 6f 77 69 64 2d 34 2e 33 20 7b 0a  est rowid-4.3 {.
1a70: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
1a80: 45 20 49 4e 44 45 58 20 69 64 78 74 31 20 4f 4e  E INDEX idxt1 ON
1a90: 20 74 31 28 78 29 7d 0a 20 20 65 78 65 63 73 71   t1(x)}.  execsq
1aa0: 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46  l {SELECT t2.y F
1ab0: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
1ac0: 20 74 31 2e 78 3d 3d 34 20 41 4e 44 20 74 31 2e   t1.x==4 AND t1.
1ad0: 72 6f 77 69 64 3d 3d 74 32 2e 72 6f 77 69 64 7d  rowid==t2.rowid}
1ae0: 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74  .} {256}.do_test
1af0: 20 72 6f 77 69 64 2d 34 2e 33 2e 31 20 7b 0a 20   rowid-4.3.1 {. 
1b00: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1b10: 20 74 32 2e 79 20 46 52 4f 4d 20 74 31 2c 20 74   t2.y FROM t1, t
1b20: 32 20 57 48 45 52 45 20 74 31 2e 78 3d 3d 34 20  2 WHERE t1.x==4 
1b30: 41 4e 44 20 74 31 2e 5f 72 6f 77 69 64 5f 3d 3d  AND t1._rowid_==
1b40: 74 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b 32 35 36  t2.rowid}.} {256
1b50: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
1b60: 34 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  4.3.2 {.  execsq
1b70: 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e 79 20 46  l {SELECT t2.y F
1b80: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
1b90: 20 74 32 2e 72 6f 77 69 64 3d 3d 74 31 2e 6f 69   t2.rowid==t1.oi
1ba0: 64 20 41 4e 44 20 34 3d 3d 74 31 2e 78 7d 0a 7d  d AND 4==t1.x}.}
1bb0: 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72   {256}.do_test r
1bc0: 6f 77 69 64 2d 34 2e 34 20 7b 0a 20 20 65 78 65  owid-4.4 {.  exe
1bd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e  csql {SELECT t2.
1be0: 79 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48  y FROM t2, t1 WH
1bf0: 45 52 45 20 74 31 2e 78 3d 3d 34 20 41 4e 44 20  ERE t1.x==4 AND 
1c00: 74 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f 77  t1.rowid==t2.row
1c10: 69 64 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74  id}.} {256}.do_t
1c20: 65 73 74 20 72 6f 77 69 64 2d 34 2e 34 2e 31 20  est rowid-4.4.1 
1c30: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1c40: 45 43 54 20 74 32 2e 79 20 46 52 4f 4d 20 74 32  ECT t2.y FROM t2
1c50: 2c 20 74 31 20 57 48 45 52 45 20 74 31 2e 78 3d  , t1 WHERE t1.x=
1c60: 3d 34 20 41 4e 44 20 74 31 2e 5f 72 6f 77 69 64  =4 AND t1._rowid
1c70: 5f 3d 3d 74 32 2e 72 6f 77 69 64 7d 0a 7d 20 7b  _==t2.rowid}.} {
1c80: 32 35 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  256}.do_test row
1c90: 69 64 2d 34 2e 34 2e 32 20 7b 0a 20 20 65 78 65  id-4.4.2 {.  exe
1ca0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 32 2e  csql {SELECT t2.
1cb0: 79 20 46 52 4f 4d 20 74 32 2c 20 74 31 20 57 48  y FROM t2, t1 WH
1cc0: 45 52 45 20 74 32 2e 72 6f 77 69 64 3d 3d 74 31  ERE t2.rowid==t1
1cd0: 2e 6f 69 64 20 41 4e 44 20 34 3d 3d 74 31 2e 78  .oid AND 4==t1.x
1ce0: 7d 0a 7d 20 7b 32 35 36 7d 0a 64 6f 5f 74 65 73  }.} {256}.do_tes
1cf0: 74 20 72 6f 77 69 64 2d 34 2e 35 20 7b 0a 20 20  t rowid-4.5 {.  
1d00: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
1d10: 49 4e 44 45 58 20 69 64 78 74 32 20 4f 4e 20 74  INDEX idxt2 ON t
1d20: 32 28 79 29 7d 0a 20 20 73 65 74 20 73 71 6c 69  2(y)}.  set sqli
1d30: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
1d40: 30 0a 20 20 63 6f 6e 63 61 74 20 5b 65 78 65 63  0.  concat [exec
1d50: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1d60: 20 74 31 2e 78 20 46 52 4f 4d 20 74 32 2c 20 74   t1.x FROM t2, t
1d70: 31 20 0a 20 20 20 20 57 48 45 52 45 20 74 32 2e  1 .    WHERE t2.
1d80: 79 3d 3d 32 35 36 20 41 4e 44 20 74 31 2e 72 6f  y==256 AND t1.ro
1d90: 77 69 64 3d 3d 74 32 2e 72 6f 77 69 64 0a 20 20  wid==t2.rowid.  
1da0: 7d 5d 20 24 73 71 6c 69 74 65 5f 73 65 61 72 63  }] $sqlite_searc
1db0: 68 5f 63 6f 75 6e 74 0a 7d 20 7b 34 20 33 7d 0a  h_count.} {4 3}.
1dc0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 34 2e  do_test rowid-4.
1dd0: 35 2e 31 20 7b 0a 20 20 73 65 74 20 73 71 6c 69  5.1 {.  set sqli
1de0: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
1df0: 30 0a 20 20 63 6f 6e 63 61 74 20 5b 65 78 65 63  0.  concat [exec
1e00: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1e10: 20 74 31 2e 78 20 46 52 4f 4d 20 74 32 2c 20 74   t1.x FROM t2, t
1e20: 31 20 0a 20 20 20 20 57 48 45 52 45 20 74 31 2e  1 .    WHERE t1.
1e30: 4f 49 44 3d 3d 74 32 2e 72 6f 77 69 64 20 41 4e  OID==t2.rowid AN
1e40: 44 20 74 32 2e 79 3d 3d 38 31 0a 20 20 7d 5d 20  D t2.y==81.  }] 
1e50: 24 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63  $sqlite_search_c
1e60: 6f 75 6e 74 0a 7d 20 7b 33 20 33 7d 0a 64 6f 5f  ount.} {3 3}.do_
1e70: 74 65 73 74 20 72 6f 77 69 64 2d 34 2e 36 20 7b  test rowid-4.6 {
1e80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1e90: 20 53 45 4c 45 43 54 20 74 31 2e 78 20 46 52 4f   SELECT t1.x FRO
1ea0: 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 57 48 45  M t1, t2.    WHE
1eb0: 52 45 20 74 32 2e 79 3d 3d 32 35 36 20 41 4e 44  RE t2.y==256 AND
1ec0: 20 74 31 2e 72 6f 77 69 64 3d 3d 74 32 2e 72 6f   t1.rowid==t2.ro
1ed0: 77 69 64 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 0a 64  wid.  }.} {4}..d
1ee0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 35 2e 31  o_test rowid-5.1
1ef0: 2e 31 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65  .1 {.  ifcapable
1f00: 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 20 20   subquery {.    
1f10: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
1f20: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 5f 72  FROM t1 WHERE _r
1f30: 6f 77 69 64 5f 20 49 4e 20 28 53 45 4c 45 43 54  owid_ IN (SELECT
1f40: 20 6f 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45   oid FROM t1 WHE
1f50: 52 45 20 78 3e 38 29 7d 0a 20 20 7d 20 65 6c 73  RE x>8)}.  } els
1f60: 65 20 7b 0a 20 20 20 20 73 65 74 20 6f 69 64 73  e {.    set oids
1f70: 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   [execsql {SELEC
1f80: 54 20 6f 69 64 20 46 52 4f 4d 20 74 31 20 57 48  T oid FROM t1 WH
1f90: 45 52 45 20 78 3e 38 7d 5d 0a 20 20 20 20 73 65  ERE x>8}].    se
1fa0: 74 20 77 68 65 72 65 20 22 5f 72 6f 77 69 64 5f  t where "_rowid_
1fb0: 20 3d 20 5b 6a 6f 69 6e 20 24 6f 69 64 73 20 7b   = [join $oids {
1fc0: 20 4f 52 20 5f 72 6f 77 69 64 5f 20 3d 20 7d 5d   OR _rowid_ = }]
1fd0: 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 44  ".    execsql "D
1fe0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
1ff0: 45 52 45 20 24 77 68 65 72 65 22 0a 20 20 7d 0a  ERE $where".  }.
2000: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  } {}.do_test row
2010: 69 64 2d 35 2e 31 2e 32 20 7b 0a 20 20 65 78 65  id-5.1.2 {.  exe
2020: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78  csql {SELECT max
2030: 28 78 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  (x) FROM t1}.} {
2040: 38 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  8}..# Make sure 
2050: 61 20 22 57 48 45 52 45 20 72 6f 77 69 64 3d 58  a "WHERE rowid=X
2060: 22 20 63 6c 61 75 73 65 20 77 6f 72 6b 73 20 77  " clause works w
2070: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
2080: 52 4f 57 49 44 20 6f 66 20 58 2e 0a 23 0a 64 6f  ROWID of X..#.do
2090: 5f 74 65 73 74 20 72 6f 77 69 64 2d 36 2e 31 20  _test rowid-6.1 
20a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
20b0: 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20    SELECT x FROM 
20c0: 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20  t1.  }.} {1 2 3 
20d0: 34 20 35 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65  4 5 6 7 8}.do_te
20e0: 73 74 20 72 6f 77 69 64 2d 36 2e 32 20 7b 0a 20  st rowid-6.2 {. 
20f0: 20 66 6f 72 20 7b 73 65 74 20 3a 3a 6e 6f 72 6f   for {set ::noro
2100: 77 20 31 7d 20 7b 31 7d 20 7b 69 6e 63 72 20 3a  w 1} {1} {incr :
2110: 3a 6e 6f 72 6f 77 7d 20 7b 0a 20 20 20 20 69 66  :norow} {.    if
2120: 20 7b 5b 65 78 65 63 73 71 6c 20 22 53 45 4c 45   {[execsql "SELE
2130: 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45  CT x FROM t1 WHE
2140: 52 45 20 72 6f 77 69 64 3d 24 3a 3a 6e 6f 72 6f  RE rowid=$::noro
2150: 77 22 5d 3d 3d 22 22 7d 20 20 62 72 65 61 6b 0a  w"]==""}  break.
2160: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 5b 73    }.  execsql [s
2170: 75 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45 54  ubst {.    DELET
2180: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
2190: 72 6f 77 69 64 3d 24 3a 3a 6e 6f 72 6f 77 0a 20  rowid=$::norow. 
21a0: 20 7d 5d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74   }].} {}.do_test
21b0: 20 72 6f 77 69 64 2d 36 2e 33 20 7b 0a 20 20 65   rowid-6.3 {.  e
21c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
21d0: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 0a 20 20  ECT x FROM t1.  
21e0: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36  }.} {1 2 3 4 5 6
21f0: 20 37 20 38 7d 0a 0a 23 20 42 65 67 69 6e 6e 69   7 8}..# Beginni
2200: 6e 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20  ng with version 
2210: 32 2e 33 2e 34 2c 20 53 51 4c 69 74 65 20 63 6f  2.3.4, SQLite co
2220: 6d 70 75 74 65 73 20 72 6f 77 69 64 73 20 6f 66  mputes rowids of
2230: 20 6e 65 77 20 72 6f 77 73 20 62 79 0a 23 20 66   new rows by.# f
2240: 69 6e 64 69 6e 67 20 74 68 65 20 6d 61 78 69 6d  inding the maxim
2250: 75 6d 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64  um current rowid
2260: 20 61 6e 64 20 61 64 64 69 6e 67 20 6f 6e 65 2e   and adding one.
2270: 20 20 49 74 20 66 61 6c 6c 73 20 62 61 63 6b 20    It falls back 
2280: 74 6f 0a 23 20 74 68 65 20 6f 6c 64 20 72 61 6e  to.# the old ran
2290: 64 6f 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 66  dom algorithm if
22a0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 72 6f 77   the maximum row
22b0: 69 64 20 69 73 20 74 68 65 20 6c 61 72 67 65 73  id is the larges
22c0: 74 20 69 6e 74 65 67 65 72 2e 0a 23 20 54 68 65  t integer..# The
22d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73   following tests
22e0: 20 61 72 65 20 66 6f 72 20 74 68 69 73 20 6e 65   are for this ne
22f0: 77 20 62 65 68 61 76 69 6f 72 2e 0a 23 0a 64 6f  w behavior..#.do
2300: 5f 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 30 20  _test rowid-7.0 
2310: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2320: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
2330: 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  ;.    DROP TABLE
2340: 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e   t2;.    DROP IN
2350: 44 45 58 20 69 64 78 74 31 3b 0a 20 20 20 20 49  DEX idxt1;.    I
2360: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2370: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 53  LUES(1,2);.    S
2380: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
2390: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
23a0: 20 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   1 2}.do_test ro
23b0: 77 69 64 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63  wid-7.1 {.  exec
23c0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
23d0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
23e0: 39 39 2c 31 30 30 29 3b 0a 20 20 20 20 53 45 4c  99,100);.    SEL
23f0: 45 43 54 20 72 6f 77 69 64 2c 2a 20 46 52 4f 4d  ECT rowid,* FROM
2400: 20 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32   t1.  }.} {1 1 2
2410: 20 32 20 39 39 20 31 30 30 7d 0a 64 6f 5f 74 65   2 99 100}.do_te
2420: 73 74 20 72 6f 77 69 64 2d 37 2e 32 20 7b 0a 20  st rowid-7.2 {. 
2430: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2440: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
2450: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2460: 20 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e   KEY, b);.    IN
2470: 53 45 52 54 20 49 4e 54 4f 20 74 32 28 62 29 20  SERT INTO t2(b) 
2480: 56 41 4c 55 45 53 28 35 35 29 3b 0a 20 20 20 20  VALUES(55);.    
2490: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
24a0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 35 35 7d 0a 64  ;.  }.} {1 55}.d
24b0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 33  o_test rowid-7.3
24c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
24d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
24e0: 32 28 62 29 20 56 41 4c 55 45 53 28 36 36 29 3b  2(b) VALUES(66);
24f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2500: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
2510: 35 35 20 32 20 36 36 7d 0a 64 6f 5f 74 65 73 74  55 2 66}.do_test
2520: 20 72 6f 77 69 64 2d 37 2e 34 20 7b 0a 20 20 65   rowid-7.4 {.  e
2530: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
2540: 45 52 54 20 49 4e 54 4f 20 74 32 28 61 2c 62 29  ERT INTO t2(a,b)
2550: 20 56 41 4c 55 45 53 28 31 30 30 30 30 30 30 2c   VALUES(1000000,
2560: 37 37 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  77);.    INSERT 
2570: 49 4e 54 4f 20 74 32 28 62 29 20 56 41 4c 55 45  INTO t2(b) VALUE
2580: 53 28 38 38 29 3b 0a 20 20 20 20 53 45 4c 45 43  S(88);.    SELEC
2590: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
25a0: 0a 7d 20 7b 31 20 35 35 20 32 20 36 36 20 31 30  .} {1 55 2 66 10
25b0: 30 30 30 30 30 20 37 37 20 31 30 30 30 30 30 31  00000 77 1000001
25c0: 20 38 38 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77   88}.do_test row
25d0: 69 64 2d 37 2e 35 20 7b 0a 20 20 65 78 65 63 73  id-7.5 {.  execs
25e0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
25f0: 49 4e 54 4f 20 74 32 28 61 2c 62 29 20 56 41 4c  INTO t2(a,b) VAL
2600: 55 45 53 28 32 31 34 37 34 38 33 36 34 37 2c 39  UES(2147483647,9
2610: 39 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  9);.    INSERT I
2620: 4e 54 4f 20 74 32 28 62 29 20 56 41 4c 55 45 53  NTO t2(b) VALUES
2630: 28 31 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  (11);.    SELECT
2640: 20 62 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52   b FROM t2 ORDER
2650: 20 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 31 31   BY b;.  }.} {11
2660: 20 35 35 20 36 36 20 37 37 20 38 38 20 39 39 7d   55 66 77 88 99}
2670: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
2680: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
2690: 72 6f 77 69 64 2d 37 2e 36 20 7b 0a 20 20 20 20  rowid-7.6 {.    
26a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
26b0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 32  SELECT b FROM t2
26c0: 20 57 48 45 52 45 20 61 20 4e 4f 54 20 49 4e 28   WHERE a NOT IN(
26d0: 31 2c 32 2c 31 30 30 30 30 30 30 2c 31 30 30 30  1,2,1000000,1000
26e0: 30 30 31 2c 32 31 34 37 34 38 33 36 34 37 29 3b  001,2147483647);
26f0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a  .    }.  } {11}.
2700: 20 20 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d    do_test rowid-
2710: 37 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  7.7 {.    execsq
2720: 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  l {.      INSERT
2730: 20 49 4e 54 4f 20 74 32 28 62 29 20 56 41 4c 55   INTO t2(b) VALU
2740: 45 53 28 32 32 29 3b 0a 20 20 20 20 20 20 49 4e  ES(22);.      IN
2750: 53 45 52 54 20 49 4e 54 4f 20 74 32 28 62 29 20  SERT INTO t2(b) 
2760: 56 41 4c 55 45 53 28 33 33 29 3b 0a 20 20 20 20  VALUES(33);.    
2770: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
2780: 28 62 29 20 56 41 4c 55 45 53 28 34 34 29 3b 0a  (b) VALUES(44);.
2790: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
27a0: 4f 20 74 32 28 62 29 20 56 41 4c 55 45 53 28 35  O t2(b) VALUES(5
27b0: 35 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  5);.      SELECT
27c0: 20 62 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   b FROM t2 WHERE
27d0: 20 61 20 4e 4f 54 20 49 4e 28 31 2c 32 2c 31 30   a NOT IN(1,2,10
27e0: 30 30 30 30 30 2c 31 30 30 30 30 30 31 2c 32 31  00000,1000001,21
27f0: 34 37 34 38 33 36 34 37 29 20 0a 20 20 20 20 20  47483647) .     
2800: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 62 3b       ORDER BY b;
2810: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 20 32  .    }.  } {11 2
2820: 32 20 33 33 20 34 34 20 35 35 7d 0a 7d 0a 64 6f  2 33 44 55}.}.do
2830: 5f 74 65 73 74 20 72 6f 77 69 64 2d 37 2e 38 20  _test rowid-7.8 
2840: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2850: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32    DELETE FROM t2
2860: 20 57 48 45 52 45 20 61 21 3d 32 3b 0a 20 20 20   WHERE a!=2;.   
2870: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28   INSERT INTO t2(
2880: 62 29 20 56 41 4c 55 45 53 28 31 31 31 29 3b 0a  b) VALUES(111);.
2890: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
28a0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 36  M t2;.  }.} {2 6
28b0: 36 20 33 20 31 31 31 7d 0a 0a 69 66 63 61 70 61  6 3 111}..ifcapa
28c0: 62 6c 65 20 7b 74 72 69 67 67 65 72 7d 20 7b 0a  ble {trigger} {.
28d0: 23 20 4d 61 6b 65 20 73 75 72 65 20 41 46 54 45  # Make sure AFTE
28e0: 52 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  R triggers that 
28f0: 64 6f 20 49 4e 53 45 52 54 73 20 64 6f 20 6e 6f  do INSERTs do no
2900: 74 20 63 68 61 6e 67 65 20 74 68 65 20 6c 61 73  t change the las
2910: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 2e 0a  t_insert_rowid..
2920: 23 20 54 69 63 6b 65 74 20 23 32 39 30 0a 23 0a  # Ticket #290.#.
2930: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 38 2e  do_test rowid-8.
2940: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2950: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2960: 20 74 33 28 61 20 69 6e 74 65 67 65 72 20 70 72   t3(a integer pr
2970: 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 20 20  imary key);.    
2980: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
2990: 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  x);.    INSERT I
29a0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 29  NTO t4 VALUES(1)
29b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
29c0: 47 47 45 52 20 72 33 20 41 46 54 45 52 20 49 4e  GGER r3 AFTER IN
29d0: 53 45 52 54 20 6f 6e 20 74 33 20 46 4f 52 20 45  SERT on t3 FOR E
29e0: 41 43 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20  ACH ROW BEGIN.  
29f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2a00: 74 34 20 56 41 4c 55 45 53 28 4e 45 57 2e 61 2b  t4 VALUES(NEW.a+
2a10: 31 30 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  10);.    END;.  
2a20: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2a30: 74 33 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  t3;.  }.} {}.do_
2a40: 74 65 73 74 20 72 6f 77 69 64 2d 38 2e 32 20 7b  test rowid-8.2 {
2a50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2a60: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a   SELECT rowid, *
2a70: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20   FROM t4;.  }.} 
2a80: 7b 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f  {1 1}.do_test ro
2a90: 77 69 64 2d 38 2e 33 20 7b 0a 20 20 65 78 65 63  wid-8.3 {.  exec
2aa0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
2ab0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
2ac0: 31 32 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  123);.    SELECT
2ad0: 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
2ae0: 69 64 28 29 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  id();.  }.} {123
2af0: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
2b00: 38 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.4 {.  execsql 
2b10: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2b20: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t3;.  }.} {1
2b30: 32 33 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  23}.do_test rowi
2b40: 64 2d 38 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  d-8.5 {.  execsq
2b50: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
2b60: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 34 3b  owid, * FROM t4;
2b70: 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20 31 33  .  }.} {1 1 2 13
2b80: 33 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64  3}.do_test rowid
2b90: 2d 38 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.6 {.  execsql
2ba0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2bb0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c  TO t3 VALUES(NUL
2bc0: 4c 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c  L);.    SELECT l
2bd0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2be0: 28 29 3b 0a 20 20 7d 0a 7d 20 7b 31 32 34 7d 0a  ();.  }.} {124}.
2bf0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 38 2e  do_test rowid-8.
2c00: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
2c10: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2c20: 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  M t3;.  }.} {123
2c30: 20 31 32 34 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   124}.do_test ro
2c40: 77 69 64 2d 38 2e 38 20 7b 0a 20 20 65 78 65 63  wid-8.8 {.  exec
2c50: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2c60: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
2c70: 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 32 20  4;.  }.} {1 1 2 
2c80: 31 33 33 20 33 20 31 33 34 7d 0a 7d 20 3b 23 20  133 3 134}.} ;# 
2c90: 65 6e 64 69 66 20 74 72 69 67 67 65 72 0a 0a 23  endif trigger..#
2ca0: 20 49 66 20 74 72 69 67 67 65 72 73 20 61 72 65   If triggers are
2cb0: 20 6e 6f 74 20 65 6e 61 62 6c 65 2c 20 73 69 6d   not enable, sim
2cc0: 75 6c 61 74 65 20 74 68 65 69 72 20 65 66 66 65  ulate their effe
2cd0: 63 74 20 66 6f 72 20 74 68 65 20 74 65 73 74 73  ct for the tests
2ce0: 20 74 68 61 74 0a 23 20 66 6f 6c 6c 6f 77 2e 0a   that.# follow..
2cf0: 69 66 63 61 70 61 62 6c 65 20 7b 21 74 72 69 67  ifcapable {!trig
2d00: 67 65 72 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c  ger} {.  execsql
2d10: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
2d20: 42 4c 45 20 74 33 28 61 20 69 6e 74 65 67 65 72  BLE t3(a integer
2d30: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20   primary key);. 
2d40: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2d50: 33 20 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20  3 VALUES(123);. 
2d60: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2d70: 33 20 56 41 4c 55 45 53 28 31 32 34 29 3b 0a 20  3 VALUES(124);. 
2d80: 20 7d 0a 7d 0a 0a 23 20 74 69 63 6b 65 74 20 23   }.}..# ticket #
2d90: 33 37 37 3a 20 43 6f 6d 70 61 72 69 73 6f 6e 20  377: Comparison 
2da0: 62 65 74 77 65 65 6e 20 69 6e 74 65 67 65 72 20  between integer 
2db0: 70 72 69 6d 69 61 72 79 20 6b 65 79 20 61 6e 64  primiary key and
2dc0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a   floating point.
2dd0: 23 20 76 61 6c 75 65 73 2e 0a 23 0a 64 6f 5f 74  # values..#.do_t
2de0: 65 73 74 20 72 6f 77 69 64 2d 39 2e 31 20 7b 0a  est rowid-9.1 {.
2df0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2e00: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2e10: 20 57 48 45 52 45 20 61 3c 31 32 33 2e 35 0a 20   WHERE a<123.5. 
2e20: 20 7d 0a 7d 20 7b 31 32 33 7d 0a 64 6f 5f 74 65   }.} {123}.do_te
2e30: 73 74 20 72 6f 77 69 64 2d 39 2e 32 20 7b 0a 20  st rowid-9.2 {. 
2e40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2e50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2e60: 57 48 45 52 45 20 61 3c 31 32 34 2e 35 0a 20 20  WHERE a<124.5.  
2e70: 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64 6f  }.} {123 124}.do
2e80: 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 33 20  _test rowid-9.3 
2e90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2ea0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2eb0: 74 33 20 57 48 45 52 45 20 61 3e 31 32 33 2e 35  t3 WHERE a>123.5
2ec0: 0a 20 20 7d 0a 7d 20 7b 31 32 34 7d 0a 64 6f 5f  .  }.} {124}.do_
2ed0: 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 34 20 7b  test rowid-9.4 {
2ee0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2ef0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f00: 33 20 57 48 45 52 45 20 61 3e 31 32 32 2e 35 0a  3 WHERE a>122.5.
2f10: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a    }.} {123 124}.
2f20: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e  do_test rowid-9.
2f30: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
2f40: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2f50: 4d 20 74 33 20 57 48 45 52 45 20 61 3d 3d 31 32  M t3 WHERE a==12
2f60: 33 2e 35 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  3.5.  }.} {}.do_
2f70: 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 36 20 7b  test rowid-9.6 {
2f80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2f90: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2fa0: 33 20 57 48 45 52 45 20 61 3d 3d 31 32 33 2e 30  3 WHERE a==123.0
2fb0: 30 30 0a 20 20 7d 0a 7d 20 7b 31 32 33 7d 0a 64  00.  }.} {123}.d
2fc0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 37  o_test rowid-9.7
2fd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2fe0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2ff0: 20 74 33 20 57 48 45 52 45 20 61 3e 31 30 30 2e   t3 WHERE a>100.
3000: 35 20 41 4e 44 20 61 3c 32 30 30 2e 35 0a 20 20  5 AND a<200.5.  
3010: 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64 6f  }.} {123 124}.do
3020: 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 38 20  _test rowid-9.8 
3030: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3040: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3050: 74 33 20 57 48 45 52 45 20 61 3e 27 78 79 7a 27  t3 WHERE a>'xyz'
3060: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
3070: 73 74 20 72 6f 77 69 64 2d 39 2e 39 20 7b 0a 20  st rowid-9.9 {. 
3080: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
3090: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
30a0: 57 48 45 52 45 20 61 3c 27 78 79 7a 27 3b 0a 20  WHERE a<'xyz';. 
30b0: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 34 7d 0a 64   }.} {123 124}.d
30c0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 39 2e 31  o_test rowid-9.1
30d0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
30e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
30f0: 4d 20 74 33 20 57 48 45 52 45 20 61 3e 3d 31 32  M t3 WHERE a>=12
3100: 32 2e 39 20 41 4e 44 20 61 3c 3d 31 32 33 2e 31  2.9 AND a<=123.1
3110: 0a 20 20 7d 0a 7d 20 7b 31 32 33 7d 0a 0a 23 20  .  }.} {123}..# 
3120: 54 69 63 6b 65 74 20 23 35 36 37 2e 20 20 43 6f  Ticket #567.  Co
3130: 6d 70 61 72 69 73 6f 6e 73 20 6f 66 20 52 4f 57  mparisons of ROW
3140: 49 44 20 6f 72 20 69 6e 74 65 67 65 72 79 20 70  ID or integery p
3150: 72 69 6d 61 72 79 20 6b 65 79 20 61 67 61 69 6e  rimary key again
3160: 73 74 0a 23 20 66 6c 6f 61 74 69 6e 67 20 70 6f  st.# floating po
3170: 69 6e 74 20 6e 75 6d 62 65 72 73 20 73 74 69 6c  int numbers stil
3180: 6c 20 64 6f 20 6e 6f 74 20 61 6c 77 61 79 73 20  l do not always 
3190: 77 6f 72 6b 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  work..#.do_test 
31a0: 72 6f 77 69 64 2d 31 30 2e 31 20 7b 0a 20 20 65  rowid-10.1 {.  e
31b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
31c0: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 29 3b  ATE TABLE t5(a);
31d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
31e0: 20 74 35 20 56 41 4c 55 45 53 28 31 29 3b 0a 20   t5 VALUES(1);. 
31f0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3200: 35 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20  5 VALUES(2);.   
3210: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
3220: 53 45 4c 45 43 54 20 61 2b 32 20 46 52 4f 4d 20  SELECT a+2 FROM 
3230: 74 35 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t5;.    INSERT I
3240: 4e 54 4f 20 74 35 20 53 45 4c 45 43 54 20 61 2b  NTO t5 SELECT a+
3250: 34 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 53  4 FROM t5;.    S
3260: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
3270: 52 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t5;.  }.} {1
3280: 20 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35   1 2 2 3 3 4 4 5
3290: 20 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a   5 6 6 7 7 8 8}.
32a0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
32b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
32c0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
32d0: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
32e0: 77 69 64 3e 3d 35 2e 35 7d 0a 7d 20 7b 36 20 36  wid>=5.5}.} {6 6
32f0: 20 37 20 37 20 38 20 38 7d 0a 64 6f 5f 74 65 73   7 7 8 8}.do_tes
3300: 74 20 72 6f 77 69 64 2d 31 30 2e 33 20 7b 0a 20  t rowid-10.3 {. 
3310: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3320: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
3330: 35 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 35  5 WHERE rowid>=5
3340: 2e 30 7d 0a 7d 20 7b 35 20 35 20 36 20 36 20 37  .0}.} {5 5 6 6 7
3350: 20 37 20 38 20 38 7d 0a 64 6f 5f 74 65 73 74 20   7 8 8}.do_test 
3360: 72 6f 77 69 64 2d 31 30 2e 34 20 7b 0a 20 20 65  rowid-10.4 {.  e
3370: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
3380: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20  owid, a FROM t5 
3390: 57 48 45 52 45 20 72 6f 77 69 64 3e 35 2e 35 7d  WHERE rowid>5.5}
33a0: 0a 7d 20 7b 36 20 36 20 37 20 37 20 38 20 38 7d  .} {6 6 7 7 8 8}
33b0: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
33c0: 30 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  0.3.2 {.  execsq
33d0: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
33e0: 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45   a FROM t5 WHERE
33f0: 20 72 6f 77 69 64 3e 35 2e 30 7d 0a 7d 20 7b 36   rowid>5.0}.} {6
3400: 20 36 20 37 20 37 20 38 20 38 7d 0a 64 6f 5f 74   6 7 7 8 8}.do_t
3410: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 35 20 7b  est rowid-10.5 {
3420: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
3430: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
3440: 20 74 35 20 57 48 45 52 45 20 35 2e 35 3c 3d 72   t5 WHERE 5.5<=r
3450: 6f 77 69 64 7d 0a 7d 20 7b 36 20 36 20 37 20 37  owid}.} {6 6 7 7
3460: 20 38 20 38 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   8 8}.do_test ro
3470: 77 69 64 2d 31 30 2e 36 20 7b 0a 20 20 65 78 65  wid-10.6 {.  exe
3480: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
3490: 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48  id, a FROM t5 WH
34a0: 45 52 45 20 35 2e 35 3c 72 6f 77 69 64 7d 0a 7d  ERE 5.5<rowid}.}
34b0: 20 7b 36 20 36 20 37 20 37 20 38 20 38 7d 0a 64   {6 6 7 7 8 8}.d
34c0: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
34d0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
34e0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
34f0: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77  ROM t5 WHERE row
3500: 69 64 3c 3d 35 2e 35 7d 0a 7d 20 7b 31 20 31 20  id<=5.5}.} {1 1 
3510: 32 20 32 20 33 20 33 20 34 20 34 20 35 20 35 7d  2 2 3 3 4 4 5 5}
3520: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
3530: 30 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.8 {.  execsql 
3540: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
3550: 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72   FROM t5 WHERE r
3560: 6f 77 69 64 3c 35 2e 35 7d 0a 7d 20 7b 31 20 31  owid<5.5}.} {1 1
3570: 20 32 20 32 20 33 20 33 20 34 20 34 20 35 20 35   2 2 3 3 4 4 5 5
3580: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
3590: 31 30 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.9 {.  execsql
35a0: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
35b0: 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  a FROM t5 WHERE 
35c0: 35 2e 35 3e 3d 72 6f 77 69 64 7d 0a 7d 20 7b 31  5.5>=rowid}.} {1
35d0: 20 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35   1 2 2 3 3 4 4 5
35e0: 20 35 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69   5}.do_test rowi
35f0: 64 2d 31 30 2e 31 30 20 7b 0a 20 20 65 78 65 63  d-10.10 {.  exec
3600: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3610: 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45  d, a FROM t5 WHE
3620: 52 45 20 35 2e 35 3e 72 6f 77 69 64 7d 0a 7d 20  RE 5.5>rowid}.} 
3630: 7b 31 20 31 20 32 20 32 20 33 20 33 20 34 20 34  {1 1 2 2 3 3 4 4
3640: 20 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 72 6f   5 5}.do_test ro
3650: 77 69 64 2d 31 30 2e 31 31 20 7b 0a 20 20 65 78  wid-10.11 {.  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 35 20  HERE rowid>=5.5 
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 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  6 6}.do_test row
36c0: 69 64 2d 31 30 2e 31 31 2e 32 20 7b 0a 20 20 65  id-10.11.2 {.  e
36d0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
36e0: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20  owid, a FROM t5 
36f0: 57 48 45 52 45 20 72 6f 77 69 64 3e 3d 35 2e 30  WHERE rowid>=5.0
3700: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
3710: 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37  DESC}.} {8 8 7 7
3720: 20 36 20 36 20 35 20 35 7d 0a 64 6f 5f 74 65 73   6 6 5 5}.do_tes
3730: 74 20 72 6f 77 69 64 2d 31 30 2e 31 32 20 7b 0a  t rowid-10.12 {.
3740: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3750: 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20  T rowid, a FROM 
3760: 74 35 20 57 48 45 52 45 20 72 6f 77 69 64 3e 35  t5 WHERE rowid>5
3770: 2e 35 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  .5 ORDER BY rowi
3780: 64 20 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37  d DESC}.} {8 8 7
3790: 20 37 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20   7 6 6}.do_test 
37a0: 72 6f 77 69 64 2d 31 30 2e 31 32 2e 32 20 7b 0a  rowid-10.12.2 {.
37b0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
37c0: 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20  T rowid, a FROM 
37d0: 74 35 20 57 48 45 52 45 20 72 6f 77 69 64 3e 35  t5 WHERE rowid>5
37e0: 2e 30 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  .0 ORDER BY rowi
37f0: 64 20 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37  d DESC}.} {8 8 7
3800: 20 37 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20   7 6 6}.do_test 
3810: 72 6f 77 69 64 2d 31 30 2e 31 33 20 7b 0a 20 20  rowid-10.13 {.  
3820: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3830: 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35  rowid, a FROM t5
3840: 20 57 48 45 52 45 20 35 2e 35 3c 3d 72 6f 77 69   WHERE 5.5<=rowi
3850: 64 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  d ORDER BY rowid
3860: 20 44 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20   DESC}.} {8 8 7 
3870: 37 20 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72  7 6 6}.do_test r
3880: 6f 77 69 64 2d 31 30 2e 31 34 20 7b 0a 20 20 65  owid-10.14 {.  e
3890: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72  xecsql {SELECT r
38a0: 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20  owid, a FROM t5 
38b0: 57 48 45 52 45 20 35 2e 35 3c 72 6f 77 69 64 20  WHERE 5.5<rowid 
38c0: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
38d0: 45 53 43 7d 0a 7d 20 7b 38 20 38 20 37 20 37 20  ESC}.} {8 8 7 7 
38e0: 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  6 6}.do_test row
38f0: 69 64 2d 31 30 2e 31 35 20 7b 0a 20 20 65 78 65  id-10.15 {.  exe
3900: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
3910: 69 64 2c 20 61 20 46 52 4f 4d 20 74 35 20 57 48  id, a FROM t5 WH
3920: 45 52 45 20 72 6f 77 69 64 3c 3d 35 2e 35 20 4f  ERE rowid<=5.5 O
3930: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
3940: 53 43 7d 0a 7d 20 7b 35 20 35 20 34 20 34 20 33  SC}.} {5 5 4 4 3
3950: 20 33 20 32 20 32 20 31 20 31 7d 0a 64 6f 5f 74   3 2 2 1 1}.do_t
3960: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 31 36 20  est rowid-10.16 
3970: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3980: 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f  ECT rowid, a FRO
3990: 4d 20 74 35 20 57 48 45 52 45 20 72 6f 77 69 64  M t5 WHERE rowid
39a0: 3c 35 2e 35 20 4f 52 44 45 52 20 42 59 20 72 6f  <5.5 ORDER BY ro
39b0: 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 35 20 35  wid DESC}.} {5 5
39c0: 20 34 20 34 20 33 20 33 20 32 20 32 20 31 20 31   4 4 3 3 2 2 1 1
39d0: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
39e0: 31 30 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71  10.17 {.  execsq
39f0: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
3a00: 20 61 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45   a FROM t5 WHERE
3a10: 20 35 2e 35 3e 3d 72 6f 77 69 64 20 4f 52 44 45   5.5>=rowid ORDE
3a20: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d  R BY rowid DESC}
3a30: 0a 7d 20 7b 35 20 35 20 34 20 34 20 33 20 33 20  .} {5 5 4 4 3 3 
3a40: 32 20 32 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74  2 2 1 1}.do_test
3a50: 20 72 6f 77 69 64 2d 31 30 2e 31 38 20 7b 0a 20   rowid-10.18 {. 
3a60: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3a70: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
3a80: 35 20 57 48 45 52 45 20 35 2e 35 3e 72 6f 77 69  5 WHERE 5.5>rowi
3a90: 64 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  d ORDER BY rowid
3aa0: 20 44 45 53 43 7d 0a 7d 20 7b 35 20 35 20 34 20   DESC}.} {5 5 4 
3ab0: 34 20 33 20 33 20 32 20 32 20 31 20 31 7d 0a 0a  4 3 3 2 2 1 1}..
3ac0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
3ad0: 2e 33 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .30 {.  execsql 
3ae0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3af0: 4c 45 20 74 36 28 61 29 3b 0a 20 20 20 20 49 4e  LE t6(a);.    IN
3b00: 53 45 52 54 20 49 4e 54 4f 20 74 36 28 72 6f 77  SERT INTO t6(row
3b10: 69 64 2c 61 29 20 53 45 4c 45 43 54 20 2d 61 2c  id,a) SELECT -a,
3b20: 61 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 53  a FROM t5;.    S
3b30: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46  ELECT rowid, * F
3b40: 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b 2d  ROM t6;.  }.} {-
3b50: 38 20 38 20 2d 37 20 37 20 2d 36 20 36 20 2d 35  8 8 -7 7 -6 6 -5
3b60: 20 35 20 2d 34 20 34 20 2d 33 20 33 20 2d 32 20   5 -4 4 -3 3 -2 
3b70: 32 20 2d 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20  2 -1 1}.do_test 
3b80: 72 6f 77 69 64 2d 31 30 2e 33 31 2e 31 20 7b 0a  rowid-10.31.1 {.
3b90: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3ba0: 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20  T rowid, a FROM 
3bb0: 74 36 20 57 48 45 52 45 20 72 6f 77 69 64 3e 3d  t6 WHERE rowid>=
3bc0: 2d 35 2e 35 7d 0a 7d 20 7b 2d 35 20 35 20 2d 34  -5.5}.} {-5 5 -4
3bd0: 20 34 20 2d 33 20 33 20 2d 32 20 32 20 2d 31 20   4 -3 3 -2 2 -1 
3be0: 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64  1}.do_test rowid
3bf0: 2d 31 30 2e 33 31 2e 32 20 7b 0a 20 20 65 78 65  -10.31.2 {.  exe
3c00: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
3c10: 69 64 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48  id, a FROM t6 WH
3c20: 45 52 45 20 72 6f 77 69 64 3e 3d 2d 35 2e 30 7d  ERE rowid>=-5.0}
3c30: 0a 7d 20 7b 2d 35 20 35 20 2d 34 20 34 20 2d 33  .} {-5 5 -4 4 -3
3c40: 20 33 20 2d 32 20 32 20 2d 31 20 31 7d 0a 64 6f   3 -2 2 -1 1}.do
3c50: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33  _test rowid-10.3
3c60: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
3c70: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
3c80: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72   FROM t6 WHERE r
3c90: 6f 77 69 64 3e 3d 2d 35 2e 35 20 4f 52 44 45 52  owid>=-5.5 ORDER
3ca0: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a   BY rowid DESC}.
3cb0: 7d 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20  } {-1 1 -2 2 -3 
3cc0: 33 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f  3 -4 4 -5 5}.do_
3cd0: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 32  test rowid-10.32
3ce0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
3cf0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
3d00: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f  FROM t6 WHERE ro
3d10: 77 69 64 3e 3d 2d 35 2e 30 20 4f 52 44 45 52 20  wid>=-5.0 ORDER 
3d20: 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d  BY rowid DESC}.}
3d30: 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33   {-1 1 -2 2 -3 3
3d40: 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f 74   -4 4 -5 5}.do_t
3d50: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 33 20  est rowid-10.33 
3d60: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3d70: 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f  ECT rowid, a FRO
3d80: 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35 3c  M t6 WHERE -5.5<
3d90: 3d 72 6f 77 69 64 7d 0a 7d 20 7b 2d 35 20 35 20  =rowid}.} {-5 5 
3da0: 2d 34 20 34 20 2d 33 20 33 20 2d 32 20 32 20 2d  -4 4 -3 3 -2 2 -
3db0: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77  1 1}.do_test row
3dc0: 69 64 2d 31 30 2e 33 34 20 7b 0a 20 20 65 78 65  id-10.34 {.  exe
3dd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77  csql {SELECT row
3de0: 69 64 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48  id, a FROM t6 WH
3df0: 45 52 45 20 2d 35 2e 35 3c 3d 72 6f 77 69 64 20  ERE -5.5<=rowid 
3e00: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
3e10: 45 53 43 7d 0a 7d 20 7b 2d 31 20 31 20 2d 32 20  ESC}.} {-1 1 -2 
3e20: 32 20 2d 33 20 33 20 2d 34 20 34 20 2d 35 20 35  2 -3 3 -4 4 -5 5
3e30: 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d  }.do_test rowid-
3e40: 31 30 2e 33 35 2e 31 20 7b 0a 20 20 65 78 65 63  10.35.1 {.  exec
3e50: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
3e60: 64 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45  d, a FROM t6 WHE
3e70: 52 45 20 72 6f 77 69 64 3e 2d 35 2e 35 7d 0a 7d  RE rowid>-5.5}.}
3e80: 20 7b 2d 35 20 35 20 2d 34 20 34 20 2d 33 20 33   {-5 5 -4 4 -3 3
3e90: 20 2d 32 20 32 20 2d 31 20 31 7d 0a 64 6f 5f 74   -2 2 -1 1}.do_t
3ea0: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 35 2e  est rowid-10.35.
3eb0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
3ec0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
3ed0: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77  ROM t6 WHERE row
3ee0: 69 64 3e 2d 35 2e 30 7d 0a 7d 20 7b 2d 34 20 34  id>-5.0}.} {-4 4
3ef0: 20 2d 33 20 33 20 2d 32 20 32 20 2d 31 20 31 7d   -3 3 -2 2 -1 1}
3f00: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
3f10: 30 2e 33 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  0.36.1 {.  execs
3f20: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
3f30: 2c 20 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52  , a FROM t6 WHER
3f40: 45 20 72 6f 77 69 64 3e 2d 35 2e 35 20 4f 52 44  E rowid>-5.5 ORD
3f50: 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
3f60: 7d 0a 7d 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d  }.} {-1 1 -2 2 -
3f70: 33 20 33 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64  3 3 -4 4 -5 5}.d
3f80: 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e  o_test rowid-10.
3f90: 33 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  36.2 {.  execsql
3fa0: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
3fb0: 61 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20  a FROM t6 WHERE 
3fc0: 72 6f 77 69 64 3e 2d 35 2e 30 20 4f 52 44 45 52  rowid>-5.0 ORDER
3fd0: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a   BY rowid DESC}.
3fe0: 7d 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20  } {-1 1 -2 2 -3 
3ff0: 33 20 2d 34 20 34 7d 0a 64 6f 5f 74 65 73 74 20  3 -4 4}.do_test 
4000: 72 6f 77 69 64 2d 31 30 2e 33 37 20 7b 0a 20 20  rowid-10.37 {.  
4010: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4020: 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74 36  rowid, a FROM t6
4030: 20 57 48 45 52 45 20 2d 35 2e 35 3c 72 6f 77 69   WHERE -5.5<rowi
4040: 64 7d 0a 7d 20 7b 2d 35 20 35 20 2d 34 20 34 20  d}.} {-5 5 -4 4 
4050: 2d 33 20 33 20 2d 32 20 32 20 2d 31 20 31 7d 0a  -3 3 -2 2 -1 1}.
4060: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
4070: 2e 33 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .38 {.  execsql 
4080: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
4090: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d   FROM t6 WHERE -
40a0: 35 2e 35 3c 72 6f 77 69 64 20 4f 52 44 45 52 20  5.5<rowid ORDER 
40b0: 42 59 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d  BY rowid DESC}.}
40c0: 20 7b 2d 31 20 31 20 2d 32 20 32 20 2d 33 20 33   {-1 1 -2 2 -3 3
40d0: 20 2d 34 20 34 20 2d 35 20 35 7d 0a 64 6f 5f 74   -4 4 -5 5}.do_t
40e0: 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 33 39 20  est rowid-10.39 
40f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4100: 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f  ECT rowid, a FRO
4110: 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77 69 64  M t6 WHERE rowid
4120: 3c 3d 2d 35 2e 35 7d 0a 7d 20 7b 2d 38 20 38 20  <=-5.5}.} {-8 8 
4130: 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f 74 65  -7 7 -6 6}.do_te
4140: 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 30 20 7b  st rowid-10.40 {
4150: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4160: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
4170: 20 74 36 20 57 48 45 52 45 20 72 6f 77 69 64 3c   t6 WHERE rowid<
4180: 3d 2d 35 2e 35 20 4f 52 44 45 52 20 42 59 20 72  =-5.5 ORDER BY r
4190: 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b 2d 36  owid DESC}.} {-6
41a0: 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a 64 6f   6 -7 7 -8 8}.do
41b0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34  _test rowid-10.4
41c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
41d0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
41e0: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e  ROM t6 WHERE -5.
41f0: 35 3e 3d 72 6f 77 69 64 7d 0a 7d 20 7b 2d 38 20  5>=rowid}.} {-8 
4200: 38 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f 5f  8 -7 7 -6 6}.do_
4210: 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34 32  test rowid-10.42
4220: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
4230: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
4240: 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e 35  OM t6 WHERE -5.5
4250: 3e 3d 72 6f 77 69 64 20 4f 52 44 45 52 20 42 59  >=rowid ORDER BY
4260: 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b   rowid DESC}.} {
4270: 2d 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a  -6 6 -7 7 -8 8}.
4280: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
4290: 2e 34 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .43 {.  execsql 
42a0: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
42b0: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72   FROM t6 WHERE r
42c0: 6f 77 69 64 3c 2d 35 2e 35 7d 0a 7d 20 7b 2d 38  owid<-5.5}.} {-8
42d0: 20 38 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f   8 -7 7 -6 6}.do
42e0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34  _test rowid-10.4
42f0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
4300: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
4310: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 72 6f 77  ROM t6 WHERE row
4320: 69 64 3c 2d 35 2e 35 20 4f 52 44 45 52 20 42 59  id<-5.5 ORDER BY
4330: 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b   rowid DESC}.} {
4340: 2d 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a  -6 6 -7 7 -8 8}.
4350: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30  do_test rowid-10
4360: 2e 34 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .44 {.  execsql 
4370: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
4380: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d   FROM t6 WHERE -
4390: 35 2e 35 3e 72 6f 77 69 64 7d 0a 7d 20 7b 2d 38  5.5>rowid}.} {-8
43a0: 20 38 20 2d 37 20 37 20 2d 36 20 36 7d 0a 64 6f   8 -7 7 -6 6}.do
43b0: 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 30 2e 34  _test rowid-10.4
43c0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
43d0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46  ELECT rowid, a F
43e0: 52 4f 4d 20 74 36 20 57 48 45 52 45 20 2d 35 2e  ROM t6 WHERE -5.
43f0: 35 3e 72 6f 77 69 64 20 4f 52 44 45 52 20 42 59  5>rowid ORDER BY
4400: 20 72 6f 77 69 64 20 44 45 53 43 7d 0a 7d 20 7b   rowid DESC}.} {
4410: 2d 36 20 36 20 2d 37 20 37 20 2d 38 20 38 7d 0a  -6 6 -7 7 -8 8}.
4420: 0a 23 20 43 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  .# Comparison of
4430: 20 72 6f 77 69 64 20 61 67 61 69 6e 73 74 20 73   rowid against s
4440: 74 72 69 6e 67 20 76 61 6c 75 65 73 2e 0a 23 0a  tring values..#.
4450: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31  do_test rowid-11
4460: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
4470: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
4480: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
4490: 77 69 64 3e 27 61 62 63 27 7d 0a 7d 20 7b 7d 0a  wid>'abc'}.} {}.
44a0: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31  do_test rowid-11
44b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
44c0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
44d0: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
44e0: 77 69 64 3e 3d 27 61 62 63 27 7d 0a 7d 20 7b 7d  wid>='abc'}.} {}
44f0: 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31  .do_test rowid-1
4500: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
4510: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61  {SELECT rowid, a
4520: 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72   FROM t5 WHERE r
4530: 6f 77 69 64 3c 27 61 62 63 27 7d 0a 7d 20 7b 31  owid<'abc'}.} {1
4540: 20 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35   1 2 2 3 3 4 4 5
4550: 20 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a   5 6 6 7 7 8 8}.
4560: 64 6f 5f 74 65 73 74 20 72 6f 77 69 64 2d 31 31  do_test rowid-11
4570: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
4580: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
4590: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 72 6f  FROM t5 WHERE ro
45a0: 77 69 64 3c 3d 27 61 62 63 27 7d 0a 7d 20 7b 31  wid<='abc'}.} {1
45b0: 20 31 20 32 20 32 20 33 20 33 20 34 20 34 20 35   1 2 2 3 3 4 4 5
45c0: 20 35 20 36 20 36 20 37 20 37 20 38 20 38 7d 0a   5 6 6 7 7 8 8}.
45d0: 0a 23 20 54 65 73 74 20 74 68 65 20 61 75 74 6f  .# Test the auto
45e0: 6d 61 74 69 63 20 67 65 6e 65 72 61 74 69 6f 6e  matic generation
45f0: 20 6f 66 20 72 6f 77 69 64 73 20 77 68 65 6e 20   of rowids when 
4600: 74 68 65 20 74 61 62 6c 65 20 61 6c 72 65 61 64  the table alread
4610: 79 20 63 6f 6e 74 61 69 6e 73 0a 23 20 61 20 72  y contains.# a r
4620: 6f 77 69 64 20 77 69 74 68 20 74 68 65 20 6d 61  owid with the ma
4630: 78 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 23 0a 23  ximum value..#.#
4640: 20 4f 6e 63 65 20 74 68 65 20 6d 61 78 69 6d 75   Once the maximu
4650: 6d 20 72 6f 77 69 64 20 69 73 20 74 61 6b 65 6e  m rowid is taken
4660: 2c 20 72 6f 77 69 64 73 20 61 72 65 20 6e 6f 72  , rowids are nor
4670: 6d 61 6c 6c 79 20 63 68 6f 73 65 6e 20 61 74 0a  mally chosen at.
4680: 23 20 72 61 6e 64 6f 6d 2e 20 20 42 79 20 62 79  # random.  By by
4690: 20 72 65 73 65 74 69 6e 67 20 74 68 65 20 72 61   reseting the ra
46a0: 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65  ndom number gene
46b0: 72 61 74 6f 72 2c 20 77 65 20 63 61 6e 20 63 61  rator, we can ca
46c0: 75 73 65 0a 23 20 74 68 65 20 72 6f 77 69 64 20  use.# the rowid 
46d0: 67 75 65 73 73 69 6e 67 20 6c 6f 6f 70 20 74 6f  guessing loop to
46e0: 20 63 6f 6c 6c 69 64 65 20 77 69 74 68 20 70 72   collide with pr
46f0: 69 6f 72 20 72 6f 77 69 64 73 2c 20 61 6e 64 20  ior rowids, and 
4700: 74 65 73 74 20 74 68 65 0a 23 20 6c 6f 6f 70 20  test the.# loop 
4710: 6f 75 74 20 74 6f 20 69 74 73 20 6c 69 6d 69 74  out to its limit
4720: 20 6f 66 20 31 30 30 20 69 74 65 72 61 74 69 6f   of 100 iteratio
4730: 6e 73 2e 20 20 41 66 74 65 72 20 31 30 30 20 63  ns.  After 100 c
4740: 6f 6c 6c 69 73 69 6f 6e 73 2c 20 74 68 65 0a 23  ollisions, the.#
4750: 20 72 6f 77 69 64 20 67 75 65 73 73 65 72 20 67   rowid guesser g
4760: 69 76 65 73 20 75 70 20 61 6e 64 20 72 65 70 6f  ives up and repo
4770: 72 74 73 20 53 51 4c 49 54 45 5f 46 55 4c 4c 2e  rts SQLITE_FULL.
4780: 0a 23 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69 64  .#.do_test rowid
4790: 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -12.1 {.  execsq
47a0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
47b0: 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45  ABLE t7(x INTEGE
47c0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79  R PRIMARY KEY, y
47d0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
47e0: 42 4c 45 20 74 37 74 65 6d 70 28 61 20 49 4e 54  BLE t7temp(a INT
47f0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
4800: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4810: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 39 32 32  TO t7 VALUES(922
4820: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
4830: 2c 27 61 27 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,'a');.    SELEC
4840: 54 20 79 20 46 52 4f 4d 20 74 37 3b 0a 20 20 7d  T y FROM t7;.  }
4850: 0a 7d 20 7b 61 7d 0a 64 6f 5f 74 65 73 74 20 72  .} {a}.do_test r
4860: 6f 77 69 64 2d 31 32 2e 32 20 7b 0a 20 20 64 62  owid-12.2 {.  db
4870: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
4880: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 61   db test.db.  sa
4890: 76 65 5f 70 72 6e 67 5f 73 74 61 74 65 0a 20 20  ve_prng_state.  
48a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
48b0: 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c  SERT INTO t7 VAL
48c0: 55 45 53 28 4e 55 4c 4c 2c 27 62 27 29 3b 0a 20  UES(NULL,'b');. 
48d0: 20 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46     SELECT x, y F
48e0: 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20  ROM t7 ORDER BY 
48f0: 78 3b 0a 20 20 7d 0a 7d 20 7b 2f 5c 64 2b 20 62  x;.  }.} {/\d+ b
4900: 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37   922337203685477
4910: 35 38 30 37 20 61 2f 7d 0a 65 78 65 63 73 71 6c  5807 a/}.execsql
4920: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37   {INSERT INTO t7
4930: 20 56 41 4c 55 45 53 28 32 2c 27 79 27 29 3b 7d   VALUES(2,'y');}
4940: 0a 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b  .for {set i 1} {
4950: 24 69 3c 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d  $i<100} {incr i}
4960: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 72 6f 77   {.  do_test row
4970: 69 64 2d 31 32 2e 33 2e 24 69 20 7b 0a 20 20 20  id-12.3.$i {.   
4980: 20 64 62 20 65 76 61 6c 20 7b 44 45 4c 45 54 45   db eval {DELETE
4990: 20 46 52 4f 4d 20 74 37 74 65 6d 70 3b 20 49 4e   FROM t7temp; IN
49a0: 53 45 52 54 20 49 4e 54 4f 20 74 37 74 65 6d 70  SERT INTO t7temp
49b0: 20 56 41 4c 55 45 53 28 31 29 3b 7d 0a 20 20 20   VALUES(1);}.   
49c0: 20 72 65 73 74 6f 72 65 5f 70 72 6e 67 5f 73 74   restore_prng_st
49d0: 61 74 65 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ate.    execsql 
49e0: 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  {.      INSERT I
49f0: 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 4e 55  NTO t7 VALUES(NU
4a00: 4c 4c 2c 27 78 27 29 3b 0a 20 20 20 20 20 20 53  LL,'x');.      S
4a10: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
4a20: 52 4f 4d 20 74 37 20 57 48 45 52 45 20 79 3d 3d  ROM t7 WHERE y==
4a30: 27 78 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 24  'x';.    }.  } $
4a40: 69 0a 7d 0a 64 6f 5f 74 65 73 74 20 72 6f 77 69  i.}.do_test rowi
4a50: 64 2d 31 32 2e 34 20 7b 0a 20 20 64 62 20 65 76  d-12.4 {.  db ev
4a60: 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  al {DELETE FROM 
4a70: 74 37 74 65 6d 70 3b 20 49 4e 53 45 52 54 20 49  t7temp; INSERT I
4a80: 4e 54 4f 20 74 37 74 65 6d 70 20 56 41 4c 55 45  NTO t7temp VALUE
4a90: 53 28 31 29 3b 7d 0a 20 20 72 65 73 74 6f 72 65  S(1);}.  restore
4aa0: 5f 70 72 6e 67 5f 73 74 61 74 65 0a 20 20 63 61  _prng_state.  ca
4ab0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  tchsql {.    INS
4ac0: 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55  ERT INTO t7 VALU
4ad0: 45 53 28 4e 55 4c 4c 2c 27 78 27 29 3b 0a 20 20  ES(NULL,'x');.  
4ae0: 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65  }.} {1 {database
4af0: 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c   or disk is full
4b00: 7d 7d 0a 0a 23 20 49 4e 53 45 52 54 73 20 74 68  }}..# INSERTs th
4b10: 61 74 20 68 61 70 70 65 6e 20 69 6e 73 69 64 65  at happen inside
4b20: 20 6f 66 20 6e 65 73 74 65 64 20 66 75 6e 63 74   of nested funct
4b30: 69 6f 6e 20 63 61 6c 6c 73 20 61 72 65 20 72 65  ion calls are re
4b40: 63 6f 72 64 65 64 0a 23 20 62 79 20 6c 61 73 74  corded.# by last
4b50: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 2e 0a 23  _insert_rowid..#
4b60: 0a 70 72 6f 63 20 72 6f 77 69 64 5f 61 64 64 72  .proc rowid_addr
4b70: 6f 77 5f 66 75 6e 63 20 7b 6e 7d 20 7b 0a 20 20  ow_func {n} {.  
4b80: 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20  db eval {INSERT 
4b90: 49 4e 54 4f 20 74 31 33 28 72 6f 77 69 64 2c 78  INTO t13(rowid,x
4ba0: 29 20 56 41 4c 55 45 53 28 24 6e 2c 24 6e 2a 24  ) VALUES($n,$n*$
4bb0: 6e 29 7d 0a 20 20 72 65 74 75 72 6e 20 5b 64 62  n)}.  return [db
4bc0: 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
4bd0: 69 64 5d 0a 7d 0a 64 62 20 66 75 6e 63 74 69 6f  id].}.db functio
4be0: 6e 20 61 64 64 72 6f 77 20 72 6f 77 69 64 5f 61  n addrow rowid_a
4bf0: 64 64 72 6f 77 5f 66 75 6e 63 0a 64 6f 5f 65 78  ddrow_func.do_ex
4c00: 65 63 73 71 6c 5f 74 65 73 74 20 72 6f 77 69 64  ecsql_test rowid
4c10: 2d 31 33 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  -13.1 {.  CREATE
4c20: 20 54 41 42 4c 45 20 74 31 33 28 78 29 3b 0a 20   TABLE t13(x);. 
4c30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 33   INSERT INTO t13
4c40: 28 72 6f 77 69 64 2c 78 29 20 56 41 4c 55 45 53  (rowid,x) VALUES
4c50: 28 31 32 33 34 2c 35 29 3b 0a 20 20 53 45 4c 45  (1234,5);.  SELE
4c60: 43 54 20 72 6f 77 69 64 2c 20 78 2c 20 61 64 64  CT rowid, x, add
4c70: 72 6f 77 28 72 6f 77 69 64 2b 31 30 30 30 29 2c  row(rowid+1000),
4c80: 20 27 7c 27 20 46 52 4f 4d 20 74 31 33 20 4c 49   '|' FROM t13 LI
4c90: 4d 49 54 20 33 3b 0a 20 20 53 45 4c 45 43 54 20  MIT 3;.  SELECT 
4ca0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
4cb0: 64 28 29 3b 0a 7d 20 7b 31 32 33 34 20 35 20 32  d();.} {1234 5 2
4cc0: 32 33 34 20 7c 20 32 32 33 34 20 34 39 39 30 37  234 | 2234 49907
4cd0: 35 36 20 33 32 33 34 20 7c 20 33 32 33 34 20 31  56 3234 | 3234 1
4ce0: 30 34 35 38 37 35 36 20 34 32 33 34 20 7c 20 34  0458756 4234 | 4
4cf0: 32 33 34 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73  234}..finish_tes
4d00: 74 0a                                            t.