/ Hex Artifact Content
Login

Artifact 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172:


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 50 52 49 4d 41  .  }.} {1 {PRIMA
3960: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 75  RY KEY must be u
3970: 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  nique}}.do_test 
3980: 75 70 64 61 74 65 2d 31 30 2e 34 20 7b 0a 20 20  update-10.4 {.  
3990: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
39a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
39b0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33  .  }.} {0 {1 2 3
39c0: 20 34 20 39 20 36 20 32 20 33 20 34 20 34 20 36   4 9 6 2 3 4 4 6
39d0: 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64   7}}.do_test upd
39e0: 61 74 65 2d 31 30 2e 35 20 7b 0a 20 20 63 61 74  ate-10.5 {.  cat
39f0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
3a00: 54 45 20 74 31 20 53 45 54 20 62 3d 32 2c 20 65  TE t1 SET b=2, e
3a10: 3d 31 31 20 57 48 45 52 45 20 66 3d 36 3b 0a 20  =11 WHERE f=6;. 
3a20: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3a30: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31   t1;.  }.} {0 {1
3a40: 20 32 20 33 20 34 20 31 31 20 36 20 32 20 33 20   2 3 4 11 6 2 3 
3a50: 34 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73  4 4 6 7}}.do_tes
3a60: 74 20 75 70 64 61 74 65 2d 31 30 2e 36 20 7b 0a  t update-10.6 {.
3a70: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3a80: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
3a90: 3d 32 2c 20 65 3d 31 32 20 57 48 45 52 45 20 66  =2, e=12 WHERE f
3aa0: 3d 37 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  =7;.    SELECT *
3ab0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
3ac0: 7b 31 20 7b 63 6f 6c 75 6d 6e 20 62 20 69 73 20  {1 {column b is 
3ad0: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f  not unique}}.do_
3ae0: 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 37  test update-10.7
3af0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3b00: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3b10: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t1;.  }.} {0 {
3b20: 31 20 32 20 33 20 34 20 31 31 20 36 20 32 20 33  1 2 3 4 11 6 2 3
3b30: 20 34 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65   4 4 6 7}}.do_te
3b40: 73 74 20 75 70 64 61 74 65 2d 31 30 2e 38 20 7b  st update-10.8 {
3b50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3b60: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
3b70: 63 3d 33 2c 20 64 3d 34 2c 20 65 3d 31 33 20 57  c=3, d=4, e=13 W
3b80: 48 45 52 45 20 66 3d 36 3b 0a 20 20 20 20 53 45  HERE f=6;.    SE
3b90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
3ba0: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20    }.} {0 {1 2 3 
3bb0: 34 20 31 33 20 36 20 32 20 33 20 34 20 34 20 36  4 13 6 2 3 4 4 6
3bc0: 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64   7}}.do_test upd
3bd0: 61 74 65 2d 31 30 2e 39 20 7b 0a 20 20 63 61 74  ate-10.9 {.  cat
3be0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
3bf0: 54 45 20 74 31 20 53 45 54 20 63 3d 33 2c 20 64  TE t1 SET c=3, d
3c00: 3d 34 2c 20 65 3d 31 34 20 57 48 45 52 45 20 66  =4, e=14 WHERE f
3c10: 3d 37 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  =7;.    SELECT *
3c20: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
3c30: 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20 63 2c 20 64  {1 {columns c, d
3c40: 20 61 72 65 20 6e 6f 74 20 75 6e 69 71 75 65 7d   are not unique}
3c50: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
3c60: 2d 31 30 2e 31 30 20 7b 0a 20 20 63 61 74 63 68  -10.10 {.  catch
3c70: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3c80: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   * FROM t1;.  }.
3c90: 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 20 31 33  } {0 {1 2 3 4 13
3ca0: 20 36 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d   6 2 3 4 4 6 7}}
3cb0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65  ..# Make sure we
3cc0: 20 63 61 6e 20 68 61 6e 64 6c 65 20 61 20 73 75   can handle a su
3cd0: 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 77 68  bquery in the wh
3ce0: 65 72 65 20 63 6c 61 75 73 65 2e 0a 23 0a 69 66  ere clause..#.if
3cf0: 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79  capable subquery
3d00: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 75 70 64   {.  do_test upd
3d10: 61 74 65 2d 31 31 2e 31 20 7b 0a 20 20 20 20 65  ate-11.1 {.    e
3d20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 55  xecsql {.      U
3d30: 50 44 41 54 45 20 74 31 20 53 45 54 20 65 3d 65  PDATE t1 SET e=e
3d40: 2b 31 20 57 48 45 52 45 20 62 20 49 4e 20 28 53  +1 WHERE b IN (S
3d50: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31 29  ELECT b FROM t1)
3d60: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 62  ;.      SELECT b
3d70: 2c 65 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  ,e FROM t1;.    
3d80: 7d 0a 20 20 7d 20 7b 32 20 31 34 20 33 20 37 7d  }.  } {2 14 3 7}
3d90: 0a 20 20 64 6f 5f 74 65 73 74 20 75 70 64 61 74  .  do_test updat
3da0: 65 2d 31 31 2e 32 20 7b 0a 20 20 20 20 65 78 65  e-11.2 {.    exe
3db0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 55 50 44  csql {.      UPD
3dc0: 41 54 45 20 74 31 20 53 45 54 20 65 3d 65 2b 31  ATE t1 SET e=e+1
3dd0: 20 57 48 45 52 45 20 61 20 49 4e 20 28 53 45 4c   WHERE a IN (SEL
3de0: 45 43 54 20 61 20 46 52 4f 4d 20 74 31 29 3b 0a  ECT a FROM t1);.
3df0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 61 2c 65        SELECT a,e
3e00: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a   FROM t1;.    }.
3e10: 20 20 7d 20 7b 31 20 31 35 20 32 20 38 7d 0a 7d    } {1 15 2 8}.}
3e20: 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  ..integrity_chec
3e30: 6b 20 75 70 64 61 74 65 2d 31 32 2e 31 0a 0a 23  k update-12.1..#
3e40: 20 54 69 63 6b 65 74 20 36 30 32 2e 20 20 55 70   Ticket 602.  Up
3e50: 64 61 74 65 73 20 73 68 6f 75 6c 64 20 6f 63 63  dates should occ
3e60: 75 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f  ur in the same o
3e70: 72 64 65 72 20 61 73 20 74 68 65 20 72 65 63 6f  rder as the reco
3e80: 72 64 73 0a 23 20 77 65 72 65 20 64 69 73 63 6f  rds.# were disco
3e90: 76 65 72 65 64 20 69 6e 20 74 68 65 20 57 48 45  vered in the WHE
3ea0: 52 45 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f  RE clause..#.do_
3eb0: 74 65 73 74 20 75 70 64 61 74 65 2d 31 33 2e 31  test update-13.1
3ec0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3ed0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52     BEGIN;.    CR
3ee0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 29  EATE TABLE t2(a)
3ef0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3f00: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t2 VALUES(1);.
3f10: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3f20: 74 32 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20  t2 VALUES(2);.  
3f30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
3f40: 20 53 45 4c 45 43 54 20 61 2b 32 20 46 52 4f 4d   SELECT a+2 FROM
3f50: 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t2;.    INSERT 
3f60: 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61  INTO t2 SELECT a
3f70: 2b 34 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20  +4 FROM t2;.    
3f80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
3f90: 45 4c 45 43 54 20 61 2b 38 20 46 52 4f 4d 20 74  ELECT a+8 FROM t
3fa0: 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  2;.    INSERT IN
3fb0: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 31  TO t2 SELECT a+1
3fc0: 36 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49  6 FROM t2;.    I
3fd0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
3fe0: 4c 45 43 54 20 61 2b 33 32 20 46 52 4f 4d 20 74  LECT a+32 FROM t
3ff0: 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  2;.    INSERT IN
4000: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 36  TO t2 SELECT a+6
4010: 34 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49  4 FROM t2;.    I
4020: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
4030: 4c 45 43 54 20 61 2b 31 32 38 20 46 52 4f 4d 20  LECT a+128 FROM 
4040: 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t2;.    INSERT I
4050: 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b  NTO t2 SELECT a+
4060: 32 35 36 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  256 FROM t2;.   
4070: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
4080: 53 45 4c 45 43 54 20 61 2b 35 31 32 20 46 52 4f  SELECT a+512 FRO
4090: 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t2;.    INSERT
40a0: 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20   INTO t2 SELECT 
40b0: 61 2b 31 30 32 34 20 46 52 4f 4d 20 74 32 3b 0a  a+1024 FROM t2;.
40c0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
40d0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
40e0: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
40f0: 32 30 34 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70  2048}.do_test up
4100: 64 61 74 65 2d 31 33 2e 32 20 7b 0a 20 20 65 78  date-13.2 {.  ex
4110: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
4120: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
4130: 20 74 32 20 57 48 45 52 45 20 61 3d 72 6f 77 69   t2 WHERE a=rowi
4140: 64 3b 0a 20 20 7d 0a 7d 20 7b 32 30 34 38 7d 0a  d;.  }.} {2048}.
4150: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31  do_test update-1
4160: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
4170: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  {.    UPDATE t2 
4180: 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64 2d  SET rowid=rowid-
4190: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f  1;.    SELECT co
41a0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57  unt(*) FROM t2 W
41b0: 48 45 52 45 20 61 3d 72 6f 77 69 64 2b 31 3b 0a  HERE a=rowid+1;.
41c0: 20 20 7d 0a 7d 20 7b 32 30 34 38 7d 0a 64 6f 5f    }.} {2048}.do_
41d0: 74 65 73 74 20 75 70 64 61 74 65 2d 31 33 2e 33  test update-13.3
41e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
41f0: 20 20 20 55 50 44 41 54 45 20 74 32 20 53 45 54     UPDATE t2 SET
4200: 20 72 6f 77 69 64 3d 72 6f 77 69 64 2b 31 30 30   rowid=rowid+100
4210: 30 30 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  00;.    UPDATE t
4220: 32 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69  2 SET rowid=rowi
4230: 64 2d 39 39 39 39 3b 0a 20 20 20 20 53 45 4c 45  d-9999;.    SELE
4240: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
4250: 20 74 32 20 57 48 45 52 45 20 61 3d 72 6f 77 69   t2 WHERE a=rowi
4260: 64 3b 0a 20 20 7d 0a 7d 20 7b 32 30 34 38 7d 0a  d;.  }.} {2048}.
4270: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31  do_test update-1
4280: 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.4 {.  execsql 
4290: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
42a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
42b0: 53 45 4c 45 43 54 20 61 2b 32 30 34 38 20 46 52  SELECT a+2048 FR
42c0: 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52  OM t2;.    INSER
42d0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
42e0: 20 61 2b 34 30 39 36 20 46 52 4f 4d 20 74 32 3b   a+4096 FROM t2;
42f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4300: 20 74 32 20 53 45 4c 45 43 54 20 61 2b 38 31 39   t2 SELECT a+819
4310: 32 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 53  2 FROM t2;.    S
4320: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
4330: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d 72  ROM t2 WHERE a=r
4340: 6f 77 69 64 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  owid;.    COMMIT
4350: 3b 0a 20 20 7d 0a 7d 20 31 36 33 38 34 0a 64 6f  ;.  }.} 16384.do
4360: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 33 2e  _test update-13.
4370: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
4380: 20 20 20 20 55 50 44 41 54 45 20 74 32 20 53 45      UPDATE t2 SE
4390: 54 20 72 6f 77 69 64 3d 72 6f 77 69 64 2d 31 3b  T rowid=rowid-1;
43a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
43b0: 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45  t(*) FROM t2 WHE
43c0: 52 45 20 61 3d 72 6f 77 69 64 2b 31 3b 0a 20 20  RE a=rowid+1;.  
43d0: 7d 0a 7d 20 31 36 33 38 34 0a 0a 69 6e 74 65 67  }.} 16384..integ
43e0: 72 69 74 79 5f 63 68 65 63 6b 20 75 70 64 61 74  rity_check updat
43f0: 65 2d 31 33 2e 36 0a 0a 69 66 63 61 70 61 62 6c  e-13.6..ifcapabl
4400: 65 20 7b 74 72 69 67 67 65 72 7d 20 7b 0a 23 20  e {trigger} {.# 
4410: 54 65 73 74 20 66 6f 72 20 70 72 6f 70 65 72 20  Test for proper 
4420: 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 6d 61 6c  detection of mal
4430: 66 6f 72 6d 65 64 20 57 48 45 4e 20 63 6c 61 75  formed WHEN clau
4440: 73 65 73 20 6f 6e 20 55 50 44 41 54 45 20 74 72  ses on UPDATE tr
4450: 69 67 67 65 72 73 2e 0a 23 0a 64 6f 5f 74 65 73  iggers..#.do_tes
4460: 74 20 75 70 64 61 74 65 2d 31 34 2e 31 20 7b 0a  t update-14.1 {.
4470: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4480: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
4490: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  a,b,c);.    CREA
44a0: 54 45 20 54 52 49 47 47 45 52 20 74 33 72 31 20  TE TRIGGER t3r1 
44b0: 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f 6e  BEFORE UPDATE on
44c0: 20 74 33 20 57 48 45 4e 20 6e 6f 73 75 63 68 63   t3 WHEN nosuchc
44d0: 6f 6c 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53  ol BEGIN.      S
44e0: 45 4c 45 43 54 20 27 69 6c 6c 65 67 61 6c 20 57  ELECT 'illegal W
44f0: 48 45 4e 20 63 6c 61 75 73 65 27 3b 0a 20 20 20  HEN clause';.   
4500: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   END;.  }.} {}.d
4510: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 34  o_test update-14
4520: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
4530: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 33 20  {.    UPDATE t3 
4540: 53 45 54 20 61 3d 31 3b 0a 20 20 7d 0a 7d 20 7b  SET a=1;.  }.} {
4550: 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d  1 {no such colum
4560: 6e 3a 20 6e 6f 73 75 63 68 63 6f 6c 7d 7d 0a 64  n: nosuchcol}}.d
4570: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 34  o_test update-14
4580: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
4590: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
45a0: 45 20 74 34 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t4(a,b,c);.   
45b0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
45c0: 74 34 72 31 20 41 46 54 45 52 20 55 50 44 41 54  t4r1 AFTER UPDAT
45d0: 45 20 6f 6e 20 74 34 20 57 48 45 4e 20 6e 6f 73  E on t4 WHEN nos
45e0: 75 63 68 63 6f 6c 20 42 45 47 49 4e 0a 20 20 20  uchcol BEGIN.   
45f0: 20 20 20 53 45 4c 45 43 54 20 27 69 6c 6c 65 67     SELECT 'illeg
4600: 61 6c 20 57 48 45 4e 20 63 6c 61 75 73 65 27 3b  al WHEN clause';
4610: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
4620: 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  {}.do_test updat
4630: 65 2d 31 34 2e 34 20 7b 0a 20 20 63 61 74 63 68  e-14.4 {.  catch
4640: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
4650: 20 74 34 20 53 45 54 20 61 3d 31 3b 0a 20 20 7d   t4 SET a=1;.  }
4660: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63  .} {1 {no such c
4670: 6f 6c 75 6d 6e 3a 20 6e 6f 73 75 63 68 63 6f 6c  olumn: nosuchcol
4680: 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  }}..} ;# ifcapab
4690: 6c 65 20 7b 74 72 69 67 67 65 72 7d 0a 0a 0a 66  le {trigger}...f
46a0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.