/ Hex Artifact Content
Login

Artifact 24dd28eb3d9f1b5a174f47e9899ace5facb08373a4223593c8c631e6cf9f7d5a:


0000: 23 20 32 30 31 32 20 44 65 63 65 6d 62 65 72 20  # 2012 December 
0010: 31 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  17.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66 69  ary..#.# This fi
01b0: 6c 65 20 74 65 73 74 73 20 74 68 65 20 50 52 41  le tests the PRA
01c0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
01d0: 63 68 65 63 6b 20 63 6f 6d 6d 61 6e 64 2e 0a 23  check command..#
01e0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
01f0: 52 2d 31 35 34 30 32 2d 30 33 31 30 33 20 50 52  R-15402-03103 PR
0200: 41 47 4d 41 20 73 63 68 65 6d 61 2e 66 6f 72 65  AGMA schema.fore
0210: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 20 50  ign_key_check; P
0220: 52 41 47 4d 41 0a 23 20 73 63 68 65 6d 61 2e 66  RAGMA.# schema.f
0230: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
0240: 28 74 61 62 6c 65 2d 6e 61 6d 65 29 3b 0a 23 0a  (table-name);.#.
0250: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
0260: 2d 32 33 39 31 38 2d 31 37 33 30 31 20 54 68 65  -23918-17301 The
0270: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
0280: 63 6b 20 70 72 61 67 6d 61 20 63 68 65 63 6b 73  ck pragma checks
0290: 20 74 68 65 0a 23 20 64 61 74 61 62 61 73 65 2c   the.# database,
02a0: 20 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63 61   or the table ca
02b0: 6c 6c 65 64 20 22 74 61 62 6c 65 2d 6e 61 6d 65  lled "table-name
02c0: 22 2c 20 66 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ", for foreign k
02d0: 65 79 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 73  ey.# constraints
02e0: 20 74 68 61 74 20 61 72 65 20 76 69 6f 6c 61 74   that are violat
02f0: 65 64 20 61 6e 64 20 72 65 74 75 72 6e 73 20 6f  ed and returns o
0300: 6e 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74  ne row of output
0310: 20 66 6f 72 20 65 61 63 68 0a 23 20 76 69 6f 6c   for each.# viol
0320: 61 74 69 6f 6e 2e 0a 0a 73 65 74 20 74 65 73 74  ation...set test
0330: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0340: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0350: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0360: 2e 74 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65  .tcl.set testpre
0370: 66 69 78 20 66 6b 65 79 35 0a 0a 69 66 63 61 70  fix fkey5..ifcap
0380: 61 62 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65  able {!foreignke
0390: 79 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  y} {.  finish_te
03a0: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64  st.  return.}..d
03b0: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 31 2e 31  o_test fkey5-1.1
03c0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
03d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
03e0: 70 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  p1(a INTEGER PRI
03f0: 4d 41 52 59 20 4b 45 59 29 3b 20 49 4e 53 45 52  MARY KEY); INSER
0400: 54 20 49 4e 54 4f 20 70 31 20 56 41 4c 55 45 53  T INTO p1 VALUES
0410: 28 38 38 29 2c 28 38 39 29 3b 0a 20 20 20 20 43  (88),(89);.    C
0420: 52 45 41 54 45 20 54 41 42 4c 45 20 70 32 28 61  REATE TABLE p2(a
0430: 20 49 4e 54 20 50 52 49 4d 41 52 59 20 4b 45 59   INT PRIMARY KEY
0440: 29 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 70  ); INSERT INTO p
0450: 32 20 56 41 4c 55 45 53 28 37 37 29 2c 28 37 38  2 VALUES(77),(78
0460: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
0470: 42 4c 45 20 70 33 28 61 20 54 45 58 54 20 50 52  BLE p3(a TEXT PR
0480: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
0490: 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 33 20 56  INSERT INTO p3 V
04a0: 41 4c 55 45 53 28 36 36 29 2c 28 36 37 29 2c 28  ALUES(66),(67),(
04b0: 27 61 6c 70 68 61 27 29 2c 28 27 42 52 41 56 4f  'alpha'),('BRAVO
04c0: 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ');.    CREATE T
04d0: 41 42 4c 45 20 70 34 28 61 20 54 45 58 54 20 50  ABLE p4(a TEXT P
04e0: 52 49 4d 41 52 59 20 4b 45 59 20 43 4f 4c 4c 41  RIMARY KEY COLLA
04f0: 54 45 20 6e 6f 63 61 73 65 29 3b 0a 20 20 20 20  TE nocase);.    
0500: 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 34 20 56  INSERT INTO p4 V
0510: 41 4c 55 45 53 28 27 61 6c 70 68 61 27 29 2c 28  ALUES('alpha'),(
0520: 27 42 52 41 56 4f 27 29 2c 28 27 35 35 27 29 2c  'BRAVO'),('55'),
0530: 28 27 44 65 6c 74 61 27 29 2c 28 27 45 43 48 4f  ('Delta'),('ECHO
0540: 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ');.    CREATE T
0550: 41 42 4c 45 20 70 35 28 61 20 49 4e 54 45 47 45  ABLE p5(a INTEGE
0560: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  R PRIMARY KEY, b
0570: 2c 20 63 2c 20 55 4e 49 51 55 45 28 62 2c 63 29  , c, UNIQUE(b,c)
0580: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0590: 54 4f 20 70 35 20 56 41 4c 55 45 53 28 31 2c 27  TO p5 VALUES(1,'
05a0: 41 6c 70 68 61 27 2c 27 61 62 63 27 29 2c 28 32  Alpha','abc'),(2
05b0: 2c 27 62 65 74 61 27 2c 27 64 65 66 27 29 3b 0a  ,'beta','def');.
05c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
05d0: 20 70 36 28 61 20 49 4e 54 45 47 45 52 20 50 52   p6(a INTEGER PR
05e0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 54 45 58  IMARY KEY, b TEX
05f0: 54 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  T COLLATE nocase
0600: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0610: 20 20 20 20 20 20 63 20 54 45 58 54 20 43 4f 4c        c TEXT COL
0620: 4c 41 54 45 20 72 74 72 69 6d 2c 20 55 4e 49 51  LATE rtrim, UNIQ
0630: 55 45 28 62 2c 63 29 29 3b 0a 20 20 20 20 49 4e  UE(b,c));.    IN
0640: 53 45 52 54 20 49 4e 54 4f 20 70 36 20 56 41 4c  SERT INTO p6 VAL
0650: 55 45 53 28 31 2c 27 41 6c 70 68 61 27 2c 27 61  UES(1,'Alpha','a
0660: 62 63 20 27 29 2c 28 32 2c 27 62 45 54 41 27 2c  bc '),(2,'bETA',
0670: 27 64 65 66 20 20 20 20 27 29 3b 0a 0a 20 20 20  'def    ');..   
0680: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 31   CREATE TABLE c1
0690: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
06a0: 52 59 20 4b 45 59 20 72 65 66 65 72 65 6e 63 65  RY KEY reference
06b0: 73 20 70 31 29 3b 0a 20 20 20 20 43 52 45 41 54  s p1);.    CREAT
06c0: 45 20 54 41 42 4c 45 20 63 32 28 78 20 49 4e 54  E TABLE c2(x INT
06d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
06e0: 20 72 65 66 65 72 65 6e 63 65 73 20 70 32 29 3b   references p2);
06f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0700: 45 20 63 33 28 78 20 49 4e 54 45 47 45 52 20 50  E c3(x INTEGER P
0710: 52 49 4d 41 52 59 20 4b 45 59 20 72 65 66 65 72  RIMARY KEY refer
0720: 65 6e 63 65 73 20 70 33 29 3b 0a 20 20 20 20 43  ences p3);.    C
0730: 52 45 41 54 45 20 54 41 42 4c 45 20 63 34 28 78  REATE TABLE c4(x
0740: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
0750: 20 4b 45 59 20 72 65 66 65 72 65 6e 63 65 73 20   KEY references 
0760: 70 34 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  p4);.    CREATE 
0770: 54 41 42 4c 45 20 63 35 28 78 20 49 4e 54 20 72  TABLE c5(x INT r
0780: 65 66 65 72 65 6e 63 65 73 20 70 31 29 3b 0a 20  eferences p1);. 
0790: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
07a0: 63 36 28 78 20 49 4e 54 20 72 65 66 65 72 65 6e  c6(x INT referen
07b0: 63 65 73 20 70 32 29 3b 0a 20 20 20 20 43 52 45  ces p2);.    CRE
07c0: 41 54 45 20 54 41 42 4c 45 20 63 37 28 78 20 49  ATE TABLE c7(x I
07d0: 4e 54 20 72 65 66 65 72 65 6e 63 65 73 20 70 33  NT references p3
07e0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
07f0: 42 4c 45 20 63 38 28 78 20 49 4e 54 20 72 65 66  BLE c8(x INT ref
0800: 65 72 65 6e 63 65 73 20 70 34 29 3b 0a 20 20 20  erences p4);.   
0810: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 39   CREATE TABLE c9
0820: 28 78 20 54 45 58 54 20 55 4e 49 51 55 45 20 72  (x TEXT UNIQUE r
0830: 65 66 65 72 65 6e 63 65 73 20 70 31 29 3b 0a 20  eferences p1);. 
0840: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0850: 63 31 30 28 78 20 54 45 58 54 20 55 4e 49 51 55  c10(x TEXT UNIQU
0860: 45 20 72 65 66 65 72 65 6e 63 65 73 20 70 32 29  E references p2)
0870: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0880: 4c 45 20 63 31 31 28 78 20 54 45 58 54 20 55 4e  LE c11(x TEXT UN
0890: 49 51 55 45 20 72 65 66 65 72 65 6e 63 65 73 20  IQUE references 
08a0: 70 33 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  p3);.    CREATE 
08b0: 54 41 42 4c 45 20 63 31 32 28 78 20 54 45 58 54  TABLE c12(x TEXT
08c0: 20 55 4e 49 51 55 45 20 72 65 66 65 72 65 6e 63   UNIQUE referenc
08d0: 65 73 20 70 34 29 3b 0a 20 20 20 20 43 52 45 41  es p4);.    CREA
08e0: 54 45 20 54 41 42 4c 45 20 63 31 33 28 78 20 54  TE TABLE c13(x T
08f0: 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  EXT COLLATE noca
0900: 73 65 20 72 65 66 65 72 65 6e 63 65 73 20 70 33  se references p3
0910: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
0920: 42 4c 45 20 63 31 34 28 78 20 54 45 58 54 20 43  BLE c14(x TEXT C
0930: 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20 72 65  OLLATE nocase re
0940: 66 65 72 65 6e 63 65 73 20 70 34 29 3b 0a 20 20  ferences p4);.  
0950: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
0960: 31 35 28 78 2c 20 79 2c 20 46 4f 52 45 49 47 4e  15(x, y, FOREIGN
0970: 20 4b 45 59 28 78 2c 79 29 20 52 45 46 45 52 45   KEY(x,y) REFERE
0980: 4e 43 45 53 20 70 35 28 62 2c 63 29 29 3b 0a 20  NCES p5(b,c));. 
0990: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
09a0: 63 31 36 28 78 2c 20 79 2c 20 46 4f 52 45 49 47  c16(x, y, FOREIG
09b0: 4e 20 4b 45 59 28 78 2c 79 29 20 52 45 46 45 52  N KEY(x,y) REFER
09c0: 45 4e 43 45 53 20 70 35 28 63 2c 62 29 29 3b 0a  ENCES p5(c,b));.
09d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
09e0: 20 63 31 37 28 78 2c 20 79 2c 20 46 4f 52 45 49   c17(x, y, FOREI
09f0: 47 4e 20 4b 45 59 28 78 2c 79 29 20 52 45 46 45  GN KEY(x,y) REFE
0a00: 52 45 4e 43 45 53 20 70 36 28 62 2c 63 29 29 3b  RENCES p6(b,c));
0a10: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0a20: 45 20 63 31 38 28 78 2c 20 79 2c 20 46 4f 52 45  E c18(x, y, FORE
0a30: 49 47 4e 20 4b 45 59 28 78 2c 79 29 20 52 45 46  IGN KEY(x,y) REF
0a40: 45 52 45 4e 43 45 53 20 70 36 28 63 2c 62 29 29  ERENCES p6(c,b))
0a50: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0a60: 4c 45 20 63 31 39 28 78 20 54 45 58 54 20 43 4f  LE c19(x TEXT CO
0a70: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20 79 20  LLATE nocase, y 
0a80: 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 72 74 72  TEXT COLLATE rtr
0a90: 69 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  im,.            
0aa0: 20 20 20 20 20 20 20 20 20 46 4f 52 45 49 47 4e           FOREIGN
0ab0: 20 4b 45 59 28 78 2c 79 29 20 52 45 46 45 52 45   KEY(x,y) REFERE
0ac0: 4e 43 45 53 20 70 35 28 62 2c 63 29 29 3b 0a 20  NCES p5(b,c));. 
0ad0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0ae0: 63 32 30 28 78 20 54 45 58 54 20 43 4f 4c 4c 41  c20(x TEXT COLLA
0af0: 54 45 20 6e 6f 63 61 73 65 2c 20 79 20 54 45 58  TE nocase, y TEX
0b00: 54 20 43 4f 4c 4c 41 54 45 20 72 74 72 69 6d 2c  T COLLATE rtrim,
0b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0b20: 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45        FOREIGN KE
0b30: 59 28 78 2c 79 29 20 52 45 46 45 52 45 4e 43 45  Y(x,y) REFERENCE
0b40: 53 20 70 35 28 63 2c 62 29 29 3b 0a 20 20 20 20  S p5(c,b));.    
0b50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 32 31  CREATE TABLE c21
0b60: 28 78 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20  (x TEXT COLLATE 
0b70: 6e 6f 63 61 73 65 2c 20 79 20 54 45 58 54 20 43  nocase, y TEXT C
0b80: 4f 4c 4c 41 54 45 20 72 74 72 69 6d 2c 0a 20 20  OLLATE rtrim,.  
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ba0: 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 78     FOREIGN KEY(x
0bb0: 2c 79 29 20 52 45 46 45 52 45 4e 43 45 53 20 70  ,y) REFERENCES p
0bc0: 36 28 62 2c 63 29 29 3b 0a 20 20 20 20 43 52 45  6(b,c));.    CRE
0bd0: 41 54 45 20 54 41 42 4c 45 20 63 32 32 28 78 20  ATE TABLE c22(x 
0be0: 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e 6f 63  TEXT COLLATE noc
0bf0: 61 73 65 2c 20 79 20 54 45 58 54 20 43 4f 4c 4c  ase, y TEXT COLL
0c00: 41 54 45 20 72 74 72 69 6d 2c 0a 20 20 20 20 20  ATE rtrim,.     
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 46 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c 79 29  FOREIGN KEY(x,y)
0c30: 20 52 45 46 45 52 45 4e 43 45 53 20 70 36 28 63   REFERENCES p6(c
0c40: 2c 62 29 29 3b 0a 0a 20 20 20 20 50 52 41 47 4d  ,b));..    PRAGM
0c50: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
0c60: 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 7d 20 20 20  eck;.  }.} {}   
0c70: 20 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d   .do_test fkey5-
0c80: 31 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  1.2 {.  db eval 
0c90: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
0ca0: 4f 20 63 31 20 56 41 4c 55 45 53 28 39 30 29 2c  O c1 VALUES(90),
0cb0: 28 38 37 29 2c 28 38 38 29 3b 0a 20 20 20 20 50  (87),(88);.    P
0cc0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
0cd0: 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b  y_check;.  }.} {
0ce0: 63 31 20 38 37 20 70 31 20 30 20 63 31 20 39 30  c1 87 p1 0 c1 90
0cf0: 20 70 31 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66   p1 0}.do_test f
0d00: 6b 65 79 35 2d 31 2e 32 62 20 7b 0a 20 20 64 62  key5-1.2b {.  db
0d10: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
0d20: 4d 41 20 6d 61 69 6e 2e 66 6f 72 65 69 67 6e 5f  MA main.foreign_
0d30: 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d  key_check;.  }.}
0d40: 20 7b 63 31 20 38 37 20 70 31 20 30 20 63 31 20   {c1 87 p1 0 c1 
0d50: 39 30 20 70 31 20 30 7d 0a 64 6f 5f 74 65 73 74  90 p1 0}.do_test
0d60: 20 66 6b 65 79 35 2d 31 2e 32 63 20 7b 0a 20 20   fkey5-1.2c {.  
0d70: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
0d80: 41 47 4d 41 20 74 65 6d 70 2e 66 6f 72 65 69 67  AGMA temp.foreig
0d90: 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d  n_key_check;.  }
0da0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 6b  .} {}.do_test fk
0db0: 65 79 35 2d 31 2e 33 20 7b 0a 20 20 64 62 20 65  ey5-1.3 {.  db e
0dc0: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
0dd0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
0de0: 63 6b 28 63 31 29 3b 0a 20 20 7d 0a 7d 20 7b 63  ck(c1);.  }.} {c
0df0: 31 20 38 37 20 70 31 20 30 20 63 31 20 39 30 20  1 87 p1 0 c1 90 
0e00: 70 31 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b  p1 0}.do_test fk
0e10: 65 79 35 2d 31 2e 34 20 7b 0a 20 20 64 62 20 65  ey5-1.4 {.  db e
0e20: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
0e30: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
0e40: 63 6b 28 63 32 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  ck(c2);.  }.} {}
0e50: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 31  .do_test fkey5-1
0e60: 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .5 {.  db eval {
0e70: 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e  .    PRAGMA main
0e80: 2e 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65  .foreign_key_che
0e90: 63 6b 28 63 32 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  ck(c2);.  }.} {}
0ea0: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 31  .do_test fkey5-1
0eb0: 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .6 {.  catchsql 
0ec0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
0ed0: 70 2e 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  p.foreign_key_ch
0ee0: 65 63 6b 28 63 32 29 3b 0a 20 20 7d 0a 7d 20 7b  eck(c2);.  }.} {
0ef0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
0f00: 3a 20 74 65 6d 70 2e 63 32 7d 7d 0a 0a 23 20 45  : temp.c2}}..# E
0f10: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
0f20: 37 32 38 2d 30 38 37 30 39 20 54 68 65 72 65 20  728-08709 There 
0f30: 61 72 65 20 66 6f 75 72 20 63 6f 6c 75 6d 6e 73  are four columns
0f40: 20 69 6e 20 65 61 63 68 20 72 65 73 75 6c 74 20   in each result 
0f50: 72 6f 77 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  row..#.# EVIDENC
0f60: 45 2d 4f 46 3a 20 52 2d 35 35 36 37 32 2d 30 31  E-OF: R-55672-01
0f70: 36 32 30 20 54 68 65 20 66 69 72 73 74 20 63 6f  620 The first co
0f80: 6c 75 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  lumn is the name
0f90: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 23 20   of the table.# 
0fa0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
0fb0: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
0fc0: 75 73 65 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  use..#.# EVIDENC
0fd0: 45 2d 4f 46 3a 20 52 2d 30 30 34 37 31 2d 35 35  E-OF: R-00471-55
0fe0: 31 36 36 20 54 68 65 20 73 65 63 6f 6e 64 20 63  166 The second c
0ff0: 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
1000: 69 64 20 6f 66 20 74 68 65 20 72 6f 77 0a 23 20  id of the row.# 
1010: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
1020: 65 20 69 6e 76 61 6c 69 64 20 52 45 46 45 52 45  e invalid REFERE
1030: 4e 43 45 53 20 63 6c 61 75 73 65 2c 20 6f 72 20  NCES clause, or 
1040: 4e 55 4c 4c 20 69 66 20 74 68 65 20 63 68 69 6c  NULL if the chil
1050: 64 0a 23 20 74 61 62 6c 65 20 69 73 20 61 20 57  d.# table is a W
1060: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
1070: 6c 65 2e 0a 23 0a 23 20 54 68 65 20 73 65 63 6f  le..#.# The seco
1080: 6e 64 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65  nd clause in the
1090: 20 70 72 65 76 69 6f 75 73 20 69 73 20 74 65 73   previous is tes
10a0: 74 65 64 20 62 79 20 66 6b 65 79 35 2d 31 30 2e  ted by fkey5-10.
10b0: 33 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  3..#.# EVIDENCE-
10c0: 4f 46 3a 20 52 2d 34 30 34 38 32 2d 32 30 32 36  OF: R-40482-2026
10d0: 35 20 54 68 65 20 74 68 69 72 64 20 63 6f 6c 75  5 The third colu
10e0: 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  mn is the name o
10f0: 66 20 74 68 65 20 74 61 62 6c 65 0a 23 20 74 68  f the table.# th
1100: 61 74 20 69 73 20 72 65 66 65 72 72 65 64 20 74  at is referred t
1110: 6f 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  o..#.# EVIDENCE-
1120: 4f 46 3a 20 52 2d 36 32 38 33 39 2d 30 37 39 36  OF: R-62839-0796
1130: 39 20 54 68 65 20 66 6f 75 72 74 68 20 63 6f 6c  9 The fourth col
1140: 75 6d 6e 20 69 73 20 74 68 65 20 69 6e 64 65 78  umn is the index
1150: 20 6f 66 20 74 68 65 0a 23 20 73 70 65 63 69 66   of the.# specif
1160: 69 63 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ic foreign key c
1170: 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 66  onstraint that f
1180: 61 69 6c 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  ailed..#.do_test
1190: 20 66 6b 65 79 35 2d 32 2e 30 20 7b 0a 20 20 64   fkey5-2.0 {.  d
11a0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53  b eval {.    INS
11b0: 45 52 54 20 49 4e 54 4f 20 63 35 20 53 45 4c 45  ERT INTO c5 SELE
11c0: 43 54 20 78 20 46 52 4f 4d 20 63 31 3b 0a 20 20  CT x FROM c1;.  
11d0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 31    DELETE FROM c1
11e0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72  ;.    PRAGMA for
11f0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a  eign_key_check;.
1200: 20 20 7d 0a 7d 20 7b 63 35 20 31 20 70 31 20 30    }.} {c5 1 p1 0
1210: 20 63 35 20 33 20 70 31 20 30 7d 0a 64 6f 5f 74   c5 3 p1 0}.do_t
1220: 65 73 74 20 66 6b 65 79 35 2d 32 2e 31 20 7b 0a  est fkey5-2.1 {.
1230: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
1240: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
1250: 65 79 5f 63 68 65 63 6b 28 63 35 29 3b 0a 20 20  ey_check(c5);.  
1260: 7d 0a 7d 20 7b 63 35 20 31 20 70 31 20 30 20 63  }.} {c5 1 p1 0 c
1270: 35 20 33 20 70 31 20 30 7d 0a 64 6f 5f 74 65 73  5 3 p1 0}.do_tes
1280: 74 20 66 6b 65 79 35 2d 32 2e 32 20 7b 0a 20 20  t fkey5-2.2 {.  
1290: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
12a0: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
12b0: 5f 63 68 65 63 6b 28 63 31 29 3b 0a 20 20 7d 0a  _check(c1);.  }.
12c0: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
12d0: 74 65 73 74 20 66 6b 65 79 35 2d 32 2e 33 20 7b  test fkey5-2.3 {
12e0: 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67  .  PRAGMA foreig
12f0: 6e 5f 6b 65 79 5f 6c 69 73 74 28 63 35 29 3b 0a  n_key_list(c5);.
1300: 7d 20 7b 30 20 30 20 70 31 20 78 20 7b 7d 20 7b  } {0 0 p1 x {} {
1310: 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41  NO ACTION} {NO A
1320: 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 0a 64 6f  CTION} NONE}..do
1330: 5f 74 65 73 74 20 66 6b 65 79 35 2d 33 2e 30 20  _test fkey5-3.0 
1340: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
1350: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 39    INSERT INTO c9
1360: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63   SELECT x FROM c
1370: 35 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52  5;.    DELETE FR
1380: 4f 4d 20 63 35 3b 0a 20 20 20 20 50 52 41 47 4d  OM c5;.    PRAGM
1390: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
13a0: 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 39 20 31  eck;.  }.} {c9 1
13b0: 20 70 31 20 30 20 63 39 20 33 20 70 31 20 30 7d   p1 0 c9 3 p1 0}
13c0: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 33  .do_test fkey5-3
13d0: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
13e0: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
13f0: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 39  ign_key_check(c9
1400: 29 3b 0a 20 20 7d 0a 7d 20 7b 63 39 20 31 20 70  );.  }.} {c9 1 p
1410: 31 20 30 20 63 39 20 33 20 70 31 20 30 7d 0a 64  1 0 c9 3 p1 0}.d
1420: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 33 2e 32  o_test fkey5-3.2
1430: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
1440: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
1450: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 35 29 3b  n_key_check(c5);
1460: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  .  }.} {}..do_te
1470: 73 74 20 66 6b 65 79 35 2d 34 2e 30 20 7b 0a 20  st fkey5-4.0 {. 
1480: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44   db eval {.    D
1490: 45 4c 45 54 45 20 46 52 4f 4d 20 63 39 3b 0a 20  ELETE FROM c9;. 
14a0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
14b0: 32 20 56 41 4c 55 45 53 28 37 39 29 2c 28 37 37  2 VALUES(79),(77
14c0: 29 2c 28 37 36 29 3b 0a 20 20 20 20 50 52 41 47  ),(76);.    PRAG
14d0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
14e0: 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 32 20  heck;.  }.} {c2 
14f0: 37 36 20 70 32 20 30 20 63 32 20 37 39 20 70 32  76 p2 0 c2 79 p2
1500: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79   0}.do_test fkey
1510: 35 2d 34 2e 31 20 7b 0a 20 20 64 62 20 65 76 61  5-4.1 {.  db eva
1520: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  l {.    PRAGMA f
1530: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1540: 28 63 32 29 3b 0a 20 20 7d 0a 7d 20 7b 63 32 20  (c2);.  }.} {c2 
1550: 37 36 20 70 32 20 30 20 63 32 20 37 39 20 70 32  76 p2 0 c2 79 p2
1560: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79   0}.do_test fkey
1570: 35 2d 34 2e 32 20 7b 0a 20 20 64 62 20 65 76 61  5-4.2 {.  db eva
1580: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
1590: 4e 54 4f 20 63 36 20 53 45 4c 45 43 54 20 78 20  NTO c6 SELECT x 
15a0: 46 52 4f 4d 20 63 32 3b 0a 20 20 20 20 44 45 4c  FROM c2;.    DEL
15b0: 45 54 45 20 46 52 4f 4d 20 63 32 3b 0a 20 20 20  ETE FROM c2;.   
15c0: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
15d0: 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d  key_check;.  }.}
15e0: 20 7b 63 36 20 31 20 70 32 20 30 20 63 36 20 33   {c6 1 p2 0 c6 3
15f0: 20 70 32 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66   p2 0}.do_test f
1600: 6b 65 79 35 2d 34 2e 33 20 7b 0a 20 20 64 62 20  key5-4.3 {.  db 
1610: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
1620: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
1630: 65 63 6b 28 63 36 29 3b 0a 20 20 7d 0a 7d 20 7b  eck(c6);.  }.} {
1640: 63 36 20 31 20 70 32 20 30 20 63 36 20 33 20 70  c6 1 p2 0 c6 3 p
1650: 32 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65  2 0}.do_test fke
1660: 79 35 2d 34 2e 34 20 7b 0a 20 20 64 62 20 65 76  y5-4.4 {.  db ev
1670: 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  al {.    INSERT 
1680: 49 4e 54 4f 20 63 31 30 20 53 45 4c 45 43 54 20  INTO c10 SELECT 
1690: 78 20 46 52 4f 4d 20 63 36 3b 0a 20 20 20 20 44  x FROM c6;.    D
16a0: 45 4c 45 54 45 20 46 52 4f 4d 20 63 36 3b 0a 20  ELETE FROM c6;. 
16b0: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
16c0: 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d  n_key_check;.  }
16d0: 0a 7d 20 7b 63 31 30 20 31 20 70 32 20 30 20 63  .} {c10 1 p2 0 c
16e0: 31 30 20 33 20 70 32 20 30 7d 0a 64 6f 5f 74 65  10 3 p2 0}.do_te
16f0: 73 74 20 66 6b 65 79 35 2d 34 2e 35 20 7b 0a 20  st fkey5-4.5 {. 
1700: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50   db eval {.    P
1710: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1720: 79 5f 63 68 65 63 6b 28 63 31 30 29 3b 0a 20 20  y_check(c10);.  
1730: 7d 0a 7d 20 7b 63 31 30 20 31 20 70 32 20 30 20  }.} {c10 1 p2 0 
1740: 63 31 30 20 33 20 70 32 20 30 7d 0a 0a 64 6f 5f  c10 3 p2 0}..do_
1750: 74 65 73 74 20 66 6b 65 79 35 2d 35 2e 30 20 7b  test fkey5-5.0 {
1760: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1770: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 31 30   DELETE FROM c10
1780: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1790: 4f 20 63 33 20 56 41 4c 55 45 53 28 36 38 29 2c  O c3 VALUES(68),
17a0: 28 36 37 29 2c 28 36 35 29 3b 0a 20 20 20 20 50  (67),(65);.    P
17b0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
17c0: 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b  y_check;.  }.} {
17d0: 63 33 20 36 35 20 70 33 20 30 20 63 33 20 36 38  c3 65 p3 0 c3 68
17e0: 20 70 33 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66   p3 0}.do_test f
17f0: 6b 65 79 35 2d 35 2e 31 20 7b 0a 20 20 64 62 20  key5-5.1 {.  db 
1800: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
1810: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
1820: 65 63 6b 28 63 33 29 3b 0a 20 20 7d 0a 7d 20 7b  eck(c3);.  }.} {
1830: 63 33 20 36 35 20 70 33 20 30 20 63 33 20 36 38  c3 65 p3 0 c3 68
1840: 20 70 33 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66   p3 0}.do_test f
1850: 6b 65 79 35 2d 35 2e 32 20 7b 0a 20 20 64 62 20  key5-5.2 {.  db 
1860: 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  eval {.    INSER
1870: 54 20 49 4e 54 4f 20 63 37 20 53 45 4c 45 43 54  T INTO c7 SELECT
1880: 20 78 20 46 52 4f 4d 20 63 33 3b 0a 20 20 20 20   x FROM c3;.    
1890: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 37 20 56  INSERT INTO c7 V
18a0: 41 4c 55 45 53 28 27 41 6c 70 68 61 27 29 2c 28  ALUES('Alpha'),(
18b0: 27 61 6c 70 68 61 27 29 2c 28 27 66 6f 78 74 72  'alpha'),('foxtr
18c0: 6f 74 27 29 3b 0a 20 20 20 20 44 45 4c 45 54 45  ot');.    DELETE
18d0: 20 46 52 4f 4d 20 63 33 3b 0a 20 20 20 20 50 52   FROM c3;.    PR
18e0: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
18f0: 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63  _check;.  }.} {c
1900: 37 20 31 20 70 33 20 30 20 63 37 20 33 20 70 33  7 1 p3 0 c7 3 p3
1910: 20 30 20 63 37 20 34 20 70 33 20 30 20 63 37 20   0 c7 4 p3 0 c7 
1920: 36 20 70 33 20 30 7d 0a 64 6f 5f 74 65 73 74 20  6 p3 0}.do_test 
1930: 66 6b 65 79 35 2d 35 2e 33 20 7b 0a 20 20 64 62  fkey5-5.3 {.  db
1940: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
1950: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1960: 68 65 63 6b 28 63 37 29 3b 0a 20 20 7d 0a 7d 20  heck(c7);.  }.} 
1970: 7b 63 37 20 31 20 70 33 20 30 20 63 37 20 33 20  {c7 1 p3 0 c7 3 
1980: 70 33 20 30 20 63 37 20 34 20 70 33 20 30 20 63  p3 0 c7 4 p3 0 c
1990: 37 20 36 20 70 33 20 30 7d 0a 64 6f 5f 74 65 73  7 6 p3 0}.do_tes
19a0: 74 20 66 6b 65 79 35 2d 35 2e 34 20 7b 0a 20 20  t fkey5-5.4 {.  
19b0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e  db eval {.    IN
19c0: 53 45 52 54 20 49 4e 54 4f 20 63 31 31 20 53 45  SERT INTO c11 SE
19d0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 37 3b 0a  LECT x FROM c7;.
19e0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
19f0: 63 37 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  c7;.    PRAGMA f
1a00: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1a10: 3b 0a 20 20 7d 0a 7d 20 7b 63 31 31 20 31 20 70  ;.  }.} {c11 1 p
1a20: 33 20 30 20 63 31 31 20 33 20 70 33 20 30 20 63  3 0 c11 3 p3 0 c
1a30: 31 31 20 34 20 70 33 20 30 20 63 31 31 20 36 20  11 4 p3 0 c11 6 
1a40: 70 33 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b  p3 0}.do_test fk
1a50: 65 79 35 2d 35 2e 35 20 7b 0a 20 20 64 62 20 65  ey5-5.5 {.  db e
1a60: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
1a70: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
1a80: 63 6b 28 63 31 31 29 3b 0a 20 20 7d 0a 7d 20 7b  ck(c11);.  }.} {
1a90: 63 31 31 20 31 20 70 33 20 30 20 63 31 31 20 33  c11 1 p3 0 c11 3
1aa0: 20 70 33 20 30 20 63 31 31 20 34 20 70 33 20 30   p3 0 c11 4 p3 0
1ab0: 20 63 31 31 20 36 20 70 33 20 30 7d 0a 0a 64 6f   c11 6 p3 0}..do
1ac0: 5f 74 65 73 74 20 66 6b 65 79 35 2d 36 2e 30 20  _test fkey5-6.0 
1ad0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
1ae0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 31    DELETE FROM c1
1af0: 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  1;.    INSERT IN
1b00: 54 4f 20 63 34 20 56 41 4c 55 45 53 28 35 34 29  TO c4 VALUES(54)
1b10: 2c 28 35 35 29 2c 28 35 36 29 3b 0a 20 20 20 20  ,(55),(56);.    
1b20: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
1b30: 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20  ey_check;.  }.} 
1b40: 7b 63 34 20 35 34 20 70 34 20 30 20 63 34 20 35  {c4 54 p4 0 c4 5
1b50: 36 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20  6 p4 0}.do_test 
1b60: 66 6b 65 79 35 2d 36 2e 31 20 7b 0a 20 20 64 62  fkey5-6.1 {.  db
1b70: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
1b80: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1b90: 68 65 63 6b 28 63 34 29 3b 0a 20 20 7d 0a 7d 20  heck(c4);.  }.} 
1ba0: 7b 63 34 20 35 34 20 70 34 20 30 20 63 34 20 35  {c4 54 p4 0 c4 5
1bb0: 36 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20  6 p4 0}.do_test 
1bc0: 66 6b 65 79 35 2d 36 2e 32 20 7b 0a 20 20 64 62  fkey5-6.2 {.  db
1bd0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45   eval {.    INSE
1be0: 52 54 20 49 4e 54 4f 20 63 38 20 53 45 4c 45 43  RT INTO c8 SELEC
1bf0: 54 20 78 20 46 52 4f 4d 20 63 34 3b 0a 20 20 20  T x FROM c4;.   
1c00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 38 20   INSERT INTO c8 
1c10: 56 41 4c 55 45 53 28 27 41 6c 70 68 61 27 29 2c  VALUES('Alpha'),
1c20: 28 27 41 4c 50 48 41 27 29 2c 28 27 66 6f 78 74  ('ALPHA'),('foxt
1c30: 72 6f 74 27 29 3b 0a 20 20 20 20 44 45 4c 45 54  rot');.    DELET
1c40: 45 20 46 52 4f 4d 20 63 34 3b 0a 20 20 20 20 50  E FROM c4;.    P
1c50: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1c60: 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b  y_check;.  }.} {
1c70: 63 38 20 31 20 70 34 20 30 20 63 38 20 33 20 70  c8 1 p4 0 c8 3 p
1c80: 34 20 30 20 63 38 20 36 20 70 34 20 30 7d 0a 64  4 0 c8 6 p4 0}.d
1c90: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 36 2e 33  o_test fkey5-6.3
1ca0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
1cb0: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
1cc0: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 38 29 3b  n_key_check(c8);
1cd0: 0a 20 20 7d 0a 7d 20 7b 63 38 20 31 20 70 34 20  .  }.} {c8 1 p4 
1ce0: 30 20 63 38 20 33 20 70 34 20 30 20 63 38 20 36  0 c8 3 p4 0 c8 6
1cf0: 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66   p4 0}.do_test f
1d00: 6b 65 79 35 2d 36 2e 34 20 7b 0a 20 20 64 62 20  key5-6.4 {.  db 
1d10: 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  eval {.    INSER
1d20: 54 20 49 4e 54 4f 20 63 31 32 20 53 45 4c 45 43  T INTO c12 SELEC
1d30: 54 20 78 20 46 52 4f 4d 20 63 38 3b 0a 20 20 20  T x FROM c8;.   
1d40: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 38 3b   DELETE FROM c8;
1d50: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
1d60: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20  ign_key_check;. 
1d70: 20 7d 0a 7d 20 7b 63 31 32 20 31 20 70 34 20 30   }.} {c12 1 p4 0
1d80: 20 63 31 32 20 33 20 70 34 20 30 20 63 31 32 20   c12 3 p4 0 c12 
1d90: 36 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20  6 p4 0}.do_test 
1da0: 66 6b 65 79 35 2d 36 2e 35 20 7b 0a 20 20 64 62  fkey5-6.5 {.  db
1db0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
1dc0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1dd0: 68 65 63 6b 28 63 31 32 29 3b 0a 20 20 7d 0a 7d  heck(c12);.  }.}
1de0: 20 7b 63 31 32 20 31 20 70 34 20 30 20 63 31 32   {c12 1 p4 0 c12
1df0: 20 33 20 70 34 20 30 20 63 31 32 20 36 20 70 34   3 p4 0 c12 6 p4
1e00: 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 6b 65   0}..do_test fke
1e10: 79 35 2d 37 2e 31 20 7b 0a 20 20 73 65 74 20 72  y5-7.1 {.  set r
1e20: 65 73 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c 20  es {}.  db eval 
1e30: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52 20  {.    INSERT OR 
1e40: 49 47 4e 4f 52 45 20 49 4e 54 4f 20 63 31 33 20  IGNORE INTO c13 
1e50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 31  SELECT * FROM c1
1e60: 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 4f 52  2;.    INSERT OR
1e70: 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 43 31 34   IGNORE INTO C14
1e80: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
1e90: 31 32 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  12;.    DELETE F
1ea0: 52 4f 4d 20 63 31 32 3b 0a 20 20 20 20 50 52 41  ROM c12;.    PRA
1eb0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
1ec0: 63 68 65 63 6b 3b 0a 20 20 7d 20 7b 0a 20 20 20  check;.  } {.   
1ed0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6c 69   lappend res [li
1ee0: 73 74 20 24 74 61 62 6c 65 20 24 72 6f 77 69 64  st $table $rowid
1ef0: 20 24 66 6b 69 64 20 24 70 61 72 65 6e 74 5d 0a   $fkid $parent].
1f00: 20 20 7d 0a 20 20 6c 73 6f 72 74 20 24 72 65 73    }.  lsort $res
1f10: 0a 7d 20 7b 7b 63 31 33 20 31 20 30 20 70 33 7d  .} {{c13 1 0 p3}
1f20: 20 7b 63 31 33 20 32 20 30 20 70 33 7d 20 7b 63   {c13 2 0 p3} {c
1f30: 31 33 20 33 20 30 20 70 33 7d 20 7b 63 31 33 20  13 3 0 p3} {c13 
1f40: 34 20 30 20 70 33 7d 20 7b 63 31 33 20 35 20 30  4 0 p3} {c13 5 0
1f50: 20 70 33 7d 20 7b 63 31 33 20 36 20 30 20 70 33   p3} {c13 6 0 p3
1f60: 7d 20 7b 63 31 34 20 31 20 30 20 70 34 7d 20 7b  } {c14 1 0 p4} {
1f70: 63 31 34 20 33 20 30 20 70 34 7d 20 7b 63 31 34  c14 3 0 p4} {c14
1f80: 20 36 20 30 20 70 34 7d 7d 0a 64 6f 5f 74 65 73   6 0 p4}}.do_tes
1f90: 74 20 66 6b 65 79 35 2d 37 2e 32 20 7b 0a 20 20  t fkey5-7.2 {.  
1fa0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
1fb0: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1fc0: 5f 63 68 65 63 6b 28 63 31 34 29 3b 0a 20 20 7d  _check(c14);.  }
1fd0: 0a 7d 20 7b 63 31 34 20 31 20 70 34 20 30 20 63  .} {c14 1 p4 0 c
1fe0: 31 34 20 33 20 70 34 20 30 20 63 31 34 20 36 20  14 3 p4 0 c14 6 
1ff0: 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b  p4 0}.do_test fk
2000: 65 79 35 2d 37 2e 33 20 7b 0a 20 20 64 62 20 65  ey5-7.3 {.  db e
2010: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
2020: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2030: 63 6b 28 63 31 33 29 3b 0a 20 20 7d 0a 7d 20 7b  ck(c13);.  }.} {
2040: 63 31 33 20 31 20 70 33 20 30 20 63 31 33 20 32  c13 1 p3 0 c13 2
2050: 20 70 33 20 30 20 63 31 33 20 33 20 70 33 20 30   p3 0 c13 3 p3 0
2060: 20 63 31 33 20 34 20 70 33 20 30 20 63 31 33 20   c13 4 p3 0 c13 
2070: 35 20 70 33 20 30 20 63 31 33 20 36 20 70 33 20  5 p3 0 c13 6 p3 
2080: 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79  0}..do_test fkey
2090: 35 2d 38 2e 30 20 7b 0a 20 20 64 62 20 65 76 61  5-8.0 {.  db eva
20a0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
20b0: 52 4f 4d 20 63 31 33 3b 0a 20 20 20 20 44 45 4c  ROM c13;.    DEL
20c0: 45 54 45 20 46 52 4f 4d 20 63 31 34 3b 0a 20 20  ETE FROM c14;.  
20d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 31    INSERT INTO c1
20e0: 39 20 56 41 4c 55 45 53 28 27 61 6c 70 68 61 27  9 VALUES('alpha'
20f0: 2c 27 61 62 63 27 29 3b 0a 20 20 20 20 50 52 41  ,'abc');.    PRA
2100: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
2110: 63 68 65 63 6b 28 63 31 39 29 3b 0a 20 20 7d 0a  check(c19);.  }.
2120: 7d 20 7b 63 31 39 20 31 20 70 35 20 30 7d 0a 64  } {c19 1 p5 0}.d
2130: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 38 2e 31  o_test fkey5-8.1
2140: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
2150: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63     DELETE FROM c
2160: 31 39 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  19;.    INSERT I
2170: 4e 54 4f 20 63 31 39 20 56 41 4c 55 45 53 28 27  NTO c19 VALUES('
2180: 41 6c 70 68 61 27 2c 27 61 62 63 27 29 3b 0a 20  Alpha','abc');. 
2190: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
21a0: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 31 39 29  n_key_check(c19)
21b0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
21c0: 73 74 20 66 6b 65 79 35 2d 38 2e 32 20 7b 0a 20  st fkey5-8.2 {. 
21d0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 49   db eval {.    I
21e0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 32 30 20 56  NSERT INTO c20 V
21f0: 41 4c 55 45 53 28 27 41 6c 70 68 61 27 2c 27 61  ALUES('Alpha','a
2200: 62 63 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41  bc');.    PRAGMA
2210: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2220: 63 6b 28 63 32 30 29 3b 0a 20 20 7d 0a 7d 20 7b  ck(c20);.  }.} {
2230: 63 32 30 20 31 20 70 35 20 30 7d 0a 64 6f 5f 74  c20 1 p5 0}.do_t
2240: 65 73 74 20 66 6b 65 79 35 2d 38 2e 33 20 7b 0a  est fkey5-8.3 {.
2250: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
2260: 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 32 30 3b  DELETE FROM c20;
2270: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2280: 20 63 32 30 20 56 41 4c 55 45 53 28 27 61 62 63   c20 VALUES('abc
2290: 27 2c 27 41 6c 70 68 61 27 29 3b 0a 20 20 20 20  ','Alpha');.    
22a0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
22b0: 65 79 5f 63 68 65 63 6b 28 63 32 30 29 3b 0a 20  ey_check(c20);. 
22c0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
22d0: 66 6b 65 79 35 2d 38 2e 34 20 7b 0a 20 20 64 62  fkey5-8.4 {.  db
22e0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45   eval {.    INSE
22f0: 52 54 20 49 4e 54 4f 20 63 32 31 20 56 41 4c 55  RT INTO c21 VALU
2300: 45 53 28 27 61 6c 70 68 61 27 2c 27 61 62 63 20  ES('alpha','abc 
2310: 20 20 20 27 29 3b 0a 20 20 20 20 50 52 41 47 4d     ');.    PRAGM
2320: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
2330: 65 63 6b 28 63 32 31 29 3b 0a 20 20 7d 0a 7d 20  eck(c21);.  }.} 
2340: 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35  {}.do_test fkey5
2350: 2d 38 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c  -8.5 {.  db eval
2360: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
2370: 4f 4d 20 63 32 31 3b 0a 20 20 20 20 49 4e 53 45  OM c21;.    INSE
2380: 52 54 20 49 4e 54 4f 20 63 31 39 20 56 41 4c 55  RT INTO c19 VALU
2390: 45 53 28 27 41 6c 70 68 61 27 2c 27 61 62 63 27  ES('Alpha','abc'
23a0: 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f  );.    PRAGMA fo
23b0: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
23c0: 63 32 31 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  c21);.  }.} {}.d
23d0: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 38 2e 36  o_test fkey5-8.6
23e0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
23f0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
2400: 32 32 20 56 41 4c 55 45 53 28 27 41 6c 70 68 61  22 VALUES('Alpha
2410: 27 2c 27 61 62 63 27 29 3b 0a 20 20 20 20 50 52  ','abc');.    PR
2420: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
2430: 5f 63 68 65 63 6b 28 63 32 32 29 3b 0a 20 20 7d  _check(c22);.  }
2440: 0a 7d 20 7b 63 32 32 20 31 20 70 36 20 30 7d 0a  .} {c22 1 p6 0}.
2450: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 38 2e  do_test fkey5-8.
2460: 37 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  7 {.  db eval {.
2470: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
2480: 63 32 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  c22;.    INSERT 
2490: 49 4e 54 4f 20 63 32 32 20 56 41 4c 55 45 53 28  INTO c22 VALUES(
24a0: 27 61 62 63 20 20 27 2c 27 41 4c 50 48 41 27 29  'abc  ','ALPHA')
24b0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72  ;.    PRAGMA for
24c0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63  eign_key_check(c
24d0: 32 32 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 0a  22);.  }.} {}...
24e0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
24f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
2530: 74 73 20 39 2e 2a 20 76 65 72 69 66 79 20 74 68  ts 9.* verify th
2540: 61 74 20 6d 69 73 73 69 6e 67 20 70 61 72 65 6e  at missing paren
2550: 74 20 74 61 62 6c 65 73 20 61 72 65 20 68 61 6e  t tables are han
2560: 64 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  dled correctly..
2570: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
2580: 74 20 39 2e 31 2e 31 20 7b 0a 20 20 43 52 45 41  t 9.1.1 {.  CREA
2590: 54 45 20 54 41 42 4c 45 20 6b 31 28 78 20 52 45  TE TABLE k1(x RE
25a0: 46 45 52 45 4e 43 45 53 20 73 31 29 3b 0a 20 20  FERENCES s1);.  
25b0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
25c0: 65 79 5f 63 68 65 63 6b 28 6b 31 29 3b 0a 7d 20  ey_check(k1);.} 
25d0: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
25e0: 73 74 20 39 2e 31 2e 32 20 7b 0a 20 20 49 4e 53  st 9.1.2 {.  INS
25f0: 45 52 54 20 49 4e 54 4f 20 6b 31 20 56 41 4c 55  ERT INTO k1 VALU
2600: 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 50 52 41 47  ES(NULL);.  PRAG
2610: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
2620: 68 65 63 6b 28 6b 31 29 3b 0a 7d 20 7b 7d 0a 64  heck(k1);.} {}.d
2630: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 39  o_execsql_test 9
2640: 2e 31 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54 20  .1.3 {.  INSERT 
2650: 49 4e 54 4f 20 6b 31 20 56 41 4c 55 45 53 28 31  INTO k1 VALUES(1
2660: 29 3b 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65  );.  PRAGMA fore
2670: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 6b 31  ign_key_check(k1
2680: 29 3b 0a 7d 20 7b 6b 31 20 32 20 73 31 20 30 7d  );.} {k1 2 s1 0}
2690: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
26a0: 74 20 39 2e 32 2e 31 20 7b 0a 20 20 43 52 45 41  t 9.2.1 {.  CREA
26b0: 54 45 20 54 41 42 4c 45 20 6b 32 28 78 2c 20 79  TE TABLE k2(x, y
26c0: 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c  , FOREIGN KEY(x,
26d0: 20 79 29 20 52 45 46 45 52 45 4e 43 45 53 20 73   y) REFERENCES s
26e0: 31 28 61 2c 20 62 29 29 3b 0a 20 20 50 52 41 47  1(a, b));.  PRAG
26f0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
2700: 68 65 63 6b 28 6b 32 29 3b 0a 7d 20 7b 7d 0a 64  heck(k2);.} {}.d
2710: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 39  o_execsql_test 9
2720: 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .2 {.  INSERT IN
2730: 54 4f 20 6b 32 20 56 41 4c 55 45 53 28 4e 55 4c  TO k2 VALUES(NUL
2740: 4c 2c 20 27 66 69 76 65 27 29 3b 0a 20 20 50 52  L, 'five');.  PR
2750: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
2760: 5f 63 68 65 63 6b 28 6b 32 29 3b 0a 7d 20 7b 7d  _check(k2);.} {}
2770: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2780: 20 39 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54 20   9.3 {.  INSERT 
2790: 49 4e 54 4f 20 6b 32 20 56 41 4c 55 45 53 28 27  INTO k2 VALUES('
27a0: 6f 6e 65 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 50  one', NULL);.  P
27b0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
27c0: 79 5f 63 68 65 63 6b 28 6b 32 29 3b 0a 7d 20 7b  y_check(k2);.} {
27d0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
27e0: 74 20 39 2e 34 20 7b 0a 20 20 49 4e 53 45 52 54  t 9.4 {.  INSERT
27f0: 20 49 4e 54 4f 20 6b 32 20 56 41 4c 55 45 53 28   INTO k2 VALUES(
2800: 27 73 69 78 27 2c 20 27 73 65 76 65 6e 27 29 3b  'six', 'seven');
2810: 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67  .  PRAGMA foreig
2820: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 6b 32 29 3b  n_key_check(k2);
2830: 0a 7d 20 7b 6b 32 20 33 20 73 31 20 30 7d 0a 0a  .} {k2 3 s1 0}..
2840: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
2850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
2890: 74 20 75 73 69 6e 67 20 61 20 57 49 54 48 4f 55  t using a WITHOU
28a0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 61 73  T ROWID table as
28b0: 20 74 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65   the child table
28c0: 20 77 69 74 68 20 61 6e 20 49 4e 54 45 47 45 52   with an INTEGER
28d0: 20 0a 23 20 50 52 49 4d 41 52 59 20 4b 45 59 20   .# PRIMARY KEY 
28e0: 61 73 20 74 68 65 20 70 61 72 65 6e 74 20 6b 65  as the parent ke
28f0: 79 2e 0a 23 0a 72 65 73 65 74 5f 64 62 0a 64 6f  y..#.reset_db.do
2900: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 30  _execsql_test 10
2910: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
2920: 42 4c 45 20 70 33 30 20 28 69 64 20 49 4e 54 45  BLE p30 (id INTE
2930: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 29  GER PRIMARY KEY)
2940: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
2950: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
2960: 33 30 20 28 0a 20 20 20 20 20 20 6c 69 6e 65 20  30 (.      line 
2970: 49 4e 54 45 47 45 52 2c 20 0a 20 20 20 20 20 20  INTEGER, .      
2980: 6d 61 73 74 65 72 20 52 45 46 45 52 45 4e 43 45  master REFERENCE
2990: 53 20 70 33 30 28 69 64 29 2c 20 0a 20 20 20 20  S p30(id), .    
29a0: 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 6d 61    PRIMARY KEY(ma
29b0: 73 74 65 72 29 0a 20 20 29 20 57 49 54 48 4f 55  ster).  ) WITHOU
29c0: 54 20 52 4f 57 49 44 3b 0a 0a 20 20 49 4e 53 45  T ROWID;..  INSE
29d0: 52 54 20 49 4e 54 4f 20 70 33 30 20 28 69 64 29  RT INTO p30 (id)
29e0: 20 56 41 4c 55 45 53 20 28 31 29 3b 0a 20 20 49   VALUES (1);.  I
29f0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 33 30 20 28  NSERT INTO c30 (
2a00: 6d 61 73 74 65 72 2c 20 6c 69 6e 65 29 20 20 56  master, line)  V
2a10: 41 4c 55 45 53 20 28 31 2c 20 39 39 39 29 3b 0a  ALUES (1, 999);.
2a20: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
2a30: 74 20 31 30 2e 32 20 7b 0a 20 20 50 52 41 47 4d  t 10.2 {.  PRAGM
2a40: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
2a50: 65 63 6b 3b 0a 7d 0a 23 20 45 56 49 44 45 4e 43  eck;.}.# EVIDENC
2a60: 45 2d 4f 46 3a 20 52 2d 30 30 34 37 31 2d 35 35  E-OF: R-00471-55
2a70: 31 36 36 20 54 68 65 20 73 65 63 6f 6e 64 20 63  166 The second c
2a80: 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
2a90: 69 64 20 6f 66 20 74 68 65 20 72 6f 77 0a 23 20  id of the row.# 
2aa0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
2ab0: 65 20 69 6e 76 61 6c 69 64 20 52 45 46 45 52 45  e invalid REFERE
2ac0: 4e 43 45 53 20 63 6c 61 75 73 65 2c 20 6f 72 20  NCES clause, or 
2ad0: 4e 55 4c 4c 20 69 66 20 74 68 65 20 63 68 69 6c  NULL if the chil
2ae0: 64 0a 23 20 74 61 62 6c 65 20 69 73 20 61 20 57  d.# table is a W
2af0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
2b00: 6c 65 2e 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  le..do_execsql_t
2b10: 65 73 74 20 31 30 2e 33 20 7b 0a 20 20 49 4e 53  est 10.3 {.  INS
2b20: 45 52 54 20 49 4e 54 4f 20 63 33 30 20 56 41 4c  ERT INTO c30 VAL
2b30: 55 45 53 28 34 35 2c 20 34 35 29 3b 0a 20 20 50  UES(45, 45);.  P
2b40: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2b50: 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b 63 33 30 20  y_check;.} {c30 
2b60: 7b 7d 20 70 33 30 20 30 7d 0a 0a 23 2d 2d 2d 2d  {} p30 0}..#----
2b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2bb0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 22 66 6f  -----.# Test "fo
2bc0: 72 65 69 67 6e 20 6b 65 79 20 6d 69 73 6d 61 74  reign key mismat
2bd0: 63 68 22 20 65 72 72 6f 72 73 2e 0a 23 0a 72 65  ch" errors..#.re
2be0: 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71  set_db.do_execsq
2bf0: 6c 5f 74 65 73 74 20 31 31 2e 30 20 7b 0a 20 20  l_test 11.0 {.  
2c00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 74 28  CREATE TABLE tt(
2c10: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  y);.  CREATE TAB
2c20: 4c 45 20 63 31 31 28 78 20 52 45 46 45 52 45 4e  LE c11(x REFEREN
2c30: 43 45 53 20 74 74 28 79 29 29 3b 0a 7d 0a 64 6f  CES tt(y));.}.do
2c40: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 31  _catchsql_test 1
2c50: 31 2e 31 20 7b 0a 20 20 50 52 41 47 4d 41 20 66  1.1 {.  PRAGMA f
2c60: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
2c70: 3b 0a 7d 20 7b 31 20 7b 66 6f 72 65 69 67 6e 20  ;.} {1 {foreign 
2c80: 6b 65 79 20 6d 69 73 6d 61 74 63 68 20 2d 20 22  key mismatch - "
2c90: 63 31 31 22 20 72 65 66 65 72 65 6e 63 69 6e 67  c11" referencing
2ca0: 20 22 74 74 22 7d 7d 0a 0a 66 69 6e 69 73 68 5f   "tt"}}..finish_
2cb0: 74 65 73 74 0a                                   test.