/ Hex Artifact Content
Login

Artifact 41e7f83c6827605991160a31380148a9fc5f1339:


0000: 23 20 32 30 31 34 2d 30 37 2d 33 30 0a 23 0a 23  # 2014-07-30.#.#
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 20 20  QLite library.  
01a0: 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66 20 74  The.# focus of t
01b0: 68 69 73 20 66 69 6c 65 20 69 73 20 74 65 73 74  his file is test
01c0: 69 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 55  ing the CREATE U
01d0: 4e 49 51 55 45 20 49 4e 44 45 58 20 73 74 61 74  NIQUE INDEX stat
01e0: 65 6d 65 6e 74 0a 23 20 74 6f 20 76 65 72 69 66  ement.# to verif
01f0: 79 20 74 68 61 74 20 74 69 63 6b 65 74 20 39 61  y that ticket 9a
0200: 36 64 61 66 33 34 30 64 66 39 39 62 61 39 33 63  6daf340df99ba93c
0210: 35 33 62 63 66 38 66 61 38 33 64 39 66 32 38 30  53bcf8fa83d9f280
0220: 34 30 64 32 61 38 0a 23 20 68 61 73 20 62 65 65  40d2a8.# has bee
0230: 6e 20 66 69 78 65 64 3a 0a 23 0a 23 20 20 64 72  n fixed:.#.#  dr
0240: 68 20 61 64 64 65 64 20 6f 6e 20 32 30 31 34 2d  h added on 2014-
0250: 30 37 2d 33 30 20 31 32 3a 33 33 3a 30 34 3a 0a  07-30 12:33:04:.
0260: 23 0a 23 20 20 54 68 65 20 43 52 45 41 54 45 20  #.#  The CREATE 
0270: 55 4e 49 51 55 45 20 49 4e 44 45 58 20 6f 6e 20  UNIQUE INDEX on 
0280: 74 68 65 20 74 68 69 72 64 20 6c 69 6e 65 20 62  the third line b
0290: 65 6c 6f 77 20 64 6f 65 73 20 6e 6f 74 20 66 61  elow does not fa
02a0: 69 6c 20 65 76 65 6e 0a 23 20 20 74 68 6f 75 67  il even.#  thoug
02b0: 68 20 74 68 65 20 78 20 63 6f 6c 75 6d 6e 20 76  h the x column v
02c0: 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  alues are not al
02d0: 6c 20 75 6e 69 71 75 65 2e 0a 23 0a 23 20 20 20  l unique..#.#   
02e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
02f0: 31 28 78 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 23  1(x NOT NULL);.#
0300: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
0310: 20 74 31 20 56 41 4c 55 45 53 28 31 29 2c 28 32   t1 VALUES(1),(2
0320: 29 2c 28 32 29 2c 28 33 29 3b 0a 23 20 20 20 20  ),(2),(3);.#    
0330: 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49   CREATE UNIQUE I
0340: 4e 44 45 58 20 74 31 78 20 4f 4e 20 74 31 28 78  NDEX t1x ON t1(x
0350: 29 3b 0a 23 0a 23 20 49 66 20 74 68 65 20 69 6e  );.#.# If the in
0360: 64 65 78 20 69 73 20 63 72 65 61 74 65 64 20 62  dex is created b
0370: 65 66 6f 72 65 20 74 68 65 20 49 4e 53 45 52 54  efore the INSERT
0380: 2c 20 74 68 65 6e 20 75 6e 69 71 75 65 6e 65 73  , then uniquenes
0390: 73 20 69 73 20 65 6e 66 6f 72 63 65 64 0a 23 20  s is enforced.# 
03a0: 61 74 20 74 68 65 20 70 6f 69 6e 74 20 6f 66 20  at the point of 
03b0: 74 68 65 20 49 4e 53 45 52 54 2e 20 4e 6f 74 65  the INSERT. Note
03c0: 20 74 68 61 74 20 74 68 65 20 4e 4f 54 20 4e 55   that the NOT NU
03d0: 4c 4c 20 6f 6e 20 74 68 65 20 69 6e 64 65 78 65  LL on the indexe
03e0: 64 20 63 6f 6c 75 6d 6e 0a 23 20 73 65 65 6d 73  d column.# seems
03f0: 20 74 6f 20 62 65 20 72 65 71 75 69 72 65 64 20   to be required 
0400: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 78 68 69  in order to exhi
0410: 62 69 74 20 74 68 69 73 20 62 75 67 2e 0a 23 0a  bit this bug..#.
0420: 23 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72  # "PRAGMA integr
0430: 69 74 79 5f 63 68 65 63 6b 22 20 64 6f 65 73 20  ity_check" does 
0440: 6e 6f 74 20 64 65 74 65 63 74 20 74 68 65 20 72  not detect the r
0450: 65 73 75 6c 74 69 6e 67 20 6d 61 6c 66 6f 72 6d  esulting malform
0460: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 23 20 54  ed database..# T
0470: 68 61 74 20 6d 69 67 68 74 20 62 65 20 63 6f 6e  hat might be con
0480: 73 69 64 65 72 65 64 20 61 20 73 65 70 61 72 61  sidered a separa
0490: 74 65 20 69 73 73 75 65 2e 0a 23 0a 23 20 42 69  te issue..#.# Bi
04a0: 73 65 63 74 69 6e 67 20 73 68 6f 77 73 20 74 68  secting shows th
04b0: 61 74 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 20  at this problem 
04c0: 77 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 62  was introduced b
04d0: 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  y the addition o
04e0: 66 0a 23 20 20 57 49 54 48 4f 55 54 20 52 4f 57  f.#  WITHOUT ROW
04f0: 49 44 20 73 75 70 70 6f 72 74 20 69 6e 20 76 65  ID support in ve
0500: 72 73 69 6f 6e 20 33 2e 38 2e 32 2c 20 73 70 65  rsion 3.8.2, spe
0510: 63 69 66 69 63 61 6c 6c 79 20 69 6e 20 63 68 65  cifically in che
0520: 63 6b 2d 69 6e 0a 23 20 5b 63 38 30 65 32 32 39  ck-in.# [c80e229
0530: 64 64 39 63 31 32 33 30 5d 20 6f 6e 20 32 30 31  dd9c1230] on 201
0540: 33 2d 31 31 2d 30 37 2e 20 54 68 69 73 20 70 72  3-11-07. This pr
0550: 6f 62 6c 65 6d 20 77 61 73 20 72 65 70 6f 72 74  oblem was report
0560: 65 64 20 6f 6e 20 74 68 65 20 6d 61 69 6c 69 6e  ed on the mailin
0570: 67 0a 23 20 6c 69 73 74 20 62 79 20 50 61 76 65  g.# list by Pave
0580: 6c 20 50 69 6d 65 6e 6f 76 2e 20 20 61 6e 64 20  l Pimenov.  and 
0590: 70 72 69 6d 61 72 79 20 6b 65 79 73 2c 20 61 6e  primary keys, an
05a0: 64 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e  d the UNIQUE con
05b0: 73 74 72 61 69 6e 74 0a 23 20 6f 6e 20 74 61 62  straint.# on tab
05c0: 6c 65 20 63 6f 6c 75 6d 6e 73 0a 23 0a 0a 73 65  le columns.#..se
05d0: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
05e0: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
05f0: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0600: 74 65 73 74 65 72 2e 74 63 6c 0a 0a 66 6f 72 65  tester.tcl..fore
0610: 61 63 68 20 7b 69 64 20 73 71 6c 7d 20 7b 0a 20  ach {id sql} {. 
0620: 20 20 31 20 7b 43 52 45 41 54 45 20 54 41 42 4c    1 {CREATE TABL
0630: 45 20 74 31 28 78 20 54 45 58 54 20 50 52 49 4d  E t1(x TEXT PRIM
0640: 41 52 59 20 4b 45 59 2c 20 79 20 4e 4f 54 20 4e  ARY KEY, y NOT N
0650: 55 4c 4c 29 20 57 49 54 48 4f 55 54 20 52 4f 57  ULL) WITHOUT ROW
0660: 49 44 7d 0a 20 20 20 32 20 7b 43 52 45 41 54 45  ID}.   2 {CREATE
0670: 20 54 41 42 4c 45 20 74 31 28 78 20 54 45 58 54   TABLE t1(x TEXT
0680: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 20   PRIMARY KEY, y 
0690: 4e 4f 54 20 4e 55 4c 4c 29 7d 0a 20 20 20 33 20  NOT NULL)}.   3 
06a0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
06b0: 28 78 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  (x TEXT PRIMARY 
06c0: 4b 45 59 2c 20 79 29 20 57 49 54 48 4f 55 54 20  KEY, y) WITHOUT 
06d0: 52 4f 57 49 44 7d 0a 20 20 20 34 20 7b 43 52 45  ROWID}.   4 {CRE
06e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 54  ATE TABLE t1(x T
06f0: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
0700: 20 79 29 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65   y)}.} {.  do_te
0710: 73 74 20 24 69 64 2e 31 20 7b 0a 20 20 20 20 64  st $id.1 {.    d
0720: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42  b eval {DROP TAB
0730: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 31 7d  LE IF EXISTS t1}
0740: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 24 73 71  .    db eval $sq
0750: 6c 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49  l.    db eval {I
0760: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 2c  NSERT INTO t1(x,
0770: 79 29 20 56 41 4c 55 45 53 28 31 2c 31 29 2c 28  y) VALUES(1,1),(
0780: 32 2c 32 29 2c 28 33 2c 32 29 2c 28 34 2c 33 29  2,2),(3,2),(4,3)
0790: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
07a0: 73 74 20 24 69 64 2e 32 20 7b 0a 20 20 20 20 63  st $id.2 {.    c
07b0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
07c0: 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31 79  UNIQUE INDEX t1y
07d0: 20 4f 4e 20 74 31 28 79 29 7d 0a 20 20 7d 20 7b   ON t1(y)}.  } {
07e0: 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  1 {UNIQUE constr
07f0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e  aint failed: t1.
0800: 79 7d 7d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b  y}}.}..foreach {
0810: 69 64 20 73 71 6c 7d 20 7b 0a 20 20 20 35 20 7b  id sql} {.   5 {
0820: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0830: 77 2c 78 2c 79 20 4e 4f 54 20 4e 55 4c 4c 2c 7a  w,x,y NOT NULL,z
0840: 20 4e 4f 54 20 4e 55 4c 4c 2c 50 52 49 4d 41 52   NOT NULL,PRIMAR
0850: 59 20 4b 45 59 28 77 2c 78 29 29 20 57 49 54 48  Y KEY(w,x)) WITH
0860: 4f 55 54 20 52 4f 57 49 44 7d 0a 20 20 20 36 20  OUT ROWID}.   6 
0870: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
0880: 28 77 2c 78 2c 79 20 4e 4f 54 20 4e 55 4c 4c 2c  (w,x,y NOT NULL,
0890: 7a 20 4e 4f 54 20 4e 55 4c 4c 2c 50 52 49 4d 41  z NOT NULL,PRIMA
08a0: 52 59 20 4b 45 59 28 77 2c 78 29 29 7d 0a 20 20  RY KEY(w,x))}.  
08b0: 20 37 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45   7 {CREATE TABLE
08c0: 20 74 31 28 77 2c 78 2c 79 20 4e 4f 54 20 4e 55   t1(w,x,y NOT NU
08d0: 4c 4c 2c 7a 2c 50 52 49 4d 41 52 59 20 4b 45 59  LL,z,PRIMARY KEY
08e0: 28 77 2c 78 29 29 20 57 49 54 48 4f 55 54 20 52  (w,x)) WITHOUT R
08f0: 4f 57 49 44 7d 0a 20 20 20 38 20 7b 43 52 45 41  OWID}.   8 {CREA
0900: 54 45 20 54 41 42 4c 45 20 74 31 28 77 2c 78 2c  TE TABLE t1(w,x,
0910: 79 20 4e 4f 54 20 4e 55 4c 4c 2c 7a 2c 50 52 49  y NOT NULL,z,PRI
0920: 4d 41 52 59 20 4b 45 59 28 77 2c 78 29 29 7d 0a  MARY KEY(w,x))}.
0930: 20 20 20 39 20 7b 43 52 45 41 54 45 20 54 41 42     9 {CREATE TAB
0940: 4c 45 20 74 31 28 77 2c 78 2c 79 2c 7a 20 4e 4f  LE t1(w,x,y,z NO
0950: 54 20 4e 55 4c 4c 2c 50 52 49 4d 41 52 59 20 4b  T NULL,PRIMARY K
0960: 45 59 28 77 2c 78 29 29 20 57 49 54 48 4f 55 54  EY(w,x)) WITHOUT
0970: 20 52 4f 57 49 44 7d 0a 20 20 31 30 20 7b 43 52   ROWID}.  10 {CR
0980: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 77 2c  EATE TABLE t1(w,
0990: 78 2c 79 2c 7a 20 4e 4f 54 20 4e 55 4c 4c 2c 50  x,y,z NOT NULL,P
09a0: 52 49 4d 41 52 59 20 4b 45 59 28 77 2c 78 29 29  RIMARY KEY(w,x))
09b0: 7d 0a 20 20 31 31 20 7b 43 52 45 41 54 45 20 54  }.  11 {CREATE T
09c0: 41 42 4c 45 20 74 31 28 77 2c 78 2c 79 2c 7a 2c  ABLE t1(w,x,y,z,
09d0: 50 52 49 4d 41 52 59 20 4b 45 59 28 77 2c 78 29  PRIMARY KEY(w,x)
09e0: 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 7d  ) WITHOUT ROWID}
09f0: 0a 20 20 31 32 20 7b 43 52 45 41 54 45 20 54 41  .  12 {CREATE TA
0a00: 42 4c 45 20 74 31 28 77 2c 78 2c 79 2c 7a 2c 50  BLE t1(w,x,y,z,P
0a10: 52 49 4d 41 52 59 20 4b 45 59 28 77 2c 78 29 29  RIMARY KEY(w,x))
0a20: 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  }.} {.  do_test 
0a30: 24 69 64 2e 31 20 7b 0a 20 20 20 20 64 62 20 65  $id.1 {.    db e
0a40: 76 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  val {DROP TABLE 
0a50: 49 46 20 45 58 49 53 54 53 20 74 31 7d 0a 20 20  IF EXISTS t1}.  
0a60: 20 20 64 62 20 65 76 61 6c 20 24 73 71 6c 0a 20    db eval $sql. 
0a70: 20 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45     db eval {INSE
0a80: 52 54 20 49 4e 54 4f 20 74 31 28 77 2c 78 2c 79  RT INTO t1(w,x,y
0a90: 2c 7a 29 20 56 41 4c 55 45 53 28 31 2c 32 2c 33  ,z) VALUES(1,2,3
0aa0: 2c 34 29 2c 28 32 2c 33 2c 33 2c 34 29 7d 0a 20  ,4),(2,3,3,4)}. 
0ab0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
0ac0: 24 69 64 2e 32 20 7b 0a 20 20 20 20 63 61 74 63  $id.2 {.    catc
0ad0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 55 4e 49  hsql {CREATE UNI
0ae0: 51 55 45 20 49 4e 44 45 58 20 74 31 79 7a 20 4f  QUE INDEX t1yz O
0af0: 4e 20 74 31 28 79 2c 7a 29 7d 0a 20 20 7d 20 7b  N t1(y,z)}.  } {
0b00: 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  1 {UNIQUE constr
0b10: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e  aint failed: t1.
0b20: 79 2c 20 74 31 2e 7a 7d 7d 0a 7d 0a 0a 66 69 6e  y, t1.z}}.}..fin
0b30: 69 73 68 5f 74 65 73 74 0a                       ish_test.