/ Hex Artifact Content
Login

Artifact 6c68446b8a0a33d522a7c72b320934596a2d7d32:


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 39 20 32 30 30  .test,v 1.19 200
0200: 38 2f 30 34 2f 31 30 20 31 38 3a 34 34 3a 33 36  8/04/10 18:44:36
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 31 3c 3c 24 69 7d 5d 29 22  [expr {1<<$i}])"
04a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 24 73 71  .    execsql $sq
04b0: 6c 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  l.  }.  execsql 
04c0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
04d0: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
04e0: 7d 0a 7d 20 7b 31 20 32 20 32 20 34 20 33 20 38  }.} {1 2 2 4 3 8
04f0: 20 34 20 31 36 20 35 20 33 32 20 36 20 36 34 20   4 16 5 32 6 64 
0500: 37 20 31 32 38 20 38 20 32 35 36 20 39 20 35 31  7 128 8 256 9 51
0510: 32 20 31 30 20 31 30 32 34 7d 0a 0a 23 20 55 6e  2 10 1024}..# Un
0520: 6b 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d  known column nam
0530: 65 20 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  e in an expressi
0540: 6f 6e 0a 23 0a 64 6f 5f 74 65 73 74 20 75 70 64  on.#.do_test upd
0550: 61 74 65 2d 33 2e 32 20 7b 0a 20 20 73 65 74 20  ate-3.2 {.  set 
0560: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0570: 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20  l {UPDATE test1 
0580: 53 45 54 20 66 31 3d 66 33 2a 32 20 57 48 45 52  SET f1=f3*2 WHER
0590: 45 20 66 32 3d 3d 33 32 7d 7d 20 6d 73 67 5d 0a  E f2==32}} msg].
05a0: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
05b0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63  .} {1 {no such c
05c0: 6f 6c 75 6d 6e 3a 20 66 33 7d 7d 0a 64 6f 5f 74  olumn: f3}}.do_t
05d0: 65 73 74 20 75 70 64 61 74 65 2d 33 2e 33 20 7b  est update-3.3 {
05e0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
05f0: 7b 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45  {execsql {UPDATE
0600: 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 74 65   test1 SET f1=te
0610: 73 74 32 2e 66 31 2a 32 20 57 48 45 52 45 20 66  st2.f1*2 WHERE f
0620: 32 3d 3d 33 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c  2==32}} msg].  l
0630: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
0640: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75  {1 {no such colu
0650: 6d 6e 3a 20 74 65 73 74 32 2e 66 31 7d 7d 0a 64  mn: test2.f1}}.d
0660: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e  o_test update-3.
0670: 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  4 {.  set v [cat
0680: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 55 50 44  ch {execsql {UPD
0690: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 33  ATE test1 SET f3
06a0: 3d 66 31 2a 32 20 57 48 45 52 45 20 66 32 3d 3d  =f1*2 WHERE f2==
06b0: 33 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  32}} msg].  lapp
06c0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20  end v $msg.} {1 
06d0: 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a  {no such column:
06e0: 20 66 33 7d 7d 0a 0a 23 20 41 63 74 75 61 6c 6c   f3}}..# Actuall
06f0: 79 20 64 6f 20 73 6f 6d 65 20 75 70 64 61 74 65  y do some update
0700: 73 0a 23 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  s.#.do_test upda
0710: 74 65 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63 73  te-3.5 {.  execs
0720: 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31  ql {UPDATE test1
0730: 20 53 45 54 20 66 32 3d 66 32 2a 33 7d 0a 7d 20   SET f2=f2*3}.} 
0740: 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  {}.do_test updat
0750: 65 2d 33 2e 35 2e 31 20 7b 0a 20 20 64 62 20 63  e-3.5.1 {.  db c
0760: 68 61 6e 67 65 73 0a 7d 20 7b 31 30 7d 0a 0a 23  hanges.} {10}..#
0770: 20 76 65 72 69 66 79 20 74 68 61 74 20 53 45 4c   verify that SEL
0780: 45 43 54 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ECT does not res
0790: 65 74 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  et the change co
07a0: 75 6e 74 65 72 0a 64 6f 5f 74 65 73 74 20 75 70  unter.do_test up
07b0: 64 61 74 65 2d 33 2e 35 2e 32 20 7b 0a 20 20 64  date-3.5.2 {.  d
07c0: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  b eval {SELECT c
07d0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 65 73  ount(*) FROM tes
07e0: 74 31 7d 0a 7d 20 7b 31 30 7d 0a 64 6f 5f 74 65  t1}.} {10}.do_te
07f0: 73 74 20 75 70 64 61 74 65 2d 33 2e 35 2e 33 20  st update-3.5.3 
0800: 7b 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a 7d  {.  db changes.}
0810: 20 7b 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 75   {10}..do_test u
0820: 70 64 61 74 65 2d 33 2e 36 20 7b 0a 20 20 65 78  pdate-3.6 {.  ex
0830: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
0840: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
0850: 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20 36 20 32   BY f1}.} {1 6 2
0860: 20 31 32 20 33 20 32 34 20 34 20 34 38 20 35 20   12 3 24 4 48 5 
0870: 39 36 20 36 20 31 39 32 20 37 20 33 38 34 20 38  96 6 192 7 384 8
0880: 20 37 36 38 20 39 20 31 35 33 36 20 31 30 20 33   768 9 1536 10 3
0890: 30 37 32 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  072}.do_test upd
08a0: 61 74 65 2d 33 2e 37 20 7b 0a 20 20 65 78 65 63  ate-3.7 {.  exec
08b0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 63 6f 75 6e  sql {PRAGMA coun
08c0: 74 5f 63 68 61 6e 67 65 73 3d 6f 6e 7d 0a 20 20  t_changes=on}.  
08d0: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
08e0: 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32 2f  test1 SET f2=f2/
08f0: 33 20 57 48 45 52 45 20 66 31 3c 3d 35 7d 0a 7d  3 WHERE f1<=5}.}
0900: 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64   {5}.do_test upd
0910: 61 74 65 2d 33 2e 38 20 7b 0a 20 20 65 78 65 63  ate-3.8 {.  exec
0920: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
0930: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
0940: 59 20 66 31 7d 0a 7d 20 7b 31 20 32 20 32 20 34  Y f1}.} {1 2 2 4
0950: 20 33 20 38 20 34 20 31 36 20 35 20 33 32 20 36   3 8 4 16 5 32 6
0960: 20 31 39 32 20 37 20 33 38 34 20 38 20 37 36 38   192 7 384 8 768
0970: 20 39 20 31 35 33 36 20 31 30 20 33 30 37 32 7d   9 1536 10 3072}
0980: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
0990: 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.9 {.  execsql 
09a0: 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45  {UPDATE test1 SE
09b0: 54 20 66 32 3d 66 32 2f 33 20 57 48 45 52 45 20  T f2=f2/3 WHERE 
09c0: 66 31 3e 35 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74  f1>5}.} {5}.do_t
09d0: 65 73 74 20 75 70 64 61 74 65 2d 33 2e 31 30 20  est update-3.10 
09e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
09f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
0a00: 20 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20   ORDER BY f1}.} 
0a10: 7b 31 20 32 20 32 20 34 20 33 20 38 20 34 20 31  {1 2 2 4 3 8 4 1
0a20: 36 20 35 20 33 32 20 36 20 36 34 20 37 20 31 32  6 5 32 6 64 7 12
0a30: 38 20 38 20 32 35 36 20 39 20 35 31 32 20 31 30  8 8 256 9 512 10
0a40: 20 31 30 32 34 7d 0a 0a 23 20 53 77 61 70 20 74   1024}..# Swap t
0a50: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 66 31 20  he values of f1 
0a60: 61 6e 64 20 66 32 20 66 6f 72 20 61 6c 6c 20 65  and f2 for all e
0a70: 6c 65 6d 65 6e 74 73 0a 23 0a 64 6f 5f 74 65 73  lements.#.do_tes
0a80: 74 20 75 70 64 61 74 65 2d 33 2e 31 31 20 7b 0a  t update-3.11 {.
0a90: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
0aa0: 45 20 74 65 73 74 31 20 53 45 54 20 46 32 3d 66  E test1 SET F2=f
0ab0: 31 2c 20 46 31 3d 66 32 7d 0a 7d 20 7b 31 30 7d  1, F1=f2}.} {10}
0ac0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
0ad0: 33 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.12 {.  execsql
0ae0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0af0: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 46  test1 ORDER BY F
0b00: 31 7d 0a 7d 20 7b 32 20 31 20 34 20 32 20 38 20  1}.} {2 1 4 2 8 
0b10: 33 20 31 36 20 34 20 33 32 20 35 20 36 34 20 36  3 16 4 32 5 64 6
0b20: 20 31 32 38 20 37 20 32 35 36 20 38 20 35 31 32   128 7 256 8 512
0b30: 20 39 20 31 30 32 34 20 31 30 7d 0a 64 6f 5f 74   9 1024 10}.do_t
0b40: 65 73 74 20 75 70 64 61 74 65 2d 33 2e 31 33 20  est update-3.13 
0b50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41  {.  execsql {PRA
0b60: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
0b70: 73 3d 6f 66 66 7d 0a 20 20 65 78 65 63 73 71 6c  s=off}.  execsql
0b80: 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53   {UPDATE test1 S
0b90: 45 54 20 46 32 3d 66 31 2c 20 46 31 3d 66 32 7d  ET F2=f1, F1=f2}
0ba0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70  .} {}.do_test up
0bb0: 64 61 74 65 2d 33 2e 31 34 20 7b 0a 20 20 65 78  date-3.14 {.  ex
0bc0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
0bd0: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
0be0: 20 42 59 20 46 31 7d 0a 7d 20 7b 31 20 32 20 32   BY F1}.} {1 2 2
0bf0: 20 34 20 33 20 38 20 34 20 31 36 20 35 20 33 32   4 3 8 4 16 5 32
0c00: 20 36 20 36 34 20 37 20 31 32 38 20 38 20 32 35   6 64 7 128 8 25
0c10: 36 20 39 20 35 31 32 20 31 30 20 31 30 32 34 7d  6 9 512 10 1024}
0c20: 0a 0a 23 20 43 72 65 61 74 65 20 64 75 70 6c 69  ..# Create dupli
0c30: 63 61 74 65 20 65 6e 74 72 69 65 73 20 61 6e 64  cate entries and
0c40: 20 6d 61 6b 65 20 73 75 72 65 20 75 70 64 61 74   make sure updat
0c50: 69 6e 67 20 73 74 69 6c 6c 0a 23 20 77 6f 72 6b  ing still.# work
0c60: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 75 70 64  s..#.do_test upd
0c70: 61 74 65 2d 34 2e 30 20 7b 0a 20 20 65 78 65 63  ate-4.0 {.  exec
0c80: 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  sql {.    DELETE
0c90: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
0ca0: 45 20 66 31 3c 3d 35 3b 0a 20 20 20 20 49 4e 53  E f1<=5;.    INS
0cb0: 45 52 54 20 49 4e 54 4f 20 74 65 73 74 31 28 66  ERT INTO test1(f
0cc0: 31 2c 66 32 29 20 56 41 4c 55 45 53 28 38 2c 38  1,f2) VALUES(8,8
0cd0: 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  8);.    INSERT I
0ce0: 4e 54 4f 20 74 65 73 74 31 28 66 31 2c 66 32 29  NTO test1(f1,f2)
0cf0: 20 56 41 4c 55 45 53 28 38 2c 38 38 38 29 3b 0a   VALUES(8,888);.
0d00: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0d10: 74 65 73 74 31 28 66 31 2c 66 32 29 20 56 41 4c  test1(f1,f2) VAL
0d20: 55 45 53 28 37 37 2c 31 32 38 29 3b 0a 20 20 20  UES(77,128);.   
0d30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73   INSERT INTO tes
0d40: 74 31 28 66 31 2c 66 32 29 20 56 41 4c 55 45 53  t1(f1,f2) VALUES
0d50: 28 37 37 37 2c 31 32 38 29 3b 0a 20 20 7d 0a 20  (777,128);.  }. 
0d60: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0d70: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
0d80: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
0d90: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38  {6 64 7 128 8 88
0da0: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
0db0: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
0dc0: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
0dd0: 73 74 20 75 70 64 61 74 65 2d 34 2e 31 20 7b 0a  st update-4.1 {.
0de0: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
0df0: 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66  E test1 SET f2=f
0e00: 32 2b 31 20 57 48 45 52 45 20 66 31 3d 3d 38 7d  2+1 WHERE f1==8}
0e10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0e20: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
0e30: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
0e40: 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20  } {6 64 7 128 8 
0e50: 38 39 20 38 20 32 35 37 20 38 20 38 38 39 20 39  89 8 257 8 889 9
0e60: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20   512 10 1024 77 
0e70: 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f  128 777 128}.do_
0e80: 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e 32 20  test update-4.2 
0e90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44  {.  execsql {UPD
0ea0: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32  ATE test1 SET f2
0eb0: 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31 3d 3d  =f2-1 WHERE f1==
0ec0: 38 20 61 6e 64 20 66 32 3e 38 30 30 7d 0a 20 20  8 and f2>800}.  
0ed0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0ee0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
0ef0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
0f00: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39 20  6 64 7 128 8 89 
0f10: 38 20 32 35 37 20 38 20 38 38 38 20 39 20 35 31  8 257 8 888 9 51
0f20: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
0f30: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
0f40: 74 20 75 70 64 61 74 65 2d 34 2e 33 20 7b 0a 20  t update-4.3 {. 
0f50: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
0f60: 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32   test1 SET f2=f2
0f70: 2d 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 61  -1 WHERE f1==8 a
0f80: 6e 64 20 66 32 3c 38 30 30 7d 0a 20 20 65 78 65  nd f2<800}.  exe
0f90: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
0fa0: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
0fb0: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
0fc0: 34 20 37 20 31 32 38 20 38 20 38 38 20 38 20 32  4 7 128 8 88 8 2
0fd0: 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31  56 8 888 9 512 1
0fe0: 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37  0 1024 77 128 77
0ff0: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
1000: 70 64 61 74 65 2d 34 2e 34 20 7b 0a 20 20 65 78  pdate-4.4 {.  ex
1010: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
1020: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b 31 20  st1 SET f1=f1+1 
1030: 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d 0a 20  WHERE f2==128}. 
1040: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1050: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
1060: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1070: 7b 36 20 36 34 20 38 20 38 38 20 38 20 31 32 38  {6 64 8 88 8 128
1080: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
1090: 31 32 20 31 30 20 31 30 32 34 20 37 38 20 31 32  12 10 1024 78 12
10a0: 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65  8 778 128}.do_te
10b0: 73 74 20 75 70 64 61 74 65 2d 34 2e 35 20 7b 0a  st update-4.5 {.
10c0: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
10d0: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
10e0: 31 2d 31 20 57 48 45 52 45 20 66 31 3e 31 30 30  1-1 WHERE f1>100
10f0: 20 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20   and f2==128}.  
1100: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1110: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
1120: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1130: 36 20 36 34 20 38 20 38 38 20 38 20 31 32 38 20  6 64 8 88 8 128 
1140: 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31  8 256 8 888 9 51
1150: 32 20 31 30 20 31 30 32 34 20 37 38 20 31 32 38  2 10 1024 78 128
1160: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
1170: 74 20 75 70 64 61 74 65 2d 34 2e 36 20 7b 0a 20  t update-4.6 {. 
1180: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1190: 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e  RAGMA count_chan
11a0: 67 65 73 3d 6f 6e 3b 0a 20 20 20 20 55 50 44 41  ges=on;.    UPDA
11b0: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d  TE test1 SET f1=
11c0: 66 31 2d 31 20 57 48 45 52 45 20 66 31 3c 3d 31  f1-1 WHERE f1<=1
11d0: 30 30 20 61 6e 64 20 66 32 3d 3d 31 32 38 3b 0a  00 and f2==128;.
11e0: 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73    }.} {2}.do_tes
11f0: 74 20 75 70 64 61 74 65 2d 34 2e 37 20 7b 0a 20  t update-4.7 {. 
1200: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1210: 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e  RAGMA count_chan
1220: 67 65 73 3d 6f 66 66 3b 0a 20 20 20 20 53 45 4c  ges=off;.    SEL
1230: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
1240: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 0a   ORDER BY f1,f2.
1250: 20 20 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32    }.} {6 64 7 12
1260: 38 20 38 20 38 38 20 38 20 32 35 36 20 38 20 38  8 8 88 8 256 8 8
1270: 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34  88 9 512 10 1024
1280: 20 37 37 20 31 32 38 20 37 37 37 20 31 32 38 7d   77 128 777 128}
1290: 0a 0a 23 20 52 65 70 65 61 74 20 74 68 65 20 70  ..# Repeat the p
12a0: 72 65 76 69 6f 75 73 20 73 65 71 75 65 6e 63 65  revious sequence
12b0: 20 6f 66 20 74 65 73 74 73 20 77 69 74 68 20 61   of tests with a
12c0: 6e 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65  n index..#.do_te
12d0: 73 74 20 75 70 64 61 74 65 2d 35 2e 30 20 7b 0a  st update-5.0 {.
12e0: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
12f0: 45 20 49 4e 44 45 58 20 69 64 78 31 20 4f 4e 20  E INDEX idx1 ON 
1300: 74 65 73 74 31 28 66 31 29 7d 0a 20 20 65 78 65  test1(f1)}.  exe
1310: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1320: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
1330: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
1340: 34 20 37 20 31 32 38 20 38 20 38 38 20 38 20 32  4 7 128 8 88 8 2
1350: 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31  56 8 888 9 512 1
1360: 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37  0 1024 77 128 77
1370: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
1380: 70 64 61 74 65 2d 35 2e 31 20 7b 0a 20 20 65 78  pdate-5.1 {.  ex
1390: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
13a0: 73 74 31 20 53 45 54 20 66 32 3d 66 32 2b 31 20  st1 SET f2=f2+1 
13b0: 57 48 45 52 45 20 66 31 3d 3d 38 7d 0a 20 20 65  WHERE f1==8}.  e
13c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
13d0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
13e0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
13f0: 20 36 34 20 37 20 31 32 38 20 38 20 38 39 20 38   64 7 128 8 89 8
1400: 20 32 35 37 20 38 20 38 38 39 20 39 20 35 31 32   257 8 889 9 512
1410: 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20   10 1024 77 128 
1420: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
1430: 20 75 70 64 61 74 65 2d 35 2e 32 20 7b 0a 20 20   update-5.2 {.  
1440: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
1450: 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32 2d  test1 SET f2=f2-
1460: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 61 6e  1 WHERE f1==8 an
1470: 64 20 66 32 3e 38 30 30 7d 0a 20 20 65 78 65 63  d f2>800}.  exec
1480: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1490: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
14a0: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34  Y f1,f2}.} {6 64
14b0: 20 37 20 31 32 38 20 38 20 38 39 20 38 20 32 35   7 128 8 89 8 25
14c0: 37 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30  7 8 888 9 512 10
14d0: 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37   1024 77 128 777
14e0: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
14f0: 64 61 74 65 2d 35 2e 33 20 7b 0a 20 20 65 78 65  date-5.3 {.  exe
1500: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
1510: 74 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57  t1 SET f2=f2-1 W
1520: 48 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 66  HERE f1==8 and f
1530: 32 3c 38 30 30 7d 0a 20 20 65 78 65 63 73 71 6c  2<800}.  execsql
1540: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1550: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
1560: 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20  1,f2}.} {6 64 7 
1570: 31 32 38 20 38 20 38 38 20 38 20 32 35 36 20 38  128 8 88 8 256 8
1580: 20 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30   888 9 512 10 10
1590: 32 34 20 37 37 20 31 32 38 20 37 37 37 20 31 32  24 77 128 777 12
15a0: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
15b0: 65 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  e-5.4 {.  execsq
15c0: 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20  l {UPDATE test1 
15d0: 53 45 54 20 66 31 3d 66 31 2b 31 20 57 48 45 52  SET f1=f1+1 WHER
15e0: 45 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78 65  E f2==128}.  exe
15f0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1600: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
1610: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
1620: 34 20 38 20 38 38 20 38 20 31 32 38 20 38 20 32  4 8 88 8 128 8 2
1630: 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31  56 8 888 9 512 1
1640: 30 20 31 30 32 34 20 37 38 20 31 32 38 20 37 37  0 1024 78 128 77
1650: 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  8 128}.do_test u
1660: 70 64 61 74 65 2d 35 2e 34 2e 31 20 7b 0a 20 20  pdate-5.4.1 {.  
1670: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1680: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
1690: 52 45 20 66 31 3d 3d 37 38 20 4f 52 44 45 52 20  RE f1==78 ORDER 
16a0: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 38 20  BY f1,f2}.} {78 
16b0: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
16c0: 61 74 65 2d 35 2e 34 2e 32 20 7b 0a 20 20 65 78  ate-5.4.2 {.  ex
16d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
16e0: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
16f0: 20 66 31 3d 3d 37 37 38 20 4f 52 44 45 52 20 42   f1==778 ORDER B
1700: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 38 20  Y f1,f2}.} {778 
1710: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
1720: 61 74 65 2d 35 2e 34 2e 33 20 7b 0a 20 20 65 78  ate-5.4.3 {.  ex
1730: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1740: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
1750: 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59 20   f1==8 ORDER BY 
1760: 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38  f1,f2}.} {8 88 8
1770: 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38   128 8 256 8 888
1780: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
1790: 2d 35 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.5 {.  execsql
17a0: 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53   {UPDATE test1 S
17b0: 45 54 20 66 31 3d 66 31 2d 31 20 57 48 45 52 45  ET f1=f1-1 WHERE
17c0: 20 66 31 3e 31 30 30 20 61 6e 64 20 66 32 3d 3d   f1>100 and f2==
17d0: 31 32 38 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  128}.} {}.do_tes
17e0: 74 20 75 70 64 61 74 65 2d 35 2e 35 2e 31 20 7b  t update-5.5.1 {
17f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1800: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1810: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
1820: 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38 20 31  } {6 64 8 88 8 1
1830: 32 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39  28 8 256 8 888 9
1840: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 38 20   512 10 1024 78 
1850: 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f  128 777 128}.do_
1860: 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 35 2e  test update-5.5.
1870: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
1880: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
1890: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20  t1 WHERE f1==78 
18a0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
18b0: 7d 20 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65  } {78 128}.do_te
18c0: 73 74 20 75 70 64 61 74 65 2d 35 2e 35 2e 33 20  st update-5.5.3 
18d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
18e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
18f0: 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f   WHERE f1==778 O
1900: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
1910: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61   {}.do_test upda
1920: 74 65 2d 35 2e 35 2e 34 20 7b 0a 20 20 65 78 65  te-5.5.4 {.  exe
1930: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1940: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
1950: 66 31 3d 3d 37 37 37 20 4f 52 44 45 52 20 42 59  f1==777 ORDER BY
1960: 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31   f1,f2}.} {777 1
1970: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
1980: 74 65 2d 35 2e 35 2e 35 20 7b 0a 20 20 65 78 65  te-5.5.5 {.  exe
1990: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
19a0: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
19b0: 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59 20 66  f1==8 ORDER BY f
19c0: 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20  1,f2}.} {8 88 8 
19d0: 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38 7d  128 8 256 8 888}
19e0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
19f0: 35 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.6 {.  execsql 
1a00: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75  {.    PRAGMA cou
1a10: 6e 74 5f 63 68 61 6e 67 65 73 3d 6f 6e 3b 0a 20  nt_changes=on;. 
1a20: 20 20 20 55 50 44 41 54 45 20 74 65 73 74 31 20     UPDATE test1 
1a30: 53 45 54 20 66 31 3d 66 31 2d 31 20 57 48 45 52  SET f1=f1-1 WHER
1a40: 45 20 66 31 3c 3d 31 30 30 20 61 6e 64 20 66 32  E f1<=100 and f2
1a50: 3d 3d 31 32 38 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  ==128;.  }.} {2}
1a60: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
1a70: 35 2e 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  5.6.1 {.  execsq
1a80: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
1a90: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 6f 66 66  ount_changes=off
1aa0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1ab0: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
1ac0: 42 59 20 66 31 2c 66 32 0a 20 20 7d 0a 7d 20 7b  BY f1,f2.  }.} {
1ad0: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20  6 64 7 128 8 88 
1ae0: 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31  8 256 8 888 9 51
1af0: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
1b00: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
1b10: 74 20 75 70 64 61 74 65 2d 35 2e 36 2e 32 20 7b  t update-5.6.2 {
1b20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1b30: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1b40: 57 48 45 52 45 20 66 31 3d 3d 37 37 20 4f 52 44  WHERE f1==77 ORD
1b50: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1b60: 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  77 128}.do_test 
1b70: 75 70 64 61 74 65 2d 35 2e 36 2e 33 20 7b 0a 20  update-5.6.3 {. 
1b80: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1b90: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
1ba0: 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45  ERE f1==778 ORDE
1bb0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d  R BY f1,f2}.} {}
1bc0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
1bd0: 35 2e 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  5.6.4 {.  execsq
1be0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1bf0: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
1c00: 3d 37 37 37 20 4f 52 44 45 52 20 42 59 20 66 31  =777 ORDER BY f1
1c10: 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d  ,f2}.} {777 128}
1c20: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
1c30: 35 2e 36 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  5.6.5 {.  execsq
1c40: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1c50: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
1c60: 3d 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  =8 ORDER BY f1,f
1c70: 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35 36  2}.} {8 88 8 256
1c80: 20 38 20 38 38 38 7d 0a 0a 23 20 52 65 70 65 61   8 888}..# Repea
1c90: 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  t the previous s
1ca0: 65 71 75 65 6e 63 65 20 6f 66 20 74 65 73 74 73  equence of tests
1cb0: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
1cc0: 74 20 69 6e 64 65 78 2e 0a 23 0a 65 78 65 63 73  t index..#.execs
1cd0: 71 6c 20 7b 50 52 41 47 4d 41 20 73 79 6e 63 68  ql {PRAGMA synch
1ce0: 72 6f 6e 6f 75 73 3d 46 55 4c 4c 7d 0a 64 6f 5f  ronous=FULL}.do_
1cf0: 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 30 20  test update-6.0 
1d00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 52 4f  {.  execsql {DRO
1d10: 50 20 49 4e 44 45 58 20 69 64 78 31 7d 0a 20 20  P INDEX idx1}.  
1d20: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
1d30: 49 4e 44 45 58 20 69 64 78 31 20 4f 4e 20 74 65  INDEX idx1 ON te
1d40: 73 74 31 28 66 32 29 7d 0a 20 20 65 78 65 63 73  st1(f2)}.  execs
1d50: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
1d60: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
1d70: 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20   f1,f2}.} {6 64 
1d80: 37 20 31 32 38 20 38 20 38 38 20 38 20 32 35 36  7 128 8 88 8 256
1d90: 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30 20   8 888 9 512 10 
1da0: 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37 20  1024 77 128 777 
1db0: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
1dc0: 61 74 65 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63  ate-6.1 {.  exec
1dd0: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74  sql {UPDATE test
1de0: 31 20 53 45 54 20 66 32 3d 66 32 2b 31 20 57 48  1 SET f2=f2+1 WH
1df0: 45 52 45 20 66 31 3d 3d 38 7d 0a 20 20 65 78 65  ERE f1==8}.  exe
1e00: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1e10: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
1e20: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
1e30: 34 20 37 20 31 32 38 20 38 20 38 39 20 38 20 32  4 7 128 8 89 8 2
1e40: 35 37 20 38 20 38 38 39 20 39 20 35 31 32 20 31  57 8 889 9 512 1
1e50: 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37  0 1024 77 128 77
1e60: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
1e70: 70 64 61 74 65 2d 36 2e 31 2e 31 20 7b 0a 20 20  pdate-6.1.1 {.  
1e80: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1e90: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
1ea0: 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42  RE f1==8 ORDER B
1eb0: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 39  Y f1,f2}.} {8 89
1ec0: 20 38 20 32 35 37 20 38 20 38 38 39 7d 0a 64 6f   8 257 8 889}.do
1ed0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 31  _test update-6.1
1ee0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1ef0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
1f00: 73 74 31 20 57 48 45 52 45 20 66 32 3d 3d 38 39  st1 WHERE f2==89
1f10: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1f20: 0a 7d 20 7b 38 20 38 39 7d 0a 64 6f 5f 74 65 73  .} {8 89}.do_tes
1f30: 74 20 75 70 64 61 74 65 2d 36 2e 31 2e 33 20 7b  t update-6.1.3 {
1f40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1f50: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1f60: 57 48 45 52 45 20 66 31 3d 3d 38 38 20 4f 52 44  WHERE f1==88 ORD
1f70: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1f80: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
1f90: 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.2 {.  execsql
1fa0: 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53   {UPDATE test1 S
1fb0: 45 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45  ET f2=f2-1 WHERE
1fc0: 20 66 31 3d 3d 38 20 61 6e 64 20 66 32 3e 38 30   f1==8 and f2>80
1fd0: 30 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  0}.  execsql {SE
1fe0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
1ff0: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
2000: 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20  }.} {6 64 7 128 
2010: 38 20 38 39 20 38 20 32 35 37 20 38 20 38 38 38  8 89 8 257 8 888
2020: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
2030: 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64  7 128 777 128}.d
2040: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e  o_test update-6.
2050: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  3 {.  execsql {U
2060: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
2070: 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31  f2=f2-1 WHERE f1
2080: 3d 3d 38 20 61 6e 64 20 66 32 3c 38 30 30 7d 0a  ==8 and f2<800}.
2090: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
20a0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
20b0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
20c0: 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38   {6 64 7 128 8 8
20d0: 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20  8 8 256 8 888 9 
20e0: 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31  512 10 1024 77 1
20f0: 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74  28 777 128}.do_t
2100: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 33 2e 31  est update-6.3.1
2110: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2120: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
2130: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52  1 WHERE f1==8 OR
2140: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2150: 7b 38 20 38 38 20 38 20 32 35 36 20 38 20 38 38  {8 88 8 256 8 88
2160: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
2170: 65 2d 36 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63  e-6.3.2 {.  exec
2180: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2190: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66  OM test1 WHERE f
21a0: 32 3d 3d 38 39 20 4f 52 44 45 52 20 42 59 20 66  2==89 ORDER BY f
21b0: 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  1,f2}.} {}.do_te
21c0: 73 74 20 75 70 64 61 74 65 2d 36 2e 33 2e 33 20  st update-6.3.3 
21d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
21e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
21f0: 20 57 48 45 52 45 20 66 32 3d 3d 38 38 20 4f 52   WHERE f2==88 OR
2200: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2210: 7b 38 20 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75  {8 88}.do_test u
2220: 70 64 61 74 65 2d 36 2e 34 20 7b 0a 20 20 65 78  pdate-6.4 {.  ex
2230: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
2240: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b 31 20  st1 SET f1=f1+1 
2250: 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d 0a 20  WHERE f2==128}. 
2260: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2270: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
2280: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2290: 7b 36 20 36 34 20 38 20 38 38 20 38 20 31 32 38  {6 64 8 88 8 128
22a0: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
22b0: 31 32 20 31 30 20 31 30 32 34 20 37 38 20 31 32  12 10 1024 78 12
22c0: 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65  8 778 128}.do_te
22d0: 73 74 20 75 70 64 61 74 65 2d 36 2e 34 2e 31 20  st update-6.4.1 
22e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
22f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
2300: 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20 4f 52   WHERE f1==78 OR
2310: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2320: 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  {78 128}.do_test
2330: 20 75 70 64 61 74 65 2d 36 2e 34 2e 32 20 7b 0a   update-6.4.2 {.
2340: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2350: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2360: 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44  HERE f1==778 ORD
2370: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
2380: 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  778 128}.do_test
2390: 20 75 70 64 61 74 65 2d 36 2e 34 2e 33 20 7b 0a   update-6.4.3 {.
23a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
23b0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
23c0: 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52  HERE f1==8 ORDER
23d0: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
23e0: 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38  88 8 128 8 256 8
23f0: 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   888}.do_test up
2400: 64 61 74 65 2d 36 2e 35 20 7b 0a 20 20 65 78 65  date-6.5 {.  exe
2410: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
2420: 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20 57  t1 SET f1=f1-1 W
2430: 48 45 52 45 20 66 31 3e 31 30 30 20 61 6e 64 20  HERE f1>100 and 
2440: 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78 65 63 73  f2==128}.  execs
2450: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
2460: 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59  M test1 ORDER BY
2470: 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20   f1,f2}.} {6 64 
2480: 38 20 38 38 20 38 20 31 32 38 20 38 20 32 35 36  8 88 8 128 8 256
2490: 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30 20   8 888 9 512 10 
24a0: 31 30 32 34 20 37 38 20 31 32 38 20 37 37 37 20  1024 78 128 777 
24b0: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
24c0: 61 74 65 2d 36 2e 35 2e 31 20 7b 0a 20 20 65 78  ate-6.5.1 {.  ex
24d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
24e0: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
24f0: 20 66 31 3d 3d 37 38 20 4f 52 44 45 52 20 42 59   f1==78 ORDER BY
2500: 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 38 20 31 32   f1,f2}.} {78 12
2510: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
2520: 65 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63  e-6.5.2 {.  exec
2530: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2540: 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66  OM test1 WHERE f
2550: 31 3d 3d 37 37 38 20 4f 52 44 45 52 20 42 59 20  1==778 ORDER BY 
2560: 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  f1,f2}.} {}.do_t
2570: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 35 2e 33  est update-6.5.3
2580: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2590: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
25a0: 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 37 20  1 WHERE f1==777 
25b0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
25c0: 7d 20 7b 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74  } {777 128}.do_t
25d0: 65 73 74 20 75 70 64 61 74 65 2d 36 2e 35 2e 34  est update-6.5.4
25e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
25f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
2600: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52  1 WHERE f1==8 OR
2610: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2620: 7b 38 20 38 38 20 38 20 31 32 38 20 38 20 32 35  {8 88 8 128 8 25
2630: 36 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74  6 8 888}.do_test
2640: 20 75 70 64 61 74 65 2d 36 2e 36 20 7b 0a 20 20   update-6.6 {.  
2650: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
2660: 74 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d  test1 SET f1=f1-
2670: 31 20 57 48 45 52 45 20 66 31 3c 3d 31 30 30 20  1 WHERE f1<=100 
2680: 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65  and f2==128}.  e
2690: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
26a0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
26b0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
26c0: 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38   64 7 128 8 88 8
26d0: 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32   256 8 888 9 512
26e0: 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20   10 1024 77 128 
26f0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
2700: 20 75 70 64 61 74 65 2d 36 2e 36 2e 31 20 7b 0a   update-6.6.1 {.
2710: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2720: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2730: 48 45 52 45 20 66 31 3d 3d 37 37 20 4f 52 44 45  HERE f1==77 ORDE
2740: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37  R BY f1,f2}.} {7
2750: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
2760: 70 64 61 74 65 2d 36 2e 36 2e 32 20 7b 0a 20 20  pdate-6.6.2 {.  
2770: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2780: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
2790: 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45 52  RE f1==778 ORDER
27a0: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a   BY f1,f2}.} {}.
27b0: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
27c0: 2e 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .6.3 {.  execsql
27d0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
27e0: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
27f0: 37 37 37 20 4f 52 44 45 52 20 42 59 20 66 31 2c  777 ORDER BY f1,
2800: 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d 0a  f2}.} {777 128}.
2810: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
2820: 2e 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .6.4 {.  execsql
2830: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2840: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
2850: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
2860: 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35 36 20  }.} {8 88 8 256 
2870: 38 20 38 38 38 7d 0a 0a 23 20 52 65 70 65 61 74  8 888}..# Repeat
2880: 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 65   the previous se
2890: 71 75 65 6e 63 65 20 6f 66 20 74 65 73 74 73 20  quence of tests 
28a0: 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 0a 23 20  with multiple.# 
28b0: 69 6e 64 69 63 65 73 0a 23 0a 64 6f 5f 74 65 73  indices.#.do_tes
28c0: 74 20 75 70 64 61 74 65 2d 37 2e 30 20 7b 0a 20  t update-7.0 {. 
28d0: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
28e0: 20 49 4e 44 45 58 20 69 64 78 32 20 4f 4e 20 74   INDEX idx2 ON t
28f0: 65 73 74 31 28 66 32 29 7d 0a 20 20 65 78 65 63  est1(f2)}.  exec
2900: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
2910: 58 20 69 64 78 33 20 4f 4e 20 74 65 73 74 31 28  X idx3 ON test1(
2920: 66 31 2c 66 32 29 7d 0a 20 20 65 78 65 63 73 71  f1,f2)}.  execsq
2930: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
2940: 20 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20   test1 ORDER BY 
2950: 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37  f1,f2}.} {6 64 7
2960: 20 31 32 38 20 38 20 38 38 20 38 20 32 35 36 20   128 8 88 8 256 
2970: 38 20 38 38 38 20 39 20 35 31 32 20 31 30 20 31  8 888 9 512 10 1
2980: 30 32 34 20 37 37 20 31 32 38 20 37 37 37 20 31  024 77 128 777 1
2990: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
29a0: 74 65 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73  te-7.1 {.  execs
29b0: 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31  ql {UPDATE test1
29c0: 20 53 45 54 20 66 32 3d 66 32 2b 31 20 57 48 45   SET f2=f2+1 WHE
29d0: 52 45 20 66 31 3d 3d 38 7d 0a 20 20 65 78 65 63  RE f1==8}.  exec
29e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
29f0: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2a00: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34  Y f1,f2}.} {6 64
2a10: 20 37 20 31 32 38 20 38 20 38 39 20 38 20 32 35   7 128 8 89 8 25
2a20: 37 20 38 20 38 38 39 20 39 20 35 31 32 20 31 30  7 8 889 9 512 10
2a30: 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37   1024 77 128 777
2a40: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
2a50: 64 61 74 65 2d 37 2e 31 2e 31 20 7b 0a 20 20 65  date-7.1.1 {.  e
2a60: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2a70: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
2a80: 45 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59  E f1==8 ORDER BY
2a90: 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 39 20   f1,f2}.} {8 89 
2aa0: 38 20 32 35 37 20 38 20 38 38 39 7d 0a 64 6f 5f  8 257 8 889}.do_
2ab0: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 31 2e  test update-7.1.
2ac0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
2ad0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2ae0: 74 31 20 57 48 45 52 45 20 66 32 3d 3d 38 39 20  t1 WHERE f2==89 
2af0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2b00: 7d 20 7b 38 20 38 39 7d 0a 64 6f 5f 74 65 73 74  } {8 89}.do_test
2b10: 20 75 70 64 61 74 65 2d 37 2e 31 2e 33 20 7b 0a   update-7.1.3 {.
2b20: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2b30: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2b40: 48 45 52 45 20 66 31 3d 3d 38 38 20 4f 52 44 45  HERE f1==88 ORDE
2b50: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d  R BY f1,f2}.} {}
2b60: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
2b70: 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.2 {.  execsql 
2b80: 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45  {UPDATE test1 SE
2b90: 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20  T f2=f2-1 WHERE 
2ba0: 66 31 3d 3d 38 20 61 6e 64 20 66 32 3e 38 30 30  f1==8 and f2>800
2bb0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
2bc0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
2bd0: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
2be0: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
2bf0: 20 38 39 20 38 20 32 35 37 20 38 20 38 38 38 20   89 8 257 8 888 
2c00: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
2c10: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
2c20: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 33  _test update-7.3
2c30: 20 7b 0a 20 20 23 20 65 78 70 6c 61 69 6e 20 7b   {.  # explain {
2c40: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
2c50: 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66   f2=f2-1 WHERE f
2c60: 31 3d 3d 38 20 61 6e 64 20 46 32 3c 33 30 30 7d  1==8 and F2<300}
2c70: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
2c80: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d  TE test1 SET f2=
2c90: 66 32 2d 31 20 57 48 45 52 45 20 66 31 3d 3d 38  f2-1 WHERE f1==8
2ca0: 20 61 6e 64 20 66 32 3c 38 30 30 7d 0a 20 20 65   and f2<800}.  e
2cb0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2cc0: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
2cd0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
2ce0: 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38   64 7 128 8 88 8
2cf0: 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32   256 8 888 9 512
2d00: 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20   10 1024 77 128 
2d10: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
2d20: 20 75 70 64 61 74 65 2d 37 2e 33 2e 31 20 7b 0a   update-7.3.1 {.
2d30: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2d40: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2d50: 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52  HERE f1==8 ORDER
2d60: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
2d70: 38 38 20 38 20 32 35 36 20 38 20 38 38 38 7d 0a  88 8 256 8 888}.
2d80: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37  do_test update-7
2d90: 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.2 {.  execsql
2da0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2db0: 74 65 73 74 31 20 57 48 45 52 45 20 66 32 3d 3d  test1 WHERE f2==
2dc0: 38 39 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  89 ORDER BY f1,f
2dd0: 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  2}.} {}.do_test 
2de0: 75 70 64 61 74 65 2d 37 2e 33 2e 33 20 7b 0a 20  update-7.3.3 {. 
2df0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2e00: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
2e10: 45 52 45 20 66 32 3d 3d 38 38 20 4f 52 44 45 52  ERE f2==88 ORDER
2e20: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
2e30: 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  88}.do_test upda
2e40: 74 65 2d 37 2e 34 20 7b 0a 20 20 65 78 65 63 73  te-7.4 {.  execs
2e50: 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31  ql {UPDATE test1
2e60: 20 53 45 54 20 66 31 3d 66 31 2b 31 20 57 48 45   SET f1=f1+1 WHE
2e70: 52 45 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78  RE f2==128}.  ex
2e80: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2e90: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
2ea0: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20   BY f1,f2}.} {6 
2eb0: 36 34 20 38 20 38 38 20 38 20 31 32 38 20 38 20  64 8 88 8 128 8 
2ec0: 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20  256 8 888 9 512 
2ed0: 31 30 20 31 30 32 34 20 37 38 20 31 32 38 20 37  10 1024 78 128 7
2ee0: 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  78 128}.do_test 
2ef0: 75 70 64 61 74 65 2d 37 2e 34 2e 31 20 7b 0a 20  update-7.4.1 {. 
2f00: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2f10: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
2f20: 45 52 45 20 66 31 3d 3d 37 38 20 4f 52 44 45 52  ERE f1==78 ORDER
2f30: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 38   BY f1,f2}.} {78
2f40: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
2f50: 64 61 74 65 2d 37 2e 34 2e 32 20 7b 0a 20 20 65  date-7.4.2 {.  e
2f60: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2f70: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
2f80: 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45 52 20  E f1==778 ORDER 
2f90: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 38  BY f1,f2}.} {778
2fa0: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
2fb0: 64 61 74 65 2d 37 2e 34 2e 33 20 7b 0a 20 20 65  date-7.4.3 {.  e
2fc0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2fd0: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
2fe0: 45 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59  E f1==8 ORDER BY
2ff0: 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20   f1,f2}.} {8 88 
3000: 38 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38  8 128 8 256 8 88
3010: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
3020: 65 2d 37 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  e-7.5 {.  execsq
3030: 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20  l {UPDATE test1 
3040: 53 45 54 20 66 31 3d 66 31 2d 31 20 57 48 45 52  SET f1=f1-1 WHER
3050: 45 20 66 31 3e 31 30 30 20 61 6e 64 20 66 32 3d  E f1>100 and f2=
3060: 3d 31 32 38 7d 0a 20 20 65 78 65 63 73 71 6c 20  =128}.  execsql 
3070: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
3080: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
3090: 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38  ,f2}.} {6 64 8 8
30a0: 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38 20  8 8 128 8 256 8 
30b0: 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32  888 9 512 10 102
30c0: 34 20 37 38 20 31 32 38 20 37 37 37 20 31 32 38  4 78 128 777 128
30d0: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
30e0: 2d 37 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  -7.5.1 {.  execs
30f0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
3100: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31  M test1 WHERE f1
3110: 3d 3d 37 38 20 4f 52 44 45 52 20 42 59 20 66 31  ==78 ORDER BY f1
3120: 2c 66 32 7d 0a 7d 20 7b 37 38 20 31 32 38 7d 0a  ,f2}.} {78 128}.
3130: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37  do_test update-7
3140: 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.2 {.  execsql
3150: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
3160: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
3170: 37 37 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c  778 ORDER BY f1,
3180: 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  f2}.} {}.do_test
3190: 20 75 70 64 61 74 65 2d 37 2e 35 2e 33 20 7b 0a   update-7.5.3 {.
31a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
31b0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
31c0: 48 45 52 45 20 66 31 3d 3d 37 37 37 20 4f 52 44  HERE f1==777 ORD
31d0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
31e0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
31f0: 20 75 70 64 61 74 65 2d 37 2e 35 2e 34 20 7b 0a   update-7.5.4 {.
3200: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3210: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
3220: 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52  HERE f1==8 ORDER
3230: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
3240: 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38  88 8 128 8 256 8
3250: 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   888}.do_test up
3260: 64 61 74 65 2d 37 2e 36 20 7b 0a 20 20 65 78 65  date-7.6 {.  exe
3270: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
3280: 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20 57  t1 SET f1=f1-1 W
3290: 48 45 52 45 20 66 31 3c 3d 31 30 30 20 61 6e 64  HERE f1<=100 and
32a0: 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78 65 63   f2==128}.  exec
32b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
32c0: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
32d0: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34  Y f1,f2}.} {6 64
32e0: 20 37 20 31 32 38 20 38 20 38 38 20 38 20 32 35   7 128 8 88 8 25
32f0: 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30  6 8 888 9 512 10
3300: 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37   1024 77 128 777
3310: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
3320: 64 61 74 65 2d 37 2e 36 2e 31 20 7b 0a 20 20 65  date-7.6.1 {.  e
3330: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
3340: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
3350: 45 20 66 31 3d 3d 37 37 20 4f 52 44 45 52 20 42  E f1==77 ORDER B
3360: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 20 31  Y f1,f2}.} {77 1
3370: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
3380: 74 65 2d 37 2e 36 2e 32 20 7b 0a 20 20 65 78 65  te-7.6.2 {.  exe
3390: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
33a0: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
33b0: 66 31 3d 3d 37 37 38 20 4f 52 44 45 52 20 42 59  f1==778 ORDER BY
33c0: 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f   f1,f2}.} {}.do_
33d0: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 36 2e  test update-7.6.
33e0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
33f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3400: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 37  t1 WHERE f1==777
3410: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
3420: 0a 7d 20 7b 37 37 37 20 31 32 38 7d 0a 64 6f 5f  .} {777 128}.do_
3430: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 36 2e  test update-7.6.
3440: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
3450: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3460: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f  t1 WHERE f1==8 O
3470: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
3480: 20 7b 38 20 38 38 20 38 20 32 35 36 20 38 20 38   {8 88 8 256 8 8
3490: 38 38 7d 0a 0a 23 20 45 72 72 6f 72 20 6d 65 73  88}..# Error mes
34a0: 73 61 67 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20  sages.#.do_test 
34b0: 75 70 64 61 74 65 2d 39 2e 31 20 7b 0a 20 20 73  update-9.1 {.  s
34c0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
34d0: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
34e0: 45 20 74 65 73 74 31 20 53 45 54 20 78 3d 31 31  E test1 SET x=11
34f0: 20 57 48 45 52 45 20 66 31 3d 31 30 32 35 0a 20   WHERE f1=1025. 
3500: 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65   }} msg].  lappe
3510: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
3520: 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20  no such column: 
3530: 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  x}}.do_test upda
3540: 74 65 2d 39 2e 32 20 7b 0a 20 20 73 65 74 20 76  te-9.2 {.  set v
3550: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
3560: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 65   {.    UPDATE te
3570: 73 74 31 20 53 45 54 20 66 31 3d 78 28 31 31 29  st1 SET f1=x(11)
3580: 20 57 48 45 52 45 20 66 31 3d 31 30 32 35 0a 20   WHERE f1=1025. 
3590: 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65   }} msg].  lappe
35a0: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
35b0: 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e  no such function
35c0: 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70  : x}}.do_test up
35d0: 64 61 74 65 2d 39 2e 33 20 7b 0a 20 20 73 65 74  date-9.3 {.  set
35e0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
35f0: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
3600: 74 65 73 74 31 20 53 45 54 20 66 31 3d 31 31 20  test1 SET f1=11 
3610: 57 48 45 52 45 20 78 3d 31 30 32 35 0a 20 20 7d  WHERE x=1025.  }
3620: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
3630: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f   v $msg.} {1 {no
3640: 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d   such column: x}
3650: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
3660: 2d 39 2e 34 20 7b 0a 20 20 73 65 74 20 76 20 5b  -9.4 {.  set v [
3670: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
3680: 0a 20 20 20 20 55 50 44 41 54 45 20 74 65 73 74  .    UPDATE test
3690: 31 20 53 45 54 20 66 31 3d 31 31 20 57 48 45 52  1 SET f1=11 WHER
36a0: 45 20 78 28 66 31 29 3d 31 30 32 35 0a 20 20 7d  E x(f1)=1025.  }
36b0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
36c0: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f   v $msg.} {1 {no
36d0: 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20   such function: 
36e0: 78 7d 7d 0a 0a 23 20 54 72 79 20 64 6f 69 6e 67  x}}..# Try doing
36f0: 20 75 70 64 61 74 65 73 20 6f 6e 20 61 20 75 6e   updates on a un
3700: 69 71 75 65 20 63 6f 6c 75 6d 6e 20 77 68 65 72  ique column wher
3710: 65 20 74 68 65 20 76 61 6c 75 65 20 64 6f 65 73  e the value does
3720: 20 6e 6f 74 0a 23 20 72 65 61 6c 6c 79 20 63 68   not.# really ch
3730: 61 6e 67 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ange..#.do_test 
3740: 75 70 64 61 74 65 2d 31 30 2e 31 20 7b 0a 20 20  update-10.1 {.  
3750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
3760: 4f 50 20 54 41 42 4c 45 20 74 65 73 74 31 3b 0a  OP TABLE test1;.
3770: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3780: 20 74 31 28 0a 20 20 20 20 20 20 20 61 20 69 6e   t1(.       a in
3790: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
37a0: 79 2c 0a 20 20 20 20 20 20 20 62 20 55 4e 49 51  y,.       b UNIQ
37b0: 55 45 2c 20 0a 20 20 20 20 20 20 20 63 2c 20 64  UE, .       c, d
37c0: 2c 0a 20 20 20 20 20 20 20 65 2c 20 66 2c 0a 20  ,.       e, f,. 
37d0: 20 20 20 20 20 20 55 4e 49 51 55 45 28 63 2c 64        UNIQUE(c,d
37e0: 29 0a 20 20 20 20 29 3b 0a 20 20 20 20 49 4e 53  ).    );.    INS
37f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3800: 45 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36 29 3b  ES(1,2,3,4,5,6);
3810: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3820: 20 74 31 20 56 41 4c 55 45 53 28 32 2c 33 2c 34   t1 VALUES(2,3,4
3830: 2c 34 2c 36 2c 37 29 3b 0a 20 20 20 20 53 45 4c  ,4,6,7);.    SEL
3840: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20  ECT * FROM t1.  
3850: 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36  }.} {1 2 3 4 5 6
3860: 20 32 20 33 20 34 20 34 20 36 20 37 7d 0a 64 6f   2 3 4 4 6 7}.do
3870: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e  _test update-10.
3880: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
3890: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
38a0: 45 54 20 61 3d 31 2c 20 65 3d 39 20 57 48 45 52  ET a=1, e=9 WHER
38b0: 45 20 66 3d 36 3b 0a 20 20 20 20 53 45 4c 45 43  E f=6;.    SELEC
38c0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
38d0: 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 20 39  .} {0 {1 2 3 4 9
38e0: 20 36 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d   6 2 3 4 4 6 7}}
38f0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3900: 31 30 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  10.3 {.  catchsq
3910: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
3920: 31 20 53 45 54 20 61 3d 31 2c 20 65 3d 31 30 20  1 SET a=1, e=10 
3930: 57 48 45 52 45 20 66 3d 37 3b 0a 20 20 20 20 53  WHERE f=7;.    S
3940: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
3950: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51 55  .  }.} {1 {UNIQU
3960: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  E constraint fai
3970: 6c 65 64 3a 20 74 31 2e 61 7d 7d 0a 64 6f 5f 74  led: t1.a}}.do_t
3980: 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 34 20  est update-10.4 
3990: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
39a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
39b0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31   t1;.  }.} {0 {1
39c0: 20 32 20 33 20 34 20 39 20 36 20 32 20 33 20 34   2 3 4 9 6 2 3 4
39d0: 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74   4 6 7}}.do_test
39e0: 20 75 70 64 61 74 65 2d 31 30 2e 35 20 7b 0a 20   update-10.5 {. 
39f0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3a00: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
3a10: 32 2c 20 65 3d 31 31 20 57 48 45 52 45 20 66 3d  2, e=11 WHERE f=
3a20: 36 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  6;.    SELECT * 
3a30: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
3a40: 30 20 7b 31 20 32 20 33 20 34 20 31 31 20 36 20  0 {1 2 3 4 11 6 
3a50: 32 20 33 20 34 20 34 20 36 20 37 7d 7d 0a 64 6f  2 3 4 4 6 7}}.do
3a60: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e  _test update-10.
3a70: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
3a80: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
3a90: 45 54 20 62 3d 32 2c 20 65 3d 31 32 20 57 48 45  ET b=2, e=12 WHE
3aa0: 52 45 20 66 3d 37 3b 0a 20 20 20 20 53 45 4c 45  RE f=7;.    SELE
3ab0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
3ac0: 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51 55 45 20 63  }.} {1 {UNIQUE c
3ad0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
3ae0: 3a 20 74 31 2e 62 7d 7d 0a 64 6f 5f 74 65 73 74  : t1.b}}.do_test
3af0: 20 75 70 64 61 74 65 2d 31 30 2e 37 20 7b 0a 20   update-10.7 {. 
3b00: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3b10: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
3b20: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20  ;.  }.} {0 {1 2 
3b30: 33 20 34 20 31 31 20 36 20 32 20 33 20 34 20 34  3 4 11 6 2 3 4 4
3b40: 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75   6 7}}.do_test u
3b50: 70 64 61 74 65 2d 31 30 2e 38 20 7b 0a 20 20 63  pdate-10.8 {.  c
3b60: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50  atchsql {.    UP
3b70: 44 41 54 45 20 74 31 20 53 45 54 20 63 3d 33 2c  DATE t1 SET c=3,
3b80: 20 64 3d 34 2c 20 65 3d 31 33 20 57 48 45 52 45   d=4, e=13 WHERE
3b90: 20 66 3d 36 3b 0a 20 20 20 20 53 45 4c 45 43 54   f=6;.    SELECT
3ba0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   * FROM t1;.  }.
3bb0: 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 20 31 33  } {0 {1 2 3 4 13
3bc0: 20 36 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d   6 2 3 4 4 6 7}}
3bd0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3be0: 31 30 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71  10.9 {.  catchsq
3bf0: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
3c00: 31 20 53 45 54 20 63 3d 33 2c 20 64 3d 34 2c 20  1 SET c=3, d=4, 
3c10: 65 3d 31 34 20 57 48 45 52 45 20 66 3d 37 3b 0a  e=14 WHERE f=7;.
3c20: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3c30: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  M t1;.  }.} {1 {
3c40: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
3c50: 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 63 2c 20  t failed: t1.c, 
3c60: 74 31 2e 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 75  t1.d}}.do_test u
3c70: 70 64 61 74 65 2d 31 30 2e 31 30 20 7b 0a 20 20  pdate-10.10 {.  
3c80: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
3c90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
3ca0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33  .  }.} {0 {1 2 3
3cb0: 20 34 20 31 33 20 36 20 32 20 33 20 34 20 34 20   4 13 6 2 3 4 4 
3cc0: 36 20 37 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  6 7}}..# Make su
3cd0: 72 65 20 77 65 20 63 61 6e 20 68 61 6e 64 6c 65  re we can handle
3ce0: 20 61 20 73 75 62 71 75 65 72 79 20 69 6e 20 74   a subquery in t
3cf0: 68 65 20 77 68 65 72 65 20 63 6c 61 75 73 65 2e  he where clause.
3d00: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62  .#.ifcapable sub
3d10: 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73  query {.  do_tes
3d20: 74 20 75 70 64 61 74 65 2d 31 31 2e 31 20 7b 0a  t update-11.1 {.
3d30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
3d40: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
3d50: 54 20 65 3d 65 2b 31 20 57 48 45 52 45 20 62 20  T e=e+1 WHERE b 
3d60: 49 4e 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f  IN (SELECT b FRO
3d70: 4d 20 74 31 29 3b 0a 20 20 20 20 20 20 53 45 4c  M t1);.      SEL
3d80: 45 43 54 20 62 2c 65 20 46 52 4f 4d 20 74 31 3b  ECT b,e FROM t1;
3d90: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 34  .    }.  } {2 14
3da0: 20 33 20 37 7d 0a 20 20 64 6f 5f 74 65 73 74 20   3 7}.  do_test 
3db0: 75 70 64 61 74 65 2d 31 31 2e 32 20 7b 0a 20 20  update-11.2 {.  
3dc0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3dd0: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
3de0: 65 3d 65 2b 31 20 57 48 45 52 45 20 61 20 49 4e  e=e+1 WHERE a IN
3df0: 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   (SELECT a FROM 
3e00: 74 31 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  t1);.      SELEC
3e10: 54 20 61 2c 65 20 46 52 4f 4d 20 74 31 3b 0a 20  T a,e FROM t1;. 
3e20: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 31 35 20 32     }.  } {1 15 2
3e30: 20 38 7d 0a 7d 0a 0a 69 6e 74 65 67 72 69 74 79   8}.}..integrity
3e40: 5f 63 68 65 63 6b 20 75 70 64 61 74 65 2d 31 32  _check update-12
3e50: 2e 31 0a 0a 23 20 54 69 63 6b 65 74 20 36 30 32  .1..# Ticket 602
3e60: 2e 20 20 55 70 64 61 74 65 73 20 73 68 6f 75 6c  .  Updates shoul
3e70: 64 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 73  d occur in the s
3e80: 61 6d 65 20 6f 72 64 65 72 20 61 73 20 74 68 65  ame order as the
3e90: 20 72 65 63 6f 72 64 73 0a 23 20 77 65 72 65 20   records.# were 
3ea0: 64 69 73 63 6f 76 65 72 65 64 20 69 6e 20 74 68  discovered in th
3eb0: 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a  e WHERE clause..
3ec0: 23 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  #.do_test update
3ed0: 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -13.1 {.  execsq
3ee0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
3ef0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3f00: 74 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52  t2(a);.    INSER
3f10: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
3f20: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
3f30: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
3f40: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3f50: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 32  TO t2 SELECT a+2
3f60: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e   FROM t2;.    IN
3f70: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
3f80: 45 43 54 20 61 2b 34 20 46 52 4f 4d 20 74 32 3b  ECT a+4 FROM t2;
3f90: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3fa0: 20 74 32 20 53 45 4c 45 43 54 20 61 2b 38 20 46   t2 SELECT a+8 F
3fb0: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
3fc0: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
3fd0: 54 20 61 2b 31 36 20 46 52 4f 4d 20 74 32 3b 0a  T a+16 FROM t2;.
3fe0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3ff0: 74 32 20 53 45 4c 45 43 54 20 61 2b 33 32 20 46  t2 SELECT a+32 F
4000: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
4010: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
4020: 54 20 61 2b 36 34 20 46 52 4f 4d 20 74 32 3b 0a  T a+64 FROM t2;.
4030: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4040: 74 32 20 53 45 4c 45 43 54 20 61 2b 31 32 38 20  t2 SELECT a+128 
4050: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
4060: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
4070: 43 54 20 61 2b 32 35 36 20 46 52 4f 4d 20 74 32  CT a+256 FROM t2
4080: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
4090: 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 35 31  O t2 SELECT a+51
40a0: 32 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49  2 FROM t2;.    I
40b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
40c0: 4c 45 43 54 20 61 2b 31 30 32 34 20 46 52 4f 4d  LECT a+1024 FROM
40d0: 20 74 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b   t2;.    COMMIT;
40e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
40f0: 74 28 2a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20  t(*) FROM t2;.  
4100: 7d 0a 7d 20 7b 32 30 34 38 7d 0a 64 6f 5f 74 65  }.} {2048}.do_te
4110: 73 74 20 75 70 64 61 74 65 2d 31 33 2e 32 20 7b  st update-13.2 {
4120: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4130: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4140: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
4150: 3d 72 6f 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 32  =rowid;.  }.} {2
4160: 30 34 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  048}.do_test upd
4170: 61 74 65 2d 31 33 2e 33 20 7b 0a 20 20 65 78 65  ate-13.3 {.  exe
4180: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
4190: 45 20 74 32 20 53 45 54 20 72 6f 77 69 64 3d 72  E t2 SET rowid=r
41a0: 6f 77 69 64 2d 31 3b 0a 20 20 20 20 53 45 4c 45  owid-1;.    SELE
41b0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
41c0: 20 74 32 20 57 48 45 52 45 20 61 3d 72 6f 77 69   t2 WHERE a=rowi
41d0: 64 2b 31 3b 0a 20 20 7d 0a 7d 20 7b 32 30 34 38  d+1;.  }.} {2048
41e0: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
41f0: 2d 31 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -13.3 {.  execsq
4200: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
4210: 32 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69  2 SET rowid=rowi
4220: 64 2b 31 30 30 30 30 3b 0a 20 20 20 20 55 50 44  d+10000;.    UPD
4230: 41 54 45 20 74 32 20 53 45 54 20 72 6f 77 69 64  ATE t2 SET rowid
4240: 3d 72 6f 77 69 64 2d 39 39 39 39 3b 0a 20 20 20  =rowid-9999;.   
4250: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4260: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
4270: 3d 72 6f 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 32  =rowid;.  }.} {2
4280: 30 34 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  048}.do_test upd
4290: 61 74 65 2d 31 33 2e 34 20 7b 0a 20 20 65 78 65  ate-13.4 {.  exe
42a0: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
42b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
42c0: 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 32 30  O t2 SELECT a+20
42d0: 34 38 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20  48 FROM t2;.    
42e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
42f0: 45 4c 45 43 54 20 61 2b 34 30 39 36 20 46 52 4f  ELECT a+4096 FRO
4300: 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t2;.    INSERT
4310: 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20   INTO t2 SELECT 
4320: 61 2b 38 31 39 32 20 46 52 4f 4d 20 74 32 3b 0a  a+8192 FROM t2;.
4330: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
4340: 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52  (*) FROM t2 WHER
4350: 45 20 61 3d 72 6f 77 69 64 3b 0a 20 20 20 20 43  E a=rowid;.    C
4360: 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 31 36 33  OMMIT;.  }.} 163
4370: 38 34 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  84.do_test updat
4380: 65 2d 31 33 2e 35 20 7b 0a 20 20 65 78 65 63 73  e-13.5 {.  execs
4390: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
43a0: 74 32 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77  t2 SET rowid=row
43b0: 69 64 2d 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  id-1;.    SELECT
43c0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
43d0: 32 20 57 48 45 52 45 20 61 3d 72 6f 77 69 64 2b  2 WHERE a=rowid+
43e0: 31 3b 0a 20 20 7d 0a 7d 20 31 36 33 38 34 0a 0a  1;.  }.} 16384..
43f0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
4400: 75 70 64 61 74 65 2d 31 33 2e 36 0a 0a 69 66 63  update-13.6..ifc
4410: 61 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72 7d  apable {trigger}
4420: 20 7b 0a 23 20 54 65 73 74 20 66 6f 72 20 70 72   {.# Test for pr
4430: 6f 70 65 72 20 64 65 74 65 63 74 69 6f 6e 20 6f  oper detection o
4440: 66 20 6d 61 6c 66 6f 72 6d 65 64 20 57 48 45 4e  f malformed WHEN
4450: 20 63 6c 61 75 73 65 73 20 6f 6e 20 55 50 44 41   clauses on UPDA
4460: 54 45 20 74 72 69 67 67 65 72 73 2e 0a 23 0a 64  TE triggers..#.d
4470: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 34  o_test update-14
4480: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
4490: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
44a0: 45 20 74 33 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t3(a,b,c);.   
44b0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
44c0: 74 33 72 31 20 42 45 46 4f 52 45 20 55 50 44 41  t3r1 BEFORE UPDA
44d0: 54 45 20 6f 6e 20 74 33 20 57 48 45 4e 20 6e 6f  TE on t3 WHEN no
44e0: 73 75 63 68 63 6f 6c 20 42 45 47 49 4e 0a 20 20  suchcol BEGIN.  
44f0: 20 20 20 20 53 45 4c 45 43 54 20 27 69 6c 6c 65      SELECT 'ille
4500: 67 61 6c 20 57 48 45 4e 20 63 6c 61 75 73 65 27  gal WHEN clause'
4510: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
4520: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61   {}.do_test upda
4530: 74 65 2d 31 34 2e 32 20 7b 0a 20 20 63 61 74 63  te-14.2 {.  catc
4540: 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  hsql {.    UPDAT
4550: 45 20 74 33 20 53 45 54 20 61 3d 31 3b 0a 20 20  E t3 SET a=1;.  
4560: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
4570: 63 6f 6c 75 6d 6e 3a 20 6e 6f 73 75 63 68 63 6f  column: nosuchco
4580: 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  l}}.do_test upda
4590: 74 65 2d 31 34 2e 33 20 7b 0a 20 20 65 78 65 63  te-14.3 {.  exec
45a0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
45b0: 20 54 41 42 4c 45 20 74 34 28 61 2c 62 2c 63 29   TABLE t4(a,b,c)
45c0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
45d0: 47 47 45 52 20 74 34 72 31 20 41 46 54 45 52 20  GGER t4r1 AFTER 
45e0: 55 50 44 41 54 45 20 6f 6e 20 74 34 20 57 48 45  UPDATE on t4 WHE
45f0: 4e 20 6e 6f 73 75 63 68 63 6f 6c 20 42 45 47 49  N nosuchcol BEGI
4600: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 27  N.      SELECT '
4610: 69 6c 6c 65 67 61 6c 20 57 48 45 4e 20 63 6c 61  illegal WHEN cla
4620: 75 73 65 27 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  use';.    END;. 
4630: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
4640: 75 70 64 61 74 65 2d 31 34 2e 34 20 7b 0a 20 20  update-14.4 {.  
4650: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55  catchsql {.    U
4660: 50 44 41 54 45 20 74 34 20 53 45 54 20 61 3d 31  PDATE t4 SET a=1
4670: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73  ;.  }.} {1 {no s
4680: 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 6f 73 75  uch column: nosu
4690: 63 68 63 6f 6c 7d 7d 0a 0a 7d 20 3b 23 20 69 66  chcol}}..} ;# if
46a0: 63 61 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72  capable {trigger
46b0: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 5b 68 74 74  }..# Ticket [htt
46c0: 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  ps://www.sqlite.
46d0: 6f 72 67 2f 73 72 63 2f 74 6b 74 76 69 65 77 2f  org/src/tktview/
46e0: 34 33 31 30 37 38 34 30 66 31 63 30 32 5d 20 6f  43107840f1c02] o
46f0: 6e 20 32 30 31 34 2d 31 30 2d 32 39 0a 23 20 41  n 2014-10-29.# A
4700: 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
4710: 74 20 6f 6e 20 55 50 44 41 54 45 0a 23 0a 64 6f  t on UPDATE.#.do
4720: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 75 70  _execsql_test up
4730: 64 61 74 65 2d 31 35 2e 31 20 7b 0a 20 20 43 52  date-15.1 {.  CR
4740: 45 41 54 45 20 54 41 42 4c 45 20 74 31 35 28 61  EATE TABLE t15(a
4750: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4760: 20 4b 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53 45   KEY, b);.  INSE
4770: 52 54 20 49 4e 54 4f 20 74 31 35 28 61 2c 62 29  RT INTO t15(a,b)
4780: 20 56 41 4c 55 45 53 28 31 30 2c 27 61 62 63 27   VALUES(10,'abc'
4790: 29 2c 28 32 30 2c 27 64 65 66 27 29 2c 28 33 30  ),(20,'def'),(30
47a0: 2c 27 67 68 69 27 29 3b 0a 20 20 41 4c 54 45 52  ,'ghi');.  ALTER
47b0: 20 54 41 42 4c 45 20 74 31 35 20 41 44 44 20 43   TABLE t15 ADD C
47c0: 4f 4c 55 4d 4e 20 63 3b 0a 20 20 43 52 45 41 54  OLUMN c;.  CREAT
47d0: 45 20 49 4e 44 45 58 20 74 31 35 63 20 4f 4e 20  E INDEX t15c ON 
47e0: 74 31 35 28 63 29 3b 0a 20 20 49 4e 53 45 52 54  t15(c);.  INSERT
47f0: 20 49 4e 54 4f 20 74 31 35 28 61 2c 62 29 0a 20   INTO t15(a,b). 
4800: 20 20 56 41 4c 55 45 53 28 35 2c 27 7a 79 78 27    VALUES(5,'zyx'
4810: 29 2c 28 31 35 2c 27 77 76 75 27 29 2c 28 32 35  ),(15,'wvu'),(25
4820: 2c 27 74 73 72 27 29 2c 28 33 35 2c 27 71 70 6f  ,'tsr'),(35,'qpo
4830: 27 29 3b 0a 20 20 55 50 44 41 54 45 20 74 31 35  ');.  UPDATE t15
4840: 20 53 45 54 20 63 3d 70 72 69 6e 74 66 28 22 79   SET c=printf("y
4850: 25 64 22 2c 61 29 20 57 48 45 52 45 20 63 20 49  %d",a) WHERE c I
4860: 53 20 4e 55 4c 4c 3b 0a 20 20 53 45 4c 45 43 54  S NULL;.  SELECT
4870: 20 61 2c 62 2c 63 2c 27 7c 27 20 46 52 4f 4d 20   a,b,c,'|' FROM 
4880: 74 31 35 20 4f 52 44 45 52 20 42 59 20 61 3b 0a  t15 ORDER BY a;.
4890: 7d 20 7b 35 20 7a 79 78 20 79 35 20 7c 20 31 30  } {5 zyx y5 | 10
48a0: 20 61 62 63 20 79 31 30 20 7c 20 31 35 20 77 76   abc y10 | 15 wv
48b0: 75 20 79 31 35 20 7c 20 32 30 20 64 65 66 20 79  u y15 | 20 def y
48c0: 32 30 20 7c 20 32 35 20 74 73 72 20 79 32 35 20  20 | 25 tsr y25 
48d0: 7c 20 33 30 20 67 68 69 20 79 33 30 20 7c 20 33  | 30 ghi y30 | 3
48e0: 35 20 71 70 6f 20 79 33 35 20 7c 7d 0a 0a 0a 66  5 qpo y35 |}...f
48f0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.