/ Hex Artifact Content
Login

Artifact 8a1fde4e7721ae00b05b3178888833726ca2df8d:


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 30 35 34 32 36 2d 31 38 31 31 39 20 50 52  R-05426-18119 PR
0200: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
0210: 5f 63 68 65 63 6b 3b 20 50 52 41 47 4d 41 0a 23  _check; PRAGMA.#
0220: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
0230: 63 6b 28 74 61 62 6c 65 2d 6e 61 6d 65 29 3b 0a  ck(table-name);.
0240: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0250: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0260: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0270: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65  ir/tester.tcl.se
0280: 74 20 74 65 73 74 70 72 65 66 69 78 20 66 6b 65  t testprefix fke
0290: 79 35 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  y5..ifcapable {!
02a0: 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20  foreignkey} {.  
02b0: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
02c0: 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  turn.}..do_test 
02d0: 66 6b 65 79 35 2d 31 2e 31 20 7b 0a 20 20 64 62  fkey5-1.1 {.  db
02e0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
02f0: 54 45 20 54 41 42 4c 45 20 70 31 28 61 20 49 4e  TE TABLE p1(a IN
0300: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
0310: 59 29 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  Y); INSERT INTO 
0320: 70 31 20 56 41 4c 55 45 53 28 38 38 29 2c 28 38  p1 VALUES(88),(8
0330: 39 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  9);.    CREATE T
0340: 41 42 4c 45 20 70 32 28 61 20 49 4e 54 20 50 52  ABLE p2(a INT PR
0350: 49 4d 41 52 59 20 4b 45 59 29 3b 20 49 4e 53 45  IMARY KEY); INSE
0360: 52 54 20 49 4e 54 4f 20 70 32 20 56 41 4c 55 45  RT INTO p2 VALUE
0370: 53 28 37 37 29 2c 28 37 38 29 3b 0a 20 20 20 20  S(77),(78);.    
0380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 33 28  CREATE TABLE p3(
0390: 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  a TEXT PRIMARY K
03a0: 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  EY);.    INSERT 
03b0: 49 4e 54 4f 20 70 33 20 56 41 4c 55 45 53 28 36  INTO p3 VALUES(6
03c0: 36 29 2c 28 36 37 29 2c 28 27 61 6c 70 68 61 27  6),(67),('alpha'
03d0: 29 2c 28 27 42 52 41 56 4f 27 29 3b 0a 20 20 20  ),('BRAVO');.   
03e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 34   CREATE TABLE p4
03f0: 28 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  (a TEXT PRIMARY 
0400: 4b 45 59 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  KEY COLLATE noca
0410: 73 65 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  se);.    INSERT 
0420: 49 4e 54 4f 20 70 34 20 56 41 4c 55 45 53 28 27  INTO p4 VALUES('
0430: 61 6c 70 68 61 27 29 2c 28 27 42 52 41 56 4f 27  alpha'),('BRAVO'
0440: 29 2c 28 27 35 35 27 29 2c 28 27 44 65 6c 74 61  ),('55'),('Delta
0450: 27 29 2c 28 27 45 43 48 4f 27 29 3b 0a 20 20 20  '),('ECHO');.   
0460: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 35   CREATE TABLE p5
0470: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
0480: 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 55 4e  RY KEY, b, c, UN
0490: 49 51 55 45 28 62 2c 63 29 29 3b 0a 20 20 20 20  IQUE(b,c));.    
04a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 35 20 56  INSERT INTO p5 V
04b0: 41 4c 55 45 53 28 31 2c 27 41 6c 70 68 61 27 2c  ALUES(1,'Alpha',
04c0: 27 61 62 63 27 29 2c 28 32 2c 27 62 65 74 61 27  'abc'),(2,'beta'
04d0: 2c 27 64 65 66 27 29 3b 0a 20 20 20 20 43 52 45  ,'def');.    CRE
04e0: 41 54 45 20 54 41 42 4c 45 20 70 36 28 61 20 49  ATE TABLE p6(a I
04f0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0500: 45 59 2c 20 62 20 54 45 58 54 20 43 4f 4c 4c 41  EY, b TEXT COLLA
0510: 54 45 20 6e 6f 63 61 73 65 2c 0a 20 20 20 20 20  TE nocase,.     
0520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
0530: 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 72 74   TEXT COLLATE rt
0540: 72 69 6d 2c 20 55 4e 49 51 55 45 28 62 2c 63 29  rim, UNIQUE(b,c)
0550: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0560: 54 4f 20 70 36 20 56 41 4c 55 45 53 28 31 2c 27  TO p6 VALUES(1,'
0570: 41 6c 70 68 61 27 2c 27 61 62 63 20 27 29 2c 28  Alpha','abc '),(
0580: 32 2c 27 62 45 54 41 27 2c 27 64 65 66 20 20 20  2,'bETA','def   
0590: 20 27 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45   ');..    CREATE
05a0: 20 54 41 42 4c 45 20 63 31 28 78 20 49 4e 54 45   TABLE c1(x INTE
05b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
05c0: 72 65 66 65 72 65 6e 63 65 73 20 70 31 29 3b 0a  references p1);.
05d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
05e0: 20 63 32 28 78 20 49 4e 54 45 47 45 52 20 50 52   c2(x INTEGER PR
05f0: 49 4d 41 52 59 20 4b 45 59 20 72 65 66 65 72 65  IMARY KEY refere
0600: 6e 63 65 73 20 70 32 29 3b 0a 20 20 20 20 43 52  nces p2);.    CR
0610: 45 41 54 45 20 54 41 42 4c 45 20 63 33 28 78 20  EATE TABLE c3(x 
0620: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0630: 4b 45 59 20 72 65 66 65 72 65 6e 63 65 73 20 70  KEY references p
0640: 33 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  3);.    CREATE T
0650: 41 42 4c 45 20 63 34 28 78 20 49 4e 54 45 47 45  ABLE c4(x INTEGE
0660: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 72 65  R PRIMARY KEY re
0670: 66 65 72 65 6e 63 65 73 20 70 34 29 3b 0a 20 20  ferences p4);.  
0680: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
0690: 35 28 78 20 49 4e 54 20 72 65 66 65 72 65 6e 63  5(x INT referenc
06a0: 65 73 20 70 31 29 3b 0a 20 20 20 20 43 52 45 41  es p1);.    CREA
06b0: 54 45 20 54 41 42 4c 45 20 63 36 28 78 20 49 4e  TE TABLE c6(x IN
06c0: 54 20 72 65 66 65 72 65 6e 63 65 73 20 70 32 29  T references p2)
06d0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
06e0: 4c 45 20 63 37 28 78 20 49 4e 54 20 72 65 66 65  LE c7(x INT refe
06f0: 72 65 6e 63 65 73 20 70 33 29 3b 0a 20 20 20 20  rences p3);.    
0700: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 38 28  CREATE TABLE c8(
0710: 78 20 49 4e 54 20 72 65 66 65 72 65 6e 63 65 73  x INT references
0720: 20 70 34 29 3b 0a 20 20 20 20 43 52 45 41 54 45   p4);.    CREATE
0730: 20 54 41 42 4c 45 20 63 39 28 78 20 54 45 58 54   TABLE c9(x TEXT
0740: 20 55 4e 49 51 55 45 20 72 65 66 65 72 65 6e 63   UNIQUE referenc
0750: 65 73 20 70 31 29 3b 0a 20 20 20 20 43 52 45 41  es p1);.    CREA
0760: 54 45 20 54 41 42 4c 45 20 63 31 30 28 78 20 54  TE TABLE c10(x T
0770: 45 58 54 20 55 4e 49 51 55 45 20 72 65 66 65 72  EXT UNIQUE refer
0780: 65 6e 63 65 73 20 70 32 29 3b 0a 20 20 20 20 43  ences p2);.    C
0790: 52 45 41 54 45 20 54 41 42 4c 45 20 63 31 31 28  REATE TABLE c11(
07a0: 78 20 54 45 58 54 20 55 4e 49 51 55 45 20 72 65  x TEXT UNIQUE re
07b0: 66 65 72 65 6e 63 65 73 20 70 33 29 3b 0a 20 20  ferences p3);.  
07c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
07d0: 31 32 28 78 20 54 45 58 54 20 55 4e 49 51 55 45  12(x TEXT UNIQUE
07e0: 20 72 65 66 65 72 65 6e 63 65 73 20 70 34 29 3b   references p4);
07f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0800: 45 20 63 31 33 28 78 20 54 45 58 54 20 43 4f 4c  E c13(x TEXT COL
0810: 4c 41 54 45 20 6e 6f 63 61 73 65 20 72 65 66 65  LATE nocase refe
0820: 72 65 6e 63 65 73 20 70 33 29 3b 0a 20 20 20 20  rences p3);.    
0830: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 31 34  CREATE TABLE c14
0840: 28 78 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20  (x TEXT COLLATE 
0850: 6e 6f 63 61 73 65 20 72 65 66 65 72 65 6e 63 65  nocase reference
0860: 73 20 70 34 29 3b 0a 20 20 20 20 43 52 45 41 54  s p4);.    CREAT
0870: 45 20 54 41 42 4c 45 20 63 31 35 28 78 2c 20 79  E TABLE c15(x, y
0880: 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c  , FOREIGN KEY(x,
0890: 79 29 20 52 45 46 45 52 45 4e 43 45 53 20 70 35  y) REFERENCES p5
08a0: 28 62 2c 63 29 29 3b 0a 20 20 20 20 43 52 45 41  (b,c));.    CREA
08b0: 54 45 20 54 41 42 4c 45 20 63 31 36 28 78 2c 20  TE TABLE c16(x, 
08c0: 79 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 78  y, FOREIGN KEY(x
08d0: 2c 79 29 20 52 45 46 45 52 45 4e 43 45 53 20 70  ,y) REFERENCES p
08e0: 35 28 63 2c 62 29 29 3b 0a 20 20 20 20 43 52 45  5(c,b));.    CRE
08f0: 41 54 45 20 54 41 42 4c 45 20 63 31 37 28 78 2c  ATE TABLE c17(x,
0900: 20 79 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28   y, FOREIGN KEY(
0910: 78 2c 79 29 20 52 45 46 45 52 45 4e 43 45 53 20  x,y) REFERENCES 
0920: 70 36 28 62 2c 63 29 29 3b 0a 20 20 20 20 43 52  p6(b,c));.    CR
0930: 45 41 54 45 20 54 41 42 4c 45 20 63 31 38 28 78  EATE TABLE c18(x
0940: 2c 20 79 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59  , y, FOREIGN KEY
0950: 28 78 2c 79 29 20 52 45 46 45 52 45 4e 43 45 53  (x,y) REFERENCES
0960: 20 70 36 28 63 2c 62 29 29 3b 0a 20 20 20 20 43   p6(c,b));.    C
0970: 52 45 41 54 45 20 54 41 42 4c 45 20 63 31 39 28  REATE TABLE c19(
0980: 78 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e  x TEXT COLLATE n
0990: 6f 63 61 73 65 2c 20 79 20 54 45 58 54 20 43 4f  ocase, y TEXT CO
09a0: 4c 4c 41 54 45 20 72 74 72 69 6d 2c 0a 20 20 20  LLATE rtrim,.   
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09c0: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c    FOREIGN KEY(x,
09d0: 79 29 20 52 45 46 45 52 45 4e 43 45 53 20 70 35  y) REFERENCES p5
09e0: 28 62 2c 63 29 29 3b 0a 20 20 20 20 43 52 45 41  (b,c));.    CREA
09f0: 54 45 20 54 41 42 4c 45 20 63 32 30 28 78 20 54  TE TABLE c20(x T
0a00: 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  EXT COLLATE noca
0a10: 73 65 2c 20 79 20 54 45 58 54 20 43 4f 4c 4c 41  se, y TEXT COLLA
0a20: 54 45 20 72 74 72 69 6d 2c 0a 20 20 20 20 20 20  TE rtrim,.      
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
0a40: 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c 79 29 20  OREIGN KEY(x,y) 
0a50: 52 45 46 45 52 45 4e 43 45 53 20 70 35 28 63 2c  REFERENCES p5(c,
0a60: 62 29 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  b));.    CREATE 
0a70: 54 41 42 4c 45 20 63 32 31 28 78 20 54 45 58 54  TABLE c21(x TEXT
0a80: 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c   COLLATE nocase,
0a90: 20 79 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20   y TEXT COLLATE 
0aa0: 72 74 72 69 6d 2c 0a 20 20 20 20 20 20 20 20 20  rtrim,.         
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 46 4f 52 45              FORE
0ac0: 49 47 4e 20 4b 45 59 28 78 2c 79 29 20 52 45 46  IGN KEY(x,y) REF
0ad0: 45 52 45 4e 43 45 53 20 70 36 28 62 2c 63 29 29  ERENCES p6(b,c))
0ae0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0af0: 4c 45 20 63 32 32 28 78 20 54 45 58 54 20 43 4f  LE c22(x TEXT CO
0b00: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20 79 20  LLATE nocase, y 
0b10: 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 72 74 72  TEXT COLLATE rtr
0b20: 69 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  im,.            
0b30: 20 20 20 20 20 20 20 20 20 46 4f 52 45 49 47 4e           FOREIGN
0b40: 20 4b 45 59 28 78 2c 79 29 20 52 45 46 45 52 45   KEY(x,y) REFERE
0b50: 4e 43 45 53 20 70 36 28 63 2c 62 29 29 3b 0a 0a  NCES p6(c,b));..
0b60: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
0b70: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20  gn_key_check;.  
0b80: 7d 0a 7d 20 7b 7d 20 20 20 20 0a 64 6f 5f 74 65  }.} {}    .do_te
0b90: 73 74 20 66 6b 65 79 35 2d 31 2e 32 20 7b 0a 20  st fkey5-1.2 {. 
0ba0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 49   db eval {.    I
0bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 31 20 56 41  NSERT INTO c1 VA
0bc0: 4c 55 45 53 28 39 30 29 2c 28 38 37 29 2c 28 38  LUES(90),(87),(8
0bd0: 38 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  8);.    PRAGMA f
0be0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
0bf0: 3b 0a 20 20 7d 0a 7d 20 7b 63 31 20 38 37 20 70  ;.  }.} {c1 87 p
0c00: 31 20 30 20 63 31 20 39 30 20 70 31 20 30 7d 0a  1 0 c1 90 p1 0}.
0c10: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 31 2e  do_test fkey5-1.
0c20: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
0c30: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
0c40: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 31 29  gn_key_check(c1)
0c50: 3b 0a 20 20 7d 0a 7d 20 7b 63 31 20 38 37 20 70  ;.  }.} {c1 87 p
0c60: 31 20 30 20 63 31 20 39 30 20 70 31 20 30 7d 0a  1 0 c1 90 p1 0}.
0c70: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 31 2e  do_test fkey5-1.
0c80: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
0c90: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
0ca0: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 32 29  gn_key_check(c2)
0cb0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 45 56  ;.  }.} {}..# EV
0cc0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 37  IDENCE-OF: R-457
0cd0: 32 38 2d 30 38 37 30 39 20 54 68 65 72 65 20 61  28-08709 There a
0ce0: 72 65 20 66 6f 75 72 20 63 6f 6c 75 6d 6e 73 20  re four columns 
0cf0: 69 6e 20 65 61 63 68 20 72 65 73 75 6c 74 20 72  in each result r
0d00: 6f 77 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45  ow..#.# EVIDENCE
0d10: 2d 4f 46 3a 20 52 2d 35 35 36 37 32 2d 30 31 36  -OF: R-55672-016
0d20: 32 30 20 54 68 65 20 66 69 72 73 74 20 63 6f 6c  20 The first col
0d30: 75 6d 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  umn is the name 
0d40: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 23 20 74  of the table.# t
0d50: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
0d60: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
0d70: 73 65 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45  se..#.# EVIDENCE
0d80: 2d 4f 46 3a 20 52 2d 32 35 32 31 39 2d 32 35 36  -OF: R-25219-256
0d90: 31 38 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  18 The second co
0da0: 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
0db0: 64 20 6f 66 20 74 68 65 20 72 6f 77 0a 23 20 74  d of the row.# t
0dc0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
0dd0: 20 69 6e 76 61 6c 69 64 20 52 45 46 45 52 45 4e   invalid REFEREN
0de0: 43 45 53 20 63 6c 61 75 73 65 2e 0a 23 0a 23 20  CES clause..#.# 
0df0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34  EVIDENCE-OF: R-4
0e00: 30 34 38 32 2d 32 30 32 36 35 20 54 68 65 20 74  0482-20265 The t
0e10: 68 69 72 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74  hird column is t
0e20: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
0e30: 61 62 6c 65 0a 23 20 74 68 61 74 20 69 73 20 72  able.# that is r
0e40: 65 66 65 72 72 65 64 20 74 6f 2e 0a 23 0a 23 20  eferred to..#.# 
0e50: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
0e60: 32 38 33 39 2d 30 37 39 36 39 20 54 68 65 20 66  2839-07969 The f
0e70: 6f 75 72 74 68 20 63 6f 6c 75 6d 6e 20 69 73 20  ourth column is 
0e80: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
0e90: 0a 23 20 73 70 65 63 69 66 69 63 20 66 6f 72 65  .# specific fore
0ea0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
0eb0: 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 2e 0a  nt that failed..
0ec0: 23 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d  #.do_test fkey5-
0ed0: 32 2e 30 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  2.0 {.  db eval 
0ee0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
0ef0: 4f 20 63 35 20 53 45 4c 45 43 54 20 78 20 46 52  O c5 SELECT x FR
0f00: 4f 4d 20 63 31 3b 0a 20 20 20 20 44 45 4c 45 54  OM c1;.    DELET
0f10: 45 20 46 52 4f 4d 20 63 31 3b 0a 20 20 20 20 50  E FROM c1;.    P
0f20: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
0f30: 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b  y_check;.  }.} {
0f40: 63 35 20 31 20 70 31 20 30 20 63 35 20 33 20 70  c5 1 p1 0 c5 3 p
0f50: 31 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65  1 0}.do_test fke
0f60: 79 35 2d 32 2e 31 20 7b 0a 20 20 64 62 20 65 76  y5-2.1 {.  db ev
0f70: 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  al {.    PRAGMA 
0f80: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
0f90: 6b 28 63 35 29 3b 0a 20 20 7d 0a 7d 20 7b 63 35  k(c5);.  }.} {c5
0fa0: 20 31 20 70 31 20 30 20 63 35 20 33 20 70 31 20   1 p1 0 c5 3 p1 
0fb0: 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35  0}.do_test fkey5
0fc0: 2d 32 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  -2.2 {.  db eval
0fd0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f   {.    PRAGMA fo
0fe0: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
0ff0: 63 31 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  c1);.  }.} {}.do
1000: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 66 6b  _execsql_test fk
1010: 65 79 35 2d 32 2e 33 20 7b 0a 20 20 50 52 41 47  ey5-2.3 {.  PRAG
1020: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c  MA foreign_key_l
1030: 69 73 74 28 63 35 29 3b 0a 7d 20 7b 30 20 30 20  ist(c5);.} {0 0 
1040: 70 31 20 78 20 7b 7d 20 7b 4e 4f 20 41 43 54 49  p1 x {} {NO ACTI
1050: 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20  ON} {NO ACTION} 
1060: 4e 4f 4e 45 7d 0a 0a 64 6f 5f 74 65 73 74 20 66  NONE}..do_test f
1070: 6b 65 79 35 2d 33 2e 30 20 7b 0a 20 20 64 62 20  key5-3.0 {.  db 
1080: 65 76 61 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  eval {.    INSER
1090: 54 20 49 4e 54 4f 20 63 39 20 53 45 4c 45 43 54  T INTO c9 SELECT
10a0: 20 78 20 46 52 4f 4d 20 63 35 3b 0a 20 20 20 20   x FROM c5;.    
10b0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 35 3b 0a  DELETE FROM c5;.
10c0: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
10d0: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20  gn_key_check;.  
10e0: 7d 0a 7d 20 7b 63 39 20 31 20 70 31 20 30 20 63  }.} {c9 1 p1 0 c
10f0: 39 20 33 20 70 31 20 30 7d 0a 64 6f 5f 74 65 73  9 3 p1 0}.do_tes
1100: 74 20 66 6b 65 79 35 2d 33 2e 31 20 7b 0a 20 20  t fkey5-3.1 {.  
1110: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
1120: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1130: 5f 63 68 65 63 6b 28 63 39 29 3b 0a 20 20 7d 0a  _check(c9);.  }.
1140: 7d 20 7b 63 39 20 31 20 70 31 20 30 20 63 39 20  } {c9 1 p1 0 c9 
1150: 33 20 70 31 20 30 7d 0a 64 6f 5f 74 65 73 74 20  3 p1 0}.do_test 
1160: 66 6b 65 79 35 2d 33 2e 32 20 7b 0a 20 20 64 62  fkey5-3.2 {.  db
1170: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
1180: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1190: 68 65 63 6b 28 63 35 29 3b 0a 20 20 7d 0a 7d 20  heck(c5);.  }.} 
11a0: 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79  {}..do_test fkey
11b0: 35 2d 34 2e 30 20 7b 0a 20 20 64 62 20 65 76 61  5-4.0 {.  db eva
11c0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
11d0: 52 4f 4d 20 63 39 3b 0a 20 20 20 20 49 4e 53 45  ROM c9;.    INSE
11e0: 52 54 20 49 4e 54 4f 20 63 32 20 56 41 4c 55 45  RT INTO c2 VALUE
11f0: 53 28 37 39 29 2c 28 37 37 29 2c 28 37 36 29 3b  S(79),(77),(76);
1200: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
1210: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b 0a 20  ign_key_check;. 
1220: 20 7d 0a 7d 20 7b 63 32 20 37 36 20 70 32 20 30   }.} {c2 76 p2 0
1230: 20 63 32 20 37 39 20 70 32 20 30 7d 0a 64 6f 5f   c2 79 p2 0}.do_
1240: 74 65 73 74 20 66 6b 65 79 35 2d 34 2e 31 20 7b  test fkey5-4.1 {
1250: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1260: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
1270: 6b 65 79 5f 63 68 65 63 6b 28 63 32 29 3b 0a 20  key_check(c2);. 
1280: 20 7d 0a 7d 20 7b 63 32 20 37 36 20 70 32 20 30   }.} {c2 76 p2 0
1290: 20 63 32 20 37 39 20 70 32 20 30 7d 0a 64 6f 5f   c2 79 p2 0}.do_
12a0: 74 65 73 74 20 66 6b 65 79 35 2d 34 2e 32 20 7b  test fkey5-4.2 {
12b0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
12c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 36 20   INSERT INTO c6 
12d0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 32  SELECT x FROM c2
12e0: 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ;.    DELETE FRO
12f0: 4d 20 63 32 3b 0a 20 20 20 20 50 52 41 47 4d 41  M c2;.    PRAGMA
1300: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
1310: 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 36 20 31 20  ck;.  }.} {c6 1 
1320: 70 32 20 30 20 63 36 20 33 20 70 32 20 30 7d 0a  p2 0 c6 3 p2 0}.
1330: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 34 2e  do_test fkey5-4.
1340: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
1350: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
1360: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 36 29  gn_key_check(c6)
1370: 3b 0a 20 20 7d 0a 7d 20 7b 63 36 20 31 20 70 32  ;.  }.} {c6 1 p2
1380: 20 30 20 63 36 20 33 20 70 32 20 30 7d 0a 64 6f   0 c6 3 p2 0}.do
1390: 5f 74 65 73 74 20 66 6b 65 79 35 2d 34 2e 34 20  _test fkey5-4.4 
13a0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
13b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 31    INSERT INTO c1
13c0: 30 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  0 SELECT x FROM 
13d0: 63 36 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  c6;.    DELETE F
13e0: 52 4f 4d 20 63 36 3b 0a 20 20 20 20 50 52 41 47  ROM c6;.    PRAG
13f0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1400: 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 31 30  heck;.  }.} {c10
1410: 20 31 20 70 32 20 30 20 63 31 30 20 33 20 70 32   1 p2 0 c10 3 p2
1420: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79   0}.do_test fkey
1430: 35 2d 34 2e 35 20 7b 0a 20 20 64 62 20 65 76 61  5-4.5 {.  db eva
1440: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  l {.    PRAGMA f
1450: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1460: 28 63 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 63 31  (c10);.  }.} {c1
1470: 30 20 31 20 70 32 20 30 20 63 31 30 20 33 20 70  0 1 p2 0 c10 3 p
1480: 32 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 6b  2 0}..do_test fk
1490: 65 79 35 2d 35 2e 30 20 7b 0a 20 20 64 62 20 65  ey5-5.0 {.  db e
14a0: 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  val {.    DELETE
14b0: 20 46 52 4f 4d 20 63 31 30 3b 0a 20 20 20 20 49   FROM c10;.    I
14c0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 33 20 56 41  NSERT INTO c3 VA
14d0: 4c 55 45 53 28 36 38 29 2c 28 36 37 29 2c 28 36  LUES(68),(67),(6
14e0: 35 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  5);.    PRAGMA f
14f0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1500: 3b 0a 20 20 7d 0a 7d 20 7b 63 33 20 36 35 20 70  ;.  }.} {c3 65 p
1510: 33 20 30 20 63 33 20 36 38 20 70 33 20 30 7d 0a  3 0 c3 68 p3 0}.
1520: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 35 2e  do_test fkey5-5.
1530: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  1 {.  db eval {.
1540: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
1550: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 33 29  gn_key_check(c3)
1560: 3b 0a 20 20 7d 0a 7d 20 7b 63 33 20 36 35 20 70  ;.  }.} {c3 65 p
1570: 33 20 30 20 63 33 20 36 38 20 70 33 20 30 7d 0a  3 0 c3 68 p3 0}.
1580: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 35 2e  do_test fkey5-5.
1590: 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  2 {.  db eval {.
15a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
15b0: 63 37 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  c7 SELECT x FROM
15c0: 20 63 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   c3;.    INSERT 
15d0: 49 4e 54 4f 20 63 37 20 56 41 4c 55 45 53 28 27  INTO c7 VALUES('
15e0: 41 6c 70 68 61 27 29 2c 28 27 61 6c 70 68 61 27  Alpha'),('alpha'
15f0: 29 2c 28 27 66 6f 78 74 72 6f 74 27 29 3b 0a 20  ),('foxtrot');. 
1600: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63     DELETE FROM c
1610: 33 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f  3;.    PRAGMA fo
1620: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 3b  reign_key_check;
1630: 0a 20 20 7d 0a 7d 20 7b 63 37 20 31 20 70 33 20  .  }.} {c7 1 p3 
1640: 30 20 63 37 20 33 20 70 33 20 30 20 63 37 20 34  0 c7 3 p3 0 c7 4
1650: 20 70 33 20 30 20 63 37 20 36 20 70 33 20 30 7d   p3 0 c7 6 p3 0}
1660: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 35  .do_test fkey5-5
1670: 2e 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .3 {.  db eval {
1680: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
1690: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 37  ign_key_check(c7
16a0: 29 3b 0a 20 20 7d 0a 7d 20 7b 63 37 20 31 20 70  );.  }.} {c7 1 p
16b0: 33 20 30 20 63 37 20 33 20 70 33 20 30 20 63 37  3 0 c7 3 p3 0 c7
16c0: 20 34 20 70 33 20 30 20 63 37 20 36 20 70 33 20   4 p3 0 c7 6 p3 
16d0: 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35  0}.do_test fkey5
16e0: 2d 35 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c  -5.4 {.  db eval
16f0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
1700: 54 4f 20 63 31 31 20 53 45 4c 45 43 54 20 78 20  TO c11 SELECT x 
1710: 46 52 4f 4d 20 63 37 3b 0a 20 20 20 20 44 45 4c  FROM c7;.    DEL
1720: 45 54 45 20 46 52 4f 4d 20 63 37 3b 0a 20 20 20  ETE FROM c7;.   
1730: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
1740: 6b 65 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d  key_check;.  }.}
1750: 20 7b 63 31 31 20 31 20 70 33 20 30 20 63 31 31   {c11 1 p3 0 c11
1760: 20 33 20 70 33 20 30 20 63 31 31 20 34 20 70 33   3 p3 0 c11 4 p3
1770: 20 30 20 63 31 31 20 36 20 70 33 20 30 7d 0a 64   0 c11 6 p3 0}.d
1780: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 35 2e 35  o_test fkey5-5.5
1790: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
17a0: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
17b0: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 31 31 29  n_key_check(c11)
17c0: 3b 0a 20 20 7d 0a 7d 20 7b 63 31 31 20 31 20 70  ;.  }.} {c11 1 p
17d0: 33 20 30 20 63 31 31 20 33 20 70 33 20 30 20 63  3 0 c11 3 p3 0 c
17e0: 31 31 20 34 20 70 33 20 30 20 63 31 31 20 36 20  11 4 p3 0 c11 6 
17f0: 70 33 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 66  p3 0}..do_test f
1800: 6b 65 79 35 2d 36 2e 30 20 7b 0a 20 20 64 62 20  key5-6.0 {.  db 
1810: 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  eval {.    DELET
1820: 45 20 46 52 4f 4d 20 63 31 31 3b 0a 20 20 20 20  E FROM c11;.    
1830: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 34 20 56  INSERT INTO c4 V
1840: 41 4c 55 45 53 28 35 34 29 2c 28 35 35 29 2c 28  ALUES(54),(55),(
1850: 35 36 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  56);.    PRAGMA 
1860: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
1870: 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 34 20 35 34 20  k;.  }.} {c4 54 
1880: 70 34 20 30 20 63 34 20 35 36 20 70 34 20 30 7d  p4 0 c4 56 p4 0}
1890: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 36  .do_test fkey5-6
18a0: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
18b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
18c0: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 34  ign_key_check(c4
18d0: 29 3b 0a 20 20 7d 0a 7d 20 7b 63 34 20 35 34 20  );.  }.} {c4 54 
18e0: 70 34 20 30 20 63 34 20 35 36 20 70 34 20 30 7d  p4 0 c4 56 p4 0}
18f0: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 36  .do_test fkey5-6
1900: 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .2 {.  db eval {
1910: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1920: 20 63 38 20 53 45 4c 45 43 54 20 78 20 46 52 4f   c8 SELECT x FRO
1930: 4d 20 63 34 3b 0a 20 20 20 20 49 4e 53 45 52 54  M c4;.    INSERT
1940: 20 49 4e 54 4f 20 63 38 20 56 41 4c 55 45 53 28   INTO c8 VALUES(
1950: 27 41 6c 70 68 61 27 29 2c 28 27 41 4c 50 48 41  'Alpha'),('ALPHA
1960: 27 29 2c 28 27 66 6f 78 74 72 6f 74 27 29 3b 0a  '),('foxtrot');.
1970: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1980: 63 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  c4;.    PRAGMA f
1990: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
19a0: 3b 0a 20 20 7d 0a 7d 20 7b 63 38 20 31 20 70 34  ;.  }.} {c8 1 p4
19b0: 20 30 20 63 38 20 33 20 70 34 20 30 20 63 38 20   0 c8 3 p4 0 c8 
19c0: 36 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73 74 20  6 p4 0}.do_test 
19d0: 66 6b 65 79 35 2d 36 2e 33 20 7b 0a 20 20 64 62  fkey5-6.3 {.  db
19e0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
19f0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1a00: 68 65 63 6b 28 63 38 29 3b 0a 20 20 7d 0a 7d 20  heck(c8);.  }.} 
1a10: 7b 63 38 20 31 20 70 34 20 30 20 63 38 20 33 20  {c8 1 p4 0 c8 3 
1a20: 70 34 20 30 20 63 38 20 36 20 70 34 20 30 7d 0a  p4 0 c8 6 p4 0}.
1a30: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 36 2e  do_test fkey5-6.
1a40: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
1a50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1a60: 63 31 32 20 53 45 4c 45 43 54 20 78 20 46 52 4f  c12 SELECT x FRO
1a70: 4d 20 63 38 3b 0a 20 20 20 20 44 45 4c 45 54 45  M c8;.    DELETE
1a80: 20 46 52 4f 4d 20 63 38 3b 0a 20 20 20 20 50 52   FROM c8;.    PR
1a90: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1aa0: 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 63  _check;.  }.} {c
1ab0: 31 32 20 31 20 70 34 20 30 20 63 31 32 20 33 20  12 1 p4 0 c12 3 
1ac0: 70 34 20 30 20 63 31 32 20 36 20 70 34 20 30 7d  p4 0 c12 6 p4 0}
1ad0: 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 36  .do_test fkey5-6
1ae0: 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .5 {.  db eval {
1af0: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65  .    PRAGMA fore
1b00: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 31  ign_key_check(c1
1b10: 32 29 3b 0a 20 20 7d 0a 7d 20 7b 63 31 32 20 31  2);.  }.} {c12 1
1b20: 20 70 34 20 30 20 63 31 32 20 33 20 70 34 20 30   p4 0 c12 3 p4 0
1b30: 20 63 31 32 20 36 20 70 34 20 30 7d 0a 0a 64 6f   c12 6 p4 0}..do
1b40: 5f 74 65 73 74 20 66 6b 65 79 35 2d 37 2e 31 20  _test fkey5-7.1 
1b50: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
1b60: 20 20 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f    INSERT OR IGNO
1b70: 52 45 20 49 4e 54 4f 20 63 31 33 20 53 45 4c 45  RE INTO c13 SELE
1b80: 43 54 20 2a 20 46 52 4f 4d 20 63 31 32 3b 0a 20  CT * FROM c12;. 
1b90: 20 20 20 49 4e 53 45 52 54 20 4f 52 20 49 47 4e     INSERT OR IGN
1ba0: 4f 52 45 20 49 4e 54 4f 20 43 31 34 20 53 45 4c  ORE INTO C14 SEL
1bb0: 45 43 54 20 2a 20 46 52 4f 4d 20 63 31 32 3b 0a  ECT * FROM c12;.
1bc0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1bd0: 63 31 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  c12;.    PRAGMA 
1be0: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
1bf0: 6b 3b 0a 20 20 7d 0a 7d 20 7b 63 31 34 20 31 20  k;.  }.} {c14 1 
1c00: 70 34 20 30 20 63 31 34 20 33 20 70 34 20 30 20  p4 0 c14 3 p4 0 
1c10: 63 31 34 20 36 20 70 34 20 30 20 63 31 33 20 31  c14 6 p4 0 c13 1
1c20: 20 70 33 20 30 20 63 31 33 20 32 20 70 33 20 30   p3 0 c13 2 p3 0
1c30: 20 63 31 33 20 33 20 70 33 20 30 20 63 31 33 20   c13 3 p3 0 c13 
1c40: 34 20 70 33 20 30 20 63 31 33 20 35 20 70 33 20  4 p3 0 c13 5 p3 
1c50: 30 20 63 31 33 20 36 20 70 33 20 30 7d 0a 64 6f  0 c13 6 p3 0}.do
1c60: 5f 74 65 73 74 20 66 6b 65 79 35 2d 37 2e 32 20  _test fkey5-7.2 
1c70: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
1c80: 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e    PRAGMA foreign
1c90: 5f 6b 65 79 5f 63 68 65 63 6b 28 63 31 34 29 3b  _key_check(c14);
1ca0: 0a 20 20 7d 0a 7d 20 7b 63 31 34 20 31 20 70 34  .  }.} {c14 1 p4
1cb0: 20 30 20 63 31 34 20 33 20 70 34 20 30 20 63 31   0 c14 3 p4 0 c1
1cc0: 34 20 36 20 70 34 20 30 7d 0a 64 6f 5f 74 65 73  4 6 p4 0}.do_tes
1cd0: 74 20 66 6b 65 79 35 2d 37 2e 33 20 7b 0a 20 20  t fkey5-7.3 {.  
1ce0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
1cf0: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1d00: 5f 63 68 65 63 6b 28 63 31 33 29 3b 0a 20 20 7d  _check(c13);.  }
1d10: 0a 7d 20 7b 63 31 33 20 31 20 70 33 20 30 20 63  .} {c13 1 p3 0 c
1d20: 31 33 20 32 20 70 33 20 30 20 63 31 33 20 33 20  13 2 p3 0 c13 3 
1d30: 70 33 20 30 20 63 31 33 20 34 20 70 33 20 30 20  p3 0 c13 4 p3 0 
1d40: 63 31 33 20 35 20 70 33 20 30 20 63 31 33 20 36  c13 5 p3 0 c13 6
1d50: 20 70 33 20 30 7d 0a 0a 64 6f 5f 74 65 73 74 20   p3 0}..do_test 
1d60: 66 6b 65 79 35 2d 38 2e 30 20 7b 0a 20 20 64 62  fkey5-8.0 {.  db
1d70: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45   eval {.    DELE
1d80: 54 45 20 46 52 4f 4d 20 63 31 33 3b 0a 20 20 20  TE FROM c13;.   
1d90: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 31 34   DELETE FROM c14
1da0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1db0: 4f 20 63 31 39 20 56 41 4c 55 45 53 28 27 61 6c  O c19 VALUES('al
1dc0: 70 68 61 27 2c 27 61 62 63 27 29 3b 0a 20 20 20  pha','abc');.   
1dd0: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
1de0: 6b 65 79 5f 63 68 65 63 6b 28 63 31 39 29 3b 0a  key_check(c19);.
1df0: 20 20 7d 0a 7d 20 7b 63 31 39 20 31 20 70 35 20    }.} {c19 1 p5 
1e00: 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35  0}.do_test fkey5
1e10: 2d 38 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  -8.1 {.  db eval
1e20: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
1e30: 4f 4d 20 63 31 39 3b 0a 20 20 20 20 49 4e 53 45  OM c19;.    INSE
1e40: 52 54 20 49 4e 54 4f 20 63 31 39 20 56 41 4c 55  RT INTO c19 VALU
1e50: 45 53 28 27 41 6c 70 68 61 27 2c 27 61 62 63 27  ES('Alpha','abc'
1e60: 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f  );.    PRAGMA fo
1e70: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
1e80: 63 31 39 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  c19);.  }.} {}.d
1e90: 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 38 2e 32  o_test fkey5-8.2
1ea0: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
1eb0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
1ec0: 32 30 20 56 41 4c 55 45 53 28 27 41 6c 70 68 61  20 VALUES('Alpha
1ed0: 27 2c 27 61 62 63 27 29 3b 0a 20 20 20 20 50 52  ','abc');.    PR
1ee0: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1ef0: 5f 63 68 65 63 6b 28 63 32 30 29 3b 0a 20 20 7d  _check(c20);.  }
1f00: 0a 7d 20 7b 63 32 30 20 31 20 70 35 20 30 7d 0a  .} {c20 1 p5 0}.
1f10: 64 6f 5f 74 65 73 74 20 66 6b 65 79 35 2d 38 2e  do_test fkey5-8.
1f20: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
1f30: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1f40: 63 32 30 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  c20;.    INSERT 
1f50: 49 4e 54 4f 20 63 32 30 20 56 41 4c 55 45 53 28  INTO c20 VALUES(
1f60: 27 61 62 63 27 2c 27 41 6c 70 68 61 27 29 3b 0a  'abc','Alpha');.
1f70: 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69      PRAGMA forei
1f80: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 63 32 30  gn_key_check(c20
1f90: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
1fa0: 65 73 74 20 66 6b 65 79 35 2d 38 2e 34 20 7b 0a  est fkey5-8.4 {.
1fb0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
1fc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 32 31 20  INSERT INTO c21 
1fd0: 56 41 4c 55 45 53 28 27 61 6c 70 68 61 27 2c 27  VALUES('alpha','
1fe0: 61 62 63 20 20 20 20 27 29 3b 0a 20 20 20 20 50  abc    ');.    P
1ff0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2000: 79 5f 63 68 65 63 6b 28 63 32 31 29 3b 0a 20 20  y_check(c21);.  
2010: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66  }.} {}.do_test f
2020: 6b 65 79 35 2d 38 2e 35 20 7b 0a 20 20 64 62 20  key5-8.5 {.  db 
2030: 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  eval {.    DELET
2040: 45 20 46 52 4f 4d 20 63 32 31 3b 0a 20 20 20 20  E FROM c21;.    
2050: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 31 39 20  INSERT INTO c19 
2060: 56 41 4c 55 45 53 28 27 41 6c 70 68 61 27 2c 27  VALUES('Alpha','
2070: 61 62 63 27 29 3b 0a 20 20 20 20 50 52 41 47 4d  abc');.    PRAGM
2080: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
2090: 65 63 6b 28 63 32 31 29 3b 0a 20 20 7d 0a 7d 20  eck(c21);.  }.} 
20a0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79 35  {}.do_test fkey5
20b0: 2d 38 2e 36 20 7b 0a 20 20 64 62 20 65 76 61 6c  -8.6 {.  db eval
20c0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
20d0: 54 4f 20 63 32 32 20 56 41 4c 55 45 53 28 27 41  TO c22 VALUES('A
20e0: 6c 70 68 61 27 2c 27 61 62 63 27 29 3b 0a 20 20  lpha','abc');.  
20f0: 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e    PRAGMA foreign
2100: 5f 6b 65 79 5f 63 68 65 63 6b 28 63 32 32 29 3b  _key_check(c22);
2110: 0a 20 20 7d 0a 7d 20 7b 63 32 32 20 31 20 70 36  .  }.} {c22 1 p6
2120: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 66 6b 65 79   0}.do_test fkey
2130: 35 2d 38 2e 37 20 7b 0a 20 20 64 62 20 65 76 61  5-8.7 {.  db eva
2140: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
2150: 52 4f 4d 20 63 32 32 3b 0a 20 20 20 20 49 4e 53  ROM c22;.    INS
2160: 45 52 54 20 49 4e 54 4f 20 63 32 32 20 56 41 4c  ERT INTO c22 VAL
2170: 55 45 53 28 27 61 62 63 20 20 27 2c 27 41 4c 50  UES('abc  ','ALP
2180: 48 41 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41  HA');.    PRAGMA
2190: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
21a0: 63 6b 28 63 32 32 29 3b 0a 20 20 7d 0a 7d 20 7b  ck(c22);.  }.} {
21b0: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
21c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
2200: 20 54 65 73 74 73 20 39 2e 2a 20 76 65 72 69 66   Tests 9.* verif
2210: 79 20 74 68 61 74 20 6d 69 73 73 69 6e 67 20 70  y that missing p
2220: 61 72 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65  arent tables are
2230: 20 68 61 6e 64 6c 65 64 20 63 6f 72 72 65 63 74   handled correct
2240: 6c 79 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ly..#.do_execsql
2250: 5f 74 65 73 74 20 39 2e 31 2e 31 20 7b 0a 20 20  _test 9.1.1 {.  
2260: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6b 31 28  CREATE TABLE k1(
2270: 78 20 52 45 46 45 52 45 4e 43 45 53 20 73 31 29  x REFERENCES s1)
2280: 3b 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69  ;.  PRAGMA forei
2290: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 6b 31 29  gn_key_check(k1)
22a0: 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  ;.} {}.do_execsq
22b0: 6c 5f 74 65 73 74 20 39 2e 31 2e 32 20 7b 0a 20  l_test 9.1.2 {. 
22c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6b 31 20   INSERT INTO k1 
22d0: 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20  VALUES(NULL);.  
22e0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
22f0: 65 79 5f 63 68 65 63 6b 28 6b 31 29 3b 0a 7d 20  ey_check(k1);.} 
2300: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
2310: 73 74 20 39 2e 31 2e 33 20 7b 0a 20 20 49 4e 53  st 9.1.3 {.  INS
2320: 45 52 54 20 49 4e 54 4f 20 6b 31 20 56 41 4c 55  ERT INTO k1 VALU
2330: 45 53 28 31 29 3b 0a 20 20 50 52 41 47 4d 41 20  ES(1);.  PRAGMA 
2340: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
2350: 6b 28 6b 31 29 3b 0a 7d 20 7b 6b 31 20 32 20 73  k(k1);.} {k1 2 s
2360: 31 20 30 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  1 0}..do_execsql
2370: 5f 74 65 73 74 20 39 2e 32 2e 31 20 7b 0a 20 20  _test 9.2.1 {.  
2380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6b 32 28  CREATE TABLE k2(
2390: 78 2c 20 79 2c 20 46 4f 52 45 49 47 4e 20 4b 45  x, y, FOREIGN KE
23a0: 59 28 78 2c 20 79 29 20 52 45 46 45 52 45 4e 43  Y(x, y) REFERENC
23b0: 45 53 20 73 31 28 61 2c 20 62 29 29 3b 0a 20 20  ES s1(a, b));.  
23c0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
23d0: 65 79 5f 63 68 65 63 6b 28 6b 32 29 3b 0a 7d 20  ey_check(k2);.} 
23e0: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
23f0: 73 74 20 39 2e 32 20 7b 0a 20 20 49 4e 53 45 52  st 9.2 {.  INSER
2400: 54 20 49 4e 54 4f 20 6b 32 20 56 41 4c 55 45 53  T INTO k2 VALUES
2410: 28 4e 55 4c 4c 2c 20 27 66 69 76 65 27 29 3b 0a  (NULL, 'five');.
2420: 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e    PRAGMA foreign
2430: 5f 6b 65 79 5f 63 68 65 63 6b 28 6b 32 29 3b 0a  _key_check(k2);.
2440: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
2450: 74 65 73 74 20 39 2e 33 20 7b 0a 20 20 49 4e 53  test 9.3 {.  INS
2460: 45 52 54 20 49 4e 54 4f 20 6b 32 20 56 41 4c 55  ERT INTO k2 VALU
2470: 45 53 28 27 6f 6e 65 27 2c 20 4e 55 4c 4c 29 3b  ES('one', NULL);
2480: 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67  .  PRAGMA foreig
2490: 6e 5f 6b 65 79 5f 63 68 65 63 6b 28 6b 32 29 3b  n_key_check(k2);
24a0: 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  .} {}.do_execsql
24b0: 5f 74 65 73 74 20 39 2e 34 20 7b 0a 20 20 49 4e  _test 9.4 {.  IN
24c0: 53 45 52 54 20 49 4e 54 4f 20 6b 32 20 56 41 4c  SERT INTO k2 VAL
24d0: 55 45 53 28 27 73 69 78 27 2c 20 27 73 65 76 65  UES('six', 'seve
24e0: 6e 27 29 3b 0a 20 20 50 52 41 47 4d 41 20 66 6f  n');.  PRAGMA fo
24f0: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
2500: 6b 32 29 3b 0a 7d 20 7b 6b 32 20 33 20 73 31 20  k2);.} {k2 3 s1 
2510: 30 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  0}...finish_test
2520: 0a                                               .