/ Hex Artifact Content
Login

Artifact 198360dfa14e65354dbcc66d5b98d8070780e42b:


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 55  is testing the U
01d0: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
01e0: 0a 23 0a 23 20 24 49 64 3a 20 75 70 64 61 74 65  .#.# $Id: update
01f0: 2e 74 65 73 74 2c 76 20 31 2e 31 32 20 32 30 30  .test,v 1.12 200
0200: 33 2f 30 32 2f 31 35 20 32 33 3a 30 39 3a 31 37  3/02/15 23:09:17
0210: 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20   drh Exp $..set 
0220: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0230: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0240: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0250: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 72 79 20  ster.tcl..# Try 
0260: 74 6f 20 75 70 64 61 74 65 20 61 6e 20 6e 6f 6e  to update an non
0270: 2d 65 78 69 73 74 65 6e 74 20 74 61 62 6c 65 0a  -existent table.
0280: 23 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  #.do_test update
0290: 2d 31 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b  -1.1 {.  set v [
02a0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
02b0: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
02c0: 20 66 32 3d 35 20 57 48 45 52 45 20 66 31 3c 31   f2=5 WHERE f1<1
02d0: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
02e0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e  d v $msg.} {1 {n
02f0: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 65  o such table: te
0300: 73 74 31 7d 7d 0a 0a 23 20 54 72 79 20 74 6f 20  st1}}..# Try to 
0310: 75 70 64 61 74 65 20 61 20 72 65 61 64 2d 6f 6e  update a read-on
0320: 6c 79 20 74 61 62 6c 65 0a 23 0a 64 6f 5f 74 65  ly table.#.do_te
0330: 73 74 20 75 70 64 61 74 65 2d 32 2e 31 20 7b 0a  st update-2.1 {.
0340: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 5c    set v [catch \
0350: 0a 20 20 20 20 20 20 20 7b 65 78 65 63 73 71 6c  .       {execsql
0360: 20 7b 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f   {UPDATE sqlite_
0370: 6d 61 73 74 65 72 20 53 45 54 20 6e 61 6d 65 3d  master SET name=
0380: 27 78 79 7a 27 20 57 48 45 52 45 20 6e 61 6d 65  'xyz' WHERE name
0390: 3d 27 31 32 33 27 7d 7d 20 6d 73 67 5d 0a 20 20  ='123'}} msg].  
03a0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
03b0: 20 7b 31 20 7b 74 61 62 6c 65 20 73 71 6c 69 74   {1 {table sqlit
03c0: 65 5f 6d 61 73 74 65 72 20 6d 61 79 20 6e 6f 74  e_master may not
03d0: 20 62 65 20 6d 6f 64 69 66 69 65 64 7d 7d 0a 0a   be modified}}..
03e0: 23 20 43 72 65 61 74 65 20 61 20 74 61 62 6c 65  # Create a table
03f0: 20 74 6f 20 77 6f 72 6b 20 77 69 74 68 0a 23 0a   to work with.#.
0400: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33  do_test update-3
0410: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0420: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
0430: 74 31 28 66 31 20 69 6e 74 2c 66 32 20 69 6e 74  t1(f1 int,f2 int
0440: 29 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  )}.  for {set i 
0450: 31 7d 20 7b 24 69 3c 3d 31 30 7d 20 7b 69 6e 63  1} {$i<=10} {inc
0460: 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 73  r i} {.    set s
0470: 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql "INSERT INTO 
0480: 74 65 73 74 31 20 56 41 4c 55 45 53 28 24 69 2c  test1 VALUES($i,
0490: 5b 65 78 70 72 20 7b 69 6e 74 28 70 6f 77 28 32  [expr {int(pow(2
04a0: 2c 24 69 29 29 7d 5d 29 22 0a 20 20 20 20 65 78  ,$i))}])".    ex
04b0: 65 63 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20  ecsql $sql.  }. 
04c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
04d0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
04e0: 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20  DER BY f1}.} {1 
04f0: 32 20 32 20 34 20 33 20 38 20 34 20 31 36 20 35  2 2 4 3 8 4 16 5
0500: 20 33 32 20 36 20 36 34 20 37 20 31 32 38 20 38   32 6 64 7 128 8
0510: 20 32 35 36 20 39 20 35 31 32 20 31 30 20 31 30   256 9 512 10 10
0520: 32 34 7d 0a 0a 23 20 55 6e 6b 6e 6f 77 6e 20 63  24}..# Unknown c
0530: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 6e 20 61 6e  olumn name in an
0540: 20 65 78 70 72 65 73 73 69 6f 6e 0a 23 0a 64 6f   expression.#.do
0550: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e 32  _test update-3.2
0560: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0570: 68 20 7b 65 78 65 63 73 71 6c 20 7b 55 50 44 41  h {execsql {UPDA
0580: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d  TE test1 SET f1=
0590: 66 33 2a 32 20 57 48 45 52 45 20 66 32 3d 3d 33  f3*2 WHERE f2==3
05a0: 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  2}} msg].  lappe
05b0: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
05c0: 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20  no such column: 
05d0: 66 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  f3}}.do_test upd
05e0: 61 74 65 2d 33 2e 33 20 7b 0a 20 20 73 65 74 20  ate-3.3 {.  set 
05f0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0600: 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20  l {UPDATE test1 
0610: 53 45 54 20 66 31 3d 74 65 73 74 32 2e 66 31 2a  SET f1=test2.f1*
0620: 32 20 57 48 45 52 45 20 66 32 3d 3d 33 32 7d 7d  2 WHERE f2==32}}
0630: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0640: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20  v $msg.} {1 {no 
0650: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 74 65 73  such column: tes
0660: 74 32 2e 66 31 7d 7d 0a 64 6f 5f 74 65 73 74 20  t2.f1}}.do_test 
0670: 75 70 64 61 74 65 2d 33 2e 34 20 7b 0a 20 20 73  update-3.4 {.  s
0680: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
0690: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
06a0: 74 31 20 53 45 54 20 66 33 3d 66 31 2a 32 20 57  t1 SET f3=f1*2 W
06b0: 48 45 52 45 20 66 32 3d 3d 33 32 7d 7d 20 6d 73  HERE f2==32}} ms
06c0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
06d0: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
06e0: 68 20 63 6f 6c 75 6d 6e 3a 20 66 33 7d 7d 0a 0a  h column: f3}}..
06f0: 23 20 41 63 74 75 61 6c 6c 79 20 64 6f 20 73 6f  # Actually do so
0700: 6d 65 20 75 70 64 61 74 65 73 0a 23 0a 64 6f 5f  me updates.#.do_
0710: 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e 35 20  test update-3.5 
0720: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44  {.  execsql {UPD
0730: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32  ATE test1 SET f2
0740: 3d 66 32 2a 33 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  =f2*3}.} {}.do_t
0750: 65 73 74 20 75 70 64 61 74 65 2d 33 2e 36 20 7b  est update-3.6 {
0760: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0770: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
0780: 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b  ORDER BY f1}.} {
0790: 31 20 36 20 32 20 31 32 20 33 20 32 34 20 34 20  1 6 2 12 3 24 4 
07a0: 34 38 20 35 20 39 36 20 36 20 31 39 32 20 37 20  48 5 96 6 192 7 
07b0: 33 38 34 20 38 20 37 36 38 20 39 20 31 35 33 36  384 8 768 9 1536
07c0: 20 31 30 20 33 30 37 32 7d 0a 64 6f 5f 74 65 73   10 3072}.do_tes
07d0: 74 20 75 70 64 61 74 65 2d 33 2e 37 20 7b 0a 20  t update-3.7 {. 
07e0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
07f0: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 6f   count_changes=o
0800: 6e 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50  n}.  execsql {UP
0810: 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66  DATE test1 SET f
0820: 32 3d 66 32 2f 33 20 57 48 45 52 45 20 66 31 3c  2=f2/3 WHERE f1<
0830: 3d 35 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73  =5}.} {5}.do_tes
0840: 74 20 75 70 64 61 74 65 2d 33 2e 38 20 7b 0a 20  t update-3.8 {. 
0850: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0860: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
0870: 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20  DER BY f1}.} {1 
0880: 32 20 32 20 34 20 33 20 38 20 34 20 31 36 20 35  2 2 4 3 8 4 16 5
0890: 20 33 32 20 36 20 31 39 32 20 37 20 33 38 34 20   32 6 192 7 384 
08a0: 38 20 37 36 38 20 39 20 31 35 33 36 20 31 30 20  8 768 9 1536 10 
08b0: 33 30 37 32 7d 0a 64 6f 5f 74 65 73 74 20 75 70  3072}.do_test up
08c0: 64 61 74 65 2d 33 2e 39 20 7b 0a 20 20 65 78 65  date-3.9 {.  exe
08d0: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
08e0: 74 31 20 53 45 54 20 66 32 3d 66 32 2f 33 20 57  t1 SET f2=f2/3 W
08f0: 48 45 52 45 20 66 31 3e 35 7d 0a 7d 20 7b 35 7d  HERE f1>5}.} {5}
0900: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
0910: 33 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.10 {.  execsql
0920: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0930: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
0940: 31 7d 0a 7d 20 7b 31 20 32 20 32 20 34 20 33 20  1}.} {1 2 2 4 3 
0950: 38 20 34 20 31 36 20 35 20 33 32 20 36 20 36 34  8 4 16 5 32 6 64
0960: 20 37 20 31 32 38 20 38 20 32 35 36 20 39 20 35   7 128 8 256 9 5
0970: 31 32 20 31 30 20 31 30 32 34 7d 0a 0a 23 20 53  12 10 1024}..# S
0980: 77 61 70 20 74 68 65 20 76 61 6c 75 65 73 20 6f  wap the values o
0990: 66 20 66 31 20 61 6e 64 20 66 32 20 66 6f 72 20  f f1 and f2 for 
09a0: 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 0a 23 0a 64  all elements.#.d
09b0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e  o_test update-3.
09c0: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
09d0: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
09e0: 20 46 32 3d 66 31 2c 20 46 31 3d 66 32 7d 0a 7d   F2=f1, F1=f2}.}
09f0: 20 7b 31 30 7d 0a 64 6f 5f 74 65 73 74 20 75 70   {10}.do_test up
0a00: 64 61 74 65 2d 33 2e 31 32 20 7b 0a 20 20 65 78  date-3.12 {.  ex
0a10: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
0a20: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
0a30: 20 42 59 20 46 31 7d 0a 7d 20 7b 32 20 31 20 34   BY F1}.} {2 1 4
0a40: 20 32 20 38 20 33 20 31 36 20 34 20 33 32 20 35   2 8 3 16 4 32 5
0a50: 20 36 34 20 36 20 31 32 38 20 37 20 32 35 36 20   64 6 128 7 256 
0a60: 38 20 35 31 32 20 39 20 31 30 32 34 20 31 30 7d  8 512 9 1024 10}
0a70: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
0a80: 33 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.13 {.  execsql
0a90: 20 7b 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63   {PRAGMA count_c
0aa0: 68 61 6e 67 65 73 3d 6f 66 66 7d 0a 20 20 65 78  hanges=off}.  ex
0ab0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
0ac0: 73 74 31 20 53 45 54 20 46 32 3d 66 31 2c 20 46  st1 SET F2=f1, F
0ad0: 31 3d 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  1=f2}.} {}.do_te
0ae0: 73 74 20 75 70 64 61 74 65 2d 33 2e 31 34 20 7b  st update-3.14 {
0af0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0b00: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
0b10: 4f 52 44 45 52 20 42 59 20 46 31 7d 0a 7d 20 7b  ORDER BY F1}.} {
0b20: 31 20 32 20 32 20 34 20 33 20 38 20 34 20 31 36  1 2 2 4 3 8 4 16
0b30: 20 35 20 33 32 20 36 20 36 34 20 37 20 31 32 38   5 32 6 64 7 128
0b40: 20 38 20 32 35 36 20 39 20 35 31 32 20 31 30 20   8 256 9 512 10 
0b50: 31 30 32 34 7d 0a 0a 23 20 43 72 65 61 74 65 20  1024}..# Create 
0b60: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 69 65  duplicate entrie
0b70: 73 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  s and make sure 
0b80: 75 70 64 61 74 69 6e 67 20 73 74 69 6c 6c 0a 23  updating still.#
0b90: 20 77 6f 72 6b 73 2e 0a 23 0a 64 6f 5f 74 65 73   works..#.do_tes
0ba0: 74 20 75 70 64 61 74 65 2d 34 2e 30 20 7b 0a 20  t update-4.0 {. 
0bb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
0bc0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 31  ELETE FROM test1
0bd0: 20 57 48 45 52 45 20 66 31 3c 3d 35 3b 0a 20 20   WHERE f1<=5;.  
0be0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
0bf0: 73 74 31 28 66 31 2c 66 32 29 20 56 41 4c 55 45  st1(f1,f2) VALUE
0c00: 53 28 38 2c 38 38 29 3b 0a 20 20 20 20 49 4e 53  S(8,88);.    INS
0c10: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 28 66  ERT INTO test1(f
0c20: 31 2c 66 32 29 20 56 41 4c 55 45 53 28 38 2c 38  1,f2) VALUES(8,8
0c30: 38 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  88);.    INSERT 
0c40: 49 4e 54 4f 20 74 65 73 74 31 28 66 31 2c 66 32  INTO test1(f1,f2
0c50: 29 20 56 41 4c 55 45 53 28 37 37 2c 31 32 38 29  ) VALUES(77,128)
0c60: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0c70: 4f 20 74 65 73 74 31 28 66 31 2c 66 32 29 20 56  O test1(f1,f2) V
0c80: 41 4c 55 45 53 28 37 37 37 2c 31 32 38 29 3b 0a  ALUES(777,128);.
0c90: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
0ca0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
0cb0: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  t1 ORDER BY f1,f
0cc0: 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38  2}.} {6 64 7 128
0cd0: 20 38 20 38 38 20 38 20 32 35 36 20 38 20 38 38   8 88 8 256 8 88
0ce0: 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20  8 9 512 10 1024 
0cf0: 37 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a  77 128 777 128}.
0d00: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34  do_test update-4
0d10: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0d20: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
0d30: 20 66 32 3d 66 32 2b 31 20 57 48 45 52 45 20 66   f2=f2+1 WHERE f
0d40: 31 3d 3d 38 7d 0a 20 20 65 78 65 63 73 71 6c 20  1==8}.  execsql 
0d50: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0d60: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
0d70: 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31  ,f2}.} {6 64 7 1
0d80: 32 38 20 38 20 38 39 20 38 20 32 35 37 20 38 20  28 8 89 8 257 8 
0d90: 38 38 39 20 39 20 35 31 32 20 31 30 20 31 30 32  889 9 512 10 102
0da0: 34 20 37 37 20 31 32 38 20 37 37 37 20 31 32 38  4 77 128 777 128
0db0: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
0dc0: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
0dd0: 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53   {UPDATE test1 S
0de0: 45 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45  ET f2=f2-1 WHERE
0df0: 20 66 31 3d 3d 38 20 61 6e 64 20 66 32 3e 38 30   f1==8 and f2>80
0e00: 30 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  0}.  execsql {SE
0e10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
0e20: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
0e30: 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20  }.} {6 64 7 128 
0e40: 38 20 38 39 20 38 20 32 35 37 20 38 20 38 38 38  8 89 8 257 8 888
0e50: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
0e60: 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64  7 128 777 128}.d
0e70: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e  o_test update-4.
0e80: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  3 {.  execsql {U
0e90: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
0ea0: 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31  f2=f2-1 WHERE f1
0eb0: 3d 3d 38 20 61 6e 64 20 66 32 3c 38 30 30 7d 0a  ==8 and f2<800}.
0ec0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0ed0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
0ee0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
0ef0: 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38   {6 64 7 128 8 8
0f00: 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20  8 8 256 8 888 9 
0f10: 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31  512 10 1024 77 1
0f20: 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74  28 777 128}.do_t
0f30: 65 73 74 20 75 70 64 61 74 65 2d 34 2e 34 20 7b  est update-4.4 {
0f40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
0f50: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d  TE test1 SET f1=
0f60: 66 31 2b 31 20 57 48 45 52 45 20 66 32 3d 3d 31  f1+1 WHERE f2==1
0f70: 32 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  28}.  execsql {S
0f80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
0f90: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  t1 ORDER BY f1,f
0fa0: 32 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20  2}.} {6 64 8 88 
0fb0: 38 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38  8 128 8 256 8 88
0fc0: 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20  8 9 512 10 1024 
0fd0: 37 38 20 31 32 38 20 37 37 38 20 31 32 38 7d 0a  78 128 778 128}.
0fe0: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34  do_test update-4
0ff0: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
1000: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
1010: 20 66 31 3d 66 31 2d 31 20 57 48 45 52 45 20 66   f1=f1-1 WHERE f
1020: 31 3e 31 30 30 20 61 6e 64 20 66 32 3d 3d 31 32  1>100 and f2==12
1030: 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  8}.  execsql {SE
1040: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
1050: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
1060: 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38  }.} {6 64 8 88 8
1070: 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38   128 8 256 8 888
1080: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
1090: 38 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64  8 128 777 128}.d
10a0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e  o_test update-4.
10b0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
10c0: 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74      PRAGMA count
10d0: 5f 63 68 61 6e 67 65 73 3d 6f 6e 3b 0a 20 20 20  _changes=on;.   
10e0: 20 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45   UPDATE test1 SE
10f0: 54 20 66 31 3d 66 31 2d 31 20 57 48 45 52 45 20  T f1=f1-1 WHERE 
1100: 66 31 3c 3d 31 30 30 20 61 6e 64 20 66 32 3d 3d  f1<=100 and f2==
1110: 31 32 38 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64  128;.  }.} {2}.d
1120: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e  o_test update-4.
1130: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
1140: 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74      PRAGMA count
1150: 5f 63 68 61 6e 67 65 73 3d 6f 66 66 3b 0a 20 20  _changes=off;.  
1160: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1170: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
1180: 31 2c 66 32 0a 20 20 7d 0a 7d 20 7b 36 20 36 34  1,f2.  }.} {6 64
1190: 20 37 20 31 32 38 20 38 20 38 38 20 38 20 32 35   7 128 8 88 8 25
11a0: 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30  6 8 888 9 512 10
11b0: 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37   1024 77 128 777
11c0: 20 31 32 38 7d 0a 0a 23 20 52 65 70 65 61 74 20   128}..# Repeat 
11d0: 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 71  the previous seq
11e0: 75 65 6e 63 65 20 6f 66 20 74 65 73 74 73 20 77  uence of tests w
11f0: 69 74 68 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a  ith an index..#.
1200: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35  do_test update-5
1210: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
1220: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
1230: 31 20 4f 4e 20 74 65 73 74 31 28 66 31 29 7d 0a  1 ON test1(f1)}.
1240: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1250: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
1260: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
1270: 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38   {6 64 7 128 8 8
1280: 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20  8 8 256 8 888 9 
1290: 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31  512 10 1024 77 1
12a0: 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74  28 777 128}.do_t
12b0: 65 73 74 20 75 70 64 61 74 65 2d 35 2e 31 20 7b  est update-5.1 {
12c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
12d0: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d  TE test1 SET f2=
12e0: 66 32 2b 31 20 57 48 45 52 45 20 66 31 3d 3d 38  f2+1 WHERE f1==8
12f0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1300: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
1310: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1320: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
1330: 20 38 39 20 38 20 32 35 37 20 38 20 38 38 39 20   89 8 257 8 889 
1340: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
1350: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
1360: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 32  _test update-5.2
1370: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50   {.  execsql {UP
1380: 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66  DATE test1 SET f
1390: 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31 3d  2=f2-1 WHERE f1=
13a0: 3d 38 20 61 6e 64 20 66 32 3e 38 30 30 7d 0a 20  =8 and f2>800}. 
13b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
13c0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
13d0: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
13e0: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39  {6 64 7 128 8 89
13f0: 20 38 20 32 35 37 20 38 20 38 38 38 20 39 20 35   8 257 8 888 9 5
1400: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
1410: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
1420: 73 74 20 75 70 64 61 74 65 2d 35 2e 33 20 7b 0a  st update-5.3 {.
1430: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
1440: 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66  E test1 SET f2=f
1450: 32 2d 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20  2-1 WHERE f1==8 
1460: 61 6e 64 20 66 32 3c 38 30 30 7d 0a 20 20 65 78  and f2<800}.  ex
1470: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1480: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
1490: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20   BY f1,f2}.} {6 
14a0: 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38 20  64 7 128 8 88 8 
14b0: 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20  256 8 888 9 512 
14c0: 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37  10 1024 77 128 7
14d0: 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  77 128}.do_test 
14e0: 75 70 64 61 74 65 2d 35 2e 34 20 7b 0a 20 20 65  update-5.4 {.  e
14f0: 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74  xecsql {UPDATE t
1500: 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b 31  est1 SET f1=f1+1
1510: 20 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d 0a   WHERE f2==128}.
1520: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1530: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
1540: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
1550: 20 7b 36 20 36 34 20 38 20 38 38 20 38 20 31 32   {6 64 8 88 8 12
1560: 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20  8 8 256 8 888 9 
1570: 35 31 32 20 31 30 20 31 30 32 34 20 37 38 20 31  512 10 1024 78 1
1580: 32 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74  28 778 128}.do_t
1590: 65 73 74 20 75 70 64 61 74 65 2d 35 2e 34 2e 31  est update-5.4.1
15a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
15b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
15c0: 31 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20 4f  1 WHERE f1==78 O
15d0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
15e0: 20 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73   {78 128}.do_tes
15f0: 74 20 75 70 64 61 74 65 2d 35 2e 34 2e 32 20 7b  t update-5.4.2 {
1600: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1610: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1620: 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52  WHERE f1==778 OR
1630: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1640: 7b 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73  {778 128}.do_tes
1650: 74 20 75 70 64 61 74 65 2d 35 2e 34 2e 33 20 7b  t update-5.4.3 {
1660: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1670: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1680: 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45  WHERE f1==8 ORDE
1690: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38  R BY f1,f2}.} {8
16a0: 20 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20   88 8 128 8 256 
16b0: 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75  8 888}.do_test u
16c0: 70 64 61 74 65 2d 35 2e 35 20 7b 0a 20 20 65 78  pdate-5.5 {.  ex
16d0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
16e0: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20  st1 SET f1=f1-1 
16f0: 57 48 45 52 45 20 66 31 3e 31 30 30 20 61 6e 64  WHERE f1>100 and
1700: 20 66 32 3d 3d 31 32 38 7d 0a 7d 20 7b 7d 0a 64   f2==128}.} {}.d
1710: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e  o_test update-5.
1720: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
1730: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1740: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
1750: 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38  ,f2}.} {6 64 8 8
1760: 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38 20  8 8 128 8 256 8 
1770: 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32  888 9 512 10 102
1780: 34 20 37 38 20 31 32 38 20 37 37 37 20 31 32 38  4 78 128 777 128
1790: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
17a0: 2d 35 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  -5.5.2 {.  execs
17b0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
17c0: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
17d0: 3d 3d 37 38 20 4f 52 44 45 52 20 42 59 20 66 31  ==78 ORDER BY f1
17e0: 2c 66 32 7d 0a 7d 20 7b 37 38 20 31 32 38 7d 0a  ,f2}.} {78 128}.
17f0: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35  do_test update-5
1800: 2e 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.3 {.  execsql
1810: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1820: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
1830: 37 37 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c  778 ORDER BY f1,
1840: 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  f2}.} {}.do_test
1850: 20 75 70 64 61 74 65 2d 35 2e 35 2e 34 20 7b 0a   update-5.5.4 {.
1860: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1870: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
1880: 48 45 52 45 20 66 31 3d 3d 37 37 37 20 4f 52 44  HERE f1==777 ORD
1890: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
18a0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
18b0: 20 75 70 64 61 74 65 2d 35 2e 35 2e 35 20 7b 0a   update-5.5.5 {.
18c0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
18d0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
18e0: 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52  HERE f1==8 ORDER
18f0: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
1900: 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38  88 8 128 8 256 8
1910: 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   888}.do_test up
1920: 64 61 74 65 2d 35 2e 36 20 7b 0a 20 20 65 78 65  date-5.6 {.  exe
1930: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1940: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d  A count_changes=
1950: 6f 6e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  on;.    UPDATE t
1960: 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31  est1 SET f1=f1-1
1970: 20 57 48 45 52 45 20 66 31 3c 3d 31 30 30 20 61   WHERE f1<=100 a
1980: 6e 64 20 66 32 3d 3d 31 32 38 3b 0a 20 20 7d 0a  nd f2==128;.  }.
1990: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 75 70  } {2}.do_test up
19a0: 64 61 74 65 2d 35 2e 36 2e 31 20 7b 0a 20 20 65  date-5.6.1 {.  e
19b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
19c0: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
19d0: 73 3d 6f 66 66 3b 0a 20 20 20 20 53 45 4c 45 43  s=off;.    SELEC
19e0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
19f0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 0a 20 20  RDER BY f1,f2.  
1a00: 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20  }.} {6 64 7 128 
1a10: 38 20 38 38 20 38 20 32 35 36 20 38 20 38 38 38  8 88 8 256 8 888
1a20: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
1a30: 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64  7 128 777 128}.d
1a40: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e  o_test update-5.
1a50: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
1a60: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1a70: 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37  est1 WHERE f1==7
1a80: 37 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  7 ORDER BY f1,f2
1a90: 7d 0a 7d 20 7b 37 37 20 31 32 38 7d 0a 64 6f 5f  }.} {77 128}.do_
1aa0: 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 36 2e  test update-5.6.
1ab0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
1ac0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
1ad0: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38  t1 WHERE f1==778
1ae0: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1af0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70  .} {}.do_test up
1b00: 64 61 74 65 2d 35 2e 36 2e 34 20 7b 0a 20 20 65  date-5.6.4 {.  e
1b10: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1b20: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
1b30: 45 20 66 31 3d 3d 37 37 37 20 4f 52 44 45 52 20  E f1==777 ORDER 
1b40: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 37  BY f1,f2}.} {777
1b50: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
1b60: 64 61 74 65 2d 35 2e 36 2e 35 20 7b 0a 20 20 65  date-5.6.5 {.  e
1b70: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1b80: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
1b90: 45 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59  E f1==8 ORDER BY
1ba0: 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20   f1,f2}.} {8 88 
1bb0: 38 20 32 35 36 20 38 20 38 38 38 7d 0a 0a 23 20  8 256 8 888}..# 
1bc0: 52 65 70 65 61 74 20 74 68 65 20 70 72 65 76 69  Repeat the previ
1bd0: 6f 75 73 20 73 65 71 75 65 6e 63 65 20 6f 66 20  ous sequence of 
1be0: 74 65 73 74 73 20 77 69 74 68 20 61 20 64 69 66  tests with a dif
1bf0: 66 65 72 65 6e 74 20 69 6e 64 65 78 2e 0a 23 0a  ferent index..#.
1c00: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
1c10: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c  synchronous=FULL
1c20: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
1c30: 2d 36 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.0 {.  execsql
1c40: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 64 78   {DROP INDEX idx
1c50: 31 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52  1}.  execsql {CR
1c60: 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 31 20  EATE INDEX idx1 
1c70: 4f 4e 20 74 65 73 74 31 28 66 32 29 7d 0a 20 20  ON test1(f2)}.  
1c80: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1c90: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
1ca0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1cb0: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20  6 64 7 128 8 88 
1cc0: 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31  8 256 8 888 9 51
1cd0: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
1ce0: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
1cf0: 74 20 75 70 64 61 74 65 2d 36 2e 31 20 7b 0a 20  t update-6.1 {. 
1d00: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
1d10: 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32   test1 SET f2=f2
1d20: 2b 31 20 57 48 45 52 45 20 66 31 3d 3d 38 7d 0a  +1 WHERE f1==8}.
1d30: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1d40: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
1d50: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
1d60: 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38   {6 64 7 128 8 8
1d70: 39 20 38 20 32 35 37 20 38 20 38 38 39 20 39 20  9 8 257 8 889 9 
1d80: 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31  512 10 1024 77 1
1d90: 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74  28 777 128}.do_t
1da0: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 31 2e 31  est update-6.1.1
1db0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1dc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
1dd0: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52  1 WHERE f1==8 OR
1de0: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1df0: 7b 38 20 38 39 20 38 20 32 35 37 20 38 20 38 38  {8 89 8 257 8 88
1e00: 39 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  9}.do_test updat
1e10: 65 2d 36 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  e-6.1.2 {.  exec
1e20: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1e30: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66  OM test1 WHERE f
1e40: 32 3d 3d 38 39 20 4f 52 44 45 52 20 42 59 20 66  2==89 ORDER BY f
1e50: 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 39 7d 0a 64  1,f2}.} {8 89}.d
1e60: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e  o_test update-6.
1e70: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
1e80: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1e90: 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38  est1 WHERE f1==8
1ea0: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
1eb0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75  }.} {}.do_test u
1ec0: 70 64 61 74 65 2d 36 2e 32 20 7b 0a 20 20 65 78  pdate-6.2 {.  ex
1ed0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
1ee0: 73 74 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20  st1 SET f2=f2-1 
1ef0: 57 48 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20  WHERE f1==8 and 
1f00: 66 32 3e 38 30 30 7d 0a 20 20 65 78 65 63 73 71  f2>800}.  execsq
1f10: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1f20: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
1f30: 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37  f1,f2}.} {6 64 7
1f40: 20 31 32 38 20 38 20 38 39 20 38 20 32 35 37 20   128 8 89 8 257 
1f50: 38 20 38 38 38 20 39 20 35 31 32 20 31 30 20 31  8 888 9 512 10 1
1f60: 30 32 34 20 37 37 20 31 32 38 20 37 37 37 20 31  024 77 128 777 1
1f70: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
1f80: 74 65 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73  te-6.3 {.  execs
1f90: 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31  ql {UPDATE test1
1fa0: 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57 48 45   SET f2=f2-1 WHE
1fb0: 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 66 32 3c  RE f1==8 and f2<
1fc0: 38 30 30 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  800}.  execsql {
1fd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
1fe0: 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c  st1 ORDER BY f1,
1ff0: 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32  f2}.} {6 64 7 12
2000: 38 20 38 20 38 38 20 38 20 32 35 36 20 38 20 38  8 8 88 8 256 8 8
2010: 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34  88 9 512 10 1024
2020: 20 37 37 20 31 32 38 20 37 37 37 20 31 32 38 7d   77 128 777 128}
2030: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
2040: 36 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  6.3.1 {.  execsq
2050: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
2060: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
2070: 3d 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  =8 ORDER BY f1,f
2080: 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35 36  2}.} {8 88 8 256
2090: 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20   8 888}.do_test 
20a0: 75 70 64 61 74 65 2d 36 2e 33 2e 32 20 7b 0a 20  update-6.3.2 {. 
20b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
20c0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
20d0: 45 52 45 20 66 32 3d 3d 38 39 20 4f 52 44 45 52  ERE f2==89 ORDER
20e0: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a   BY f1,f2}.} {}.
20f0: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
2100: 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.3 {.  execsql
2110: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2120: 74 65 73 74 31 20 57 48 45 52 45 20 66 32 3d 3d  test1 WHERE f2==
2130: 38 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  88 ORDER BY f1,f
2140: 32 7d 0a 7d 20 7b 38 20 38 38 7d 0a 64 6f 5f 74  2}.} {8 88}.do_t
2150: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 34 20 7b  est update-6.4 {
2160: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
2170: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d  TE test1 SET f1=
2180: 66 31 2b 31 20 57 48 45 52 45 20 66 32 3d 3d 31  f1+1 WHERE f2==1
2190: 32 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  28}.  execsql {S
21a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
21b0: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  t1 ORDER BY f1,f
21c0: 32 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20  2}.} {6 64 8 88 
21d0: 38 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38  8 128 8 256 8 88
21e0: 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20  8 9 512 10 1024 
21f0: 37 38 20 31 32 38 20 37 37 38 20 31 32 38 7d 0a  78 128 778 128}.
2200: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
2210: 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.1 {.  execsql
2220: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2230: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
2240: 37 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  78 ORDER BY f1,f
2250: 32 7d 0a 7d 20 7b 37 38 20 31 32 38 7d 0a 64 6f  2}.} {78 128}.do
2260: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 34  _test update-6.4
2270: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
2280: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
2290: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37  st1 WHERE f1==77
22a0: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
22b0: 7d 0a 7d 20 7b 37 37 38 20 31 32 38 7d 0a 64 6f  }.} {778 128}.do
22c0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 34  _test update-6.4
22d0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
22e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
22f0: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20  st1 WHERE f1==8 
2300: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2310: 7d 20 7b 38 20 38 38 20 38 20 31 32 38 20 38 20  } {8 88 8 128 8 
2320: 32 35 36 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65  256 8 888}.do_te
2330: 73 74 20 75 70 64 61 74 65 2d 36 2e 35 20 7b 0a  st update-6.5 {.
2340: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
2350: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
2360: 31 2d 31 20 57 48 45 52 45 20 66 31 3e 31 30 30  1-1 WHERE f1>100
2370: 20 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20   and f2==128}.  
2380: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2390: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
23a0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
23b0: 36 20 36 34 20 38 20 38 38 20 38 20 31 32 38 20  6 64 8 88 8 128 
23c0: 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31  8 256 8 888 9 51
23d0: 32 20 31 30 20 31 30 32 34 20 37 38 20 31 32 38  2 10 1024 78 128
23e0: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
23f0: 74 20 75 70 64 61 74 65 2d 36 2e 35 2e 31 20 7b  t update-6.5.1 {
2400: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2410: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2420: 57 48 45 52 45 20 66 31 3d 3d 37 38 20 4f 52 44  WHERE f1==78 ORD
2430: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
2440: 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  78 128}.do_test 
2450: 75 70 64 61 74 65 2d 36 2e 35 2e 32 20 7b 0a 20  update-6.5.2 {. 
2460: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2470: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
2480: 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45  ERE f1==778 ORDE
2490: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d  R BY f1,f2}.} {}
24a0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
24b0: 36 2e 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  6.5.3 {.  execsq
24c0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
24d0: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
24e0: 3d 37 37 37 20 4f 52 44 45 52 20 42 59 20 66 31  =777 ORDER BY f1
24f0: 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d  ,f2}.} {777 128}
2500: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
2510: 36 2e 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  6.5.4 {.  execsq
2520: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
2530: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
2540: 3d 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  =8 ORDER BY f1,f
2550: 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20 31 32 38  2}.} {8 88 8 128
2560: 20 38 20 32 35 36 20 38 20 38 38 38 7d 0a 64 6f   8 256 8 888}.do
2570: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 36  _test update-6.6
2580: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50   {.  execsql {UP
2590: 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66  DATE test1 SET f
25a0: 31 3d 66 31 2d 31 20 57 48 45 52 45 20 66 31 3c  1=f1-1 WHERE f1<
25b0: 3d 31 30 30 20 61 6e 64 20 66 32 3d 3d 31 32 38  =100 and f2==128
25c0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
25d0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
25e0: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
25f0: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
2600: 20 38 38 20 38 20 32 35 36 20 38 20 38 38 38 20   88 8 256 8 888 
2610: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
2620: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
2630: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 36  _test update-6.6
2640: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2650: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
2660: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37  st1 WHERE f1==77
2670: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
2680: 0a 7d 20 7b 37 37 20 31 32 38 7d 0a 64 6f 5f 74  .} {77 128}.do_t
2690: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 36 2e 32  est update-6.6.2
26a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
26b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
26c0: 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20  1 WHERE f1==778 
26d0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
26e0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  } {}.do_test upd
26f0: 61 74 65 2d 36 2e 36 2e 33 20 7b 0a 20 20 65 78  ate-6.6.3 {.  ex
2700: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2710: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
2720: 20 66 31 3d 3d 37 37 37 20 4f 52 44 45 52 20 42   f1==777 ORDER B
2730: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 37 20  Y f1,f2}.} {777 
2740: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
2750: 61 74 65 2d 36 2e 36 2e 34 20 7b 0a 20 20 65 78  ate-6.6.4 {.  ex
2760: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2770: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
2780: 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59 20   f1==8 ORDER BY 
2790: 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38  f1,f2}.} {8 88 8
27a0: 20 32 35 36 20 38 20 38 38 38 7d 0a 0a 23 20 52   256 8 888}..# R
27b0: 65 70 65 61 74 20 74 68 65 20 70 72 65 76 69 6f  epeat the previo
27c0: 75 73 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  us sequence of t
27d0: 65 73 74 73 20 77 69 74 68 20 6d 75 6c 74 69 70  ests with multip
27e0: 6c 65 0a 23 20 69 6e 64 69 63 65 73 0a 23 0a 64  le.# indices.#.d
27f0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e  o_test update-7.
2800: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  0 {.  execsql {C
2810: 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 32  REATE INDEX idx2
2820: 20 4f 4e 20 74 65 73 74 31 28 66 32 29 7d 0a 20   ON test1(f2)}. 
2830: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
2840: 20 49 4e 44 45 58 20 69 64 78 33 20 4f 4e 20 74   INDEX idx3 ON t
2850: 65 73 74 31 28 66 31 2c 66 32 29 7d 0a 20 20 65  est1(f1,f2)}.  e
2860: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2870: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
2880: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
2890: 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38   64 7 128 8 88 8
28a0: 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32   256 8 888 9 512
28b0: 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20   10 1024 77 128 
28c0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
28d0: 20 75 70 64 61 74 65 2d 37 2e 31 20 7b 0a 20 20   update-7.1 {.  
28e0: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
28f0: 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32 2b  test1 SET f2=f2+
2900: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 7d 0a 20  1 WHERE f1==8}. 
2910: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2920: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
2930: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2940: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39  {6 64 7 128 8 89
2950: 20 38 20 32 35 37 20 38 20 38 38 39 20 39 20 35   8 257 8 889 9 5
2960: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
2970: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
2980: 73 74 20 75 70 64 61 74 65 2d 37 2e 31 2e 31 20  st update-7.1.1 
2990: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
29a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
29b0: 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44   WHERE f1==8 ORD
29c0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
29d0: 38 20 38 39 20 38 20 32 35 37 20 38 20 38 38 39  8 89 8 257 8 889
29e0: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
29f0: 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -7.1.2 {.  execs
2a00: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
2a10: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 32  M test1 WHERE f2
2a20: 3d 3d 38 39 20 4f 52 44 45 52 20 42 59 20 66 31  ==89 ORDER BY f1
2a30: 2c 66 32 7d 0a 7d 20 7b 38 20 38 39 7d 0a 64 6f  ,f2}.} {8 89}.do
2a40: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 31  _test update-7.1
2a50: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2a60: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
2a70: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 38  st1 WHERE f1==88
2a80: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
2a90: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70  .} {}.do_test up
2aa0: 64 61 74 65 2d 37 2e 32 20 7b 0a 20 20 65 78 65  date-7.2 {.  exe
2ab0: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
2ac0: 74 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57  t1 SET f2=f2-1 W
2ad0: 48 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 66  HERE f1==8 and f
2ae0: 32 3e 38 30 30 7d 0a 20 20 65 78 65 63 73 71 6c  2>800}.  execsql
2af0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2b00: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
2b10: 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20  1,f2}.} {6 64 7 
2b20: 31 32 38 20 38 20 38 39 20 38 20 32 35 37 20 38  128 8 89 8 257 8
2b30: 20 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30   888 9 512 10 10
2b40: 32 34 20 37 37 20 31 32 38 20 37 37 37 20 31 32  24 77 128 777 12
2b50: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
2b60: 65 2d 37 2e 33 20 7b 0a 20 20 23 20 65 78 70 6c  e-7.3 {.  # expl
2b70: 61 69 6e 20 7b 55 50 44 41 54 45 20 74 65 73 74  ain {UPDATE test
2b80: 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57 48  1 SET f2=f2-1 WH
2b90: 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 46 32  ERE f1==8 and F2
2ba0: 3c 33 30 30 7d 0a 20 20 65 78 65 63 73 71 6c 20  <300}.  execsql 
2bb0: 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45  {UPDATE test1 SE
2bc0: 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20  T f2=f2-1 WHERE 
2bd0: 66 31 3d 3d 38 20 61 6e 64 20 66 32 3c 38 30 30  f1==8 and f2<800
2be0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
2bf0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
2c00: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
2c10: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
2c20: 20 38 38 20 38 20 32 35 36 20 38 20 38 38 38 20   88 8 256 8 888 
2c30: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
2c40: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
2c50: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 33  _test update-7.3
2c60: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2c70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
2c80: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20  st1 WHERE f1==8 
2c90: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2ca0: 7d 20 7b 38 20 38 38 20 38 20 32 35 36 20 38 20  } {8 88 8 256 8 
2cb0: 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  888}.do_test upd
2cc0: 61 74 65 2d 37 2e 33 2e 32 20 7b 0a 20 20 65 78  ate-7.3.2 {.  ex
2cd0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2ce0: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
2cf0: 20 66 32 3d 3d 38 39 20 4f 52 44 45 52 20 42 59   f2==89 ORDER BY
2d00: 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f   f1,f2}.} {}.do_
2d10: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 33 2e  test update-7.3.
2d20: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
2d30: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2d40: 74 31 20 57 48 45 52 45 20 66 32 3d 3d 38 38 20  t1 WHERE f2==88 
2d50: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2d60: 7d 20 7b 38 20 38 38 7d 0a 64 6f 5f 74 65 73 74  } {8 88}.do_test
2d70: 20 75 70 64 61 74 65 2d 37 2e 34 20 7b 0a 20 20   update-7.4 {.  
2d80: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
2d90: 74 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b  test1 SET f1=f1+
2da0: 31 20 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d  1 WHERE f2==128}
2db0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2dc0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2dd0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2de0: 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38 20 31  } {6 64 8 88 8 1
2df0: 32 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39  28 8 256 8 888 9
2e00: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 38 20   512 10 1024 78 
2e10: 31 32 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f  128 778 128}.do_
2e20: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 34 2e  test update-7.4.
2e30: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
2e40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2e50: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20  t1 WHERE f1==78 
2e60: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2e70: 7d 20 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65  } {78 128}.do_te
2e80: 73 74 20 75 70 64 61 74 65 2d 37 2e 34 2e 32 20  st update-7.4.2 
2e90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2ea0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
2eb0: 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f   WHERE f1==778 O
2ec0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2ed0: 20 7b 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65   {778 128}.do_te
2ee0: 73 74 20 75 70 64 61 74 65 2d 37 2e 34 2e 33 20  st update-7.4.3 
2ef0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2f00: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
2f10: 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44   WHERE f1==8 ORD
2f20: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
2f30: 38 20 38 38 20 38 20 31 32 38 20 38 20 32 35 36  8 88 8 128 8 256
2f40: 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20   8 888}.do_test 
2f50: 75 70 64 61 74 65 2d 37 2e 35 20 7b 0a 20 20 65  update-7.5 {.  e
2f60: 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74  xecsql {UPDATE t
2f70: 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31  est1 SET f1=f1-1
2f80: 20 57 48 45 52 45 20 66 31 3e 31 30 30 20 61 6e   WHERE f1>100 an
2f90: 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78 65  d f2==128}.  exe
2fa0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2fb0: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
2fc0: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
2fd0: 34 20 38 20 38 38 20 38 20 31 32 38 20 38 20 32  4 8 88 8 128 8 2
2fe0: 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31  56 8 888 9 512 1
2ff0: 30 20 31 30 32 34 20 37 38 20 31 32 38 20 37 37  0 1024 78 128 77
3000: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
3010: 70 64 61 74 65 2d 37 2e 35 2e 31 20 7b 0a 20 20  pdate-7.5.1 {.  
3020: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3030: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
3040: 52 45 20 66 31 3d 3d 37 38 20 4f 52 44 45 52 20  RE f1==78 ORDER 
3050: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 38 20  BY f1,f2}.} {78 
3060: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
3070: 61 74 65 2d 37 2e 35 2e 32 20 7b 0a 20 20 65 78  ate-7.5.2 {.  ex
3080: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
3090: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
30a0: 20 66 31 3d 3d 37 37 38 20 4f 52 44 45 52 20 42   f1==778 ORDER B
30b0: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f  Y f1,f2}.} {}.do
30c0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 35  _test update-7.5
30d0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
30e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
30f0: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37  st1 WHERE f1==77
3100: 37 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  7 ORDER BY f1,f2
3110: 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d 0a 64 6f  }.} {777 128}.do
3120: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 35  _test update-7.5
3130: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
3140: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
3150: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20  st1 WHERE f1==8 
3160: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
3170: 7d 20 7b 38 20 38 38 20 38 20 31 32 38 20 38 20  } {8 88 8 128 8 
3180: 32 35 36 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65  256 8 888}.do_te
3190: 73 74 20 75 70 64 61 74 65 2d 37 2e 36 20 7b 0a  st update-7.6 {.
31a0: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
31b0: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
31c0: 31 2d 31 20 57 48 45 52 45 20 66 31 3c 3d 31 30  1-1 WHERE f1<=10
31d0: 30 20 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20  0 and f2==128}. 
31e0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
31f0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
3200: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
3210: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38  {6 64 7 128 8 88
3220: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
3230: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
3240: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
3250: 73 74 20 75 70 64 61 74 65 2d 37 2e 36 2e 31 20  st update-7.6.1 
3260: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3270: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
3280: 20 57 48 45 52 45 20 66 31 3d 3d 37 37 20 4f 52   WHERE f1==77 OR
3290: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
32a0: 7b 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  {77 128}.do_test
32b0: 20 75 70 64 61 74 65 2d 37 2e 36 2e 32 20 7b 0a   update-7.6.2 {.
32c0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
32d0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
32e0: 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44  HERE f1==778 ORD
32f0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
3300: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
3310: 2d 37 2e 36 2e 33 20 7b 0a 20 20 65 78 65 63 73  -7.6.3 {.  execs
3320: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
3330: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
3340: 3d 3d 37 37 37 20 4f 52 44 45 52 20 42 59 20 66  ==777 ORDER BY f
3350: 31 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38  1,f2}.} {777 128
3360: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
3370: 2d 37 2e 36 2e 34 20 7b 0a 20 20 65 78 65 63 73  -7.6.4 {.  execs
3380: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
3390: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
33a0: 3d 3d 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c  ==8 ORDER BY f1,
33b0: 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35  f2}.} {8 88 8 25
33c0: 36 20 38 20 38 38 38 7d 0a 0a 23 20 45 72 72 6f  6 8 888}..# Erro
33d0: 72 20 6d 65 73 73 61 67 65 73 0a 23 0a 64 6f 5f  r messages.#.do_
33e0: 74 65 73 74 20 75 70 64 61 74 65 2d 39 2e 31 20  test update-9.1 
33f0: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
3400: 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   {execsql {.    
3410: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
3420: 20 78 3d 31 31 20 57 48 45 52 45 20 66 31 3d 31   x=11 WHERE f1=1
3430: 30 32 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20  025.  }} msg].  
3440: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
3450: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c   {1 {no such col
3460: 75 6d 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74  umn: x}}.do_test
3470: 20 75 70 64 61 74 65 2d 39 2e 32 20 7b 0a 20 20   update-9.2 {.  
3480: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
3490: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
34a0: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d  TE test1 SET f1=
34b0: 78 28 31 31 29 20 57 48 45 52 45 20 66 31 3d 31  x(11) WHERE f1=1
34c0: 30 32 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20  025.  }} msg].  
34d0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
34e0: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e   {1 {no such fun
34f0: 63 74 69 6f 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65  ction: x}}.do_te
3500: 73 74 20 75 70 64 61 74 65 2d 39 2e 33 20 7b 0a  st update-9.3 {.
3510: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
3520: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
3530: 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66  DATE test1 SET f
3540: 31 3d 31 31 20 57 48 45 52 45 20 78 3d 31 30 32  1=11 WHERE x=102
3550: 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  5.  }} msg].  la
3560: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
3570: 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d  1 {no such colum
3580: 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 75  n: x}}.do_test u
3590: 70 64 61 74 65 2d 39 2e 34 20 7b 0a 20 20 73 65  pdate-9.4 {.  se
35a0: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
35b0: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
35c0: 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 31 31   test1 SET f1=11
35d0: 20 57 48 45 52 45 20 78 28 66 31 29 3d 31 30 32   WHERE x(f1)=102
35e0: 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  5.  }} msg].  la
35f0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
3600: 31 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e 63 74  1 {no such funct
3610: 69 6f 6e 3a 20 78 7d 7d 0a 0a 23 20 54 72 79 20  ion: x}}..# Try 
3620: 64 6f 69 6e 67 20 75 70 64 61 74 65 73 20 6f 6e  doing updates on
3630: 20 61 20 75 6e 69 71 75 65 20 63 6f 6c 75 6d 6e   a unique column
3640: 20 77 68 65 72 65 20 74 68 65 20 76 61 6c 75 65   where the value
3650: 20 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 61 6c   does not.# real
3660: 6c 79 20 63 68 61 6e 67 65 2e 0a 23 0a 64 6f 5f  ly change..#.do_
3670: 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 31  test update-10.1
3680: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3690: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 65     DROP TABLE te
36a0: 73 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20  st1;.    CREATE 
36b0: 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20 20 20  TABLE t1(.      
36c0: 20 61 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61   a integer prima
36d0: 72 79 20 6b 65 79 2c 0a 20 20 20 20 20 20 20 62  ry key,.       b
36e0: 20 55 4e 49 51 55 45 2c 20 0a 20 20 20 20 20 20   UNIQUE, .      
36f0: 20 63 2c 20 64 2c 0a 20 20 20 20 20 20 20 65 2c   c, d,.       e,
3700: 20 66 2c 0a 20 20 20 20 20 20 20 55 4e 49 51 55   f,.       UNIQU
3710: 45 28 63 2c 64 29 0a 20 20 20 20 29 3b 0a 20 20  E(c,d).    );.  
3720: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
3730: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 2c 34 2c   VALUES(1,2,3,4,
3740: 35 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  5,6);.    INSERT
3750: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3760: 32 2c 33 2c 34 2c 34 2c 36 2c 37 29 3b 0a 20 20  2,3,4,4,6,7);.  
3770: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3780: 74 31 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20  t1.  }.} {1 2 3 
3790: 34 20 35 20 36 20 32 20 33 20 34 20 34 20 36 20  4 5 6 2 3 4 4 6 
37a0: 37 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  7}.do_test updat
37b0: 65 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68  e-10.2 {.  catch
37c0: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
37d0: 20 74 31 20 53 45 54 20 61 3d 31 2c 20 65 3d 39   t1 SET a=1, e=9
37e0: 20 57 48 45 52 45 20 66 3d 36 3b 0a 20 20 20 20   WHERE f=6;.    
37f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
3800: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20  ;.  }.} {0 {1 2 
3810: 33 20 34 20 39 20 36 20 32 20 33 20 34 20 34 20  3 4 9 6 2 3 4 4 
3820: 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70  6 7}}.do_test up
3830: 64 61 74 65 2d 31 30 2e 33 20 7b 0a 20 20 63 61  date-10.3 {.  ca
3840: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  tchsql {.    UPD
3850: 41 54 45 20 74 31 20 53 45 54 20 61 3d 31 2c 20  ATE t1 SET a=1, 
3860: 65 3d 31 30 20 57 48 45 52 45 20 66 3d 37 3b 0a  e=10 WHERE f=7;.
3870: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3880: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  M t1;.  }.} {1 {
3890: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
38a0: 20 62 65 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f   be unique}}.do_
38b0: 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 34  test update-10.4
38c0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
38d0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
38e0: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t1;.  }.} {0 {
38f0: 31 20 32 20 33 20 34 20 39 20 36 20 32 20 33 20  1 2 3 4 9 6 2 3 
3900: 34 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73  4 4 6 7}}.do_tes
3910: 74 20 75 70 64 61 74 65 2d 31 30 2e 35 20 7b 0a  t update-10.5 {.
3920: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3930: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
3940: 3d 32 2c 20 65 3d 31 31 20 57 48 45 52 45 20 66  =2, e=11 WHERE f
3950: 3d 36 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  =6;.    SELECT *
3960: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
3970: 7b 30 20 7b 31 20 32 20 33 20 34 20 31 31 20 36  {0 {1 2 3 4 11 6
3980: 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d 0a 64   2 3 4 4 6 7}}.d
3990: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30  o_test update-10
39a0: 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .6 {.  catchsql 
39b0: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
39c0: 53 45 54 20 62 3d 32 2c 20 65 3d 31 32 20 57 48  SET b=2, e=12 WH
39d0: 45 52 45 20 66 3d 37 3b 0a 20 20 20 20 53 45 4c  ERE f=7;.    SEL
39e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
39f0: 20 7d 0a 7d 20 7b 31 20 7b 75 6e 69 71 75 65 6e   }.} {1 {uniquen
3a00: 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ess constraint f
3a10: 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  ailed}}.do_test 
3a20: 75 70 64 61 74 65 2d 31 30 2e 37 20 7b 0a 20 20  update-10.7 {.  
3a30: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
3a40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
3a50: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33  .  }.} {0 {1 2 3
3a60: 20 34 20 31 31 20 36 20 32 20 33 20 34 20 34 20   4 11 6 2 3 4 4 
3a70: 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70  6 7}}.do_test up
3a80: 64 61 74 65 2d 31 30 2e 38 20 7b 0a 20 20 63 61  date-10.8 {.  ca
3a90: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  tchsql {.    UPD
3aa0: 41 54 45 20 74 31 20 53 45 54 20 63 3d 33 2c 20  ATE t1 SET c=3, 
3ab0: 64 3d 34 2c 20 65 3d 31 33 20 57 48 45 52 45 20  d=4, e=13 WHERE 
3ac0: 66 3d 36 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  f=6;.    SELECT 
3ad0: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
3ae0: 20 7b 30 20 7b 31 20 32 20 33 20 34 20 31 33 20   {0 {1 2 3 4 13 
3af0: 36 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d 0a  6 2 3 4 4 6 7}}.
3b00: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31  do_test update-1
3b10: 30 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.9 {.  catchsql
3b20: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31   {.    UPDATE t1
3b30: 20 53 45 54 20 63 3d 33 2c 20 64 3d 34 2c 20 65   SET c=3, d=4, e
3b40: 3d 31 34 20 57 48 45 52 45 20 66 3d 37 3b 0a 20  =14 WHERE f=7;. 
3b50: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3b60: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 75   t1;.  }.} {1 {u
3b70: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
3b80: 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f  aint failed}}.do
3b90: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e  _test update-10.
3ba0: 31 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  10 {.  catchsql 
3bb0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
3bc0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30  ROM t1;.  }.} {0
3bd0: 20 7b 31 20 32 20 33 20 34 20 31 33 20 36 20 32   {1 2 3 4 13 6 2
3be0: 20 33 20 34 20 34 20 36 20 37 7d 7d 0a 0a 23 20   3 4 4 6 7}}..# 
3bf0: 4d 61 6b 65 20 73 75 72 65 20 77 65 20 63 61 6e  Make sure we can
3c00: 20 68 61 6e 64 6c 65 20 61 20 73 75 62 71 75 65   handle a subque
3c10: 72 79 20 69 6e 20 74 68 65 20 77 68 65 72 65 20  ry in the where 
3c20: 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 74 65 73  clause..#.do_tes
3c30: 74 20 75 70 64 61 74 65 2d 31 31 2e 31 20 7b 0a  t update-11.1 {.
3c40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3c50: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 65 3d  UPDATE t1 SET e=
3c60: 65 2b 31 20 57 48 45 52 45 20 62 20 49 4e 20 28  e+1 WHERE b IN (
3c70: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
3c80: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 2c  );.    SELECT b,
3c90: 65 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  e FROM t1;.  }.}
3ca0: 20 7b 32 20 31 34 20 33 20 37 7d 0a 64 6f 5f 74   {2 14 3 7}.do_t
3cb0: 65 73 74 20 75 70 64 61 74 65 2d 31 31 2e 32 20  est update-11.2 
3cc0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3cd0: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
3ce0: 65 3d 65 2b 31 20 57 48 45 52 45 20 61 20 49 4e  e=e+1 WHERE a IN
3cf0: 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   (SELECT a FROM 
3d00: 74 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  t1);.    SELECT 
3d10: 61 2c 65 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  a,e FROM t1;.  }
3d20: 0a 7d 20 7b 31 20 31 35 20 32 20 38 7d 0a 0a 66  .} {1 15 2 8}..f
3d30: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.