/ Hex Artifact Content
Login

Artifact bb29b052c60a1f7eb6382be77902061d1f305318:


0000: 23 20 32 30 30 32 20 4a 61 6e 75 61 72 79 20 32  # 2002 January 2
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 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 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66 69 6c  ry..#.# This fil
01b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73  e implements tes
01c0: 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6e 66 6c  ts for the confl
01d0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 65  ict resolution e
01e0: 78 74 65 6e 73 69 6f 6e 0a 23 20 74 6f 20 53 51  xtension.# to SQ
01f0: 4c 69 74 65 2e 0a 23 0a 23 20 24 49 64 3a 20 63  Lite..#.# $Id: c
0200: 6f 6e 66 6c 69 63 74 2e 74 65 73 74 2c 76 20 31  onflict.test,v 1
0210: 2e 33 31 20 32 30 30 38 2f 30 31 2f 32 31 20 31  .31 2008/01/21 1
0220: 36 3a 32 32 3a 34 36 20 64 72 68 20 45 78 70 20  6:22:46 drh Exp 
0230: 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  $..set testdir [
0240: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0250: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0260: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0270: 0a 69 66 63 61 70 61 62 6c 65 20 21 63 6f 6e 66  .ifcapable !conf
0280: 6c 69 63 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f  lict {.  finish_
0290: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
02a0: 0a 23 20 43 72 65 61 74 65 20 74 61 62 6c 65 73  .# Create tables
02b0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 67   for the first g
02c0: 72 6f 75 70 20 6f 66 20 74 65 73 74 73 2e 0a 23  roup of tests..#
02d0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  .do_test conflic
02e0: 74 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  t-1.0 {.  execsq
02f0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0300: 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 2c  ABLE t1(a, b, c,
0310: 20 55 4e 49 51 55 45 28 61 2c 62 29 29 3b 0a 20   UNIQUE(a,b));. 
0320: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0330: 74 32 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43  t2(x);.    SELEC
0340: 54 20 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T c FROM t1 ORDE
0350: 52 20 42 59 20 63 3b 0a 20 20 7d 0a 7d 20 7b 7d  R BY c;.  }.} {}
0360: 0a 0a 23 20 53 69 78 20 63 6f 6c 75 6d 6e 73 20  ..# Six columns 
0370: 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  of configuration
0380: 20 64 61 74 61 20 61 73 20 66 6f 6c 6c 6f 77 73   data as follows
0390: 3a 0a 23 0a 23 20 20 20 69 20 20 20 20 20 20 54  :.#.#   i      T
03a0: 68 65 20 72 65 66 65 72 65 6e 63 65 20 6e 75 6d  he reference num
03b0: 62 65 72 20 6f 66 20 74 68 65 20 74 65 73 74 0a  ber of the test.
03c0: 23 20 20 20 63 6d 64 20 20 20 20 41 6e 20 49 4e  #   cmd    An IN
03d0: 53 45 52 54 20 6f 72 20 52 45 50 4c 41 43 45 20  SERT or REPLACE 
03e0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63 75  command to execu
03f0: 74 65 20 61 67 61 69 6e 73 74 20 74 61 62 6c 65  te against table
0400: 20 74 31 0a 23 20 20 20 74 30 20 20 20 20 20 54   t1.#   t0     T
0410: 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
0420: 61 6e 20 65 72 72 6f 72 20 66 72 6f 6d 20 24 63  an error from $c
0430: 6d 64 0a 23 20 20 20 74 31 20 20 20 20 20 43 6f  md.#   t1     Co
0440: 6e 74 65 6e 74 20 6f 66 20 22 63 22 20 63 6f 6c  ntent of "c" col
0450: 75 6d 6e 20 6f 66 20 74 31 20 61 73 73 75 6d 69  umn of t1 assumi
0460: 6e 67 20 6e 6f 20 65 72 72 6f 72 20 69 6e 20 24  ng no error in $
0470: 63 6d 64 0a 23 20 20 20 74 32 20 20 20 20 20 43  cmd.#   t2     C
0480: 6f 6e 74 65 6e 74 20 6f 66 20 22 78 22 20 63 6f  ontent of "x" co
0490: 6c 75 6d 6e 20 6f 66 20 74 32 0a 23 20 20 20 74  lumn of t2.#   t
04a0: 33 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20  3     Number of 
04b0: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 20  temporary files 
04c0: 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
04d0: 74 65 73 74 0a 23 0a 66 6f 72 65 61 63 68 20 7b  test.#.foreach {
04e0: 69 20 63 6d 64 20 74 30 20 74 31 20 74 32 20 74  i cmd t0 t1 t2 t
04f0: 33 7d 20 7b 0a 20 20 31 20 49 4e 53 45 52 54 20  3} {.  1 INSERT 
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 31 20 7b 7d 20 20 31 20 20 30 0a 20 20 32 20   1 {}  1  0.  2 
0520: 7b 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  {INSERT OR IGNOR
0530: 45 7d 20 20 20 20 20 20 30 20 33 20 20 20 31 20  E}      0 3   1 
0540: 20 30 0a 20 20 33 20 7b 49 4e 53 45 52 54 20 4f   0.  3 {INSERT O
0550: 52 20 52 45 50 4c 41 43 45 7d 20 20 20 20 20 30  R REPLACE}     0
0560: 20 34 20 20 20 31 20 20 30 0a 20 20 34 20 52 45   4   1  0.  4 RE
0570: 50 4c 41 43 45 20 20 20 20 20 20 20 20 20 20 20  PLACE           
0580: 20 20 20 20 20 20 30 20 34 20 20 20 31 20 20 30        0 4   1  0
0590: 0a 20 20 35 20 7b 49 4e 53 45 52 54 20 4f 52 20  .  5 {INSERT OR 
05a0: 46 41 49 4c 7d 20 20 20 20 20 20 20 20 31 20 7b  FAIL}        1 {
05b0: 7d 20 20 31 20 20 30 0a 20 20 36 20 7b 49 4e 53  }  1  0.  6 {INS
05c0: 45 52 54 20 4f 52 20 41 42 4f 52 54 7d 20 20 20  ERT OR ABORT}   
05d0: 20 20 20 20 31 20 7b 7d 20 20 31 20 20 30 0a 20      1 {}  1  0. 
05e0: 20 37 20 7b 49 4e 53 45 52 54 20 4f 52 20 52 4f   7 {INSERT OR RO
05f0: 4c 4c 42 41 43 4b 7d 20 20 20 20 31 20 7b 7d 20  LLBACK}    1 {} 
0600: 20 7b 7d 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f 74   {} 0.} {.  do_t
0610: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31 2e 24  est conflict-1.$
0620: 69 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 73 71  i {.    set ::sq
0630: 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  lite_opentemp_co
0640: 75 6e 74 20 30 0a 20 20 20 20 73 65 74 20 72 30  unt 0.    set r0
0650: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
0660: 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 20 20   [subst {.      
0670: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a  DELETE FROM t1;.
0680: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
0690: 4d 20 74 32 3b 0a 20 20 20 20 20 20 49 4e 53 45  M t2;.      INSE
06a0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
06b0: 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20  S(1,2,3);.      
06c0: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 49 4e 53  BEGIN;.      INS
06d0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
06e0: 45 53 28 31 29 3b 20 0a 20 20 20 20 20 20 24 63  ES(1); .      $c
06f0: 6d 64 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  md INTO t1 VALUE
0700: 53 28 31 2c 32 2c 34 29 3b 0a 20 20 20 20 7d 5d  S(1,2,4);.    }]
0710: 7d 20 72 31 5d 0a 20 20 20 20 63 61 74 63 68 20  } r1].    catch 
0720: 7b 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54  {execsql {COMMIT
0730: 7d 7d 0a 20 20 20 20 69 66 20 7b 24 72 30 7d 20  }}.    if {$r0} 
0740: 7b 73 65 74 20 72 31 20 7b 7d 7d 20 7b 73 65 74  {set r1 {}} {set
0750: 20 72 31 20 5b 65 78 65 63 73 71 6c 20 7b 53 45   r1 [execsql {SE
0760: 4c 45 43 54 20 63 20 46 52 4f 4d 20 74 31 7d 5d  LECT c FROM t1}]
0770: 7d 0a 20 20 20 20 73 65 74 20 72 32 20 5b 65 78  }.    set r2 [ex
0780: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 78 20  ecsql {SELECT x 
0790: 46 52 4f 4d 20 74 32 7d 5d 0a 20 20 20 20 73 65  FROM t2}].    se
07a0: 74 20 72 33 20 24 3a 3a 73 71 6c 69 74 65 5f 6f  t r3 $::sqlite_o
07b0: 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 0a 20 20  pentemp_count.  
07c0: 20 20 6c 69 73 74 20 24 72 30 20 24 72 31 20 24    list $r0 $r1 $
07d0: 72 32 20 24 72 33 0a 20 20 7d 20 5b 6c 69 73 74  r2 $r3.  } [list
07e0: 20 24 74 30 20 24 74 31 20 24 74 32 20 24 74 33   $t0 $t1 $t2 $t3
07f0: 5d 0a 7d 0a 0a 23 20 43 72 65 61 74 65 20 74 61  ].}..# Create ta
0800: 62 6c 65 73 20 66 6f 72 20 74 68 65 20 66 69 72  bles for the fir
0810: 73 74 20 67 72 6f 75 70 20 6f 66 20 74 65 73 74  st group of test
0820: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e  s..#.do_test con
0830: 66 6c 69 63 74 2d 32 2e 30 20 7b 0a 20 20 65 78  flict-2.0 {.  ex
0840: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
0850: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 44   TABLE t1;.    D
0860: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20  ROP TABLE t2;.  
0870: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0880: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
0890: 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 55  ARY KEY, b, c, U
08a0: 4e 49 51 55 45 28 61 2c 62 29 29 3b 0a 20 20 20  NIQUE(a,b));.   
08b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
08c0: 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (x);.    SELECT 
08d0: 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  c FROM t1 ORDER 
08e0: 42 59 20 63 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  BY c;.  }.} {}..
08f0: 23 20 53 69 78 20 63 6f 6c 75 6d 6e 73 20 6f 66  # Six columns of
0900: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
0910: 61 74 61 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ata as follows:.
0920: 23 0a 23 20 20 20 69 20 20 20 20 20 20 54 68 65  #.#   i      The
0930: 20 72 65 66 65 72 65 6e 63 65 20 6e 75 6d 62 65   reference numbe
0940: 72 20 6f 66 20 74 68 65 20 74 65 73 74 0a 23 20  r of the test.# 
0950: 20 20 63 6d 64 20 20 20 20 41 6e 20 49 4e 53 45    cmd    An INSE
0960: 52 54 20 6f 72 20 52 45 50 4c 41 43 45 20 63 6f  RT or REPLACE co
0970: 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63 75 74 65  mmand to execute
0980: 20 61 67 61 69 6e 73 74 20 74 61 62 6c 65 20 74   against table t
0990: 31 0a 23 20 20 20 74 30 20 20 20 20 20 54 72 75  1.#   t0     Tru
09a0: 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
09b0: 20 65 72 72 6f 72 20 66 72 6f 6d 20 24 63 6d 64   error from $cmd
09c0: 0a 23 20 20 20 74 31 20 20 20 20 20 43 6f 6e 74  .#   t1     Cont
09d0: 65 6e 74 20 6f 66 20 22 63 22 20 63 6f 6c 75 6d  ent of "c" colum
09e0: 6e 20 6f 66 20 74 31 20 61 73 73 75 6d 69 6e 67  n of t1 assuming
09f0: 20 6e 6f 20 65 72 72 6f 72 20 69 6e 20 24 63 6d   no error in $cm
0a00: 64 0a 23 20 20 20 74 32 20 20 20 20 20 43 6f 6e  d.#   t2     Con
0a10: 74 65 6e 74 20 6f 66 20 22 78 22 20 63 6f 6c 75  tent of "x" colu
0a20: 6d 6e 20 6f 66 20 74 32 0a 23 0a 66 6f 72 65 61  mn of t2.#.forea
0a30: 63 68 20 7b 69 20 63 6d 64 20 74 30 20 74 31 20  ch {i cmd t0 t1 
0a40: 74 32 7d 20 7b 0a 20 20 31 20 49 4e 53 45 52 54  t2} {.  1 INSERT
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 20 31 20 7b 7d 20 20 31 0a 20 20 32 20 7b 49    1 {}  1.  2 {I
0a70: 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 7d  NSERT OR IGNORE}
0a80: 20 20 20 20 20 20 30 20 33 20 20 20 31 0a 20 20        0 3   1.  
0a90: 33 20 7b 49 4e 53 45 52 54 20 4f 52 20 52 45 50  3 {INSERT OR REP
0aa0: 4c 41 43 45 7d 20 20 20 20 20 30 20 34 20 20 20  LACE}     0 4   
0ab0: 31 0a 20 20 34 20 52 45 50 4c 41 43 45 20 20 20  1.  4 REPLACE   
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
0ad0: 34 20 20 20 31 0a 20 20 35 20 7b 49 4e 53 45 52  4   1.  5 {INSER
0ae0: 54 20 4f 52 20 46 41 49 4c 7d 20 20 20 20 20 20  T OR FAIL}      
0af0: 20 20 31 20 7b 7d 20 20 31 0a 20 20 36 20 7b 49    1 {}  1.  6 {I
0b00: 4e 53 45 52 54 20 4f 52 20 41 42 4f 52 54 7d 20  NSERT OR ABORT} 
0b10: 20 20 20 20 20 20 31 20 7b 7d 20 20 31 0a 20 20        1 {}  1.  
0b20: 37 20 7b 49 4e 53 45 52 54 20 4f 52 20 52 4f 4c  7 {INSERT OR ROL
0b30: 4c 42 41 43 4b 7d 20 20 20 20 31 20 7b 7d 20 20  LBACK}    1 {}  
0b40: 7b 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  {}.} {.  do_test
0b50: 20 63 6f 6e 66 6c 69 63 74 2d 32 2e 24 69 20 7b   conflict-2.$i {
0b60: 0a 20 20 20 20 73 65 74 20 72 30 20 5b 63 61 74  .    set r0 [cat
0b70: 63 68 20 7b 65 78 65 63 73 71 6c 20 5b 73 75 62  ch {execsql [sub
0b80: 73 74 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54  st {.      DELET
0b90: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20  E FROM t1;.     
0ba0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 3b   DELETE FROM t2;
0bb0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
0bc0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
0bd0: 2c 33 29 3b 0a 20 20 20 20 20 20 42 45 47 49 4e  ,3);.      BEGIN
0be0: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
0bf0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29  NTO t2 VALUES(1)
0c00: 3b 20 0a 20 20 20 20 20 20 24 63 6d 64 20 49 4e  ; .      $cmd IN
0c10: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
0c20: 2c 34 29 3b 0a 20 20 20 20 7d 5d 7d 20 72 31 5d  ,4);.    }]} r1]
0c30: 0a 20 20 20 20 63 61 74 63 68 20 7b 65 78 65 63  .    catch {exec
0c40: 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 7d 0a 20 20  sql {COMMIT}}.  
0c50: 20 20 69 66 20 7b 24 72 30 7d 20 7b 73 65 74 20    if {$r0} {set 
0c60: 72 31 20 7b 7d 7d 20 7b 73 65 74 20 72 31 20 5b  r1 {}} {set r1 [
0c70: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0c80: 63 20 46 52 4f 4d 20 74 31 7d 5d 7d 0a 20 20 20  c FROM t1}]}.   
0c90: 20 73 65 74 20 72 32 20 5b 65 78 65 63 73 71 6c   set r2 [execsql
0ca0: 20 7b 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   {SELECT x FROM 
0cb0: 74 32 7d 5d 0a 20 20 20 20 6c 69 73 74 20 24 72  t2}].    list $r
0cc0: 30 20 24 72 31 20 24 72 32 0a 20 20 7d 20 5b 6c  0 $r1 $r2.  } [l
0cd0: 69 73 74 20 24 74 30 20 24 74 31 20 24 74 32 5d  ist $t0 $t1 $t2]
0ce0: 0a 7d 0a 0a 23 20 43 72 65 61 74 65 20 74 61 62  .}..# Create tab
0cf0: 6c 65 73 20 66 6f 72 20 74 68 65 20 66 69 72 73  les for the firs
0d00: 74 20 67 72 6f 75 70 20 6f 66 20 74 65 73 74 73  t group of tests
0d10: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  ..#.do_test conf
0d20: 6c 69 63 74 2d 33 2e 30 20 7b 0a 20 20 65 78 65  lict-3.0 {.  exe
0d30: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
0d40: 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 44 52  TABLE t1;.    DR
0d50: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20  OP TABLE t2;.   
0d60: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0d70: 28 61 2c 20 62 2c 20 63 20 49 4e 54 45 47 45 52  (a, b, c INTEGER
0d80: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 63 29  , PRIMARY KEY(c)
0d90: 2c 20 55 4e 49 51 55 45 28 61 2c 62 29 29 3b 0a  , UNIQUE(a,b));.
0da0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0db0: 20 74 32 28 78 29 3b 0a 20 20 20 20 53 45 4c 45   t2(x);.    SELE
0dc0: 43 54 20 63 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT c FROM t1 ORD
0dd0: 45 52 20 42 59 20 63 3b 0a 20 20 7d 0a 7d 20 7b  ER BY c;.  }.} {
0de0: 7d 0a 0a 23 20 53 69 78 20 63 6f 6c 75 6d 6e 73  }..# Six columns
0df0: 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   of configuratio
0e00: 6e 20 64 61 74 61 20 61 73 20 66 6f 6c 6c 6f 77  n data as follow
0e10: 73 3a 0a 23 0a 23 20 20 20 69 20 20 20 20 20 20  s:.#.#   i      
0e20: 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 6e 75  The reference nu
0e30: 6d 62 65 72 20 6f 66 20 74 68 65 20 74 65 73 74  mber of the test
0e40: 0a 23 20 20 20 63 6d 64 20 20 20 20 41 6e 20 49  .#   cmd    An I
0e50: 4e 53 45 52 54 20 6f 72 20 52 45 50 4c 41 43 45  NSERT or REPLACE
0e60: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63   command to exec
0e70: 75 74 65 20 61 67 61 69 6e 73 74 20 74 61 62 6c  ute against tabl
0e80: 65 20 74 31 0a 23 20 20 20 74 30 20 20 20 20 20  e t1.#   t0     
0e90: 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
0ea0: 20 61 6e 20 65 72 72 6f 72 20 66 72 6f 6d 20 24   an error from $
0eb0: 63 6d 64 0a 23 20 20 20 74 31 20 20 20 20 20 43  cmd.#   t1     C
0ec0: 6f 6e 74 65 6e 74 20 6f 66 20 22 63 22 20 63 6f  ontent of "c" co
0ed0: 6c 75 6d 6e 20 6f 66 20 74 31 20 61 73 73 75 6d  lumn of t1 assum
0ee0: 69 6e 67 20 6e 6f 20 65 72 72 6f 72 20 69 6e 20  ing no error in 
0ef0: 24 63 6d 64 0a 23 20 20 20 74 32 20 20 20 20 20  $cmd.#   t2     
0f00: 43 6f 6e 74 65 6e 74 20 6f 66 20 22 78 22 20 63  Content of "x" c
0f10: 6f 6c 75 6d 6e 20 6f 66 20 74 32 0a 23 0a 66 6f  olumn of t2.#.fo
0f20: 72 65 61 63 68 20 7b 69 20 63 6d 64 20 74 30 20  reach {i cmd t0 
0f30: 74 31 20 74 32 7d 20 7b 0a 20 20 31 20 49 4e 53  t1 t2} {.  1 INS
0f40: 45 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20  ERT             
0f50: 20 20 20 20 20 31 20 7b 7d 20 20 31 0a 20 20 32       1 {}  1.  2
0f60: 20 7b 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f   {INSERT OR IGNO
0f70: 52 45 7d 20 20 20 20 20 20 30 20 33 20 20 20 31  RE}      0 3   1
0f80: 0a 20 20 33 20 7b 49 4e 53 45 52 54 20 4f 52 20  .  3 {INSERT OR 
0f90: 52 45 50 4c 41 43 45 7d 20 20 20 20 20 30 20 34  REPLACE}     0 4
0fa0: 20 20 20 31 0a 20 20 34 20 52 45 50 4c 41 43 45     1.  4 REPLACE
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fc0: 20 30 20 34 20 20 20 31 0a 20 20 35 20 7b 49 4e   0 4   1.  5 {IN
0fd0: 53 45 52 54 20 4f 52 20 46 41 49 4c 7d 20 20 20  SERT OR FAIL}   
0fe0: 20 20 20 20 20 31 20 7b 7d 20 20 31 0a 20 20 36       1 {}  1.  6
0ff0: 20 7b 49 4e 53 45 52 54 20 4f 52 20 41 42 4f 52   {INSERT OR ABOR
1000: 54 7d 20 20 20 20 20 20 20 31 20 7b 7d 20 20 31  T}       1 {}  1
1010: 0a 20 20 37 20 7b 49 4e 53 45 52 54 20 4f 52 20  .  7 {INSERT OR 
1020: 52 4f 4c 4c 42 41 43 4b 7d 20 20 20 20 31 20 7b  ROLLBACK}    1 {
1030: 7d 20 20 7b 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 74  }  {}.} {.  do_t
1040: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 33 2e 24  est conflict-3.$
1050: 69 20 7b 0a 20 20 20 20 73 65 74 20 72 30 20 5b  i {.    set r0 [
1060: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 5b  catch {execsql [
1070: 73 75 62 73 74 20 7b 0a 20 20 20 20 20 20 44 45  subst {.      DE
1080: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
1090: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
10a0: 74 32 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  t2;.      INSERT
10b0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
10c0: 31 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20 42 45  1,2,3);.      BE
10d0: 47 49 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  GIN;.      INSER
10e0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
10f0: 28 31 29 3b 20 0a 20 20 20 20 20 20 24 63 6d 64  (1); .      $cmd
1100: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1110: 31 2c 32 2c 34 29 3b 0a 20 20 20 20 7d 5d 7d 20  1,2,4);.    }]} 
1120: 72 31 5d 0a 20 20 20 20 63 61 74 63 68 20 7b 65  r1].    catch {e
1130: 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 7d  xecsql {COMMIT}}
1140: 0a 20 20 20 20 69 66 20 7b 24 72 30 7d 20 7b 73  .    if {$r0} {s
1150: 65 74 20 72 31 20 7b 7d 7d 20 7b 73 65 74 20 72  et r1 {}} {set r
1160: 31 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  1 [execsql {SELE
1170: 43 54 20 63 20 46 52 4f 4d 20 74 31 7d 5d 7d 0a  CT c FROM t1}]}.
1180: 20 20 20 20 73 65 74 20 72 32 20 5b 65 78 65 63      set r2 [exec
1190: 73 71 6c 20 7b 53 45 4c 45 43 54 20 78 20 46 52  sql {SELECT x FR
11a0: 4f 4d 20 74 32 7d 5d 0a 20 20 20 20 6c 69 73 74  OM t2}].    list
11b0: 20 24 72 30 20 24 72 31 20 24 72 32 0a 20 20 7d   $r0 $r1 $r2.  }
11c0: 20 5b 6c 69 73 74 20 24 74 30 20 24 74 31 20 24   [list $t0 $t1 $
11d0: 74 32 5d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63  t2].}..do_test c
11e0: 6f 6e 66 6c 69 63 74 2d 34 2e 30 20 7b 0a 20 20  onflict-4.0 {.  
11f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
1200: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20  OP TABLE t2;.   
1210: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
1220: 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (x);.    SELECT 
1230: 78 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  x FROM t2;.  }.}
1240: 20 7b 7d 0a 0a 23 20 53 69 78 20 63 6f 6c 75 6d   {}..# Six colum
1250: 6e 73 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74  ns of configurat
1260: 69 6f 6e 20 64 61 74 61 20 61 73 20 66 6f 6c 6c  ion data as foll
1270: 6f 77 73 3a 0a 23 0a 23 20 20 20 69 20 20 20 20  ows:.#.#   i    
1280: 20 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20    The reference 
1290: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 74 65  number of the te
12a0: 73 74 0a 23 20 20 20 63 6f 6e 66 31 20 20 54 68  st.#   conf1  Th
12b0: 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  e conflict resol
12c0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
12d0: 6f 6e 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f  on the UNIQUE co
12e0: 6e 73 74 72 61 69 6e 74 0a 23 20 20 20 63 6d 64  nstraint.#   cmd
12f0: 20 20 20 20 41 6e 20 49 4e 53 45 52 54 20 6f 72      An INSERT or
1300: 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64   REPLACE command
1310: 20 74 6f 20 65 78 65 63 75 74 65 20 61 67 61 69   to execute agai
1320: 6e 73 74 20 74 61 62 6c 65 20 74 31 0a 23 20 20  nst table t1.#  
1330: 20 74 30 20 20 20 20 20 54 72 75 65 20 69 66 20   t0     True if 
1340: 74 68 65 72 65 20 69 73 20 61 6e 20 65 72 72 6f  there is an erro
1350: 72 20 66 72 6f 6d 20 24 63 6d 64 0a 23 20 20 20  r from $cmd.#   
1360: 74 31 20 20 20 20 20 43 6f 6e 74 65 6e 74 20 6f  t1     Content o
1370: 66 20 22 63 22 20 63 6f 6c 75 6d 6e 20 6f 66 20  f "c" column of 
1380: 74 31 20 61 73 73 75 6d 69 6e 67 20 6e 6f 20 65  t1 assuming no e
1390: 72 72 6f 72 20 69 6e 20 24 63 6d 64 0a 23 20 20  rror in $cmd.#  
13a0: 20 74 32 20 20 20 20 20 43 6f 6e 74 65 6e 74 20   t2     Content 
13b0: 6f 66 20 22 78 22 20 63 6f 6c 75 6d 6e 20 6f 66  of "x" column of
13c0: 20 74 32 0a 23 0a 66 6f 72 65 61 63 68 20 7b 69   t2.#.foreach {i
13d0: 20 63 6f 6e 66 31 20 63 6d 64 20 74 30 20 74 31   conf1 cmd t0 t1
13e0: 20 74 32 7d 20 7b 0a 20 20 31 20 7b 7d 20 20 20   t2} {.  1 {}   
13f0: 20 20 20 20 49 4e 53 45 52 54 20 20 20 20 20 20      INSERT      
1400: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 7d              1 {}
1410: 20 20 31 0a 20 20 32 20 52 45 50 4c 41 43 45 20    1.  2 REPLACE 
1420: 20 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20   INSERT         
1430: 20 20 20 20 20 20 20 20 20 30 20 34 20 20 20 31           0 4   1
1440: 0a 20 20 33 20 49 47 4e 4f 52 45 20 20 20 49 4e  .  3 IGNORE   IN
1450: 53 45 52 54 20 20 20 20 20 20 20 20 20 20 20 20  SERT            
1460: 20 20 20 20 20 20 30 20 33 20 20 20 31 0a 20 20        0 3   1.  
1470: 34 20 46 41 49 4c 20 20 20 20 20 49 4e 53 45 52  4 FAIL     INSER
1480: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
1490: 20 20 20 31 20 7b 7d 20 20 31 0a 20 20 35 20 41     1 {}  1.  5 A
14a0: 42 4f 52 54 20 20 20 20 49 4e 53 45 52 54 20 20  BORT    INSERT  
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c0: 31 20 7b 7d 20 20 31 0a 20 20 36 20 52 4f 4c 4c  1 {}  1.  6 ROLL
14d0: 42 41 43 4b 20 49 4e 53 45 52 54 20 20 20 20 20  BACK INSERT     
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b               1 {
14f0: 7d 20 20 7b 7d 0a 20 20 37 20 52 45 50 4c 41 43  }  {}.  7 REPLAC
1500: 45 20 20 7b 49 4e 53 45 52 54 20 4f 52 20 49 47  E  {INSERT OR IG
1510: 4e 4f 52 45 7d 20 20 20 20 20 20 30 20 33 20 20  NORE}      0 3  
1520: 20 31 0a 20 20 38 20 49 47 4e 4f 52 45 20 20 20   1.  8 IGNORE   
1530: 7b 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  {INSERT OR REPLA
1540: 43 45 7d 20 20 20 20 20 30 20 34 20 20 20 31 0a  CE}     0 4   1.
1550: 20 20 39 20 46 41 49 4c 20 20 20 20 20 7b 49 4e    9 FAIL     {IN
1560: 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 7d 20  SERT OR IGNORE} 
1570: 20 20 20 20 20 30 20 33 20 20 20 31 0a 20 31 30       0 3   1. 10
1580: 20 41 42 4f 52 54 20 20 20 20 7b 49 4e 53 45 52   ABORT    {INSER
1590: 54 20 4f 52 20 52 45 50 4c 41 43 45 7d 20 20 20  T OR REPLACE}   
15a0: 20 20 30 20 34 20 20 20 31 0a 20 31 31 20 52 4f    0 4   1. 11 RO
15b0: 4c 4c 42 41 43 4b 20 7b 49 4e 53 45 52 54 20 4f  LLBACK {INSERT O
15c0: 52 20 49 47 4e 4f 52 45 20 7d 20 20 20 20 20 30  R IGNORE }     0
15d0: 20 33 20 20 20 31 0a 7d 20 7b 0a 20 20 64 6f 5f   3   1.} {.  do_
15e0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 34 2e  test conflict-4.
15f0: 24 69 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  $i {.    if {$co
1600: 6e 66 31 21 3d 22 22 7d 20 7b 73 65 74 20 63 6f  nf1!=""} {set co
1610: 6e 66 31 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  nf1 "ON CONFLICT
1620: 20 24 63 6f 6e 66 31 22 7d 0a 20 20 20 20 73 65   $conf1"}.    se
1630: 74 20 72 30 20 5b 63 61 74 63 68 20 7b 65 78 65  t r0 [catch {exe
1640: 63 73 71 6c 20 5b 73 75 62 73 74 20 7b 0a 20 20  csql [subst {.  
1650: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
1660: 31 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  1;.      CREATE 
1670: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 55  TABLE t1(a,b,c,U
1680: 4e 49 51 55 45 28 61 2c 62 29 20 24 63 6f 6e 66  NIQUE(a,b) $conf
1690: 31 29 3b 0a 20 20 20 20 20 20 44 45 4c 45 54 45  1);.      DELETE
16a0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 20 20   FROM t2;.      
16b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
16c0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
16d0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
16e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
16f0: 56 41 4c 55 45 53 28 31 29 3b 20 0a 20 20 20 20  VALUES(1); .    
1700: 20 20 24 63 6d 64 20 49 4e 54 4f 20 74 31 20 56    $cmd INTO t1 V
1710: 41 4c 55 45 53 28 31 2c 32 2c 34 29 3b 0a 20 20  ALUES(1,2,4);.  
1720: 20 20 7d 5d 7d 20 72 31 5d 0a 20 20 20 20 63 61    }]} r1].    ca
1730: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 43 4f  tch {execsql {CO
1740: 4d 4d 49 54 7d 7d 0a 20 20 20 20 69 66 20 7b 24  MMIT}}.    if {$
1750: 72 30 7d 20 7b 73 65 74 20 72 31 20 7b 7d 7d 20  r0} {set r1 {}} 
1760: 7b 73 65 74 20 72 31 20 5b 65 78 65 63 73 71 6c  {set r1 [execsql
1770: 20 7b 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20   {SELECT c FROM 
1780: 74 31 7d 5d 7d 0a 20 20 20 20 73 65 74 20 72 32  t1}]}.    set r2
1790: 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   [execsql {SELEC
17a0: 54 20 78 20 46 52 4f 4d 20 74 32 7d 5d 0a 20 20  T x FROM t2}].  
17b0: 20 20 6c 69 73 74 20 24 72 30 20 24 72 31 20 24    list $r0 $r1 $
17c0: 72 32 0a 20 20 7d 20 5b 6c 69 73 74 20 24 74 30  r2.  } [list $t0
17d0: 20 24 74 31 20 24 74 32 5d 0a 7d 0a 0a 64 6f 5f   $t1 $t2].}..do_
17e0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 35 2e  test conflict-5.
17f0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
1800: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
1810: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  2;.    CREATE TA
1820: 42 4c 45 20 74 32 28 78 29 3b 0a 20 20 20 20 53  BLE t2(x);.    S
1830: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 32 3b  ELECT x FROM t2;
1840: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 53 69 78  .  }.} {}..# Six
1850: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 63 6f 6e 66   columns of conf
1860: 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 61  iguration data a
1870: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 20  s follows:.#.#  
1880: 20 69 20 20 20 20 20 20 54 68 65 20 72 65 66 65   i      The refe
1890: 72 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 66 20  rence number of 
18a0: 74 68 65 20 74 65 73 74 0a 23 20 20 20 63 6f 6e  the test.#   con
18b0: 66 31 20 20 54 68 65 20 63 6f 6e 66 6c 69 63 74  f1  The conflict
18c0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
18d0: 72 69 74 68 6d 20 6f 6e 20 74 68 65 20 4e 4f 54  rithm on the NOT
18e0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
18f0: 0a 23 20 20 20 63 6d 64 20 20 20 20 41 6e 20 49  .#   cmd    An I
1900: 4e 53 45 52 54 20 6f 72 20 52 45 50 4c 41 43 45  NSERT or REPLACE
1910: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63   command to exec
1920: 75 74 65 20 61 67 61 69 6e 73 74 20 74 61 62 6c  ute against tabl
1930: 65 20 74 31 0a 23 20 20 20 74 30 20 20 20 20 20  e t1.#   t0     
1940: 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1950: 20 61 6e 20 65 72 72 6f 72 20 66 72 6f 6d 20 24   an error from $
1960: 63 6d 64 0a 23 20 20 20 74 31 20 20 20 20 20 43  cmd.#   t1     C
1970: 6f 6e 74 65 6e 74 20 6f 66 20 22 63 22 20 63 6f  ontent of "c" co
1980: 6c 75 6d 6e 20 6f 66 20 74 31 20 61 73 73 75 6d  lumn of t1 assum
1990: 69 6e 67 20 6e 6f 20 65 72 72 6f 72 20 69 6e 20  ing no error in 
19a0: 24 63 6d 64 0a 23 20 20 20 74 32 20 20 20 20 20  $cmd.#   t2     
19b0: 43 6f 6e 74 65 6e 74 20 6f 66 20 22 78 22 20 63  Content of "x" c
19c0: 6f 6c 75 6d 6e 20 6f 66 20 74 32 0a 23 0a 66 6f  olumn of t2.#.fo
19d0: 72 65 61 63 68 20 7b 69 20 63 6f 6e 66 31 20 63  reach {i conf1 c
19e0: 6d 64 20 74 30 20 74 31 20 74 32 7d 20 7b 0a 20  md t0 t1 t2} {. 
19f0: 20 31 20 7b 7d 20 20 20 20 20 20 20 49 4e 53 45   1 {}       INSE
1a00: 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  RT              
1a10: 20 20 20 20 31 20 7b 7d 20 20 31 0a 20 20 32 20      1 {}  1.  2 
1a20: 52 45 50 4c 41 43 45 20 20 49 4e 53 45 52 54 20  REPLACE  INSERT 
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 30 20 35 20 20 20 31 0a 20 20 33 20 49 47 4e   0 5   1.  3 IGN
1a50: 4f 52 45 20 20 20 49 4e 53 45 52 54 20 20 20 20  ORE   INSERT    
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
1a70: 7b 7d 20 20 31 0a 20 20 34 20 46 41 49 4c 20 20  {}  1.  4 FAIL  
1a80: 20 20 20 49 4e 53 45 52 54 20 20 20 20 20 20 20     INSERT       
1a90: 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 7d 20             1 {} 
1aa0: 20 31 0a 20 20 35 20 41 42 4f 52 54 20 20 20 20   1.  5 ABORT    
1ab0: 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 20  INSERT          
1ac0: 20 20 20 20 20 20 20 20 31 20 7b 7d 20 20 31 0a          1 {}  1.
1ad0: 20 20 36 20 52 4f 4c 4c 42 41 43 4b 20 49 4e 53    6 ROLLBACK INS
1ae0: 45 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20  ERT             
1af0: 20 20 20 20 20 31 20 7b 7d 20 20 7b 7d 0a 20 20       1 {}  {}.  
1b00: 37 20 52 45 50 4c 41 43 45 20 20 7b 49 4e 53 45  7 REPLACE  {INSE
1b10: 52 54 20 4f 52 20 49 47 4e 4f 52 45 7d 20 20 20  RT OR IGNORE}   
1b20: 20 20 20 30 20 7b 7d 20 20 31 0a 20 20 38 20 49     0 {}  1.  8 I
1b30: 47 4e 4f 52 45 20 20 20 7b 49 4e 53 45 52 54 20  GNORE   {INSERT 
1b40: 4f 52 20 52 45 50 4c 41 43 45 7d 20 20 20 20 20  OR REPLACE}     
1b50: 30 20 35 20 20 20 31 0a 20 20 39 20 46 41 49 4c  0 5   1.  9 FAIL
1b60: 20 20 20 20 20 7b 49 4e 53 45 52 54 20 4f 52 20       {INSERT OR 
1b70: 49 47 4e 4f 52 45 7d 20 20 20 20 20 20 30 20 7b  IGNORE}      0 {
1b80: 7d 20 20 31 0a 20 31 30 20 41 42 4f 52 54 20 20  }  1. 10 ABORT  
1b90: 20 20 7b 49 4e 53 45 52 54 20 4f 52 20 52 45 50    {INSERT OR REP
1ba0: 4c 41 43 45 7d 20 20 20 20 20 30 20 35 20 20 20  LACE}     0 5   
1bb0: 31 0a 20 31 31 20 52 4f 4c 4c 42 41 43 4b 20 7b  1. 11 ROLLBACK {
1bc0: 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
1bd0: 7d 20 20 20 20 20 20 30 20 7b 7d 20 20 31 0a 20  }      0 {}  1. 
1be0: 31 32 20 7b 7d 20 20 20 20 20 20 20 7b 49 4e 53  12 {}       {INS
1bf0: 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 7d 20 20  ERT OR IGNORE}  
1c00: 20 20 20 20 30 20 7b 7d 20 20 31 0a 20 31 33 20      0 {}  1. 13 
1c10: 7b 7d 20 20 20 20 20 20 20 7b 49 4e 53 45 52 54  {}       {INSERT
1c20: 20 4f 52 20 52 45 50 4c 41 43 45 7d 20 20 20 20   OR REPLACE}    
1c30: 20 30 20 35 20 20 20 31 0a 20 31 34 20 7b 7d 20   0 5   1. 14 {} 
1c40: 20 20 20 20 20 20 7b 49 4e 53 45 52 54 20 4f 52        {INSERT OR
1c50: 20 46 41 49 4c 7d 20 20 20 20 20 20 20 20 31 20   FAIL}        1 
1c60: 7b 7d 20 20 31 0a 20 31 35 20 7b 7d 20 20 20 20  {}  1. 15 {}    
1c70: 20 20 20 7b 49 4e 53 45 52 54 20 4f 52 20 41 42     {INSERT OR AB
1c80: 4f 52 54 7d 20 20 20 20 20 20 20 31 20 7b 7d 20  ORT}       1 {} 
1c90: 20 31 0a 20 31 36 20 7b 7d 20 20 20 20 20 20 20   1. 16 {}       
1ca0: 7b 49 4e 53 45 52 54 20 4f 52 20 52 4f 4c 4c 42  {INSERT OR ROLLB
1cb0: 41 43 4b 7d 20 20 20 20 31 20 7b 7d 20 20 7b 7d  ACK}    1 {}  {}
1cc0: 0a 7d 20 7b 0a 20 20 69 66 20 7b 24 74 30 7d 20  .} {.  if {$t0} 
1cd0: 7b 73 65 74 20 74 31 20 7b 74 31 2e 63 20 6d 61  {set t1 {t1.c ma
1ce0: 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a  y not be NULL}}.
1cf0: 20 20 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69    do_test confli
1d00: 63 74 2d 35 2e 24 69 20 7b 0a 20 20 20 20 69 66  ct-5.$i {.    if
1d10: 20 7b 24 63 6f 6e 66 31 21 3d 22 22 7d 20 7b 73   {$conf1!=""} {s
1d20: 65 74 20 63 6f 6e 66 31 20 22 4f 4e 20 43 4f 4e  et conf1 "ON CON
1d30: 46 4c 49 43 54 20 24 63 6f 6e 66 31 22 7d 0a 20  FLICT $conf1"}. 
1d40: 20 20 20 73 65 74 20 72 30 20 5b 63 61 74 63 68     set r0 [catch
1d50: 20 7b 65 78 65 63 73 71 6c 20 5b 73 75 62 73 74   {execsql [subst
1d60: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
1d70: 42 4c 45 20 74 31 3b 0a 20 20 20 20 20 20 43 52  BLE t1;.      CR
1d80: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
1d90: 62 2c 63 20 4e 4f 54 20 4e 55 4c 4c 20 24 63 6f  b,c NOT NULL $co
1da0: 6e 66 31 20 44 45 46 41 55 4c 54 20 35 29 3b 0a  nf1 DEFAULT 5);.
1db0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
1dc0: 4d 20 74 32 3b 0a 20 20 20 20 20 20 42 45 47 49  M t2;.      BEGI
1dd0: 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  N;.      INSERT 
1de0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1df0: 29 3b 20 0a 20 20 20 20 20 20 24 63 6d 64 20 49  ); .      $cmd I
1e00: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
1e10: 32 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 7d 5d 7d  2,NULL);.    }]}
1e20: 20 72 31 5d 0a 20 20 20 20 63 61 74 63 68 20 7b   r1].    catch {
1e30: 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d  execsql {COMMIT}
1e40: 7d 0a 20 20 20 20 69 66 20 7b 21 24 72 30 7d 20  }.    if {!$r0} 
1e50: 7b 73 65 74 20 72 31 20 5b 65 78 65 63 73 71 6c  {set r1 [execsql
1e60: 20 7b 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20   {SELECT c FROM 
1e70: 74 31 7d 5d 7d 0a 20 20 20 20 73 65 74 20 72 32  t1}]}.    set r2
1e80: 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   [execsql {SELEC
1e90: 54 20 78 20 46 52 4f 4d 20 74 32 7d 5d 0a 20 20  T x FROM t2}].  
1ea0: 20 20 6c 69 73 74 20 24 72 30 20 24 72 31 20 24    list $r0 $r1 $
1eb0: 72 32 0a 20 20 7d 20 5b 6c 69 73 74 20 24 74 30  r2.  } [list $t0
1ec0: 20 24 74 31 20 24 74 32 5d 0a 7d 0a 0a 64 6f 5f   $t1 $t2].}..do_
1ed0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 36 2e  test conflict-6.
1ee0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
1ef0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
1f00: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  2;.    CREATE TA
1f10: 42 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20  BLE t2(a,b,c);. 
1f20: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1f30: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 31 29 3b  2 VALUES(1,2,1);
1f40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1f50: 20 74 32 20 56 41 4c 55 45 53 28 32 2c 33 2c 32   t2 VALUES(2,3,2
1f60: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1f70: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c 34  TO t2 VALUES(3,4
1f80: 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,1);.    INSERT 
1f90: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
1fa0: 2c 35 2c 34 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,5,4);.    SELEC
1fb0: 54 20 63 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  T c FROM t2 ORDE
1fc0: 52 20 42 59 20 62 3b 0a 20 20 20 20 43 52 45 41  R BY b;.    CREA
1fd0: 54 45 20 54 41 42 4c 45 20 74 33 28 78 29 3b 0a  TE TABLE t3(x);.
1fe0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1ff0: 74 33 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20  t3 VALUES(1);.  
2000: 7d 0a 7d 20 7b 31 20 32 20 31 20 34 7d 0a 0a 23  }.} {1 2 1 4}..#
2010: 20 53 69 78 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   Six columns of 
2020: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
2030: 74 61 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23  ta as follows:.#
2040: 0a 23 20 20 20 69 20 20 20 20 20 20 54 68 65 20  .#   i      The 
2050: 72 65 66 65 72 65 6e 63 65 20 6e 75 6d 62 65 72  reference number
2060: 20 6f 66 20 74 68 65 20 74 65 73 74 0a 23 20 20   of the test.#  
2070: 20 63 6f 6e 66 31 20 20 54 68 65 20 63 6f 6e 66   conf1  The conf
2080: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2090: 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 20 74 68 65  algorithm on the
20a0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
20b0: 6e 74 0a 23 20 20 20 63 6d 64 20 20 20 20 41 6e  nt.#   cmd    An
20c0: 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 20   UPDATE command 
20d0: 74 6f 20 65 78 65 63 75 74 65 20 61 67 61 69 6e  to execute again
20e0: 73 74 20 74 61 62 6c 65 20 74 31 0a 23 20 20 20  st table t1.#   
20f0: 74 30 20 20 20 20 20 54 72 75 65 20 69 66 20 74  t0     True if t
2100: 68 65 72 65 20 69 73 20 61 6e 20 65 72 72 6f 72  here is an error
2110: 20 66 72 6f 6d 20 24 63 6d 64 0a 23 20 20 20 74   from $cmd.#   t
2120: 31 20 20 20 20 20 43 6f 6e 74 65 6e 74 20 6f 66  1     Content of
2130: 20 22 62 22 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   "b" column of t
2140: 31 20 61 73 73 75 6d 69 6e 67 20 6e 6f 20 65 72  1 assuming no er
2150: 72 6f 72 20 69 6e 20 24 63 6d 64 0a 23 20 20 20  ror in $cmd.#   
2160: 74 32 20 20 20 20 20 43 6f 6e 74 65 6e 74 20 6f  t2     Content o
2170: 66 20 22 78 22 20 63 6f 6c 75 6d 6e 20 6f 66 20  f "x" column of 
2180: 74 33 0a 23 20 20 20 74 33 20 20 20 20 20 4e 75  t3.#   t3     Nu
2190: 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
21a0: 79 20 66 69 6c 65 73 20 66 6f 72 20 74 61 62 6c  y files for tabl
21b0: 65 73 0a 23 20 20 20 74 34 20 20 20 20 20 4e 75  es.#   t4     Nu
21c0: 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
21d0: 79 20 66 69 6c 65 73 20 66 6f 72 20 73 74 61 74  y files for stat
21e0: 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73 0a 23  ement journals.#
21f0: 0a 23 20 55 70 64 61 74 65 3a 20 53 69 6e 63 65  .# Update: Since
2200: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
2210: 20 66 69 6c 65 73 20 61 72 65 20 6e 6f 77 20 6f   files are now o
2220: 70 65 6e 65 64 20 6c 61 7a 69 6c 79 2c 20 61 6e  pened lazily, an
2230: 64 20 6e 6f 6e 65 0a 23 20 6f 66 20 74 68 65 20  d none.# of the 
2240: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20  following tests 
2250: 75 73 65 20 6c 61 72 67 65 20 71 75 61 6e 74 69  use large quanti
2260: 74 69 65 73 20 6f 66 20 64 61 74 61 2c 20 74 33  ties of data, t3
2270: 20 69 73 20 61 6c 77 61 79 73 20 30 2e 0a 23 0a   is always 0..#.
2280: 66 6f 72 65 61 63 68 20 7b 69 20 63 6f 6e 66 31  foreach {i conf1
2290: 20 63 6d 64 20 74 30 20 74 31 20 74 32 20 74 33   cmd t0 t1 t2 t3
22a0: 20 74 34 7d 20 7b 0a 20 20 31 20 7b 7d 20 20 20   t4} {.  1 {}   
22b0: 20 20 20 20 55 50 44 41 54 45 20 20 20 20 20 20      UPDATE      
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 36              1 {6
22d0: 20 37 20 38 20 39 7d 20 20 31 20 30 20 31 0a 20   7 8 9}  1 0 1. 
22e0: 20 32 20 52 45 50 4c 41 43 45 20 20 55 50 44 41   2 REPLACE  UPDA
22f0: 54 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TE              
2300: 20 20 20 20 30 20 7b 37 20 36 20 39 7d 20 20 20      0 {7 6 9}   
2310: 20 31 20 30 20 30 0a 20 20 33 20 49 47 4e 4f 52   1 0 0.  3 IGNOR
2320: 45 20 20 20 55 50 44 41 54 45 20 20 20 20 20 20  E   UPDATE      
2330: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7b 36              0 {6
2340: 20 37 20 33 20 39 7d 20 20 31 20 30 20 30 0a 20   7 3 9}  1 0 0. 
2350: 20 34 20 46 41 49 4c 20 20 20 20 20 55 50 44 41   4 FAIL     UPDA
2360: 54 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TE              
2370: 20 20 20 20 31 20 7b 36 20 37 20 33 20 34 7d 20      1 {6 7 3 4} 
2380: 20 31 20 30 20 30 0a 20 20 35 20 41 42 4f 52 54   1 0 0.  5 ABORT
2390: 20 20 20 20 55 50 44 41 54 45 20 20 20 20 20 20      UPDATE      
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 31              1 {1
23b0: 20 32 20 33 20 34 7d 20 20 31 20 30 20 31 0a 20   2 3 4}  1 0 1. 
23c0: 20 36 20 52 4f 4c 4c 42 41 43 4b 20 55 50 44 41   6 ROLLBACK UPDA
23d0: 54 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TE              
23e0: 20 20 20 20 31 20 7b 31 20 32 20 33 20 34 7d 20      1 {1 2 3 4} 
23f0: 20 30 20 30 20 30 0a 20 20 37 20 52 45 50 4c 41   0 0 0.  7 REPLA
2400: 43 45 20 20 7b 55 50 44 41 54 45 20 4f 52 20 49  CE  {UPDATE OR I
2410: 47 4e 4f 52 45 7d 20 20 20 20 20 20 30 20 7b 36  GNORE}      0 {6
2420: 20 37 20 33 20 39 7d 20 20 31 20 30 20 30 0a 20   7 3 9}  1 0 0. 
2430: 20 38 20 49 47 4e 4f 52 45 20 20 20 7b 55 50 44   8 IGNORE   {UPD
2440: 41 54 45 20 4f 52 20 52 45 50 4c 41 43 45 7d 20  ATE OR REPLACE} 
2450: 20 20 20 20 30 20 7b 37 20 36 20 39 7d 20 20 20      0 {7 6 9}   
2460: 20 31 20 30 20 30 0a 20 20 39 20 46 41 49 4c 20   1 0 0.  9 FAIL 
2470: 20 20 20 20 7b 55 50 44 41 54 45 20 4f 52 20 49      {UPDATE OR I
2480: 47 4e 4f 52 45 7d 20 20 20 20 20 20 30 20 7b 36  GNORE}      0 {6
2490: 20 37 20 33 20 39 7d 20 20 31 20 30 20 30 0a 20   7 3 9}  1 0 0. 
24a0: 31 30 20 41 42 4f 52 54 20 20 20 20 7b 55 50 44  10 ABORT    {UPD
24b0: 41 54 45 20 4f 52 20 52 45 50 4c 41 43 45 7d 20  ATE OR REPLACE} 
24c0: 20 20 20 20 30 20 7b 37 20 36 20 39 7d 20 20 20      0 {7 6 9}   
24d0: 20 31 20 30 20 30 0a 20 31 31 20 52 4f 4c 4c 42   1 0 0. 11 ROLLB
24e0: 41 43 4b 20 7b 55 50 44 41 54 45 20 4f 52 20 49  ACK {UPDATE OR I
24f0: 47 4e 4f 52 45 7d 20 20 20 20 20 20 30 20 7b 36  GNORE}      0 {6
2500: 20 37 20 33 20 39 7d 20 20 31 20 30 20 30 0a 20   7 3 9}  1 0 0. 
2510: 31 32 20 7b 7d 20 20 20 20 20 20 20 7b 55 50 44  12 {}       {UPD
2520: 41 54 45 20 4f 52 20 49 47 4e 4f 52 45 7d 20 20  ATE OR IGNORE}  
2530: 20 20 20 20 30 20 7b 36 20 37 20 33 20 39 7d 20      0 {6 7 3 9} 
2540: 20 31 20 30 20 30 0a 20 31 33 20 7b 7d 20 20 20   1 0 0. 13 {}   
2550: 20 20 20 20 7b 55 50 44 41 54 45 20 4f 52 20 52      {UPDATE OR R
2560: 45 50 4c 41 43 45 7d 20 20 20 20 20 30 20 7b 37  EPLACE}     0 {7
2570: 20 36 20 39 7d 20 20 20 20 31 20 30 20 30 0a 20   6 9}    1 0 0. 
2580: 31 34 20 7b 7d 20 20 20 20 20 20 20 7b 55 50 44  14 {}       {UPD
2590: 41 54 45 20 4f 52 20 46 41 49 4c 7d 20 20 20 20  ATE OR FAIL}    
25a0: 20 20 20 20 31 20 7b 36 20 37 20 33 20 34 7d 20      1 {6 7 3 4} 
25b0: 20 31 20 30 20 30 0a 20 31 35 20 7b 7d 20 20 20   1 0 0. 15 {}   
25c0: 20 20 20 20 7b 55 50 44 41 54 45 20 4f 52 20 41      {UPDATE OR A
25d0: 42 4f 52 54 7d 20 20 20 20 20 20 20 31 20 7b 31  BORT}       1 {1
25e0: 20 32 20 33 20 34 7d 20 20 31 20 30 20 31 0a 20   2 3 4}  1 0 1. 
25f0: 31 36 20 7b 7d 20 20 20 20 20 20 20 7b 55 50 44  16 {}       {UPD
2600: 41 54 45 20 4f 52 20 52 4f 4c 4c 42 41 43 4b 7d  ATE OR ROLLBACK}
2610: 20 20 20 20 31 20 7b 31 20 32 20 33 20 34 7d 20      1 {1 2 3 4} 
2620: 20 30 20 30 20 30 0a 7d 20 7b 0a 20 20 69 66 20   0 0 0.} {.  if 
2630: 7b 24 74 30 7d 20 7b 73 65 74 20 74 31 20 7b 63  {$t0} {set t1 {c
2640: 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74 20 75  olumn a is not u
2650: 6e 69 71 75 65 7d 7d 0a 20 20 69 66 20 7b 5b 69  nique}}.  if {[i
2660: 6e 66 6f 20 65 78 69 73 74 73 20 54 45 4d 50 5f  nfo exists TEMP_
2670: 53 54 4f 52 45 5d 20 26 26 20 24 54 45 4d 50 5f  STORE] && $TEMP_
2680: 53 54 4f 52 45 3e 3d 32 7d 20 7b 0a 20 20 20 20  STORE>=2} {.    
2690: 73 65 74 20 74 33 20 24 74 34 0a 20 20 7d 20 65  set t3 $t4.  } e
26a0: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 74 33  lse {.    set t3
26b0: 20 5b 65 78 70 72 20 7b 24 74 33 2b 24 74 34 7d   [expr {$t3+$t4}
26c0: 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ].  }.  do_test 
26d0: 63 6f 6e 66 6c 69 63 74 2d 36 2e 24 69 20 7b 0a  conflict-6.$i {.
26e0: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
26f0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
2700: 2e 64 62 20 0a 20 20 20 20 69 66 20 7b 24 63 6f  .db .    if {$co
2710: 6e 66 31 21 3d 22 22 7d 20 7b 73 65 74 20 63 6f  nf1!=""} {set co
2720: 6e 66 31 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  nf1 "ON CONFLICT
2730: 20 24 63 6f 6e 66 31 22 7d 0a 20 20 20 20 65 78   $conf1"}.    ex
2740: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 74 65  ecsql {pragma te
2750: 6d 70 5f 73 74 6f 72 65 3d 66 69 6c 65 7d 0a 20  mp_store=file}. 
2760: 20 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f     set ::sqlite_
2770: 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 20 30  opentemp_count 0
2780: 0a 20 20 20 20 73 65 74 20 72 30 20 5b 63 61 74  .    set r0 [cat
2790: 63 68 20 7b 65 78 65 63 73 71 6c 20 5b 73 75 62  ch {execsql [sub
27a0: 73 74 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20  st {.      DROP 
27b0: 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 20 20  TABLE t1;.      
27c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
27d0: 61 2c 62 2c 63 2c 20 55 4e 49 51 55 45 28 61 29  a,b,c, UNIQUE(a)
27e0: 20 24 63 6f 6e 66 31 29 3b 0a 20 20 20 20 20 20   $conf1);.      
27f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
2800: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
2810: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 33  .      UPDATE t3
2820: 20 53 45 54 20 78 3d 30 3b 0a 20 20 20 20 20 20   SET x=0;.      
2830: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 24 63 6d  BEGIN;.      $cm
2840: 64 20 74 33 20 53 45 54 20 78 3d 31 3b 0a 20 20  d t3 SET x=1;.  
2850: 20 20 20 20 24 63 6d 64 20 74 31 20 53 45 54 20      $cmd t1 SET 
2860: 62 3d 62 2a 32 3b 0a 20 20 20 20 20 20 24 63 6d  b=b*2;.      $cm
2870: 64 20 74 31 20 53 45 54 20 61 3d 63 2b 35 3b 0a  d t1 SET a=c+5;.
2880: 20 20 20 20 7d 5d 7d 20 72 31 5d 0a 20 20 20 20      }]} r1].    
2890: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
28a0: 43 4f 4d 4d 49 54 7d 7d 0a 20 20 20 20 69 66 20  COMMIT}}.    if 
28b0: 7b 21 24 72 30 7d 20 7b 73 65 74 20 72 31 20 5b  {!$r0} {set r1 [
28c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
28d0: 61 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  a FROM t1 ORDER 
28e0: 42 59 20 62 7d 5d 7d 0a 20 20 20 20 73 65 74 20  BY b}]}.    set 
28f0: 72 32 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c  r2 [execsql {SEL
2900: 45 43 54 20 78 20 46 52 4f 4d 20 74 33 7d 5d 0a  ECT x FROM t3}].
2910: 20 20 20 20 6c 69 73 74 20 24 72 30 20 24 72 31      list $r0 $r1
2920: 20 24 72 32 20 24 3a 3a 73 71 6c 69 74 65 5f 6f   $r2 $::sqlite_o
2930: 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 0a 20 20  pentemp_count.  
2940: 7d 20 5b 6c 69 73 74 20 24 74 30 20 24 74 31 20  } [list $t0 $t1 
2950: 24 74 32 20 24 74 33 5d 0a 7d 0a 0a 23 20 54 65  $t2 $t3].}..# Te
2960: 73 74 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  st to make sure 
2970: 61 20 6c 6f 74 20 6f 66 20 49 47 4e 4f 52 45 73  a lot of IGNOREs
2980: 20 64 6f 6e 27 74 20 63 61 75 73 65 20 61 20 73   don't cause a s
2990: 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77 0a 23 0a  tack overflow.#.
29a0: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
29b0: 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.1 {.  execsql
29c0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
29d0: 45 20 74 31 3b 0a 20 20 20 20 44 52 4f 50 20 54  E t1;.    DROP T
29e0: 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 44 52 4f  ABLE t2;.    DRO
29f0: 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20 20  P TABLE t3;.    
2a00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2a10: 61 20 75 6e 69 71 75 65 2c 20 62 29 3b 0a 20 20  a unique, b);.  
2a20: 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  }.  for {set i 1
2a30: 7d 20 7b 24 69 3c 3d 35 30 7d 20 7b 69 6e 63 72  } {$i<=50} {incr
2a40: 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71   i} {.    execsq
2a50: 6c 20 22 49 4e 53 45 52 54 20 69 6e 74 6f 20 74  l "INSERT into t
2a60: 31 20 76 61 6c 75 65 73 28 24 69 2c 5b 65 78 70  1 values($i,[exp
2a70: 72 20 7b 24 69 2b 31 7d 5d 29 3b 22 0a 20 20 7d  r {$i+1}]);".  }
2a80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2a90: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
2aa0: 2c 20 6d 69 6e 28 61 29 2c 20 6d 61 78 28 62 29  , min(a), max(b)
2ab0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
2ac0: 7b 35 30 20 31 20 35 31 7d 0a 64 6f 5f 74 65 73  {50 1 51}.do_tes
2ad0: 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e 32 20 7b  t conflict-7.2 {
2ae0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2af0: 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68   PRAGMA count_ch
2b00: 61 6e 67 65 73 3d 6f 6e 3b 0a 20 20 20 20 55 50  anges=on;.    UP
2b10: 44 41 54 45 20 4f 52 20 49 47 4e 4f 52 45 20 74  DATE OR IGNORE t
2b20: 31 20 53 45 54 20 61 3d 31 30 30 30 3b 0a 20 20  1 SET a=1000;.  
2b30: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
2b40: 63 6f 6e 66 6c 69 63 74 2d 37 2e 32 2e 31 20 7b  conflict-7.2.1 {
2b50: 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a 7d 20  .  db changes.} 
2b60: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  {1}.do_test conf
2b70: 6c 69 63 74 2d 37 2e 33 20 7b 0a 20 20 65 78 65  lict-7.3 {.  exe
2b80: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2b90: 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T b FROM t1 WHER
2ba0: 45 20 61 3d 31 30 30 30 3b 0a 20 20 7d 0a 7d 20  E a=1000;.  }.} 
2bb0: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  {2}.do_test conf
2bc0: 6c 69 63 74 2d 37 2e 34 20 7b 0a 20 20 65 78 65  lict-7.4 {.  exe
2bd0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2be0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
2bf0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 30 7d 0a 64  t1;.  }.} {50}.d
2c00: 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  o_test conflict-
2c10: 37 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.5 {.  execsql 
2c20: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75  {.    PRAGMA cou
2c30: 6e 74 5f 63 68 61 6e 67 65 73 3d 6f 6e 3b 0a 20  nt_changes=on;. 
2c40: 20 20 20 55 50 44 41 54 45 20 4f 52 20 52 45 50     UPDATE OR REP
2c50: 4c 41 43 45 20 74 31 20 53 45 54 20 61 3d 31 30  LACE t1 SET a=10
2c60: 30 31 3b 0a 20 20 7d 0a 7d 20 7b 35 30 7d 0a 64  01;.  }.} {50}.d
2c70: 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  o_test conflict-
2c80: 37 2e 35 2e 31 20 7b 0a 20 20 64 62 20 63 68 61  7.5.1 {.  db cha
2c90: 6e 67 65 73 0a 7d 20 7b 35 30 7d 0a 64 6f 5f 74  nges.} {50}.do_t
2ca0: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e 36  est conflict-7.6
2cb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2cc0: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
2cd0: 20 74 31 20 57 48 45 52 45 20 61 3d 31 30 30 31   t1 WHERE a=1001
2ce0: 3b 0a 20 20 7d 0a 7d 20 7b 35 31 7d 0a 64 6f 5f  ;.  }.} {51}.do_
2cf0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e  test conflict-7.
2d00: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
2d10: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
2d20: 28 2a 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  (*) FROM t1;.  }
2d30: 0a 7d 20 7b 31 7d 0a 0a 23 20 55 70 64 61 74 65  .} {1}..# Update
2d40: 20 66 6f 72 20 76 65 72 73 69 6f 6e 20 33 3a 20   for version 3: 
2d50: 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
2d60: 6e 74 20 6e 6f 20 6c 6f 6e 67 65 72 20 72 65 73  nt no longer res
2d70: 65 74 73 20 74 68 65 20 63 68 61 6e 67 65 0a 23  ets the change.#
2d80: 20 63 6f 75 6e 74 65 72 20 28 54 65 73 74 20 72   counter (Test r
2d90: 65 73 75 6c 74 20 63 68 61 6e 67 65 73 20 66 72  esult changes fr
2da0: 6f 6d 20 30 20 74 6f 20 35 30 29 2e 0a 64 6f 5f  om 0 to 50)..do_
2db0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e  test conflict-7.
2dc0: 37 2e 31 20 7b 0a 20 20 64 62 20 63 68 61 6e 67  7.1 {.  db chang
2dd0: 65 73 0a 7d 20 7b 35 30 7d 0a 0a 23 20 4d 61 6b  es.} {50}..# Mak
2de0: 65 20 73 75 72 65 20 74 68 65 20 72 6f 77 20 63  e sure the row c
2df0: 6f 75 6e 74 20 69 73 20 72 69 67 68 74 20 66 6f  ount is right fo
2e00: 72 20 72 6f 77 73 20 74 68 61 74 20 61 72 65 20  r rows that are 
2e10: 69 67 6e 6f 72 65 64 20 6f 6e 0a 23 20 61 6e 20  ignored on.# an 
2e20: 69 6e 73 65 72 74 2e 0a 23 0a 64 6f 5f 74 65 73  insert..#.do_tes
2e30: 74 20 63 6f 6e 66 6c 69 63 74 2d 38 2e 31 20 7b  t conflict-8.1 {
2e40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2e50: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
2e60: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2e70: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29 3b   t1 VALUES(1,2);
2e80: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
2e90: 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52 20 49  .    INSERT OR I
2ea0: 47 4e 4f 52 45 20 49 4e 54 4f 20 74 31 20 56 41  GNORE INTO t1 VA
2eb0: 4c 55 45 53 28 32 2c 33 29 3b 0a 20 20 7d 0a 7d  LUES(2,3);.  }.}
2ec0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e   {1}.do_test con
2ed0: 66 6c 69 63 74 2d 38 2e 31 2e 31 20 7b 0a 20 20  flict-8.1.1 {.  
2ee0: 64 62 20 63 68 61 6e 67 65 73 0a 7d 20 7b 31 7d  db changes.} {1}
2ef0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  .do_test conflic
2f00: 74 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  t-8.2 {.  execsq
2f10: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 4f  l {.    INSERT O
2f20: 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74 31  R IGNORE INTO t1
2f30: 20 56 41 4c 55 45 53 28 32 2c 34 29 3b 0a 20 20   VALUES(2,4);.  
2f40: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
2f50: 63 6f 6e 66 6c 69 63 74 2d 38 2e 32 2e 31 20 7b  conflict-8.2.1 {
2f60: 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a 7d 20  .  db changes.} 
2f70: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  {0}.do_test conf
2f80: 6c 69 63 74 2d 38 2e 33 20 7b 0a 20 20 65 78 65  lict-8.3 {.  exe
2f90: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
2fa0: 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54  T OR REPLACE INT
2fb0: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 34 29  O t1 VALUES(2,4)
2fc0: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ;.  }.} {1}.do_t
2fd0: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 38 2e 33  est conflict-8.3
2fe0: 2e 31 20 7b 0a 20 20 64 62 20 63 68 61 6e 67 65  .1 {.  db change
2ff0: 73 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  s.} {1}.do_test 
3000: 63 6f 6e 66 6c 69 63 74 2d 38 2e 34 20 7b 0a 20  conflict-8.4 {. 
3010: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
3020: 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20  NSERT OR IGNORE 
3030: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2a  INTO t1 SELECT *
3040: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
3050: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  {0}.do_test conf
3060: 6c 69 63 74 2d 38 2e 34 2e 31 20 7b 0a 20 20 64  lict-8.4.1 {.  d
3070: 62 20 63 68 61 6e 67 65 73 0a 7d 20 7b 30 7d 0a  b changes.} {0}.
3080: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
3090: 2d 38 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.5 {.  execsql
30a0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52   {.    INSERT OR
30b0: 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74 31 20   IGNORE INTO t1 
30c0: 53 45 4c 45 43 54 20 61 2b 32 2c 62 2b 32 20 46  SELECT a+2,b+2 F
30d0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32  ROM t1;.  }.} {2
30e0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69  }.do_test confli
30f0: 63 74 2d 38 2e 35 2e 31 20 7b 0a 20 20 64 62 20  ct-8.5.1 {.  db 
3100: 63 68 61 6e 67 65 73 0a 7d 20 7b 32 7d 0a 64 6f  changes.} {2}.do
3110: 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 38  _test conflict-8
3120: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
3130: 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52 20 49  .    INSERT OR I
3140: 47 4e 4f 52 45 20 49 4e 54 4f 20 74 31 20 53 45  GNORE INTO t1 SE
3150: 4c 45 43 54 20 61 2b 33 2c 62 2b 33 20 46 52 4f  LECT a+3,b+3 FRO
3160: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a  M t1;.  }.} {3}.
3170: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
3180: 2d 38 2e 36 2e 31 20 7b 0a 20 20 64 62 20 63 68  -8.6.1 {.  db ch
3190: 61 6e 67 65 73 0a 7d 20 7b 33 7d 0a 0a 69 6e 74  anges.} {3}..int
31a0: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 63 6f 6e  egrity_check con
31b0: 66 6c 69 63 74 2d 38 2e 39 39 0a 0a 64 6f 5f 74  flict-8.99..do_t
31c0: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 31  est conflict-9.1
31d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
31e0: 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f     PRAGMA count_
31f0: 63 68 61 6e 67 65 73 3d 30 3b 0a 20 20 20 20 43  changes=0;.    C
3200: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 0a  REATE TABLE t2(.
3210: 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
3220: 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49  UNIQUE ON CONFLI
3230: 43 54 20 49 47 4e 4f 52 45 2c 0a 20 20 20 20 20  CT IGNORE,.     
3240: 20 62 20 49 4e 54 45 47 45 52 20 55 4e 49 51 55   b INTEGER UNIQU
3250: 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46 41  E ON CONFLICT FA
3260: 49 4c 2c 0a 20 20 20 20 20 20 63 20 49 4e 54 45  IL,.      c INTE
3270: 47 45 52 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f  GER UNIQUE ON CO
3280: 4e 46 4c 49 43 54 20 52 45 50 4c 41 43 45 2c 0a  NFLICT REPLACE,.
3290: 20 20 20 20 20 20 64 20 49 4e 54 45 47 45 52 20        d INTEGER 
32a0: 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49  UNIQUE ON CONFLI
32b0: 43 54 20 41 42 4f 52 54 2c 0a 20 20 20 20 20 20  CT ABORT,.      
32c0: 65 20 49 4e 54 45 47 45 52 20 55 4e 49 51 55 45  e INTEGER UNIQUE
32d0: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 4f 4c   ON CONFLICT ROL
32e0: 4c 42 41 43 4b 0a 20 20 20 20 29 3b 0a 20 20 20  LBACK.    );.   
32f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
3300: 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (x);.    INSERT 
3310: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31  INTO t3 VALUES(1
3320: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
3330: 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b  FROM t3;.  }.} {
3340: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c  1}.do_test confl
3350: 69 63 74 2d 39 2e 32 20 7b 0a 20 20 63 61 74 63  ict-9.2 {.  catc
3360: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
3370: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
3380: 28 31 2c 31 2c 31 2c 31 2c 31 29 3b 0a 20 20 20  (1,1,1,1,1);.   
3390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
33a0: 56 41 4c 55 45 53 28 32 2c 32 2c 32 2c 32 2c 32  VALUES(2,2,2,2,2
33b0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
33c0: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
33d0: 30 20 7b 31 20 31 20 31 20 31 20 31 20 32 20 32  0 {1 1 1 1 1 2 2
33e0: 20 32 20 32 20 32 7d 7d 0a 64 6f 5f 74 65 73 74   2 2 2}}.do_test
33f0: 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 33 20 7b 0a   conflict-9.3 {.
3400: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3410: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
3420: 56 41 4c 55 45 53 28 31 2c 33 2c 33 2c 33 2c 33  VALUES(1,3,3,3,3
3430: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
3440: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
3450: 30 20 7b 31 20 31 20 31 20 31 20 31 20 32 20 32  0 {1 1 1 1 1 2 2
3460: 20 32 20 32 20 32 7d 7d 0a 64 6f 5f 74 65 73 74   2 2 2}}.do_test
3470: 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 34 20 7b 0a   conflict-9.4 {.
3480: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3490: 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61   UPDATE t2 SET a
34a0: 3d 61 2b 31 20 57 48 45 52 45 20 61 3d 31 3b 0a  =a+1 WHERE a=1;.
34b0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
34c0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  M t2;.  }.} {0 {
34d0: 31 20 31 20 31 20 31 20 31 20 32 20 32 20 32 20  1 1 1 1 1 2 2 2 
34e0: 32 20 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  2 2}}.do_test co
34f0: 6e 66 6c 69 63 74 2d 39 2e 35 20 7b 0a 20 20 63  nflict-9.5 {.  c
3500: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
3510: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
3520: 55 45 53 28 33 2c 31 2c 33 2c 33 2c 33 29 3b 0a  UES(3,1,3,3,3);.
3530: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3540: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  M t2;.  }.} {1 {
3550: 63 6f 6c 75 6d 6e 20 62 20 69 73 20 6e 6f 74 20  column b is not 
3560: 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74  unique}}.do_test
3570: 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 36 20 7b 0a   conflict-9.6 {.
3580: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3590: 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20 62   UPDATE t2 SET b
35a0: 3d 62 2b 31 20 57 48 45 52 45 20 62 3d 31 3b 0a  =b+1 WHERE b=1;.
35b0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
35c0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  M t2;.  }.} {1 {
35d0: 63 6f 6c 75 6d 6e 20 62 20 69 73 20 6e 6f 74 20  column b is not 
35e0: 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74  unique}}.do_test
35f0: 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 37 20 7b 0a   conflict-9.7 {.
3600: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3610: 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41   BEGIN;.    UPDA
3620: 54 45 20 74 33 20 53 45 54 20 78 3d 78 2b 31 3b  TE t3 SET x=x+1;
3630: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3640: 20 74 32 20 56 41 4c 55 45 53 28 33 2c 31 2c 33   t2 VALUES(3,1,3
3650: 2c 33 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,3,3);.    SELEC
3660: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
3670: 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 62 20  .} {1 {column b 
3680: 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 0a  is not unique}}.
3690: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
36a0: 2d 39 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.8 {.  execsql
36b0: 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 65 78 65 63   {COMMIT}.  exec
36c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
36d0: 4f 4d 20 74 33 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f  OM t3}.} {2}.do_
36e0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e  test conflict-9.
36f0: 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  9 {.  catchsql {
3700: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
3710: 55 50 44 41 54 45 20 74 33 20 53 45 54 20 78 3d  UPDATE t3 SET x=
3720: 78 2b 31 3b 0a 20 20 20 20 55 50 44 41 54 45 20  x+1;.    UPDATE 
3730: 74 32 20 53 45 54 20 62 3d 62 2b 31 20 57 48 45  t2 SET b=b+1 WHE
3740: 52 45 20 62 3d 31 3b 0a 20 20 20 20 53 45 4c 45  RE b=1;.    SELE
3750: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
3760: 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 62  }.} {1 {column b
3770: 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d   is not unique}}
3780: 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  .do_test conflic
3790: 74 2d 39 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  t-9.10 {.  execs
37a0: 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 65 78  ql {COMMIT}.  ex
37b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
37c0: 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 33 7d 0a 64  FROM t3}.} {3}.d
37d0: 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  o_test conflict-
37e0: 39 2e 31 31 20 7b 0a 20 20 63 61 74 63 68 73 71  9.11 {.  catchsq
37f0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
3800: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c  NTO t2 VALUES(3,
3810: 33 2c 33 2c 31 2c 33 29 3b 0a 20 20 20 20 53 45  3,3,1,3);.    SE
3820: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
3830: 20 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e    }.} {1 {column
3840: 20 64 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65   d is not unique
3850: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c  }}.do_test confl
3860: 69 63 74 2d 39 2e 31 32 20 7b 0a 20 20 63 61 74  ict-9.12 {.  cat
3870: 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
3880: 54 45 20 74 32 20 53 45 54 20 64 3d 64 2b 31 20  TE t2 SET d=d+1 
3890: 57 48 45 52 45 20 64 3d 31 3b 0a 20 20 20 20 53  WHERE d=1;.    S
38a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
38b0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d  .  }.} {1 {colum
38c0: 6e 20 64 20 69 73 20 6e 6f 74 20 75 6e 69 71 75  n d is not uniqu
38d0: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  e}}.do_test conf
38e0: 6c 69 63 74 2d 39 2e 31 33 20 7b 0a 20 20 63 61  lict-9.13 {.  ca
38f0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
3900: 49 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  IN;.    UPDATE t
3910: 33 20 53 45 54 20 78 3d 78 2b 31 3b 0a 20 20 20  3 SET x=x+1;.   
3920: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
3930: 56 41 4c 55 45 53 28 33 2c 33 2c 33 2c 31 2c 33  VALUES(3,3,3,1,3
3940: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
3950: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
3960: 31 20 7b 63 6f 6c 75 6d 6e 20 64 20 69 73 20 6e  1 {column d is n
3970: 6f 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74  ot unique}}.do_t
3980: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 31  est conflict-9.1
3990: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  4 {.  execsql {C
39a0: 4f 4d 4d 49 54 7d 0a 20 20 65 78 65 63 73 71 6c  OMMIT}.  execsql
39b0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
39c0: 74 33 7d 0a 7d 20 7b 34 7d 0a 64 6f 5f 74 65 73  t3}.} {4}.do_tes
39d0: 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 31 35 20  t conflict-9.15 
39e0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
39f0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50     BEGIN;.    UP
3a00: 44 41 54 45 20 74 33 20 53 45 54 20 78 3d 78 2b  DATE t3 SET x=x+
3a10: 31 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32  1;.    UPDATE t2
3a20: 20 53 45 54 20 64 3d 64 2b 31 20 57 48 45 52 45   SET d=d+1 WHERE
3a30: 20 64 3d 31 3b 0a 20 20 20 20 53 45 4c 45 43 54   d=1;.    SELECT
3a40: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
3a50: 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 64 20 69  } {1 {column d i
3a60: 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 0a 64  s not unique}}.d
3a70: 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  o_test conflict-
3a80: 39 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  9.16 {.  execsql
3a90: 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 65 78 65 63   {COMMIT}.  exec
3aa0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
3ab0: 4f 4d 20 74 33 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f  OM t3}.} {5}.do_
3ac0: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e  test conflict-9.
3ad0: 31 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  17 {.  catchsql 
3ae0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
3af0: 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c 33 2c  O t2 VALUES(3,3,
3b00: 33 2c 33 2c 31 29 3b 0a 20 20 20 20 53 45 4c 45  3,3,1);.    SELE
3b10: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
3b20: 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 65  }.} {1 {column e
3b30: 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d   is not unique}}
3b40: 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  .do_test conflic
3b50: 74 2d 39 2e 31 38 20 7b 0a 20 20 63 61 74 63 68  t-9.18 {.  catch
3b60: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
3b70: 20 74 32 20 53 45 54 20 65 3d 65 2b 31 20 57 48   t2 SET e=e+1 WH
3b80: 45 52 45 20 65 3d 31 3b 0a 20 20 20 20 53 45 4c  ERE e=1;.    SEL
3b90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
3ba0: 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20   }.} {1 {column 
3bb0: 65 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d  e is not unique}
3bc0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69  }.do_test confli
3bd0: 63 74 2d 39 2e 31 39 20 7b 0a 20 20 63 61 74 63  ct-9.19 {.  catc
3be0: 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  hsql {.    BEGIN
3bf0: 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 33 20  ;.    UPDATE t3 
3c00: 53 45 54 20 78 3d 78 2b 31 3b 0a 20 20 20 20 49  SET x=x+1;.    I
3c10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
3c20: 4c 55 45 53 28 33 2c 33 2c 33 2c 33 2c 31 29 3b  LUES(3,3,3,3,1);
3c30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3c40: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t2;.  }.} {1 
3c50: 7b 63 6f 6c 75 6d 6e 20 65 20 69 73 20 6e 6f 74  {column e is not
3c60: 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73   unique}}.do_tes
3c70: 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 32 30 20  t conflict-9.20 
3c80: 7b 0a 20 20 63 61 74 63 68 20 7b 65 78 65 63 73  {.  catch {execs
3c90: 71 6c 20 7b 43 4f 4d 4d 49 54 7d 7d 0a 20 20 65  ql {COMMIT}}.  e
3ca0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
3cb0: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 35 7d 0a   FROM t3}.} {5}.
3cc0: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
3cd0: 2d 39 2e 32 31 20 7b 0a 20 20 63 61 74 63 68 73  -9.21 {.  catchs
3ce0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
3cf0: 20 20 20 20 55 50 44 41 54 45 20 74 33 20 53 45      UPDATE t3 SE
3d00: 54 20 78 3d 78 2b 31 3b 0a 20 20 20 20 55 50 44  T x=x+1;.    UPD
3d10: 41 54 45 20 74 32 20 53 45 54 20 65 3d 65 2b 31  ATE t2 SET e=e+1
3d20: 20 57 48 45 52 45 20 65 3d 31 3b 0a 20 20 20 20   WHERE e=1;.    
3d30: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
3d40: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75  ;.  }.} {1 {colu
3d50: 6d 6e 20 65 20 69 73 20 6e 6f 74 20 75 6e 69 71  mn e is not uniq
3d60: 75 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6e  ue}}.do_test con
3d70: 66 6c 69 63 74 2d 39 2e 32 32 20 7b 0a 20 20 63  flict-9.22 {.  c
3d80: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 43  atch {execsql {C
3d90: 4f 4d 4d 49 54 7d 7d 0a 20 20 65 78 65 63 73 71  OMMIT}}.  execsq
3da0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
3db0: 20 74 33 7d 0a 7d 20 7b 35 7d 0a 64 6f 5f 74 65   t3}.} {5}.do_te
3dc0: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 32 33  st conflict-9.23
3dd0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3de0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3df0: 74 32 20 56 41 4c 55 45 53 28 33 2c 33 2c 31 2c  t2 VALUES(3,3,1,
3e00: 33 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  3,3);.    SELECT
3e10: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
3e20: 7d 20 7b 30 20 7b 32 20 32 20 32 20 32 20 32 20  } {0 {2 2 2 2 2 
3e30: 33 20 33 20 31 20 33 20 33 7d 7d 0a 64 6f 5f 74  3 3 1 3 3}}.do_t
3e40: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 32  est conflict-9.2
3e50: 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  4 {.  catchsql {
3e60: 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20 53  .    UPDATE t2 S
3e70: 45 54 20 63 3d 63 2d 31 20 57 48 45 52 45 20 63  ET c=c-1 WHERE c
3e80: 3d 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  =2;.    SELECT *
3e90: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
3ea0: 7b 30 20 7b 32 20 32 20 31 20 32 20 32 7d 7d 0a  {0 {2 2 1 2 2}}.
3eb0: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
3ec0: 2d 39 2e 32 35 20 7b 0a 20 20 63 61 74 63 68 73  -9.25 {.  catchs
3ed0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
3ee0: 20 20 20 20 55 50 44 41 54 45 20 74 33 20 53 45      UPDATE t3 SE
3ef0: 54 20 78 3d 78 2b 31 3b 0a 20 20 20 20 49 4e 53  T x=x+1;.    INS
3f00: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
3f10: 45 53 28 33 2c 33 2c 31 2c 33 2c 33 29 3b 0a 20  ES(3,3,1,3,3);. 
3f20: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3f30: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 33   t2;.  }.} {0 {3
3f40: 20 33 20 31 20 33 20 33 7d 7d 0a 64 6f 5f 74 65   3 1 3 3}}.do_te
3f50: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 32 36  st conflict-9.26
3f60: 20 7b 0a 20 20 63 61 74 63 68 20 7b 65 78 65 63   {.  catch {exec
3f70: 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 7d 0a 20 20  sql {COMMIT}}.  
3f80: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3f90: 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 36 7d  * FROM t3}.} {6}
3fa0: 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69  ..do_test confli
3fb0: 63 74 2d 31 30 2e 31 20 7b 0a 20 20 63 61 74 63  ct-10.1 {.  catc
3fc0: 68 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  hsql {.    DELET
3fd0: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 42  E FROM t1;.    B
3fe0: 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54  EGIN;.    INSERT
3ff0: 20 4f 52 20 52 4f 4c 4c 42 41 43 4b 20 49 4e 54   OR ROLLBACK INT
4000: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29  O t1 VALUES(1,2)
4010: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52 20  ;.    INSERT OR 
4020: 52 4f 4c 4c 42 41 43 4b 20 49 4e 54 4f 20 74 31  ROLLBACK INTO t1
4030: 20 56 41 4c 55 45 53 28 31 2c 33 29 3b 0a 20 20   VALUES(1,3);.  
4040: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 20 20    COMMIT;.  }.  
4050: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4060: 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 7d 0a  * FROM t1}.} {}.
4070: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
4080: 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -10.2 {.  catchs
4090: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
40a0: 54 41 42 4c 45 20 74 34 28 78 29 3b 0a 20 20 20  TABLE t4(x);.   
40b0: 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49   CREATE UNIQUE I
40c0: 4e 44 45 58 20 74 34 78 20 4f 4e 20 74 34 28 78  NDEX t4x ON t4(x
40d0: 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  );.    BEGIN;.  
40e0: 20 20 49 4e 53 45 52 54 20 4f 52 20 52 4f 4c 4c    INSERT OR ROLL
40f0: 42 41 43 4b 20 49 4e 54 4f 20 74 34 20 56 41 4c  BACK INTO t4 VAL
4100: 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45  UES(1);.    INSE
4110: 52 54 20 4f 52 20 52 4f 4c 4c 42 41 43 4b 20 49  RT OR ROLLBACK I
4120: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 29  NTO t4 VALUES(1)
4130: 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  ;.    COMMIT;.  
4140: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
4150: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d  ECT * FROM t4}.}
4160: 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31   {}..# Ticket #1
4170: 31 37 31 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  171.  Make sure 
4180: 73 74 61 74 65 6d 65 6e 74 20 72 6f 6c 6c 62 61  statement rollba
4190: 63 6b 73 20 64 6f 20 6e 6f 74 0a 23 20 64 61 6d  cks do not.# dam
41a0: 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73 65  age the database
41b0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  ..#.do_test conf
41c0: 6c 69 63 74 2d 31 31 2e 31 20 7b 0a 20 20 65 78  lict-11.1 {.  ex
41d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 2d 2d 20 43  ecsql {.    -- C
41e0: 72 65 61 74 65 20 61 20 64 61 74 61 62 61 73 65  reate a database
41f0: 20 6f 62 6a 65 63 74 20 28 70 61 67 65 73 20 32   object (pages 2
4200: 2c 20 33 20 6f 66 20 74 68 65 20 66 69 6c 65 29  , 3 of the file)
4210: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
4220: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
4230: 62 63 28 61 20 55 4e 49 51 55 45 2c 20 62 2c 20  bc(a UNIQUE, b, 
4240: 63 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  c);.      INSERT
4250: 20 49 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53   INTO abc VALUES
4260: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 20  (1, 2, 3);.     
4270: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
4280: 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20 36 29   VALUES(4, 5, 6)
4290: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
42a0: 4e 54 4f 20 61 62 63 20 56 41 4c 55 45 53 28 37  NTO abc VALUES(7
42b0: 2c 20 38 2c 20 39 29 3b 0a 20 20 20 20 43 4f 4d  , 8, 9);.    COM
42c0: 4d 49 54 3b 0a 20 20 7d 0a 0a 20 20 0a 20 20 23  MIT;.  }..  .  #
42d0: 20 53 65 74 20 61 20 73 6d 61 6c 6c 20 63 61 63   Set a small cac
42e0: 68 65 20 73 69 7a 65 20 73 6f 20 74 68 61 74 20  he size so that 
42f0: 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 73 70 69  changes will spi
4300: 6c 6c 20 69 6e 74 6f 0a 20 20 23 20 74 68 65 20  ll into.  # the 
4310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
4320: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4330: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
4340: 7a 65 20 3d 20 31 30 3b 0a 20 20 7d 0a 20 20 0a  ze = 10;.  }.  .
4350: 20 20 23 20 4d 61 6b 65 20 6c 6f 74 73 20 6f 66    # Make lots of
4360: 20 63 68 61 6e 67 65 73 2e 20 20 42 65 63 61 75   changes.  Becau
4370: 73 65 20 6f 66 20 74 68 65 20 73 6d 61 6c 6c 20  se of the small 
4380: 63 61 63 68 65 2c 20 73 6f 6d 65 0a 20 20 23 20  cache, some.  # 
4390: 28 6d 6f 73 74 3f 29 20 6f 66 20 74 68 65 73 65  (most?) of these
43a0: 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 73 70   changes will sp
43b0: 69 6c 6c 20 69 6e 74 6f 20 74 68 65 20 64 69 73  ill into the dis
43c0: 6b 20 66 69 6c 65 2e 0a 20 20 23 20 49 6e 20 6f  k file..  # In o
43d0: 74 68 65 72 20 77 6f 72 64 73 2c 20 73 6f 6d 65  ther words, some
43e0: 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 20   of the changes 
43f0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 68 65 6c 64  will not be held
4400: 20 69 6e 0a 20 20 23 20 63 61 63 68 65 2e 0a 20   in.  # cache.. 
4410: 20 23 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   #.  execsql {. 
4420: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
4430: 2d 2d 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  -- Make sure the
4440: 20 70 61 67 65 72 20 69 73 20 69 6e 20 45 58 43   pager is in EXC
4450: 4c 55 53 49 56 45 20 73 74 61 74 65 2e 0a 20 20  LUSIVE state..  
4460: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4470: 20 64 65 66 28 64 2c 20 65 2c 20 66 29 3b 0a 20   def(d, e, f);. 
4480: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4490: 20 64 65 66 20 56 41 4c 55 45 53 0a 20 20 20 20   def VALUES.    
44a0: 20 20 20 20 20 20 28 27 78 78 78 78 78 78 78 78        ('xxxxxxxx
44b0: 78 78 78 78 78 78 78 27 2c 20 27 79 79 79 79 79  xxxxxxx', 'yyyyy
44c0: 79 79 79 79 79 79 79 79 79 79 79 27 2c 20 27 7a  yyyyyyyyyyy', 'z
44d0: 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 27  zzzzzzzzzzzzzzz'
44e0: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
44f0: 49 4e 54 4f 20 64 65 66 20 53 45 4c 45 43 54 20  INTO def SELECT 
4500: 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20  * FROM def;.    
4510: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65    INSERT INTO de
4520: 66 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  f SELECT * FROM 
4530: 64 65 66 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  def;.      INSER
4540: 54 20 49 4e 54 4f 20 64 65 66 20 53 45 4c 45 43  T INTO def SELEC
4550: 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20  T * FROM def;.  
4560: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4570: 64 65 66 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  def SELECT * FRO
4580: 4d 20 64 65 66 3b 0a 20 20 20 20 20 20 49 4e 53  M def;.      INS
4590: 45 52 54 20 49 4e 54 4f 20 64 65 66 20 53 45 4c  ERT INTO def SEL
45a0: 45 43 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b 0a  ECT * FROM def;.
45b0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
45c0: 4f 20 64 65 66 20 53 45 4c 45 43 54 20 2a 20 46  O def SELECT * F
45d0: 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20 20 20 49  ROM def;.      I
45e0: 4e 53 45 52 54 20 49 4e 54 4f 20 64 65 66 20 53  NSERT INTO def S
45f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 65 66  ELECT * FROM def
4600: 3b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46  ;.      DELETE F
4610: 52 4f 4d 20 61 62 63 20 57 48 45 52 45 20 61 20  ROM abc WHERE a 
4620: 3d 20 34 3b 0a 20 20 7d 0a 0a 20 20 23 20 45 78  = 4;.  }..  # Ex
4630: 65 63 75 74 65 20 61 20 73 74 61 74 65 6d 65 6e  ecute a statemen
4640: 74 20 74 68 61 74 20 64 6f 65 73 20 61 20 73 74  t that does a st
4650: 61 74 65 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  atement rollback
4660: 20 64 75 65 20 74 6f 0a 20 20 23 20 61 20 63 6f   due to.  # a co
4670: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65  nstraint failure
4680: 2e 0a 20 20 23 0a 20 20 63 61 74 63 68 73 71 6c  ..  #.  catchsql
4690: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
46a0: 54 4f 20 61 62 63 20 53 45 4c 45 43 54 20 31 30  TO abc SELECT 10
46b0: 2c 20 32 30 2c 20 33 30 20 46 52 4f 4d 20 64 65  , 20, 30 FROM de
46c0: 66 3b 0a 20 20 7d 0a 0a 20 20 23 20 52 6f 6c 6c  f;.  }..  # Roll
46d0: 62 61 63 6b 20 74 68 65 20 64 61 74 61 62 61 73  back the databas
46e0: 65 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20  e.  Verify that 
46f0: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
4700: 20 41 42 43 20 74 61 62 6c 65 0a 20 20 23 20 69   ABC table.  # i
4710: 73 20 75 6e 63 68 61 6e 67 65 64 20 66 72 6f 6d  s unchanged from
4720: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
4730: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
4740: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
4750: 64 73 2c 0a 20 20 23 20 6d 61 6b 65 20 73 75 72  ds,.  # make sur
4760: 65 20 74 68 65 20 44 45 4c 45 54 45 20 6f 6e 20  e the DELETE on 
4770: 74 61 62 6c 65 20 41 42 43 20 74 68 61 74 20 6f  table ABC that o
4780: 63 63 75 72 72 65 64 20 77 69 74 68 69 6e 20 74  ccurred within t
4790: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  he transaction. 
47a0: 20 23 20 68 61 64 20 6e 6f 20 65 66 66 65 63 74   # had no effect
47b0: 2e 0a 20 20 23 0a 20 20 65 78 65 63 73 71 6c 20  ..  #.  execsql 
47c0: 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  {.    ROLLBACK;.
47d0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
47e0: 4d 20 61 62 63 3b 0a 20 20 7d 0a 7d 20 7b 31 20  M abc;.  }.} {1 
47f0: 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 7d  2 3 4 5 6 7 8 9}
4800: 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
4810: 20 63 6f 6e 66 6c 69 63 74 2d 31 31 2e 32 0a 0a   conflict-11.2..
4820: 23 20 52 65 70 65 61 74 20 74 65 73 74 20 63 6f  # Repeat test co
4830: 6e 66 6c 69 63 74 2d 31 31 2e 31 20 62 75 74 20  nflict-11.1 but 
4840: 74 68 69 73 20 74 69 6d 65 20 63 6f 6d 6d 69 74  this time commit
4850: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  ..#.do_test conf
4860: 6c 69 63 74 2d 31 31 2e 33 20 7b 0a 20 20 65 78  lict-11.3 {.  ex
4870: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
4880: 4e 3b 0a 20 20 20 20 20 20 2d 2d 20 4d 61 6b 65  N;.      -- Make
4890: 20 73 75 72 65 20 74 68 65 20 70 61 67 65 72 20   sure the pager 
48a0: 69 73 20 69 6e 20 45 58 43 4c 55 53 49 56 45 20  is in EXCLUSIVE 
48b0: 73 74 61 74 65 2e 0a 20 20 20 20 20 20 55 50 44  state..      UPD
48c0: 41 54 45 20 61 62 63 20 53 45 54 20 61 3d 61 2b  ATE abc SET a=a+
48d0: 31 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  1;.      CREATE 
48e0: 54 41 42 4c 45 20 64 65 66 28 64 2c 20 65 2c 20  TABLE def(d, e, 
48f0: 66 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  f);.      INSERT
4900: 20 49 4e 54 4f 20 64 65 66 20 56 41 4c 55 45 53   INTO def VALUES
4910: 0a 20 20 20 20 20 20 20 20 20 20 28 27 78 78 78  .          ('xxx
4920: 78 78 78 78 78 78 78 78 78 78 78 78 27 2c 20 27  xxxxxxxxxxxx', '
4930: 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79  yyyyyyyyyyyyyyyy
4940: 27 2c 20 27 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a  ', 'zzzzzzzzzzzz
4950: 7a 7a 7a 7a 27 29 3b 0a 20 20 20 20 20 20 49 4e  zzzz');.      IN
4960: 53 45 52 54 20 49 4e 54 4f 20 64 65 66 20 53 45  SERT INTO def SE
4970: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b  LECT * FROM def;
4980: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4990: 54 4f 20 64 65 66 20 53 45 4c 45 43 54 20 2a 20  TO def SELECT * 
49a0: 46 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20 20 20  FROM def;.      
49b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65 66 20  INSERT INTO def 
49c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 65  SELECT * FROM de
49d0: 66 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  f;.      INSERT 
49e0: 49 4e 54 4f 20 64 65 66 20 53 45 4c 45 43 54 20  INTO def SELECT 
49f0: 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20  * FROM def;.    
4a00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65    INSERT INTO de
4a10: 66 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  f SELECT * FROM 
4a20: 64 65 66 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  def;.      INSER
4a30: 54 20 49 4e 54 4f 20 64 65 66 20 53 45 4c 45 43  T INTO def SELEC
4a40: 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20  T * FROM def;.  
4a50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4a60: 64 65 66 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  def SELECT * FRO
4a70: 4d 20 64 65 66 3b 0a 20 20 20 20 20 20 44 45 4c  M def;.      DEL
4a80: 45 54 45 20 46 52 4f 4d 20 61 62 63 20 57 48 45  ETE FROM abc WHE
4a90: 52 45 20 61 20 3d 20 34 3b 0a 20 20 7d 0a 20 20  RE a = 4;.  }.  
4aa0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49  catchsql {.    I
4ab0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53  NSERT INTO abc S
4ac0: 45 4c 45 43 54 20 31 30 2c 20 32 30 2c 20 33 30  ELECT 10, 20, 30
4ad0: 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20 7d 0a 20   FROM def;.  }. 
4ae0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52   execsql {.    R
4af0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c  OLLBACK;.    SEL
4b00: 45 43 54 20 2a 20 46 52 4f 4d 20 61 62 63 3b 0a  ECT * FROM abc;.
4b10: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35    }.} {1 2 3 4 5
4b20: 20 36 20 37 20 38 20 39 7d 0a 23 20 52 65 70 65   6 7 8 9}.# Repe
4b30: 61 74 20 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  at test conflict
4b40: 2d 31 31 2e 31 20 62 75 74 20 74 68 69 73 20 74  -11.1 but this t
4b50: 69 6d 65 20 63 6f 6d 6d 69 74 2e 0a 23 0a 64 6f  ime commit..#.do
4b60: 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31  _test conflict-1
4b70: 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.5 {.  execsql 
4b80: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
4b90: 20 20 20 2d 2d 20 4d 61 6b 65 20 73 75 72 65 20     -- Make sure 
4ba0: 74 68 65 20 70 61 67 65 72 20 69 73 20 69 6e 20  the pager is in 
4bb0: 45 58 43 4c 55 53 49 56 45 20 73 74 61 74 65 2e  EXCLUSIVE state.
4bc0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
4bd0: 42 4c 45 20 64 65 66 28 64 2c 20 65 2c 20 66 29  BLE def(d, e, f)
4be0: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
4bf0: 4e 54 4f 20 64 65 66 20 56 41 4c 55 45 53 0a 20  NTO def VALUES. 
4c00: 20 20 20 20 20 20 20 20 20 28 27 78 78 78 78 78           ('xxxxx
4c10: 78 78 78 78 78 78 78 78 78 78 27 2c 20 27 79 79  xxxxxxxxxx', 'yy
4c20: 79 79 79 79 79 79 79 79 79 79 79 79 79 79 27 2c  yyyyyyyyyyyyyy',
4c30: 20 27 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a   'zzzzzzzzzzzzzz
4c40: 7a 7a 27 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  zz');.      INSE
4c50: 52 54 20 49 4e 54 4f 20 64 65 66 20 53 45 4c 45  RT INTO def SELE
4c60: 43 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20  CT * FROM def;. 
4c70: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4c80: 20 64 65 66 20 53 45 4c 45 43 54 20 2a 20 46 52   def SELECT * FR
4c90: 4f 4d 20 64 65 66 3b 0a 20 20 20 20 20 20 49 4e  OM def;.      IN
4ca0: 53 45 52 54 20 49 4e 54 4f 20 64 65 66 20 53 45  SERT INTO def SE
4cb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 65 66 3b  LECT * FROM def;
4cc0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
4cd0: 54 4f 20 64 65 66 20 53 45 4c 45 43 54 20 2a 20  TO def SELECT * 
4ce0: 46 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20 20 20  FROM def;.      
4cf0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65 66 20  INSERT INTO def 
4d00: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 65  SELECT * FROM de
4d10: 66 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  f;.      INSERT 
4d20: 49 4e 54 4f 20 64 65 66 20 53 45 4c 45 43 54 20  INTO def SELECT 
4d30: 2a 20 46 52 4f 4d 20 64 65 66 3b 0a 20 20 20 20  * FROM def;.    
4d40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64 65    INSERT INTO de
4d50: 66 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  f SELECT * FROM 
4d60: 64 65 66 3b 0a 20 20 20 20 20 20 44 45 4c 45 54  def;.      DELET
4d70: 45 20 46 52 4f 4d 20 61 62 63 20 57 48 45 52 45  E FROM abc WHERE
4d80: 20 61 20 3d 20 34 3b 0a 20 20 7d 0a 20 20 63 61   a = 4;.  }.  ca
4d90: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  tchsql {.    INS
4da0: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53 45 4c  ERT INTO abc SEL
4db0: 45 43 54 20 31 30 2c 20 32 30 2c 20 33 30 20 46  ECT 10, 20, 30 F
4dc0: 52 4f 4d 20 64 65 66 3b 0a 20 20 7d 0a 20 20 65  ROM def;.  }.  e
4dd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  xecsql {.    COM
4de0: 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  MIT;.    SELECT 
4df0: 2a 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 7d 0a  * FROM abc;.  }.
4e00: 7d 20 7b 31 20 32 20 33 20 37 20 38 20 39 7d 0a  } {1 2 3 7 8 9}.
4e10: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
4e20: 63 6f 6e 66 6c 69 63 74 2d 31 31 2e 36 0a 0a 23  conflict-11.6..#
4e30: 20 4d 61 6b 65 20 73 75 72 65 20 55 50 44 41 54   Make sure UPDAT
4e40: 45 20 4f 52 20 52 45 50 4c 41 43 45 20 77 6f 72  E OR REPLACE wor
4e50: 6b 73 20 6f 6e 20 74 61 62 6c 65 73 20 74 68 61  ks on tables tha
4e60: 74 20 68 61 76 65 20 6f 6e 6c 79 0a 23 20 61 6e  t have only.# an
4e70: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4e80: 20 4b 45 59 2e 0a 23 0a 64 6f 5f 74 65 73 74 20   KEY..#.do_test 
4e90: 63 6f 6e 66 6c 69 63 74 2d 31 32 2e 31 20 7b 0a  conflict-12.1 {.
4ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4eb0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
4ec0: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
4ed0: 59 20 4b 45 59 2c 20 62 20 74 65 78 74 29 3b 0a  Y KEY, b text);.
4ee0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4ef0: 74 35 20 56 41 4c 55 45 53 28 31 2c 27 6f 6e 65  t5 VALUES(1,'one
4f00: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
4f10: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 32 2c  NTO t5 VALUES(2,
4f20: 27 74 77 6f 27 29 3b 0a 20 20 20 20 53 45 4c 45  'two');.    SELE
4f30: 43 54 20 2a 20 46 52 4f 4d 20 74 35 0a 20 20 7d  CT * FROM t5.  }
4f40: 0a 7d 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d  .} {1 one 2 two}
4f50: 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  .do_test conflic
4f60: 74 2d 31 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  t-12.2 {.  execs
4f70: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
4f80: 4f 52 20 49 47 4e 4f 52 45 20 74 35 20 53 45 54  OR IGNORE t5 SET
4f90: 20 61 3d 61 2b 31 20 57 48 45 52 45 20 61 3d 31   a=a+1 WHERE a=1
4fa0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
4fb0: 52 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t5;.  }.} {1
4fc0: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 64 6f 5f 74   one 2 two}.do_t
4fd0: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31 32 2e  est conflict-12.
4fe0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
4ff0: 0a 20 20 20 20 55 50 44 41 54 45 20 74 35 20 53  .    UPDATE t5 S
5000: 45 54 20 61 3d 61 2b 31 20 57 48 45 52 45 20 61  ET a=a+1 WHERE a
5010: 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 50 52  =1;.  }.} {1 {PR
5020: 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62  IMARY KEY must b
5030: 65 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 74 65  e unique}}.do_te
5040: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31 32 2e 34  st conflict-12.4
5050: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5060: 20 20 20 55 50 44 41 54 45 20 4f 52 20 52 45 50     UPDATE OR REP
5070: 4c 41 43 45 20 74 35 20 53 45 54 20 61 3d 61 2b  LACE t5 SET a=a+
5080: 31 20 57 48 45 52 45 20 61 3d 31 3b 0a 20 20 20  1 WHERE a=1;.   
5090: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
50a0: 35 3b 0a 20 20 7d 0a 7d 20 7b 32 20 6f 6e 65 7d  5;.  }.} {2 one}
50b0: 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ...finish_test.