/ Hex Artifact Content
Login

Artifact dec0634c0f31dec9a4b01c63063e939f0cd21b6b:


0000: 23 20 32 30 31 33 2d 31 31 2d 30 35 0a 23 0a 23  # 2013-11-05.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 23  QLite library..#
01a0: 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d 70  .# This file imp
01b0: 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20 66 6f  lements tests fo
01c0: 72 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 20 72  r the conflict r
01d0: 65 73 6f 6c 75 74 69 6f 6e 20 65 78 74 65 6e 73  esolution extens
01e0: 69 6f 6e 0a 23 20 74 6f 20 53 51 4c 69 74 65 2e  ion.# to SQLite.
01f0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 66  .#.# This file f
0200: 6f 63 75 73 65 73 20 6f 6e 20 6d 61 6b 69 6e 67  ocuses on making
0210: 20 73 75 72 65 20 74 68 61 74 20 63 6f 6d 62 69   sure that combi
0220: 6e 61 74 69 6f 6e 73 20 6f 66 20 52 45 50 4c 41  nations of REPLA
0230: 43 45 2c 0a 23 20 49 47 4e 4f 52 45 2c 20 61 6e  CE,.# IGNORE, an
0240: 64 20 46 41 49 4c 20 63 6f 6e 66 6c 69 63 74 20  d FAIL conflict 
0250: 72 65 73 6f 6c 75 74 69 6f 6e 20 70 6c 61 79 20  resolution play 
0260: 77 65 6c 6c 20 74 6f 67 65 74 68 65 72 2e 0a 23  well together..#
0270: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0280: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0290: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
02a0: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
02b0: 69 66 63 61 70 61 62 6c 65 20 21 63 6f 6e 66 6c  ifcapable !confl
02c0: 69 63 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  ict {.  finish_t
02d0: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
02e0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
02f0: 63 6f 6e 66 6c 69 63 74 2d 31 2e 31 20 7b 0a 20  conflict-1.1 {. 
0300: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0310: 28 0a 20 20 20 20 61 20 49 4e 54 45 47 45 52 20  (.    a INTEGER 
0320: 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43  PRIMARY KEY ON C
0330: 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41 43 45 2c  ONFLICT REPLACE,
0340: 20 0a 20 20 20 20 62 20 55 4e 49 51 55 45 20 4f   .    b UNIQUE O
0350: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
0360: 45 2c 0a 20 20 20 20 63 20 55 4e 49 51 55 45 20  E,.    c UNIQUE 
0370: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c  ON CONFLICT FAIL
0380: 0a 20 20 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  .  );.  INSERT I
0390: 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41  NTO t1(a,b,c) VA
03a0: 4c 55 45 53 28 31 2c 32 2c 33 29 2c 20 28 32 2c  LUES(1,2,3), (2,
03b0: 33 2c 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 61  3,4);.  SELECT a
03c0: 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44  ,b,c FROM t1 ORD
03d0: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20  ER BY a;.} {1 2 
03e0: 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73 65  3 2 3 4}..# Inse
03f0: 72 74 20 61 20 72 6f 77 20 74 68 61 74 20 63 6f  rt a row that co
0400: 6e 66 6c 69 63 74 73 20 6f 6e 20 63 6f 6c 75 6d  nflicts on colum
0410: 6e 20 42 2e 20 20 54 68 65 20 69 6e 73 65 72 74  n B.  The insert
0420: 20 73 68 6f 75 6c 64 20 62 65 20 69 67 6e 6f 72   should be ignor
0430: 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ed..#.do_execsql
0440: 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31  _test conflict-1
0450: 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .2 {.  INSERT IN
0460: 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c  TO t1(a,b,c) VAL
0470: 55 45 53 28 33 2c 32 2c 35 29 3b 0a 20 20 53 45  UES(3,2,5);.  SE
0480: 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20  LECT a,b,c FROM 
0490: 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d  t1 ORDER BY a;.}
04a0: 20 7b 31 20 32 20 33 20 32 20 33 20 34 7d 0a 0a   {1 2 3 2 3 4}..
04b0: 23 20 49 6e 73 65 72 74 20 74 77 6f 20 72 6f 77  # Insert two row
04c0: 73 20 77 68 65 72 65 20 74 68 65 20 73 65 63 6f  s where the seco
04d0: 6e 64 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20  nd conflicts on 
04e0: 43 2e 20 20 54 68 65 20 66 69 72 73 74 20 72 6f  C.  The first ro
04f0: 77 20 73 68 6f 77 20 67 6f 0a 23 20 61 6e 64 20  w show go.# and 
0500: 61 6e 64 20 74 68 65 6e 20 74 68 65 72 65 20 73  and then there s
0510: 68 6f 75 6c 64 20 62 65 20 61 20 63 6f 6e 73 74  hould be a const
0520: 72 61 69 6e 74 20 65 72 72 6f 72 2e 0a 23 0a 64  raint error..#.d
0530: 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  o_test conflict-
0540: 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.3 {.  catchsql
0550: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   {INSERT INTO t1
0560: 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 34  (a,b,c) VALUES(4
0570: 2c 35 2c 36 29 2c 20 28 35 2c 36 2c 34 29 3b 7d  ,5,6), (5,6,4);}
0580: 0a 7d 20 7b 31 20 7b 55 4e 49 51 55 45 20 63 6f  .} {1 {UNIQUE co
0590: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
05a0: 20 74 31 2e 63 7d 7d 0a 64 6f 5f 65 78 65 63 73   t1.c}}.do_execs
05b0: 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  ql_test conflict
05c0: 2d 31 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  -1.4 {.  SELECT 
05d0: 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52  a,b,c FROM t1 OR
05e0: 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32  DER BY a;.} {1 2
05f0: 20 33 20 32 20 33 20 34 20 34 20 35 20 36 7d 0a   3 2 3 4 4 5 6}.
0600: 0a 23 20 52 65 70 6c 65 74 65 20 74 68 65 20 74  .# Replete the t
0610: 65 73 74 73 20 61 62 6f 76 65 2c 20 62 75 74 20  ests above, but 
0620: 74 68 69 73 20 74 69 6d 65 20 6f 6e 20 61 20 74  this time on a t
0630: 61 62 6c 65 20 6e 6f 6e 2d 49 4e 54 45 47 45 52  able non-INTEGER
0640: 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a   primary key..#.
0650: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0660: 63 6f 6e 66 6c 69 63 74 2d 32 2e 31 20 7b 0a 20  conflict-2.1 {. 
0670: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
0680: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0690: 31 28 0a 20 20 20 20 61 20 49 4e 54 20 50 52 49  1(.    a INT PRI
06a0: 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46  MARY KEY ON CONF
06b0: 4c 49 43 54 20 52 45 50 4c 41 43 45 2c 20 0a 20  LICT REPLACE, . 
06c0: 20 20 20 62 20 55 4e 49 51 55 45 20 4f 4e 20 43     b UNIQUE ON C
06d0: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a  ONFLICT IGNORE,.
06e0: 20 20 20 20 63 20 55 4e 49 51 55 45 20 4f 4e 20      c UNIQUE ON 
06f0: 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 0a 20 20  CONFLICT FAIL.  
0700: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0710: 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45   t1(a,b,c) VALUE
0720: 53 28 31 2c 32 2c 33 29 2c 20 28 32 2c 33 2c 34  S(1,2,3), (2,3,4
0730: 29 3b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c  );.  SELECT a,b,
0740: 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  c FROM t1 ORDER 
0750: 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32  BY a;.} {1 2 3 2
0760: 20 33 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20   3 4}..# Insert 
0770: 61 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 66 6c  a row that confl
0780: 69 63 74 73 20 6f 6e 20 63 6f 6c 75 6d 6e 20 42  icts on column B
0790: 2e 20 20 54 68 65 20 69 6e 73 65 72 74 20 73 68  .  The insert sh
07a0: 6f 75 6c 64 20 62 65 20 69 67 6e 6f 72 65 64 2e  ould be ignored.
07b0: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
07c0: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 32 2e 32 20  st conflict-2.2 
07d0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
07e0: 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53  t1(a,b,c) VALUES
07f0: 28 33 2c 32 2c 35 29 3b 0a 20 20 53 45 4c 45 43  (3,2,5);.  SELEC
0800: 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20  T a,b,c FROM t1 
0810: 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31  ORDER BY a;.} {1
0820: 20 32 20 33 20 32 20 33 20 34 7d 0a 0a 23 20 49   2 3 2 3 4}..# I
0830: 6e 73 65 72 74 20 74 77 6f 20 72 6f 77 73 20 77  nsert two rows w
0840: 68 65 72 65 20 74 68 65 20 73 65 63 6f 6e 64 20  here the second 
0850: 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20 43 2e 20  conflicts on C. 
0860: 20 54 68 65 20 66 69 72 73 74 20 72 6f 77 20 73   The first row s
0870: 68 6f 77 20 67 6f 0a 23 20 61 6e 64 20 61 6e 64  how go.# and and
0880: 20 74 68 65 6e 20 74 68 65 72 65 20 73 68 6f 75   then there shou
0890: 6c 64 20 62 65 20 61 20 63 6f 6e 73 74 72 61 69  ld be a constrai
08a0: 6e 74 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 74  nt error..#.do_t
08b0: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 32 2e 33  est conflict-2.3
08c0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49   {.  catchsql {I
08d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c  NSERT INTO t1(a,
08e0: 62 2c 63 29 20 56 41 4c 55 45 53 28 34 2c 35 2c  b,c) VALUES(4,5,
08f0: 36 29 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d 20  6), (5,6,4);}.} 
0900: 7b 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74  {1 {UNIQUE const
0910: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31  raint failed: t1
0920: 2e 63 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  .c}}.do_execsql_
0930: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 32 2e  test conflict-2.
0940: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62  4 {.  SELECT a,b
0950: 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  ,c FROM t1 ORDER
0960: 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20   BY a;.} {1 2 3 
0970: 32 20 33 20 34 20 34 20 35 20 36 7d 0a 0a 23 20  2 3 4 4 5 6}..# 
0980: 52 65 70 6c 65 74 65 20 61 67 61 69 6e 20 6f 6e  Replete again on
0990: 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
09a0: 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 65 78 65   table..#.do_exe
09b0: 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69  csql_test confli
09c0: 63 74 2d 33 2e 31 20 7b 0a 20 20 44 52 4f 50 20  ct-3.1 {.  DROP 
09d0: 54 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41  TABLE t1;.  CREA
09e0: 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20  TE TABLE t1(.   
09f0: 20 61 20 49 4e 54 20 50 52 49 4d 41 52 59 20 4b   a INT PRIMARY K
0a00: 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  EY ON CONFLICT R
0a10: 45 50 4c 41 43 45 2c 20 0a 20 20 20 20 62 20 55  EPLACE, .    b U
0a20: 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49 43  NIQUE ON CONFLIC
0a30: 54 20 49 47 4e 4f 52 45 2c 0a 20 20 20 20 63 20  T IGNORE,.    c 
0a40: 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49  UNIQUE ON CONFLI
0a50: 43 54 20 46 41 49 4c 0a 20 20 29 20 57 49 54 48  CT FAIL.  ) WITH
0a60: 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20 49 4e 53  OUT ROWID;.  INS
0a70: 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c  ERT INTO t1(a,b,
0a80: 63 29 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29  c) VALUES(1,2,3)
0a90: 2c 20 28 32 2c 33 2c 34 29 3b 0a 20 20 53 45 4c  , (2,3,4);.  SEL
0aa0: 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74  ECT a,b,c FROM t
0ab0: 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20  1 ORDER BY a;.} 
0ac0: 7b 31 20 32 20 33 20 32 20 33 20 34 7d 0a 0a 23  {1 2 3 2 3 4}..#
0ad0: 20 49 6e 73 65 72 74 20 61 20 72 6f 77 20 74 68   Insert a row th
0ae0: 61 74 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20  at conflicts on 
0af0: 63 6f 6c 75 6d 6e 20 42 2e 20 20 54 68 65 20 69  column B.  The i
0b00: 6e 73 65 72 74 20 73 68 6f 75 6c 64 20 62 65 20  nsert should be 
0b10: 69 67 6e 6f 72 65 64 2e 0a 23 0a 64 6f 5f 65 78  ignored..#.do_ex
0b20: 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c  ecsql_test confl
0b30: 69 63 74 2d 33 2e 32 20 7b 0a 20 20 49 4e 53 45  ict-3.2 {.  INSE
0b40: 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63  RT INTO t1(a,b,c
0b50: 29 20 56 41 4c 55 45 53 28 33 2c 32 2c 35 29 3b  ) VALUES(3,2,5);
0b60: 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20  .  SELECT a,b,c 
0b70: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0b80: 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33   a;.} {1 2 3 2 3
0b90: 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 74 77   4}..# Insert tw
0ba0: 6f 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  o rows where the
0bb0: 20 73 65 63 6f 6e 64 20 63 6f 6e 66 6c 69 63 74   second conflict
0bc0: 73 20 6f 6e 20 43 2e 20 20 54 68 65 20 66 69 72  s on C.  The fir
0bd0: 73 74 20 72 6f 77 20 73 68 6f 77 20 67 6f 0a 23  st row show go.#
0be0: 20 61 6e 64 20 61 6e 64 20 74 68 65 6e 20 74 68   and and then th
0bf0: 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61 20  ere should be a 
0c00: 63 6f 6e 73 74 72 61 69 6e 74 20 65 72 72 6f 72  constraint error
0c10: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  ..#.do_test conf
0c20: 6c 69 63 74 2d 33 2e 33 20 7b 0a 20 20 63 61 74  lict-3.3 {.  cat
0c30: 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  chsql {INSERT IN
0c40: 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c  TO t1(a,b,c) VAL
0c50: 55 45 53 28 34 2c 35 2c 36 29 2c 20 28 35 2c 36  UES(4,5,6), (5,6
0c60: 2c 34 29 3b 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51  ,4);}.} {1 {UNIQ
0c70: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
0c80: 69 6c 65 64 3a 20 74 31 2e 63 7d 7d 0a 64 6f 5f  iled: t1.c}}.do_
0c90: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e  execsql_test con
0ca0: 66 6c 69 63 74 2d 33 2e 34 20 7b 0a 20 20 53 45  flict-3.4 {.  SE
0cb0: 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20  LECT a,b,c FROM 
0cc0: 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d  t1 ORDER BY a;.}
0cd0: 20 7b 31 20 32 20 33 20 32 20 33 20 34 20 34 20   {1 2 3 2 3 4 4 
0ce0: 35 20 36 7d 0a 0a 23 20 41 72 72 61 6e 67 65 20  5 6}..# Arrange 
0cf0: 74 68 65 20 74 61 62 6c 65 20 72 6f 77 73 20 69  the table rows i
0d00: 6e 20 61 20 64 69 66 66 65 72 65 6e 74 20 6f 72  n a different or
0d10: 64 65 72 20 61 6e 64 20 72 65 70 65 61 74 2e 0a  der and repeat..
0d20: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
0d30: 74 20 63 6f 6e 66 6c 69 63 74 2d 34 2e 31 20 7b  t conflict-4.1 {
0d40: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31  .  DROP TABLE t1
0d50: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
0d60: 20 74 31 28 0a 20 20 20 20 62 20 55 4e 49 51 55   t1(.    b UNIQU
0d70: 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47  E ON CONFLICT IG
0d80: 4e 4f 52 45 2c 0a 20 20 20 20 63 20 55 4e 49 51  NORE,.    c UNIQ
0d90: 55 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46  UE ON CONFLICT F
0da0: 41 49 4c 2c 0a 20 20 20 20 61 20 49 4e 54 20 50  AIL,.    a INT P
0db0: 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f  RIMARY KEY ON CO
0dc0: 4e 46 4c 49 43 54 20 52 45 50 4c 41 43 45 0a 20  NFLICT REPLACE. 
0dd0: 20 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   ) WITHOUT ROWID
0de0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0df0: 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53  t1(a,b,c) VALUES
0e00: 28 31 2c 32 2c 33 29 2c 20 28 32 2c 33 2c 34 29  (1,2,3), (2,3,4)
0e10: 3b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63  ;.  SELECT a,b,c
0e20: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
0e30: 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20  Y a;.} {1 2 3 2 
0e40: 33 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61  3 4}..# Insert a
0e50: 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 66 6c 69   row that confli
0e60: 63 74 73 20 6f 6e 20 63 6f 6c 75 6d 6e 20 42 2e  cts on column B.
0e70: 20 20 54 68 65 20 69 6e 73 65 72 74 20 73 68 6f    The insert sho
0e80: 75 6c 64 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a  uld be ignored..
0e90: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
0ea0: 74 20 63 6f 6e 66 6c 69 63 74 2d 34 2e 32 20 7b  t conflict-4.2 {
0eb0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0ec0: 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28  1(a,b,c) VALUES(
0ed0: 33 2c 32 2c 35 29 3b 0a 20 20 53 45 4c 45 43 54  3,2,5);.  SELECT
0ee0: 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f   a,b,c FROM t1 O
0ef0: 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20  RDER BY a;.} {1 
0f00: 32 20 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e  2 3 2 3 4}..# In
0f10: 73 65 72 74 20 74 77 6f 20 72 6f 77 73 20 77 68  sert two rows wh
0f20: 65 72 65 20 74 68 65 20 73 65 63 6f 6e 64 20 63  ere the second c
0f30: 6f 6e 66 6c 69 63 74 73 20 6f 6e 20 43 2e 20 20  onflicts on C.  
0f40: 54 68 65 20 66 69 72 73 74 20 72 6f 77 20 73 68  The first row sh
0f50: 6f 77 20 67 6f 0a 23 20 61 6e 64 20 61 6e 64 20  ow go.# and and 
0f60: 74 68 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c  then there shoul
0f70: 64 20 62 65 20 61 20 63 6f 6e 73 74 72 61 69 6e  d be a constrain
0f80: 74 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 74 65  t error..#.do_te
0f90: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 34 2e 33 20  st conflict-4.3 
0fa0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e  {.  catchsql {IN
0fb0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62  SERT INTO t1(a,b
0fc0: 2c 63 29 20 56 41 4c 55 45 53 28 34 2c 35 2c 36  ,c) VALUES(4,5,6
0fd0: 29 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d 20 7b  ), (5,6,4);}.} {
0fe0: 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  1 {UNIQUE constr
0ff0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e  aint failed: t1.
1000: 63 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  c}}.do_execsql_t
1010: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 34 2e 34  est conflict-4.4
1020: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c   {.  SELECT a,b,
1030: 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  c FROM t1 ORDER 
1040: 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32  BY a;.} {1 2 3 2
1050: 20 33 20 34 20 34 20 35 20 36 7d 0a 0a 23 20 41   3 4 4 5 6}..# A
1060: 72 72 61 6e 67 65 20 74 68 65 20 74 61 62 6c 65  rrange the table
1070: 20 72 6f 77 73 20 69 6e 20 61 20 64 69 66 66 65   rows in a diffe
1080: 72 65 6e 74 20 6f 72 64 65 72 20 61 6e 64 20 72  rent order and r
1090: 65 70 65 61 74 2e 0a 23 0a 64 6f 5f 65 78 65 63  epeat..#.do_exec
10a0: 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63  sql_test conflic
10b0: 74 2d 35 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54  t-5.1 {.  DROP T
10c0: 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54  ABLE t1;.  CREAT
10d0: 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20  E TABLE t1(.    
10e0: 62 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46  b UNIQUE ON CONF
10f0: 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a 20 20 20  LICT IGNORE,.   
1100: 20 61 20 49 4e 54 20 50 52 49 4d 41 52 59 20 4b   a INT PRIMARY K
1110: 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  EY ON CONFLICT R
1120: 45 50 4c 41 43 45 2c 0a 20 20 20 20 63 20 55 4e  EPLACE,.    c UN
1130: 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  IQUE ON CONFLICT
1140: 20 46 41 49 4c 0a 20 20 29 3b 0a 20 20 49 4e 53   FAIL.  );.  INS
1150: 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c  ERT INTO t1(a,b,
1160: 63 29 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29  c) VALUES(1,2,3)
1170: 2c 20 28 32 2c 33 2c 34 29 3b 0a 20 20 53 45 4c  , (2,3,4);.  SEL
1180: 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74  ECT a,b,c FROM t
1190: 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20  1 ORDER BY a;.} 
11a0: 7b 31 20 32 20 33 20 32 20 33 20 34 7d 0a 0a 23  {1 2 3 2 3 4}..#
11b0: 20 49 6e 73 65 72 74 20 61 20 72 6f 77 20 74 68   Insert a row th
11c0: 61 74 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20  at conflicts on 
11d0: 63 6f 6c 75 6d 6e 20 42 2e 20 20 54 68 65 20 69  column B.  The i
11e0: 6e 73 65 72 74 20 73 68 6f 75 6c 64 20 62 65 20  nsert should be 
11f0: 69 67 6e 6f 72 65 64 2e 0a 23 0a 64 6f 5f 65 78  ignored..#.do_ex
1200: 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c  ecsql_test confl
1210: 69 63 74 2d 35 2e 32 20 7b 0a 20 20 49 4e 53 45  ict-5.2 {.  INSE
1220: 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63  RT INTO t1(a,b,c
1230: 29 20 56 41 4c 55 45 53 28 33 2c 32 2c 35 29 3b  ) VALUES(3,2,5);
1240: 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20  .  SELECT a,b,c 
1250: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1260: 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33   a;.} {1 2 3 2 3
1270: 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 74 77   4}..# Insert tw
1280: 6f 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  o rows where the
1290: 20 73 65 63 6f 6e 64 20 63 6f 6e 66 6c 69 63 74   second conflict
12a0: 73 20 6f 6e 20 43 2e 20 20 54 68 65 20 66 69 72  s on C.  The fir
12b0: 73 74 20 72 6f 77 20 73 68 6f 77 20 67 6f 0a 23  st row show go.#
12c0: 20 61 6e 64 20 61 6e 64 20 74 68 65 6e 20 74 68   and and then th
12d0: 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61 20  ere should be a 
12e0: 63 6f 6e 73 74 72 61 69 6e 74 20 65 72 72 6f 72  constraint error
12f0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66  ..#.do_test conf
1300: 6c 69 63 74 2d 35 2e 33 20 7b 0a 20 20 63 61 74  lict-5.3 {.  cat
1310: 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  chsql {INSERT IN
1320: 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c  TO t1(a,b,c) VAL
1330: 55 45 53 28 34 2c 35 2c 36 29 2c 20 28 35 2c 36  UES(4,5,6), (5,6
1340: 2c 34 29 3b 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51  ,4);}.} {1 {UNIQ
1350: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
1360: 69 6c 65 64 3a 20 74 31 2e 63 7d 7d 0a 64 6f 5f  iled: t1.c}}.do_
1370: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e  execsql_test con
1380: 66 6c 69 63 74 2d 35 2e 34 20 7b 0a 20 20 53 45  flict-5.4 {.  SE
1390: 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20  LECT a,b,c FROM 
13a0: 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d  t1 ORDER BY a;.}
13b0: 20 7b 31 20 32 20 33 20 32 20 33 20 34 20 34 20   {1 2 3 2 3 4 4 
13c0: 35 20 36 7d 0a 0a 23 20 41 72 72 61 6e 67 65 20  5 6}..# Arrange 
13d0: 74 68 65 20 74 61 62 6c 65 20 72 6f 77 73 20 69  the table rows i
13e0: 6e 20 61 20 64 69 66 66 65 72 65 6e 74 20 6f 72  n a different or
13f0: 64 65 72 20 61 6e 64 20 72 65 70 65 61 74 2e 0a  der and repeat..
1400: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
1410: 74 20 63 6f 6e 66 6c 69 63 74 2d 36 2e 31 20 7b  t conflict-6.1 {
1420: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31  .  DROP TABLE t1
1430: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
1440: 20 74 31 28 0a 20 20 20 20 63 20 55 4e 49 51 55   t1(.    c UNIQU
1450: 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46 41  E ON CONFLICT FA
1460: 49 4c 2c 0a 20 20 20 20 61 20 49 4e 54 20 50 52  IL,.    a INT PR
1470: 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e  IMARY KEY ON CON
1480: 46 4c 49 43 54 20 52 45 50 4c 41 43 45 2c 0a 20  FLICT REPLACE,. 
1490: 20 20 20 62 20 55 4e 49 51 55 45 20 4f 4e 20 43     b UNIQUE ON C
14a0: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 0a 20  ONFLICT IGNORE. 
14b0: 20 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54   );.  INSERT INT
14c0: 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55  O t1(a,b,c) VALU
14d0: 45 53 28 31 2c 32 2c 33 29 2c 20 28 32 2c 33 2c  ES(1,2,3), (2,3,
14e0: 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62  4);.  SELECT a,b
14f0: 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  ,c FROM t1 ORDER
1500: 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20   BY a;.} {1 2 3 
1510: 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74  2 3 4}..# Insert
1520: 20 61 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 66   a row that conf
1530: 6c 69 63 74 73 20 6f 6e 20 63 6f 6c 75 6d 6e 20  licts on column 
1540: 42 2e 20 20 54 68 65 20 69 6e 73 65 72 74 20 73  B.  The insert s
1550: 68 6f 75 6c 64 20 62 65 20 69 67 6e 6f 72 65 64  hould be ignored
1560: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
1570: 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 36 2e 32  est conflict-6.2
1580: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
1590: 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45   t1(a,b,c) VALUE
15a0: 53 28 33 2c 32 2c 35 29 3b 0a 20 20 53 45 4c 45  S(3,2,5);.  SELE
15b0: 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31  CT a,b,c FROM t1
15c0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b   ORDER BY a;.} {
15d0: 31 20 32 20 33 20 32 20 33 20 34 7d 0a 0a 23 20  1 2 3 2 3 4}..# 
15e0: 49 6e 73 65 72 74 20 74 77 6f 20 72 6f 77 73 20  Insert two rows 
15f0: 77 68 65 72 65 20 74 68 65 20 73 65 63 6f 6e 64  where the second
1600: 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20 43 2e   conflicts on C.
1610: 20 20 54 68 65 20 66 69 72 73 74 20 72 6f 77 20    The first row 
1620: 73 68 6f 77 20 67 6f 0a 23 20 61 6e 64 20 61 6e  show go.# and an
1630: 64 20 74 68 65 6e 20 74 68 65 72 65 20 73 68 6f  d then there sho
1640: 75 6c 64 20 62 65 20 61 20 63 6f 6e 73 74 72 61  uld be a constra
1650: 69 6e 74 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f  int error..#.do_
1660: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 36 2e  test conflict-6.
1670: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
1680: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61  INSERT INTO t1(a
1690: 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 34 2c 35  ,b,c) VALUES(4,5
16a0: 2c 36 29 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d  ,6), (5,6,4);}.}
16b0: 20 7b 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73   {1 {UNIQUE cons
16c0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74  traint failed: t
16d0: 31 2e 63 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  1.c}}.do_execsql
16e0: 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 36  _test conflict-6
16f0: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  .4 {.  SELECT a,
1700: 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  b,c FROM t1 ORDE
1710: 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33  R BY a;.} {1 2 3
1720: 20 32 20 33 20 34 20 34 20 35 20 36 7d 0a 0a 23   2 3 4 4 5 6}..#
1730: 20 43 68 61 6e 67 65 20 77 68 69 63 68 20 63 6f   Change which co
1740: 6c 75 6d 6e 20 69 73 20 74 68 65 20 50 52 49 4d  lumn is the PRIM
1750: 41 52 59 20 4b 45 59 0a 23 0a 64 6f 5f 65 78 65  ARY KEY.#.do_exe
1760: 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69  csql_test confli
1770: 63 74 2d 37 2e 31 20 7b 0a 20 20 44 52 4f 50 20  ct-7.1 {.  DROP 
1780: 54 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41  TABLE t1;.  CREA
1790: 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20  TE TABLE t1(.   
17a0: 20 61 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e   a UNIQUE ON CON
17b0: 46 4c 49 43 54 20 52 45 50 4c 41 43 45 2c 20 0a  FLICT REPLACE, .
17c0: 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 50 52      b INTEGER PR
17d0: 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e  IMARY KEY ON CON
17e0: 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a 20 20  FLICT IGNORE,.  
17f0: 20 20 63 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f    c UNIQUE ON CO
1800: 4e 46 4c 49 43 54 20 46 41 49 4c 0a 20 20 29 3b  NFLICT FAIL.  );
1810: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1820: 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28  1(a,b,c) VALUES(
1830: 31 2c 32 2c 33 29 2c 20 28 32 2c 33 2c 34 29 3b  1,2,3), (2,3,4);
1840: 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20  .  SELECT a,b,c 
1850: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1860: 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33   a;.} {1 2 3 2 3
1870: 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 20   4}..# Insert a 
1880: 72 6f 77 20 74 68 61 74 20 63 6f 6e 66 6c 69 63  row that conflic
1890: 74 73 20 6f 6e 20 63 6f 6c 75 6d 6e 20 42 2e 20  ts on column B. 
18a0: 20 54 68 65 20 69 6e 73 65 72 74 20 73 68 6f 75   The insert shou
18b0: 6c 64 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 23  ld be ignored..#
18c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
18d0: 20 63 6f 6e 66 6c 69 63 74 2d 37 2e 32 20 7b 0a   conflict-7.2 {.
18e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
18f0: 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 33  (a,b,c) VALUES(3
1900: 2c 32 2c 35 29 3b 0a 20 20 53 45 4c 45 43 54 20  ,2,5);.  SELECT 
1910: 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52  a,b,c FROM t1 OR
1920: 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32  DER BY a;.} {1 2
1930: 20 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73   3 2 3 4}..# Ins
1940: 65 72 74 20 74 77 6f 20 72 6f 77 73 20 77 68 65  ert two rows whe
1950: 72 65 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  re the second co
1960: 6e 66 6c 69 63 74 73 20 6f 6e 20 43 2e 20 20 54  nflicts on C.  T
1970: 68 65 20 66 69 72 73 74 20 72 6f 77 20 73 68 6f  he first row sho
1980: 77 20 67 6f 0a 23 20 61 6e 64 20 61 6e 64 20 74  w go.# and and t
1990: 68 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c 64  hen there should
19a0: 20 62 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   be a constraint
19b0: 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 74 65 73   error..#.do_tes
19c0: 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e 33 20 7b  t conflict-7.3 {
19d0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53  .  catchsql {INS
19e0: 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c  ERT INTO t1(a,b,
19f0: 63 29 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29  c) VALUES(4,5,6)
1a00: 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d 20 7b 31  , (5,6,4);}.} {1
1a10: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
1a20: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 63  int failed: t1.c
1a30: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
1a40: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 37 2e 34 20  st conflict-7.4 
1a50: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63  {.  SELECT a,b,c
1a60: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
1a70: 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20  Y a;.} {1 2 3 2 
1a80: 33 20 34 20 34 20 35 20 36 7d 0a 0a 23 20 43 68  3 4 4 5 6}..# Ch
1a90: 61 6e 67 65 20 77 68 69 63 68 20 63 6f 6c 75 6d  ange which colum
1aa0: 6e 20 69 73 20 74 68 65 20 50 52 49 4d 41 52 59  n is the PRIMARY
1ab0: 20 4b 45 59 0a 23 0a 64 6f 5f 65 78 65 63 73 71   KEY.#.do_execsq
1ac0: 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  l_test conflict-
1ad0: 38 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41 42  8.1 {.  DROP TAB
1ae0: 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20  LE t1;.  CREATE 
1af0: 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20 61 20  TABLE t1(.    a 
1b00: 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49  UNIQUE ON CONFLI
1b10: 43 54 20 52 45 50 4c 41 43 45 2c 20 0a 20 20 20  CT REPLACE, .   
1b20: 20 62 20 49 4e 54 20 50 52 49 4d 41 52 59 20 4b   b INT PRIMARY K
1b30: 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  EY ON CONFLICT I
1b40: 47 4e 4f 52 45 2c 0a 20 20 20 20 63 20 55 4e 49  GNORE,.    c UNI
1b50: 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  QUE ON CONFLICT 
1b60: 46 41 49 4c 0a 20 20 29 3b 0a 20 20 49 4e 53 45  FAIL.  );.  INSE
1b70: 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63  RT INTO t1(a,b,c
1b80: 29 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 2c  ) VALUES(1,2,3),
1b90: 20 28 32 2c 33 2c 34 29 3b 0a 20 20 53 45 4c 45   (2,3,4);.  SELE
1ba0: 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31  CT a,b,c FROM t1
1bb0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b   ORDER BY a;.} {
1bc0: 31 20 32 20 33 20 32 20 33 20 34 7d 0a 0a 23 20  1 2 3 2 3 4}..# 
1bd0: 49 6e 73 65 72 74 20 61 20 72 6f 77 20 74 68 61  Insert a row tha
1be0: 74 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e 20 63  t conflicts on c
1bf0: 6f 6c 75 6d 6e 20 42 2e 20 20 54 68 65 20 69 6e  olumn B.  The in
1c00: 73 65 72 74 20 73 68 6f 75 6c 64 20 62 65 20 69  sert should be i
1c10: 67 6e 6f 72 65 64 2e 0a 23 0a 64 6f 5f 65 78 65  gnored..#.do_exe
1c20: 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69  csql_test confli
1c30: 63 74 2d 38 2e 32 20 7b 0a 20 20 49 4e 53 45 52  ct-8.2 {.  INSER
1c40: 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29  T INTO t1(a,b,c)
1c50: 20 56 41 4c 55 45 53 28 33 2c 32 2c 35 29 3b 0a   VALUES(3,2,5);.
1c60: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46    SELECT a,b,c F
1c70: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
1c80: 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33 20  a;.} {1 2 3 2 3 
1c90: 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 74 77 6f  4}..# Insert two
1ca0: 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
1cb0: 73 65 63 6f 6e 64 20 63 6f 6e 66 6c 69 63 74 73  second conflicts
1cc0: 20 6f 6e 20 43 2e 20 20 54 68 65 20 66 69 72 73   on C.  The firs
1cd0: 74 20 72 6f 77 20 73 68 6f 77 20 67 6f 0a 23 20  t row show go.# 
1ce0: 61 6e 64 20 61 6e 64 20 74 68 65 6e 20 74 68 65  and and then the
1cf0: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61 20 63  re should be a c
1d00: 6f 6e 73 74 72 61 69 6e 74 20 65 72 72 6f 72 2e  onstraint error.
1d10: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c  .#.do_test confl
1d20: 69 63 74 2d 38 2e 33 20 7b 0a 20 20 63 61 74 63  ict-8.3 {.  catc
1d30: 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  hsql {INSERT INT
1d40: 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55  O t1(a,b,c) VALU
1d50: 45 53 28 34 2c 35 2c 36 29 2c 20 28 35 2c 36 2c  ES(4,5,6), (5,6,
1d60: 34 29 3b 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51 55  4);}.} {1 {UNIQU
1d70: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  E constraint fai
1d80: 6c 65 64 3a 20 74 31 2e 63 7d 7d 0a 64 6f 5f 65  led: t1.c}}.do_e
1d90: 78 65 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66  xecsql_test conf
1da0: 6c 69 63 74 2d 38 2e 34 20 7b 0a 20 20 53 45 4c  lict-8.4 {.  SEL
1db0: 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74  ECT a,b,c FROM t
1dc0: 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20  1 ORDER BY a;.} 
1dd0: 7b 31 20 32 20 33 20 32 20 33 20 34 20 34 20 35  {1 2 3 2 3 4 4 5
1de0: 20 36 7d 0a 0a 23 20 43 68 61 6e 67 65 20 77 68   6}..# Change wh
1df0: 69 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  ich column is th
1e00: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 23 0a  e PRIMARY KEY.#.
1e10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1e20: 63 6f 6e 66 6c 69 63 74 2d 39 2e 31 20 7b 0a 20  conflict-9.1 {. 
1e30: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
1e40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1e50: 31 28 0a 20 20 20 20 61 20 55 4e 49 51 55 45 20  1(.    a UNIQUE 
1e60: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c  ON CONFLICT REPL
1e70: 41 43 45 2c 20 0a 20 20 20 20 62 20 49 4e 54 20  ACE, .    b INT 
1e80: 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43  PRIMARY KEY ON C
1e90: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a  ONFLICT IGNORE,.
1ea0: 20 20 20 20 63 20 55 4e 49 51 55 45 20 4f 4e 20      c UNIQUE ON 
1eb0: 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 0a 20 20  CONFLICT FAIL.  
1ec0: 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b  ) WITHOUT ROWID;
1ed0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1ee0: 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28  1(a,b,c) VALUES(
1ef0: 31 2c 32 2c 33 29 2c 20 28 32 2c 33 2c 34 29 3b  1,2,3), (2,3,4);
1f00: 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20  .  SELECT a,b,c 
1f10: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1f20: 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33   a;.} {1 2 3 2 3
1f30: 20 34 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 20   4}..# Insert a 
1f40: 72 6f 77 20 74 68 61 74 20 63 6f 6e 66 6c 69 63  row that conflic
1f50: 74 73 20 6f 6e 20 63 6f 6c 75 6d 6e 20 42 2e 20  ts on column B. 
1f60: 20 54 68 65 20 69 6e 73 65 72 74 20 73 68 6f 75   The insert shou
1f70: 6c 64 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 23  ld be ignored..#
1f80: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1f90: 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 32 20 7b 0a   conflict-9.2 {.
1fa0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1fb0: 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 33  (a,b,c) VALUES(3
1fc0: 2c 32 2c 35 29 3b 0a 20 20 53 45 4c 45 43 54 20  ,2,5);.  SELECT 
1fd0: 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52  a,b,c FROM t1 OR
1fe0: 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32  DER BY a;.} {1 2
1ff0: 20 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73   3 2 3 4}..# Ins
2000: 65 72 74 20 74 77 6f 20 72 6f 77 73 20 77 68 65  ert two rows whe
2010: 72 65 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  re the second co
2020: 6e 66 6c 69 63 74 73 20 6f 6e 20 43 2e 20 20 54  nflicts on C.  T
2030: 68 65 20 66 69 72 73 74 20 72 6f 77 20 73 68 6f  he first row sho
2040: 77 20 67 6f 0a 23 20 61 6e 64 20 61 6e 64 20 74  w go.# and and t
2050: 68 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c 64  hen there should
2060: 20 62 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   be a constraint
2070: 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 74 65 73   error..#.do_tes
2080: 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 33 20 7b  t conflict-9.3 {
2090: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53  .  catchsql {INS
20a0: 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c  ERT INTO t1(a,b,
20b0: 63 29 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29  c) VALUES(4,5,6)
20c0: 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d 20 7b 31  , (5,6,4);}.} {1
20d0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
20e0: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 63  int failed: t1.c
20f0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
2100: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 39 2e 34 20  st conflict-9.4 
2110: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63  {.  SELECT a,b,c
2120: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
2130: 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20  Y a;.} {1 2 3 2 
2140: 33 20 34 20 34 20 35 20 36 7d 0a 0a 23 20 43 68  3 4 4 5 6}..# Ch
2150: 61 6e 67 65 20 77 68 69 63 68 20 63 6f 6c 75 6d  ange which colum
2160: 6e 20 69 73 20 74 68 65 20 50 52 49 4d 41 52 59  n is the PRIMARY
2170: 20 4b 45 59 0a 23 0a 64 6f 5f 65 78 65 63 73 71   KEY.#.do_execsq
2180: 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d  l_test conflict-
2190: 31 30 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41  10.1 {.  DROP TA
21a0: 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54 45  BLE t1;.  CREATE
21b0: 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20 61   TABLE t1(.    a
21c0: 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c   UNIQUE ON CONFL
21d0: 49 43 54 20 52 45 50 4c 41 43 45 2c 20 0a 20 20  ICT REPLACE, .  
21e0: 20 20 62 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f    b UNIQUE ON CO
21f0: 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a 20  NFLICT IGNORE,. 
2200: 20 20 20 63 20 49 4e 54 45 47 45 52 20 50 52 49     c INTEGER PRI
2210: 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46  MARY KEY ON CONF
2220: 4c 49 43 54 20 46 41 49 4c 0a 20 20 29 3b 0a 20  LICT FAIL.  );. 
2230: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
2240: 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 31 2c  a,b,c) VALUES(1,
2250: 32 2c 33 29 2c 20 28 32 2c 33 2c 34 29 3b 0a 20  2,3), (2,3,4);. 
2260: 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52   SELECT a,b,c FR
2270: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 61  OM t1 ORDER BY a
2280: 3b 0a 7d 20 7b 31 20 32 20 33 20 32 20 33 20 34  ;.} {1 2 3 2 3 4
2290: 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 20 72 6f  }..# Insert a ro
22a0: 77 20 74 68 61 74 20 63 6f 6e 66 6c 69 63 74 73  w that conflicts
22b0: 20 6f 6e 20 63 6f 6c 75 6d 6e 20 42 2e 20 20 54   on column B.  T
22c0: 68 65 20 69 6e 73 65 72 74 20 73 68 6f 75 6c 64  he insert should
22d0: 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 23 0a 64   be ignored..#.d
22e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63  o_execsql_test c
22f0: 6f 6e 66 6c 69 63 74 2d 31 30 2e 32 20 7b 0a 20  onflict-10.2 {. 
2300: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
2310: 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 33 2c  a,b,c) VALUES(3,
2320: 32 2c 35 29 3b 0a 20 20 53 45 4c 45 43 54 20 61  2,5);.  SELECT a
2330: 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44  ,b,c FROM t1 ORD
2340: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20  ER BY a;.} {1 2 
2350: 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73 65  3 2 3 4}..# Inse
2360: 72 74 20 74 77 6f 20 72 6f 77 73 20 77 68 65 72  rt two rows wher
2370: 65 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  e the second con
2380: 66 6c 69 63 74 73 20 6f 6e 20 43 2e 20 20 54 68  flicts on C.  Th
2390: 65 20 66 69 72 73 74 20 72 6f 77 20 73 68 6f 77  e first row show
23a0: 20 67 6f 0a 23 20 61 6e 64 20 61 6e 64 20 74 68   go.# and and th
23b0: 65 6e 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20  en there should 
23c0: 62 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  be a constraint 
23d0: 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 74 65 73 74  error..#.do_test
23e0: 20 63 6f 6e 66 6c 69 63 74 2d 31 30 2e 33 20 7b   conflict-10.3 {
23f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53  .  catchsql {INS
2400: 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c  ERT INTO t1(a,b,
2410: 63 29 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29  c) VALUES(4,5,6)
2420: 2c 20 28 35 2c 36 2c 34 29 3b 7d 0a 7d 20 7b 31  , (5,6,4);}.} {1
2430: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
2440: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 63  int failed: t1.c
2450: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
2460: 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31 30 2e 34  st conflict-10.4
2470: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 62 2c   {.  SELECT a,b,
2480: 63 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  c FROM t1 ORDER 
2490: 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20 33 20 32  BY a;.} {1 2 3 2
24a0: 20 33 20 34 20 34 20 35 20 36 7d 0a 0a 23 20 43   3 4 4 5 6}..# C
24b0: 68 61 6e 67 65 20 77 68 69 63 68 20 63 6f 6c 75  hange which colu
24c0: 6d 6e 20 69 73 20 74 68 65 20 50 52 49 4d 41 52  mn is the PRIMAR
24d0: 59 20 4b 45 59 0a 23 0a 64 6f 5f 65 78 65 63 73  Y KEY.#.do_execs
24e0: 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  ql_test conflict
24f0: 2d 31 31 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54  -11.1 {.  DROP T
2500: 41 42 4c 45 20 74 31 3b 0a 20 20 43 52 45 41 54  ABLE t1;.  CREAT
2510: 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20  E TABLE t1(.    
2520: 61 20 55 4e 49 51 55 45 20 4f 4e 20 43 4f 4e 46  a UNIQUE ON CONF
2530: 4c 49 43 54 20 52 45 50 4c 41 43 45 2c 20 0a 20  LICT REPLACE, . 
2540: 20 20 20 62 20 55 4e 49 51 55 45 20 4f 4e 20 43     b UNIQUE ON C
2550: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 0a  ONFLICT IGNORE,.
2560: 20 20 20 20 63 20 50 52 49 4d 41 52 59 20 4b 45      c PRIMARY KE
2570: 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46 41  Y ON CONFLICT FA
2580: 49 4c 0a 20 20 29 20 57 49 54 48 4f 55 54 20 52  IL.  ) WITHOUT R
2590: 4f 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20 49  OWID;.  INSERT I
25a0: 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41  NTO t1(a,b,c) VA
25b0: 4c 55 45 53 28 31 2c 32 2c 33 29 2c 20 28 32 2c  LUES(1,2,3), (2,
25c0: 33 2c 34 29 3b 0a 20 20 53 45 4c 45 43 54 20 61  3,4);.  SELECT a
25d0: 2c 62 2c 63 20 46 52 4f 4d 20 74 31 20 4f 52 44  ,b,c FROM t1 ORD
25e0: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 31 20 32 20  ER BY a;.} {1 2 
25f0: 33 20 32 20 33 20 34 7d 0a 0a 23 20 49 6e 73 65  3 2 3 4}..# Inse
2600: 72 74 20 61 20 72 6f 77 20 74 68 61 74 20 63 6f  rt a row that co
2610: 6e 66 6c 69 63 74 73 20 6f 6e 20 63 6f 6c 75 6d  nflicts on colum
2620: 6e 20 42 2e 20 20 54 68 65 20 69 6e 73 65 72 74  n B.  The insert
2630: 20 73 68 6f 75 6c 64 20 62 65 20 69 67 6e 6f 72   should be ignor
2640: 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ed..#.do_execsql
2650: 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2d 31  _test conflict-1
2660: 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  1.2 {.  INSERT I
2670: 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 56 41  NTO t1(a,b,c) VA
2680: 4c 55 45 53 28 33 2c 32 2c 35 29 3b 0a 20 20 53  LUES(3,2,5);.  S
2690: 45 4c 45 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d  ELECT a,b,c FROM
26a0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   t1 ORDER BY a;.
26b0: 7d 20 7b 31 20 32 20 33 20 32 20 33 20 34 7d 0a  } {1 2 3 2 3 4}.
26c0: 0a 23 20 49 6e 73 65 72 74 20 74 77 6f 20 72 6f  .# Insert two ro
26d0: 77 73 20 77 68 65 72 65 20 74 68 65 20 73 65 63  ws where the sec
26e0: 6f 6e 64 20 63 6f 6e 66 6c 69 63 74 73 20 6f 6e  ond conflicts on
26f0: 20 43 2e 20 20 54 68 65 20 66 69 72 73 74 20 72   C.  The first r
2700: 6f 77 20 73 68 6f 77 20 67 6f 0a 23 20 61 6e 64  ow show go.# and
2710: 20 61 6e 64 20 74 68 65 6e 20 74 68 65 72 65 20   and then there 
2720: 73 68 6f 75 6c 64 20 62 65 20 61 20 63 6f 6e 73  should be a cons
2730: 74 72 61 69 6e 74 20 65 72 72 6f 72 2e 0a 23 0a  traint error..#.
2740: 64 6f 5f 74 65 73 74 20 63 6f 6e 66 6c 69 63 74  do_test conflict
2750: 2d 31 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  -11.3 {.  catchs
2760: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
2770: 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53  t1(a,b,c) VALUES
2780: 28 34 2c 35 2c 36 29 2c 20 28 35 2c 36 2c 34 29  (4,5,6), (5,6,4)
2790: 3b 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51 55 45 20  ;}.} {1 {UNIQUE 
27a0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
27b0: 64 3a 20 74 31 2e 63 7d 7d 0a 64 6f 5f 65 78 65  d: t1.c}}.do_exe
27c0: 63 73 71 6c 5f 74 65 73 74 20 63 6f 6e 66 6c 69  csql_test confli
27d0: 63 74 2d 31 31 2e 34 20 7b 0a 20 20 53 45 4c 45  ct-11.4 {.  SELE
27e0: 43 54 20 61 2c 62 2c 63 20 46 52 4f 4d 20 74 31  CT a,b,c FROM t1
27f0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 7b   ORDER BY a;.} {
2800: 31 20 32 20 33 20 32 20 33 20 34 20 34 20 35 20  1 2 3 2 3 4 4 5 
2810: 36 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  6}...finish_test
2820: 0a                                               .