/ Hex Artifact Content
Login

Artifact 24c1dcc025f7ef352759afe3f4a20e6fdfd43a97:


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 38 20 32 30 30  .test,v 1.18 200
0200: 38 2f 30 31 2f 31 36 20 31 38 3a 32 30 3a 34 32  8/01/16 18:20:42
0210: 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70   danielk1977 Exp
0220: 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20   $..set testdir 
0230: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0240: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0250: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0260: 0a 0a 23 20 54 72 79 20 74 6f 20 75 70 64 61 74  ..# Try to updat
0270: 65 20 61 6e 20 6e 6f 6e 2d 65 78 69 73 74 65 6e  e an non-existen
0280: 74 20 74 61 62 6c 65 0a 23 0a 64 6f 5f 74 65 73  t table.#.do_tes
0290: 74 20 75 70 64 61 74 65 2d 31 2e 31 20 7b 0a 20  t update-1.1 {. 
02a0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
02b0: 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74  xecsql {UPDATE t
02c0: 65 73 74 31 20 53 45 54 20 66 32 3d 35 20 57 48  est1 SET f2=5 WH
02d0: 45 52 45 20 66 31 3c 31 7d 7d 20 6d 73 67 5d 0a  ERE f1<1}} msg].
02e0: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
02f0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
0300: 61 62 6c 65 3a 20 74 65 73 74 31 7d 7d 0a 0a 23  able: test1}}..#
0310: 20 54 72 79 20 74 6f 20 75 70 64 61 74 65 20 61   Try to update a
0320: 20 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62 6c 65   read-only table
0330: 0a 23 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  .#.do_test updat
0340: 65 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 76 20  e-2.1 {.  set v 
0350: 5b 63 61 74 63 68 20 5c 0a 20 20 20 20 20 20 20  [catch \.       
0360: 7b 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45  {execsql {UPDATE
0370: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53   sqlite_master S
0380: 45 54 20 6e 61 6d 65 3d 27 78 79 7a 27 20 57 48  ET name='xyz' WH
0390: 45 52 45 20 6e 61 6d 65 3d 27 31 32 33 27 7d 7d  ERE name='123'}}
03a0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
03b0: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 61 62  v $msg.} {1 {tab
03c0: 6c 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  le sqlite_master
03d0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 6d 6f 64 69   may not be modi
03e0: 66 69 65 64 7d 7d 0a 0a 23 20 43 72 65 61 74 65  fied}}..# Create
03f0: 20 61 20 74 61 62 6c 65 20 74 6f 20 77 6f 72 6b   a table to work
0400: 20 77 69 74 68 0a 23 0a 64 6f 5f 74 65 73 74 20   with.#.do_test 
0410: 75 70 64 61 74 65 2d 33 2e 31 20 7b 0a 20 20 65  update-3.1 {.  e
0420: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
0430: 41 42 4c 45 20 74 65 73 74 31 28 66 31 20 69 6e  ABLE test1(f1 in
0440: 74 2c 66 32 20 69 6e 74 29 7d 0a 20 20 66 6f 72  t,f2 int)}.  for
0450: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
0460: 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  10} {incr i} {. 
0470: 20 20 20 73 65 74 20 73 71 6c 20 22 49 4e 53 45     set sql "INSE
0480: 52 54 20 49 4e 54 4f 20 74 65 73 74 31 20 56 41  RT INTO test1 VA
0490: 4c 55 45 53 28 24 69 2c 5b 65 78 70 72 20 7b 31  LUES($i,[expr {1
04a0: 3c 3c 24 69 7d 5d 29 22 0a 20 20 20 20 65 78 65  <<$i}])".    exe
04b0: 63 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20 20  csql $sql.  }.  
04c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
04d0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
04e0: 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20 32  ER BY f1}.} {1 2
04f0: 20 32 20 34 20 33 20 38 20 34 20 31 36 20 35 20   2 4 3 8 4 16 5 
0500: 33 32 20 36 20 36 34 20 37 20 31 32 38 20 38 20  32 6 64 7 128 8 
0510: 32 35 36 20 39 20 35 31 32 20 31 30 20 31 30 32  256 9 512 10 102
0520: 34 7d 0a 0a 23 20 55 6e 6b 6e 6f 77 6e 20 63 6f  4}..# Unknown co
0530: 6c 75 6d 6e 20 6e 61 6d 65 20 69 6e 20 61 6e 20  lumn name in an 
0540: 65 78 70 72 65 73 73 69 6f 6e 0a 23 0a 64 6f 5f  expression.#.do_
0550: 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e 32 20  test update-3.2 
0560: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0570: 20 7b 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54   {execsql {UPDAT
0580: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
0590: 33 2a 32 20 57 48 45 52 45 20 66 32 3d 3d 33 32  3*2 WHERE f2==32
05a0: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
05b0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e  d v $msg.} {1 {n
05c0: 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 66  o such column: f
05d0: 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  3}}.do_test upda
05e0: 74 65 2d 33 2e 33 20 7b 0a 20 20 73 65 74 20 76  te-3.3 {.  set v
05f0: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
0600: 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53   {UPDATE test1 S
0610: 45 54 20 66 31 3d 74 65 73 74 32 2e 66 31 2a 32  ET f1=test2.f1*2
0620: 20 57 48 45 52 45 20 66 32 3d 3d 33 32 7d 7d 20   WHERE f2==32}} 
0630: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0640: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73   $msg.} {1 {no s
0650: 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 74 65 73 74  uch column: test
0660: 32 2e 66 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 75  2.f1}}.do_test u
0670: 70 64 61 74 65 2d 33 2e 34 20 7b 0a 20 20 73 65  pdate-3.4 {.  se
0680: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0690: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74  sql {UPDATE test
06a0: 31 20 53 45 54 20 66 33 3d 66 31 2a 32 20 57 48  1 SET f3=f1*2 WH
06b0: 45 52 45 20 66 32 3d 3d 33 32 7d 7d 20 6d 73 67  ERE f2==32}} msg
06c0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
06d0: 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68  sg.} {1 {no such
06e0: 20 63 6f 6c 75 6d 6e 3a 20 66 33 7d 7d 0a 0a 23   column: f3}}..#
06f0: 20 41 63 74 75 61 6c 6c 79 20 64 6f 20 73 6f 6d   Actually do som
0700: 65 20 75 70 64 61 74 65 73 0a 23 0a 64 6f 5f 74  e updates.#.do_t
0710: 65 73 74 20 75 70 64 61 74 65 2d 33 2e 35 20 7b  est update-3.5 {
0720: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
0730: 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d  TE test1 SET f2=
0740: 66 32 2a 33 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  f2*3}.} {}.do_te
0750: 73 74 20 75 70 64 61 74 65 2d 33 2e 36 20 7b 0a  st update-3.6 {.
0760: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0770: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
0780: 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31  RDER BY f1}.} {1
0790: 20 36 20 32 20 31 32 20 33 20 32 34 20 34 20 34   6 2 12 3 24 4 4
07a0: 38 20 35 20 39 36 20 36 20 31 39 32 20 37 20 33  8 5 96 6 192 7 3
07b0: 38 34 20 38 20 37 36 38 20 39 20 31 35 33 36 20  84 8 768 9 1536 
07c0: 31 30 20 33 30 37 32 7d 0a 64 6f 5f 74 65 73 74  10 3072}.do_test
07d0: 20 75 70 64 61 74 65 2d 33 2e 37 20 7b 0a 20 20   update-3.7 {.  
07e0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
07f0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 6f 6e  count_changes=on
0800: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44  }.  execsql {UPD
0810: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32  ATE test1 SET f2
0820: 3d 66 32 2f 33 20 57 48 45 52 45 20 66 31 3c 3d  =f2/3 WHERE f1<=
0830: 35 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65 73 74  5}.} {5}.do_test
0840: 20 75 70 64 61 74 65 2d 33 2e 38 20 7b 0a 20 20   update-3.8 {.  
0850: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0860: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
0870: 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20 32  ER BY f1}.} {1 2
0880: 20 32 20 34 20 33 20 38 20 34 20 31 36 20 35 20   2 4 3 8 4 16 5 
0890: 33 32 20 36 20 31 39 32 20 37 20 33 38 34 20 38  32 6 192 7 384 8
08a0: 20 37 36 38 20 39 20 31 35 33 36 20 31 30 20 33   768 9 1536 10 3
08b0: 30 37 32 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  072}.do_test upd
08c0: 61 74 65 2d 33 2e 39 20 7b 0a 20 20 65 78 65 63  ate-3.9 {.  exec
08d0: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74  sql {UPDATE test
08e0: 31 20 53 45 54 20 66 32 3d 66 32 2f 33 20 57 48  1 SET f2=f2/3 WH
08f0: 45 52 45 20 66 31 3e 35 7d 0a 7d 20 7b 35 7d 0a  ERE f1>5}.} {5}.
0900: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33  do_test update-3
0910: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
0920: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0930: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
0940: 7d 0a 7d 20 7b 31 20 32 20 32 20 34 20 33 20 38  }.} {1 2 2 4 3 8
0950: 20 34 20 31 36 20 35 20 33 32 20 36 20 36 34 20   4 16 5 32 6 64 
0960: 37 20 31 32 38 20 38 20 32 35 36 20 39 20 35 31  7 128 8 256 9 51
0970: 32 20 31 30 20 31 30 32 34 7d 0a 0a 23 20 53 77  2 10 1024}..# Sw
0980: 61 70 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ap the values of
0990: 20 66 31 20 61 6e 64 20 66 32 20 66 6f 72 20 61   f1 and f2 for a
09a0: 6c 6c 20 65 6c 65 6d 65 6e 74 73 0a 23 0a 64 6f  ll elements.#.do
09b0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33 2e 31  _test update-3.1
09c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  1 {.  execsql {U
09d0: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
09e0: 46 32 3d 66 31 2c 20 46 31 3d 66 32 7d 0a 7d 20  F2=f1, F1=f2}.} 
09f0: 7b 31 30 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  {10}.do_test upd
0a00: 61 74 65 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65  ate-3.12 {.  exe
0a10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
0a20: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
0a30: 42 59 20 46 31 7d 0a 7d 20 7b 32 20 31 20 34 20  BY F1}.} {2 1 4 
0a40: 32 20 38 20 33 20 31 36 20 34 20 33 32 20 35 20  2 8 3 16 4 32 5 
0a50: 36 34 20 36 20 31 32 38 20 37 20 32 35 36 20 38  64 6 128 7 256 8
0a60: 20 35 31 32 20 39 20 31 30 32 34 20 31 30 7d 0a   512 9 1024 10}.
0a70: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 33  do_test update-3
0a80: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
0a90: 7b 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68  {PRAGMA count_ch
0aa0: 61 6e 67 65 73 3d 6f 66 66 7d 0a 20 20 65 78 65  anges=off}.  exe
0ab0: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
0ac0: 74 31 20 53 45 54 20 46 32 3d 66 31 2c 20 46 31  t1 SET F2=f1, F1
0ad0: 3d 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  =f2}.} {}.do_tes
0ae0: 74 20 75 70 64 61 74 65 2d 33 2e 31 34 20 7b 0a  t update-3.14 {.
0af0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0b00: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
0b10: 52 44 45 52 20 42 59 20 46 31 7d 0a 7d 20 7b 31  RDER BY F1}.} {1
0b20: 20 32 20 32 20 34 20 33 20 38 20 34 20 31 36 20   2 2 4 3 8 4 16 
0b30: 35 20 33 32 20 36 20 36 34 20 37 20 31 32 38 20  5 32 6 64 7 128 
0b40: 38 20 32 35 36 20 39 20 35 31 32 20 31 30 20 31  8 256 9 512 10 1
0b50: 30 32 34 7d 0a 0a 23 20 43 72 65 61 74 65 20 64  024}..# Create d
0b60: 75 70 6c 69 63 61 74 65 20 65 6e 74 72 69 65 73  uplicate entries
0b70: 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 75   and make sure u
0b80: 70 64 61 74 69 6e 67 20 73 74 69 6c 6c 0a 23 20  pdating still.# 
0b90: 77 6f 72 6b 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  works..#.do_test
0ba0: 20 75 70 64 61 74 65 2d 34 2e 30 20 7b 0a 20 20   update-4.0 {.  
0bb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
0bc0: 4c 45 54 45 20 46 52 4f 4d 20 74 65 73 74 31 20  LETE FROM test1 
0bd0: 57 48 45 52 45 20 66 31 3c 3d 35 3b 0a 20 20 20  WHERE f1<=5;.   
0be0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73   INSERT INTO tes
0bf0: 74 31 28 66 31 2c 66 32 29 20 56 41 4c 55 45 53  t1(f1,f2) VALUES
0c00: 28 38 2c 38 38 29 3b 0a 20 20 20 20 49 4e 53 45  (8,88);.    INSE
0c10: 52 54 20 49 4e 54 4f 20 74 65 73 74 31 28 66 31  RT INTO test1(f1
0c20: 2c 66 32 29 20 56 41 4c 55 45 53 28 38 2c 38 38  ,f2) VALUES(8,88
0c30: 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  8);.    INSERT I
0c40: 4e 54 4f 20 74 65 73 74 31 28 66 31 2c 66 32 29  NTO test1(f1,f2)
0c50: 20 56 41 4c 55 45 53 28 37 37 2c 31 32 38 29 3b   VALUES(77,128);
0c60: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0c70: 20 74 65 73 74 31 28 66 31 2c 66 32 29 20 56 41   test1(f1,f2) VA
0c80: 4c 55 45 53 28 37 37 37 2c 31 32 38 29 3b 0a 20  LUES(777,128);. 
0c90: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   }.  execsql {SE
0ca0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
0cb0: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
0cc0: 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20  }.} {6 64 7 128 
0cd0: 38 20 38 38 20 38 20 32 35 36 20 38 20 38 38 38  8 88 8 256 8 888
0ce0: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
0cf0: 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64  7 128 777 128}.d
0d00: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e  o_test update-4.
0d10: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  1 {.  execsql {U
0d20: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
0d30: 66 32 3d 66 32 2b 31 20 57 48 45 52 45 20 66 31  f2=f2+1 WHERE f1
0d40: 3d 3d 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  ==8}.  execsql {
0d50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
0d60: 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c  st1 ORDER BY f1,
0d70: 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32  f2}.} {6 64 7 12
0d80: 38 20 38 20 38 39 20 38 20 32 35 37 20 38 20 38  8 8 89 8 257 8 8
0d90: 38 39 20 39 20 35 31 32 20 31 30 20 31 30 32 34  89 9 512 10 1024
0da0: 20 37 37 20 31 32 38 20 37 37 37 20 31 32 38 7d   77 128 777 128}
0db0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
0dc0: 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.2 {.  execsql 
0dd0: 7b 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45  {UPDATE test1 SE
0de0: 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20  T f2=f2-1 WHERE 
0df0: 66 31 3d 3d 38 20 61 6e 64 20 66 32 3e 38 30 30  f1==8 and f2>800
0e00: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
0e10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
0e20: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
0e30: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
0e40: 20 38 39 20 38 20 32 35 37 20 38 20 38 38 38 20   89 8 257 8 888 
0e50: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
0e60: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
0e70: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e 33  _test update-4.3
0e80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50   {.  execsql {UP
0e90: 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66  DATE test1 SET f
0ea0: 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31 3d  2=f2-1 WHERE f1=
0eb0: 3d 38 20 61 6e 64 20 66 32 3c 38 30 30 7d 0a 20  =8 and f2<800}. 
0ec0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0ed0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
0ee0: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
0ef0: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38  {6 64 7 128 8 88
0f00: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
0f10: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
0f20: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
0f30: 73 74 20 75 70 64 61 74 65 2d 34 2e 34 20 7b 0a  st update-4.4 {.
0f40: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
0f50: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
0f60: 31 2b 31 20 57 48 45 52 45 20 66 32 3d 3d 31 32  1+1 WHERE f2==12
0f70: 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  8}.  execsql {SE
0f80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
0f90: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
0fa0: 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38  }.} {6 64 8 88 8
0fb0: 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38   128 8 256 8 888
0fc0: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
0fd0: 38 20 31 32 38 20 37 37 38 20 31 32 38 7d 0a 64  8 128 778 128}.d
0fe0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e  o_test update-4.
0ff0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  5 {.  execsql {U
1000: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
1010: 66 31 3d 66 31 2d 31 20 57 48 45 52 45 20 66 31  f1=f1-1 WHERE f1
1020: 3e 31 30 30 20 61 6e 64 20 66 32 3d 3d 31 32 38  >100 and f2==128
1030: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1040: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
1050: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1060: 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38 20  .} {6 64 8 88 8 
1070: 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38 20  128 8 256 8 888 
1080: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 38  9 512 10 1024 78
1090: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
10a0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e 36  _test update-4.6
10b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
10c0: 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f     PRAGMA count_
10d0: 63 68 61 6e 67 65 73 3d 6f 6e 3b 0a 20 20 20 20  changes=on;.    
10e0: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
10f0: 20 66 31 3d 66 31 2d 31 20 57 48 45 52 45 20 66   f1=f1-1 WHERE f
1100: 31 3c 3d 31 30 30 20 61 6e 64 20 66 32 3d 3d 31  1<=100 and f2==1
1110: 32 38 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f  28;.  }.} {2}.do
1120: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 34 2e 37  _test update-4.7
1130: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1140: 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f     PRAGMA count_
1150: 63 68 61 6e 67 65 73 3d 6f 66 66 3b 0a 20 20 20  changes=off;.   
1160: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1170: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
1180: 2c 66 32 0a 20 20 7d 0a 7d 20 7b 36 20 36 34 20  ,f2.  }.} {6 64 
1190: 37 20 31 32 38 20 38 20 38 38 20 38 20 32 35 36  7 128 8 88 8 256
11a0: 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30 20   8 888 9 512 10 
11b0: 31 30 32 34 20 37 37 20 31 32 38 20 37 37 37 20  1024 77 128 777 
11c0: 31 32 38 7d 0a 0a 23 20 52 65 70 65 61 74 20 74  128}..# Repeat t
11d0: 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 71 75  he previous sequ
11e0: 65 6e 63 65 20 6f 66 20 74 65 73 74 73 20 77 69  ence of tests wi
11f0: 74 68 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 64  th an index..#.d
1200: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e  o_test update-5.
1210: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  0 {.  execsql {C
1220: 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 31  REATE INDEX idx1
1230: 20 4f 4e 20 74 65 73 74 31 28 66 31 29 7d 0a 20   ON test1(f1)}. 
1240: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1250: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
1260: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1270: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38  {6 64 7 128 8 88
1280: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
1290: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
12a0: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
12b0: 73 74 20 75 70 64 61 74 65 2d 35 2e 31 20 7b 0a  st update-5.1 {.
12c0: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
12d0: 45 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66  E test1 SET f2=f
12e0: 32 2b 31 20 57 48 45 52 45 20 66 31 3d 3d 38 7d  2+1 WHERE f1==8}
12f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1300: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
1310: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
1320: 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20  } {6 64 7 128 8 
1330: 38 39 20 38 20 32 35 37 20 38 20 38 38 39 20 39  89 8 257 8 889 9
1340: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20   512 10 1024 77 
1350: 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f  128 777 128}.do_
1360: 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 32 20  test update-5.2 
1370: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44  {.  execsql {UPD
1380: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 32  ATE test1 SET f2
1390: 3d 66 32 2d 31 20 57 48 45 52 45 20 66 31 3d 3d  =f2-1 WHERE f1==
13a0: 38 20 61 6e 64 20 66 32 3e 38 30 30 7d 0a 20 20  8 and f2>800}.  
13b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
13c0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
13d0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
13e0: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39 20  6 64 7 128 8 89 
13f0: 38 20 32 35 37 20 38 20 38 38 38 20 39 20 35 31  8 257 8 888 9 51
1400: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
1410: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
1420: 74 20 75 70 64 61 74 65 2d 35 2e 33 20 7b 0a 20  t update-5.3 {. 
1430: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
1440: 20 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32   test1 SET f2=f2
1450: 2d 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 61  -1 WHERE f1==8 a
1460: 6e 64 20 66 32 3c 38 30 30 7d 0a 20 20 65 78 65  nd f2<800}.  exe
1470: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1480: 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20  ROM test1 ORDER 
1490: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36  BY f1,f2}.} {6 6
14a0: 34 20 37 20 31 32 38 20 38 20 38 38 20 38 20 32  4 7 128 8 88 8 2
14b0: 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31  56 8 888 9 512 1
14c0: 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37 37  0 1024 77 128 77
14d0: 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  7 128}.do_test u
14e0: 70 64 61 74 65 2d 35 2e 34 20 7b 0a 20 20 65 78  pdate-5.4 {.  ex
14f0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
1500: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b 31 20  st1 SET f1=f1+1 
1510: 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d 0a 20  WHERE f2==128}. 
1520: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1530: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
1540: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1550: 7b 36 20 36 34 20 38 20 38 38 20 38 20 31 32 38  {6 64 8 88 8 128
1560: 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35   8 256 8 888 9 5
1570: 31 32 20 31 30 20 31 30 32 34 20 37 38 20 31 32  12 10 1024 78 12
1580: 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65  8 778 128}.do_te
1590: 73 74 20 75 70 64 61 74 65 2d 35 2e 34 2e 31 20  st update-5.4.1 
15a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
15b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
15c0: 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20 4f 52   WHERE f1==78 OR
15d0: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
15e0: 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  {78 128}.do_test
15f0: 20 75 70 64 61 74 65 2d 35 2e 34 2e 32 20 7b 0a   update-5.4.2 {.
1600: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1610: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
1620: 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44  HERE f1==778 ORD
1630: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1640: 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  778 128}.do_test
1650: 20 75 70 64 61 74 65 2d 35 2e 34 2e 33 20 7b 0a   update-5.4.3 {.
1660: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1670: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
1680: 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52  HERE f1==8 ORDER
1690: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20   BY f1,f2}.} {8 
16a0: 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38  88 8 128 8 256 8
16b0: 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   888}.do_test up
16c0: 64 61 74 65 2d 35 2e 35 20 7b 0a 20 20 65 78 65  date-5.5 {.  exe
16d0: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
16e0: 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20 57  t1 SET f1=f1-1 W
16f0: 48 45 52 45 20 66 31 3e 31 30 30 20 61 6e 64 20  HERE f1>100 and 
1700: 66 32 3d 3d 31 32 38 7d 0a 7d 20 7b 7d 0a 64 6f  f2==128}.} {}.do
1710: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 35  _test update-5.5
1720: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1730: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
1740: 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c  st1 ORDER BY f1,
1750: 66 32 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38  f2}.} {6 64 8 88
1760: 20 38 20 31 32 38 20 38 20 32 35 36 20 38 20 38   8 128 8 256 8 8
1770: 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34  88 9 512 10 1024
1780: 20 37 38 20 31 32 38 20 37 37 37 20 31 32 38 7d   78 128 777 128}
1790: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
17a0: 35 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  5.5.2 {.  execsq
17b0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
17c0: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
17d0: 3d 37 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c  =78 ORDER BY f1,
17e0: 66 32 7d 0a 7d 20 7b 37 38 20 31 32 38 7d 0a 64  f2}.} {78 128}.d
17f0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e  o_test update-5.
1800: 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.3 {.  execsql 
1810: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1820: 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37  est1 WHERE f1==7
1830: 37 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  78 ORDER BY f1,f
1840: 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  2}.} {}.do_test 
1850: 75 70 64 61 74 65 2d 35 2e 35 2e 34 20 7b 0a 20  update-5.5.4 {. 
1860: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1870: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
1880: 45 52 45 20 66 31 3d 3d 37 37 37 20 4f 52 44 45  ERE f1==777 ORDE
1890: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37  R BY f1,f2}.} {7
18a0: 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  77 128}.do_test 
18b0: 75 70 64 61 74 65 2d 35 2e 35 2e 35 20 7b 0a 20  update-5.5.5 {. 
18c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
18d0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
18e0: 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45 52 20  ERE f1==8 ORDER 
18f0: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38  BY f1,f2}.} {8 8
1900: 38 20 38 20 31 32 38 20 38 20 32 35 36 20 38 20  8 8 128 8 256 8 
1910: 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  888}.do_test upd
1920: 61 74 65 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63  ate-5.6 {.  exec
1930: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
1940: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 6f   count_changes=o
1950: 6e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 65  n;.    UPDATE te
1960: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20  st1 SET f1=f1-1 
1970: 57 48 45 52 45 20 66 31 3c 3d 31 30 30 20 61 6e  WHERE f1<=100 an
1980: 64 20 66 32 3d 3d 31 32 38 3b 0a 20 20 7d 0a 7d  d f2==128;.  }.}
1990: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64   {2}.do_test upd
19a0: 61 74 65 2d 35 2e 36 2e 31 20 7b 0a 20 20 65 78  ate-5.6.1 {.  ex
19b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
19c0: 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  MA count_changes
19d0: 3d 6f 66 66 3b 0a 20 20 20 20 53 45 4c 45 43 54  =off;.    SELECT
19e0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
19f0: 44 45 52 20 42 59 20 66 31 2c 66 32 0a 20 20 7d  DER BY f1,f2.  }
1a00: 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38  .} {6 64 7 128 8
1a10: 20 38 38 20 38 20 32 35 36 20 38 20 38 38 38 20   88 8 256 8 888 
1a20: 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37  9 512 10 1024 77
1a30: 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f   128 777 128}.do
1a40: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 35 2e 36  _test update-5.6
1a50: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1a60: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
1a70: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37  st1 WHERE f1==77
1a80: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1a90: 0a 7d 20 7b 37 37 20 31 32 38 7d 0a 64 6f 5f 74  .} {77 128}.do_t
1aa0: 65 73 74 20 75 70 64 61 74 65 2d 35 2e 36 2e 33  est update-5.6.3
1ab0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1ac0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
1ad0: 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20  1 WHERE f1==778 
1ae0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
1af0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  } {}.do_test upd
1b00: 61 74 65 2d 35 2e 36 2e 34 20 7b 0a 20 20 65 78  ate-5.6.4 {.  ex
1b10: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1b20: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
1b30: 20 66 31 3d 3d 37 37 37 20 4f 52 44 45 52 20 42   f1==777 ORDER B
1b40: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 37 20  Y f1,f2}.} {777 
1b50: 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  128}.do_test upd
1b60: 61 74 65 2d 35 2e 36 2e 35 20 7b 0a 20 20 65 78  ate-5.6.5 {.  ex
1b70: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1b80: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
1b90: 20 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59 20   f1==8 ORDER BY 
1ba0: 66 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38  f1,f2}.} {8 88 8
1bb0: 20 32 35 36 20 38 20 38 38 38 7d 0a 0a 23 20 52   256 8 888}..# R
1bc0: 65 70 65 61 74 20 74 68 65 20 70 72 65 76 69 6f  epeat the previo
1bd0: 75 73 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  us sequence of t
1be0: 65 73 74 73 20 77 69 74 68 20 61 20 64 69 66 66  ests with a diff
1bf0: 65 72 65 6e 74 20 69 6e 64 65 78 2e 0a 23 0a 65  erent index..#.e
1c00: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 73  xecsql {PRAGMA s
1c10: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 7d  ynchronous=FULL}
1c20: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
1c30: 36 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.0 {.  execsql 
1c40: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 64 78 31  {DROP INDEX idx1
1c50: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45  }.  execsql {CRE
1c60: 41 54 45 20 49 4e 44 45 58 20 69 64 78 31 20 4f  ATE INDEX idx1 O
1c70: 4e 20 74 65 73 74 31 28 66 32 29 7d 0a 20 20 65  N test1(f2)}.  e
1c80: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1c90: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
1ca0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
1cb0: 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38   64 7 128 8 88 8
1cc0: 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32   256 8 888 9 512
1cd0: 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20   10 1024 77 128 
1ce0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
1cf0: 20 75 70 64 61 74 65 2d 36 2e 31 20 7b 0a 20 20   update-6.1 {.  
1d00: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
1d10: 74 65 73 74 31 20 53 45 54 20 66 32 3d 66 32 2b  test1 SET f2=f2+
1d20: 31 20 57 48 45 52 45 20 66 31 3d 3d 38 7d 0a 20  1 WHERE f1==8}. 
1d30: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1d40: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52   * FROM test1 OR
1d50: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
1d60: 7b 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39  {6 64 7 128 8 89
1d70: 20 38 20 32 35 37 20 38 20 38 38 39 20 39 20 35   8 257 8 889 9 5
1d80: 31 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32  12 10 1024 77 12
1d90: 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  8 777 128}.do_te
1da0: 73 74 20 75 70 64 61 74 65 2d 36 2e 31 2e 31 20  st update-6.1.1 
1db0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1dc0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
1dd0: 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44   WHERE f1==8 ORD
1de0: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
1df0: 38 20 38 39 20 38 20 32 35 37 20 38 20 38 38 39  8 89 8 257 8 889
1e00: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
1e10: 2d 36 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -6.1.2 {.  execs
1e20: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
1e30: 4d 20 74 65 73 74 31 20 57 48 45 52 45 20 66 32  M test1 WHERE f2
1e40: 3d 3d 38 39 20 4f 52 44 45 52 20 42 59 20 66 31  ==89 ORDER BY f1
1e50: 2c 66 32 7d 0a 7d 20 7b 38 20 38 39 7d 0a 64 6f  ,f2}.} {8 89}.do
1e60: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 31  _test update-6.1
1e70: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1e80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
1e90: 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 38  st1 WHERE f1==88
1ea0: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
1eb0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70  .} {}.do_test up
1ec0: 64 61 74 65 2d 36 2e 32 20 7b 0a 20 20 65 78 65  date-6.2 {.  exe
1ed0: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73  csql {UPDATE tes
1ee0: 74 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57  t1 SET f2=f2-1 W
1ef0: 48 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 66  HERE f1==8 and f
1f00: 32 3e 38 30 30 7d 0a 20 20 65 78 65 63 73 71 6c  2>800}.  execsql
1f10: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1f20: 74 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66  test1 ORDER BY f
1f30: 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20  1,f2}.} {6 64 7 
1f40: 31 32 38 20 38 20 38 39 20 38 20 32 35 37 20 38  128 8 89 8 257 8
1f50: 20 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30   888 9 512 10 10
1f60: 32 34 20 37 37 20 31 32 38 20 37 37 37 20 31 32  24 77 128 777 12
1f70: 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  8}.do_test updat
1f80: 65 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  e-6.3 {.  execsq
1f90: 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74 31 20  l {UPDATE test1 
1fa0: 53 45 54 20 66 32 3d 66 32 2d 31 20 57 48 45 52  SET f2=f2-1 WHER
1fb0: 45 20 66 31 3d 3d 38 20 61 6e 64 20 66 32 3c 38  E f1==8 and f2<8
1fc0: 30 30 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  00}.  execsql {S
1fd0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
1fe0: 74 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  t1 ORDER BY f1,f
1ff0: 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31 32 38  2}.} {6 64 7 128
2000: 20 38 20 38 38 20 38 20 32 35 36 20 38 20 38 38   8 88 8 256 8 88
2010: 38 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20  8 9 512 10 1024 
2020: 37 37 20 31 32 38 20 37 37 37 20 31 32 38 7d 0a  77 128 777 128}.
2030: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
2040: 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.1 {.  execsql
2050: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2060: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
2070: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
2080: 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35 36 20  }.} {8 88 8 256 
2090: 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75  8 888}.do_test u
20a0: 70 64 61 74 65 2d 36 2e 33 2e 32 20 7b 0a 20 20  pdate-6.3.2 {.  
20b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
20c0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
20d0: 52 45 20 66 32 3d 3d 38 39 20 4f 52 44 45 52 20  RE f2==89 ORDER 
20e0: 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64  BY f1,f2}.} {}.d
20f0: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e  o_test update-6.
2100: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
2110: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2120: 65 73 74 31 20 57 48 45 52 45 20 66 32 3d 3d 38  est1 WHERE f2==8
2130: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
2140: 7d 0a 7d 20 7b 38 20 38 38 7d 0a 64 6f 5f 74 65  }.} {8 88}.do_te
2150: 73 74 20 75 70 64 61 74 65 2d 36 2e 34 20 7b 0a  st update-6.4 {.
2160: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
2170: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66  E test1 SET f1=f
2180: 31 2b 31 20 57 48 45 52 45 20 66 32 3d 3d 31 32  1+1 WHERE f2==12
2190: 38 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  8}.  execsql {SE
21a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
21b0: 31 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  1 ORDER BY f1,f2
21c0: 7d 0a 7d 20 7b 36 20 36 34 20 38 20 38 38 20 38  }.} {6 64 8 88 8
21d0: 20 31 32 38 20 38 20 32 35 36 20 38 20 38 38 38   128 8 256 8 888
21e0: 20 39 20 35 31 32 20 31 30 20 31 30 32 34 20 37   9 512 10 1024 7
21f0: 38 20 31 32 38 20 37 37 38 20 31 32 38 7d 0a 64  8 128 778 128}.d
2200: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e  o_test update-6.
2210: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
2220: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2230: 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37  est1 WHERE f1==7
2240: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
2250: 7d 0a 7d 20 7b 37 38 20 31 32 38 7d 0a 64 6f 5f  }.} {78 128}.do_
2260: 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 34 2e  test update-6.4.
2270: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
2280: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2290: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38  t1 WHERE f1==778
22a0: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
22b0: 0a 7d 20 7b 37 37 38 20 31 32 38 7d 0a 64 6f 5f  .} {778 128}.do_
22c0: 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 34 2e  test update-6.4.
22d0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
22e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
22f0: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f  t1 WHERE f1==8 O
2300: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2310: 20 7b 38 20 38 38 20 38 20 31 32 38 20 38 20 32   {8 88 8 128 8 2
2320: 35 36 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73  56 8 888}.do_tes
2330: 74 20 75 70 64 61 74 65 2d 36 2e 35 20 7b 0a 20  t update-6.5 {. 
2340: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
2350: 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66 31   test1 SET f1=f1
2360: 2d 31 20 57 48 45 52 45 20 66 31 3e 31 30 30 20  -1 WHERE f1>100 
2370: 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65  and f2==128}.  e
2380: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2390: 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45   FROM test1 ORDE
23a0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36  R BY f1,f2}.} {6
23b0: 20 36 34 20 38 20 38 38 20 38 20 31 32 38 20 38   64 8 88 8 128 8
23c0: 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32   256 8 888 9 512
23d0: 20 31 30 20 31 30 32 34 20 37 38 20 31 32 38 20   10 1024 78 128 
23e0: 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74  777 128}.do_test
23f0: 20 75 70 64 61 74 65 2d 36 2e 35 2e 31 20 7b 0a   update-6.5.1 {.
2400: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2410: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57  T * FROM test1 W
2420: 48 45 52 45 20 66 31 3d 3d 37 38 20 4f 52 44 45  HERE f1==78 ORDE
2430: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37  R BY f1,f2}.} {7
2440: 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75  8 128}.do_test u
2450: 70 64 61 74 65 2d 36 2e 35 2e 32 20 7b 0a 20 20  pdate-6.5.2 {.  
2460: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2470: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45  * FROM test1 WHE
2480: 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45 52  RE f1==778 ORDER
2490: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a   BY f1,f2}.} {}.
24a0: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
24b0: 2e 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.3 {.  execsql
24c0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
24d0: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
24e0: 37 37 37 20 4f 52 44 45 52 20 42 59 20 66 31 2c  777 ORDER BY f1,
24f0: 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d 0a  f2}.} {777 128}.
2500: 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 36  do_test update-6
2510: 2e 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.4 {.  execsql
2520: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2530: 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d 3d  test1 WHERE f1==
2540: 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32  8 ORDER BY f1,f2
2550: 7d 0a 7d 20 7b 38 20 38 38 20 38 20 31 32 38 20  }.} {8 88 8 128 
2560: 38 20 32 35 36 20 38 20 38 38 38 7d 0a 64 6f 5f  8 256 8 888}.do_
2570: 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 36 20  test update-6.6 
2580: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44  {.  execsql {UPD
2590: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31  ATE test1 SET f1
25a0: 3d 66 31 2d 31 20 57 48 45 52 45 20 66 31 3c 3d  =f1-1 WHERE f1<=
25b0: 31 30 30 20 61 6e 64 20 66 32 3d 3d 31 32 38 7d  100 and f2==128}
25c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
25d0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
25e0: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
25f0: 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20  } {6 64 7 128 8 
2600: 38 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39  88 8 256 8 888 9
2610: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20   512 10 1024 77 
2620: 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f  128 777 128}.do_
2630: 74 65 73 74 20 75 70 64 61 74 65 2d 36 2e 36 2e  test update-6.6.
2640: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
2650: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2660: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 20  t1 WHERE f1==77 
2670: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2680: 7d 20 7b 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65  } {77 128}.do_te
2690: 73 74 20 75 70 64 61 74 65 2d 36 2e 36 2e 32 20  st update-6.6.2 
26a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
26b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31  ECT * FROM test1
26c0: 20 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f   WHERE f1==778 O
26d0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
26e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61   {}.do_test upda
26f0: 74 65 2d 36 2e 36 2e 33 20 7b 0a 20 20 65 78 65  te-6.6.3 {.  exe
2700: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2710: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
2720: 66 31 3d 3d 37 37 37 20 4f 52 44 45 52 20 42 59  f1==777 ORDER BY
2730: 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31   f1,f2}.} {777 1
2740: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
2750: 74 65 2d 36 2e 36 2e 34 20 7b 0a 20 20 65 78 65  te-6.6.4 {.  exe
2760: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2770: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
2780: 66 31 3d 3d 38 20 4f 52 44 45 52 20 42 59 20 66  f1==8 ORDER BY f
2790: 31 2c 66 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20  1,f2}.} {8 88 8 
27a0: 32 35 36 20 38 20 38 38 38 7d 0a 0a 23 20 52 65  256 8 888}..# Re
27b0: 70 65 61 74 20 74 68 65 20 70 72 65 76 69 6f 75  peat the previou
27c0: 73 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 65  s sequence of te
27d0: 73 74 73 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  sts with multipl
27e0: 65 0a 23 20 69 6e 64 69 63 65 73 0a 23 0a 64 6f  e.# indices.#.do
27f0: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 30  _test update-7.0
2800: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
2810: 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 32 20  EATE INDEX idx2 
2820: 4f 4e 20 74 65 73 74 31 28 66 32 29 7d 0a 20 20  ON test1(f2)}.  
2830: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
2840: 49 4e 44 45 58 20 69 64 78 33 20 4f 4e 20 74 65  INDEX idx3 ON te
2850: 73 74 31 28 66 31 2c 66 32 29 7d 0a 20 20 65 78  st1(f1,f2)}.  ex
2860: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2870: 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52  FROM test1 ORDER
2880: 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20   BY f1,f2}.} {6 
2890: 36 34 20 37 20 31 32 38 20 38 20 38 38 20 38 20  64 7 128 8 88 8 
28a0: 32 35 36 20 38 20 38 38 38 20 39 20 35 31 32 20  256 8 888 9 512 
28b0: 31 30 20 31 30 32 34 20 37 37 20 31 32 38 20 37  10 1024 77 128 7
28c0: 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  77 128}.do_test 
28d0: 75 70 64 61 74 65 2d 37 2e 31 20 7b 0a 20 20 65  update-7.1 {.  e
28e0: 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74  xecsql {UPDATE t
28f0: 65 73 74 31 20 53 45 54 20 66 32 3d 66 32 2b 31  est1 SET f2=f2+1
2900: 20 57 48 45 52 45 20 66 31 3d 3d 38 7d 0a 20 20   WHERE f1==8}.  
2910: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2920: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
2930: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
2940: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 39 20  6 64 7 128 8 89 
2950: 38 20 32 35 37 20 38 20 38 38 39 20 39 20 35 31  8 257 8 889 9 51
2960: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
2970: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
2980: 74 20 75 70 64 61 74 65 2d 37 2e 31 2e 31 20 7b  t update-7.1.1 {
2990: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
29a0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
29b0: 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45  WHERE f1==8 ORDE
29c0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38  R BY f1,f2}.} {8
29d0: 20 38 39 20 38 20 32 35 37 20 38 20 38 38 39 7d   89 8 257 8 889}
29e0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
29f0: 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  7.1.2 {.  execsq
2a00: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
2a10: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 32 3d   test1 WHERE f2=
2a20: 3d 38 39 20 4f 52 44 45 52 20 42 59 20 66 31 2c  =89 ORDER BY f1,
2a30: 66 32 7d 0a 7d 20 7b 38 20 38 39 7d 0a 64 6f 5f  f2}.} {8 89}.do_
2a40: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 31 2e  test update-7.1.
2a50: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
2a60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2a70: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 38 20  t1 WHERE f1==88 
2a80: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2a90: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64  } {}.do_test upd
2aa0: 61 74 65 2d 37 2e 32 20 7b 0a 20 20 65 78 65 63  ate-7.2 {.  exec
2ab0: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65 73 74  sql {UPDATE test
2ac0: 31 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57 48  1 SET f2=f2-1 WH
2ad0: 45 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 66 32  ERE f1==8 and f2
2ae0: 3e 38 30 30 7d 0a 20 20 65 78 65 63 73 71 6c 20  >800}.  execsql 
2af0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2b00: 65 73 74 31 20 4f 52 44 45 52 20 42 59 20 66 31  est1 ORDER BY f1
2b10: 2c 66 32 7d 0a 7d 20 7b 36 20 36 34 20 37 20 31  ,f2}.} {6 64 7 1
2b20: 32 38 20 38 20 38 39 20 38 20 32 35 37 20 38 20  28 8 89 8 257 8 
2b30: 38 38 38 20 39 20 35 31 32 20 31 30 20 31 30 32  888 9 512 10 102
2b40: 34 20 37 37 20 31 32 38 20 37 37 37 20 31 32 38  4 77 128 777 128
2b50: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
2b60: 2d 37 2e 33 20 7b 0a 20 20 23 20 65 78 70 6c 61  -7.3 {.  # expla
2b70: 69 6e 20 7b 55 50 44 41 54 45 20 74 65 73 74 31  in {UPDATE test1
2b80: 20 53 45 54 20 66 32 3d 66 32 2d 31 20 57 48 45   SET f2=f2-1 WHE
2b90: 52 45 20 66 31 3d 3d 38 20 61 6e 64 20 46 32 3c  RE f1==8 and F2<
2ba0: 33 30 30 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  300}.  execsql {
2bb0: 55 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54  UPDATE test1 SET
2bc0: 20 66 32 3d 66 32 2d 31 20 57 48 45 52 45 20 66   f2=f2-1 WHERE f
2bd0: 31 3d 3d 38 20 61 6e 64 20 66 32 3c 38 30 30 7d  1==8 and f2<800}
2be0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2bf0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2c00: 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a  ORDER BY f1,f2}.
2c10: 7d 20 7b 36 20 36 34 20 37 20 31 32 38 20 38 20  } {6 64 7 128 8 
2c20: 38 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39  88 8 256 8 888 9
2c30: 20 35 31 32 20 31 30 20 31 30 32 34 20 37 37 20   512 10 1024 77 
2c40: 31 32 38 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f  128 777 128}.do_
2c50: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 33 2e  test update-7.3.
2c60: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
2c70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
2c80: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f  t1 WHERE f1==8 O
2c90: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2ca0: 20 7b 38 20 38 38 20 38 20 32 35 36 20 38 20 38   {8 88 8 256 8 8
2cb0: 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  88}.do_test upda
2cc0: 74 65 2d 37 2e 33 2e 32 20 7b 0a 20 20 65 78 65  te-7.3.2 {.  exe
2cd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2ce0: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
2cf0: 66 32 3d 3d 38 39 20 4f 52 44 45 52 20 42 59 20  f2==89 ORDER BY 
2d00: 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  f1,f2}.} {}.do_t
2d10: 65 73 74 20 75 70 64 61 74 65 2d 37 2e 33 2e 33  est update-7.3.3
2d20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2d30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
2d40: 31 20 57 48 45 52 45 20 66 32 3d 3d 38 38 20 4f  1 WHERE f2==88 O
2d50: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2d60: 20 7b 38 20 38 38 7d 0a 64 6f 5f 74 65 73 74 20   {8 88}.do_test 
2d70: 75 70 64 61 74 65 2d 37 2e 34 20 7b 0a 20 20 65  update-7.4 {.  e
2d80: 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74  xecsql {UPDATE t
2d90: 65 73 74 31 20 53 45 54 20 66 31 3d 66 31 2b 31  est1 SET f1=f1+1
2da0: 20 57 48 45 52 45 20 66 32 3d 3d 31 32 38 7d 0a   WHERE f2==128}.
2db0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2dc0: 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f  T * FROM test1 O
2dd0: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2de0: 20 7b 36 20 36 34 20 38 20 38 38 20 38 20 31 32   {6 64 8 88 8 12
2df0: 38 20 38 20 32 35 36 20 38 20 38 38 38 20 39 20  8 8 256 8 888 9 
2e00: 35 31 32 20 31 30 20 31 30 32 34 20 37 38 20 31  512 10 1024 78 1
2e10: 32 38 20 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74  28 778 128}.do_t
2e20: 65 73 74 20 75 70 64 61 74 65 2d 37 2e 34 2e 31  est update-7.4.1
2e30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2e40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74  LECT * FROM test
2e50: 31 20 57 48 45 52 45 20 66 31 3d 3d 37 38 20 4f  1 WHERE f1==78 O
2e60: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
2e70: 20 7b 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73   {78 128}.do_tes
2e80: 74 20 75 70 64 61 74 65 2d 37 2e 34 2e 32 20 7b  t update-7.4.2 {
2e90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2ea0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2eb0: 57 48 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52  WHERE f1==778 OR
2ec0: 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20  DER BY f1,f2}.} 
2ed0: 7b 37 37 38 20 31 32 38 7d 0a 64 6f 5f 74 65 73  {778 128}.do_tes
2ee0: 74 20 75 70 64 61 74 65 2d 37 2e 34 2e 33 20 7b  t update-7.4.3 {
2ef0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2f00: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
2f10: 57 48 45 52 45 20 66 31 3d 3d 38 20 4f 52 44 45  WHERE f1==8 ORDE
2f20: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 38  R BY f1,f2}.} {8
2f30: 20 38 38 20 38 20 31 32 38 20 38 20 32 35 36 20   88 8 128 8 256 
2f40: 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73 74 20 75  8 888}.do_test u
2f50: 70 64 61 74 65 2d 37 2e 35 20 7b 0a 20 20 65 78  pdate-7.5 {.  ex
2f60: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 65  ecsql {UPDATE te
2f70: 73 74 31 20 53 45 54 20 66 31 3d 66 31 2d 31 20  st1 SET f1=f1-1 
2f80: 57 48 45 52 45 20 66 31 3e 31 30 30 20 61 6e 64  WHERE f1>100 and
2f90: 20 66 32 3d 3d 31 32 38 7d 0a 20 20 65 78 65 63   f2==128}.  exec
2fa0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2fb0: 4f 4d 20 74 65 73 74 31 20 4f 52 44 45 52 20 42  OM test1 ORDER B
2fc0: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 36 20 36 34  Y f1,f2}.} {6 64
2fd0: 20 38 20 38 38 20 38 20 31 32 38 20 38 20 32 35   8 88 8 128 8 25
2fe0: 36 20 38 20 38 38 38 20 39 20 35 31 32 20 31 30  6 8 888 9 512 10
2ff0: 20 31 30 32 34 20 37 38 20 31 32 38 20 37 37 37   1024 78 128 777
3000: 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70   128}.do_test up
3010: 64 61 74 65 2d 37 2e 35 2e 31 20 7b 0a 20 20 65  date-7.5.1 {.  e
3020: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
3030: 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52   FROM test1 WHER
3040: 45 20 66 31 3d 3d 37 38 20 4f 52 44 45 52 20 42  E f1==78 ORDER B
3050: 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 37 38 20 31  Y f1,f2}.} {78 1
3060: 32 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  28}.do_test upda
3070: 74 65 2d 37 2e 35 2e 32 20 7b 0a 20 20 65 78 65  te-7.5.2 {.  exe
3080: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
3090: 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45 20  ROM test1 WHERE 
30a0: 66 31 3d 3d 37 37 38 20 4f 52 44 45 52 20 42 59  f1==778 ORDER BY
30b0: 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f   f1,f2}.} {}.do_
30c0: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 35 2e  test update-7.5.
30d0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
30e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
30f0: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 37 37 37  t1 WHERE f1==777
3100: 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d   ORDER BY f1,f2}
3110: 0a 7d 20 7b 37 37 37 20 31 32 38 7d 0a 64 6f 5f  .} {777 128}.do_
3120: 74 65 73 74 20 75 70 64 61 74 65 2d 37 2e 35 2e  test update-7.5.
3130: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
3140: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 73  ELECT * FROM tes
3150: 74 31 20 57 48 45 52 45 20 66 31 3d 3d 38 20 4f  t1 WHERE f1==8 O
3160: 52 44 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d  RDER BY f1,f2}.}
3170: 20 7b 38 20 38 38 20 38 20 31 32 38 20 38 20 32   {8 88 8 128 8 2
3180: 35 36 20 38 20 38 38 38 7d 0a 64 6f 5f 74 65 73  56 8 888}.do_tes
3190: 74 20 75 70 64 61 74 65 2d 37 2e 36 20 7b 0a 20  t update-7.6 {. 
31a0: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
31b0: 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 66 31   test1 SET f1=f1
31c0: 2d 31 20 57 48 45 52 45 20 66 31 3c 3d 31 30 30  -1 WHERE f1<=100
31d0: 20 61 6e 64 20 66 32 3d 3d 31 32 38 7d 0a 20 20   and f2==128}.  
31e0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
31f0: 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 4f 52 44  * FROM test1 ORD
3200: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
3210: 36 20 36 34 20 37 20 31 32 38 20 38 20 38 38 20  6 64 7 128 8 88 
3220: 38 20 32 35 36 20 38 20 38 38 38 20 39 20 35 31  8 256 8 888 9 51
3230: 32 20 31 30 20 31 30 32 34 20 37 37 20 31 32 38  2 10 1024 77 128
3240: 20 37 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73   777 128}.do_tes
3250: 74 20 75 70 64 61 74 65 2d 37 2e 36 2e 31 20 7b  t update-7.6.1 {
3260: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
3270: 43 54 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20  CT * FROM test1 
3280: 57 48 45 52 45 20 66 31 3d 3d 37 37 20 4f 52 44  WHERE f1==77 ORD
3290: 45 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b  ER BY f1,f2}.} {
32a0: 37 37 20 31 32 38 7d 0a 64 6f 5f 74 65 73 74 20  77 128}.do_test 
32b0: 75 70 64 61 74 65 2d 37 2e 36 2e 32 20 7b 0a 20  update-7.6.2 {. 
32c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
32d0: 20 2a 20 46 52 4f 4d 20 74 65 73 74 31 20 57 48   * FROM test1 WH
32e0: 45 52 45 20 66 31 3d 3d 37 37 38 20 4f 52 44 45  ERE f1==778 ORDE
32f0: 52 20 42 59 20 66 31 2c 66 32 7d 0a 7d 20 7b 7d  R BY f1,f2}.} {}
3300: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3310: 37 2e 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  7.6.3 {.  execsq
3320: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
3330: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
3340: 3d 37 37 37 20 4f 52 44 45 52 20 42 59 20 66 31  =777 ORDER BY f1
3350: 2c 66 32 7d 0a 7d 20 7b 37 37 37 20 31 32 38 7d  ,f2}.} {777 128}
3360: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3370: 37 2e 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  7.6.4 {.  execsq
3380: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
3390: 20 74 65 73 74 31 20 57 48 45 52 45 20 66 31 3d   test1 WHERE f1=
33a0: 3d 38 20 4f 52 44 45 52 20 42 59 20 66 31 2c 66  =8 ORDER BY f1,f
33b0: 32 7d 0a 7d 20 7b 38 20 38 38 20 38 20 32 35 36  2}.} {8 88 8 256
33c0: 20 38 20 38 38 38 7d 0a 0a 23 20 45 72 72 6f 72   8 888}..# Error
33d0: 20 6d 65 73 73 61 67 65 73 0a 23 0a 64 6f 5f 74   messages.#.do_t
33e0: 65 73 74 20 75 70 64 61 74 65 2d 39 2e 31 20 7b  est update-9.1 {
33f0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
3400: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55  {execsql {.    U
3410: 50 44 41 54 45 20 74 65 73 74 31 20 53 45 54 20  PDATE test1 SET 
3420: 78 3d 31 31 20 57 48 45 52 45 20 66 31 3d 31 30  x=11 WHERE f1=10
3430: 32 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  25.  }} msg].  l
3440: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
3450: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75  {1 {no such colu
3460: 6d 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20  mn: x}}.do_test 
3470: 75 70 64 61 74 65 2d 39 2e 32 20 7b 0a 20 20 73  update-9.2 {.  s
3480: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
3490: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
34a0: 45 20 74 65 73 74 31 20 53 45 54 20 66 31 3d 78  E test1 SET f1=x
34b0: 28 31 31 29 20 57 48 45 52 45 20 66 31 3d 31 30  (11) WHERE f1=10
34c0: 32 35 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  25.  }} msg].  l
34d0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
34e0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e 63  {1 {no such func
34f0: 74 69 6f 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73  tion: x}}.do_tes
3500: 74 20 75 70 64 61 74 65 2d 39 2e 33 20 7b 0a 20  t update-9.3 {. 
3510: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
3520: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
3530: 41 54 45 20 74 65 73 74 31 20 53 45 54 20 66 31  ATE test1 SET f1
3540: 3d 31 31 20 57 48 45 52 45 20 78 3d 31 30 32 35  =11 WHERE x=1025
3550: 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  .  }} msg].  lap
3560: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
3570: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
3580: 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70  : x}}.do_test up
3590: 64 61 74 65 2d 39 2e 34 20 7b 0a 20 20 73 65 74  date-9.4 {.  set
35a0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
35b0: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
35c0: 74 65 73 74 31 20 53 45 54 20 66 31 3d 31 31 20  test1 SET f1=11 
35d0: 57 48 45 52 45 20 78 28 66 31 29 3d 31 30 32 35  WHERE x(f1)=1025
35e0: 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  .  }} msg].  lap
35f0: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
3600: 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69   {no such functi
3610: 6f 6e 3a 20 78 7d 7d 0a 0a 23 20 54 72 79 20 64  on: x}}..# Try d
3620: 6f 69 6e 67 20 75 70 64 61 74 65 73 20 6f 6e 20  oing updates on 
3630: 61 20 75 6e 69 71 75 65 20 63 6f 6c 75 6d 6e 20  a unique column 
3640: 77 68 65 72 65 20 74 68 65 20 76 61 6c 75 65 20  where the value 
3650: 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 61 6c 6c  does not.# reall
3660: 79 20 63 68 61 6e 67 65 2e 0a 23 0a 64 6f 5f 74  y change..#.do_t
3670: 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 31 20  est update-10.1 
3680: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3690: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 65 73    DROP TABLE tes
36a0: 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t1;.    CREATE T
36b0: 41 42 4c 45 20 74 31 28 0a 20 20 20 20 20 20 20  ABLE t1(.       
36c0: 61 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  a integer primar
36d0: 79 20 6b 65 79 2c 0a 20 20 20 20 20 20 20 62 20  y key,.       b 
36e0: 55 4e 49 51 55 45 2c 20 0a 20 20 20 20 20 20 20  UNIQUE, .       
36f0: 63 2c 20 64 2c 0a 20 20 20 20 20 20 20 65 2c 20  c, d,.       e, 
3700: 66 2c 0a 20 20 20 20 20 20 20 55 4e 49 51 55 45  f,.       UNIQUE
3710: 28 63 2c 64 29 0a 20 20 20 20 29 3b 0a 20 20 20  (c,d).    );.   
3720: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3730: 56 41 4c 55 45 53 28 31 2c 32 2c 33 2c 34 2c 35  VALUES(1,2,3,4,5
3740: 2c 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,6);.    INSERT 
3750: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
3760: 2c 33 2c 34 2c 34 2c 36 2c 37 29 3b 0a 20 20 20  ,3,4,4,6,7);.   
3770: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3780: 31 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  1.  }.} {1 2 3 4
3790: 20 35 20 36 20 32 20 33 20 34 20 34 20 36 20 37   5 6 2 3 4 4 6 7
37a0: 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  }.do_test update
37b0: 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -10.2 {.  catchs
37c0: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
37d0: 74 31 20 53 45 54 20 61 3d 31 2c 20 65 3d 39 20  t1 SET a=1, e=9 
37e0: 57 48 45 52 45 20 66 3d 36 3b 0a 20 20 20 20 53  WHERE f=6;.    S
37f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
3800: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33  .  }.} {0 {1 2 3
3810: 20 34 20 39 20 36 20 32 20 33 20 34 20 34 20 36   4 9 6 2 3 4 4 6
3820: 20 37 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64   7}}.do_test upd
3830: 61 74 65 2d 31 30 2e 33 20 7b 0a 20 20 63 61 74  ate-10.3 {.  cat
3840: 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
3850: 54 45 20 74 31 20 53 45 54 20 61 3d 31 2c 20 65  TE t1 SET a=1, e
3860: 3d 31 30 20 57 48 45 52 45 20 66 3d 37 3b 0a 20  =10 WHERE f=7;. 
3870: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3880: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 50   t1;.  }.} {1 {P
3890: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
38a0: 62 65 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74  be unique}}.do_t
38b0: 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e 34 20  est update-10.4 
38c0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
38d0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
38e0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31   t1;.  }.} {0 {1
38f0: 20 32 20 33 20 34 20 39 20 36 20 32 20 33 20 34   2 3 4 9 6 2 3 4
3900: 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74   4 6 7}}.do_test
3910: 20 75 70 64 61 74 65 2d 31 30 2e 35 20 7b 0a 20   update-10.5 {. 
3920: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3930: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
3940: 32 2c 20 65 3d 31 31 20 57 48 45 52 45 20 66 3d  2, e=11 WHERE f=
3950: 36 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  6;.    SELECT * 
3960: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
3970: 30 20 7b 31 20 32 20 33 20 34 20 31 31 20 36 20  0 {1 2 3 4 11 6 
3980: 32 20 33 20 34 20 34 20 36 20 37 7d 7d 0a 64 6f  2 3 4 4 6 7}}.do
3990: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30 2e  _test update-10.
39a0: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
39b0: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
39c0: 45 54 20 62 3d 32 2c 20 65 3d 31 32 20 57 48 45  ET b=2, e=12 WHE
39d0: 52 45 20 66 3d 37 3b 0a 20 20 20 20 53 45 4c 45  RE f=7;.    SELE
39e0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
39f0: 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 62  }.} {1 {column b
3a00: 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d   is not unique}}
3a10: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3a20: 31 30 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  10.7 {.  catchsq
3a30: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
3a40: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
3a50: 7b 30 20 7b 31 20 32 20 33 20 34 20 31 31 20 36  {0 {1 2 3 4 11 6
3a60: 20 32 20 33 20 34 20 34 20 36 20 37 7d 7d 0a 64   2 3 4 4 6 7}}.d
3a70: 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 30  o_test update-10
3a80: 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .8 {.  catchsql 
3a90: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
3aa0: 53 45 54 20 63 3d 33 2c 20 64 3d 34 2c 20 65 3d  SET c=3, d=4, e=
3ab0: 31 33 20 57 48 45 52 45 20 66 3d 36 3b 0a 20 20  13 WHERE f=6;.  
3ac0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3ad0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31 20  t1;.  }.} {0 {1 
3ae0: 32 20 33 20 34 20 31 33 20 36 20 32 20 33 20 34  2 3 4 13 6 2 3 4
3af0: 20 34 20 36 20 37 7d 7d 0a 64 6f 5f 74 65 73 74   4 6 7}}.do_test
3b00: 20 75 70 64 61 74 65 2d 31 30 2e 39 20 7b 0a 20   update-10.9 {. 
3b10: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3b20: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 63 3d  UPDATE t1 SET c=
3b30: 33 2c 20 64 3d 34 2c 20 65 3d 31 34 20 57 48 45  3, d=4, e=14 WHE
3b40: 52 45 20 66 3d 37 3b 0a 20 20 20 20 53 45 4c 45  RE f=7;.    SELE
3b50: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
3b60: 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20  }.} {1 {columns 
3b70: 63 2c 20 64 20 61 72 65 20 6e 6f 74 20 75 6e 69  c, d are not uni
3b80: 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70  que}}.do_test up
3b90: 64 61 74 65 2d 31 30 2e 31 30 20 7b 0a 20 20 63  date-10.10 {.  c
3ba0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
3bb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
3bc0: 20 20 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20    }.} {0 {1 2 3 
3bd0: 34 20 31 33 20 36 20 32 20 33 20 34 20 34 20 36  4 13 6 2 3 4 4 6
3be0: 20 37 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72   7}}..# Make sur
3bf0: 65 20 77 65 20 63 61 6e 20 68 61 6e 64 6c 65 20  e we can handle 
3c00: 61 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  a subquery in th
3c10: 65 20 77 68 65 72 65 20 63 6c 61 75 73 65 2e 0a  e where clause..
3c20: 23 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71  #.ifcapable subq
3c30: 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74  uery {.  do_test
3c40: 20 75 70 64 61 74 65 2d 31 31 2e 31 20 7b 0a 20   update-11.1 {. 
3c50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3c60: 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54     UPDATE t1 SET
3c70: 20 65 3d 65 2b 31 20 57 48 45 52 45 20 62 20 49   e=e+1 WHERE b I
3c80: 4e 20 28 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  N (SELECT b FROM
3c90: 20 74 31 29 3b 0a 20 20 20 20 20 20 53 45 4c 45   t1);.      SELE
3ca0: 43 54 20 62 2c 65 20 46 52 4f 4d 20 74 31 3b 0a  CT b,e FROM t1;.
3cb0: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 34 20      }.  } {2 14 
3cc0: 33 20 37 7d 0a 20 20 64 6f 5f 74 65 73 74 20 75  3 7}.  do_test u
3cd0: 70 64 61 74 65 2d 31 31 2e 32 20 7b 0a 20 20 20  pdate-11.2 {.   
3ce0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3cf0: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 65   UPDATE t1 SET e
3d00: 3d 65 2b 31 20 57 48 45 52 45 20 61 20 49 4e 20  =e+1 WHERE a IN 
3d10: 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  (SELECT a FROM t
3d20: 31 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  1);.      SELECT
3d30: 20 61 2c 65 20 46 52 4f 4d 20 74 31 3b 0a 20 20   a,e FROM t1;.  
3d40: 20 20 7d 0a 20 20 7d 20 7b 31 20 31 35 20 32 20    }.  } {1 15 2 
3d50: 38 7d 0a 7d 0a 0a 69 6e 74 65 67 72 69 74 79 5f  8}.}..integrity_
3d60: 63 68 65 63 6b 20 75 70 64 61 74 65 2d 31 32 2e  check update-12.
3d70: 31 0a 0a 23 20 54 69 63 6b 65 74 20 36 30 32 2e  1..# Ticket 602.
3d80: 20 20 55 70 64 61 74 65 73 20 73 68 6f 75 6c 64    Updates should
3d90: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 73 61   occur in the sa
3da0: 6d 65 20 6f 72 64 65 72 20 61 73 20 74 68 65 20  me order as the 
3db0: 72 65 63 6f 72 64 73 0a 23 20 77 65 72 65 20 64  records.# were d
3dc0: 69 73 63 6f 76 65 72 65 64 20 69 6e 20 74 68 65  iscovered in the
3dd0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 23   WHERE clause..#
3de0: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
3df0: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
3e00: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
3e10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3e20: 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(a);.    INSERT
3e30: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
3e40: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
3e50: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 29  NTO t2 VALUES(2)
3e60: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3e70: 4f 20 74 32 20 53 45 4c 45 43 54 20 61 2b 32 20  O t2 SELECT a+2 
3e80: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
3e90: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
3ea0: 43 54 20 61 2b 34 20 46 52 4f 4d 20 74 32 3b 0a  CT a+4 FROM t2;.
3eb0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3ec0: 74 32 20 53 45 4c 45 43 54 20 61 2b 38 20 46 52  t2 SELECT a+8 FR
3ed0: 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52  OM t2;.    INSER
3ee0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
3ef0: 20 61 2b 31 36 20 46 52 4f 4d 20 74 32 3b 0a 20   a+16 FROM t2;. 
3f00: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3f10: 32 20 53 45 4c 45 43 54 20 61 2b 33 32 20 46 52  2 SELECT a+32 FR
3f20: 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52  OM t2;.    INSER
3f30: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
3f40: 20 61 2b 36 34 20 46 52 4f 4d 20 74 32 3b 0a 20   a+64 FROM t2;. 
3f50: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3f60: 32 20 53 45 4c 45 43 54 20 61 2b 31 32 38 20 46  2 SELECT a+128 F
3f70: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
3f80: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
3f90: 54 20 61 2b 32 35 36 20 46 52 4f 4d 20 74 32 3b  T a+256 FROM t2;
3fa0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3fb0: 20 74 32 20 53 45 4c 45 43 54 20 61 2b 35 31 32   t2 SELECT a+512
3fc0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e   FROM t2;.    IN
3fd0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
3fe0: 45 43 54 20 61 2b 31 30 32 34 20 46 52 4f 4d 20  ECT a+1024 FROM 
3ff0: 74 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  t2;.    COMMIT;.
4000: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
4010: 28 2a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  (*) FROM t2;.  }
4020: 0a 7d 20 7b 32 30 34 38 7d 0a 64 6f 5f 74 65 73  .} {2048}.do_tes
4030: 74 20 75 70 64 61 74 65 2d 31 33 2e 32 20 7b 0a  t update-13.2 {.
4040: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4050: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
4060: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d  FROM t2 WHERE a=
4070: 72 6f 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 32 30  rowid;.  }.} {20
4080: 34 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  48}.do_test upda
4090: 74 65 2d 31 33 2e 33 20 7b 0a 20 20 65 78 65 63  te-13.3 {.  exec
40a0: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
40b0: 20 74 32 20 53 45 54 20 72 6f 77 69 64 3d 72 6f   t2 SET rowid=ro
40c0: 77 69 64 2d 31 3b 0a 20 20 20 20 53 45 4c 45 43  wid-1;.    SELEC
40d0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
40e0: 74 32 20 57 48 45 52 45 20 61 3d 72 6f 77 69 64  t2 WHERE a=rowid
40f0: 2b 31 3b 0a 20 20 7d 0a 7d 20 7b 32 30 34 38 7d  +1;.  }.} {2048}
4100: 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65 2d  .do_test update-
4110: 31 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.3 {.  execsql
4120: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32   {.    UPDATE t2
4130: 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64   SET rowid=rowid
4140: 2b 31 30 30 30 30 3b 0a 20 20 20 20 55 50 44 41  +10000;.    UPDA
4150: 54 45 20 74 32 20 53 45 54 20 72 6f 77 69 64 3d  TE t2 SET rowid=
4160: 72 6f 77 69 64 2d 39 39 39 39 3b 0a 20 20 20 20  rowid-9999;.    
4170: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
4180: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d  FROM t2 WHERE a=
4190: 72 6f 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 32 30  rowid;.  }.} {20
41a0: 34 38 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61  48}.do_test upda
41b0: 74 65 2d 31 33 2e 34 20 7b 0a 20 20 65 78 65 63  te-13.4 {.  exec
41c0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
41d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
41e0: 20 74 32 20 53 45 4c 45 43 54 20 61 2b 32 30 34   t2 SELECT a+204
41f0: 38 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49  8 FROM t2;.    I
4200: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
4210: 4c 45 43 54 20 61 2b 34 30 39 36 20 46 52 4f 4d  LECT a+4096 FROM
4220: 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t2;.    INSERT 
4230: 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 61  INTO t2 SELECT a
4240: 2b 38 31 39 32 20 46 52 4f 4d 20 74 32 3b 0a 20  +8192 FROM t2;. 
4250: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
4260: 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  *) FROM t2 WHERE
4270: 20 61 3d 72 6f 77 69 64 3b 0a 20 20 20 20 43 4f   a=rowid;.    CO
4280: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 31 36 33 38  MMIT;.  }.} 1638
4290: 34 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74 65  4.do_test update
42a0: 2d 31 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  -13.5 {.  execsq
42b0: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
42c0: 32 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69  2 SET rowid=rowi
42d0: 64 2d 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  d-1;.    SELECT 
42e0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32  count(*) FROM t2
42f0: 20 57 48 45 52 45 20 61 3d 72 6f 77 69 64 2b 31   WHERE a=rowid+1
4300: 3b 0a 20 20 7d 0a 7d 20 31 36 33 38 34 0a 0a 69  ;.  }.} 16384..i
4310: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 75  ntegrity_check u
4320: 70 64 61 74 65 2d 31 33 2e 36 0a 0a 69 66 63 61  pdate-13.6..ifca
4330: 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72 7d 20  pable {trigger} 
4340: 7b 0a 23 20 54 65 73 74 20 66 6f 72 20 70 72 6f  {.# Test for pro
4350: 70 65 72 20 64 65 74 65 63 74 69 6f 6e 20 6f 66  per detection of
4360: 20 6d 61 6c 66 6f 72 6d 65 64 20 57 48 45 4e 20   malformed WHEN 
4370: 63 6c 61 75 73 65 73 20 6f 6e 20 55 50 44 41 54  clauses on UPDAT
4380: 45 20 74 72 69 67 67 65 72 73 2e 0a 23 0a 64 6f  E triggers..#.do
4390: 5f 74 65 73 74 20 75 70 64 61 74 65 2d 31 34 2e  _test update-14.
43a0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
43b0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
43c0: 20 74 33 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20   t3(a,b,c);.    
43d0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
43e0: 33 72 31 20 42 45 46 4f 52 45 20 55 50 44 41 54  3r1 BEFORE UPDAT
43f0: 45 20 6f 6e 20 74 33 20 57 48 45 4e 20 6e 6f 73  E on t3 WHEN nos
4400: 75 63 68 63 6f 6c 20 42 45 47 49 4e 0a 20 20 20  uchcol BEGIN.   
4410: 20 20 20 53 45 4c 45 43 54 20 27 69 6c 6c 65 67     SELECT 'illeg
4420: 61 6c 20 57 48 45 4e 20 63 6c 61 75 73 65 27 3b  al WHEN clause';
4430: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
4440: 7b 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  {}.do_test updat
4450: 65 2d 31 34 2e 32 20 7b 0a 20 20 63 61 74 63 68  e-14.2 {.  catch
4460: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
4470: 20 74 33 20 53 45 54 20 61 3d 31 3b 0a 20 20 7d   t3 SET a=1;.  }
4480: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63  .} {1 {no such c
4490: 6f 6c 75 6d 6e 3a 20 6e 6f 73 75 63 68 63 6f 6c  olumn: nosuchcol
44a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 75 70 64 61 74  }}.do_test updat
44b0: 65 2d 31 34 2e 33 20 7b 0a 20 20 65 78 65 63 73  e-14.3 {.  execs
44c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
44d0: 54 41 42 4c 45 20 74 34 28 61 2c 62 2c 63 29 3b  TABLE t4(a,b,c);
44e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
44f0: 47 45 52 20 74 34 72 31 20 41 46 54 45 52 20 55  GER t4r1 AFTER U
4500: 50 44 41 54 45 20 6f 6e 20 74 34 20 57 48 45 4e  PDATE on t4 WHEN
4510: 20 6e 6f 73 75 63 68 63 6f 6c 20 42 45 47 49 4e   nosuchcol BEGIN
4520: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 27 69  .      SELECT 'i
4530: 6c 6c 65 67 61 6c 20 57 48 45 4e 20 63 6c 61 75  llegal WHEN clau
4540: 73 65 27 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  se';.    END;.  
4550: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 75  }.} {}.do_test u
4560: 70 64 61 74 65 2d 31 34 2e 34 20 7b 0a 20 20 63  pdate-14.4 {.  c
4570: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50  atchsql {.    UP
4580: 44 41 54 45 20 74 34 20 53 45 54 20 61 3d 31 3b  DATE t4 SET a=1;
4590: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
45a0: 63 68 20 63 6f 6c 75 6d 6e 3a 20 6e 6f 73 75 63  ch column: nosuc
45b0: 68 63 6f 6c 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63  hcol}}..} ;# ifc
45c0: 61 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72 7d  apable {trigger}
45d0: 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ...finish_test.