/ Hex Artifact Content
Login

Artifact 2724c787a51a5dce09d078453a758117b4b728f1:


0000: 23 20 32 30 31 33 2d 31 31 2d 30 32 0a 23 0a 23  # 2013-11-02.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 23  QLite library..#
01a0: 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d 70  .# This file imp
01b0: 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20 66 6f  lements tests fo
01c0: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 6f  r foreign keys o
01d0: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  n WITHOUT ROWID.
01e0: 23 20 74 61 62 6c 65 73 2e 0a 23 0a 0a 73 65 74  # tables..#..set
01f0: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0200: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0210: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0220: 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63 61 70  ester.tcl..ifcap
0230: 61 62 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65  able {!foreignke
0240: 79 7c 7c 21 74 72 69 67 67 65 72 7d 20 7b 0a 20  y||!trigger} {. 
0250: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72   finish_test.  r
0260: 65 74 75 72 6e 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  eturn.}..#------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02b0: 2d 2d 2d 0a 23 20 54 65 73 74 20 73 74 72 75 63  ---.# Test struc
02c0: 74 75 72 65 3a 0a 23 0a 23 20 77 69 74 68 6f 75  ture:.#.# withou
02d0: 74 5f 72 6f 77 69 64 33 2d 31 2e 2a 3a 20 53 69  t_rowid3-1.*: Si
02e0: 6d 70 6c 65 20 74 65 73 74 73 20 74 6f 20 63 68  mple tests to ch
02f0: 65 63 6b 20 74 68 61 74 20 69 6d 6d 65 64 69 61  eck that immedia
0300: 74 65 20 61 6e 64 20 64 65 66 65 72 72 65 64 20  te and deferred 
0310: 66 6f 72 65 69 67 6e 20 6b 65 79 20 0a 23 20 20  foreign key .#  
0320: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72            constr
0330: 61 69 6e 74 73 20 77 6f 72 6b 20 77 68 65 6e 20  aints work when 
0340: 6e 6f 74 20 69 6e 73 69 64 65 20 61 20 74 72 61  not inside a tra
0350: 6e 73 61 63 74 69 6f 6e 2e 0a 23 20 20 20 20 20  nsaction..#     
0360: 20 20 20 20 20 20 20 0a 23 20 77 69 74 68 6f 75         .# withou
0370: 74 5f 72 6f 77 69 64 33 2d 32 2e 2a 3a 20 54 65  t_rowid3-2.*: Te
0380: 73 74 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  sts to verify th
0390: 61 74 20 64 65 66 65 72 72 65 64 20 66 6f 72 65  at deferred fore
03a0: 69 67 6e 20 6b 65 79 73 20 77 6f 72 6b 20 69 6e  ign keys work in
03b0: 73 69 64 65 0a 23 20 20 20 20 20 20 20 20 20 20  side.#          
03c0: 20 20 65 78 70 6c 69 63 69 74 20 74 72 61 6e 73    explicit trans
03d0: 61 63 74 69 6f 6e 73 20 28 69 2e 65 20 74 68 61  actions (i.e tha
03e0: 74 20 70 72 6f 63 65 73 73 69 6e 67 20 72 65 61  t processing rea
03f0: 6c 6c 79 20 69 73 20 64 65 66 65 72 72 65 64 29  lly is deferred)
0400: 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f 72 6f  ..#.# without_ro
0410: 77 69 64 33 2d 33 2e 2a 3a 20 54 65 73 74 73 20  wid3-3.*: Tests 
0420: 74 68 61 74 20 61 20 73 74 61 74 65 6d 65 6e 74  that a statement
0430: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
0440: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61  rolled back if a
0450: 6e 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 69  n.#            i
0460: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
0470: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
0480: 69 73 20 76 69 6f 6c 61 74 65 64 2e 0a 23 0a 23  is violated..#.#
0490: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
04a0: 34 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 46  4.*: Test that F
04b0: 4b 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 72 65  K actions may re
04c0: 63 75 72 73 65 20 65 76 65 6e 20 77 68 65 6e 20  curse even when 
04d0: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
04e0: 72 73 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  rs.#            
04f0: 61 72 65 20 64 69 73 61 62 6c 65 64 2e 0a 23 0a  are disabled..#.
0500: 23 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  # without_rowid3
0510: 2d 35 2e 2a 3a 20 43 68 65 63 6b 20 74 68 61 74  -5.*: Check that
0520: 20 69 66 20 66 6f 72 65 69 67 6e 2d 6b 65 79 73   if foreign-keys
0530: 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20 69 74   are enabled, it
0540: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
0550: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 74 6f  .#            to
0560: 20 77 72 69 74 65 20 74 6f 20 61 6e 20 46 4b 20   write to an FK 
0570: 63 6f 6c 75 6d 6e 20 75 73 69 6e 67 20 74 68 65  column using the
0580: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
0590: 62 20 41 50 49 2e 0a 23 0a 23 20 77 69 74 68 6f  b API..#.# witho
05a0: 75 74 5f 72 6f 77 69 64 33 2d 36 2e 2a 3a 20 54  ut_rowid3-6.*: T
05b0: 65 73 74 20 74 68 61 74 20 46 4b 20 70 72 6f 63  est that FK proc
05c0: 65 73 73 69 6e 67 20 69 73 20 61 75 74 6f 6d 61  essing is automa
05d0: 74 69 63 61 6c 6c 79 20 64 69 73 61 62 6c 65 64  tically disabled
05e0: 20 77 68 65 6e 20 0a 23 20 20 20 20 20 20 20 20   when .#        
05f0: 20 20 20 20 72 75 6e 6e 69 6e 67 20 56 41 43 55      running VACU
0600: 55 4d 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f  UM..#.# without_
0610: 72 6f 77 69 64 33 2d 37 2e 2a 3a 20 54 65 73 74  rowid3-7.*: Test
0620: 20 75 73 69 6e 67 20 61 6e 20 49 50 4b 20 61 73   using an IPK as
0630: 20 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20   the key in the 
0640: 63 68 69 6c 64 20 28 72 65 66 65 72 65 6e 63 69  child (referenci
0650: 6e 67 29 20 74 61 62 6c 65 2e 0a 23 0a 23 20 77  ng) table..#.# w
0660: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 38 2e  ithout_rowid3-8.
0670: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 65 6e 61  *: Test that ena
0680: 62 6c 69 6e 67 2f 64 69 73 61 62 6c 69 6e 67 20  bling/disabling 
0690: 66 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70  foreign key supp
06a0: 6f 72 74 20 77 68 69 6c 65 20 61 20 0a 23 20 20  ort while a .#  
06b0: 20 20 20 20 20 20 20 20 20 20 74 72 61 6e 73 61            transa
06c0: 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 20  ction is active 
06d0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e  is not possible.
06e0: 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f 72 6f 77  .#.# without_row
06f0: 69 64 33 2d 39 2e 2a 3a 20 54 65 73 74 20 53 45  id3-9.*: Test SE
0700: 54 20 44 45 46 41 55 4c 54 20 61 63 74 69 6f 6e  T DEFAULT action
0710: 73 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f 72  s..#.# without_r
0720: 6f 77 69 64 33 2d 31 30 2e 2a 3a 20 54 65 73 74  owid3-10.*: Test
0730: 20 65 72 72 6f 72 73 2e 0a 23 0a 23 20 77 69 74   errors..#.# wit
0740: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 31 2e 2a  hout_rowid3-11.*
0750: 3a 20 54 65 73 74 20 43 41 53 43 41 44 45 20 61  : Test CASCADE a
0760: 63 74 69 6f 6e 73 2e 0a 23 0a 23 20 77 69 74 68  ctions..#.# with
0770: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32 2e 2a 3a  out_rowid3-12.*:
0780: 20 54 65 73 74 20 52 45 53 54 52 49 43 54 20 61   Test RESTRICT a
0790: 63 74 69 6f 6e 73 2e 0a 23 0a 23 20 77 69 74 68  ctions..#.# with
07a0: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 33 2e 2a 3a  out_rowid3-13.*:
07b0: 20 54 65 73 74 20 74 68 61 74 20 46 4b 20 70 72   Test that FK pr
07c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66  ocessing is perf
07d0: 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 72 6f 77  ormed when a row
07e0: 20 69 73 20 52 45 50 4c 41 43 45 44 20 62 79 0a   is REPLACED by.
07f0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e  #             an
0800: 20 55 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52   UPDATE or INSER
0810: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23  T statement..#.#
0820: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
0830: 31 34 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 41  14.*: Test the A
0840: 4c 54 45 52 20 54 41 42 4c 45 20 61 6e 64 20 44  LTER TABLE and D
0850: 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ROP TABLE comman
0860: 64 73 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f  ds..#.# without_
0870: 72 6f 77 69 64 33 2d 31 35 2e 2a 3a 20 54 65 73  rowid3-15.*: Tes
0880: 74 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  t that if there 
0890: 61 72 65 20 6e 6f 20 28 6b 6e 6f 77 6e 29 20 6f  are no (known) o
08a0: 75 74 73 74 61 6e 64 69 6e 67 20 66 6f 72 65 69  utstanding forei
08b0: 67 6e 20 6b 65 79 20 0a 23 20 20 20 20 20 20 20  gn key .#       
08c0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
08d0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 69 6e 20 74   violations in t
08e0: 68 65 20 64 61 74 61 62 61 73 65 2c 20 69 6e 73  he database, ins
08f0: 65 72 74 69 6e 67 20 69 6e 74 6f 20 61 20 70 61  erting into a pa
0900: 72 65 6e 74 0a 23 20 20 20 20 20 20 20 20 20 20  rent.#          
0910: 20 20 20 74 61 62 6c 65 20 6f 72 20 64 65 6c 65     table or dele
0920: 74 69 6e 67 20 66 72 6f 6d 20 61 20 63 68 69 6c  ting from a chil
0930: 64 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  d table does not
0940: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 23 20   cause SQLite.# 
0950: 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 20 63              to c
0960: 68 65 63 6b 20 69 66 20 74 68 69 73 20 68 61 73  heck if this has
0970: 20 72 65 70 61 69 72 65 64 20 61 6e 20 6f 75 74   repaired an out
0980: 73 74 61 6e 64 69 6e 67 20 76 69 6f 6c 61 74 69  standing violati
0990: 6f 6e 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f  on..#.# without_
09a0: 72 6f 77 69 64 33 2d 31 36 2e 2a 3a 20 54 65 73  rowid3-16.*: Tes
09b0: 74 20 74 68 61 74 20 72 6f 77 73 20 74 68 61 74  t that rows that
09c0: 20 72 65 66 65 72 20 74 6f 20 74 68 65 6d 73 65   refer to themse
09d0: 6c 76 65 73 20 6d 61 79 20 62 65 20 69 6e 73 65  lves may be inse
09e0: 72 74 65 64 2c 20 0a 23 20 20 20 20 20 20 20 20  rted, .#        
09f0: 20 20 20 20 20 75 70 64 61 74 65 64 20 61 6e 64       updated and
0a00: 20 64 65 6c 65 74 65 64 2e 0a 23 0a 23 20 77 69   deleted..#.# wi
0a10: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e  thout_rowid3-17.
0a20: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 74 68 65  *: Test that the
0a30: 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22   "count_changes"
0a40: 20 70 72 61 67 6d 61 20 64 6f 65 73 20 6e 6f 74   pragma does not
0a50: 20 69 6e 74 65 72 66 65 72 65 20 77 69 74 68 0a   interfere with.
0a60: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 46 4b  #             FK
0a70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 70 72 6f 63   constraint proc
0a80: 65 73 73 69 6e 67 2e 0a 23 20 0a 23 20 77 69 74  essing..# .# wit
0a90: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 38 2e 2a  hout_rowid3-18.*
0aa0: 3a 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20  : Test that the 
0ab0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
0ac0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b 65  llback is invoke
0ad0: 64 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  d when processin
0ae0: 67 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  g.#             
0af0: 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a  FK constraints..
0b00: 23 0a 23 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  #.# without_rowi
0b10: 64 33 2d 32 30 2e 2a 3a 20 54 65 73 74 20 74 68  d3-20.*: Test th
0b20: 61 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  at ON CONFLICT c
0b30: 6c 61 75 73 65 73 20 73 70 65 63 69 66 69 65 64  lauses specified
0b40: 20 61 73 20 70 61 72 74 20 6f 66 20 73 74 61 74   as part of stat
0b50: 65 6d 65 6e 74 73 0a 23 20 20 20 20 20 20 20 20  ements.#        
0b60: 20 20 20 20 20 64 6f 20 6e 6f 74 20 61 66 66 65       do not affe
0b70: 63 74 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ct the operation
0b80: 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
0b90: 74 73 2e 0a 23 0a 23 20 77 69 74 68 6f 75 74 5f  ts..#.# without_
0ba0: 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65 79 2e 2a  rowid3-genfkey.*
0bb0: 3a 20 54 65 73 74 73 20 74 68 61 74 20 77 65 72  : Tests that wer
0bc0: 65 20 75 73 65 64 20 77 69 74 68 20 74 68 65 20  e used with the 
0bd0: 73 68 65 6c 6c 20 74 6f 6f 6c 20 2e 67 65 6e 66  shell tool .genf
0be0: 6b 65 79 0a 23 20 20 20 20 20 20 20 20 20 20 20  key.#           
0bf0: 20 63 6f 6d 6d 61 6e 64 2e 20 52 65 63 79 63 6c   command. Recycl
0c00: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 62  ed to test the b
0c10: 75 69 6c 74 2d 69 6e 20 69 6d 70 6c 65 6d 65 6e  uilt-in implemen
0c20: 74 61 74 69 6f 6e 2e 0a 23 0a 23 20 77 69 74 68  tation..#.# with
0c30: 6f 75 74 5f 72 6f 77 69 64 33 2d 64 64 30 38 65  out_rowid3-dd08e
0c40: 35 2e 2a 3a 20 20 54 65 73 74 73 20 74 6f 20 76  5.*:  Tests to v
0c50: 65 72 69 66 79 20 74 68 61 74 20 74 69 63 6b 65  erify that ticke
0c60: 74 20 64 64 30 38 65 35 61 39 38 38 64 30 30 64  t dd08e5a988d00d
0c70: 65 63 63 34 61 35 34 33 64 61 61 38 64 0a 23 20  ecc4a543daa8d.# 
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64 2e   has been fixed.
0ca0: 0a 23 0a 0a 0a 65 78 65 63 73 71 6c 20 7b 20 50  .#...execsql { P
0cb0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
0cc0: 79 73 20 3d 20 6f 6e 20 7d 0a 0a 73 65 74 20 46  ys = on }..set F
0cd0: 6b 65 79 53 69 6d 70 6c 65 53 63 68 65 6d 61 20  keySimpleSchema 
0ce0: 7b 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69  {.  PRAGMA forei
0cf0: 67 6e 5f 6b 65 79 73 20 3d 20 6f 6e 3b 0a 20 20  gn_keys = on;.  
0d00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0d10: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
0d20: 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b  ) WITHOUT rowid;
0d30: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0d40: 74 32 28 63 20 52 45 46 45 52 45 4e 43 45 53 20  t2(c REFERENCES 
0d50: 74 31 28 61 29 20 2f 44 2f 20 2c 20 64 29 3b 0a  t1(a) /D/ , d);.
0d60: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0d70: 74 33 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t3(a PRIMARY KEY
0d80: 2c 20 62 29 20 57 49 54 48 4f 55 54 20 72 6f 77  , b) WITHOUT row
0d90: 69 64 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  id;.  CREATE TAB
0da0: 4c 45 20 74 34 28 63 20 52 45 46 45 52 45 4e 43  LE t4(c REFERENC
0db0: 45 53 20 74 33 20 2f 44 2f 2c 20 64 29 3b 0a 0a  ES t3 /D/, d);..
0dc0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0dd0: 37 28 61 2c 20 62 20 49 4e 54 20 50 52 49 4d 41  7(a, b INT PRIMA
0de0: 52 59 20 4b 45 59 29 20 57 49 54 48 4f 55 54 20  RY KEY) WITHOUT 
0df0: 72 6f 77 69 64 3b 0a 20 20 43 52 45 41 54 45 20  rowid;.  CREATE 
0e00: 54 41 42 4c 45 20 74 38 28 63 20 52 45 46 45 52  TABLE t8(c REFER
0e10: 45 4e 43 45 53 20 74 37 20 2f 44 2f 2c 20 64 29  ENCES t7 /D/, d)
0e20: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  ;..  CREATE TABL
0e30: 45 20 74 39 28 61 20 52 45 46 45 52 45 4e 43 45  E t9(a REFERENCE
0e40: 53 20 6e 6f 73 75 63 68 74 61 62 6c 65 2c 20 62  S nosuchtable, b
0e50: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
0e60: 45 20 74 31 30 28 61 20 52 45 46 45 52 45 4e 43  E t10(a REFERENC
0e70: 45 53 20 74 39 28 63 29 20 2f 44 2f 2c 20 62 29  ES t9(c) /D/, b)
0e80: 3b 0a 7d 0a 0a 0a 73 65 74 20 46 6b 65 79 53 69  ;.}...set FkeySi
0e90: 6d 70 6c 65 54 65 73 74 73 20 7b 0a 20 20 31 2e  mpleTests {.  1.
0ea0: 31 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  1  "INSERT INTO 
0eb0: 74 32 20 56 41 4c 55 45 53 28 31 2c 20 33 29 22  t2 VALUES(1, 3)"
0ec0: 20 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47        {1 {FOREIG
0ed0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
0ee0: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 31 2e 32 20   failed}}.  1.2 
0ef0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
0f00: 20 56 41 4c 55 45 53 28 31 2c 20 32 29 22 20 20   VALUES(1, 2)"  
0f10: 20 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e 33      {0 {}}.  1.3
0f20: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
0f30: 32 20 56 41 4c 55 45 53 28 31 2c 20 33 29 22 20  2 VALUES(1, 3)" 
0f40: 20 20 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e       {0 {}}.  1.
0f50: 34 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  4  "INSERT INTO 
0f60: 74 32 20 56 41 4c 55 45 53 28 32 2c 20 34 29 22  t2 VALUES(2, 4)"
0f70: 20 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47        {1 {FOREIG
0f80: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
0f90: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 31 2e 35 20   failed}}.  1.5 
0fa0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
0fb0: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 34 29   VALUES(NULL, 4)
0fc0: 22 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e 36  "   {0 {}}.  1.6
0fd0: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
0fe0: 20 63 3d 32 20 57 48 45 52 45 20 64 3d 34 22 20   c=2 WHERE d=4" 
0ff0: 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e       {1 {FOREIGN
1000: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
1010: 66 61 69 6c 65 64 7d 7d 0a 20 20 31 2e 37 20 20  failed}}.  1.7  
1020: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 63  "UPDATE t2 SET c
1030: 3d 31 20 57 48 45 52 45 20 64 3d 34 22 20 20 20  =1 WHERE d=4"   
1040: 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e 39 20     {0 {}}.  1.9 
1050: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
1060: 63 3d 31 20 57 48 45 52 45 20 64 3d 34 22 20 20  c=1 WHERE d=4"  
1070: 20 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e 31      {0 {}}.  1.1
1080: 30 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54  0 "UPDATE t2 SET
1090: 20 63 3d 4e 55 4c 4c 20 57 48 45 52 45 20 64 3d   c=NULL WHERE d=
10a0: 34 22 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 31 2e  4"   {0 {}}.  1.
10b0: 31 31 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  11 "DELETE FROM 
10c0: 74 31 20 57 48 45 52 45 20 61 3d 31 22 20 20 20  t1 WHERE a=1"   
10d0: 20 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47        {1 {FOREIG
10e0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
10f0: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 31 2e 31 32   failed}}.  1.12
1100: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
1110: 61 20 3d 20 32 22 20 20 20 20 20 20 20 20 20 20  a = 2"          
1120: 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20      {1 {FOREIGN 
1130: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
1140: 61 69 6c 65 64 7d 7d 0a 20 20 31 2e 31 33 20 22  ailed}}.  1.13 "
1150: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
1160: 3d 20 31 22 20 20 20 20 20 20 20 20 20 20 20 20  = 1"            
1170: 20 20 7b 30 20 7b 7d 7d 0a 0a 20 20 32 2e 31 20    {0 {}}..  2.1 
1180: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34   "INSERT INTO t4
1190: 20 56 41 4c 55 45 53 28 31 2c 20 33 29 22 20 20   VALUES(1, 3)"  
11a0: 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20      {1 {FOREIGN 
11b0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
11c0: 61 69 6c 65 64 7d 7d 0a 20 20 32 2e 32 20 20 22  ailed}}.  2.2  "
11d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
11e0: 41 4c 55 45 53 28 31 2c 20 32 29 22 20 20 20 20  ALUES(1, 2)"    
11f0: 20 20 7b 30 20 7b 7d 7d 0a 20 20 32 2e 33 20 20    {0 {}}.  2.3  
1200: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  "INSERT INTO t4 
1210: 56 41 4c 55 45 53 28 31 2c 20 33 29 22 20 20 20  VALUES(1, 3)"   
1220: 20 20 20 7b 30 20 7b 7d 7d 0a 0a 20 20 34 2e 31     {0 {}}..  4.1
1230: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
1240: 38 20 56 41 4c 55 45 53 28 31 2c 20 33 29 22 20  8 VALUES(1, 3)" 
1250: 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e       {1 {FOREIGN
1260: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
1270: 66 61 69 6c 65 64 7d 7d 0a 20 20 34 2e 32 20 20  failed}}.  4.2  
1280: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20  "INSERT INTO t7 
1290: 56 41 4c 55 45 53 28 32 2c 20 31 29 22 20 20 20  VALUES(2, 1)"   
12a0: 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 33 20     {0 {}}.  4.3 
12b0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38   "INSERT INTO t8
12c0: 20 56 41 4c 55 45 53 28 31 2c 20 33 29 22 20 20   VALUES(1, 3)"  
12d0: 20 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 34      {0 {}}.  4.4
12e0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
12f0: 38 20 56 41 4c 55 45 53 28 32 2c 20 34 29 22 20  8 VALUES(2, 4)" 
1300: 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e       {1 {FOREIGN
1310: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
1320: 66 61 69 6c 65 64 7d 7d 0a 20 20 34 2e 35 20 20  failed}}.  4.5  
1330: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20  "INSERT INTO t8 
1340: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 34 29 22  VALUES(NULL, 4)"
1350: 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 36 20     {0 {}}.  4.6 
1360: 20 22 55 50 44 41 54 45 20 74 38 20 53 45 54 20   "UPDATE t8 SET 
1370: 63 3d 32 20 57 48 45 52 45 20 64 3d 34 22 20 20  c=2 WHERE d=4"  
1380: 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20      {1 {FOREIGN 
1390: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
13a0: 61 69 6c 65 64 7d 7d 0a 20 20 34 2e 37 20 20 22  ailed}}.  4.7  "
13b0: 55 50 44 41 54 45 20 74 38 20 53 45 54 20 63 3d  UPDATE t8 SET c=
13c0: 31 20 57 48 45 52 45 20 64 3d 34 22 20 20 20 20  1 WHERE d=4"    
13d0: 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 39 20 20    {0 {}}.  4.9  
13e0: 22 55 50 44 41 54 45 20 74 38 20 53 45 54 20 63  "UPDATE t8 SET c
13f0: 3d 31 20 57 48 45 52 45 20 64 3d 34 22 20 20 20  =1 WHERE d=4"   
1400: 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 31 30     {0 {}}.  4.10
1410: 20 22 55 50 44 41 54 45 20 74 38 20 53 45 54 20   "UPDATE t8 SET 
1420: 63 3d 4e 55 4c 4c 20 57 48 45 52 45 20 64 3d 34  c=NULL WHERE d=4
1430: 22 20 20 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 31  "   {0 {}}.  4.1
1440: 31 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  1 "DELETE FROM t
1450: 37 20 57 48 45 52 45 20 62 3d 31 22 20 20 20 20  7 WHERE b=1"    
1460: 20 20 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e       {1 {FOREIGN
1470: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
1480: 66 61 69 6c 65 64 7d 7d 0a 20 20 34 2e 31 32 20  failed}}.  4.12 
1490: 22 55 50 44 41 54 45 20 74 37 20 53 45 54 20 62  "UPDATE t7 SET b
14a0: 20 3d 20 32 22 20 20 20 20 20 20 20 20 20 20 20   = 2"           
14b0: 20 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b     {1 {FOREIGN K
14c0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
14d0: 69 6c 65 64 7d 7d 0a 20 20 34 2e 31 33 20 22 55  iled}}.  4.13 "U
14e0: 50 44 41 54 45 20 74 37 20 53 45 54 20 62 20 3d  PDATE t7 SET b =
14f0: 20 31 22 20 20 20 20 20 20 20 20 20 20 20 20 20   1"             
1500: 20 7b 30 20 7b 7d 7d 0a 20 20 34 2e 31 34 20 22   {0 {}}.  4.14 "
1510: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
1520: 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 29 22  ALUES('a', 'b')"
1530: 20 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45    {1 {FOREIGN KE
1540: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
1550: 6c 65 64 7d 7d 0a 20 20 34 2e 31 35 20 22 55 50  led}}.  4.15 "UP
1560: 44 41 54 45 20 74 37 20 53 45 54 20 62 20 3d 20  DATE t7 SET b = 
1570: 35 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  5"              
1580: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
1590: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
15a0: 64 7d 7d 0a 20 20 34 2e 31 37 20 22 55 50 44 41  d}}.  4.17 "UPDA
15b0: 54 45 20 74 37 20 53 45 54 20 61 20 3d 20 31 30  TE t7 SET a = 10
15c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 30  "             {0
15d0: 20 7b 7d 7d 0a 0a 20 20 35 2e 31 20 20 22 49 4e   {}}..  5.1  "IN
15e0: 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c  SERT INTO t9 VAL
15f0: 55 45 53 28 31 2c 20 33 29 22 20 20 20 20 20 20  UES(1, 3)"      
1600: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
1610: 65 3a 20 6d 61 69 6e 2e 6e 6f 73 75 63 68 74 61  e: main.nosuchta
1620: 62 6c 65 7d 7d 0a 20 20 35 2e 32 20 20 22 49 4e  ble}}.  5.2  "IN
1630: 53 45 52 54 20 49 4e 54 4f 20 74 31 30 20 56 41  SERT INTO t10 VA
1640: 4c 55 45 53 28 31 2c 20 33 29 22 20 20 0a 20 20  LUES(1, 3)"  .  
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 20 20 20 20 20 20 20 20 20 20 7b 31 20 7b 66 6f            {1 {fo
1670: 72 65 69 67 6e 20 6b 65 79 20 6d 69 73 6d 61 74  reign key mismat
1680: 63 68 20 2d 20 22 74 31 30 22 20 72 65 66 65 72  ch - "t10" refer
1690: 65 6e 63 69 6e 67 20 22 74 39 22 7d 7d 0a 7d 0a  encing "t9"}}.}.
16a0: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
16b0: 5f 72 6f 77 69 64 33 2d 31 2e 31 2e 30 20 7b 0a  _rowid3-1.1.0 {.
16c0: 20 20 65 78 65 63 73 71 6c 20 5b 73 74 72 69 6e    execsql [strin
16d0: 67 20 6d 61 70 20 7b 2f 44 2f 20 7b 7d 7d 20 24  g map {/D/ {}} $
16e0: 46 6b 65 79 53 69 6d 70 6c 65 53 63 68 65 6d 61  FkeySimpleSchema
16f0: 5d 0a 7d 20 7b 7d 0a 66 6f 72 65 61 63 68 20 7b  ].} {}.foreach {
1700: 74 6e 20 7a 53 71 6c 20 72 65 73 7d 20 24 46 6b  tn zSql res} $Fk
1710: 65 79 53 69 6d 70 6c 65 54 65 73 74 73 20 7b 0a  eySimpleTests {.
1720: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
1730: 74 5f 72 6f 77 69 64 33 2d 31 2e 31 2e 24 74 6e  t_rowid3-1.1.$tn
1740: 2e 31 20 7b 20 63 61 74 63 68 73 71 6c 20 24 7a  .1 { catchsql $z
1750: 53 71 6c 20 7d 20 24 72 65 73 0a 20 20 64 6f 5f  Sql } $res.  do_
1760: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
1770: 69 64 33 2d 31 2e 31 2e 24 74 6e 2e 32 20 7b 20  id3-1.1.$tn.2 { 
1780: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
1790: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
17a0: 6b 28 74 31 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f  k(t1)} } {}.  do
17b0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
17c0: 77 69 64 33 2d 31 2e 31 2e 24 74 6e 2e 33 20 7b  wid3-1.1.$tn.3 {
17d0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
17e0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
17f0: 63 6b 28 74 32 29 7d 20 7d 20 7b 7d 0a 20 20 64  ck(t2)} } {}.  d
1800: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
1810: 6f 77 69 64 33 2d 31 2e 31 2e 24 74 6e 2e 34 20  owid3-1.1.$tn.4 
1820: 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d  { execsql {PRAGM
1830: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
1840: 65 63 6b 28 74 33 29 7d 20 7d 20 7b 7d 0a 20 20  eck(t3)} } {}.  
1850: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
1860: 72 6f 77 69 64 33 2d 31 2e 31 2e 24 74 6e 2e 35  rowid3-1.1.$tn.5
1870: 20 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47   { execsql {PRAG
1880: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1890: 68 65 63 6b 28 74 34 29 7d 20 7d 20 7b 7d 0a 20  heck(t4)} } {}. 
18a0: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
18b0: 5f 72 6f 77 69 64 33 2d 31 2e 31 2e 24 74 6e 2e  _rowid3-1.1.$tn.
18c0: 36 20 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41  6 { execsql {PRA
18d0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
18e0: 63 68 65 63 6b 28 74 37 29 7d 20 7d 20 7b 7d 0a  check(t7)} } {}.
18f0: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
1900: 74 5f 72 6f 77 69 64 33 2d 31 2e 31 2e 24 74 6e  t_rowid3-1.1.$tn
1910: 2e 37 20 7b 20 65 78 65 63 73 71 6c 20 7b 50 52  .7 { execsql {PR
1920: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
1930: 5f 63 68 65 63 6b 28 74 38 29 7d 20 7d 20 7b 7d  _check(t8)} } {}
1940: 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .}.drop_all_tabl
1950: 65 73 0a 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  es..do_test with
1960: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e 32 2e 30  out_rowid3-1.2.0
1970: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 74   {.  execsql [st
1980: 72 69 6e 67 20 6d 61 70 20 7b 2f 44 2f 20 7b 44  ring map {/D/ {D
1990: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
19a0: 4c 4c 59 20 44 45 46 45 52 52 45 44 7d 7d 20 24  LLY DEFERRED}} $
19b0: 46 6b 65 79 53 69 6d 70 6c 65 53 63 68 65 6d 61  FkeySimpleSchema
19c0: 5d 0a 7d 20 7b 7d 0a 66 6f 72 65 61 63 68 20 7b  ].} {}.foreach {
19d0: 74 6e 20 7a 53 71 6c 20 72 65 73 7d 20 24 46 6b  tn zSql res} $Fk
19e0: 65 79 53 69 6d 70 6c 65 54 65 73 74 73 20 7b 0a  eySimpleTests {.
19f0: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
1a00: 74 5f 72 6f 77 69 64 33 2d 31 2e 32 2e 24 74 6e  t_rowid3-1.2.$tn
1a10: 20 7b 20 63 61 74 63 68 73 71 6c 20 24 7a 53 71   { catchsql $zSq
1a20: 6c 20 7d 20 24 72 65 73 0a 20 20 64 6f 5f 74 65  l } $res.  do_te
1a30: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
1a40: 33 2d 31 2e 32 2e 24 74 6e 2e 32 20 7b 20 65 78  3-1.2.$tn.2 { ex
1a50: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 6f  ecsql {PRAGMA fo
1a60: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
1a70: 74 31 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  t1)} } {}.  do_t
1a80: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
1a90: 64 33 2d 31 2e 32 2e 24 74 6e 2e 33 20 7b 20 65  d3-1.2.$tn.3 { e
1aa0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  xecsql {PRAGMA f
1ab0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1ac0: 28 74 32 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f 5f  (t2)} } {}.  do_
1ad0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
1ae0: 69 64 33 2d 31 2e 32 2e 24 74 6e 2e 34 20 7b 20  id3-1.2.$tn.4 { 
1af0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
1b00: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
1b10: 6b 28 74 33 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f  k(t3)} } {}.  do
1b20: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
1b30: 77 69 64 33 2d 31 2e 32 2e 24 74 6e 2e 35 20 7b  wid3-1.2.$tn.5 {
1b40: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
1b50: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
1b60: 63 6b 28 74 34 29 7d 20 7d 20 7b 7d 0a 20 20 64  ck(t4)} } {}.  d
1b70: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
1b80: 6f 77 69 64 33 2d 31 2e 32 2e 24 74 6e 2e 36 20  owid3-1.2.$tn.6 
1b90: 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d  { execsql {PRAGM
1ba0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
1bb0: 65 63 6b 28 74 37 29 7d 20 7d 20 7b 7d 0a 20 20  eck(t7)} } {}.  
1bc0: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
1bd0: 72 6f 77 69 64 33 2d 31 2e 32 2e 24 74 6e 2e 37  rowid3-1.2.$tn.7
1be0: 20 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47   { execsql {PRAG
1bf0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1c00: 68 65 63 6b 28 74 38 29 7d 20 7d 20 7b 7d 0a 7d  heck(t8)} } {}.}
1c10: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
1c20: 0a 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  ..do_test withou
1c30: 74 5f 72 6f 77 69 64 33 2d 31 2e 33 2e 30 20 7b  t_rowid3-1.3.0 {
1c40: 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 74 72 69  .  execsql [stri
1c50: 6e 67 20 6d 61 70 20 7b 2f 44 2f 20 7b 7d 7d 20  ng map {/D/ {}} 
1c60: 24 46 6b 65 79 53 69 6d 70 6c 65 53 63 68 65 6d  $FkeySimpleSchem
1c70: 61 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50  a].  execsql { P
1c80: 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e  RAGMA count_chan
1c90: 67 65 73 20 3d 20 31 20 7d 0a 7d 20 7b 7d 0a 66  ges = 1 }.} {}.f
1ca0: 6f 72 65 61 63 68 20 7b 74 6e 20 7a 53 71 6c 20  oreach {tn zSql 
1cb0: 72 65 73 7d 20 24 46 6b 65 79 53 69 6d 70 6c 65  res} $FkeySimple
1cc0: 54 65 73 74 73 20 7b 0a 20 20 69 66 20 7b 24 72  Tests {.  if {$r
1cd0: 65 73 20 3d 3d 20 22 30 20 7b 7d 22 7d 20 7b 20  es == "0 {}"} { 
1ce0: 73 65 74 20 72 65 73 20 7b 30 20 31 7d 20 7d 0a  set res {0 1} }.
1cf0: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
1d00: 74 5f 72 6f 77 69 64 33 2d 31 2e 33 2e 24 74 6e  t_rowid3-1.3.$tn
1d10: 20 7b 20 63 61 74 63 68 73 71 6c 20 24 7a 53 71   { catchsql $zSq
1d20: 6c 20 7d 20 24 72 65 73 0a 20 20 64 6f 5f 74 65  l } $res.  do_te
1d30: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
1d40: 33 2d 31 2e 33 2e 24 74 6e 2e 32 20 7b 20 65 78  3-1.3.$tn.2 { ex
1d50: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 6f  ecsql {PRAGMA fo
1d60: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 28  reign_key_check(
1d70: 74 31 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  t1)} } {}.  do_t
1d80: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
1d90: 64 33 2d 31 2e 33 2e 24 74 6e 2e 33 20 7b 20 65  d3-1.3.$tn.3 { e
1da0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  xecsql {PRAGMA f
1db0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b  oreign_key_check
1dc0: 28 74 32 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f 5f  (t2)} } {}.  do_
1dd0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
1de0: 69 64 33 2d 31 2e 33 2e 24 74 6e 2e 34 20 7b 20  id3-1.3.$tn.4 { 
1df0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
1e00: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63  foreign_key_chec
1e10: 6b 28 74 33 29 7d 20 7d 20 7b 7d 0a 20 20 64 6f  k(t3)} } {}.  do
1e20: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
1e30: 77 69 64 33 2d 31 2e 33 2e 24 74 6e 2e 35 20 7b  wid3-1.3.$tn.5 {
1e40: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
1e50: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
1e60: 63 6b 28 74 34 29 7d 20 7d 20 7b 7d 0a 20 20 64  ck(t4)} } {}.  d
1e70: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
1e80: 6f 77 69 64 33 2d 31 2e 33 2e 24 74 6e 2e 36 20  owid3-1.3.$tn.6 
1e90: 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d  { execsql {PRAGM
1ea0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
1eb0: 65 63 6b 28 74 37 29 7d 20 7d 20 7b 7d 0a 20 20  eck(t7)} } {}.  
1ec0: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
1ed0: 72 6f 77 69 64 33 2d 31 2e 33 2e 24 74 6e 2e 37  rowid3-1.3.$tn.7
1ee0: 20 7b 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47   { execsql {PRAG
1ef0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
1f00: 68 65 63 6b 28 74 38 29 7d 20 7d 20 7b 7d 0a 7d  heck(t8)} } {}.}
1f10: 0a 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d  .execsql { PRAGM
1f20: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20  A count_changes 
1f30: 3d 20 30 20 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74  = 0 }.drop_all_t
1f40: 61 62 6c 65 73 0a 0a 64 6f 5f 74 65 73 74 20 77  ables..do_test w
1f50: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e  ithout_rowid3-1.
1f60: 34 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.0 {.  execsql 
1f70: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 2f 44 2f  [string map {/D/
1f80: 20 7b 7d 7d 20 24 46 6b 65 79 53 69 6d 70 6c 65   {}} $FkeySimple
1f90: 53 63 68 65 6d 61 5d 0a 20 20 65 78 65 63 73 71  Schema].  execsq
1fa0: 6c 20 7b 20 50 52 41 47 4d 41 20 63 6f 75 6e 74  l { PRAGMA count
1fb0: 5f 63 68 61 6e 67 65 73 20 3d 20 31 20 7d 0a 7d  _changes = 1 }.}
1fc0: 20 7b 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20   {}.foreach {tn 
1fd0: 7a 53 71 6c 20 72 65 73 7d 20 24 46 6b 65 79 53  zSql res} $FkeyS
1fe0: 69 6d 70 6c 65 54 65 73 74 73 20 7b 0a 20 20 69  impleTests {.  i
1ff0: 66 20 7b 24 72 65 73 20 3d 3d 20 22 30 20 7b 7d  f {$res == "0 {}
2000: 22 7d 20 7b 20 73 65 74 20 72 65 73 20 7b 30 20  "} { set res {0 
2010: 31 7d 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 42  1} }.  execsql B
2020: 45 47 49 4e 0a 20 20 64 6f 5f 74 65 73 74 20 77  EGIN.  do_test w
2030: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e  ithout_rowid3-1.
2040: 34 2e 24 74 6e 20 7b 20 63 61 74 63 68 73 71 6c  4.$tn { catchsql
2050: 20 24 7a 53 71 6c 20 7d 20 24 72 65 73 0a 20 20   $zSql } $res.  
2060: 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a 7d  execsql COMMIT.}
2070: 0a 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d  .execsql { PRAGM
2080: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20  A count_changes 
2090: 3d 20 30 20 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74  = 0 }.drop_all_t
20a0: 61 62 6c 65 73 0a 0a 23 20 53 70 65 63 69 61 6c  ables..# Special
20b0: 20 74 65 73 74 3a 20 57 68 65 6e 20 74 68 65 20   test: When the 
20c0: 70 61 72 65 6e 74 20 6b 65 79 20 69 73 20 61 6e  parent key is an
20d0: 20 49 50 4b 2c 20 6d 61 6b 65 20 73 75 72 65 20   IPK, make sure 
20e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 0a  the affinity of.
20f0: 23 20 74 68 65 20 49 50 4b 20 69 73 20 6e 6f 74  # the IPK is not
2100: 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
2110: 63 68 69 6c 64 20 6b 65 79 20 76 61 6c 75 65 20  child key value 
2120: 62 65 66 6f 72 65 20 69 74 20 69 73 20 69 6e 73  before it is ins
2130: 65 72 74 65 64 0a 23 20 69 6e 74 6f 20 74 68 65  erted.# into the
2140: 20 63 68 69 6c 64 20 74 61 62 6c 65 2e 0a 64 6f   child table..do
2150: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
2160: 77 69 64 33 2d 31 2e 35 2e 31 20 7b 0a 20 20 65  wid3-1.5.1 {.  e
2170: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
2180: 41 54 45 20 54 41 42 4c 45 20 69 28 69 20 49 4e  ATE TABLE i(i IN
2190: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29 20 57  T PRIMARY KEY) W
21a0: 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20  ITHOUT rowid;.  
21b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6a    CREATE TABLE j
21c0: 28 6a 20 52 45 46 45 52 45 4e 43 45 53 20 69 29  (j REFERENCES i)
21d0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
21e0: 4f 20 69 20 56 41 4c 55 45 53 28 33 35 29 3b 0a  O i VALUES(35);.
21f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2200: 6a 20 56 41 4c 55 45 53 28 27 33 35 2e 30 27 29  j VALUES('35.0')
2210: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6a 2c 20  ;.    SELECT j, 
2220: 74 79 70 65 6f 66 28 6a 29 20 46 52 4f 4d 20 6a  typeof(j) FROM j
2230: 3b 0a 20 20 7d 0a 7d 20 7b 33 35 2e 30 20 74 65  ;.  }.} {35.0 te
2240: 78 74 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  xt}.do_test with
2250: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e 35 2e 32  out_rowid3-1.5.2
2260: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   {.  catchsql { 
2270: 44 45 4c 45 54 45 20 46 52 4f 4d 20 69 20 7d 0a  DELETE FROM i }.
2280: 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45  } {1 {FOREIGN KE
2290: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
22a0: 6c 65 64 7d 7d 0a 0a 23 20 53 61 6d 65 20 74 65  led}}..# Same te
22b0: 73 74 20 75 73 69 6e 67 20 61 20 72 65 67 75 6c  st using a regul
22c0: 61 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 77  ar primary key w
22d0: 69 74 68 20 69 6e 74 65 67 65 72 20 61 66 66 69  ith integer affi
22e0: 6e 69 74 79 2e 0a 64 72 6f 70 5f 61 6c 6c 5f 74  nity..drop_all_t
22f0: 61 62 6c 65 73 0a 64 6f 5f 74 65 73 74 20 77 69  ables.do_test wi
2300: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e 36  thout_rowid3-1.6
2310: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2320: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2330: 45 20 69 28 69 20 49 4e 54 20 55 4e 49 51 55 45  E i(i INT UNIQUE
2340: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
2350: 42 4c 45 20 6a 28 6a 20 52 45 46 45 52 45 4e 43  BLE j(j REFERENC
2360: 45 53 20 69 28 69 29 29 3b 0a 20 20 20 20 49 4e  ES i(i));.    IN
2370: 53 45 52 54 20 49 4e 54 4f 20 69 20 56 41 4c 55  SERT INTO i VALU
2380: 45 53 28 27 33 35 2e 30 27 29 3b 0a 20 20 20 20  ES('35.0');.    
2390: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6a 20 56 41  INSERT INTO j VA
23a0: 4c 55 45 53 28 27 33 35 2e 30 27 29 3b 0a 20 20  LUES('35.0');.  
23b0: 20 20 53 45 4c 45 43 54 20 6a 2c 20 74 79 70 65    SELECT j, type
23c0: 6f 66 28 6a 29 20 46 52 4f 4d 20 6a 3b 0a 20 20  of(j) FROM j;.  
23d0: 20 20 53 45 4c 45 43 54 20 69 2c 20 74 79 70 65    SELECT i, type
23e0: 6f 66 28 69 29 20 46 52 4f 4d 20 69 3b 0a 20 20  of(i) FROM i;.  
23f0: 7d 0a 7d 20 7b 33 35 2e 30 20 74 65 78 74 20 33  }.} {35.0 text 3
2400: 35 20 69 6e 74 65 67 65 72 7d 0a 64 6f 5f 74 65  5 integer}.do_te
2410: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
2420: 33 2d 31 2e 36 2e 32 20 7b 0a 20 20 63 61 74 63  3-1.6.2 {.  catc
2430: 68 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46 52  hsql { DELETE FR
2440: 4f 4d 20 69 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52  OM i }.} {1 {FOR
2450: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
2460: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 0a 23 20  int failed}}..# 
2470: 55 73 65 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  Use a collation 
2480: 73 65 71 75 65 6e 63 65 20 6f 6e 20 74 68 65 20  sequence on the 
2490: 70 61 72 65 6e 74 20 6b 65 79 2e 0a 64 72 6f 70  parent key..drop
24a0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74  _all_tables.do_t
24b0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
24c0: 64 33 2d 31 2e 37 2e 31 20 7b 0a 20 20 65 78 65  d3-1.7.1 {.  exe
24d0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
24e0: 45 20 54 41 42 4c 45 20 69 28 69 20 54 45 58 54  E TABLE i(i TEXT
24f0: 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20   COLLATE nocase 
2500: 50 52 49 4d 41 52 59 20 4b 45 59 29 20 57 49 54  PRIMARY KEY) WIT
2510: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20  HOUT rowid;.    
2520: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6a 28 6a  CREATE TABLE j(j
2530: 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 62 69   TEXT COLLATE bi
2540: 6e 61 72 79 20 52 45 46 45 52 45 4e 43 45 53 20  nary REFERENCES 
2550: 69 28 69 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  i(i));.    INSER
2560: 54 20 49 4e 54 4f 20 69 20 56 41 4c 55 45 53 28  T INTO i VALUES(
2570: 27 53 51 4c 69 74 65 27 29 3b 0a 20 20 20 20 49  'SQLite');.    I
2580: 4e 53 45 52 54 20 49 4e 54 4f 20 6a 20 56 41 4c  NSERT INTO j VAL
2590: 55 45 53 28 27 73 71 6c 69 74 65 27 29 3b 0a 20  UES('sqlite');. 
25a0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   }.  catchsql { 
25b0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 69 20 7d 0a  DELETE FROM i }.
25c0: 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45  } {1 {FOREIGN KE
25d0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
25e0: 6c 65 64 7d 7d 0a 0a 23 20 55 73 65 20 74 68 65  led}}..# Use the
25f0: 20 70 61 72 65 6e 74 20 6b 65 79 20 63 6f 6c 6c   parent key coll
2600: 61 74 69 6f 6e 20 65 76 65 6e 20 69 66 20 69 74  ation even if it
2610: 20 69 73 20 64 65 66 61 75 6c 74 20 61 6e 64 20   is default and 
2620: 74 68 65 20 63 68 69 6c 64 20 6b 65 79 0a 23 20  the child key.# 
2630: 68 61 73 20 61 6e 20 65 78 70 6c 69 63 69 74 20  has an explicit 
2640: 76 61 6c 75 65 2e 0a 64 72 6f 70 5f 61 6c 6c 5f  value..drop_all_
2650: 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73 74 20 77  tables.do_test w
2660: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e  ithout_rowid3-1.
2670: 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.2 {.  execsql 
2680: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2690: 4c 45 20 69 28 69 20 54 45 58 54 20 50 52 49 4d  LE i(i TEXT PRIM
26a0: 41 52 59 20 4b 45 59 29 20 57 49 54 48 4f 55 54  ARY KEY) WITHOUT
26b0: 20 72 6f 77 69 64 3b 20 20 2d 2d 20 43 6f 6c 73   rowid;  -- Cols
26c0: 65 71 20 69 73 20 22 42 49 4e 41 52 59 22 0a 20  eq is "BINARY". 
26d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
26e0: 6a 28 6a 20 54 45 58 54 20 43 4f 4c 4c 41 54 45  j(j TEXT COLLATE
26f0: 20 6e 6f 63 61 73 65 20 52 45 46 45 52 45 4e 43   nocase REFERENC
2700: 45 53 20 69 28 69 29 29 3b 0a 20 20 20 20 49 4e  ES i(i));.    IN
2710: 53 45 52 54 20 49 4e 54 4f 20 69 20 56 41 4c 55  SERT INTO i VALU
2720: 45 53 28 27 53 51 4c 69 74 65 27 29 3b 0a 20 20  ES('SQLite');.  
2730: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49  }.  catchsql { I
2740: 4e 53 45 52 54 20 49 4e 54 4f 20 6a 20 56 41 4c  NSERT INTO j VAL
2750: 55 45 53 28 27 73 71 6c 69 74 65 27 29 20 7d 0a  UES('sqlite') }.
2760: 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45  } {1 {FOREIGN KE
2770: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
2780: 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69  led}}.do_test wi
2790: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 2e 37  thout_rowid3-1.7
27a0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
27b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
27c0: 20 69 20 56 41 4c 55 45 53 28 27 73 71 6c 69 74   i VALUES('sqlit
27d0: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
27e0: 49 4e 54 4f 20 6a 20 56 41 4c 55 45 53 28 27 73  INTO j VALUES('s
27f0: 71 6c 69 74 65 27 29 3b 0a 20 20 20 20 44 45 4c  qlite');.    DEL
2800: 45 54 45 20 46 52 4f 4d 20 69 20 57 48 45 52 45  ETE FROM i WHERE
2810: 20 69 20 3d 20 27 53 51 4c 69 74 65 27 3b 0a 20   i = 'SQLite';. 
2820: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   }.  catchsql { 
2830: 44 45 4c 45 54 45 20 46 52 4f 4d 20 69 20 57 48  DELETE FROM i WH
2840: 45 52 45 20 69 20 3d 20 27 73 71 6c 69 74 65 27  ERE i = 'sqlite'
2850: 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e   }.} {1 {FOREIGN
2860: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
2870: 66 61 69 6c 65 64 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  failed}}..#-----
2880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28c0: 2d 2d 2d 2d 0a 23 20 54 68 69 73 20 73 65 63 74  ----.# This sect
28d0: 69 6f 6e 20 28 74 65 73 74 20 63 61 73 65 73 20  ion (test cases 
28e0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
28f0: 2e 2a 29 20 63 6f 6e 74 61 69 6e 73 20 74 65 73  .*) contains tes
2900: 74 73 20 74 6f 20 63 68 65 63 6b 20 74 68 61 74  ts to check that
2910: 20 74 68 65 0a 23 20 64 65 66 65 72 72 65 64 20   the.# deferred 
2920: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2930: 74 72 61 69 6e 74 20 6c 6f 67 69 63 20 77 6f 72  traint logic wor
2940: 6b 73 2e 0a 23 0a 70 72 6f 63 20 77 69 74 68 6f  ks..#.proc witho
2950: 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74  ut_rowid3-2-test
2960: 20 7b 74 6e 20 6e 6f 63 6f 6d 6d 69 74 20 73 71   {tn nocommit sq
2970: 6c 20 7b 72 65 73 20 7b 7d 7d 7d 20 7b 0a 20 20  l {res {}}} {.  
2980: 69 66 20 7b 24 72 65 73 20 65 71 20 22 46 4b 56  if {$res eq "FKV
2990: 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 65 78 70  "} {.    set exp
29a0: 65 63 74 65 64 20 7b 31 20 7b 46 4f 52 45 49 47  ected {1 {FOREIG
29b0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
29c0: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 7d 20 65 6c   failed}}.  } el
29d0: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 65 78 70  se {.    set exp
29e0: 65 63 74 65 64 20 5b 6c 69 73 74 20 30 20 24 72  ected [list 0 $r
29f0: 65 73 5d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  es].  }.  do_tes
2a00: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
2a10: 2d 32 2e 24 74 6e 20 5b 6c 69 73 74 20 63 61 74  -2.$tn [list cat
2a20: 63 68 73 71 6c 20 24 73 71 6c 5d 20 24 65 78 70  chsql $sql] $exp
2a30: 65 63 74 65 64 0a 20 20 69 66 20 7b 24 6e 6f 63  ected.  if {$noc
2a40: 6f 6d 6d 69 74 7d 20 7b 0a 20 20 20 20 64 6f 5f  ommit} {.    do_
2a50: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
2a60: 69 64 33 2d 32 2e 24 7b 74 6e 7d 63 20 7b 0a 20  id3-2.${tn}c {. 
2a70: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 43 4f       catchsql CO
2a80: 4d 4d 49 54 0a 20 20 20 20 7d 20 7b 31 20 7b 46  MMIT.    } {1 {F
2a90: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
2aa0: 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 20  raint failed}}. 
2ab0: 20 7d 0a 7d 0a 0a 77 69 74 68 6f 75 74 5f 72 6f   }.}..without_ro
2ac0: 77 69 64 33 2d 32 2d 74 65 73 74 20 31 20 30 20  wid3-2-test 1 0 
2ad0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
2ae0: 20 6e 6f 64 65 28 0a 20 20 20 20 6e 6f 64 65 69   node(.    nodei
2af0: 64 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  d PRIMARY KEY,. 
2b00: 20 20 20 70 61 72 65 6e 74 20 52 45 46 45 52 45     parent REFERE
2b10: 4e 43 45 53 20 6e 6f 64 65 20 44 45 46 45 52 52  NCES node DEFERR
2b20: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44  ABLE INITIALLY D
2b30: 45 46 45 52 52 45 44 0a 20 20 29 20 57 49 54 48  EFERRED.  ) WITH
2b40: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 43 52 45  OUT rowid;.  CRE
2b50: 41 54 45 20 54 41 42 4c 45 20 6c 65 61 66 28 0a  ATE TABLE leaf(.
2b60: 20 20 20 20 63 65 6c 6c 69 64 20 50 52 49 4d 41      cellid PRIMA
2b70: 52 59 20 4b 45 59 2c 0a 20 20 20 20 70 61 72 65  RY KEY,.    pare
2b80: 6e 74 20 52 45 46 45 52 45 4e 43 45 53 20 6e 6f  nt REFERENCES no
2b90: 64 65 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  de DEFERRABLE IN
2ba0: 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44  ITIALLY DEFERRED
2bb0: 0a 20 20 29 20 57 49 54 48 4f 55 54 20 72 6f 77  .  ) WITHOUT row
2bc0: 69 64 3b 0a 7d 0a 0a 77 69 74 68 6f 75 74 5f 72  id;.}..without_r
2bd0: 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 31 20 20  owid3-2-test 1  
2be0: 30 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e  0 "INSERT INTO n
2bf0: 6f 64 65 20 56 41 4c 55 45 53 28 31 2c 20 30 29  ode VALUES(1, 0)
2c00: 22 20 20 20 20 20 20 20 46 4b 56 0a 77 69 74 68  "       FKV.with
2c10: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
2c20: 74 20 32 20 20 30 20 22 42 45 47 49 4e 22 0a 77  t 2  0 "BEGIN".w
2c30: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d  ithout_rowid3-2-
2c40: 74 65 73 74 20 33 20 20 31 20 20 20 22 49 4e 53  test 3  1   "INS
2c50: 45 52 54 20 49 4e 54 4f 20 6e 6f 64 65 20 56 41  ERT INTO node VA
2c60: 4c 55 45 53 28 31 2c 20 30 29 22 0a 77 69 74 68  LUES(1, 0)".with
2c70: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
2c80: 74 20 34 20 20 30 20 20 20 22 55 50 44 41 54 45  t 4  0   "UPDATE
2c90: 20 6e 6f 64 65 20 53 45 54 20 70 61 72 65 6e 74   node SET parent
2ca0: 20 3d 20 4e 55 4c 4c 22 0a 77 69 74 68 6f 75 74   = NULL".without
2cb0: 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 35  _rowid3-2-test 5
2cc0: 20 20 30 20 22 43 4f 4d 4d 49 54 22 0a 77 69 74    0 "COMMIT".wit
2cd0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65  hout_rowid3-2-te
2ce0: 73 74 20 36 20 20 30 20 22 53 45 4c 45 43 54 20  st 6  0 "SELECT 
2cf0: 2a 20 46 52 4f 4d 20 6e 6f 64 65 22 20 7b 31 20  * FROM node" {1 
2d00: 7b 7d 7d 0a 0a 77 69 74 68 6f 75 74 5f 72 6f 77  {}}..without_row
2d10: 69 64 33 2d 32 2d 74 65 73 74 20 37 20 20 30 20  id3-2-test 7  0 
2d20: 22 42 45 47 49 4e 22 0a 77 69 74 68 6f 75 74 5f  "BEGIN".without_
2d30: 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 38 20  rowid3-2-test 8 
2d40: 20 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   1   "INSERT INT
2d50: 4f 20 6c 65 61 66 20 56 41 4c 55 45 53 28 27 61  O leaf VALUES('a
2d60: 27 2c 20 32 29 22 0a 77 69 74 68 6f 75 74 5f 72  ', 2)".without_r
2d70: 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 39 20 20  owid3-2-test 9  
2d80: 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  1   "INSERT INTO
2d90: 20 6e 6f 64 65 20 56 41 4c 55 45 53 28 32 2c 20   node VALUES(2, 
2da0: 30 29 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69  0)".without_rowi
2db0: 64 33 2d 32 2d 74 65 73 74 20 31 30 20 30 20 20  d3-2-test 10 0  
2dc0: 20 22 55 50 44 41 54 45 20 6e 6f 64 65 20 53 45   "UPDATE node SE
2dd0: 54 20 70 61 72 65 6e 74 20 3d 20 31 20 57 48 45  T parent = 1 WHE
2de0: 52 45 20 6e 6f 64 65 69 64 20 3d 20 32 22 0a 77  RE nodeid = 2".w
2df0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d  ithout_rowid3-2-
2e00: 74 65 73 74 20 31 31 20 30 20 22 43 4f 4d 4d 49  test 11 0 "COMMI
2e10: 54 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  T".without_rowid
2e20: 33 2d 32 2d 74 65 73 74 20 31 32 20 30 20 22 53  3-2-test 12 0 "S
2e30: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6e 6f 64  ELECT * FROM nod
2e40: 65 22 20 7b 31 20 7b 7d 20 32 20 31 7d 0a 77 69  e" {1 {} 2 1}.wi
2e50: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74  thout_rowid3-2-t
2e60: 65 73 74 20 31 33 20 30 20 22 53 45 4c 45 43 54  est 13 0 "SELECT
2e70: 20 2a 20 46 52 4f 4d 20 6c 65 61 66 22 20 7b 61   * FROM leaf" {a
2e80: 20 32 7d 0a 0a 77 69 74 68 6f 75 74 5f 72 6f 77   2}..without_row
2e90: 69 64 33 2d 32 2d 74 65 73 74 20 31 34 20 30 20  id3-2-test 14 0 
2ea0: 22 42 45 47 49 4e 22 0a 77 69 74 68 6f 75 74 5f  "BEGIN".without_
2eb0: 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 31 35  rowid3-2-test 15
2ec0: 20 31 20 20 20 22 44 45 4c 45 54 45 20 46 52 4f   1   "DELETE FRO
2ed0: 4d 20 6e 6f 64 65 20 57 48 45 52 45 20 6e 6f 64  M node WHERE nod
2ee0: 65 69 64 20 3d 20 32 22 0a 77 69 74 68 6f 75 74  eid = 2".without
2ef0: 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 31  _rowid3-2-test 1
2f00: 36 20 30 20 20 20 22 49 4e 53 45 52 54 20 49 4e  6 0   "INSERT IN
2f10: 54 4f 20 6e 6f 64 65 20 56 41 4c 55 45 53 28 32  TO node VALUES(2
2f20: 2c 20 4e 55 4c 4c 29 22 0a 77 69 74 68 6f 75 74  , NULL)".without
2f30: 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 31  _rowid3-2-test 1
2f40: 37 20 30 20 22 43 4f 4d 4d 49 54 22 0a 77 69 74  7 0 "COMMIT".wit
2f50: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65  hout_rowid3-2-te
2f60: 73 74 20 31 38 20 30 20 22 53 45 4c 45 43 54 20  st 18 0 "SELECT 
2f70: 2a 20 46 52 4f 4d 20 6e 6f 64 65 22 20 7b 31 20  * FROM node" {1 
2f80: 7b 7d 20 32 20 7b 7d 7d 0a 77 69 74 68 6f 75 74  {} 2 {}}.without
2f90: 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 31  _rowid3-2-test 1
2fa0: 39 20 30 20 22 53 45 4c 45 43 54 20 2a 20 46 52  9 0 "SELECT * FR
2fb0: 4f 4d 20 6c 65 61 66 22 20 7b 61 20 32 7d 0a 0a  OM leaf" {a 2}..
2fc0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
2fd0: 2d 74 65 73 74 20 32 30 20 30 20 22 42 45 47 49  -test 20 0 "BEGI
2fe0: 4e 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  N".without_rowid
2ff0: 33 2d 32 2d 74 65 73 74 20 32 31 20 30 20 20 20  3-2-test 21 0   
3000: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 65 61  "INSERT INTO lea
3010: 66 20 56 41 4c 55 45 53 28 27 62 27 2c 20 31 29  f VALUES('b', 1)
3020: 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  ".without_rowid3
3030: 2d 32 2d 74 65 73 74 20 32 32 20 30 20 20 20 22  -2-test 22 0   "
3040: 53 41 56 45 50 4f 49 4e 54 20 73 61 76 65 22 0a  SAVEPOINT save".
3050: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
3060: 2d 74 65 73 74 20 32 33 20 30 20 20 20 20 20 22  -test 23 0     "
3070: 44 45 4c 45 54 45 20 46 52 4f 4d 20 6e 6f 64 65  DELETE FROM node
3080: 20 57 48 45 52 45 20 6e 6f 64 65 69 64 20 3d 20   WHERE nodeid = 
3090: 31 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  1".without_rowid
30a0: 33 2d 32 2d 74 65 73 74 20 32 34 20 30 20 20 20  3-2-test 24 0   
30b0: 22 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 73 61 76  "ROLLBACK TO sav
30c0: 65 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  e".without_rowid
30d0: 33 2d 32 2d 74 65 73 74 20 32 35 20 30 20 22 43  3-2-test 25 0 "C
30e0: 4f 4d 4d 49 54 22 0a 77 69 74 68 6f 75 74 5f 72  OMMIT".without_r
30f0: 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 32 36 20  owid3-2-test 26 
3100: 30 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  0 "SELECT * FROM
3110: 20 6e 6f 64 65 22 20 7b 31 20 7b 7d 20 32 20 7b   node" {1 {} 2 {
3120: 7d 7d 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  }}.without_rowid
3130: 33 2d 32 2d 74 65 73 74 20 32 37 20 30 20 22 53  3-2-test 27 0 "S
3140: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6c 65 61  ELECT * FROM lea
3150: 66 22 20 7b 61 20 32 20 62 20 31 7d 0a 0a 77 69  f" {a 2 b 1}..wi
3160: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74  thout_rowid3-2-t
3170: 65 73 74 20 32 38 20 30 20 22 42 45 47 49 4e 22  est 28 0 "BEGIN"
3180: 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d  .without_rowid3-
3190: 32 2d 74 65 73 74 20 32 39 20 30 20 20 20 22 49  2-test 29 0   "I
31a0: 4e 53 45 52 54 20 49 4e 54 4f 20 6c 65 61 66 20  NSERT INTO leaf 
31b0: 56 41 4c 55 45 53 28 27 63 27 2c 20 31 29 22 0a  VALUES('c', 1)".
31c0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
31d0: 2d 74 65 73 74 20 33 30 20 30 20 20 20 22 53 41  -test 30 0   "SA
31e0: 56 45 50 4f 49 4e 54 20 73 61 76 65 22 0a 77 69  VEPOINT save".wi
31f0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74  thout_rowid3-2-t
3200: 65 73 74 20 33 31 20 30 20 20 20 20 20 22 44 45  est 31 0     "DE
3210: 4c 45 54 45 20 46 52 4f 4d 20 6e 6f 64 65 20 57  LETE FROM node W
3220: 48 45 52 45 20 6e 6f 64 65 69 64 20 3d 20 31 22  HERE nodeid = 1"
3230: 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d  .without_rowid3-
3240: 32 2d 74 65 73 74 20 33 32 20 31 20 20 20 22 52  2-test 32 1   "R
3250: 45 4c 45 41 53 45 20 73 61 76 65 22 0a 77 69 74  ELEASE save".wit
3260: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65  hout_rowid3-2-te
3270: 73 74 20 33 33 20 31 20 20 20 22 44 45 4c 45 54  st 33 1   "DELET
3280: 45 20 46 52 4f 4d 20 6c 65 61 66 20 57 48 45 52  E FROM leaf WHER
3290: 45 20 63 65 6c 6c 69 64 20 3d 20 27 62 27 22 0a  E cellid = 'b'".
32a0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
32b0: 2d 74 65 73 74 20 33 34 20 30 20 20 20 22 44 45  -test 34 0   "DE
32c0: 4c 45 54 45 20 46 52 4f 4d 20 6c 65 61 66 20 57  LETE FROM leaf W
32d0: 48 45 52 45 20 63 65 6c 6c 69 64 20 3d 20 27 63  HERE cellid = 'c
32e0: 27 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  '".without_rowid
32f0: 33 2d 32 2d 74 65 73 74 20 33 35 20 30 20 22 43  3-2-test 35 0 "C
3300: 4f 4d 4d 49 54 22 0a 77 69 74 68 6f 75 74 5f 72  OMMIT".without_r
3310: 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 33 36 20  owid3-2-test 36 
3320: 30 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  0 "SELECT * FROM
3330: 20 6e 6f 64 65 22 20 7b 32 20 7b 7d 7d 20 0a 77   node" {2 {}} .w
3340: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d  ithout_rowid3-2-
3350: 74 65 73 74 20 33 37 20 30 20 22 53 45 4c 45 43  test 37 0 "SELEC
3360: 54 20 2a 20 46 52 4f 4d 20 6c 65 61 66 22 20 7b  T * FROM leaf" {
3370: 61 20 32 7d 0a 0a 77 69 74 68 6f 75 74 5f 72 6f  a 2}..without_ro
3380: 77 69 64 33 2d 32 2d 74 65 73 74 20 33 38 20 30  wid3-2-test 38 0
3390: 20 22 53 41 56 45 50 4f 49 4e 54 20 6f 75 74 65   "SAVEPOINT oute
33a0: 72 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  r".without_rowid
33b0: 33 2d 32 2d 74 65 73 74 20 33 39 20 31 20 20 20  3-2-test 39 1   
33c0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 65 61  "INSERT INTO lea
33d0: 66 20 56 41 4c 55 45 53 28 27 64 27 2c 20 33 29  f VALUES('d', 3)
33e0: 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  ".without_rowid3
33f0: 2d 32 2d 74 65 73 74 20 34 30 20 31 20 22 52 45  -2-test 40 1 "RE
3400: 4c 45 41 53 45 20 6f 75 74 65 72 22 20 20 20 20  LEASE outer"    
3410: 46 4b 56 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69  FKV.without_rowi
3420: 64 33 2d 32 2d 74 65 73 74 20 34 31 20 31 20 20  d3-2-test 41 1  
3430: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6c 65   "INSERT INTO le
3440: 61 66 20 56 41 4c 55 45 53 28 27 65 27 2c 20 33  af VALUES('e', 3
3450: 29 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  )".without_rowid
3460: 33 2d 32 2d 74 65 73 74 20 34 32 20 30 20 20 20  3-2-test 42 0   
3470: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 6f 64  "INSERT INTO nod
3480: 65 20 56 41 4c 55 45 53 28 33 2c 20 32 29 22 0a  e VALUES(3, 2)".
3490: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
34a0: 2d 74 65 73 74 20 34 33 20 30 20 22 52 45 4c 45  -test 43 0 "RELE
34b0: 41 53 45 20 6f 75 74 65 72 22 0a 0a 77 69 74 68  ASE outer"..with
34c0: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
34d0: 74 20 34 34 20 30 20 22 53 41 56 45 50 4f 49 4e  t 44 0 "SAVEPOIN
34e0: 54 20 6f 75 74 65 72 22 0a 77 69 74 68 6f 75 74  T outer".without
34f0: 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 34  _rowid3-2-test 4
3500: 35 20 31 20 20 20 22 44 45 4c 45 54 45 20 46 52  5 1   "DELETE FR
3510: 4f 4d 20 6e 6f 64 65 20 57 48 45 52 45 20 6e 6f  OM node WHERE no
3520: 64 65 69 64 3d 33 22 0a 77 69 74 68 6f 75 74 5f  deid=3".without_
3530: 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 34 37  rowid3-2-test 47
3540: 20 30 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   0   "INSERT INT
3550: 4f 20 6e 6f 64 65 20 56 41 4c 55 45 53 28 33 2c  O node VALUES(3,
3560: 20 32 29 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77   2)".without_row
3570: 69 64 33 2d 32 2d 74 65 73 74 20 34 38 20 30 20  id3-2-test 48 0 
3580: 22 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 6f 75 74  "ROLLBACK TO out
3590: 65 72 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69  er".without_rowi
35a0: 64 33 2d 32 2d 74 65 73 74 20 34 39 20 30 20 22  d3-2-test 49 0 "
35b0: 52 45 4c 45 41 53 45 20 6f 75 74 65 72 22 0a 0a  RELEASE outer"..
35c0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
35d0: 2d 74 65 73 74 20 35 30 20 30 20 22 53 41 56 45  -test 50 0 "SAVE
35e0: 50 4f 49 4e 54 20 6f 75 74 65 72 22 0a 77 69 74  POINT outer".wit
35f0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65  hout_rowid3-2-te
3600: 73 74 20 35 31 20 31 20 20 20 22 49 4e 53 45 52  st 51 1   "INSER
3610: 54 20 49 4e 54 4f 20 6c 65 61 66 20 56 41 4c 55  T INTO leaf VALU
3620: 45 53 28 27 66 27 2c 20 34 29 22 0a 77 69 74 68  ES('f', 4)".with
3630: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
3640: 74 20 35 32 20 31 20 20 20 22 53 41 56 45 50 4f  t 52 1   "SAVEPO
3650: 49 4e 54 20 69 6e 6e 65 72 22 0a 77 69 74 68 6f  INT inner".witho
3660: 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74  ut_rowid3-2-test
3670: 20 35 33 20 31 20 20 20 20 20 22 49 4e 53 45 52   53 1     "INSER
3680: 54 20 49 4e 54 4f 20 6c 65 61 66 20 56 41 4c 55  T INTO leaf VALU
3690: 45 53 28 27 67 27 2c 20 34 29 22 0a 77 69 74 68  ES('g', 4)".with
36a0: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
36b0: 74 20 35 34 20 31 20 20 22 52 45 4c 45 41 53 45  t 54 1  "RELEASE
36c0: 20 6f 75 74 65 72 22 20 20 20 46 4b 56 0a 77 69   outer"   FKV.wi
36d0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74  thout_rowid3-2-t
36e0: 65 73 74 20 35 35 20 31 20 20 20 22 52 4f 4c 4c  est 55 1   "ROLL
36f0: 42 41 43 4b 20 54 4f 20 69 6e 6e 65 72 22 0a 77  BACK TO inner".w
3700: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d  ithout_rowid3-2-
3710: 74 65 73 74 20 35 36 20 30 20 20 22 43 4f 4d 4d  test 56 0  "COMM
3720: 49 54 22 20 20 20 20 20 20 20 20 20 20 46 4b 56  IT"          FKV
3730: 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d  .without_rowid3-
3740: 32 2d 74 65 73 74 20 35 37 20 30 20 20 20 22 49  2-test 57 0   "I
3750: 4e 53 45 52 54 20 49 4e 54 4f 20 6e 6f 64 65 20  NSERT INTO node 
3760: 56 41 4c 55 45 53 28 34 2c 20 4e 55 4c 4c 29 22  VALUES(4, NULL)"
3770: 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d  .without_rowid3-
3780: 32 2d 74 65 73 74 20 35 38 20 30 20 22 52 45 4c  2-test 58 0 "REL
3790: 45 41 53 45 20 6f 75 74 65 72 22 0a 77 69 74 68  EASE outer".with
37a0: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
37b0: 74 20 35 39 20 30 20 22 53 45 4c 45 43 54 20 2a  t 59 0 "SELECT *
37c0: 20 46 52 4f 4d 20 6e 6f 64 65 22 20 7b 32 20 7b   FROM node" {2 {
37d0: 7d 20 33 20 32 20 34 20 7b 7d 7d 0a 77 69 74 68  } 3 2 4 {}}.with
37e0: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73  out_rowid3-2-tes
37f0: 74 20 36 30 20 30 20 22 53 45 4c 45 43 54 20 2a  t 60 0 "SELECT *
3800: 20 46 52 4f 4d 20 6c 65 61 66 22 20 7b 61 20 32   FROM leaf" {a 2
3810: 20 64 20 33 20 65 20 33 20 66 20 34 7d 0a 0a 23   d 3 e 3 f 4}..#
3820: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
3830: 65 74 20 6f 66 20 74 65 73 74 73 20 63 68 65 63  et of tests chec
3840: 6b 20 74 68 61 74 20 69 66 20 61 20 73 74 61 74  k that if a stat
3850: 65 6d 65 6e 74 20 74 68 61 74 20 61 66 66 65 63  ement that affec
3860: 74 73 20 0a 23 20 6d 75 6c 74 69 70 6c 65 20 72  ts .# multiple r
3870: 6f 77 73 20 76 69 6f 6c 61 74 65 73 20 73 6f 6d  ows violates som
3880: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
3890: 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 6e 20  nstraints, then 
38a0: 73 74 72 69 6b 65 73 20 61 20 0a 23 20 63 6f 6e  strikes a .# con
38b0: 73 74 72 61 69 6e 74 20 74 68 61 74 20 63 61 75  straint that cau
38c0: 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
38d0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  t-transaction to
38e0: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
38f0: 20 0a 23 20 74 68 65 20 64 65 66 65 72 72 65 64   .# the deferred
3900: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
3910: 74 65 72 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ter is correctly
3920: 20 72 65 73 65 74 20 74 6f 20 74 68 65 20 76 61   reset to the va
3930: 6c 75 65 20 69 74 20 0a 23 20 68 61 64 20 62 65  lue it .# had be
3940: 66 6f 72 65 20 74 68 65 20 73 74 61 74 65 6d 65  fore the stateme
3950: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  nt-transaction w
3960: 61 73 20 6f 70 65 6e 65 64 2e 0a 23 0a 77 69 74  as opened..#.wit
3970: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65  hout_rowid3-2-te
3980: 73 74 20 36 31 20 30 20 22 42 45 47 49 4e 22 0a  st 61 0 "BEGIN".
3990: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
39a0: 2d 74 65 73 74 20 36 32 20 30 20 20 20 22 44 45  -test 62 0   "DE
39b0: 4c 45 54 45 20 46 52 4f 4d 20 6c 65 61 66 22 0a  LETE FROM leaf".
39c0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
39d0: 2d 74 65 73 74 20 36 33 20 30 20 20 20 22 44 45  -test 63 0   "DE
39e0: 4c 45 54 45 20 46 52 4f 4d 20 6e 6f 64 65 22 0a  LETE FROM node".
39f0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
3a00: 2d 74 65 73 74 20 36 34 20 31 20 20 20 22 49 4e  -test 64 1   "IN
3a10: 53 45 52 54 20 49 4e 54 4f 20 6c 65 61 66 20 56  SERT INTO leaf V
3a20: 41 4c 55 45 53 28 27 61 27 2c 20 31 29 22 0a 77  ALUES('a', 1)".w
3a30: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d  ithout_rowid3-2-
3a40: 74 65 73 74 20 36 35 20 31 20 20 20 22 49 4e 53  test 65 1   "INS
3a50: 45 52 54 20 49 4e 54 4f 20 6c 65 61 66 20 56 41  ERT INTO leaf VA
3a60: 4c 55 45 53 28 27 62 27 2c 20 32 29 22 0a 77 69  LUES('b', 2)".wi
3a70: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2d 74  thout_rowid3-2-t
3a80: 65 73 74 20 36 36 20 31 20 20 20 22 49 4e 53 45  est 66 1   "INSE
3a90: 52 54 20 49 4e 54 4f 20 6c 65 61 66 20 56 41 4c  RT INTO leaf VAL
3aa0: 55 45 53 28 27 63 27 2c 20 31 29 22 0a 64 6f 5f  UES('c', 1)".do_
3ab0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
3ac0: 69 64 33 2d 32 2d 74 65 73 74 2d 36 37 20 7b 0a  id3-2-test-67 {.
3ad0: 20 20 63 61 74 63 68 73 71 6c 20 20 20 20 20 20    catchsql      
3ae0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
3af0: 20 6e 6f 64 65 20 53 45 4c 45 43 54 20 70 61 72   node SELECT par
3b00: 65 6e 74 2c 20 33 20 46 52 4f 4d 20 6c 65 61 66  ent, 3 FROM leaf
3b10: 22 0a 7d 20 7b 31 20 7b 55 4e 49 51 55 45 20 63  ".} {1 {UNIQUE c
3b20: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
3b30: 3a 20 6e 6f 64 65 2e 6e 6f 64 65 69 64 7d 7d 0a  : node.nodeid}}.
3b40: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32  without_rowid3-2
3b50: 2d 74 65 73 74 20 36 38 20 30 20 22 43 4f 4d 4d  -test 68 0 "COMM
3b60: 49 54 22 20 20 20 20 20 20 20 20 20 20 20 46 4b  IT"           FK
3b70: 56 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  V.without_rowid3
3b80: 2d 32 2d 74 65 73 74 20 36 39 20 31 20 20 20 22  -2-test 69 1   "
3b90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 6f 64 65  INSERT INTO node
3ba0: 20 56 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 29   VALUES(1, NULL)
3bb0: 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  ".without_rowid3
3bc0: 2d 32 2d 74 65 73 74 20 37 30 20 30 20 20 20 22  -2-test 70 0   "
3bd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 6f 64 65  INSERT INTO node
3be0: 20 56 41 4c 55 45 53 28 32 2c 20 4e 55 4c 4c 29   VALUES(2, NULL)
3bf0: 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  ".without_rowid3
3c00: 2d 32 2d 74 65 73 74 20 37 31 20 30 20 22 43 4f  -2-test 71 0 "CO
3c10: 4d 4d 49 54 22 0a 0a 77 69 74 68 6f 75 74 5f 72  MMIT"..without_r
3c20: 6f 77 69 64 33 2d 32 2d 74 65 73 74 20 37 32 20  owid3-2-test 72 
3c30: 30 20 22 42 45 47 49 4e 22 0a 77 69 74 68 6f 75  0 "BEGIN".withou
3c40: 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20  t_rowid3-2-test 
3c50: 37 33 20 31 20 20 20 22 44 45 4c 45 54 45 20 46  73 1   "DELETE F
3c60: 52 4f 4d 20 6e 6f 64 65 22 0a 77 69 74 68 6f 75  ROM node".withou
3c70: 74 5f 72 6f 77 69 64 33 2d 32 2d 74 65 73 74 20  t_rowid3-2-test 
3c80: 37 34 20 30 20 20 20 22 49 4e 53 45 52 54 20 49  74 0   "INSERT I
3c90: 4e 54 4f 20 6e 6f 64 65 28 6e 6f 64 65 69 64 29  NTO node(nodeid)
3ca0: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
3cb0: 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 6c 65 61   parent FROM lea
3cc0: 66 22 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  f".without_rowid
3cd0: 33 2d 32 2d 74 65 73 74 20 37 35 20 30 20 22 43  3-2-test 75 0 "C
3ce0: 4f 4d 4d 49 54 22 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  OMMIT"..#-------
3cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d30: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
3d40: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 33  without_rowid3-3
3d50: 2e 2a 20 74 65 73 74 20 74 68 61 74 20 61 20 70  .* test that a p
3d60: 72 6f 67 72 61 6d 20 74 68 61 74 20 65 78 65 63  rogram that exec
3d70: 75 74 65 73 20 66 6f 72 65 69 67 6e 20 6b 65 79  utes foreign key
3d80: 0a 23 20 61 63 74 69 6f 6e 73 20 28 43 41 53 43  .# actions (CASC
3d90: 41 44 45 2c 20 53 45 54 20 44 45 46 41 55 4c 54  ADE, SET DEFAULT
3da0: 2c 20 53 45 54 20 4e 55 4c 4c 20 65 74 63 2e 29  , SET NULL etc.)
3db0: 20 6f 72 20 74 65 73 74 73 20 46 4b 20 63 6f 6e   or tests FK con
3dc0: 73 74 72 61 69 6e 74 73 0a 23 20 6f 70 65 6e 73  straints.# opens
3dd0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
3de0: 6e 73 61 63 74 69 6f 6e 20 69 66 20 72 65 71 75  nsaction if requ
3df0: 69 72 65 64 2e 0a 23 0a 23 20 77 69 74 68 6f 75  ired..#.# withou
3e00: 74 5f 72 6f 77 69 64 33 2d 33 2e 31 2e 2a 3a 20  t_rowid3-3.1.*: 
3e10: 54 65 73 74 20 55 50 44 41 54 45 20 73 74 61 74  Test UPDATE stat
3e20: 65 6d 65 6e 74 73 2e 0a 23 20 77 69 74 68 6f 75  ements..# withou
3e30: 74 5f 72 6f 77 69 64 33 2d 33 2e 32 2e 2a 3a 20  t_rowid3-3.2.*: 
3e40: 54 65 73 74 20 44 45 4c 45 54 45 20 73 74 61 74  Test DELETE stat
3e50: 65 6d 65 6e 74 73 2e 0a 23 0a 64 72 6f 70 5f 61  ements..#.drop_a
3e60: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73  ll_tables.do_tes
3e70: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
3e80: 2d 33 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  -3.1.1 {.  execs
3e90: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
3ea0: 54 41 42 4c 45 20 61 62 28 61 20 50 52 49 4d 41  TABLE ab(a PRIMA
3eb0: 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48 4f  RY KEY, b) WITHO
3ec0: 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52  UT rowid;.    CR
3ed0: 45 41 54 45 20 54 41 42 4c 45 20 63 64 28 0a 20  EATE TABLE cd(. 
3ee0: 20 20 20 20 20 63 20 50 52 49 4d 41 52 59 20 4b       c PRIMARY K
3ef0: 45 59 20 52 45 46 45 52 45 4e 43 45 53 20 61 62  EY REFERENCES ab
3f00: 20 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43 41   ON UPDATE CASCA
3f10: 44 45 20 4f 4e 20 44 45 4c 45 54 45 20 43 41 53  DE ON DELETE CAS
3f20: 43 41 44 45 2c 20 0a 20 20 20 20 20 20 64 0a 20  CADE, .      d. 
3f30: 20 20 20 29 20 57 49 54 48 4f 55 54 20 72 6f 77     ) WITHOUT row
3f40: 69 64 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  id;.    CREATE T
3f50: 41 42 4c 45 20 65 66 28 0a 20 20 20 20 20 20 65  ABLE ef(.      e
3f60: 20 52 45 46 45 52 45 4e 43 45 53 20 63 64 20 4f   REFERENCES cd O
3f70: 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45  N UPDATE CASCADE
3f80: 2c 20 0a 20 20 20 20 20 20 66 2c 20 43 48 45 43  , .      f, CHEC
3f90: 4b 20 28 65 21 3d 35 29 0a 20 20 20 20 29 3b 0a  K (e!=5).    );.
3fa0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
3fb0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
3fc0: 33 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  3.1.2 {.  execsq
3fd0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
3fe0: 4e 54 4f 20 61 62 20 56 41 4c 55 45 53 28 31 2c  NTO ab VALUES(1,
3ff0: 20 27 62 27 29 3b 0a 20 20 20 20 49 4e 53 45 52   'b');.    INSER
4000: 54 20 49 4e 54 4f 20 63 64 20 56 41 4c 55 45 53  T INTO cd VALUES
4010: 28 31 2c 20 27 64 27 29 3b 0a 20 20 20 20 49 4e  (1, 'd');.    IN
4020: 53 45 52 54 20 49 4e 54 4f 20 65 66 20 56 41 4c  SERT INTO ef VAL
4030: 55 45 53 28 31 2c 20 27 65 27 29 3b 0a 20 20 7d  UES(1, 'e');.  }
4040: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69  .} {}.do_test wi
4050: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 33 2e 31  thout_rowid3-3.1
4060: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
4070: 7b 20 55 50 44 41 54 45 20 61 62 20 53 45 54 20  { UPDATE ab SET 
4080: 61 20 3d 20 35 20 7d 0a 7d 20 7b 31 20 7b 43 48  a = 5 }.} {1 {CH
4090: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
40a0: 61 69 6c 65 64 3a 20 65 66 7d 7d 0a 64 6f 5f 74  ailed: ef}}.do_t
40b0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
40c0: 64 33 2d 33 2e 31 2e 34 20 7b 0a 20 20 65 78 65  d3-3.1.4 {.  exe
40d0: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
40e0: 46 52 4f 4d 20 61 62 20 7d 0a 7d 20 7b 31 20 62  FROM ab }.} {1 b
40f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
4100: 74 5f 72 6f 77 69 64 33 2d 33 2e 31 2e 34 20 7b  t_rowid3-3.1.4 {
4110: 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47 49 4e  .  execsql BEGIN
4120: 3b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 55  ;.  catchsql { U
4130: 50 44 41 54 45 20 61 62 20 53 45 54 20 61 20 3d  PDATE ab SET a =
4140: 20 35 20 7d 0a 7d 20 7b 31 20 7b 43 48 45 43 4b   5 }.} {1 {CHECK
4150: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
4160: 65 64 3a 20 65 66 7d 7d 0a 64 6f 5f 74 65 73 74  ed: ef}}.do_test
4170: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
4180: 33 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  3.1.5 {.  execsq
4190: 6c 20 43 4f 4d 4d 49 54 3b 0a 20 20 65 78 65 63  l COMMIT;.  exec
41a0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
41b0: 52 4f 4d 20 61 62 3b 20 53 45 4c 45 43 54 20 2a  ROM ab; SELECT *
41c0: 20 46 52 4f 4d 20 63 64 3b 20 53 45 4c 45 43 54   FROM cd; SELECT
41d0: 20 2a 20 46 52 4f 4d 20 65 66 20 7d 0a 7d 20 7b   * FROM ef }.} {
41e0: 31 20 62 20 31 20 64 20 31 20 65 7d 0a 0a 64 6f  1 b 1 d 1 e}..do
41f0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
4200: 77 69 64 33 2d 33 2e 32 2e 31 20 7b 0a 20 20 65  wid3-3.2.1 {.  e
4210: 78 65 63 73 71 6c 20 42 45 47 49 4e 3b 0a 20 20  xecsql BEGIN;.  
4220: 63 61 74 63 68 73 71 6c 20 7b 20 44 45 4c 45 54  catchsql { DELET
4230: 45 20 46 52 4f 4d 20 61 62 20 7d 0a 7d 20 7b 31  E FROM ab }.} {1
4240: 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f   {FOREIGN KEY co
4250: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d  nstraint failed}
4260: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
4270: 74 5f 72 6f 77 69 64 33 2d 33 2e 32 2e 32 20 7b  t_rowid3-3.2.2 {
4280: 0a 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49  .  execsql COMMI
4290: 54 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  T.  execsql { SE
42a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 62 3b 20  LECT * FROM ab; 
42b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 64  SELECT * FROM cd
42c0: 3b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ; SELECT * FROM 
42d0: 65 66 20 7d 0a 7d 20 7b 31 20 62 20 31 20 64 20  ef }.} {1 b 1 d 
42e0: 31 20 65 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  1 e}..#---------
42f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4330: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 77 69  .# Test cases wi
4340: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 34 2e 2a  thout_rowid3-4.*
4350: 20 74 65 73 74 20 74 68 61 74 20 72 65 63 75 72   test that recur
4360: 73 69 76 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  sive foreign key
4370: 20 61 63 74 69 6f 6e 73 20 0a 23 20 28 69 2e 65   actions .# (i.e
4380: 2e 20 43 41 53 43 41 44 45 29 20 61 72 65 20 61  . CASCADE) are a
4390: 6c 6c 6f 77 65 64 20 65 76 65 6e 20 69 66 20 72  llowed even if r
43a0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
43b0: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 2e 0a  s are disabled..
43c0: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
43d0: 73 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  s.do_test withou
43e0: 74 5f 72 6f 77 69 64 33 2d 34 2e 31 20 7b 0a 20  t_rowid3-4.1 {. 
43f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
4400: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 0a  REATE TABLE t1(.
4410: 20 20 20 20 20 20 6e 6f 64 65 20 50 52 49 4d 41        node PRIMA
4420: 52 59 20 4b 45 59 2c 20 0a 20 20 20 20 20 20 70  RY KEY, .      p
4430: 61 72 65 6e 74 20 52 45 46 45 52 45 4e 43 45 53  arent REFERENCES
4440: 20 74 31 20 4f 4e 20 44 45 4c 45 54 45 20 43 41   t1 ON DELETE CA
4450: 53 43 41 44 45 0a 20 20 20 20 29 20 57 49 54 48  SCADE.    ) WITH
4460: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43  OUT rowid;.    C
4470: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 6e  REATE TABLE t2(n
4480: 6f 64 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  ode PRIMARY KEY,
4490: 20 70 61 72 65 6e 74 29 20 57 49 54 48 4f 55 54   parent) WITHOUT
44a0: 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52 45 41   rowid;.    CREA
44b0: 54 45 20 54 52 49 47 47 45 52 20 74 32 74 20 41  TE TRIGGER t2t A
44c0: 46 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74  FTER DELETE ON t
44d0: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 44 45  2 BEGIN.      DE
44e0: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
44f0: 52 45 20 70 61 72 65 6e 74 20 3d 20 6f 6c 64 2e  RE parent = old.
4500: 6e 6f 64 65 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  node;.    END;. 
4510: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4520: 31 20 56 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c  1 VALUES(1, NULL
4530: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4540: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20  TO t1 VALUES(2, 
4550: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
4560: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
4570: 20 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   1);.    INSERT 
4580: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
4590: 2c 20 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 2);.    INSERT
45a0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
45b0: 35 2c 20 32 29 3b 0a 20 20 20 20 49 4e 53 45 52  5, 2);.    INSER
45c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
45d0: 28 36 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45  (6, 3);.    INSE
45e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
45f0: 53 28 37 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53  S(7, 3);.    INS
4600: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
4610: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
4620: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
4630: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 34 2e  ithout_rowid3-4.
4640: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
4650: 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
4660: 5f 74 72 69 67 67 65 72 73 20 3d 20 6f 66 66 20  _triggers = off 
4670: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20  }.  execsql { . 
4680: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
4690: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
46a0: 48 45 52 45 20 6e 6f 64 65 20 3d 20 31 3b 0a 20  HERE node = 1;. 
46b0: 20 20 20 20 20 53 45 4c 45 43 54 20 6e 6f 64 65       SELECT node
46c0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
46d0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  {}.do_test witho
46e0: 75 74 5f 72 6f 77 69 64 33 2d 34 2e 33 20 7b 0a  ut_rowid3-4.3 {.
46f0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
4700: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
4710: 32 20 57 48 45 52 45 20 6e 6f 64 65 20 3d 20 31  2 WHERE node = 1
4720: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6e  ;.      SELECT n
4730: 6f 64 65 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  ode FROM t2;.   
4740: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d   ROLLBACK;.  }.}
4750: 20 7b 34 20 35 20 36 20 37 7d 0a 64 6f 5f 74 65   {4 5 6 7}.do_te
4760: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
4770: 33 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  3-4.4 {.  execsq
4780: 6c 20 7b 20 50 52 41 47 4d 41 20 72 65 63 75 72  l { PRAGMA recur
4790: 73 69 76 65 5f 74 72 69 67 67 65 72 73 20 3d 20  sive_triggers = 
47a0: 6f 6e 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  on }.  execsql {
47b0: 20 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20   .    BEGIN;.   
47c0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
47d0: 31 20 57 48 45 52 45 20 6e 6f 64 65 20 3d 20 31  1 WHERE node = 1
47e0: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6e  ;.      SELECT n
47f0: 6f 64 65 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  ode FROM t1;.  }
4800: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69  .} {}.do_test wi
4810: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 34 2e 33  thout_rowid3-4.3
4820: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
4830: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
4840: 4d 20 74 32 20 57 48 45 52 45 20 6e 6f 64 65 20  M t2 WHERE node 
4850: 3d 20 31 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  = 1;.      SELEC
4860: 54 20 6e 6f 64 65 20 46 52 4f 4d 20 74 32 3b 0a  T node FROM t2;.
4870: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
4880: 7d 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  }.} {}..#-------
4890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
48d0: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
48e0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 35  without_rowid3-5
48f0: 2e 2a 20 76 65 72 69 66 79 20 74 68 61 74 20 74  .* verify that t
4900: 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  he incremental b
4910: 6c 6f 62 20 41 50 49 20 6d 61 79 20 6e 6f 74 0a  lob API may not.
4920: 23 20 77 72 69 74 65 20 74 6f 20 61 20 66 6f 72  # write to a for
4930: 65 69 67 6e 20 6b 65 79 20 63 6f 6c 75 6d 6e 20  eign key column 
4940: 77 68 69 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65  while foreign-ke
4950: 79 73 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 0a  ys are enabled..
4960: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
4970: 73 0a 69 66 63 61 70 61 62 6c 65 20 69 6e 63 72  s.ifcapable incr
4980: 62 6c 6f 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  blob {.  do_test
4990: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
49a0: 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.1 {.    execsq
49b0: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
49c0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
49d0: 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48  ARY KEY, b) WITH
49e0: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  OUT rowid;.     
49f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
4a00: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
4a10: 62 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28  b REFERENCES t1(
4a20: 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69  a)) WITHOUT rowi
4a30: 64 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  d;.      INSERT 
4a40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
4a50: 68 65 6c 6c 6f 27 2c 20 27 77 6f 72 6c 64 27 29  hello', 'world')
4a60: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
4a70: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 6b  NTO t2 VALUES('k
4a80: 65 79 27 2c 20 27 68 65 6c 6c 6f 27 29 3b 0a 20  ey', 'hello');. 
4a90: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
4aa0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
4ab0: 77 69 64 33 2d 35 2e 32 20 7b 0a 20 20 20 20 73  wid3-5.2 {.    s
4ac0: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 20 73  et rc [catch { s
4ad0: 65 74 20 66 64 20 5b 64 62 20 69 6e 63 72 62 6c  et fd [db incrbl
4ae0: 6f 62 20 74 32 20 62 20 31 5d 20 7d 20 6d 73 67  ob t2 b 1] } msg
4af0: 5d 0a 20 20 20 20 6c 69 73 74 20 24 72 63 20 24  ].    list $rc $
4b00: 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 63 61 6e 6e  msg.  } {1 {cann
4b10: 6f 74 20 6f 70 65 6e 20 74 61 62 6c 65 20 77 69  ot open table wi
4b20: 74 68 6f 75 74 20 72 6f 77 69 64 3a 20 74 32 7d  thout rowid: t2}
4b30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
4b40: 6f 75 74 5f 72 6f 77 69 64 33 2d 35 2e 35 20 7b  out_rowid3-5.5 {
4b50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50  .    execsql { P
4b60: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
4b70: 79 73 20 3d 20 6f 6e 20 7d 0a 20 20 7d 20 7b 7d  ys = on }.  } {}
4b80: 0a 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  .}..drop_all_tab
4b90: 6c 65 73 0a 69 66 63 61 70 61 62 6c 65 20 76 61  les.ifcapable va
4ba0: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
4bb0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
4bc0: 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.1 {.    execsq
4bd0: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
4be0: 20 54 41 42 4c 45 20 74 31 28 61 20 52 45 46 45   TABLE t1(a REFE
4bf0: 52 45 4e 43 45 53 20 74 32 28 63 29 2c 20 62 29  RENCES t2(c), b)
4c00: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
4c10: 41 42 4c 45 20 74 32 28 63 20 55 4e 49 51 55 45  ABLE t2(c UNIQUE
4c20: 2c 20 62 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  , b);.      INSE
4c30: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
4c40: 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 49  S(1, 2);.      I
4c50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
4c60: 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20  LUES(1, 2);.    
4c70: 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 7d 0a    VACUUM;.    }.
4c80: 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d    } {}.}..#-----
4c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4cd0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68 61 74  ----.# Test that
4ce0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
4cf0: 74 6f 20 75 73 65 20 61 6e 20 49 4e 54 20 50 52  to use an INT PR
4d00: 49 4d 41 52 59 20 4b 45 59 20 61 73 20 74 68 65  IMARY KEY as the
4d10: 20 63 68 69 6c 64 20 6b 65 79 0a 23 20 6f 66 20   child key.# of 
4d20: 61 20 66 6f 72 65 69 67 6e 20 63 6f 6e 73 74 72  a foreign constr
4d30: 61 69 6e 74 2e 0a 23 20 0a 64 72 6f 70 5f 61 6c  aint..# .drop_al
4d40: 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73 74  l_tables.do_test
4d50: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
4d60: 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.1 {.  execsql 
4d70: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
4d80: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
4d90: 4b 45 59 2c 20 62 29 20 57 49 54 48 4f 55 54 20  KEY, b) WITHOUT 
4da0: 72 6f 77 69 64 3b 0a 20 20 20 20 43 52 45 41 54  rowid;.    CREAT
4db0: 45 20 54 41 42 4c 45 20 74 32 28 63 20 49 4e 54  E TABLE t2(c INT
4dc0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 52 45 46   PRIMARY KEY REF
4dd0: 45 52 45 4e 43 45 53 20 74 31 2c 20 62 29 20 57  ERENCES t1, b) W
4de0: 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20  ITHOUT rowid;.  
4df0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
4e00: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 37 2e  ithout_rowid3-7.
4e10: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
4e20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
4e30: 56 41 4c 55 45 53 28 31 2c 20 27 41 27 29 3b 20  VALUES(1, 'A'); 
4e40: 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20  }.} {1 {FOREIGN 
4e50: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
4e60: 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  ailed}}.do_test 
4e70: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 37  without_rowid3-7
4e80: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
4e90: 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54   .    INSERT INT
4ea0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  O t1 VALUES(1, 2
4eb0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4ec0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20  TO t1 VALUES(2, 
4ed0: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
4ee0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
4ef0: 20 27 41 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a   'A');.  }.} {}.
4f00: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
4f10: 72 6f 77 69 64 33 2d 37 2e 34 20 7b 0a 20 20 65  rowid3-7.4 {.  e
4f20: 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20  xecsql { UPDATE 
4f30: 74 32 20 53 45 54 20 63 20 3d 20 32 20 7d 0a 7d  t2 SET c = 2 }.}
4f40: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   {}.do_test with
4f50: 6f 75 74 5f 72 6f 77 69 64 33 2d 37 2e 35 20 7b  out_rowid3-7.5 {
4f60: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 55 50  .  catchsql { UP
4f70: 44 41 54 45 20 74 32 20 53 45 54 20 63 20 3d 20  DATE t2 SET c = 
4f80: 33 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47  3 }.} {1 {FOREIG
4f90: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
4fa0: 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73   failed}}.do_tes
4fb0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
4fc0: 2d 37 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71  -7.6 {.  catchsq
4fd0: 6c 20 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  l { DELETE FROM 
4fe0: 74 31 20 57 48 45 52 45 20 61 20 3d 20 32 20 7d  t1 WHERE a = 2 }
4ff0: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
5000: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
5010: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
5020: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 37 2e  ithout_rowid3-7.
5030: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  7 {.  execsql { 
5040: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
5050: 48 45 52 45 20 61 20 3d 20 31 20 7d 0a 7d 20 7b  HERE a = 1 }.} {
5060: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
5070: 74 5f 72 6f 77 69 64 33 2d 37 2e 38 20 7b 0a 20  t_rowid3-7.8 {. 
5080: 20 63 61 74 63 68 73 71 6c 20 7b 20 55 50 44 41   catchsql { UPDA
5090: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 33 20  TE t1 SET a = 3 
50a0: 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20  }.} {1 {FOREIGN 
50b0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
50c0: 61 69 6c 65 64 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  ailed}}..#------
50d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5110: 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68 61 74 20  ---.# Test that 
5120: 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  it is not possib
5130: 6c 65 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  le to enable/dis
5140: 61 62 6c 65 20 46 4b 20 73 75 70 70 6f 72 74 20  able FK support 
5150: 77 68 69 6c 65 20 61 0a 23 20 74 72 61 6e 73 61  while a.# transa
5160: 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2e 0a 23  ction is open..#
5170: 20 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65   .drop_all_table
5180: 73 0a 70 72 6f 63 20 77 69 74 68 6f 75 74 5f 72  s.proc without_r
5190: 6f 77 69 64 33 2d 38 2d 74 65 73 74 20 7b 74 6e  owid3-8-test {tn
51a0: 20 7a 53 71 6c 20 76 61 6c 75 65 7d 20 7b 0a 20   zSql value} {. 
51b0: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
51c0: 5f 72 6f 77 69 64 33 2d 32 2e 38 2e 24 74 6e 2e  _rowid3-2.8.$tn.
51d0: 31 20 5b 6c 69 73 74 20 65 78 65 63 73 71 6c 20  1 [list execsql 
51e0: 24 7a 53 71 6c 5d 20 7b 7d 0a 20 20 64 6f 5f 74  $zSql] {}.  do_t
51f0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
5200: 64 33 2d 32 2e 38 2e 24 74 6e 2e 32 20 7b 20 65  d3-2.8.$tn.2 { e
5210: 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 66  xecsql "PRAGMA f
5220: 6f 72 65 69 67 6e 5f 6b 65 79 73 22 20 7d 20 24  oreign_keys" } $
5230: 76 61 6c 75 65 0a 7d 0a 77 69 74 68 6f 75 74 5f  value.}.without_
5240: 72 6f 77 69 64 33 2d 38 2d 74 65 73 74 20 20 31  rowid3-8-test  1
5250: 20 7b 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67   { PRAGMA foreig
5260: 6e 5f 6b 65 79 73 20 3d 20 30 20 20 20 20 20 7d  n_keys = 0     }
5270: 20 30 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64   0.without_rowid
5280: 33 2d 38 2d 74 65 73 74 20 20 32 20 7b 20 50 52  3-8-test  2 { PR
5290: 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
52a0: 73 20 3d 20 31 20 20 20 20 20 7d 20 31 0a 77 69  s = 1     } 1.wi
52b0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 38 2d 74  thout_rowid3-8-t
52c0: 65 73 74 20 20 33 20 7b 20 42 45 47 49 4e 20 20  est  3 { BEGIN  
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 20 20 20 20 20 7d 20 31 0a 77 69 74 68 6f 75 74       } 1.without
52f0: 5f 72 6f 77 69 64 33 2d 38 2d 74 65 73 74 20 20  _rowid3-8-test  
5300: 34 20 7b 20 50 52 41 47 4d 41 20 66 6f 72 65 69  4 { PRAGMA forei
5310: 67 6e 5f 6b 65 79 73 20 3d 20 30 20 20 20 20 20  gn_keys = 0     
5320: 7d 20 31 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69  } 1.without_rowi
5330: 64 33 2d 38 2d 74 65 73 74 20 20 35 20 7b 20 43  d3-8-test  5 { C
5340: 4f 4d 4d 49 54 20 20 20 20 20 20 20 20 20 20 20  OMMIT           
5350: 20 20 20 20 20 20 20 20 20 20 20 7d 20 31 0a 77             } 1.w
5360: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 38 2d  ithout_rowid3-8-
5370: 74 65 73 74 20 20 36 20 7b 20 50 52 41 47 4d 41  test  6 { PRAGMA
5380: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20   foreign_keys = 
5390: 30 20 20 20 20 20 7d 20 30 0a 77 69 74 68 6f 75  0     } 0.withou
53a0: 74 5f 72 6f 77 69 64 33 2d 38 2d 74 65 73 74 20  t_rowid3-8-test 
53b0: 20 37 20 7b 20 42 45 47 49 4e 20 20 20 20 20 20   7 { BEGIN      
53c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53d0: 20 7d 20 30 0a 77 69 74 68 6f 75 74 5f 72 6f 77   } 0.without_row
53e0: 69 64 33 2d 38 2d 74 65 73 74 20 20 38 20 7b 20  id3-8-test  8 { 
53f0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
5400: 65 79 73 20 3d 20 31 20 20 20 20 20 7d 20 30 0a  eys = 1     } 0.
5410: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 38  without_rowid3-8
5420: 2d 74 65 73 74 20 20 39 20 7b 20 43 4f 4d 4d 49  -test  9 { COMMI
5430: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
5440: 20 20 20 20 20 20 20 7d 20 30 0a 77 69 74 68 6f         } 0.witho
5450: 75 74 5f 72 6f 77 69 64 33 2d 38 2d 74 65 73 74  ut_rowid3-8-test
5460: 20 31 30 20 7b 20 50 52 41 47 4d 41 20 66 6f 72   10 { PRAGMA for
5470: 65 69 67 6e 5f 6b 65 79 73 20 3d 20 31 20 20 20  eign_keys = 1   
5480: 20 20 7d 20 31 0a 77 69 74 68 6f 75 74 5f 72 6f    } 1.without_ro
5490: 77 69 64 33 2d 38 2d 74 65 73 74 20 31 31 20 7b  wid3-8-test 11 {
54a0: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
54b0: 6b 65 79 73 20 3d 20 6f 66 66 20 20 20 7d 20 30  keys = off   } 0
54c0: 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d  .without_rowid3-
54d0: 38 2d 74 65 73 74 20 31 32 20 7b 20 50 52 41 47  8-test 12 { PRAG
54e0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
54f0: 3d 20 6f 6e 20 20 20 20 7d 20 31 0a 77 69 74 68  = on    } 1.with
5500: 6f 75 74 5f 72 6f 77 69 64 33 2d 38 2d 74 65 73  out_rowid3-8-tes
5510: 74 20 31 33 20 7b 20 50 52 41 47 4d 41 20 66 6f  t 13 { PRAGMA fo
5520: 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 6e 6f 20  reign_keys = no 
5530: 20 20 20 7d 20 30 0a 77 69 74 68 6f 75 74 5f 72     } 0.without_r
5540: 6f 77 69 64 33 2d 38 2d 74 65 73 74 20 31 34 20  owid3-8-test 14 
5550: 7b 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e  { PRAGMA foreign
5560: 5f 6b 65 79 73 20 3d 20 79 65 73 20 20 20 7d 20  _keys = yes   } 
5570: 31 0a 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  1.without_rowid3
5580: 2d 38 2d 74 65 73 74 20 31 35 20 7b 20 50 52 41  -8-test 15 { PRA
5590: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73  GMA foreign_keys
55a0: 20 3d 20 66 61 6c 73 65 20 7d 20 30 0a 77 69 74   = false } 0.wit
55b0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 38 2d 74 65  hout_rowid3-8-te
55c0: 73 74 20 31 36 20 7b 20 50 52 41 47 4d 41 20 66  st 16 { PRAGMA f
55d0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 74 72  oreign_keys = tr
55e0: 75 65 20 20 7d 20 31 0a 0a 23 2d 2d 2d 2d 2d 2d  ue  } 1..#------
55f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5630: 2d 2d 2d 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  ---.# The follow
5640: 69 6e 67 20 74 65 73 74 73 2c 20 77 69 74 68 6f  ing tests, witho
5650: 75 74 5f 72 6f 77 69 64 33 2d 39 2e 2a 2c 20 74  ut_rowid3-9.*, t
5660: 65 73 74 20 53 45 54 20 44 45 46 41 55 4c 54 20  est SET DEFAULT 
5670: 61 63 74 69 6f 6e 73 2e 0a 23 0a 64 72 6f 70 5f  actions..#.drop_
5680: 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65  all_tables.do_te
5690: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
56a0: 33 2d 39 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  3-9.1.1 {.  exec
56b0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
56c0: 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 20   TABLE t1(a INT 
56d0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 20  PRIMARY KEY, b) 
56e0: 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20  WITHOUT rowid;. 
56f0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5700: 74 32 28 0a 20 20 20 20 20 20 63 20 49 4e 54 20  t2(.      c INT 
5710: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20  PRIMARY KEY,.   
5720: 20 20 20 64 20 49 4e 54 45 47 45 52 20 44 45 46     d INTEGER DEF
5730: 41 55 4c 54 20 31 20 52 45 46 45 52 45 4e 43 45  AULT 1 REFERENCE
5740: 53 20 74 31 20 4f 4e 20 44 45 4c 45 54 45 20 53  S t1 ON DELETE S
5750: 45 54 20 44 45 46 41 55 4c 54 0a 20 20 20 20 29  ET DEFAULT.    )
5760: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
5770: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
5780: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  t1;.  }.} {}.do_
5790: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
57a0: 69 64 33 2d 39 2e 31 2e 32 20 7b 0a 20 20 65 78  id3-9.1.2 {.  ex
57b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
57c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
57d0: 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20  S(1, 'one');.   
57e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
57f0: 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29  VALUES(2, 'two')
5800: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
5810: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 20 32  O t2 VALUES(1, 2
5820: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
5830: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44 45 4c  FROM t2;.    DEL
5840: 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ETE FROM t1 WHER
5850: 45 20 61 20 3d 20 32 3b 0a 20 20 20 20 53 45 4c  E a = 2;.    SEL
5860: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
5870: 20 7d 0a 7d 20 7b 31 20 32 20 31 20 31 7d 0a 64   }.} {1 2 1 1}.d
5880: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
5890: 6f 77 69 64 33 2d 39 2e 31 2e 33 20 7b 0a 20 20  owid3-9.1.3 {.  
58a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
58b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
58c0: 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20  UES(2, 'two');. 
58d0: 20 20 20 55 50 44 41 54 45 20 74 32 20 53 45 54     UPDATE t2 SET
58e0: 20 64 20 3d 20 32 3b 0a 20 20 20 20 44 45 4c 45   d = 2;.    DELE
58f0: 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  TE FROM t1 WHERE
5900: 20 61 20 3d 20 31 3b 0a 20 20 20 20 53 45 4c 45   a = 1;.    SELE
5910: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
5920: 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73  }.} {1 2}.do_tes
5930: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
5940: 2d 39 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  -9.1.4 {.  execs
5950: 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  ql { SELECT * FR
5960: 4f 4d 20 74 31 20 7d 0a 7d 20 7b 32 20 74 77 6f  OM t1 }.} {2 two
5970: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
5980: 74 5f 72 6f 77 69 64 33 2d 39 2e 31 2e 35 20 7b  t_rowid3-9.1.5 {
5990: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 45  .  catchsql { DE
59a0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d  LETE FROM t1 }.}
59b0: 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59   {1 {FOREIGN KEY
59c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
59d0: 65 64 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 69  ed}}..do_test wi
59e0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 39 2e 32  thout_rowid3-9.2
59f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
5a00: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
5a10: 45 20 70 70 28 61 2c 20 62 2c 20 63 2c 20 50 52  E pp(a, b, c, PR
5a20: 49 4d 41 52 59 20 4b 45 59 28 62 2c 20 63 29 29  IMARY KEY(b, c))
5a30: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
5a40: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
5a50: 20 63 63 28 64 20 44 45 46 41 55 4c 54 20 33 2c   cc(d DEFAULT 3,
5a60: 20 65 20 44 45 46 41 55 4c 54 20 31 2c 20 66 20   e DEFAULT 1, f 
5a70: 44 45 46 41 55 4c 54 20 32 2c 0a 20 20 20 20 20  DEFAULT 2,.     
5a80: 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 66     FOREIGN KEY(f
5a90: 2c 20 64 29 20 52 45 46 45 52 45 4e 43 45 53 20  , d) REFERENCES 
5aa0: 70 70 20 0a 20 20 20 20 20 20 20 20 4f 4e 20 55  pp .        ON U
5ab0: 50 44 41 54 45 20 53 45 54 20 44 45 46 41 55 4c  PDATE SET DEFAUL
5ac0: 54 20 0a 20 20 20 20 20 20 20 20 4f 4e 20 44 45  T .        ON DE
5ad0: 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 0a 20 20  LETE SET NULL.  
5ae0: 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20    );.    INSERT 
5af0: 49 4e 54 4f 20 70 70 20 56 41 4c 55 45 53 28 31  INTO pp VALUES(1
5b00: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53  , 2, 3);.    INS
5b10: 45 52 54 20 49 4e 54 4f 20 70 70 20 56 41 4c 55  ERT INTO pp VALU
5b20: 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a 20 20 20  ES(4, 5, 6);.   
5b30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 70 20   INSERT INTO pp 
5b40: 56 41 4c 55 45 53 28 37 2c 20 38 2c 20 39 29 3b  VALUES(7, 8, 9);
5b50: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5b60: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
5b70: 2d 39 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  -9.2.2 {.  execs
5b80: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
5b90: 49 4e 54 4f 20 63 63 20 56 41 4c 55 45 53 28 36  INTO cc VALUES(6
5ba0: 2c 20 27 41 27 2c 20 35 29 3b 0a 20 20 20 20 49  , 'A', 5);.    I
5bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 63 63 20 56 41  NSERT INTO cc VA
5bc0: 4c 55 45 53 28 36 2c 20 27 42 27 2c 20 35 29 3b  LUES(6, 'B', 5);
5bd0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5be0: 20 63 63 20 56 41 4c 55 45 53 28 39 2c 20 27 41   cc VALUES(9, 'A
5bf0: 27 2c 20 38 29 3b 0a 20 20 20 20 49 4e 53 45 52  ', 8);.    INSER
5c00: 54 20 49 4e 54 4f 20 63 63 20 56 41 4c 55 45 53  T INTO cc VALUES
5c10: 28 39 2c 20 27 42 27 2c 20 38 29 3b 0a 20 20 20  (9, 'B', 8);.   
5c20: 20 55 50 44 41 54 45 20 70 70 20 53 45 54 20 62   UPDATE pp SET b
5c30: 20 3d 20 31 20 57 48 45 52 45 20 61 20 3d 20 37   = 1 WHERE a = 7
5c40: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
5c50: 52 4f 4d 20 63 63 3b 0a 20 20 7d 0a 7d 20 7b 36  ROM cc;.  }.} {6
5c60: 20 41 20 35 20 36 20 42 20 35 20 33 20 41 20 32   A 5 6 B 5 3 A 2
5c70: 20 33 20 42 20 32 7d 0a 64 6f 5f 74 65 73 74 20   3 B 2}.do_test 
5c80: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 39  without_rowid3-9
5c90: 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.3 {.  execsql
5ca0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
5cb0: 4f 4d 20 70 70 20 57 48 45 52 45 20 61 20 3d 20  OM pp WHERE a = 
5cc0: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
5cd0: 46 52 4f 4d 20 63 63 3b 0a 20 20 7d 0a 7d 20 7b  FROM cc;.  }.} {
5ce0: 7b 7d 20 41 20 7b 7d 20 7b 7d 20 42 20 7b 7d 20  {} A {} {} B {} 
5cf0: 33 20 41 20 32 20 33 20 42 20 32 7d 0a 0a 23 2d  3 A 2 3 B 2}..#-
5d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d40: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66  --------.# The f
5d50: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 2c 20  ollowing tests, 
5d60: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
5d70: 30 2e 2a 2c 20 74 65 73 74 20 22 66 6f 72 65 69  0.*, test "forei
5d80: 67 6e 20 6b 65 79 20 6d 69 73 6d 61 74 63 68 22  gn key mismatch"
5d90: 20 61 6e 64 20 0a 23 20 6f 74 68 65 72 20 65 72   and .# other er
5da0: 72 6f 72 73 2e 0a 23 0a 73 65 74 20 74 6e 20 30  rors..#.set tn 0
5db0: 0a 66 6f 72 65 61 63 68 20 7a 53 71 6c 20 5b 6c  .foreach zSql [l
5dc0: 69 73 74 20 7b 0a 20 20 43 52 45 41 54 45 20 54  ist {.  CREATE T
5dd0: 41 42 4c 45 20 70 28 61 20 50 52 49 4d 41 52 59  ABLE p(a PRIMARY
5de0: 20 4b 45 59 2c 20 62 29 20 57 49 54 48 4f 55 54   KEY, b) WITHOUT
5df0: 20 72 6f 77 69 64 3b 0a 20 20 43 52 45 41 54 45   rowid;.  CREATE
5e00: 20 54 41 42 4c 45 20 63 28 78 20 52 45 46 45 52   TABLE c(x REFER
5e10: 45 4e 43 45 53 20 70 28 63 29 29 3b 0a 7d 20 7b  ENCES p(c));.} {
5e20: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
5e30: 63 28 78 20 52 45 46 45 52 45 4e 43 45 53 20 76  c(x REFERENCES v
5e40: 28 79 29 29 3b 0a 20 20 43 52 45 41 54 45 20 56  (y));.  CREATE V
5e50: 49 45 57 20 76 20 41 53 20 53 45 4c 45 43 54 20  IEW v AS SELECT 
5e60: 78 20 41 53 20 79 20 46 52 4f 4d 20 63 3b 0a 7d  x AS y FROM c;.}
5e70: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
5e80: 45 20 70 28 61 2c 20 62 2c 20 50 52 49 4d 41 52  E p(a, b, PRIMAR
5e90: 59 20 4b 45 59 28 61 2c 20 62 29 29 20 57 49 54  Y KEY(a, b)) WIT
5ea0: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 43 52  HOUT rowid;.  CR
5eb0: 45 41 54 45 20 54 41 42 4c 45 20 63 28 78 20 52  EATE TABLE c(x R
5ec0: 45 46 45 52 45 4e 43 45 53 20 70 29 3b 0a 7d 20  EFERENCES p);.} 
5ed0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
5ee0: 20 70 28 61 20 43 4f 4c 4c 41 54 45 20 62 69 6e   p(a COLLATE bin
5ef0: 61 72 79 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  ary, b);.  CREAT
5f00: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 69  E UNIQUE INDEX i
5f10: 20 4f 4e 20 70 28 61 20 43 4f 4c 4c 41 54 45 20   ON p(a COLLATE 
5f20: 6e 6f 63 61 73 65 29 3b 0a 20 20 43 52 45 41 54  nocase);.  CREAT
5f30: 45 20 54 41 42 4c 45 20 63 28 78 20 52 45 46 45  E TABLE c(x REFE
5f40: 52 45 4e 43 45 53 20 70 28 61 29 29 3b 0a 7d 5d  RENCES p(a));.}]
5f50: 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61   {.  drop_all_ta
5f60: 62 6c 65 73 0a 20 20 64 6f 5f 74 65 73 74 20 77  bles.  do_test w
5f70: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 30  ithout_rowid3-10
5f80: 2e 31 2e 5b 69 6e 63 72 20 74 6e 5d 20 7b 0a 20  .1.[incr tn] {. 
5f90: 20 20 20 65 78 65 63 73 71 6c 20 24 7a 53 71 6c     execsql $zSql
5fa0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20  .    catchsql { 
5fb0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 20 44 45  INSERT INTO c DE
5fc0: 46 41 55 4c 54 20 56 41 4c 55 45 53 20 7d 0a 20  FAULT VALUES }. 
5fd0: 20 7d 20 7b 2f 31 20 7b 66 6f 72 65 69 67 6e 20   } {/1 {foreign 
5fe0: 6b 65 79 20 6d 69 73 6d 61 74 63 68 20 2d 20 22  key mismatch - "
5ff0: 63 22 20 72 65 66 65 72 65 6e 63 69 6e 67 20 22  c" referencing "
6000: 2e 22 7d 2f 7d 0a 7d 0a 0a 23 20 22 72 6f 77 69  ."}/}.}..# "rowi
6010: 64 22 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  d" cannot be use
6020: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 63  d as part of a c
6030: 68 69 6c 64 20 6f 72 20 70 61 72 65 6e 74 20 6b  hild or parent k
6040: 65 79 20 64 65 66 69 6e 69 74 69 6f 6e 20 0a 23  ey definition .#
6050: 20 75 6e 6c 65 73 73 20 69 74 20 68 61 70 70 65   unless it happe
6060: 6e 73 20 74 6f 20 62 65 20 74 68 65 20 6e 61 6d  ns to be the nam
6070: 65 20 6f 66 20 61 6e 20 65 78 70 6c 69 63 69 74  e of an explicit
6080: 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75  ly declared colu
6090: 6d 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 69  mn..#.do_test wi
60a0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 30 2e  thout_rowid3-10.
60b0: 32 2e 31 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c  2.1 {.  drop_all
60c0: 5f 74 61 62 6c 65 73 0a 20 20 63 61 74 63 68 73  _tables.  catchs
60d0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
60e0: 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41  TABLE t1(a PRIMA
60f0: 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48 4f  RY KEY, b) WITHO
6100: 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52  UT rowid;.    CR
6110: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 63 2c  EATE TABLE t2(c,
6120: 20 64 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28   d, FOREIGN KEY(
6130: 72 6f 77 69 64 29 20 52 45 46 45 52 45 4e 43 45  rowid) REFERENCE
6140: 53 20 74 31 28 61 29 29 3b 0a 20 20 7d 0a 7d 20  S t1(a));.  }.} 
6150: 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c 75  {1 {unknown colu
6160: 6d 6e 20 22 72 6f 77 69 64 22 20 69 6e 20 66 6f  mn "rowid" in fo
6170: 72 65 69 67 6e 20 6b 65 79 20 64 65 66 69 6e 69  reign key defini
6180: 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  tion}}.do_test w
6190: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 30  ithout_rowid3-10
61a0: 2e 32 2e 32 20 7b 0a 20 20 64 72 6f 70 5f 61 6c  .2.2 {.  drop_al
61b0: 6c 5f 74 61 62 6c 65 73 0a 20 20 63 61 74 63 68  l_tables.  catch
61c0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
61d0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
61e0: 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48  ARY KEY, b) WITH
61f0: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43  OUT rowid;.    C
6200: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 72  REATE TABLE t2(r
6210: 6f 77 69 64 2c 20 64 2c 20 46 4f 52 45 49 47 4e  owid, d, FOREIGN
6220: 20 4b 45 59 28 72 6f 77 69 64 29 20 52 45 46 45   KEY(rowid) REFE
6230: 52 45 4e 43 45 53 20 74 31 28 61 29 29 3b 0a 20  RENCES t1(a));. 
6240: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6250: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
6260: 64 33 2d 31 30 2e 32 2e 31 20 7b 0a 20 20 64 72  d3-10.2.1 {.  dr
6270: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 20 20  op_all_tables.  
6280: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
6290: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
62a0: 2c 20 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , b);.    CREATE
62b0: 20 54 41 42 4c 45 20 74 32 28 63 2c 20 64 2c 20   TABLE t2(c, d, 
62c0: 46 4f 52 45 49 47 4e 20 4b 45 59 28 63 29 20 52  FOREIGN KEY(c) R
62d0: 45 46 45 52 45 4e 43 45 53 20 74 31 28 72 6f 77  EFERENCES t1(row
62e0: 69 64 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  id));.    INSERT
62f0: 20 49 4e 54 4f 20 74 31 28 72 6f 77 69 64 2c 20   INTO t1(rowid, 
6300: 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c 20  a, b) VALUES(1, 
6310: 31 2c 20 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  1, 1);.    INSER
6320: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
6330: 28 31 2c 20 31 29 3b 0a 20 20 7d 0a 7d 20 7b 31  (1, 1);.  }.} {1
6340: 20 7b 66 6f 72 65 69 67 6e 20 6b 65 79 20 6d 69   {foreign key mi
6350: 73 6d 61 74 63 68 20 2d 20 22 74 32 22 20 72 65  smatch - "t2" re
6360: 66 65 72 65 6e 63 69 6e 67 20 22 74 31 22 7d 7d  ferencing "t1"}}
6370: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
6380: 5f 72 6f 77 69 64 33 2d 31 30 2e 32 2e 32 20 7b  _rowid3-10.2.2 {
6390: 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .  drop_all_tabl
63a0: 65 73 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  es.  catchsql {.
63b0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
63c0: 20 74 31 28 72 6f 77 69 64 20 50 52 49 4d 41 52   t1(rowid PRIMAR
63d0: 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48 4f 55  Y KEY, b) WITHOU
63e0: 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52 45  T rowid;.    CRE
63f0: 41 54 45 20 54 41 42 4c 45 20 74 32 28 63 2c 20  ATE TABLE t2(c, 
6400: 64 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 63  d, FOREIGN KEY(c
6410: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28  ) REFERENCES t1(
6420: 72 6f 77 69 64 29 29 3b 0a 20 20 20 20 49 4e 53  rowid));.    INS
6430: 45 52 54 20 49 4e 54 4f 20 74 31 28 72 6f 77 69  ERT INTO t1(rowi
6440: 64 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c 20  d, b) VALUES(1, 
6450: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
6460: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
6470: 20 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d   1);.  }.} {0 {}
6480: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
6490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
64d0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
64e0: 65 73 74 73 2c 20 77 69 74 68 6f 75 74 5f 72 6f  ests, without_ro
64f0: 77 69 64 33 2d 31 31 2e 2a 2c 20 74 65 73 74 20  wid3-11.*, test 
6500: 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 2e  CASCADE actions.
6510: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
6520: 65 73 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  es.do_test witho
6530: 75 74 5f 72 6f 77 69 64 33 2d 31 31 2e 31 2e 31  ut_rowid3-11.1.1
6540: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6550: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
6560: 74 31 28 61 20 49 4e 54 20 50 52 49 4d 41 52 59  t1(a INT PRIMARY
6570: 20 4b 45 59 2c 20 62 29 20 57 49 54 48 4f 55 54   KEY, b) WITHOUT
6580: 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52 45 41   rowid;.    CREA
6590: 54 45 20 54 41 42 4c 45 20 74 32 28 63 2c 20 64  TE TABLE t2(c, d
65a0: 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 63 29  , FOREIGN KEY(c)
65b0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28 61   REFERENCES t1(a
65c0: 29 20 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43  ) ON UPDATE CASC
65d0: 41 44 45 29 3b 0a 0a 20 20 20 20 49 4e 53 45 52  ADE);..    INSER
65e0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
65f0: 28 31 30 2c 20 31 30 30 29 3b 0a 20 20 20 20 49  (10, 100);.    I
6600: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
6610: 4c 55 45 53 28 31 30 2c 20 31 30 30 29 3b 0a 20  LUES(10, 100);. 
6620: 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54     UPDATE t1 SET
6630: 20 61 20 3d 20 31 35 3b 0a 20 20 20 20 53 45 4c   a = 15;.    SEL
6640: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
6650: 20 7d 0a 7d 20 7b 31 35 20 31 30 30 7d 0a 0a 23   }.} {15 100}..#
6660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20  ---------.# The 
66b0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 2c  following tests,
66c0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
66d0: 31 32 2e 2a 2c 20 74 65 73 74 20 52 45 53 54 52  12.*, test RESTR
66e0: 49 43 54 20 61 63 74 69 6f 6e 73 2e 0a 23 0a 64  ICT actions..#.d
66f0: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
6700: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
6710: 6f 77 69 64 33 2d 31 32 2e 31 2e 31 20 7b 0a 20  owid3-12.1.1 {. 
6720: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
6730: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
6740: 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29  , b PRIMARY KEY)
6750: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
6760: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6770: 20 74 32 28 0a 20 20 20 20 20 20 78 20 52 45 46   t2(.      x REF
6780: 45 52 45 4e 43 45 53 20 74 31 20 4f 4e 20 55 50  ERENCES t1 ON UP
6790: 44 41 54 45 20 52 45 53 54 52 49 43 54 20 44 45  DATE RESTRICT DE
67a0: 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c  FERRABLE INITIAL
67b0: 4c 59 20 44 45 46 45 52 52 45 44 20 0a 20 20 20  LY DEFERRED .   
67c0: 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49   );.    INSERT I
67d0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
67e0: 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53   'one');.    INS
67f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6800: 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20  ES(2, 'two');.  
6810: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6820: 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65   VALUES(3, 'thre
6830: 65 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  e');.  }.} {}.do
6840: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
6850: 77 69 64 33 2d 31 32 2e 31 2e 32 20 7b 20 0a 20  wid3-12.1.2 { . 
6860: 20 65 78 65 63 73 71 6c 20 22 42 45 47 49 4e 22   execsql "BEGIN"
6870: 0a 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45  .  execsql "INSE
6880: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
6890: 53 28 27 74 77 6f 27 29 22 0a 7d 20 7b 7d 0a 64  S('two')".} {}.d
68a0: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
68b0: 6f 77 69 64 33 2d 31 32 2e 31 2e 33 20 7b 20 0a  owid3-12.1.3 { .
68c0: 20 20 65 78 65 63 73 71 6c 20 22 55 50 44 41 54    execsql "UPDAT
68d0: 45 20 74 31 20 53 45 54 20 62 20 3d 20 27 66 6f  E t1 SET b = 'fo
68e0: 75 72 27 20 57 48 45 52 45 20 62 20 3d 20 27 6f  ur' WHERE b = 'o
68f0: 6e 65 27 22 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ne'".} {}.do_tes
6900: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
6910: 2d 31 32 2e 31 2e 34 20 7b 20 0a 20 20 63 61 74  -12.1.4 { .  cat
6920: 63 68 73 71 6c 20 22 55 50 44 41 54 45 20 74 31  chsql "UPDATE t1
6930: 20 53 45 54 20 62 20 3d 20 27 66 69 76 65 27 20   SET b = 'five' 
6940: 57 48 45 52 45 20 62 20 3d 20 27 74 77 6f 27 22  WHERE b = 'two'"
6950: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
6960: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
6970: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
6980: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32  ithout_rowid3-12
6990: 2e 31 2e 35 20 7b 20 0a 20 20 65 78 65 63 73 71  .1.5 { .  execsq
69a0: 6c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l "DELETE FROM t
69b0: 31 20 57 48 45 52 45 20 62 20 3d 20 27 74 77 6f  1 WHERE b = 'two
69c0: 27 22 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  '".} {}.do_test 
69d0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
69e0: 32 2e 31 2e 36 20 7b 20 0a 20 20 63 61 74 63 68  2.1.6 { .  catch
69f0: 73 71 6c 20 22 43 4f 4d 4d 49 54 22 0a 7d 20 7b  sql "COMMIT".} {
6a00: 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  1 {FOREIGN KEY c
6a10: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
6a20: 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  }}.do_test witho
6a30: 75 74 5f 72 6f 77 69 64 33 2d 31 32 2e 31 2e 37  ut_rowid3-12.1.7
6a40: 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   { .  execsql {.
6a50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6a60: 74 31 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  t1 VALUES(2, 'tw
6a70: 6f 27 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  o');.    COMMIT;
6a80: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 72 6f 70 5f  .  }.} {}..drop_
6a90: 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65  all_tables.do_te
6aa0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
6ab0: 33 2d 31 32 2e 32 2e 31 20 7b 0a 20 20 65 78 65  3-12.2.1 {.  exe
6ac0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
6ad0: 45 20 54 41 42 4c 45 20 74 31 28 78 20 43 4f 4c  E TABLE t1(x COL
6ae0: 4c 41 54 45 20 4e 4f 43 41 53 45 20 50 52 49 4d  LATE NOCASE PRIM
6af0: 41 52 59 20 4b 45 59 29 20 57 49 54 48 4f 55 54  ARY KEY) WITHOUT
6b00: 20 72 6f 77 69 64 3b 0a 20 20 20 20 43 52 45 41   rowid;.    CREA
6b10: 54 45 20 54 52 49 47 47 45 52 20 74 74 31 20 41  TE TRIGGER tt1 A
6b20: 46 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74  FTER DELETE ON t
6b30: 31 20 0a 20 20 20 20 20 20 57 48 45 4e 20 45 58  1 .      WHEN EX
6b40: 49 53 54 53 20 28 20 53 45 4c 45 43 54 20 31 20  ISTS ( SELECT 1 
6b50: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 6f 6c  FROM t2 WHERE ol
6b60: 64 2e 78 20 3d 20 79 20 29 0a 20 20 20 20 42 45  d.x = y ).    BE
6b70: 47 49 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54  GIN.      INSERT
6b80: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
6b90: 6f 6c 64 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b  old.x);.    END;
6ba0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
6bb0: 45 20 74 32 28 79 20 52 45 46 45 52 45 4e 43 45  E t2(y REFERENCE
6bc0: 53 20 74 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  S t1);.    INSER
6bd0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6be0: 28 27 41 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ('A');.    INSER
6bf0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6c00: 28 27 42 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ('B');.    INSER
6c10: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
6c20: 28 27 61 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ('a');.    INSER
6c30: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
6c40: 28 27 62 27 29 3b 0a 0a 20 20 20 20 53 45 4c 45  ('b');..    SELE
6c50: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
6c60: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6c70: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 41 20 42 20 61  t2;.  }.} {A B a
6c80: 20 62 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   b}.do_test with
6c90: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32 2e 32 2e  out_rowid3-12.2.
6ca0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
6cb0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d  DELETE FROM t1 }
6cc0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6cd0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
6ce0: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  1;.    SELECT * 
6cf0: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
6d00: 41 20 42 20 61 20 62 7d 0a 64 6f 5f 74 65 73 74  A B a b}.do_test
6d10: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
6d20: 31 32 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73  12.2.3 {.  execs
6d30: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
6d40: 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52 45 41  BLE t2;.    CREA
6d50: 54 45 20 54 41 42 4c 45 20 74 32 28 79 20 52 45  TE TABLE t2(y RE
6d60: 46 45 52 45 4e 43 45 53 20 74 31 20 4f 4e 20 44  FERENCES t1 ON D
6d70: 45 4c 45 54 45 20 52 45 53 54 52 49 43 54 29 3b  ELETE RESTRICT);
6d80: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6d90: 20 74 32 20 56 41 4c 55 45 53 28 27 61 27 29 3b   t2 VALUES('a');
6da0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6db0: 20 74 32 20 56 41 4c 55 45 53 28 27 62 27 29 3b   t2 VALUES('b');
6dc0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
6dd0: 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31  { DELETE FROM t1
6de0: 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e   }.} {1 {FOREIGN
6df0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
6e00: 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  failed}}.do_test
6e10: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
6e20: 31 32 2e 32 2e 34 20 7b 0a 20 20 65 78 65 63 73  12.2.4 {.  execs
6e30: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
6e40: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53  * FROM t1;.    S
6e50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
6e60: 0a 20 20 7d 0a 7d 20 7b 41 20 42 20 61 20 62 7d  .  }.} {A B a b}
6e70: 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  ..drop_all_table
6e80: 73 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  s.do_test withou
6e90: 74 5f 72 6f 77 69 64 33 2d 31 32 2e 33 2e 31 20  t_rowid3-12.3.1 
6ea0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6eb0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 75    CREATE TABLE u
6ec0: 70 28 0a 20 20 20 20 20 20 63 30 30 2c 20 63 30  p(.      c00, c0
6ed0: 31 2c 20 63 30 32 2c 20 63 30 33 2c 20 63 30 34  1, c02, c03, c04
6ee0: 2c 20 63 30 35 2c 20 63 30 36 2c 20 63 30 37 2c  , c05, c06, c07,
6ef0: 20 63 30 38 2c 20 63 30 39 2c 0a 20 20 20 20 20   c08, c09,.     
6f00: 20 63 31 30 2c 20 63 31 31 2c 20 63 31 32 2c 20   c10, c11, c12, 
6f10: 63 31 33 2c 20 63 31 34 2c 20 63 31 35 2c 20 63  c13, c14, c15, c
6f20: 31 36 2c 20 63 31 37 2c 20 63 31 38 2c 20 63 31  16, c17, c18, c1
6f30: 39 2c 0a 20 20 20 20 20 20 63 32 30 2c 20 63 32  9,.      c20, c2
6f40: 31 2c 20 63 32 32 2c 20 63 32 33 2c 20 63 32 34  1, c22, c23, c24
6f50: 2c 20 63 32 35 2c 20 63 32 36 2c 20 63 32 37 2c  , c25, c26, c27,
6f60: 20 63 32 38 2c 20 63 32 39 2c 0a 20 20 20 20 20   c28, c29,.     
6f70: 20 63 33 30 2c 20 63 33 31 2c 20 63 33 32 2c 20   c30, c31, c32, 
6f80: 63 33 33 2c 20 63 33 34 2c 20 63 33 35 2c 20 63  c33, c34, c35, c
6f90: 33 36 2c 20 63 33 37 2c 20 63 33 38 2c 20 63 33  36, c37, c38, c3
6fa0: 39 2c 0a 20 20 20 20 20 20 50 52 49 4d 41 52 59  9,.      PRIMARY
6fb0: 20 4b 45 59 28 63 33 34 2c 20 63 33 35 29 0a 20   KEY(c34, c35). 
6fc0: 20 20 20 29 20 57 49 54 48 4f 55 54 20 72 6f 77     ) WITHOUT row
6fd0: 69 64 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  id;.    CREATE T
6fe0: 41 42 4c 45 20 64 6f 77 6e 28 0a 20 20 20 20 20  ABLE down(.     
6ff0: 20 63 30 30 2c 20 63 30 31 2c 20 63 30 32 2c 20   c00, c01, c02, 
7000: 63 30 33 2c 20 63 30 34 2c 20 63 30 35 2c 20 63  c03, c04, c05, c
7010: 30 36 2c 20 63 30 37 2c 20 63 30 38 2c 20 63 30  06, c07, c08, c0
7020: 39 2c 0a 20 20 20 20 20 20 63 31 30 2c 20 63 31  9,.      c10, c1
7030: 31 2c 20 63 31 32 2c 20 63 31 33 2c 20 63 31 34  1, c12, c13, c14
7040: 2c 20 63 31 35 2c 20 63 31 36 2c 20 63 31 37 2c  , c15, c16, c17,
7050: 20 63 31 38 2c 20 63 31 39 2c 0a 20 20 20 20 20   c18, c19,.     
7060: 20 63 32 30 2c 20 63 32 31 2c 20 63 32 32 2c 20   c20, c21, c22, 
7070: 63 32 33 2c 20 63 32 34 2c 20 63 32 35 2c 20 63  c23, c24, c25, c
7080: 32 36 2c 20 63 32 37 2c 20 63 32 38 2c 20 63 32  26, c27, c28, c2
7090: 39 2c 0a 20 20 20 20 20 20 63 33 30 2c 20 63 33  9,.      c30, c3
70a0: 31 2c 20 63 33 32 2c 20 63 33 33 2c 20 63 33 34  1, c32, c33, c34
70b0: 2c 20 63 33 35 2c 20 63 33 36 2c 20 63 33 37 2c  , c35, c36, c37,
70c0: 20 63 33 38 2c 20 63 33 39 2c 0a 20 20 20 20 20   c38, c39,.     
70d0: 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 63 33 39   FOREIGN KEY(c39
70e0: 2c 20 63 33 38 29 20 52 45 46 45 52 45 4e 43 45  , c38) REFERENCE
70f0: 53 20 75 70 20 4f 4e 20 55 50 44 41 54 45 20 43  S up ON UPDATE C
7100: 41 53 43 41 44 45 0a 20 20 20 20 29 3b 0a 20 20  ASCADE.    );.  
7110: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
7120: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32  ithout_rowid3-12
7130: 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.2 {.  execsql
7140: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
7150: 54 4f 20 75 70 28 63 33 34 2c 20 63 33 35 29 20  TO up(c34, c35) 
7160: 56 41 4c 55 45 53 28 27 79 65 73 27 2c 20 27 6e  VALUES('yes', 'n
7170: 6f 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  o');.    INSERT 
7180: 49 4e 54 4f 20 64 6f 77 6e 28 63 33 39 2c 20 63  INTO down(c39, c
7190: 33 38 29 20 56 41 4c 55 45 53 28 27 79 65 73 27  38) VALUES('yes'
71a0: 2c 20 27 6e 6f 27 29 3b 0a 20 20 20 20 55 50 44  , 'no');.    UPD
71b0: 41 54 45 20 75 70 20 53 45 54 20 63 33 34 20 3d  ATE up SET c34 =
71c0: 20 27 70 6f 73 73 69 62 6c 79 27 3b 0a 20 20 20   'possibly';.   
71d0: 20 53 45 4c 45 43 54 20 63 33 38 2c 20 63 33 39   SELECT c38, c39
71e0: 20 46 52 4f 4d 20 64 6f 77 6e 3b 0a 20 20 20 20   FROM down;.    
71f0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f 77 6e  DELETE FROM down
7200: 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 20 70 6f 73 73  ;.  }.} {no poss
7210: 69 62 6c 79 7d 0a 64 6f 5f 74 65 73 74 20 77 69  ibly}.do_test wi
7220: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32 2e  thout_rowid3-12.
7230: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  3.3 {.  catchsql
7240: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 64   { INSERT INTO d
7250: 6f 77 6e 28 63 33 39 2c 20 63 33 38 29 20 56 41  own(c39, c38) VA
7260: 4c 55 45 53 28 27 79 65 73 27 2c 20 27 6e 6f 27  LUES('yes', 'no'
7270: 29 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47  ) }.} {1 {FOREIG
7280: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
7290: 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73   failed}}.do_tes
72a0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
72b0: 2d 31 32 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63  -12.3.4 {.  exec
72c0: 73 71 6c 20 7b 20 0a 20 20 20 20 49 4e 53 45 52  sql { .    INSER
72d0: 54 20 49 4e 54 4f 20 75 70 28 63 33 34 2c 20 63  T INTO up(c34, c
72e0: 33 35 29 20 56 41 4c 55 45 53 28 27 79 65 73 27  35) VALUES('yes'
72f0: 2c 20 27 6e 6f 27 29 3b 0a 20 20 20 20 49 4e 53  , 'no');.    INS
7300: 45 52 54 20 49 4e 54 4f 20 64 6f 77 6e 28 63 33  ERT INTO down(c3
7310: 39 2c 20 63 33 38 29 20 56 41 4c 55 45 53 28 27  9, c38) VALUES('
7320: 79 65 73 27 2c 20 27 6e 6f 27 29 3b 0a 20 20 7d  yes', 'no');.  }
7330: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 45  .  catchsql { DE
7340: 4c 45 54 45 20 46 52 4f 4d 20 75 70 20 57 48 45  LETE FROM up WHE
7350: 52 45 20 63 33 34 20 3d 20 27 79 65 73 27 20 7d  RE c34 = 'yes' }
7360: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
7370: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
7380: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
7390: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 32  ithout_rowid3-12
73a0: 2e 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.5 {.  execsql
73b0: 20 7b 20 0a 20 20 20 20 44 45 4c 45 54 45 20 46   { .    DELETE F
73c0: 52 4f 4d 20 75 70 20 57 48 45 52 45 20 63 33 34  ROM up WHERE c34
73d0: 20 3d 20 27 70 6f 73 73 69 62 6c 79 27 3b 0a 20   = 'possibly';. 
73e0: 20 20 20 53 45 4c 45 43 54 20 63 33 34 2c 20 63     SELECT c34, c
73f0: 33 35 20 46 52 4f 4d 20 75 70 3b 0a 20 20 20 20  35 FROM up;.    
7400: 53 45 4c 45 43 54 20 63 33 39 2c 20 63 33 38 20  SELECT c39, c38 
7410: 46 52 4f 4d 20 64 6f 77 6e 3b 0a 20 20 7d 0a 7d  FROM down;.  }.}
7420: 20 7b 79 65 73 20 6e 6f 20 79 65 73 20 6e 6f 7d   {yes no yes no}
7430: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
7440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
7480: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73  he following tes
7490: 74 73 2c 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  ts, without_rowi
74a0: 64 33 2d 31 33 2e 2a 2c 20 74 65 73 74 20 74 68  d3-13.*, test th
74b0: 61 74 20 46 4b 20 70 72 6f 63 65 73 73 69 6e 67  at FK processing
74c0: 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 23 20   is performed.# 
74d0: 77 68 65 6e 20 72 6f 77 73 20 61 72 65 20 52 45  when rows are RE
74e0: 50 4c 41 43 45 64 2e 0a 23 0a 64 72 6f 70 5f 61  PLACEd..#.drop_a
74f0: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73  ll_tables.do_tes
7500: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
7510: 2d 31 33 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  -13.1.1 {.  exec
7520: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
7530: 20 54 41 42 4c 45 20 70 70 28 61 20 55 4e 49 51   TABLE pp(a UNIQ
7540: 55 45 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41 52  UE, b, c, PRIMAR
7550: 59 20 4b 45 59 28 62 2c 20 63 29 29 20 57 49 54  Y KEY(b, c)) WIT
7560: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20  HOUT rowid;.    
7570: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 63 28  CREATE TABLE cc(
7580: 64 2c 20 65 2c 20 66 20 55 4e 49 51 55 45 2c 20  d, e, f UNIQUE, 
7590: 46 4f 52 45 49 47 4e 20 4b 45 59 28 64 2c 20 65  FOREIGN KEY(d, e
75a0: 29 20 52 45 46 45 52 45 4e 43 45 53 20 70 70 29  ) REFERENCES pp)
75b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
75c0: 4f 20 70 70 20 56 41 4c 55 45 53 28 31 2c 20 32  O pp VALUES(1, 2
75d0: 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 3);.    INSERT
75e0: 20 49 4e 54 4f 20 63 63 20 56 41 4c 55 45 53 28   INTO cc VALUES(
75f0: 32 2c 20 33 2c 20 31 29 3b 0a 20 20 7d 0a 7d 20  2, 3, 1);.  }.} 
7600: 7b 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 73  {}.foreach {tn s
7610: 74 6d 74 7d 20 7b 0a 20 20 31 20 20 20 22 52 45  tmt} {.  1   "RE
7620: 50 4c 41 43 45 20 49 4e 54 4f 20 70 70 20 56 41  PLACE INTO pp VA
7630: 4c 55 45 53 28 31 2c 20 34 2c 20 35 29 22 0a 7d  LUES(1, 4, 5)".}
7640: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74   {.  do_test wit
7650: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 33 2e 31  hout_rowid3-13.1
7660: 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 63 61 74  .$tn.1 {.    cat
7670: 63 68 73 71 6c 20 24 73 74 6d 74 0a 20 20 7d 20  chsql $stmt.  } 
7680: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
7690: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
76a0: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  d}}.  do_test wi
76b0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 33 2e  thout_rowid3-13.
76c0: 31 2e 24 74 6e 2e 32 20 7b 0a 20 20 20 20 65 78  1.$tn.2 {.    ex
76d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
76e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 70 70 3b 0a  LECT * FROM pp;.
76f0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
7700: 52 4f 4d 20 63 63 3b 0a 20 20 20 20 7d 0a 20 20  ROM cc;.    }.  
7710: 7d 20 7b 31 20 32 20 33 20 32 20 33 20 31 7d 0a  } {1 2 3 2 3 1}.
7720: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
7730: 74 5f 72 6f 77 69 64 33 2d 31 33 2e 31 2e 24 74  t_rowid3-13.1.$t
7740: 6e 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  n.3 {.    execsq
7750: 6c 20 42 45 47 49 4e 3b 0a 20 20 20 20 63 61 74  l BEGIN;.    cat
7760: 63 68 73 71 6c 20 24 73 74 6d 74 0a 20 20 7d 20  chsql $stmt.  } 
7770: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
7780: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7790: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  d}}.  do_test wi
77a0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 33 2e  thout_rowid3-13.
77b0: 31 2e 24 74 6e 2e 34 20 7b 0a 20 20 20 20 65 78  1.$tn.4 {.    ex
77c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 4f  ecsql {.      CO
77d0: 4d 4d 49 54 3b 0a 20 20 20 20 20 20 53 45 4c 45  MMIT;.      SELE
77e0: 43 54 20 2a 20 46 52 4f 4d 20 70 70 3b 0a 20 20  CT * FROM pp;.  
77f0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
7800: 4d 20 63 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M cc;.    }.  } 
7810: 7b 31 20 32 20 33 20 32 20 33 20 31 7d 0a 7d 0a  {1 2 3 2 3 1}.}.
7820: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
7830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68  -----------.# Th
7870: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74  e following test
7880: 73 2c 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  s, without_rowid
7890: 33 2d 31 34 2e 2a 2c 20 74 65 73 74 20 74 68 61  3-14.*, test tha
78a0: 74 20 74 68 65 20 22 44 52 4f 50 20 54 41 42 4c  t the "DROP TABL
78b0: 45 22 20 61 6e 64 20 22 41 4c 54 45 52 0a 23 20  E" and "ALTER.# 
78c0: 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 73 20  TABLE" commands 
78d0: 77 6f 72 6b 20 61 73 20 65 78 70 65 63 74 65 64  work as expected
78e0: 20 77 72 74 20 66 6f 72 65 69 67 6e 20 6b 65 79   wrt foreign key
78f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 23 0a   constraints..#.
7900: 23 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  # without_rowid3
7910: 2d 31 34 2e 31 2a 3a 20 41 4c 54 45 52 20 54 41  -14.1*: ALTER TA
7920: 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e 0a 23  BLE ADD COLUMN.#
7930: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
7940: 31 34 2e 32 2a 3a 20 41 4c 54 45 52 20 54 41 42  14.2*: ALTER TAB
7950: 4c 45 20 52 45 4e 41 4d 45 20 54 41 42 4c 45 0a  LE RENAME TABLE.
7960: 23 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  # without_rowid3
7970: 2d 31 34 2e 33 2a 3a 20 44 52 4f 50 20 54 41 42  -14.3*: DROP TAB
7980: 4c 45 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  LE.#.drop_all_ta
7990: 62 6c 65 73 0a 69 66 63 61 70 61 62 6c 65 20 61  bles.ifcapable a
79a0: 6c 74 65 72 74 61 62 6c 65 20 7b 0a 20 20 64 6f  ltertable {.  do
79b0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
79c0: 77 69 64 33 2d 31 34 2e 31 2e 31 20 7b 0a 20 20  wid3-14.1.1 {.  
79d0: 20 20 23 20 41 64 64 69 6e 67 20 61 20 63 6f 6c    # Adding a col
79e0: 75 6d 6e 20 77 69 74 68 20 61 20 52 45 46 45 52  umn with a REFER
79f0: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 69 73 20  ENCES clause is 
7a00: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
7a10: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
7a20: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
7a30: 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t1(a PRIMARY KE
7a40: 59 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64  Y) WITHOUT rowid
7a50: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
7a60: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b 0a 20  ABLE t2(a, b);. 
7a70: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
7a80: 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45 20  l { ALTER TABLE 
7a90: 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20 63 20  t2 ADD COLUMN c 
7aa0: 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 7d 0a  REFERENCES t1 }.
7ab0: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
7ac0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
7ad0: 69 64 33 2d 31 34 2e 31 2e 32 20 7b 0a 20 20 20  id3-14.1.2 {.   
7ae0: 20 63 61 74 63 68 73 71 6c 20 7b 20 41 4c 54 45   catchsql { ALTE
7af0: 52 20 54 41 42 4c 45 20 74 32 20 41 44 44 20 43  R TABLE t2 ADD C
7b00: 4f 4c 55 4d 4e 20 64 20 44 45 46 41 55 4c 54 20  OLUMN d DEFAULT 
7b10: 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20  NULL REFERENCES 
7b20: 74 31 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  t1 }.  } {0 {}}.
7b30: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
7b40: 74 5f 72 6f 77 69 64 33 2d 31 34 2e 31 2e 33 20  t_rowid3-14.1.3 
7b50: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
7b60: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20   ALTER TABLE t2 
7b70: 41 44 44 20 43 4f 4c 55 4d 4e 20 65 20 52 45 46  ADD COLUMN e REF
7b80: 45 52 45 4e 43 45 53 20 74 31 20 44 45 46 41 55  ERENCES t1 DEFAU
7b90: 4c 54 20 4e 55 4c 4c 7d 0a 20 20 7d 20 7b 30 20  LT NULL}.  } {0 
7ba0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  {}}.  do_test wi
7bb0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e  thout_rowid3-14.
7bc0: 31 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73  1.4 {.    catchs
7bd0: 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45  ql { ALTER TABLE
7be0: 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66   t2 ADD COLUMN f
7bf0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 44   REFERENCES t1 D
7c00: 45 46 41 55 4c 54 20 27 74 65 78 74 27 7d 0a 20  EFAULT 'text'}. 
7c10: 20 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61 64   } {1 {Cannot ad
7c20: 64 20 61 20 52 45 46 45 52 45 4e 43 45 53 20 63  d a REFERENCES c
7c30: 6f 6c 75 6d 6e 20 77 69 74 68 20 6e 6f 6e 2d 4e  olumn with non-N
7c40: 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ULL default valu
7c50: 65 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  e}}.  do_test wi
7c60: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e  thout_rowid3-14.
7c70: 31 2e 35 20 7b 0a 20 20 20 20 63 61 74 63 68 73  1.5 {.    catchs
7c80: 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45  ql { ALTER TABLE
7c90: 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20 67   t2 ADD COLUMN g
7ca0: 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54   DEFAULT CURRENT
7cb0: 5f 54 49 4d 45 20 52 45 46 45 52 45 4e 43 45 53  _TIME REFERENCES
7cc0: 20 74 31 20 7d 0a 20 20 7d 20 7b 31 20 7b 43 61   t1 }.  } {1 {Ca
7cd0: 6e 6e 6f 74 20 61 64 64 20 61 20 52 45 46 45 52  nnot add a REFER
7ce0: 45 4e 43 45 53 20 63 6f 6c 75 6d 6e 20 77 69 74  ENCES column wit
7cf0: 68 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  h non-NULL defau
7d00: 6c 74 20 76 61 6c 75 65 7d 7d 0a 20 20 64 6f 5f  lt value}}.  do_
7d10: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
7d20: 69 64 33 2d 31 34 2e 31 2e 36 20 7b 0a 20 20 20  id3-14.1.6 {.   
7d30: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
7d40: 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e    PRAGMA foreign
7d50: 5f 6b 65 79 73 20 3d 20 6f 66 66 3b 0a 20 20 20  _keys = off;.   
7d60: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
7d70: 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 20 44  2 ADD COLUMN h D
7d80: 45 46 41 55 4c 54 20 27 74 65 78 74 27 20 52 45  EFAULT 'text' RE
7d90: 46 45 52 45 4e 43 45 53 20 74 31 3b 0a 20 20 20  FERENCES t1;.   
7da0: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
7db0: 6e 5f 6b 65 79 73 20 3d 20 6f 6e 3b 0a 20 20 20  n_keys = on;.   
7dc0: 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52     SELECT sql FR
7dd0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
7de0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 32 27   WHERE name='t2'
7df0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 43 52  ;.    }.  } {{CR
7e00: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c  EATE TABLE t2(a,
7e10: 20 62 2c 20 63 20 52 45 46 45 52 45 4e 43 45 53   b, c REFERENCES
7e20: 20 74 31 2c 20 64 20 44 45 46 41 55 4c 54 20 4e   t1, d DEFAULT N
7e30: 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 74  ULL REFERENCES t
7e40: 31 2c 20 65 20 52 45 46 45 52 45 4e 43 45 53 20  1, e REFERENCES 
7e50: 74 31 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c  t1 DEFAULT NULL,
7e60: 20 68 20 44 45 46 41 55 4c 54 20 27 74 65 78 74   h DEFAULT 'text
7e70: 27 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 29  ' REFERENCES t1)
7e80: 7d 7d 0a 20 20 0a 20 20 0a 20 20 23 20 54 65 73  }}.  .  .  # Tes
7e90: 74 20 74 68 65 20 73 71 6c 69 74 65 5f 72 65 6e  t the sqlite_ren
7ea0: 61 6d 65 5f 70 61 72 65 6e 74 28 29 20 66 75 6e  ame_parent() fun
7eb0: 63 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 2e 0a  ction directly..
7ec0: 20 20 23 0a 20 20 70 72 6f 63 20 74 65 73 74 5f    #.  proc test_
7ed0: 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 7b 7a  rename_parent {z
7ee0: 43 72 65 61 74 65 20 7a 4f 6c 64 20 7a 4e 65 77  Create zOld zNew
7ef0: 7d 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  } {.    db eval 
7f00: 7b 53 45 4c 45 43 54 20 73 71 6c 69 74 65 5f 72  {SELECT sqlite_r
7f10: 65 6e 61 6d 65 5f 70 61 72 65 6e 74 28 24 7a 43  ename_parent($zC
7f20: 72 65 61 74 65 2c 20 24 7a 4f 6c 64 2c 20 24 7a  reate, $zOld, $z
7f30: 4e 65 77 29 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74  New)}.  }.  do_t
7f40: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
7f50: 64 33 2d 31 34 2e 32 2e 31 2e 31 20 7b 0a 20 20  d3-14.2.1.1 {.  
7f60: 20 20 74 65 73 74 5f 72 65 6e 61 6d 65 5f 70 61    test_rename_pa
7f70: 72 65 6e 74 20 7b 43 52 45 41 54 45 20 54 41 42  rent {CREATE TAB
7f80: 4c 45 20 74 31 28 61 20 52 45 46 45 52 45 4e 43  LE t1(a REFERENC
7f90: 45 53 20 74 32 29 7d 20 74 32 20 74 33 0a 20 20  ES t2)} t2 t3.  
7fa0: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
7fb0: 20 74 31 28 61 20 52 45 46 45 52 45 4e 43 45 53   t1(a REFERENCES
7fc0: 20 22 74 33 22 29 7d 7d 0a 20 20 64 6f 5f 74 65   "t3")}}.  do_te
7fd0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
7fe0: 33 2d 31 34 2e 32 2e 31 2e 32 20 7b 0a 20 20 20  3-14.2.1.2 {.   
7ff0: 20 74 65 73 74 5f 72 65 6e 61 6d 65 5f 70 61 72   test_rename_par
8000: 65 6e 74 20 7b 43 52 45 41 54 45 20 54 41 42 4c  ent {CREATE TABL
8010: 45 20 74 31 28 61 20 52 45 46 45 52 45 4e 43 45  E t1(a REFERENCE
8020: 53 20 74 32 29 7d 20 74 34 20 74 33 0a 20 20 7d  S t2)} t4 t3.  }
8030: 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20   {{CREATE TABLE 
8040: 74 31 28 61 20 52 45 46 45 52 45 4e 43 45 53 20  t1(a REFERENCES 
8050: 74 32 29 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  t2)}}.  do_test 
8060: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
8070: 34 2e 32 2e 31 2e 33 20 7b 0a 20 20 20 20 74 65  4.2.1.3 {.    te
8080: 73 74 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74  st_rename_parent
8090: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
80a0: 31 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 22  1(a REFERENCES "
80b0: 74 32 22 29 7d 20 74 32 20 74 33 0a 20 20 7d 20  t2")} t2 t3.  } 
80c0: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  {{CREATE TABLE t
80d0: 31 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 22  1(a REFERENCES "
80e0: 74 33 22 29 7d 7d 0a 20 20 0a 20 20 23 20 54 65  t3")}}.  .  # Te
80f0: 73 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52  st ALTER TABLE R
8100: 45 4e 41 4d 45 20 54 41 42 4c 45 20 61 20 62 69  ENAME TABLE a bi
8110: 74 2e 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74  t..  #.  do_test
8120: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
8130: 31 34 2e 32 2e 32 2e 31 20 7b 0a 20 20 20 20 64  14.2.2.1 {.    d
8140: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 20  rop_all_tables. 
8150: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8160: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8170: 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t1(a PRIMARY KEY
8180: 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20 74  , b REFERENCES t
8190: 31 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64  1) WITHOUT rowid
81a0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
81b0: 41 42 4c 45 20 74 32 28 61 20 50 52 49 4d 41 52  ABLE t2(a PRIMAR
81c0: 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e  Y KEY, b REFEREN
81d0: 43 45 53 20 74 31 2c 20 63 20 52 45 46 45 52 45  CES t1, c REFERE
81e0: 4e 43 45 53 20 74 32 29 0a 20 20 20 20 20 20 20  NCES t2).       
81f0: 20 20 20 20 20 57 49 54 48 4f 55 54 20 72 6f 77       WITHOUT row
8200: 69 64 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  id;.      CREATE
8210: 20 54 41 42 4c 45 20 74 33 28 61 20 52 45 46 45   TABLE t3(a REFE
8220: 52 45 4e 43 45 53 20 74 31 2c 20 62 20 52 45 46  RENCES t1, b REF
8230: 45 52 45 4e 43 45 53 20 74 32 2c 20 63 20 52 45  ERENCES t2, c RE
8240: 46 45 52 45 4e 43 45 53 20 74 31 29 3b 0a 20 20  FERENCES t1);.  
8250: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
8260: 7b 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f  { SELECT sql FRO
8270: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
8280: 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61  WHERE type = 'ta
8290: 62 6c 65 27 7d 0a 20 20 7d 20 5b 6c 69 73 74 20  ble'}.  } [list 
82a0: 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20 54 41  \.    {CREATE TA
82b0: 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59  BLE t1(a PRIMARY
82c0: 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e 43   KEY, b REFERENC
82d0: 45 53 20 74 31 29 20 57 49 54 48 4f 55 54 20 72  ES t1) WITHOUT r
82e0: 6f 77 69 64 7d 20 20 20 20 20 20 20 5c 0a 20 20  owid}       \.  
82f0: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
8300: 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t2(a PRIMARY KEY
8310: 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20 74  , b REFERENCES t
8320: 31 2c 20 63 20 52 45 46 45 52 45 4e 43 45 53 20  1, c REFERENCES 
8330: 74 32 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  t2).            
8340: 57 49 54 48 4f 55 54 20 72 6f 77 69 64 7d 20 20  WITHOUT rowid}  
8350: 20 20 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20    \.    {CREATE 
8360: 54 41 42 4c 45 20 74 33 28 61 20 52 45 46 45 52  TABLE t3(a REFER
8370: 45 4e 43 45 53 20 74 31 2c 20 62 20 52 45 46 45  ENCES t1, b REFE
8380: 52 45 4e 43 45 53 20 74 32 2c 20 63 20 52 45 46  RENCES t2, c REF
8390: 45 52 45 4e 43 45 53 20 74 31 29 7d 20 20 5c 0a  ERENCES t1)}  \.
83a0: 20 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69    ].  do_test wi
83b0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e  thout_rowid3-14.
83c0: 32 2e 32 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  2.2.2 {.    exec
83d0: 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c  sql { ALTER TABL
83e0: 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t1 RENAME TO t
83f0: 34 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 }.    execsql 
8400: 7b 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f  { SELECT sql FRO
8410: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
8420: 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61  WHERE type = 'ta
8430: 62 6c 65 27 7d 0a 20 20 7d 20 5b 6c 69 73 74 20  ble'}.  } [list 
8440: 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20 54 41  \.    {CREATE TA
8450: 42 4c 45 20 22 74 34 22 28 61 20 50 52 49 4d 41  BLE "t4"(a PRIMA
8460: 52 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45  RY KEY, b REFERE
8470: 4e 43 45 53 20 22 74 34 22 29 20 57 49 54 48 4f  NCES "t4") WITHO
8480: 55 54 20 72 6f 77 69 64 7d 20 20 20 20 20 20 5c  UT rowid}      \
8490: 0a 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42  .    {CREATE TAB
84a0: 4c 45 20 74 32 28 61 20 50 52 49 4d 41 52 59 20  LE t2(a PRIMARY 
84b0: 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e 43 45  KEY, b REFERENCE
84c0: 53 20 22 74 34 22 2c 20 63 20 52 45 46 45 52 45  S "t4", c REFERE
84d0: 4e 43 45 53 20 74 32 29 0a 20 20 20 20 20 20 20  NCES t2).       
84e0: 20 20 20 20 20 57 49 54 48 4f 55 54 20 72 6f 77       WITHOUT row
84f0: 69 64 7d 20 20 20 20 20 5c 0a 20 20 20 20 7b 43  id}     \.    {C
8500: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
8510: 20 52 45 46 45 52 45 4e 43 45 53 20 22 74 34 22   REFERENCES "t4"
8520: 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20 74  , b REFERENCES t
8530: 32 2c 20 63 20 52 45 46 45 52 45 4e 43 45 53 20  2, c REFERENCES 
8540: 22 74 34 22 29 7d 20 5c 0a 20 20 5d 0a 20 20 64  "t4")} \.  ].  d
8550: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
8560: 6f 77 69 64 33 2d 31 34 2e 32 2e 32 2e 33 20 7b  owid3-14.2.2.3 {
8570: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20  .    catchsql { 
8580: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
8590: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 20 7d  ALUES(1, 2, 3) }
85a0: 0a 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e  .  } {1 {FOREIGN
85b0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
85c0: 66 61 69 6c 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  failed}}.  do_te
85d0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
85e0: 33 2d 31 34 2e 32 2e 32 2e 34 20 7b 0a 20 20 20  3-14.2.2.4 {.   
85f0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
8600: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
8610: 28 31 2c 20 4e 55 4c 4c 29 20 7d 0a 20 20 7d 20  (1, NULL) }.  } 
8620: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  {}.  do_test wit
8630: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32  hout_rowid3-14.2
8640: 2e 32 2e 35 20 7b 0a 20 20 20 20 63 61 74 63 68  .2.5 {.    catch
8650: 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74 34 20  sql { UPDATE t4 
8660: 53 45 54 20 62 20 3d 20 35 20 7d 0a 20 20 7d 20  SET b = 5 }.  } 
8670: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
8680: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8690: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  d}}.  do_test wi
86a0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e  thout_rowid3-14.
86b0: 32 2e 32 2e 36 20 7b 0a 20 20 20 20 63 61 74 63  2.2.6 {.    catc
86c0: 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74 34  hsql { UPDATE t4
86d0: 20 53 45 54 20 62 20 3d 20 31 20 7d 0a 20 20 7d   SET b = 1 }.  }
86e0: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
86f0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
8700: 2d 31 34 2e 32 2e 32 2e 37 20 7b 0a 20 20 20 20  -14.2.2.7 {.    
8710: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
8720: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
8730: 31 2c 20 4e 55 4c 4c 2c 20 31 29 20 7d 0a 20 20  1, NULL, 1) }.  
8740: 7d 20 7b 7d 0a 0a 20 20 23 20 52 65 70 65 61 74  } {}..  # Repeat
8750: 20 66 6f 72 20 54 45 4d 50 20 74 61 62 6c 65 73   for TEMP tables
8760: 0a 20 20 23 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f  .  #.  drop_all_
8770: 74 61 62 6c 65 73 0a 20 20 64 6f 5f 74 65 73 74  tables.  do_test
8780: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
8790: 31 34 2e 31 74 6d 70 2e 31 20 7b 0a 20 20 20 20  14.1tmp.1 {.    
87a0: 23 20 41 64 64 69 6e 67 20 61 20 63 6f 6c 75 6d  # Adding a colum
87b0: 6e 20 77 69 74 68 20 61 20 52 45 46 45 52 45 4e  n with a REFEREN
87c0: 43 45 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  CES clause is no
87d0: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 20  t supported..   
87e0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
87f0: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
8800: 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59  BLE t1(a PRIMARY
8810: 20 4b 45 59 29 20 57 49 54 48 4f 55 54 20 72 6f   KEY) WITHOUT ro
8820: 77 69 64 3b 0a 20 20 20 20 20 20 43 52 45 41 54  wid;.      CREAT
8830: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 28  E TEMP TABLE t2(
8840: 61 2c 20 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  a, b);.    }.   
8850: 20 63 61 74 63 68 73 71 6c 20 7b 20 41 4c 54 45   catchsql { ALTE
8860: 52 20 54 41 42 4c 45 20 74 32 20 41 44 44 20 43  R TABLE t2 ADD C
8870: 4f 4c 55 4d 4e 20 63 20 52 45 46 45 52 45 4e 43  OLUMN c REFERENC
8880: 45 53 20 74 31 20 7d 0a 20 20 7d 20 7b 30 20 7b  ES t1 }.  } {0 {
8890: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  }}.  do_test wit
88a0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 31  hout_rowid3-14.1
88b0: 74 6d 70 2e 32 20 7b 0a 20 20 20 20 63 61 74 63  tmp.2 {.    catc
88c0: 68 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42  hsql { ALTER TAB
88d0: 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e  LE t2 ADD COLUMN
88e0: 20 64 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 20   d DEFAULT NULL 
88f0: 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 7d 0a  REFERENCES t1 }.
8900: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
8910: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
8920: 69 64 33 2d 31 34 2e 31 74 6d 70 2e 33 20 7b 0a  id3-14.1tmp.3 {.
8930: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 41      catchsql { A
8940: 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 41 44  LTER TABLE t2 AD
8950: 44 20 43 4f 4c 55 4d 4e 20 65 20 52 45 46 45 52  D COLUMN e REFER
8960: 45 4e 43 45 53 20 74 31 20 44 45 46 41 55 4c 54  ENCES t1 DEFAULT
8970: 20 4e 55 4c 4c 7d 0a 20 20 7d 20 7b 30 20 7b 7d   NULL}.  } {0 {}
8980: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
8990: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 31 74  out_rowid3-14.1t
89a0: 6d 70 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68  mp.4 {.    catch
89b0: 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c  sql { ALTER TABL
89c0: 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t2 ADD COLUMN 
89d0: 66 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 20  f REFERENCES t1 
89e0: 44 45 46 41 55 4c 54 20 27 74 65 78 74 27 7d 0a  DEFAULT 'text'}.
89f0: 20 20 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61    } {1 {Cannot a
8a00: 64 64 20 61 20 52 45 46 45 52 45 4e 43 45 53 20  dd a REFERENCES 
8a10: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 6e 6f 6e 2d  column with non-
8a20: 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
8a30: 75 65 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  ue}}.  do_test w
8a40: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
8a50: 2e 31 74 6d 70 2e 35 20 7b 0a 20 20 20 20 63 61  .1tmp.5 {.    ca
8a60: 74 63 68 73 71 6c 20 7b 20 41 4c 54 45 52 20 54  tchsql { ALTER T
8a70: 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55  ABLE t2 ADD COLU
8a80: 4d 4e 20 67 20 44 45 46 41 55 4c 54 20 43 55 52  MN g DEFAULT CUR
8a90: 52 45 4e 54 5f 54 49 4d 45 20 52 45 46 45 52 45  RENT_TIME REFERE
8aa0: 4e 43 45 53 20 74 31 20 7d 0a 20 20 7d 20 7b 31  NCES t1 }.  } {1
8ab0: 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 52   {Cannot add a R
8ac0: 45 46 45 52 45 4e 43 45 53 20 63 6f 6c 75 6d 6e  EFERENCES column
8ad0: 20 77 69 74 68 20 6e 6f 6e 2d 4e 55 4c 4c 20 64   with non-NULL d
8ae0: 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 7d 0a 20  efault value}}. 
8af0: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
8b00: 5f 72 6f 77 69 64 33 2d 31 34 2e 31 74 6d 70 2e  _rowid3-14.1tmp.
8b10: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
8b20: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
8b30: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 6f  foreign_keys = o
8b40: 66 66 3b 0a 20 20 20 20 20 20 41 4c 54 45 52 20  ff;.      ALTER 
8b50: 54 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c  TABLE t2 ADD COL
8b60: 55 4d 4e 20 68 20 44 45 46 41 55 4c 54 20 27 74  UMN h DEFAULT 't
8b70: 65 78 74 27 20 52 45 46 45 52 45 4e 43 45 53 20  ext' REFERENCES 
8b80: 74 31 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  t1;.      PRAGMA
8b90: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20   foreign_keys = 
8ba0: 6f 6e 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  on;.      SELECT
8bb0: 20 73 71 6c 20 46 52 4f 4d 20 74 65 6d 70 2e 73   sql FROM temp.s
8bc0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
8bd0: 52 45 20 6e 61 6d 65 3d 27 74 32 27 3b 0a 20 20  RE name='t2';.  
8be0: 20 20 7d 0a 20 20 7d 20 7b 7b 43 52 45 41 54 45    }.  } {{CREATE
8bf0: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20   TABLE t2(a, b, 
8c00: 63 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 2c  c REFERENCES t1,
8c10: 20 64 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 20   d DEFAULT NULL 
8c20: 52 45 46 45 52 45 4e 43 45 53 20 74 31 2c 20 65  REFERENCES t1, e
8c30: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 44   REFERENCES t1 D
8c40: 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 68 20 44  EFAULT NULL, h D
8c50: 45 46 41 55 4c 54 20 27 74 65 78 74 27 20 52 45  EFAULT 'text' RE
8c60: 46 45 52 45 4e 43 45 53 20 74 31 29 7d 7d 0a 0a  FERENCES t1)}}..
8c70: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
8c80: 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 74 6d 70  t_rowid3-14.2tmp
8c90: 2e 31 2e 31 20 7b 0a 20 20 20 20 74 65 73 74 5f  .1.1 {.    test_
8ca0: 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 7b 43  rename_parent {C
8cb0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
8cc0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 7d   REFERENCES t2)}
8cd0: 20 74 32 20 74 33 0a 20 20 7d 20 7b 7b 43 52 45   t2 t3.  } {{CRE
8ce0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 52  ATE TABLE t1(a R
8cf0: 45 46 45 52 45 4e 43 45 53 20 22 74 33 22 29 7d  EFERENCES "t3")}
8d00: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
8d10: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 74  out_rowid3-14.2t
8d20: 6d 70 2e 31 2e 32 20 7b 0a 20 20 20 20 74 65 73  mp.1.2 {.    tes
8d30: 74 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20  t_rename_parent 
8d40: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
8d50: 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 32  (a REFERENCES t2
8d60: 29 7d 20 74 34 20 74 33 0a 20 20 7d 20 7b 7b 43  )} t4 t3.  } {{C
8d70: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
8d80: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 7d   REFERENCES t2)}
8d90: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
8da0: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 74  out_rowid3-14.2t
8db0: 6d 70 2e 31 2e 33 20 7b 0a 20 20 20 20 74 65 73  mp.1.3 {.    tes
8dc0: 74 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20  t_rename_parent 
8dd0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
8de0: 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 22 74  (a REFERENCES "t
8df0: 32 22 29 7d 20 74 32 20 74 33 0a 20 20 7d 20 7b  2")} t2 t3.  } {
8e00: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
8e10: 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 22 74  (a REFERENCES "t
8e20: 33 22 29 7d 7d 0a 20 20 0a 20 20 23 20 54 65 73  3")}}.  .  # Tes
8e30: 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45  t ALTER TABLE RE
8e40: 4e 41 4d 45 20 54 41 42 4c 45 20 61 20 62 69 74  NAME TABLE a bit
8e50: 2e 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20  ..  #.  do_test 
8e60: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
8e70: 34 2e 32 74 6d 70 2e 32 2e 31 20 7b 0a 20 20 20  4.2tmp.2.1 {.   
8e80: 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73   drop_all_tables
8e90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8ea0: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
8eb0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
8ec0: 41 52 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52  ARY KEY, b REFER
8ed0: 45 4e 43 45 53 20 74 31 29 20 57 49 54 48 4f 55  ENCES t1) WITHOU
8ee0: 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 43  T rowid;.      C
8ef0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
8f00: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
8f10: 59 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20  Y, b REFERENCES 
8f20: 74 31 2c 20 63 20 52 45 46 45 52 45 4e 43 45 53  t1, c REFERENCES
8f30: 20 74 32 29 0a 20 20 20 20 20 20 20 20 20 20 20   t2).           
8f40: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
8f50: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
8f60: 50 20 54 41 42 4c 45 20 74 33 28 61 20 52 45 46  P TABLE t3(a REF
8f70: 45 52 45 4e 43 45 53 20 74 31 2c 20 62 20 52 45  ERENCES t1, b RE
8f80: 46 45 52 45 4e 43 45 53 20 74 32 2c 20 63 20 52  FERENCES t2, c R
8f90: 45 46 45 52 45 4e 43 45 53 20 74 31 29 3b 0a 20  EFERENCES t1);. 
8fa0: 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c     }.    execsql
8fb0: 20 7b 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52   { SELECT sql FR
8fc0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
8fd0: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
8fe0: 20 3d 20 27 74 61 62 6c 65 27 7d 0a 20 20 7d 20   = 'table'}.  } 
8ff0: 5b 6c 69 73 74 20 5c 0a 20 20 20 20 7b 43 52 45  [list \.    {CRE
9000: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50  ATE TABLE t1(a P
9010: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 52 45  RIMARY KEY, b RE
9020: 46 45 52 45 4e 43 45 53 20 74 31 29 20 57 49 54  FERENCES t1) WIT
9030: 48 4f 55 54 20 72 6f 77 69 64 7d 20 20 20 20 20  HOUT rowid}     
9040: 20 20 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20    \.    {CREATE 
9050: 54 41 42 4c 45 20 74 32 28 61 20 50 52 49 4d 41  TABLE t2(a PRIMA
9060: 52 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45  RY KEY, b REFERE
9070: 4e 43 45 53 20 74 31 2c 20 63 20 52 45 46 45 52  NCES t1, c REFER
9080: 45 4e 43 45 53 20 74 32 29 0a 20 20 20 20 20 20  ENCES t2).      
9090: 20 20 20 20 20 20 57 49 54 48 4f 55 54 20 72 6f        WITHOUT ro
90a0: 77 69 64 7d 20 20 20 20 5c 0a 20 20 20 20 7b 43  wid}    \.    {C
90b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
90c0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 2c 20   REFERENCES t1, 
90d0: 62 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 2c  b REFERENCES t2,
90e0: 20 63 20 52 45 46 45 52 45 4e 43 45 53 20 74 31   c REFERENCES t1
90f0: 29 7d 20 20 5c 0a 20 20 5d 0a 20 20 64 6f 5f 74  )}  \.  ].  do_t
9100: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
9110: 64 33 2d 31 34 2e 32 74 6d 70 2e 32 2e 32 20 7b  d3-14.2tmp.2.2 {
9120: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 41  .    execsql { A
9130: 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52 45  LTER TABLE t1 RE
9140: 4e 41 4d 45 20 54 4f 20 74 34 20 7d 0a 20 20 20  NAME TO t4 }.   
9150: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
9160: 54 20 73 71 6c 20 46 52 4f 4d 20 74 65 6d 70 2e  T sql FROM temp.
9170: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
9180: 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c  ERE type = 'tabl
9190: 65 27 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5c 0a  e'}.  } [list \.
91a0: 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c      {CREATE TABL
91b0: 45 20 22 74 34 22 28 61 20 50 52 49 4d 41 52 59  E "t4"(a PRIMARY
91c0: 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e 43   KEY, b REFERENC
91d0: 45 53 20 22 74 34 22 29 20 57 49 54 48 4f 55 54  ES "t4") WITHOUT
91e0: 20 72 6f 77 69 64 7d 20 20 20 20 20 20 5c 0a 20   rowid}      \. 
91f0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
9200: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
9210: 59 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20  Y, b REFERENCES 
9220: 22 74 34 22 2c 20 63 20 52 45 46 45 52 45 4e 43  "t4", c REFERENC
9230: 45 53 20 74 32 29 0a 20 20 20 20 20 20 20 20 20  ES t2).         
9240: 20 20 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64     WITHOUT rowid
9250: 7d 20 20 20 20 20 5c 0a 20 20 20 20 7b 43 52 45  }     \.    {CRE
9260: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 52  ATE TABLE t3(a R
9270: 45 46 45 52 45 4e 43 45 53 20 22 74 34 22 2c 20  EFERENCES "t4", 
9280: 62 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 2c  b REFERENCES t2,
9290: 20 63 20 52 45 46 45 52 45 4e 43 45 53 20 22 74   c REFERENCES "t
92a0: 34 22 29 7d 20 5c 0a 20 20 5d 0a 20 20 64 6f 5f  4")} \.  ].  do_
92b0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
92c0: 69 64 33 2d 31 34 2e 32 74 6d 70 2e 32 2e 33 20  id3-14.2tmp.2.3 
92d0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
92e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
92f0: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 20  VALUES(1, 2, 3) 
9300: 7d 0a 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49 47  }.  } {1 {FOREIG
9310: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
9320: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 64 6f 5f 74   failed}}.  do_t
9330: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
9340: 64 33 2d 31 34 2e 32 74 6d 70 2e 32 2e 34 20 7b  d3-14.2tmp.2.4 {
9350: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49  .    execsql { I
9360: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
9370: 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 29 20 7d 0a  LUES(1, NULL) }.
9380: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
9390: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
93a0: 31 34 2e 32 74 6d 70 2e 32 2e 35 20 7b 0a 20 20  14.2tmp.2.5 {.  
93b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 55 50 44    catchsql { UPD
93c0: 41 54 45 20 74 34 20 53 45 54 20 62 20 3d 20 35  ATE t4 SET b = 5
93d0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49   }.  } {1 {FOREI
93e0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
93f0: 74 20 66 61 69 6c 65 64 7d 7d 0a 20 20 64 6f 5f  t failed}}.  do_
9400: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
9410: 69 64 33 2d 31 34 2e 32 74 6d 70 2e 32 2e 36 20  id3-14.2tmp.2.6 
9420: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
9430: 20 55 50 44 41 54 45 20 74 34 20 53 45 54 20 62   UPDATE t4 SET b
9440: 20 3d 20 31 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d   = 1 }.  } {0 {}
9450: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
9460: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 74  out_rowid3-14.2t
9470: 6d 70 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65  mp.2.7 {.    exe
9480: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
9490: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 20  TO t3 VALUES(1, 
94a0: 4e 55 4c 4c 2c 20 31 29 20 7d 0a 20 20 7d 20 7b  NULL, 1) }.  } {
94b0: 7d 0a 0a 20 20 23 20 52 65 70 65 61 74 20 66 6f  }..  # Repeat fo
94c0: 72 20 41 54 54 41 43 48 2d 65 64 20 74 61 62 6c  r ATTACH-ed tabl
94d0: 65 73 0a 20 20 23 0a 20 20 64 72 6f 70 5f 61 6c  es.  #.  drop_al
94e0: 6c 5f 74 61 62 6c 65 73 0a 20 20 64 6f 5f 74 65  l_tables.  do_te
94f0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
9500: 33 2d 31 34 2e 31 61 75 78 2e 31 20 7b 0a 20 20  3-14.1aux.1 {.  
9510: 20 20 23 20 41 64 64 69 6e 67 20 61 20 63 6f 6c    # Adding a col
9520: 75 6d 6e 20 77 69 74 68 20 61 20 52 45 46 45 52  umn with a REFER
9530: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 69 73 20  ENCES clause is 
9540: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
9550: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
9560: 20 20 20 20 41 54 54 41 43 48 20 27 3a 6d 65 6d      ATTACH ':mem
9570: 6f 72 79 3a 27 20 41 53 20 61 75 78 3b 0a 20 20  ory:' AS aux;.  
9580: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
9590: 20 61 75 78 2e 74 31 28 61 20 50 52 49 4d 41 52   aux.t1(a PRIMAR
95a0: 59 20 4b 45 59 29 20 57 49 54 48 4f 55 54 20 72  Y KEY) WITHOUT r
95b0: 6f 77 69 64 3b 0a 20 20 20 20 20 20 43 52 45 41  owid;.      CREA
95c0: 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 32 28  TE TABLE aux.t2(
95d0: 61 2c 20 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  a, b);.    }.   
95e0: 20 63 61 74 63 68 73 71 6c 20 7b 20 41 4c 54 45   catchsql { ALTE
95f0: 52 20 54 41 42 4c 45 20 74 32 20 41 44 44 20 43  R TABLE t2 ADD C
9600: 4f 4c 55 4d 4e 20 63 20 52 45 46 45 52 45 4e 43  OLUMN c REFERENC
9610: 45 53 20 74 31 20 7d 0a 20 20 7d 20 7b 30 20 7b  ES t1 }.  } {0 {
9620: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  }}.  do_test wit
9630: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 31  hout_rowid3-14.1
9640: 61 75 78 2e 32 20 7b 0a 20 20 20 20 63 61 74 63  aux.2 {.    catc
9650: 68 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42  hsql { ALTER TAB
9660: 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e  LE t2 ADD COLUMN
9670: 20 64 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 20   d DEFAULT NULL 
9680: 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 7d 0a  REFERENCES t1 }.
9690: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
96a0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
96b0: 69 64 33 2d 31 34 2e 31 61 75 78 2e 33 20 7b 0a  id3-14.1aux.3 {.
96c0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 41      catchsql { A
96d0: 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 41 44  LTER TABLE t2 AD
96e0: 44 20 43 4f 4c 55 4d 4e 20 65 20 52 45 46 45 52  D COLUMN e REFER
96f0: 45 4e 43 45 53 20 74 31 20 44 45 46 41 55 4c 54  ENCES t1 DEFAULT
9700: 20 4e 55 4c 4c 7d 0a 20 20 7d 20 7b 30 20 7b 7d   NULL}.  } {0 {}
9710: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  }.  do_test with
9720: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 31 61  out_rowid3-14.1a
9730: 75 78 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68  ux.4 {.    catch
9740: 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c  sql { ALTER TABL
9750: 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t2 ADD COLUMN 
9760: 66 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 20  f REFERENCES t1 
9770: 44 45 46 41 55 4c 54 20 27 74 65 78 74 27 7d 0a  DEFAULT 'text'}.
9780: 20 20 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61    } {1 {Cannot a
9790: 64 64 20 61 20 52 45 46 45 52 45 4e 43 45 53 20  dd a REFERENCES 
97a0: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 6e 6f 6e 2d  column with non-
97b0: 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
97c0: 75 65 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  ue}}.  do_test w
97d0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
97e0: 2e 31 61 75 78 2e 35 20 7b 0a 20 20 20 20 63 61  .1aux.5 {.    ca
97f0: 74 63 68 73 71 6c 20 7b 20 41 4c 54 45 52 20 54  tchsql { ALTER T
9800: 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55  ABLE t2 ADD COLU
9810: 4d 4e 20 67 20 44 45 46 41 55 4c 54 20 43 55 52  MN g DEFAULT CUR
9820: 52 45 4e 54 5f 54 49 4d 45 20 52 45 46 45 52 45  RENT_TIME REFERE
9830: 4e 43 45 53 20 74 31 20 7d 0a 20 20 7d 20 7b 31  NCES t1 }.  } {1
9840: 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 52   {Cannot add a R
9850: 45 46 45 52 45 4e 43 45 53 20 63 6f 6c 75 6d 6e  EFERENCES column
9860: 20 77 69 74 68 20 6e 6f 6e 2d 4e 55 4c 4c 20 64   with non-NULL d
9870: 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 7d 0a 20  efault value}}. 
9880: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
9890: 5f 72 6f 77 69 64 33 2d 31 34 2e 31 61 75 78 2e  _rowid3-14.1aux.
98a0: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
98b0: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
98c0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 6f  foreign_keys = o
98d0: 66 66 3b 0a 20 20 20 20 20 20 41 4c 54 45 52 20  ff;.      ALTER 
98e0: 54 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c  TABLE t2 ADD COL
98f0: 55 4d 4e 20 68 20 44 45 46 41 55 4c 54 20 27 74  UMN h DEFAULT 't
9900: 65 78 74 27 20 52 45 46 45 52 45 4e 43 45 53 20  ext' REFERENCES 
9910: 74 31 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  t1;.      PRAGMA
9920: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20   foreign_keys = 
9930: 6f 6e 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  on;.      SELECT
9940: 20 73 71 6c 20 46 52 4f 4d 20 61 75 78 2e 73 71   sql FROM aux.sq
9950: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
9960: 45 20 6e 61 6d 65 3d 27 74 32 27 3b 0a 20 20 20  E name='t2';.   
9970: 20 7d 0a 20 20 7d 20 7b 7b 43 52 45 41 54 45 20   }.  } {{CREATE 
9980: 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63  TABLE t2(a, b, c
9990: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 2c 20   REFERENCES t1, 
99a0: 64 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 20 52  d DEFAULT NULL R
99b0: 45 46 45 52 45 4e 43 45 53 20 74 31 2c 20 65 20  EFERENCES t1, e 
99c0: 52 45 46 45 52 45 4e 43 45 53 20 74 31 20 44 45  REFERENCES t1 DE
99d0: 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 68 20 44 45  FAULT NULL, h DE
99e0: 46 41 55 4c 54 20 27 74 65 78 74 27 20 52 45 46  FAULT 'text' REF
99f0: 45 52 45 4e 43 45 53 20 74 31 29 7d 7d 0a 0a 20  ERENCES t1)}}.. 
9a00: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
9a10: 5f 72 6f 77 69 64 33 2d 31 34 2e 32 61 75 78 2e  _rowid3-14.2aux.
9a20: 31 2e 31 20 7b 0a 20 20 20 20 74 65 73 74 5f 72  1.1 {.    test_r
9a30: 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 7b 43 52  ename_parent {CR
9a40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
9a50: 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 7d 20  REFERENCES t2)} 
9a60: 74 32 20 74 33 0a 20 20 7d 20 7b 7b 43 52 45 41  t2 t3.  } {{CREA
9a70: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 52 45  TE TABLE t1(a RE
9a80: 46 45 52 45 4e 43 45 53 20 22 74 33 22 29 7d 7d  FERENCES "t3")}}
9a90: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
9aa0: 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 61 75  ut_rowid3-14.2au
9ab0: 78 2e 31 2e 32 20 7b 0a 20 20 20 20 74 65 73 74  x.1.2 {.    test
9ac0: 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 7b  _rename_parent {
9ad0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
9ae0: 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29  a REFERENCES t2)
9af0: 7d 20 74 34 20 74 33 0a 20 20 7d 20 7b 7b 43 52  } t4 t3.  } {{CR
9b00: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
9b10: 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 7d 7d  REFERENCES t2)}}
9b20: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
9b30: 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 61 75  ut_rowid3-14.2au
9b40: 78 2e 31 2e 33 20 7b 0a 20 20 20 20 74 65 73 74  x.1.3 {.    test
9b50: 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 7b  _rename_parent {
9b60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
9b70: 61 20 52 45 46 45 52 45 4e 43 45 53 20 22 74 32  a REFERENCES "t2
9b80: 22 29 7d 20 74 32 20 74 33 0a 20 20 7d 20 7b 7b  ")} t2 t3.  } {{
9b90: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
9ba0: 61 20 52 45 46 45 52 45 4e 43 45 53 20 22 74 33  a REFERENCES "t3
9bb0: 22 29 7d 7d 0a 20 20 0a 20 20 23 20 54 65 73 74  ")}}.  .  # Test
9bc0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45 4e   ALTER TABLE REN
9bd0: 41 4d 45 20 54 41 42 4c 45 20 61 20 62 69 74 2e  AME TABLE a bit.
9be0: 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 77  .  #.  do_test w
9bf0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
9c00: 2e 32 61 75 78 2e 32 2e 31 20 7b 0a 20 20 20 20  .2aux.2.1 {.    
9c10: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
9c20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
9c30: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
9c40: 20 61 75 78 2e 74 31 28 61 20 50 52 49 4d 41 52   aux.t1(a PRIMAR
9c50: 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e  Y KEY, b REFEREN
9c60: 43 45 53 20 74 31 29 20 57 49 54 48 4f 55 54 20  CES t1) WITHOUT 
9c70: 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 43 52 45  rowid;.      CRE
9c80: 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 32  ATE TABLE aux.t2
9c90: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
9ca0: 62 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 2c  b REFERENCES t1,
9cb0: 20 63 20 52 45 46 45 52 45 4e 43 45 53 20 74 32   c REFERENCES t2
9cc0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 49  ).            WI
9cd0: 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20  THOUT rowid;.   
9ce0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
9cf0: 61 75 78 2e 74 33 28 61 20 52 45 46 45 52 45 4e  aux.t3(a REFEREN
9d00: 43 45 53 20 74 31 2c 20 62 20 52 45 46 45 52 45  CES t1, b REFERE
9d10: 4e 43 45 53 20 74 32 2c 20 63 20 52 45 46 45 52  NCES t2, c REFER
9d20: 45 4e 43 45 53 20 74 31 29 3b 0a 20 20 20 20 7d  ENCES t1);.    }
9d30: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53  .    execsql { S
9d40: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 61  ELECT sql FROM a
9d50: 75 78 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ux.sqlite_master
9d60: 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
9d70: 61 62 6c 65 27 7d 0a 20 20 7d 20 5b 6c 69 73 74  able'}.  } [list
9d80: 20 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20 54   \.    {CREATE T
9d90: 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52  ABLE t1(a PRIMAR
9da0: 59 20 4b 45 59 2c 20 62 20 52 45 46 45 52 45 4e  Y KEY, b REFEREN
9db0: 43 45 53 20 74 31 29 20 57 49 54 48 4f 55 54 20  CES t1) WITHOUT 
9dc0: 72 6f 77 69 64 7d 20 20 20 20 20 20 20 5c 0a 20  rowid}       \. 
9dd0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
9de0: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
9df0: 59 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53 20  Y, b REFERENCES 
9e00: 74 31 2c 20 63 20 52 45 46 45 52 45 4e 43 45 53  t1, c REFERENCES
9e10: 20 74 32 29 0a 20 20 20 20 20 20 20 20 20 20 20   t2).           
9e20: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 7d 20   WITHOUT rowid} 
9e30: 20 20 20 5c 0a 20 20 20 20 7b 43 52 45 41 54 45     \.    {CREATE
9e40: 20 54 41 42 4c 45 20 74 33 28 61 20 52 45 46 45   TABLE t3(a REFE
9e50: 52 45 4e 43 45 53 20 74 31 2c 20 62 20 52 45 46  RENCES t1, b REF
9e60: 45 52 45 4e 43 45 53 20 74 32 2c 20 63 20 52 45  ERENCES t2, c RE
9e70: 46 45 52 45 4e 43 45 53 20 74 31 29 7d 20 20 5c  FERENCES t1)}  \
9e80: 0a 20 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 77  .  ].  do_test w
9e90: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
9ea0: 2e 32 61 75 78 2e 32 2e 32 20 7b 0a 20 20 20 20  .2aux.2.2 {.    
9eb0: 65 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52 20  execsql { ALTER 
9ec0: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
9ed0: 54 4f 20 74 34 20 7d 0a 20 20 20 20 65 78 65 63  TO t4 }.    exec
9ee0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 73 71 6c  sql { SELECT sql
9ef0: 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c 69 74 65   FROM aux.sqlite
9f00: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
9f10: 70 65 20 3d 20 27 74 61 62 6c 65 27 7d 0a 20 20  pe = 'table'}.  
9f20: 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 7b 43  } [list \.    {C
9f30: 52 45 41 54 45 20 54 41 42 4c 45 20 22 74 34 22  REATE TABLE "t4"
9f40: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
9f50: 62 20 52 45 46 45 52 45 4e 43 45 53 20 22 74 34  b REFERENCES "t4
9f60: 22 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64  ") WITHOUT rowid
9f70: 7d 20 20 20 20 20 20 5c 0a 20 20 20 20 7b 43 52  }      \.    {CR
9f80: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 20  EATE TABLE t2(a 
9f90: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 52  PRIMARY KEY, b R
9fa0: 45 46 45 52 45 4e 43 45 53 20 22 74 34 22 2c 20  EFERENCES "t4", 
9fb0: 63 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29  c REFERENCES t2)
9fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 49 54  .            WIT
9fd0: 48 4f 55 54 20 72 6f 77 69 64 7d 20 20 20 20 20  HOUT rowid}     
9fe0: 5c 0a 20 20 20 20 7b 43 52 45 41 54 45 20 54 41  \.    {CREATE TA
9ff0: 42 4c 45 20 74 33 28 61 20 52 45 46 45 52 45 4e  BLE t3(a REFEREN
a000: 43 45 53 20 22 74 34 22 2c 20 62 20 52 45 46 45  CES "t4", b REFE
a010: 52 45 4e 43 45 53 20 74 32 2c 20 63 20 52 45 46  RENCES t2, c REF
a020: 45 52 45 4e 43 45 53 20 22 74 34 22 29 7d 20 5c  ERENCES "t4")} \
a030: 0a 20 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 77  .  ].  do_test w
a040: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
a050: 2e 32 61 75 78 2e 32 2e 33 20 7b 0a 20 20 20 20  .2aux.2.3 {.    
a060: 63 61 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52  catchsql { INSER
a070: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
a080: 28 31 2c 20 32 2c 20 33 29 20 7d 0a 20 20 7d 20  (1, 2, 3) }.  } 
a090: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
a0a0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
a0b0: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  d}}.  do_test wi
a0c0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e  thout_rowid3-14.
a0d0: 32 61 75 78 2e 32 2e 34 20 7b 0a 20 20 20 20 65  2aux.2.4 {.    e
a0e0: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
a0f0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
a100: 2c 20 4e 55 4c 4c 29 20 7d 0a 20 20 7d 20 7b 7d  , NULL) }.  } {}
a110: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
a120: 75 74 5f 72 6f 77 69 64 33 2d 31 34 2e 32 61 75  ut_rowid3-14.2au
a130: 78 2e 32 2e 35 20 7b 0a 20 20 20 20 63 61 74 63  x.2.5 {.    catc
a140: 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74 34  hsql { UPDATE t4
a150: 20 53 45 54 20 62 20 3d 20 35 20 7d 0a 20 20 7d   SET b = 5 }.  }
a160: 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59   {1 {FOREIGN KEY
a170: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
a180: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  ed}}.  do_test w
a190: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 34  ithout_rowid3-14
a1a0: 2e 32 61 75 78 2e 32 2e 36 20 7b 0a 20 20 20 20  .2aux.2.6 {.    
a1b0: 63 61 74 63 68 73 71 6c 20 7b 20 55 50 44 41 54  catchsql { UPDAT
a1c0: 45 20 74 34 20 53 45 54 20 62 20 3d 20 31 20 7d  E t4 SET b = 1 }
a1d0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
a1e0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
a1f0: 77 69 64 33 2d 31 34 2e 32 61 75 78 2e 32 2e 37  wid3-14.2aux.2.7
a200: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
a210: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
a220: 56 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20  VALUES(1, NULL, 
a230: 31 29 20 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64  1) }.  } {}.}..d
a240: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
a250: 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e 31 20 7b  owid3-2.14.3.1 {
a260: 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .  drop_all_tabl
a270: 65 73 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  es.  execsql {. 
a280: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
a290: 74 31 28 61 2c 20 62 20 52 45 46 45 52 45 4e 43  t1(a, b REFERENC
a2a0: 45 53 20 6e 6f 73 75 63 68 74 61 62 6c 65 29 3b  ES nosuchtable);
a2b0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
a2c0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  t1;.  }.} {}.do_
a2d0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
a2e0: 69 64 33 2d 32 2e 31 34 2e 33 2e 32 20 7b 0a 20  id3-2.14.3.2 {. 
a2f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
a300: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
a310: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29   PRIMARY KEY, b)
a320: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
a330: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
a340: 74 31 20 56 41 4c 55 45 53 28 27 61 27 2c 20 31  t1 VALUES('a', 1
a350: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
a360: 42 4c 45 20 74 32 28 78 20 52 45 46 45 52 45 4e  BLE t2(x REFEREN
a370: 43 45 53 20 74 31 29 3b 0a 20 20 20 20 49 4e 53  CES t1);.    INS
a380: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a390: 45 53 28 27 61 27 29 3b 0a 20 20 7d 0a 7d 20 7b  ES('a');.  }.} {
a3a0: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
a3b0: 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e  t_rowid3-2.14.3.
a3c0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
a3d0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 20 7d   DROP TABLE t1 }
a3e0: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
a3f0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
a400: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
a410: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e  ithout_rowid3-2.
a420: 31 34 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63 73  14.3.4 {.  execs
a430: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
a440: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44 52 4f  FROM t2;.    DRO
a450: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a  P TABLE t1;.  }.
a460: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74  } {}.do_test wit
a470: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34  hout_rowid3-2.14
a480: 2e 33 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71  .3.4 {.  catchsq
a490: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
a4a0: 74 32 20 56 41 4c 55 45 53 28 27 78 27 29 20 7d  t2 VALUES('x') }
a4b0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
a4c0: 61 62 6c 65 3a 20 6d 61 69 6e 2e 74 31 7d 7d 0a  able: main.t1}}.
a4d0: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
a4e0: 72 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e 35 20  rowid3-2.14.3.5 
a4f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
a500: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
a510: 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 29  1(x PRIMARY KEY)
a520: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
a530: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
a540: 74 31 20 56 41 4c 55 45 53 28 27 78 27 29 3b 0a  t1 VALUES('x');.
a550: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20    }.  execsql { 
a560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
a570: 41 4c 55 45 53 28 27 78 27 29 20 7d 0a 7d 20 7b  ALUES('x') }.} {
a580: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
a590: 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e  t_rowid3-2.14.3.
a5a0: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
a5b0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 20 7d   DROP TABLE t1 }
a5c0: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
a5d0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
a5e0: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
a5f0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e  ithout_rowid3-2.
a600: 31 34 2e 33 2e 37 20 7b 0a 20 20 65 78 65 63 73  14.3.7 {.  execs
a610: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
a620: 42 4c 45 20 74 32 3b 0a 20 20 20 20 44 52 4f 50  BLE t2;.    DROP
a630: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a 7d   TABLE t1;.  }.}
a640: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   {}.do_test with
a650: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e  out_rowid3-2.14.
a660: 33 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.8 {.  execsql 
a670: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
a680: 4c 45 20 70 70 28 78 2c 20 79 2c 20 50 52 49 4d  LE pp(x, y, PRIM
a690: 41 52 59 20 4b 45 59 28 78 2c 20 79 29 29 20 57  ARY KEY(x, y)) W
a6a0: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
a6b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
a6c0: 63 28 61 2c 20 62 2c 20 46 4f 52 45 49 47 4e 20  c(a, b, FOREIGN 
a6d0: 4b 45 59 28 61 2c 20 62 29 20 52 45 46 45 52 45  KEY(a, b) REFERE
a6e0: 4e 43 45 53 20 70 70 28 78 2c 20 7a 29 29 3b 0a  NCES pp(x, z));.
a6f0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
a700: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 63 20   INSERT INTO cc 
a710: 56 41 4c 55 45 53 28 31 2c 20 32 29 20 7d 0a 7d  VALUES(1, 2) }.}
a720: 20 7b 31 20 7b 66 6f 72 65 69 67 6e 20 6b 65 79   {1 {foreign key
a730: 20 6d 69 73 6d 61 74 63 68 20 2d 20 22 63 63 22   mismatch - "cc"
a740: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 22 70 70   referencing "pp
a750: 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  "}}.do_test with
a760: 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e  out_rowid3-2.14.
a770: 33 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.9 {.  execsql 
a780: 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 63 63 20  { DROP TABLE cc 
a790: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
a7a0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e  ithout_rowid3-2.
a7b0: 31 34 2e 33 2e 31 30 20 7b 0a 20 20 65 78 65 63  14.3.10 {.  exec
a7c0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
a7d0: 20 54 41 42 4c 45 20 63 63 28 61 2c 20 62 2c 20   TABLE cc(a, b, 
a7e0: 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b  .      FOREIGN K
a7f0: 45 59 28 61 2c 20 62 29 20 52 45 46 45 52 45 4e  EY(a, b) REFEREN
a800: 43 45 53 20 70 70 20 44 45 46 45 52 52 41 42 4c  CES pp DEFERRABL
a810: 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45 46 45  E INITIALLY DEFE
a820: 52 52 45 44 0a 20 20 20 20 29 3b 0a 20 20 7d 0a  RRED.    );.  }.
a830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
a840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 70 20 56  INSERT INTO pp V
a850: 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 29 3b  ALUES('a', 'b');
a860: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
a870: 20 63 63 20 56 41 4c 55 45 53 28 27 61 27 2c 20   cc VALUES('a', 
a880: 27 62 27 29 3b 0a 20 20 20 20 42 45 47 49 4e 3b  'b');.    BEGIN;
a890: 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
a8a0: 45 20 70 70 3b 0a 20 20 20 20 20 20 43 52 45 41  E pp;.      CREA
a8b0: 54 45 20 54 41 42 4c 45 20 70 70 28 61 2c 20 62  TE TABLE pp(a, b
a8c0: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
a8d0: 28 62 2c 20 63 29 29 20 57 49 54 48 4f 55 54 20  (b, c)) WITHOUT 
a8e0: 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 49 4e 53  rowid;.      INS
a8f0: 45 52 54 20 49 4e 54 4f 20 70 70 20 56 41 4c 55  ERT INTO pp VALU
a900: 45 53 28 31 2c 20 27 61 27 2c 20 27 62 27 29 3b  ES(1, 'a', 'b');
a910: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d  .    COMMIT;.  }
a920: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69  .} {}.do_test wi
a930: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 2e 31  thout_rowid3-2.1
a940: 34 2e 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73  4.3.11 {.  execs
a950: 71 6c 20 7b 20 0a 20 20 20 20 42 45 47 49 4e 3b  ql { .    BEGIN;
a960: 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
a970: 45 20 63 63 3b 0a 20 20 20 20 20 20 44 52 4f 50  E cc;.      DROP
a980: 20 54 41 42 4c 45 20 70 70 3b 0a 20 20 20 20 43   TABLE pp;.    C
a990: 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  OMMIT;.  }.} {}.
a9a0: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
a9b0: 72 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e 31 32  rowid3-2.14.3.12
a9c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
a9d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
a9e0: 62 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 43 52  b1(a, b);.    CR
a9f0: 45 41 54 45 20 54 41 42 4c 45 20 62 32 28 61 2c  EATE TABLE b2(a,
aa00: 20 62 20 52 45 46 45 52 45 4e 43 45 53 20 62 31   b REFERENCES b1
aa10: 29 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  );.    DROP TABL
aa20: 45 20 62 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  E b1;.  }.} {}.d
aa30: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
aa40: 6f 77 69 64 33 2d 32 2e 31 34 2e 33 2e 31 33 20  owid3-2.14.3.13 
aa50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
aa60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 62    CREATE TABLE b
aa70: 33 28 61 2c 20 62 20 52 45 46 45 52 45 4e 43 45  3(a, b REFERENCE
aa80: 53 20 62 32 20 44 45 46 45 52 52 41 42 4c 45 20  S b2 DEFERRABLE 
aa90: 49 4e 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52  INITIALLY DEFERR
aaa0: 45 44 29 3b 0a 20 20 20 20 44 52 4f 50 20 54 41  ED);.    DROP TA
aab0: 42 4c 45 20 62 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  BLE b2;.  }.} {}
aac0: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 6e 6f  ..# Test that no
aad0: 74 68 69 6e 67 20 67 6f 65 73 20 77 72 6f 6e 67  thing goes wrong
aae0: 20 77 68 65 6e 20 64 72 6f 70 70 69 6e 67 20 61   when dropping a
aaf0: 20 74 61 62 6c 65 20 74 68 61 74 20 72 65 66 65   table that refe
ab00: 72 73 20 74 6f 20 61 20 76 69 65 77 2e 0a 23 20  rs to a view..# 
ab10: 4f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 76 69  Or dropping a vi
ab20: 65 77 20 74 68 61 74 20 61 6e 20 65 78 69 73 74  ew that an exist
ab30: 69 6e 67 20 46 4b 20 28 69 6e 63 6f 72 72 65 63  ing FK (incorrec
ab40: 74 6c 79 29 20 72 65 66 65 72 73 20 74 6f 2e 20  tly) refers to. 
ab50: 4f 72 20 65 69 74 68 65 72 0a 23 20 6f 66 20 74  Or either.# of t
ab60: 68 65 20 61 62 6f 76 65 20 73 63 65 6e 61 72 69  he above scenari
ab70: 6f 73 20 77 69 74 68 20 61 20 76 69 72 74 75 61  os with a virtua
ab80: 6c 20 74 61 62 6c 65 2e 0a 64 72 6f 70 5f 61 6c  l table..drop_al
ab90: 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73 74  l_tables.do_test
aba0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
abb0: 32 2e 31 34 2e 34 2e 31 20 7b 0a 20 20 65 78 65  2.14.4.1 {.  exe
abc0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
abd0: 45 20 54 41 42 4c 45 20 74 31 28 78 20 52 45 46  E TABLE t1(x REF
abe0: 45 52 45 4e 43 45 53 20 76 29 3b 20 0a 20 20 20  ERENCES v); .   
abf0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 20 41   CREATE VIEW v A
ac00: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
ac10: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  t1;.  }.} {}.do_
ac20: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
ac30: 69 64 33 2d 32 2e 31 34 2e 34 2e 32 20 7b 0a 20  id3-2.14.4.2 {. 
ac40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
ac50: 52 4f 50 20 56 49 45 57 20 76 3b 0a 20 20 7d 0a  ROP VIEW v;.  }.
ac60: 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 76  } {}.ifcapable v
ac70: 74 61 62 20 7b 0a 20 20 72 65 67 69 73 74 65 72  tab {.  register
ac80: 5f 65 63 68 6f 5f 6d 6f 64 75 6c 65 20 64 62 0a  _echo_module db.
ac90: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
aca0: 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e 34 2e  t_rowid3-2.14.4.
acb0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
acc0: 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  { CREATE VIRTUAL
acd0: 20 54 41 42 4c 45 20 76 20 55 53 49 4e 47 20 65   TABLE v USING e
ace0: 63 68 6f 28 74 31 29 20 7d 0a 20 20 7d 20 7b 7d  cho(t1) }.  } {}
acf0: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
ad00: 75 74 5f 72 6f 77 69 64 33 2d 32 2e 31 34 2e 34  ut_rowid3-2.14.4
ad10: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
ad20: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
ad30: 42 4c 45 20 76 3b 0a 20 20 20 20 7d 0a 20 20 7d  BLE v;.    }.  }
ad40: 20 7b 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d   {}.}..#--------
ad50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ad90: 2d 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  -.# The followin
ada0: 67 20 74 65 73 74 73 2c 20 77 69 74 68 6f 75 74  g tests, without
adb0: 5f 72 6f 77 69 64 33 2d 31 35 2e 2a 2c 20 74 65  _rowid3-15.*, te
adc0: 73 74 20 74 68 61 74 20 75 6e 6e 65 63 65 73 73  st that unnecess
add0: 61 72 79 20 46 4b 20 72 65 6c 61 74 65 64 20 73  ary FK related s
ade0: 63 61 6e 73 20 0a 23 20 61 6e 64 20 6c 6f 6f 6b  cans .# and look
adf0: 75 70 73 20 61 72 65 20 61 76 6f 69 64 65 64 20  ups are avoided 
ae00: 77 68 65 6e 20 74 68 65 20 63 6f 6e 73 74 72 61  when the constra
ae10: 69 6e 74 20 63 6f 75 6e 74 65 72 73 20 61 72 65  int counters are
ae20: 20 7a 65 72 6f 2e 0a 23 0a 64 72 6f 70 5f 61 6c   zero..#.drop_al
ae30: 6c 5f 74 61 62 6c 65 73 0a 70 72 6f 63 20 65 78  l_tables.proc ex
ae40: 65 63 73 71 6c 53 20 7b 7a 53 71 6c 7d 20 7b 0a  ecsqlS {zSql} {.
ae50: 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f 73    set ::sqlite_s
ae60: 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20  earch_count 0.  
ae70: 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f 66 6f 75  set ::sqlite_fou
ae80: 6e 64 5f 63 6f 75 6e 74 20 30 0a 20 20 73 65 74  nd_count 0.  set
ae90: 20 72 65 73 20 5b 75 70 6c 65 76 65 6c 20 5b 6c   res [uplevel [l
aea0: 69 73 74 20 65 78 65 63 73 71 6c 20 24 7a 53 71  ist execsql $zSq
aeb0: 6c 5d 5d 0a 20 20 63 6f 6e 63 61 74 20 5b 65 78  l]].  concat [ex
aec0: 70 72 20 24 3a 3a 73 71 6c 69 74 65 5f 66 6f 75  pr $::sqlite_fou
aed0: 6e 64 5f 63 6f 75 6e 74 20 2b 20 24 3a 3a 73 71  nd_count + $::sq
aee0: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
aef0: 74 5d 20 24 72 65 73 0a 7d 0a 64 6f 5f 74 65 73  t] $res.}.do_tes
af00: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
af10: 2d 31 35 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  -15.1.1 {.  exec
af20: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
af30: 20 54 41 42 4c 45 20 70 70 28 61 20 50 52 49 4d   TABLE pp(a PRIM
af40: 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48  ARY KEY, b) WITH
af50: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 43  OUT rowid;.    C
af60: 52 45 41 54 45 20 54 41 42 4c 45 20 63 63 28 78  REATE TABLE cc(x
af70: 2c 20 79 20 52 45 46 45 52 45 4e 43 45 53 20 70  , y REFERENCES p
af80: 70 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49  p DEFERRABLE INI
af90: 54 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44 29  TIALLY DEFERRED)
afa0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
afb0: 4f 20 70 70 20 56 41 4c 55 45 53 28 31 2c 20 27  O pp VALUES(1, '
afc0: 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  one');.    INSER
afd0: 54 20 49 4e 54 4f 20 70 70 20 56 41 4c 55 45 53  T INTO pp VALUES
afe0: 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 20 20  (2, 'two');.    
aff0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 63 20 56  INSERT INTO cc V
b000: 41 4c 55 45 53 28 27 6e 65 75 6e 67 27 2c 20 31  ALUES('neung', 1
b010: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
b020: 54 4f 20 63 63 20 56 41 4c 55 45 53 28 27 73 6f  TO cc VALUES('so
b030: 6e 67 27 2c 20 32 29 3b 0a 20 20 7d 0a 7d 20 7b  ng', 2);.  }.} {
b040: 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  }.do_test withou
b050: 74 5f 72 6f 77 69 64 33 2d 31 35 2e 31 2e 32 20  t_rowid3-15.1.2 
b060: 7b 0a 20 20 65 78 65 63 73 71 6c 53 20 7b 20 49  {.  execsqlS { I
b070: 4e 53 45 52 54 20 49 4e 54 4f 20 70 70 20 56 41  NSERT INTO pp VA
b080: 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65 27 29  LUES(3, 'three')
b090: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
b0a0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
b0b0: 31 35 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  15.1.3 {.  execs
b0c0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
b0d0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
b0e0: 4f 20 63 63 20 56 41 4c 55 45 53 28 27 73 65 65  O cc VALUES('see
b0f0: 27 2c 20 34 29 3b 20 20 20 20 2d 2d 20 56 69 6f  ', 4);    -- Vio
b100: 6c 61 74 65 73 20 64 65 66 65 72 72 65 64 20 63  lates deferred c
b110: 6f 6e 73 74 72 61 69 6e 74 0a 20 20 7d 0a 20 20  onstraint.  }.  
b120: 65 78 65 63 73 71 6c 53 20 7b 20 49 4e 53 45 52  execsqlS { INSER
b130: 54 20 49 4e 54 4f 20 70 70 20 56 41 4c 55 45 53  T INTO pp VALUES
b140: 28 35 2c 20 27 66 69 76 65 27 29 20 7d 0a 7d 20  (5, 'five') }.} 
b150: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  {2}.do_test with
b160: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 35 2e 31 2e  out_rowid3-15.1.
b170: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 {.  execsql { 
b180: 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 63 20 57  DELETE FROM cc W
b190: 48 45 52 45 20 78 20 3d 20 27 73 65 65 27 20 7d  HERE x = 'see' }
b1a0: 0a 20 20 65 78 65 63 73 71 6c 53 20 7b 20 49 4e  .  execsqlS { IN
b1b0: 53 45 52 54 20 49 4e 54 4f 20 70 70 20 56 41 4c  SERT INTO pp VAL
b1c0: 55 45 53 28 36 2c 20 27 73 69 78 27 29 20 7d 0a  UES(6, 'six') }.
b1d0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 77 69  } {0}.do_test wi
b1e0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 35 2e  thout_rowid3-15.
b1f0: 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.5 {.  execsql 
b200: 43 4f 4d 4d 49 54 0a 7d 20 7b 7d 0a 64 6f 5f 74  COMMIT.} {}.do_t
b210: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
b220: 64 33 2d 31 35 2e 31 2e 36 20 7b 0a 20 20 65 78  d3-15.1.6 {.  ex
b230: 65 63 73 71 6c 20 42 45 47 49 4e 0a 20 20 65 78  ecsql BEGIN.  ex
b240: 65 63 73 71 6c 53 20 7b 0a 20 20 20 20 44 45 4c  ecsqlS {.    DEL
b250: 45 54 45 20 46 52 4f 4d 20 63 63 20 57 48 45 52  ETE FROM cc WHER
b260: 45 20 78 20 3d 20 27 6e 65 75 6e 67 27 3b 0a 20  E x = 'neung';. 
b270: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d     ROLLBACK;.  }
b280: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 77  .} {1}.do_test w
b290: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 35  ithout_rowid3-15
b2a0: 2e 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.7 {.  execsql
b2b0: 20 7b 20 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20   { .    BEGIN;. 
b2c0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 70     DELETE FROM p
b2d0: 70 20 57 48 45 52 45 20 61 20 3d 20 32 3b 0a 20  p WHERE a = 2;. 
b2e0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 53 20 7b 0a   }.  execsqlS {.
b2f0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
b300: 63 63 20 57 48 45 52 45 20 78 20 3d 20 27 6e 65  cc WHERE x = 'ne
b310: 75 6e 67 27 3b 0a 20 20 20 20 52 4f 4c 4c 42 41  ung';.    ROLLBA
b320: 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 0a 23  CK;.  }.} {2}..#
b330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
b370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 69 73  ---------.# This
b380: 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 74   next block of t
b390: 65 73 74 73 2c 20 77 69 74 68 6f 75 74 5f 72 6f  ests, without_ro
b3a0: 77 69 64 33 2d 31 36 2e 2a 2c 20 74 65 73 74 20  wid3-16.*, test 
b3b0: 74 68 61 74 20 72 6f 77 73 20 74 68 61 74 20 72  that rows that r
b3c0: 65 66 65 72 20 74 6f 0a 23 20 74 68 65 6d 73 65  efer to.# themse
b3d0: 6c 76 65 73 20 6d 61 79 20 62 65 20 69 6e 73 65  lves may be inse
b3e0: 72 74 65 64 20 61 6e 64 20 64 65 6c 65 74 65 64  rted and deleted
b3f0: 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  ..#.foreach {tn 
b400: 7a 53 63 68 65 6d 61 7d 20 7b 0a 20 20 31 20 7b  zSchema} {.  1 {
b410: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 65   CREATE TABLE se
b420: 6c 66 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  lf(a INTEGER PRI
b430: 4d 41 52 59 20 4b 45 59 2c 20 62 20 52 45 46 45  MARY KEY, b REFE
b440: 52 45 4e 43 45 53 20 73 65 6c 66 28 61 29 29 0a  RENCES self(a)).
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 49 54               WIT
b460: 48 4f 55 54 20 72 6f 77 69 64 20 7d 0a 20 20 32  HOUT rowid }.  2
b470: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
b480: 73 65 6c 66 28 61 20 50 52 49 4d 41 52 59 20 4b  self(a PRIMARY K
b490: 45 59 2c 20 62 20 52 45 46 45 52 45 4e 43 45 53  EY, b REFERENCES
b4a0: 20 73 65 6c 66 28 61 29 29 20 57 49 54 48 4f 55   self(a)) WITHOU
b4b0: 54 20 72 6f 77 69 64 20 7d 0a 20 20 33 20 7b 20  T rowid }.  3 { 
b4c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 65 6c  CREATE TABLE sel
b4d0: 66 28 61 20 55 4e 49 51 55 45 2c 20 62 20 49 4e  f(a UNIQUE, b IN
b4e0: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 20 52 45  T PRIMARY KEY RE
b4f0: 46 45 52 45 4e 43 45 53 20 73 65 6c 66 28 61 29  FERENCES self(a)
b500: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 57  ).             W
b510: 49 54 48 4f 55 54 20 72 6f 77 69 64 20 7d 0a 7d  ITHOUT rowid }.}
b520: 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61   {.  drop_all_ta
b530: 62 6c 65 73 0a 20 20 64 6f 5f 74 65 73 74 20 77  bles.  do_test w
b540: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36  ithout_rowid3-16
b550: 2e 31 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 65  .1.$tn.1 {.    e
b560: 78 65 63 73 71 6c 20 24 7a 53 63 68 65 6d 61 0a  xecsql $zSchema.
b570: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
b580: 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66 20 56  SERT INTO self V
b590: 41 4c 55 45 53 28 31 33 2c 20 31 33 29 20 7d 0a  ALUES(13, 13) }.
b5a0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
b5b0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
b5c0: 31 36 2e 31 2e 24 74 6e 2e 32 20 7b 0a 20 20 20  16.1.$tn.2 {.   
b5d0: 20 65 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54   execsql { UPDAT
b5e0: 45 20 73 65 6c 66 20 53 45 54 20 61 20 3d 20 31  E self SET a = 1
b5f0: 34 2c 20 62 20 3d 20 31 34 20 7d 0a 20 20 7d 20  4, b = 14 }.  } 
b600: 7b 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  {}..  do_test wi
b610: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e  thout_rowid3-16.
b620: 31 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 63 61  1.$tn.3 {.    ca
b630: 74 63 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20  tchsql { UPDATE 
b640: 73 65 6c 66 20 53 45 54 20 62 20 3d 20 31 35 20  self SET b = 15 
b650: 7d 0a 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49 47  }.  } {1 {FOREIG
b660: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
b670: 20 66 61 69 6c 65 64 7d 7d 0a 0a 20 20 64 6f 5f   failed}}..  do_
b680: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
b690: 69 64 33 2d 31 36 2e 31 2e 24 74 6e 2e 34 20 7b  id3-16.1.$tn.4 {
b6a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20  .    catchsql { 
b6b0: 55 50 44 41 54 45 20 73 65 6c 66 20 53 45 54 20  UPDATE self SET 
b6c0: 61 20 3d 20 31 35 20 7d 0a 20 20 7d 20 7b 31 20  a = 15 }.  } {1 
b6d0: 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  {FOREIGN KEY con
b6e0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d  straint failed}}
b6f0: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  ..  do_test with
b700: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e 31 2e  out_rowid3-16.1.
b710: 24 74 6e 2e 35 20 7b 0a 20 20 20 20 63 61 74 63  $tn.5 {.    catc
b720: 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20 73 65  hsql { UPDATE se
b730: 6c 66 20 53 45 54 20 61 20 3d 20 31 35 2c 20 62  lf SET a = 15, b
b740: 20 3d 20 31 36 20 7d 0a 20 20 7d 20 7b 31 20 7b   = 16 }.  } {1 {
b750: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
b760: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a  traint failed}}.
b770: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
b780: 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e 31 2e 24  ut_rowid3-16.1.$
b790: 74 6e 2e 36 20 7b 0a 20 20 20 20 63 61 74 63 68  tn.6 {.    catch
b7a0: 73 71 6c 20 7b 20 55 50 44 41 54 45 20 73 65 6c  sql { UPDATE sel
b7b0: 66 20 53 45 54 20 61 20 3d 20 31 37 2c 20 62 20  f SET a = 17, b 
b7c0: 3d 20 31 37 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d  = 17 }.  } {0 {}
b7d0: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  }..  do_test wit
b7e0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e 31  hout_rowid3-16.1
b7f0: 2e 24 74 6e 2e 37 20 7b 0a 20 20 20 20 65 78 65  .$tn.7 {.    exe
b800: 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46 52  csql { DELETE FR
b810: 4f 4d 20 73 65 6c 66 20 7d 0a 20 20 7d 20 7b 7d  OM self }.  } {}
b820: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
b830: 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e 31 2e 24  ut_rowid3-16.1.$
b840: 74 6e 2e 38 20 7b 0a 20 20 20 20 63 61 74 63 68  tn.8 {.    catch
b850: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
b860: 4f 20 73 65 6c 66 20 56 41 4c 55 45 53 28 32 30  O self VALUES(20
b870: 2c 20 32 31 29 20 7d 0a 20 20 7d 20 7b 31 20 7b  , 21) }.  } {1 {
b880: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
b890: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a  traint failed}}.
b8a0: 7d 0a 0a 23 20 41 64 64 69 74 69 6f 6e 61 6c 20  }..# Additional 
b8b0: 74 65 73 74 73 20 63 61 73 65 73 20 75 73 69 6e  tests cases usin
b8c0: 67 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 73  g multi-column s
b8d0: 65 6c 66 2d 72 65 66 65 72 65 6e 74 69 61 6c 0a  elf-referential.
b8e0: 23 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  # FOREIGN KEY co
b8f0: 6e 73 74 72 61 69 6e 74 73 2e 0a 23 0a 64 72 6f  nstraints..#.dro
b900: 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f  p_all_tables.do_
b910: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 69 74  execsql_test wit
b920: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e 34  hout_rowid3-16.4
b930: 2e 31 2e 31 20 7b 0a 20 20 50 52 41 47 4d 41 20  .1.1 {.  PRAGMA 
b940: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 4e 3b  foreign_keys=ON;
b950: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
b960: 74 31 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c 0a  t1(a,b,c,d,e,f,.
b970: 20 20 20 20 20 55 4e 49 51 55 45 20 28 61 2c 62       UNIQUE (a,b
b980: 29 2c 0a 20 20 20 20 20 50 52 49 4d 41 52 59 20  ),.     PRIMARY 
b990: 4b 45 59 20 28 65 2c 63 29 2c 0a 20 20 20 20 20  KEY (e,c),.     
b9a0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 64 2c 66  FOREIGN KEY (d,f
b9b0: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28  ) REFERENCES t1(
b9c0: 65 2c 63 29 0a 20 20 29 20 57 49 54 48 4f 55 54  e,c).  ) WITHOUT
b9d0: 20 72 6f 77 69 64 3b 0a 20 20 49 4e 53 45 52 54   rowid;.  INSERT
b9e0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
b9f0: 31 2c 32 2c 33 2c 35 2c 35 2c 33 29 3b 0a 20 20  1,2,3,5,5,3);.  
ba00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
ba10: 41 4c 55 45 53 28 32 2c 33 2c 34 2c 36 2c 36 2c  ALUES(2,3,4,6,6,
ba20: 34 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  4);.  INSERT INT
ba30: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c  O t1 VALUES('x',
ba40: 27 79 27 2c 31 2e 35 2c 27 66 69 7a 7a 6c 65 27  'y',1.5,'fizzle'
ba50: 2c 27 66 69 7a 7a 6c 65 27 2c 31 2e 35 29 3b 0a  ,'fizzle',1.5);.
ba60: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
ba70: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
ba80: 20 61 2c 20 62 3b 0a 7d 20 7b 31 20 32 20 33 20   a, b;.} {1 2 3 
ba90: 35 20 35 20 33 20 7c 20 32 20 33 20 34 20 36 20  5 5 3 | 2 3 4 6 
baa0: 36 20 34 20 7c 20 78 20 79 20 31 2e 35 20 66 69  6 4 | x y 1.5 fi
bab0: 7a 7a 6c 65 20 66 69 7a 7a 6c 65 20 31 2e 35 20  zzle fizzle 1.5 
bac0: 7c 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  |}..do_execsql_t
bad0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
bae0: 64 33 2d 31 36 2e 34 2e 31 2e 32 20 7b 0a 20 20  d3-16.4.1.2 {.  
baf0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 63 3d  UPDATE t1 SET c=
bb00: 39 39 2c 20 66 3d 39 39 20 57 48 45 52 45 20 61  99, f=99 WHERE a
bb10: 3d 31 3b 0a 20 20 53 45 4c 45 43 54 20 2a 2c 20  =1;.  SELECT *, 
bb20: 27 7c 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  '|' FROM t1 ORDE
bb30: 52 20 42 59 20 61 2c 20 62 3b 0a 7d 20 7b 31 20  R BY a, b;.} {1 
bb40: 32 20 39 39 20 35 20 35 20 39 39 20 7c 20 32 20  2 99 5 5 99 | 2 
bb50: 33 20 34 20 36 20 36 20 34 20 7c 20 78 20 79 20  3 4 6 6 4 | x y 
bb60: 31 2e 35 20 66 69 7a 7a 6c 65 20 66 69 7a 7a 6c  1.5 fizzle fizzl
bb70: 65 20 31 2e 35 20 7c 7d 0a 0a 64 6f 5f 65 78 65  e 1.5 |}..do_exe
bb80: 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75  csql_test withou
bb90: 74 5f 72 6f 77 69 64 33 2d 31 36 2e 34 2e 31 2e  t_rowid3-16.4.1.
bba0: 33 20 7b 0a 20 20 55 50 44 41 54 45 20 74 31 20  3 {.  UPDATE t1 
bbb0: 53 45 54 20 65 3d 38 37 36 2c 20 64 3d 38 37 36  SET e=876, d=876
bbc0: 20 57 48 45 52 45 20 61 3d 32 3b 0a 20 20 53 45   WHERE a=2;.  SE
bbd0: 4c 45 43 54 20 2a 2c 20 27 7c 27 20 46 52 4f 4d  LECT *, '|' FROM
bbe0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 61 2c 20   t1 ORDER BY a, 
bbf0: 62 3b 0a 7d 20 7b 31 20 32 20 39 39 20 35 20 35  b;.} {1 2 99 5 5
bc00: 20 39 39 20 7c 20 32 20 33 20 34 20 38 37 36 20   99 | 2 3 4 876 
bc10: 38 37 36 20 34 20 7c 20 78 20 79 20 31 2e 35 20  876 4 | x y 1.5 
bc20: 66 69 7a 7a 6c 65 20 66 69 7a 7a 6c 65 20 31 2e  fizzle fizzle 1.
bc30: 35 20 7c 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 69  5 |}..do_test wi
bc40: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e  thout_rowid3-16.
bc50: 34 2e 31 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  4.1.4 {.  catchs
bc60: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
bc70: 74 31 20 53 45 54 20 63 3d 31 31 2c 20 65 3d 32  t1 SET c=11, e=2
bc80: 32 20 57 48 45 52 45 20 61 3d 31 3b 0a 20 20 7d  2 WHERE a=1;.  }
bc90: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
bca0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
bcb0: 69 6c 65 64 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  iled}}..do_test 
bcc0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
bcd0: 36 2e 34 2e 31 2e 35 20 7b 0a 20 20 63 61 74 63  6.4.1.5 {.  catc
bce0: 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  hsql {.    UPDAT
bcf0: 45 20 74 31 20 53 45 54 20 64 3d 31 31 2c 20 66  E t1 SET d=11, f
bd00: 3d 32 32 20 57 48 45 52 45 20 61 3d 31 3b 0a 20  =22 WHERE a=1;. 
bd10: 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e   }.} {1 {FOREIGN
bd20: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
bd30: 66 61 69 6c 65 64 7d 7d 0a 0a 64 6f 5f 65 78 65  failed}}..do_exe
bd40: 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75  csql_test withou
bd50: 74 5f 72 6f 77 69 64 33 2d 31 36 2e 34 2e 31 2e  t_rowid3-16.4.1.
bd60: 36 20 7b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f  6 {.  DELETE FRO
bd70: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 31 3b 0a  M t1 WHERE a=1;.
bd80: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
bd90: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
bda0: 20 61 2c 20 62 3b 0a 7d 20 7b 32 20 33 20 34 20   a, b;.} {2 3 4 
bdb0: 38 37 36 20 38 37 36 20 34 20 7c 20 78 20 79 20  876 876 4 | x y 
bdc0: 31 2e 35 20 66 69 7a 7a 6c 65 20 66 69 7a 7a 6c  1.5 fizzle fizzl
bdd0: 65 20 31 2e 35 20 7c 7d 0a 0a 64 6f 5f 65 78 65  e 1.5 |}..do_exe
bde0: 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75  csql_test withou
bdf0: 74 5f 72 6f 77 69 64 33 2d 31 36 2e 34 2e 32 2e  t_rowid3-16.4.2.
be00: 31 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  1 {.  DROP TABLE
be10: 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41   t1;.  CREATE TA
be20: 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 64 2c 65  BLE t1(a,b,c,d,e
be30: 2c 66 2c 0a 20 20 20 20 20 50 52 49 4d 41 52 59  ,f,.     PRIMARY
be40: 20 4b 45 59 20 28 61 2c 62 29 2c 0a 20 20 20 20   KEY (a,b),.    
be50: 20 55 4e 49 51 55 45 20 28 65 2c 63 29 2c 0a 20   UNIQUE (e,c),. 
be60: 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20      FOREIGN KEY 
be70: 28 64 2c 66 29 20 52 45 46 45 52 45 4e 43 45 53  (d,f) REFERENCES
be80: 20 74 31 28 65 2c 63 29 0a 20 20 29 20 57 49 54   t1(e,c).  ) WIT
be90: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 49 4e  HOUT rowid;.  IN
bea0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
beb0: 55 45 53 28 31 2c 32 2c 33 2c 35 2c 35 2c 33 29  UES(1,2,3,5,5,3)
bec0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
bed0: 74 31 20 56 41 4c 55 45 53 28 32 2c 33 2c 34 2c  t1 VALUES(2,3,4,
bee0: 36 2c 36 2c 34 29 3b 0a 20 20 49 4e 53 45 52 54  6,6,4);.  INSERT
bef0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
bf00: 27 78 27 2c 27 79 27 2c 31 2e 35 2c 27 66 69 7a  'x','y',1.5,'fiz
bf10: 7a 6c 65 27 2c 27 66 69 7a 7a 6c 65 27 2c 31 2e  zle','fizzle',1.
bf20: 35 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 2c 20  5);.  SELECT *, 
bf30: 27 7c 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  '|' FROM t1 ORDE
bf40: 52 20 42 59 20 61 2c 20 62 3b 0a 7d 20 7b 31 20  R BY a, b;.} {1 
bf50: 32 20 33 20 35 20 35 20 33 20 7c 20 32 20 33 20  2 3 5 5 3 | 2 3 
bf60: 34 20 36 20 36 20 34 20 7c 20 78 20 79 20 31 2e  4 6 6 4 | x y 1.
bf70: 35 20 66 69 7a 7a 6c 65 20 66 69 7a 7a 6c 65 20  5 fizzle fizzle 
bf80: 31 2e 35 20 7c 7d 0a 0a 64 6f 5f 65 78 65 63 73  1.5 |}..do_execs
bf90: 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  ql_test without_
bfa0: 72 6f 77 69 64 33 2d 31 36 2e 34 2e 32 2e 32 20  rowid3-16.4.2.2 
bfb0: 7b 0a 20 20 55 50 44 41 54 45 20 74 31 20 53 45  {.  UPDATE t1 SE
bfc0: 54 20 63 3d 39 39 2c 20 66 3d 39 39 20 57 48 45  T c=99, f=99 WHE
bfd0: 52 45 20 61 3d 31 3b 0a 20 20 53 45 4c 45 43 54  RE a=1;.  SELECT
bfe0: 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74 31 20   *, '|' FROM t1 
bff0: 4f 52 44 45 52 20 42 59 20 61 2c 20 62 3b 0a 7d  ORDER BY a, b;.}
c000: 20 7b 31 20 32 20 39 39 20 35 20 35 20 39 39 20   {1 2 99 5 5 99 
c010: 7c 20 32 20 33 20 34 20 36 20 36 20 34 20 7c 20  | 2 3 4 6 6 4 | 
c020: 78 20 79 20 31 2e 35 20 66 69 7a 7a 6c 65 20 66  x y 1.5 fizzle f
c030: 69 7a 7a 6c 65 20 31 2e 35 20 7c 7d 0a 0a 64 6f  izzle 1.5 |}..do
c040: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 69  _execsql_test wi
c050: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e  thout_rowid3-16.
c060: 34 2e 32 2e 33 20 7b 0a 20 20 55 50 44 41 54 45  4.2.3 {.  UPDATE
c070: 20 74 31 20 53 45 54 20 65 3d 38 37 36 2c 20 64   t1 SET e=876, d
c080: 3d 38 37 36 20 57 48 45 52 45 20 61 3d 32 3b 0a  =876 WHERE a=2;.
c090: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
c0a0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
c0b0: 20 61 2c 20 62 3b 0a 7d 20 7b 31 20 32 20 39 39   a, b;.} {1 2 99
c0c0: 20 35 20 35 20 39 39 20 7c 20 32 20 33 20 34 20   5 5 99 | 2 3 4 
c0d0: 38 37 36 20 38 37 36 20 34 20 7c 20 78 20 79 20  876 876 4 | x y 
c0e0: 31 2e 35 20 66 69 7a 7a 6c 65 20 66 69 7a 7a 6c  1.5 fizzle fizzl
c0f0: 65 20 31 2e 35 20 7c 7d 0a 0a 64 6f 5f 74 65 73  e 1.5 |}..do_tes
c100: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
c110: 2d 31 36 2e 34 2e 32 2e 34 20 7b 0a 20 20 63 61  -16.4.2.4 {.  ca
c120: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  tchsql {.    UPD
c130: 41 54 45 20 74 31 20 53 45 54 20 63 3d 31 31 2c  ATE t1 SET c=11,
c140: 20 65 3d 32 32 20 57 48 45 52 45 20 61 3d 31 3b   e=22 WHERE a=1;
c150: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49  .  }.} {1 {FOREI
c160: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
c170: 74 20 66 61 69 6c 65 64 7d 7d 0a 0a 64 6f 5f 74  t failed}}..do_t
c180: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
c190: 64 33 2d 31 36 2e 34 2e 32 2e 35 20 7b 0a 20 20  d3-16.4.2.5 {.  
c1a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55  catchsql {.    U
c1b0: 50 44 41 54 45 20 74 31 20 53 45 54 20 64 3d 31  PDATE t1 SET d=1
c1c0: 31 2c 20 66 3d 32 32 20 57 48 45 52 45 20 61 3d  1, f=22 WHERE a=
c1d0: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52  1;.  }.} {1 {FOR
c1e0: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
c1f0: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 0a 64 6f  int failed}}..do
c200: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 69  _execsql_test wi
c210: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 36 2e  thout_rowid3-16.
c220: 34 2e 32 2e 36 20 7b 0a 20 20 44 45 4c 45 54 45  4.2.6 {.  DELETE
c230: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
c240: 3d 31 3b 0a 20 20 53 45 4c 45 43 54 20 2a 2c 20  =1;.  SELECT *, 
c250: 27 7c 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  '|' FROM t1 ORDE
c260: 52 20 42 59 20 61 2c 20 62 3b 0a 7d 20 7b 32 20  R BY a, b;.} {2 
c270: 33 20 34 20 38 37 36 20 38 37 36 20 34 20 7c 20  3 4 876 876 4 | 
c280: 78 20 79 20 31 2e 35 20 66 69 7a 7a 6c 65 20 66  x y 1.5 fizzle f
c290: 69 7a 7a 6c 65 20 31 2e 35 20 7c 7d 0a 0a 0a 23  izzle 1.5 |}...#
c2a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c2b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c2c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c2d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c2e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 69 73  ---------.# This
c2f0: 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 74   next block of t
c300: 65 73 74 73 2c 20 77 69 74 68 6f 75 74 5f 72 6f  ests, without_ro
c310: 77 69 64 33 2d 31 37 2e 2a 2c 20 74 65 73 74 73  wid3-17.*, tests
c320: 20 74 68 61 74 20 69 66 20 22 50 52 41 47 4d 41   that if "PRAGMA
c330: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 0a   count_changes".
c340: 23 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 20 73  # is turned on s
c350: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 76  tatements that v
c360: 69 6f 6c 61 74 65 20 69 6d 6d 65 64 69 61 74 65  iolate immediate
c370: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
c380: 72 65 74 75 72 6e 0a 23 20 53 51 4c 49 54 45 5f  return.# SQLITE_
c390: 43 4f 4e 53 54 52 41 49 4e 54 20 69 6d 6d 65 64  CONSTRAINT immed
c3a0: 69 61 74 65 6c 79 2c 20 6e 6f 74 20 61 66 74 65  iately, not afte
c3b0: 72 20 72 65 74 75 72 6e 69 6e 67 20 61 20 6e 75  r returning a nu
c3c0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 2e 0a 23 20  mber of rows..# 
c3d0: 57 68 65 72 65 61 73 20 73 74 61 74 65 6d 65 6e  Whereas statemen
c3e0: 74 73 20 74 68 61 74 20 76 69 6f 6c 61 74 65 20  ts that violate 
c3f0: 64 65 66 65 72 72 65 64 20 46 4b 20 63 6f 6e 73  deferred FK cons
c400: 74 72 61 69 6e 74 73 20 72 65 74 75 72 6e 20 74  traints return t
c410: 68 65 20 6e 75 6d 62 65 72 0a 23 20 6f 66 20 72  he number.# of r
c420: 6f 77 73 20 62 65 66 6f 72 65 20 66 61 69 6c 69  ows before faili
c430: 6e 67 2e 0a 23 0a 23 20 41 6c 73 6f 20 74 65 73  ng..#.# Also tes
c440: 74 20 74 68 61 74 20 72 6f 77 73 20 6d 6f 64 69  t that rows modi
c450: 66 69 65 64 20 62 79 20 46 4b 20 61 63 74 69 6f  fied by FK actio
c460: 6e 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74  ns are not count
c470: 65 64 20 69 6e 20 65 69 74 68 65 72 20 74 68 65  ed in either the
c480: 0a 23 20 72 65 74 75 72 6e 65 64 20 72 6f 77 20  .# returned row 
c490: 63 6f 75 6e 74 20 6f 72 20 74 68 65 20 76 61 6c  count or the val
c4a0: 75 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ues returned by 
c4b0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
c4c0: 29 2e 20 4c 69 6b 65 0a 23 20 74 72 69 67 67 65  ). Like.# trigge
c4d0: 72 20 72 65 6c 61 74 65 64 20 63 68 61 6e 67 65  r related change
c4e0: 73 2c 20 74 68 65 79 20 61 72 65 20 69 6e 63 6c  s, they are incl
c4f0: 75 64 65 64 20 69 6e 20 73 71 6c 69 74 65 33 5f  uded in sqlite3_
c500: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
c510: 74 68 6f 75 67 68 2e 0a 23 0a 64 72 6f 70 5f 61  though..#.drop_a
c520: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65 73  ll_tables.do_tes
c530: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
c540: 2d 31 37 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  -17.1.1 {.  exec
c550: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 6f 75  sql { PRAGMA cou
c560: 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 31 20 7d  nt_changes = 1 }
c570: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20  .  execsql { .  
c580: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f    CREATE TABLE o
c590: 6e 65 28 61 2c 20 62 2c 20 63 2c 20 55 4e 49 51  ne(a, b, c, UNIQ
c5a0: 55 45 28 62 2c 20 63 29 29 3b 0a 20 20 20 20 43  UE(b, c));.    C
c5b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 77 6f 28  REATE TABLE two(
c5c0: 64 2c 20 65 2c 20 66 2c 20 46 4f 52 45 49 47 4e  d, e, f, FOREIGN
c5d0: 20 4b 45 59 28 65 2c 20 66 29 20 52 45 46 45 52   KEY(e, f) REFER
c5e0: 45 4e 43 45 53 20 6f 6e 65 28 62 2c 20 63 29 29  ENCES one(b, c))
c5f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
c600: 4f 20 6f 6e 65 20 56 41 4c 55 45 53 28 31 2c 20  O one VALUES(1, 
c610: 32 2c 20 33 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  2, 3);.  }.} {1}
c620: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
c630: 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e 32 20 7b  _rowid3-17.1.2 {
c640: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
c650: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
c660: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
c670: 74 77 6f 20 56 41 4c 55 45 53 28 34 2c 20 35 2c  two VALUES(4, 5,
c680: 20 36 29 22 20 2d 31 20 64 75 6d 6d 79 5d 0a 20   6)" -1 dummy]. 
c690: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53   sqlite3_step $S
c6a0: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 43 4f  TMT.} {SQLITE_CO
c6b0: 4e 53 54 52 41 49 4e 54 7d 0a 76 65 72 69 66 79  NSTRAINT}.verify
c6c0: 5f 65 78 5f 65 72 72 63 6f 64 65 20 77 69 74 68  _ex_errcode with
c6d0: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e  out_rowid3-17.1.
c6e0: 32 62 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  2b SQLITE_CONSTR
c6f0: 41 49 4e 54 5f 46 4f 52 45 49 47 4e 4b 45 59 0a  AINT_FOREIGNKEY.
c700: 69 66 63 61 70 61 62 6c 65 20 61 75 74 6f 72 65  ifcapable autore
c710: 73 65 74 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  set {.  do_test 
c720: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
c730: 37 2e 31 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69  7.1.3 {.    sqli
c740: 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 20  te3_step $STMT. 
c750: 20 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54   } {SQLITE_CONST
c760: 52 41 49 4e 54 7d 0a 20 20 76 65 72 69 66 79 5f  RAINT}.  verify_
c770: 65 78 5f 65 72 72 63 6f 64 65 20 77 69 74 68 6f  ex_errcode witho
c780: 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e 33  ut_rowid3-17.1.3
c790: 62 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  b SQLITE_CONSTRA
c7a0: 49 4e 54 5f 46 4f 52 45 49 47 4e 4b 45 59 0a 7d  INT_FOREIGNKEY.}
c7b0: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
c7c0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
c7d0: 2d 31 37 2e 31 2e 33 20 7b 0a 20 20 20 20 73 71  -17.1.3 {.    sq
c7e0: 6c 69 74 65 33 5f 73 74 65 70 20 24 53 54 4d 54  lite3_step $STMT
c7f0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4d 49 53  .  } {SQLITE_MIS
c800: 55 53 45 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 77  USE}.}.do_test w
c810: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37  ithout_rowid3-17
c820: 2e 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33  .1.4 {.  sqlite3
c830: 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a  _finalize $STMT.
c840: 7d 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  } {SQLITE_CONSTR
c850: 41 49 4e 54 7d 0a 76 65 72 69 66 79 5f 65 78 5f  AINT}.verify_ex_
c860: 65 72 72 63 6f 64 65 20 77 69 74 68 6f 75 74 5f  errcode without_
c870: 72 6f 77 69 64 33 2d 31 37 2e 31 2e 34 62 20 53  rowid3-17.1.4b S
c880: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
c890: 5f 46 4f 52 45 49 47 4e 4b 45 59 0a 64 6f 5f 74  _FOREIGNKEY.do_t
c8a0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
c8b0: 64 33 2d 31 37 2e 31 2e 35 20 7b 0a 20 20 65 78  d3-17.1.5 {.  ex
c8c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
c8d0: 52 54 20 49 4e 54 4f 20 6f 6e 65 20 56 41 4c 55  RT INTO one VALU
c8e0: 45 53 28 32 2c 20 33 2c 20 34 29 3b 0a 20 20 20  ES(2, 3, 4);.   
c8f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65   INSERT INTO one
c900: 20 56 41 4c 55 45 53 28 33 2c 20 34 2c 20 35 29   VALUES(3, 4, 5)
c910: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
c920: 4f 20 74 77 6f 20 56 41 4c 55 45 53 28 31 2c 20  O two VALUES(1, 
c930: 32 2c 20 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  2, 3);.    INSER
c940: 54 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55 45  T INTO two VALUE
c950: 53 28 32 2c 20 33 2c 20 34 29 3b 0a 20 20 20 20  S(2, 3, 4);.    
c960: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 77 6f 20  INSERT INTO two 
c970: 56 41 4c 55 45 53 28 33 2c 20 34 2c 20 35 29 3b  VALUES(3, 4, 5);
c980: 0a 20 20 7d 0a 7d 20 7b 31 20 31 20 31 20 31 20  .  }.} {1 1 1 1 
c990: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  1}.do_test witho
c9a0: 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e 36  ut_rowid3-17.1.6
c9b0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
c9c0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
c9d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65   INSERT INTO one
c9e0: 20 56 41 4c 55 45 53 28 30 2c 20 30 2c 20 30 29   VALUES(0, 0, 0)
c9f0: 3b 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74  ;.      UPDATE t
ca00: 77 6f 20 53 45 54 20 65 3d 65 2b 31 2c 20 66 3d  wo SET e=e+1, f=
ca10: 66 2b 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 46  f+1;.  }.} {1 {F
ca20: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
ca30: 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64  raint failed}}.d
ca40: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
ca50: 6f 77 69 64 33 2d 31 37 2e 31 2e 37 20 7b 0a 20  owid3-17.1.7 {. 
ca60: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
ca70: 54 20 2a 20 46 52 4f 4d 20 6f 6e 65 20 7d 0a 7d  T * FROM one }.}
ca80: 20 7b 31 20 32 20 33 20 32 20 33 20 34 20 33 20   {1 2 3 2 3 4 3 
ca90: 34 20 35 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65  4 5 0 0 0}.do_te
caa0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
cab0: 33 2d 31 37 2e 31 2e 38 20 7b 0a 20 20 65 78 65  3-17.1.8 {.  exe
cac0: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
cad0: 46 52 4f 4d 20 74 77 6f 20 7d 0a 7d 20 7b 31 20  FROM two }.} {1 
cae0: 32 20 33 20 32 20 33 20 34 20 33 20 34 20 35 7d  2 3 2 3 4 3 4 5}
caf0: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
cb00: 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e 39 20 7b  _rowid3-17.1.9 {
cb10: 0a 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49  .  execsql COMMI
cb20: 54 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  T.} {}.do_test w
cb30: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37  ithout_rowid3-17
cb40: 2e 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  .1.10 {.  execsq
cb50: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
cb60: 41 42 4c 45 20 74 68 72 65 65 28 0a 20 20 20 20  ABLE three(.    
cb70: 20 20 67 2c 20 68 2c 20 69 2c 20 0a 20 20 20 20    g, h, i, .    
cb80: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 68 2c    FOREIGN KEY(h,
cb90: 20 69 29 20 52 45 46 45 52 45 4e 43 45 53 20 6f   i) REFERENCES o
cba0: 6e 65 28 62 2c 20 63 29 20 44 45 46 45 52 52 41  ne(b, c) DEFERRA
cbb0: 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45  BLE INITIALLY DE
cbc0: 46 45 52 52 45 44 0a 20 20 20 20 29 3b 0a 20 20  FERRED.    );.  
cbd0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
cbe0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37  ithout_rowid3-17
cbf0: 2e 31 2e 31 31 20 7b 0a 20 20 73 65 74 20 53 54  .1.11 {.  set ST
cc00: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
cc10: 61 72 65 5f 76 32 20 64 62 20 22 49 4e 53 45 52  are_v2 db "INSER
cc20: 54 20 49 4e 54 4f 20 74 68 72 65 65 20 56 41 4c  T INTO three VAL
cc30: 55 45 53 28 37 2c 20 38 2c 20 39 29 22 20 2d 31  UES(7, 8, 9)" -1
cc40: 20 64 75 6d 6d 79 5d 0a 20 20 73 71 6c 69 74 65   dummy].  sqlite
cc50: 33 5f 73 74 65 70 20 24 53 54 4d 54 0a 7d 20 7b  3_step $STMT.} {
cc60: 53 51 4c 49 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74  SQLITE_ROW}.do_t
cc70: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
cc80: 64 33 2d 31 37 2e 31 2e 31 32 20 7b 0a 20 20 73  d3-17.1.12 {.  s
cc90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
cca0: 78 74 20 24 53 54 4d 54 20 30 0a 7d 20 7b 31 7d  xt $STMT 0.} {1}
ccb0: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
ccc0: 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e 31 33 20  _rowid3-17.1.13 
ccd0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  {.  sqlite3_step
cce0: 20 24 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45   $STMT.} {SQLITE
ccf0: 5f 43 4f 4e 53 54 52 41 49 4e 54 7d 0a 76 65 72  _CONSTRAINT}.ver
cd00: 69 66 79 5f 65 78 5f 65 72 72 63 6f 64 65 20 77  ify_ex_errcode w
cd10: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37  ithout_rowid3-17
cd20: 2e 31 2e 31 33 62 20 53 51 4c 49 54 45 5f 43 4f  .1.13b SQLITE_CO
cd30: 4e 53 54 52 41 49 4e 54 5f 46 4f 52 45 49 47 4e  NSTRAINT_FOREIGN
cd40: 4b 45 59 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  KEY.do_test with
cd50: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 31 2e  out_rowid3-17.1.
cd60: 31 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  14 {.  sqlite3_f
cd70: 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 7d 20  inalize $STMT.} 
cd80: 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  {SQLITE_CONSTRAI
cd90: 4e 54 7d 0a 76 65 72 69 66 79 5f 65 78 5f 65 72  NT}.verify_ex_er
cda0: 72 63 6f 64 65 20 77 69 74 68 6f 75 74 5f 72 6f  rcode without_ro
cdb0: 77 69 64 33 2d 31 37 2e 31 2e 31 34 62 20 53 51  wid3-17.1.14b SQ
cdc0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  LITE_CONSTRAINT_
cdd0: 46 4f 52 45 49 47 4e 4b 45 59 0a 0a 64 72 6f 70  FOREIGNKEY..drop
cde0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74  _all_tables.do_t
cdf0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
ce00: 64 33 2d 31 37 2e 32 2e 31 20 7b 0a 20 20 65 78  d3-17.2.1 {.  ex
ce10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
ce20: 54 45 20 54 41 42 4c 45 20 68 69 67 68 28 22 61  TE TABLE high("a
ce30: 27 62 21 22 20 50 52 49 4d 41 52 59 20 4b 45 59  'b!" PRIMARY KEY
ce40: 2c 20 62 29 20 57 49 54 48 4f 55 54 20 72 6f 77  , b) WITHOUT row
ce50: 69 64 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  id;.    CREATE T
ce60: 41 42 4c 45 20 6c 6f 77 28 0a 20 20 20 20 20 20  ABLE low(.      
ce70: 63 2c 20 0a 20 20 20 20 20 20 22 64 26 36 22 20  c, .      "d&6" 
ce80: 52 45 46 45 52 45 4e 43 45 53 20 68 69 67 68 20  REFERENCES high 
ce90: 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44  ON UPDATE CASCAD
cea0: 45 20 4f 4e 20 44 45 4c 45 54 45 20 43 41 53 43  E ON DELETE CASC
ceb0: 41 44 45 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d  ADE.    );.  }.}
cec0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   {}.do_test with
ced0: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 32 2e  out_rowid3-17.2.
cee0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
cef0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
cf00: 68 69 67 68 20 56 41 4c 55 45 53 28 27 61 27 2c  high VALUES('a',
cf10: 20 27 62 27 29 3b 0a 20 20 20 20 49 4e 53 45 52   'b');.    INSER
cf20: 54 20 49 4e 54 4f 20 6c 6f 77 20 56 41 4c 55 45  T INTO low VALUE
cf30: 53 28 27 62 27 2c 20 27 61 27 29 3b 0a 20 20 7d  S('b', 'a');.  }
cf40: 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a 7d 20  .  db changes.} 
cf50: 7b 31 7d 0a 73 65 74 20 6e 54 6f 74 61 6c 20 5b  {1}.set nTotal [
cf60: 64 62 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  db total_changes
cf70: 5d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  ].do_test withou
cf80: 74 5f 72 6f 77 69 64 33 2d 31 37 2e 32 2e 33 20  t_rowid3-17.2.3 
cf90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 55 50  {.  execsql { UP
cfa0: 44 41 54 45 20 68 69 67 68 20 53 45 54 20 22 61  DATE high SET "a
cfb0: 27 62 21 22 20 3d 20 27 63 27 20 7d 0a 7d 20 7b  'b!" = 'c' }.} {
cfc0: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  1}.do_test witho
cfd0: 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 32 2e 34  ut_rowid3-17.2.4
cfe0: 20 7b 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a   {.  db changes.
cff0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 77 69  } {1}.do_test wi
d000: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e  thout_rowid3-17.
d010: 32 2e 35 20 7b 0a 20 20 65 78 70 72 20 5b 64 62  2.5 {.  expr [db
d020: 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 5d 20   total_changes] 
d030: 2d 20 24 6e 54 6f 74 61 6c 0a 7d 20 7b 32 7d 0a  - $nTotal.} {2}.
d040: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
d050: 72 6f 77 69 64 33 2d 31 37 2e 32 2e 36 20 7b 0a  rowid3-17.2.6 {.
d060: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
d070: 43 54 20 2a 20 46 52 4f 4d 20 68 69 67 68 20 3b  CT * FROM high ;
d080: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6c   SELECT * FROM l
d090: 6f 77 20 7d 0a 7d 20 7b 63 20 62 20 62 20 63 7d  ow }.} {c b b c}
d0a0: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
d0b0: 5f 72 6f 77 69 64 33 2d 31 37 2e 32 2e 37 20 7b  _rowid3-17.2.7 {
d0c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c  .  execsql { DEL
d0d0: 45 54 45 20 46 52 4f 4d 20 68 69 67 68 20 7d 0a  ETE FROM high }.
d0e0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 77 69  } {1}.do_test wi
d0f0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e  thout_rowid3-17.
d100: 32 2e 38 20 7b 0a 20 20 64 62 20 63 68 61 6e 67  2.8 {.  db chang
d110: 65 73 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  es.} {1}.do_test
d120: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
d130: 31 37 2e 32 2e 39 20 7b 0a 20 20 65 78 70 72 20  17.2.9 {.  expr 
d140: 5b 64 62 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65  [db total_change
d150: 73 5d 20 2d 20 24 6e 54 6f 74 61 6c 0a 7d 20 7b  s] - $nTotal.} {
d160: 34 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  4}.do_test witho
d170: 75 74 5f 72 6f 77 69 64 33 2d 31 37 2e 32 2e 31  ut_rowid3-17.2.1
d180: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  0 {.  execsql { 
d190: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 68 69  SELECT * FROM hi
d1a0: 67 68 20 3b 20 53 45 4c 45 43 54 20 2a 20 46 52  gh ; SELECT * FR
d1b0: 4f 4d 20 6c 6f 77 20 7d 0a 7d 20 7b 7d 0a 65 78  OM low }.} {}.ex
d1c0: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63  ecsql { PRAGMA c
d1d0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 30  ount_changes = 0
d1e0: 20 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   }..#-----------
d1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
d220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
d230: 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 61   Test that the a
d240: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
d250: 6c 62 61 63 6b 20 77 6f 72 6b 73 2e 0a 23 0a 0a  lback works..#..
d260: 69 66 63 61 70 61 62 6c 65 20 61 75 74 68 20 7b  ifcapable auth {
d270: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
d280: 75 74 5f 72 6f 77 69 64 33 2d 31 38 2e 31 20 7b  ut_rowid3-18.1 {
d290: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
d2a0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
d2b0: 45 20 6c 6f 6e 67 28 61 2c 20 62 20 50 52 49 4d  E long(a, b PRIM
d2c0: 41 52 59 20 4b 45 59 2c 20 63 29 20 57 49 54 48  ARY KEY, c) WITH
d2d0: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  OUT rowid;.     
d2e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 68   CREATE TABLE sh
d2f0: 6f 72 74 28 64 2c 20 65 2c 20 66 20 52 45 46 45  ort(d, e, f REFE
d300: 52 45 4e 43 45 53 20 6c 6f 6e 67 29 3b 0a 20 20  RENCES long);.  
d310: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
d320: 20 6d 69 64 28 67 2c 20 68 2c 20 69 20 52 45 46   mid(g, h, i REF
d330: 45 52 45 4e 43 45 53 20 6c 6f 6e 67 20 44 45 46  ERENCES long DEF
d340: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
d350: 59 20 44 45 46 45 52 52 45 44 29 3b 0a 20 20 20  Y DEFERRED);.   
d360: 20 7d 0a 20 20 7d 20 7b 7d 0a 0a 20 20 70 72 6f   }.  } {}..  pro
d370: 63 20 61 75 74 68 20 7b 61 72 67 73 7d 20 7b 65  c auth {args} {e
d380: 76 61 6c 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75  val lappend ::au
d390: 74 68 61 72 67 73 20 5b 6c 72 61 6e 67 65 20 24  thargs [lrange $
d3a0: 61 72 67 73 20 30 20 34 5d 3b 20 72 65 74 75 72  args 0 4]; retur
d3b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 7d 0a 20 20 64  n SQLITE_OK}.  d
d3c0: 62 20 61 75 74 68 20 61 75 74 68 0a 0a 20 20 23  b auth auth..  #
d3d0: 20 41 6e 20 69 6e 73 65 72 74 20 6f 6e 20 74 68   An insert on th
d3e0: 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 6d  e parent table m
d3f0: 75 73 74 20 72 65 61 64 20 74 68 65 20 63 68 69  ust read the chi
d400: 6c 64 20 6b 65 79 20 6f 66 20 61 6e 79 20 64 65  ld key of any de
d410: 66 65 72 72 65 64 0a 20 20 23 20 66 6f 72 65 69  ferred.  # forei
d420: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
d430: 74 73 2e 20 42 75 74 20 6e 6f 74 20 74 68 65 20  ts. But not the 
d440: 63 68 69 6c 64 20 6b 65 79 20 6f 66 20 69 6d 6d  child key of imm
d450: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
d460: 74 73 2e 0a 20 20 73 65 74 20 61 75 74 68 61 72  ts..  set authar
d470: 67 73 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20  gs {}.  do_test 
d480: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
d490: 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.2 {.    execsq
d4a0: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
d4b0: 6c 6f 6e 67 20 56 41 4c 55 45 53 28 31 2c 20 32  long VALUES(1, 2
d4c0: 2c 20 33 29 20 7d 0a 20 20 20 20 73 65 74 20 61  , 3) }.    set a
d4d0: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 53 51 4c  uthargs.  } {SQL
d4e0: 49 54 45 5f 49 4e 53 45 52 54 20 6c 6f 6e 67 20  ITE_INSERT long 
d4f0: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 53 51 4c 49 54  {} main {} SQLIT
d500: 45 5f 52 45 41 44 20 6d 69 64 20 69 20 6d 61 69  E_READ mid i mai
d510: 6e 20 7b 7d 7d 0a 0a 20 20 23 20 41 6e 20 69 6e  n {}}..  # An in
d520: 73 65 72 74 20 6f 6e 20 74 68 65 20 63 68 69 6c  sert on the chil
d530: 64 20 74 61 62 6c 65 20 6f 66 20 61 6e 20 69 6d  d table of an im
d540: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
d550: 6e 74 20 6d 75 73 74 20 72 65 61 64 20 74 68 65  nt must read the
d560: 0a 20 20 23 20 70 61 72 65 6e 74 20 6b 65 79 20  .  # parent key 
d570: 63 6f 6c 75 6d 6e 73 20 28 74 6f 20 73 65 65 20  columns (to see 
d580: 69 66 20 69 74 20 69 73 20 61 20 76 69 6f 6c 61  if it is a viola
d590: 74 69 6f 6e 20 6f 72 20 6e 6f 74 29 2e 0a 20 20  tion or not)..  
d5a0: 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d 0a  set authargs {}.
d5b0: 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75    do_test withou
d5c0: 74 5f 72 6f 77 69 64 33 2d 31 38 2e 33 20 7b 0a  t_rowid3-18.3 {.
d5d0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
d5e0: 53 45 52 54 20 49 4e 54 4f 20 73 68 6f 72 74 20  SERT INTO short 
d5f0: 56 41 4c 55 45 53 28 31 2c 20 33 2c 20 32 29 20  VALUES(1, 3, 2) 
d600: 7d 0a 20 20 20 20 73 65 74 20 61 75 74 68 61 72  }.    set authar
d610: 67 73 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49  gs.  } {SQLITE_I
d620: 4e 53 45 52 54 20 73 68 6f 72 74 20 7b 7d 20 6d  NSERT short {} m
d630: 61 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 52 45  ain {} SQLITE_RE
d640: 41 44 20 6c 6f 6e 67 20 62 20 6d 61 69 6e 20 7b  AD long b main {
d650: 7d 7d 0a 20 20 0a 20 20 23 20 41 73 20 6d 75 73  }}.  .  # As mus
d660: 74 20 61 6e 20 69 6e 73 65 72 74 20 6f 6e 20 74  t an insert on t
d670: 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65 20 6f  he child table o
d680: 66 20 61 20 64 65 66 65 72 72 65 64 20 63 6f 6e  f a deferred con
d690: 73 74 72 61 69 6e 74 2e 0a 20 20 73 65 74 20 61  straint..  set a
d6a0: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 64 6f 5f  uthargs {}.  do_
d6b0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
d6c0: 69 64 33 2d 31 38 2e 34 20 7b 0a 20 20 20 20 65  id3-18.4 {.    e
d6d0: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
d6e0: 49 4e 54 4f 20 6d 69 64 20 56 41 4c 55 45 53 28  INTO mid VALUES(
d6f0: 31 2c 20 33 2c 20 32 29 20 7d 0a 20 20 20 20 73  1, 3, 2) }.    s
d700: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
d710: 7b 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 6d  {SQLITE_INSERT m
d720: 69 64 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 53 51  id {} main {} SQ
d730: 4c 49 54 45 5f 52 45 41 44 20 6c 6f 6e 67 20 62  LITE_READ long b
d740: 20 6d 61 69 6e 20 7b 7d 7d 0a 0a 20 20 64 6f 5f   main {}}..  do_
d750: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
d760: 69 64 33 2d 31 38 2e 35 20 7b 0a 20 20 20 20 65  id3-18.5 {.    e
d770: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
d780: 52 45 41 54 45 20 54 41 42 4c 45 20 6e 6f 75 67  REATE TABLE noug
d790: 68 74 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20  ht(a, b PRIMARY 
d7a0: 4b 45 59 2c 20 63 29 20 57 49 54 48 4f 55 54 20  KEY, c) WITHOUT 
d7b0: 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 43 52 45  rowid;.      CRE
d7c0: 41 54 45 20 54 41 42 4c 45 20 63 72 6f 73 73 28  ATE TABLE cross(
d7d0: 64 2c 20 65 2c 20 66 2c 0a 20 20 20 20 20 20 20  d, e, f,.       
d7e0: 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 65 29 20   FOREIGN KEY(e) 
d7f0: 52 45 46 45 52 45 4e 43 45 53 20 6e 6f 75 67 68  REFERENCES nough
d800: 74 28 62 29 20 4f 4e 20 55 50 44 41 54 45 20 43  t(b) ON UPDATE C
d810: 41 53 43 41 44 45 0a 20 20 20 20 20 20 29 3b 0a  ASCADE.      );.
d820: 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71      }.    execsq
d830: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
d840: 6e 6f 75 67 68 74 20 56 41 4c 55 45 53 28 32 2c  nought VALUES(2,
d850: 20 31 2c 20 32 29 20 7d 0a 20 20 20 20 65 78 65   1, 2) }.    exe
d860: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
d870: 54 4f 20 63 72 6f 73 73 20 56 41 4c 55 45 53 28  TO cross VALUES(
d880: 30 2c 20 31 2c 20 30 29 20 7d 0a 20 20 20 20 73  0, 1, 0) }.    s
d890: 65 74 20 61 75 74 68 61 72 67 73 20 5b 6c 69 73  et authargs [lis
d8a0: 74 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  t].    execsql {
d8b0: 20 55 50 44 41 54 45 20 6e 6f 75 67 68 74 20 53   UPDATE nought S
d8c0: 45 54 20 62 20 3d 20 35 20 7d 0a 20 20 20 20 73  ET b = 5 }.    s
d8d0: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
d8e0: 7b 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6e  {SQLITE_UPDATE n
d8f0: 6f 75 67 68 74 20 62 20 6d 61 69 6e 20 7b 7d 20  ought b main {} 
d900: 53 51 4c 49 54 45 5f 52 45 41 44 20 63 72 6f 73  SQLITE_READ cros
d910: 73 20 65 20 6d 61 69 6e 20 7b 7d 20 53 51 4c 49  s e main {} SQLI
d920: 54 45 5f 52 45 41 44 20 63 72 6f 73 73 20 65 20  TE_READ cross e 
d930: 6d 61 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 52  main {} SQLITE_R
d940: 45 41 44 20 6e 6f 75 67 68 74 20 62 20 6d 61 69  EAD nought b mai
d950: 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 52 45 41 44  n {} SQLITE_READ
d960: 20 6e 6f 75 67 68 74 20 62 20 6d 61 69 6e 20 7b   nought b main {
d970: 7d 20 53 51 4c 49 54 45 5f 52 45 41 44 20 6e 6f  } SQLITE_READ no
d980: 75 67 68 74 20 62 20 6d 61 69 6e 20 7b 7d 20 53  ught b main {} S
d990: 51 4c 49 54 45 5f 55 50 44 41 54 45 20 63 72 6f  QLITE_UPDATE cro
d9a0: 73 73 20 65 20 6d 61 69 6e 20 7b 7d 20 53 51 4c  ss e main {} SQL
d9b0: 49 54 45 5f 52 45 41 44 20 6e 6f 75 67 68 74 20  ITE_READ nought 
d9c0: 62 20 6d 61 69 6e 20 7b 7d 20 53 51 4c 49 54 45  b main {} SQLITE
d9d0: 5f 52 45 41 44 20 63 72 6f 73 73 20 65 20 6d 61  _READ cross e ma
d9e0: 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 52 45 41  in {} SQLITE_REA
d9f0: 44 20 6e 6f 75 67 68 74 20 62 20 6d 61 69 6e 20  D nought b main 
da00: 7b 7d 20 53 51 4c 49 54 45 5f 52 45 41 44 20 6e  {} SQLITE_READ n
da10: 6f 75 67 68 74 20 62 20 6d 61 69 6e 20 7b 7d 7d  ought b main {}}
da20: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68  ..  do_test with
da30: 6f 75 74 5f 72 6f 77 69 64 33 2d 31 38 2e 36 20  out_rowid3-18.6 
da40: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
da50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 72 6f  ELECT * FROM cro
da60: 73 73 7d 0a 20 20 7d 20 7b 30 20 35 20 30 7d 0a  ss}.  } {0 5 0}.
da70: 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  .  do_test witho
da80: 75 74 5f 72 6f 77 69 64 33 2d 31 38 2e 37 20 7b  ut_rowid3-18.7 {
da90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
daa0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
dab0: 45 20 6f 6e 65 28 61 20 49 4e 54 20 50 52 49 4d  E one(a INT PRIM
dac0: 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54 48  ARY KEY, b) WITH
dad0: 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  OUT rowid;.     
dae0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 77   CREATE TABLE tw
daf0: 6f 28 62 2c 20 63 20 52 45 46 45 52 45 4e 43 45  o(b, c REFERENCE
db00: 53 20 6f 6e 65 29 3b 0a 20 20 20 20 20 20 49 4e  S one);.      IN
db10: 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65 20 56 41  SERT INTO one VA
db20: 4c 55 45 53 28 31 30 31 2c 20 31 30 32 29 3b 0a  LUES(101, 102);.
db30: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 61 75      }.    set au
db40: 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 20 20  thargs [list].  
db50: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
db60: 52 54 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55  RT INTO two VALU
db70: 45 53 28 31 30 30 2c 20 31 30 31 29 3b 20 7d 0a  ES(100, 101); }.
db80: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
db90: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 53  .  } {SQLITE_INS
dba0: 45 52 54 20 74 77 6f 20 7b 7d 20 6d 61 69 6e 20  ERT two {} main 
dbb0: 7b 7d 20 53 51 4c 49 54 45 5f 52 45 41 44 20 6f  {} SQLITE_READ o
dbc0: 6e 65 20 61 20 6d 61 69 6e 20 7b 7d 7d 0a 0a 20  ne a main {}}.. 
dbd0: 20 23 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45   # Return SQLITE
dbe0: 5f 49 47 4e 4f 52 45 20 74 6f 20 72 65 71 75 65  _IGNORE to reque
dbf0: 73 74 73 20 74 6f 20 72 65 61 64 20 66 72 6f 6d  sts to read from
dc00: 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c   the parent tabl
dc10: 65 2e 20 54 68 69 73 0a 20 20 23 20 63 61 75 73  e. This.  # caus
dc20: 65 73 20 69 6e 73 65 72 74 73 20 6f 66 20 6e 6f  es inserts of no
dc30: 6e 2d 4e 55 4c 4c 20 6b 65 79 73 20 69 6e 74 6f  n-NULL keys into
dc40: 20 74 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65   the child table
dc50: 20 74 6f 20 66 61 69 6c 2e 0a 20 20 23 0a 20 20   to fail..  #.  
dc60: 72 65 6e 61 6d 65 20 61 75 74 68 20 7b 7d 0a 20  rename auth {}. 
dc70: 20 70 72 6f 63 20 61 75 74 68 20 7b 61 72 67 73   proc auth {args
dc80: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 69 6e  } {.    if {[lin
dc90: 64 65 78 20 24 61 72 67 73 20 31 5d 20 3d 3d 20  dex $args 1] == 
dca0: 22 6c 6f 6e 67 22 7d 20 7b 72 65 74 75 72 6e 20  "long"} {return 
dcb0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 7d 0a 20  SQLITE_IGNORE}. 
dcc0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
dcd0: 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  _OK.  }.  do_tes
dce0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
dcf0: 2d 31 38 2e 38 20 7b 0a 20 20 20 20 63 61 74 63  -18.8 {.    catc
dd00: 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  hsql { INSERT IN
dd10: 54 4f 20 73 68 6f 72 74 20 56 41 4c 55 45 53 28  TO short VALUES(
dd20: 31 2c 20 33 2c 20 32 29 20 7d 0a 20 20 7d 20 7b  1, 3, 2) }.  } {
dd30: 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  1 {FOREIGN KEY c
dd40: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
dd50: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  }}.  do_test wit
dd60: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 38 2e 39  hout_rowid3-18.9
dd70: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
dd80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 68 6f   INSERT INTO sho
dd90: 72 74 20 56 41 4c 55 45 53 28 31 2c 20 33 2c 20  rt VALUES(1, 3, 
dda0: 4e 55 4c 4c 29 20 7d 0a 20 20 7d 20 7b 7d 0a 20  NULL) }.  } {}. 
ddb0: 20 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74   do_test without
ddc0: 5f 72 6f 77 69 64 33 2d 31 38 2e 31 30 20 7b 0a  _rowid3-18.10 {.
ddd0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45      execsql { SE
dde0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 68 6f 72  LECT * FROM shor
ddf0: 74 20 7d 0a 20 20 7d 20 7b 31 20 33 20 32 20 31  t }.  } {1 3 2 1
de00: 20 33 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74   3 {}}.  do_test
de10: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
de20: 31 38 2e 31 31 20 7b 0a 20 20 20 20 63 61 74 63  18.11 {.    catc
de30: 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20 73 68  hsql { UPDATE sh
de40: 6f 72 74 20 53 45 54 20 66 20 3d 20 32 20 57 48  ort SET f = 2 WH
de50: 45 52 45 20 66 20 49 53 20 4e 55 4c 4c 20 7d 0a  ERE f IS NULL }.
de60: 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20    } {1 {FOREIGN 
de70: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
de80: 61 69 6c 65 64 7d 7d 0a 0a 20 20 64 62 20 61 75  ailed}}..  db au
de90: 74 68 20 7b 7d 0a 20 20 75 6e 73 65 74 20 61 75  th {}.  unset au
dea0: 74 68 61 72 67 73 0a 7d 0a 0a 0a 64 6f 5f 74 65  thargs.}...do_te
deb0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
dec0: 33 2d 31 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  3-19.1 {.  execs
ded0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
dee0: 54 41 42 4c 45 20 6d 61 69 6e 28 69 64 20 49 4e  TABLE main(id IN
def0: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29 20 57  T PRIMARY KEY) W
df00: 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20  ITHOUT rowid;.  
df10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73    CREATE TABLE s
df20: 75 62 28 69 64 20 49 4e 54 20 52 45 46 45 52 45  ub(id INT REFERE
df30: 4e 43 45 53 20 6d 61 69 6e 28 69 64 29 29 3b 0a  NCES main(id));.
df40: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
df50: 6d 61 69 6e 20 56 41 4c 55 45 53 28 31 29 3b 0a  main VALUES(1);.
df60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
df70: 6d 61 69 6e 20 56 41 4c 55 45 53 28 32 29 3b 0a  main VALUES(2);.
df80: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
df90: 73 75 62 20 56 41 4c 55 45 53 28 32 29 3b 0a 20  sub VALUES(2);. 
dfa0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
dfb0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31  without_rowid3-1
dfc0: 39 2e 32 20 7b 0a 20 20 73 65 74 20 53 20 5b 73  9.2 {.  set S [s
dfd0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
dfe0: 32 20 64 62 20 22 44 45 4c 45 54 45 20 46 52 4f  2 db "DELETE FRO
dff0: 4d 20 6d 61 69 6e 20 57 48 45 52 45 20 69 64 20  M main WHERE id 
e000: 3d 20 3f 22 20 2d 31 20 64 75 6d 6d 79 5d 0a 20  = ?" -1 dummy]. 
e010: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
e020: 74 20 24 53 20 31 20 32 0a 20 20 73 71 6c 69 74  t $S 1 2.  sqlit
e030: 65 33 5f 73 74 65 70 20 24 53 0a 7d 20 7b 53 51  e3_step $S.} {SQ
e040: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 7d  LITE_CONSTRAINT}
e050: 0a 76 65 72 69 66 79 5f 65 78 5f 65 72 72 63 6f  .verify_ex_errco
e060: 64 65 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  de without_rowid
e070: 33 2d 31 39 2e 32 62 20 53 51 4c 49 54 45 5f 43  3-19.2b SQLITE_C
e080: 4f 4e 53 54 52 41 49 4e 54 5f 46 4f 52 45 49 47  ONSTRAINT_FOREIG
e090: 4e 4b 45 59 0a 64 6f 5f 74 65 73 74 20 77 69 74  NKEY.do_test wit
e0a0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 39 2e 33  hout_rowid3-19.3
e0b0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   {.  sqlite3_res
e0c0: 65 74 20 24 53 0a 7d 20 7b 53 51 4c 49 54 45 5f  et $S.} {SQLITE_
e0d0: 43 4f 4e 53 54 52 41 49 4e 54 7d 0a 76 65 72 69  CONSTRAINT}.veri
e0e0: 66 79 5f 65 78 5f 65 72 72 63 6f 64 65 20 77 69  fy_ex_errcode wi
e0f0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 31 39 2e  thout_rowid3-19.
e100: 33 62 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  3b SQLITE_CONSTR
e110: 41 49 4e 54 5f 46 4f 52 45 49 47 4e 4b 45 59 0a  AINT_FOREIGNKEY.
e120: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
e130: 72 6f 77 69 64 33 2d 31 39 2e 34 20 7b 0a 20 20  rowid3-19.4 {.  
e140: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
e150: 20 24 53 20 31 20 31 0a 20 20 73 71 6c 69 74 65   $S 1 1.  sqlite
e160: 33 5f 73 74 65 70 20 24 53 0a 7d 20 7b 53 51 4c  3_step $S.} {SQL
e170: 49 54 45 5f 44 4f 4e 45 7d 0a 64 6f 5f 74 65 73  ITE_DONE}.do_tes
e180: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
e190: 2d 31 39 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65  -19.4 {.  sqlite
e1a0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 0a 7d 20  3_finalize $S.} 
e1b0: 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 64 72 6f  {SQLITE_OK}..dro
e1c0: 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f  p_all_tables.do_
e1d0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
e1e0: 69 64 33 2d 32 30 2e 31 20 7b 0a 20 20 65 78 65  id3-20.1 {.  exe
e1f0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
e200: 45 20 54 41 42 4c 45 20 70 70 28 61 20 50 52 49  E TABLE pp(a PRI
e210: 4d 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54  MARY KEY, b) WIT
e220: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20  HOUT rowid;.    
e230: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 63 28  CREATE TABLE cc(
e240: 63 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 64  c PRIMARY KEY, d
e250: 20 52 45 46 45 52 45 4e 43 45 53 20 70 70 29 20   REFERENCES pp) 
e260: 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20  WITHOUT rowid;. 
e270: 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72 65 61 63 68   }.} {}..foreach
e280: 20 7b 74 6e 20 69 6e 73 65 72 74 7d 20 7b 0a 20   {tn insert} {. 
e290: 20 31 20 22 49 4e 53 45 52 54 22 0a 20 20 32 20   1 "INSERT".  2 
e2a0: 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
e2b0: 45 22 0a 20 20 33 20 22 49 4e 53 45 52 54 20 4f  E".  3 "INSERT O
e2c0: 52 20 41 42 4f 52 54 22 0a 20 20 34 20 22 49 4e  R ABORT".  4 "IN
e2d0: 53 45 52 54 20 4f 52 20 52 4f 4c 4c 42 41 43 4b  SERT OR ROLLBACK
e2e0: 22 0a 20 20 35 20 22 49 4e 53 45 52 54 20 4f 52  ".  5 "INSERT OR
e2f0: 20 52 45 50 4c 41 43 45 22 0a 20 20 36 20 22 49   REPLACE".  6 "I
e300: 4e 53 45 52 54 20 4f 52 20 46 41 49 4c 22 0a 7d  NSERT OR FAIL".}
e310: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74   {.  do_test wit
e320: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 30 2e 32  hout_rowid3-20.2
e330: 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 63 61 74  .$tn.1 {.    cat
e340: 63 68 73 71 6c 20 22 24 69 6e 73 65 72 74 20 49  chsql "$insert I
e350: 4e 54 4f 20 63 63 20 56 41 4c 55 45 53 28 31 2c  NTO cc VALUES(1,
e360: 20 32 29 22 0a 20 20 7d 20 7b 31 20 7b 46 4f 52   2)".  } {1 {FOR
e370: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
e380: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 20 20 64  int failed}}.  d
e390: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
e3a0: 6f 77 69 64 33 2d 32 30 2e 32 2e 24 74 6e 2e 32  owid3-20.2.$tn.2
e3b0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
e3c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
e3d0: 63 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  c }.  } {}.  do_
e3e0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
e3f0: 69 64 33 2d 32 30 2e 32 2e 24 74 6e 2e 33 20 7b  id3-20.2.$tn.3 {
e400: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
e410: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
e420: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
e430: 70 70 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  pp VALUES(2, 'tw
e440: 6f 27 29 3b 0a 20 20 20 20 20 20 20 20 49 4e 53  o');.        INS
e450: 45 52 54 20 49 4e 54 4f 20 63 63 20 56 41 4c 55  ERT INTO cc VALU
e460: 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  ES(1, 2);.    }.
e470: 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 24 69      catchsql "$i
e480: 6e 73 65 72 74 20 49 4e 54 4f 20 63 63 20 56 41  nsert INTO cc VA
e490: 4c 55 45 53 28 33 2c 20 34 29 22 0a 20 20 7d 20  LUES(3, 4)".  } 
e4a0: 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20  {1 {FOREIGN KEY 
e4b0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
e4c0: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69  d}}.  do_test wi
e4d0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 30 2e  thout_rowid3-20.
e4e0: 32 2e 24 74 6e 2e 34 20 7b 0a 20 20 20 20 65 78  2.$tn.4 {.    ex
e4f0: 65 63 73 71 6c 20 7b 20 43 4f 4d 4d 49 54 20 3b  ecsql { COMMIT ;
e500: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
e510: 63 20 7d 0a 20 20 7d 20 7b 31 20 32 7d 0a 20 20  c }.  } {1 2}.  
e520: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
e530: 72 6f 77 69 64 33 2d 32 30 2e 32 2e 24 74 6e 2e  rowid3-20.2.$tn.
e540: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
e550: 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 63  { DELETE FROM cc
e560: 20 3b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 70   ; DELETE FROM p
e570: 70 20 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 66 6f  p }.  } {}.}..fo
e580: 72 65 61 63 68 20 7b 74 6e 20 75 70 64 61 74 65  reach {tn update
e590: 7d 20 7b 0a 20 20 31 20 22 55 50 44 41 54 45 22  } {.  1 "UPDATE"
e5a0: 0a 20 20 32 20 22 55 50 44 41 54 45 20 4f 52 20  .  2 "UPDATE OR 
e5b0: 49 47 4e 4f 52 45 22 0a 20 20 33 20 22 55 50 44  IGNORE".  3 "UPD
e5c0: 41 54 45 20 4f 52 20 41 42 4f 52 54 22 0a 20 20  ATE OR ABORT".  
e5d0: 34 20 22 55 50 44 41 54 45 20 4f 52 20 52 4f 4c  4 "UPDATE OR ROL
e5e0: 4c 42 41 43 4b 22 0a 20 20 35 20 22 55 50 44 41  LBACK".  5 "UPDA
e5f0: 54 45 20 4f 52 20 52 45 50 4c 41 43 45 22 0a 20  TE OR REPLACE". 
e600: 20 36 20 22 55 50 44 41 54 45 20 4f 52 20 46 41   6 "UPDATE OR FA
e610: 49 4c 22 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  IL".} {.  do_tes
e620: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
e630: 2d 32 30 2e 33 2e 24 74 6e 2e 31 20 7b 0a 20 20  -20.3.$tn.1 {.  
e640: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
e650: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 70    INSERT INTO pp
e660: 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27   VALUES(2, 'two'
e670: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
e680: 49 4e 54 4f 20 63 63 20 56 41 4c 55 45 53 28 31  INTO cc VALUES(1
e690: 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  , 2);.    }.  } 
e6a0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 69 74  {}.  do_test wit
e6b0: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 30 2e 33  hout_rowid3-20.3
e6c0: 2e 24 74 6e 2e 32 20 7b 0a 20 20 20 20 63 61 74  .$tn.2 {.    cat
e6d0: 63 68 73 71 6c 20 22 24 75 70 64 61 74 65 20 70  chsql "$update p
e6e0: 70 20 53 45 54 20 61 20 3d 20 31 22 0a 20 20 7d  p SET a = 1".  }
e6f0: 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59   {1 {FOREIGN KEY
e700: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
e710: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  ed}}.  do_test w
e720: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 30  ithout_rowid3-20
e730: 2e 33 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 65  .3.$tn.3 {.    e
e740: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
e750: 2a 20 46 52 4f 4d 20 70 70 20 7d 0a 20 20 7d 20  * FROM pp }.  } 
e760: 7b 32 20 74 77 6f 7d 0a 20 20 64 6f 5f 74 65 73  {2 two}.  do_tes
e770: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
e780: 2d 32 30 2e 33 2e 24 74 6e 2e 34 20 7b 0a 20 20  -20.3.$tn.4 {.  
e790: 20 20 63 61 74 63 68 73 71 6c 20 22 24 75 70 64    catchsql "$upd
e7a0: 61 74 65 20 63 63 20 53 45 54 20 64 20 3d 20 31  ate cc SET d = 1
e7b0: 22 0a 20 20 7d 20 7b 31 20 7b 46 4f 52 45 49 47  ".  } {1 {FOREIG
e7c0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
e7d0: 20 66 61 69 6c 65 64 7d 7d 0a 20 20 64 6f 5f 74   failed}}.  do_t
e7e0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
e7f0: 64 33 2d 32 30 2e 33 2e 24 74 6e 2e 35 20 7b 0a  d3-20.3.$tn.5 {.
e800: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45      execsql { SE
e810: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 63 20 7d  LECT * FROM cc }
e820: 0a 20 20 7d 20 7b 31 20 32 7d 0a 20 20 64 6f 5f  .  } {1 2}.  do_
e830: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
e840: 69 64 33 2d 32 30 2e 33 2e 24 74 6e 2e 36 20 7b  id3-20.3.$tn.6 {
e850: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
e860: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
e870: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
e880: 70 70 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68  pp VALUES(3, 'th
e890: 72 65 65 27 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ree');.    }.   
e8a0: 20 63 61 74 63 68 73 71 6c 20 22 24 75 70 64 61   catchsql "$upda
e8b0: 74 65 20 70 70 20 53 45 54 20 61 20 3d 20 31 20  te pp SET a = 1 
e8c0: 57 48 45 52 45 20 61 20 3d 20 32 22 0a 20 20 7d  WHERE a = 2".  }
e8d0: 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59   {1 {FOREIGN KEY
e8e0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
e8f0: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  ed}}.  do_test w
e900: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 32 30  ithout_rowid3-20
e910: 2e 33 2e 24 74 6e 2e 37 20 7b 0a 20 20 20 20 65  .3.$tn.7 {.    e
e920: 78 65 63 73 71 6c 20 7b 20 43 4f 4d 4d 49 54 20  xecsql { COMMIT 
e930: 3b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ; SELECT * FROM 
e940: 70 70 20 7d 0a 20 20 7d 20 7b 32 20 74 77 6f 20  pp }.  } {2 two 
e950: 33 20 74 68 72 65 65 7d 0a 20 20 64 6f 5f 74 65  3 three}.  do_te
e960: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
e970: 33 2d 32 30 2e 33 2e 24 74 6e 2e 38 20 7b 0a 20  3-20.3.$tn.8 {. 
e980: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
e990: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
e9a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 63    INSERT INTO cc
e9b0: 20 56 41 4c 55 45 53 28 32 2c 20 32 29 3b 0a 20   VALUES(2, 2);. 
e9c0: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
e9d0: 6c 20 22 24 75 70 64 61 74 65 20 63 63 20 53 45  l "$update cc SE
e9e0: 54 20 64 20 3d 20 31 20 57 48 45 52 45 20 63 20  T d = 1 WHERE c 
e9f0: 3d 20 31 22 0a 20 20 7d 20 7b 31 20 7b 46 4f 52  = 1".  } {1 {FOR
ea00: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
ea10: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 20 20 64  int failed}}.  d
ea20: 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
ea30: 6f 77 69 64 33 2d 32 30 2e 33 2e 24 74 6e 2e 39  owid3-20.3.$tn.9
ea40: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
ea50: 20 43 4f 4d 4d 49 54 20 3b 20 53 45 4c 45 43 54   COMMIT ; SELECT
ea60: 20 2a 20 46 52 4f 4d 20 63 63 20 7d 0a 20 20 7d   * FROM cc }.  }
ea70: 20 7b 31 20 32 20 32 20 32 7d 0a 20 20 64 6f 5f   {1 2 2 2}.  do_
ea80: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
ea90: 69 64 33 2d 32 30 2e 33 2e 24 74 6e 2e 31 30 20  id3-20.3.$tn.10 
eaa0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
eab0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 63 20 3b  DELETE FROM cc ;
eac0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 70 70 20   DELETE FROM pp 
ead0: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 2d 2d 2d  }.  } {}.}..#---
eae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eaf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb20: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 66 6f 6c  ------.# The fol
eb30: 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 6f 66 20  lowing block of 
eb40: 74 65 73 74 73 2c 20 74 68 6f 73 65 20 70 72 65  tests, those pre
eb50: 66 69 78 65 64 20 77 69 74 68 20 22 77 69 74 68  fixed with "with
eb60: 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b  out_rowid3-genfk
eb70: 65 79 2e 22 2c 0a 23 20 61 72 65 20 74 68 65 20  ey.",.# are the 
eb80: 73 61 6d 65 20 74 65 73 74 73 20 74 68 61 74 20  same tests that 
eb90: 77 65 72 65 20 75 73 65 64 20 74 6f 20 74 65 73  were used to tes
eba0: 74 20 74 68 65 20 22 2e 67 65 6e 66 6b 65 79 22  t the ".genfkey"
ebb0: 20 63 6f 6d 6d 61 6e 64 20 70 72 6f 76 69 64 65   command provide
ebc0: 64 20 0a 23 20 62 79 20 74 68 65 20 73 68 65 6c  d .# by the shel
ebd0: 6c 20 74 6f 6f 6c 2e 20 53 6f 20 74 68 65 73 65  l tool. So these
ebe0: 20 74 65 73 74 73 20 73 68 6f 77 20 74 68 61 74   tests show that
ebf0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 66 6f   the built-in fo
ec00: 72 65 69 67 6e 20 6b 65 79 20 0a 23 20 69 6d 70  reign key .# imp
ec10: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d  lementation is m
ec20: 6f 72 65 20 6f 72 20 6c 65 73 73 20 63 6f 6d 70  ore or less comp
ec30: 61 74 69 62 6c 65 20 77 69 74 68 20 74 68 65 20  atible with the 
ec40: 74 72 69 67 67 65 72 73 20 67 65 6e 65 72 61 74  triggers generat
ec50: 65 64 20 0a 23 20 62 79 20 67 65 6e 66 6b 65 79  ed .# by genfkey
ec60: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
ec70: 6c 65 73 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  les.do_test with
ec80: 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b  out_rowid3-genfk
ec90: 65 79 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  ey.1.1 {.  execs
eca0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
ecb0: 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 20 50  TABLE t1(a INT P
ecc0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
ecd0: 2c 20 55 4e 49 51 55 45 28 62 2c 20 63 29 29 20  , UNIQUE(b, c)) 
ece0: 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20  WITHOUT rowid;. 
ecf0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
ed00: 74 32 28 65 20 52 45 46 45 52 45 4e 43 45 53 20  t2(e REFERENCES 
ed10: 74 31 2c 20 66 29 3b 0a 20 20 20 20 43 52 45 41  t1, f);.    CREA
ed20: 54 45 20 54 41 42 4c 45 20 74 33 28 67 2c 20 68  TE TABLE t3(g, h
ed30: 2c 20 69 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59  , i, FOREIGN KEY
ed40: 20 28 68 2c 20 69 29 20 52 45 46 45 52 45 4e 43   (h, i) REFERENC
ed50: 45 53 20 74 31 28 62 2c 20 63 29 29 3b 0a 20 20  ES t1(b, c));.  
ed60: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
ed70: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65  ithout_rowid3-ge
ed80: 6e 66 6b 65 79 2e 31 2e 32 20 7b 0a 20 20 63 61  nfkey.1.2 {.  ca
ed90: 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  tchsql { INSERT 
eda0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
edb0: 2c 20 32 29 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52  , 2) }.} {1 {FOR
edc0: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
edd0: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f  int failed}}.do_
ede0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
edf0: 69 64 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 33 20  id3-genfkey.1.3 
ee00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
ee10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
ee20: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
ee30: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
ee40: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 20 32  O t2 VALUES(1, 2
ee50: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
ee60: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
ee70: 64 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 34 20 7b  d3-genfkey.1.4 {
ee80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
ee90: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
eea0: 45 53 28 4e 55 4c 4c 2c 20 33 29 20 7d 0a 7d 20  ES(NULL, 3) }.} 
eeb0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  {}.do_test witho
eec0: 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65  ut_rowid3-genfke
eed0: 79 2e 31 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  y.1.5 {.  catchs
eee0: 71 6c 20 7b 20 55 50 44 41 54 45 20 74 32 20 53  ql { UPDATE t2 S
eef0: 45 54 20 65 20 3d 20 35 20 57 48 45 52 45 20 65  ET e = 5 WHERE e
ef00: 20 49 53 20 4e 55 4c 4c 20 7d 0a 7d 20 7b 31 20   IS NULL }.} {1 
ef10: 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  {FOREIGN KEY con
ef20: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d  straint failed}}
ef30: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
ef40: 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65 79 2e  _rowid3-genfkey.
ef50: 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.6 {.  execsql 
ef60: 7b 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20  { UPDATE t2 SET 
ef70: 65 20 3d 20 31 20 57 48 45 52 45 20 65 20 49 53  e = 1 WHERE e IS
ef80: 20 4e 55 4c 4c 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f   NULL }.} {}.do_
ef90: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
efa0: 69 64 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 37 20  id3-genfkey.1.7 
efb0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 55 50  {.  execsql { UP
efc0: 44 41 54 45 20 74 32 20 53 45 54 20 65 20 3d 20  DATE t2 SET e = 
efd0: 4e 55 4c 4c 20 57 48 45 52 45 20 66 20 3d 20 33  NULL WHERE f = 3
efe0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
eff0: 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67  without_rowid3-g
f000: 65 6e 66 6b 65 79 2e 31 2e 38 20 7b 0a 20 20 63  enfkey.1.8 {.  c
f010: 61 74 63 68 73 71 6c 20 7b 20 55 50 44 41 54 45  atchsql { UPDATE
f020: 20 74 31 20 53 45 54 20 61 20 3d 20 31 30 20 7d   t1 SET a = 10 }
f030: 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
f040: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
f050: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
f060: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65  ithout_rowid3-ge
f070: 6e 66 6b 65 79 2e 31 2e 39 20 7b 0a 20 20 63 61  nfkey.1.9 {.  ca
f080: 74 63 68 73 71 6c 20 7b 20 55 50 44 41 54 45 20  tchsql { UPDATE 
f090: 74 31 20 53 45 54 20 61 20 3d 20 4e 55 4c 4c 20  t1 SET a = NULL 
f0a0: 7d 0a 7d 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c  }.} {1 {NOT NULL
f0b0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
f0c0: 65 64 3a 20 74 31 2e 61 7d 7d 0a 64 6f 5f 74 65  ed: t1.a}}.do_te
f0d0: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
f0e0: 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 31 30 20 7b  3-genfkey.1.10 {
f0f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 45  .  catchsql { DE
f100: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d  LETE FROM t1 }.}
f110: 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59   {1 {FOREIGN KEY
f120: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
f130: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74  ed}}.do_test wit
f140: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66  hout_rowid3-genf
f150: 6b 65 79 2e 31 2e 31 31 20 7b 0a 20 20 65 78 65  key.1.11 {.  exe
f160: 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74 32  csql { UPDATE t2
f170: 20 53 45 54 20 65 20 3d 20 4e 55 4c 4c 20 7d 0a   SET e = NULL }.
f180: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74  } {}.do_test wit
f190: 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66  hout_rowid3-genf
f1a0: 6b 65 79 2e 31 2e 31 32 20 7b 0a 20 20 65 78 65  key.1.12 {.  exe
f1b0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 55 50 44 41  csql { .    UPDA
f1c0: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 31 30  TE t1 SET a = 10
f1d0: 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ;.    DELETE FRO
f1e0: 4d 20 74 31 3b 0a 20 20 20 20 44 45 4c 45 54 45  M t1;.    DELETE
f1f0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
f200: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  {}.do_test witho
f210: 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65  ut_rowid3-genfke
f220: 79 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  y.1.13 {.  execs
f230: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
f240: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31  INTO t3 VALUES(1
f250: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20  , NULL, NULL);. 
f260: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
f270: 33 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 4e  3 VALUES(1, 2, N
f280: 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ULL);.    INSERT
f290: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
f2a0: 31 2c 20 4e 55 4c 4c 2c 20 33 29 3b 0a 20 20 7d  1, NULL, 3);.  }
f2b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69  .} {}.do_test wi
f2c0: 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e  thout_rowid3-gen
f2d0: 66 6b 65 79 2e 31 2e 31 34 20 7b 0a 20 20 63 61  fkey.1.14 {.  ca
f2e0: 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  tchsql { INSERT 
f2f0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 33  INTO t3 VALUES(3
f300: 2c 20 31 2c 20 34 29 20 7d 0a 7d 20 7b 31 20 7b  , 1, 4) }.} {1 {
f310: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
f320: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a  traint failed}}.
f330: 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
f340: 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65 79 2e 31  rowid3-genfkey.1
f350: 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .15 {.  execsql 
f360: 7b 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  { .    INSERT IN
f370: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
f380: 31 2c 20 34 29 3b 0a 20 20 20 20 49 4e 53 45 52  1, 4);.    INSER
f390: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
f3a0: 28 33 2c 20 31 2c 20 34 29 3b 0a 20 20 7d 0a 7d  (3, 1, 4);.  }.}
f3b0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   {}.do_test with
f3c0: 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b  out_rowid3-genfk
f3d0: 65 79 2e 31 2e 31 36 20 7b 0a 20 20 63 61 74 63  ey.1.16 {.  catc
f3e0: 68 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46 52  hsql { DELETE FR
f3f0: 4f 4d 20 74 31 20 7d 0a 7d 20 7b 31 20 7b 46 4f  OM t1 }.} {1 {FO
f400: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
f410: 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f  aint failed}}.do
f420: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
f430: 77 69 64 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 31  wid3-genfkey.1.1
f440: 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  7 {.  catchsql {
f450: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
f460: 20 3d 20 31 30 7d 0a 7d 20 7b 31 20 7b 46 4f 52   = 10}.} {1 {FOR
f470: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
f480: 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f  int failed}}.do_
f490: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
f4a0: 69 64 33 2d 67 65 6e 66 6b 65 79 2e 31 2e 31 38  id3-genfkey.1.18
f4b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 55   {.  execsql { U
f4c0: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
f4d0: 20 31 30 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73   10}.} {}.do_tes
f4e0: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
f4f0: 2d 67 65 6e 66 6b 65 79 2e 31 2e 31 39 20 7b 0a  -genfkey.1.19 {.
f500: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 55 50 44    catchsql { UPD
f510: 41 54 45 20 74 33 20 53 45 54 20 68 20 3d 20 27  ATE t3 SET h = '
f520: 68 65 6c 6c 6f 27 20 57 48 45 52 45 20 69 20 3d  hello' WHERE i =
f530: 20 33 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47   3}.} {1 {FOREIG
f540: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
f550: 20 66 61 69 6c 65 64 7d 7d 0a 0a 64 72 6f 70 5f   failed}}..drop_
f560: 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 74 65  all_tables.do_te
f570: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
f580: 33 2d 67 65 6e 66 6b 65 79 2e 32 2e 31 20 7b 0a  3-genfkey.2.1 {.
f590: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
f5a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
f5b0: 61 20 49 4e 54 20 50 52 49 4d 41 52 59 20 4b 45  a INT PRIMARY KE
f5c0: 59 2c 20 62 2c 20 63 2c 20 55 4e 49 51 55 45 28  Y, b, c, UNIQUE(
f5d0: 62 2c 20 63 29 29 20 57 49 54 48 4f 55 54 20 72  b, c)) WITHOUT r
f5e0: 6f 77 69 64 3b 0a 20 20 20 20 43 52 45 41 54 45  owid;.    CREATE
f5f0: 20 54 41 42 4c 45 20 74 32 28 65 20 52 45 46 45   TABLE t2(e REFE
f600: 52 45 4e 43 45 53 20 74 31 20 4f 4e 20 55 50 44  RENCES t1 ON UPD
f610: 41 54 45 20 43 41 53 43 41 44 45 20 4f 4e 20 44  ATE CASCADE ON D
f620: 45 4c 45 54 45 20 43 41 53 43 41 44 45 2c 20 66  ELETE CASCADE, f
f630: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
f640: 42 4c 45 20 74 33 28 67 2c 20 68 2c 20 69 2c 20  BLE t3(g, h, i, 
f650: 0a 20 20 20 20 20 20 20 20 46 4f 52 45 49 47 4e  .        FOREIGN
f660: 20 4b 45 59 20 28 68 2c 20 69 29 20 0a 20 20 20   KEY (h, i) .   
f670: 20 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20       REFERENCES 
f680: 74 31 28 62 2c 20 63 29 20 4f 4e 20 55 50 44 41  t1(b, c) ON UPDA
f690: 54 45 20 43 41 53 43 41 44 45 20 4f 4e 20 44 45  TE CASCADE ON DE
f6a0: 4c 45 54 45 20 43 41 53 43 41 44 45 0a 20 20 20  LETE CASCADE.   
f6b0: 20 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f   );.  }.} {}.do_
f6c0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
f6d0: 69 64 33 2d 67 65 6e 66 6b 65 79 2e 32 2e 32 20  id3-genfkey.2.2 
f6e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
f6f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
f700: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
f710: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
f720: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20 35  O t1 VALUES(4, 5
f730: 2c 20 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , 6);.    INSERT
f740: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
f750: 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49  1, 'one');.    I
f760: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
f770: 4c 55 45 53 28 34 2c 20 27 66 6f 75 72 27 29 3b  LUES(4, 'four');
f780: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
f790: 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
f7a0: 2d 67 65 6e 66 6b 65 79 2e 32 2e 33 20 7b 0a 20  -genfkey.2.3 {. 
f7b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
f7c0: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
f7d0: 20 32 20 57 48 45 52 45 20 61 20 3d 20 31 3b 0a   2 WHERE a = 1;.
f7e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
f7f0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 6f  M t2;.  }.} {2 o
f800: 6e 65 20 34 20 66 6f 75 72 7d 0a 64 6f 5f 74 65  ne 4 four}.do_te
f810: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
f820: 33 2d 67 65 6e 66 6b 65 79 2e 32 2e 34 20 7b 0a  3-genfkey.2.4 {.
f830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
f840: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
f850: 48 45 52 45 20 61 20 3d 20 34 3b 0a 20 20 20 20  HERE a = 4;.    
f860: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
f870: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 6f 6e 65 7d 0a  ;.  }.} {2 one}.
f880: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
f890: 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65 79 2e  _rowid3-genfkey.
f8a0: 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.5 {.  execsql 
f8b0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
f8c0: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 68 65 6c  O t3 VALUES('hel
f8d0: 6c 6f 27 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20  lo', 2, 3);.    
f8e0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 63 20  UPDATE t1 SET c 
f8f0: 3d 20 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  = 2;.    SELECT 
f900: 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d  * FROM t3;.  }.}
f910: 20 7b 68 65 6c 6c 6f 20 32 20 32 7d 0a 64 6f 5f   {hello 2 2}.do_
f920: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
f930: 69 64 33 2d 67 65 6e 66 6b 65 79 2e 32 2e 36 20  id3-genfkey.2.6 
f940: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
f950: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
f960: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
f970: 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 7d  ROM t3;.  }.} {}
f980: 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  ..drop_all_table
f990: 73 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75  s.do_test withou
f9a0: 74 5f 72 6f 77 69 64 33 2d 67 65 6e 66 6b 65 79  t_rowid3-genfkey
f9b0: 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.1 {.  execsql
f9c0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
f9d0: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
f9e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
f9f0: 20 63 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29   c, UNIQUE(c, b)
fa00: 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b  ) WITHOUT rowid;
fa10: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
fa20: 45 20 74 32 28 65 20 52 45 46 45 52 45 4e 43 45  E t2(e REFERENCE
fa30: 53 20 74 31 20 4f 4e 20 55 50 44 41 54 45 20 53  S t1 ON UPDATE S
fa40: 45 54 20 4e 55 4c 4c 20 4f 4e 20 44 45 4c 45 54  ET NULL ON DELET
fa50: 45 20 53 45 54 20 4e 55 4c 4c 2c 20 66 29 3b 0a  E SET NULL, f);.
fa60: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
fa70: 20 74 33 28 67 2c 20 68 2c 20 69 2c 20 0a 20 20   t3(g, h, i, .  
fa80: 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45        FOREIGN KE
fa90: 59 20 28 68 2c 20 69 29 20 0a 20 20 20 20 20 20  Y (h, i) .      
faa0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28    REFERENCES t1(
fab0: 62 2c 20 63 29 20 4f 4e 20 55 50 44 41 54 45 20  b, c) ON UPDATE 
fac0: 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 44 45 4c 45  SET NULL ON DELE
fad0: 54 45 20 53 45 54 20 4e 55 4c 4c 0a 20 20 20 20  TE SET NULL.    
fae0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
faf0: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
fb00: 64 33 2d 67 65 6e 66 6b 65 79 2e 33 2e 32 20 7b  d3-genfkey.3.2 {
fb10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
fb20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
fb30: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
fb40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
fb50: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20 35 2c   t1 VALUES(4, 5,
fb60: 20 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   6);.    INSERT 
fb70: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
fb80: 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e  , 'one');.    IN
fb90: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
fba0: 55 45 53 28 34 2c 20 27 66 6f 75 72 27 29 3b 0a  UES(4, 'four');.
fbb0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
fbc0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
fbd0: 67 65 6e 66 6b 65 79 2e 33 2e 33 20 7b 0a 20 20  genfkey.3.3 {.  
fbe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
fbf0: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
fc00: 32 20 57 48 45 52 45 20 61 20 3d 20 31 3b 0a 20  2 WHERE a = 1;. 
fc10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
fc20: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 6f   t2;.  }.} {{} o
fc30: 6e 65 20 34 20 66 6f 75 72 7d 0a 64 6f 5f 74 65  ne 4 four}.do_te
fc40: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
fc50: 33 2d 67 65 6e 66 6b 65 79 2e 33 2e 34 20 7b 0a  3-genfkey.3.4 {.
fc60: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
fc70: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
fc80: 48 45 52 45 20 61 20 3d 20 34 3b 0a 20 20 20 20  HERE a = 4;.    
fc90: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
fca0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 6f 6e 65 20  ;.  }.} {{} one 
fcb0: 7b 7d 20 66 6f 75 72 7d 0a 64 6f 5f 74 65 73 74  {} four}.do_test
fcc0: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
fcd0: 67 65 6e 66 6b 65 79 2e 33 2e 35 20 7b 0a 20 20  genfkey.3.5 {.  
fce0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
fcf0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
fd00: 55 45 53 28 27 68 65 6c 6c 6f 27 2c 20 32 2c 20  UES('hello', 2, 
fd10: 33 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  3);.    UPDATE t
fd20: 31 20 53 45 54 20 63 20 3d 20 32 3b 0a 20 20 20  1 SET c = 2;.   
fd30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
fd40: 33 3b 0a 20 20 7d 0a 7d 20 7b 68 65 6c 6c 6f 20  3;.  }.} {hello 
fd50: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  {} {}}.do_test w
fd60: 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 67 65  ithout_rowid3-ge
fd70: 6e 66 6b 65 79 2e 33 2e 36 20 7b 0a 20 20 65 78  nfkey.3.6 {.  ex
fd80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
fd90: 54 45 20 74 33 20 53 45 54 20 68 20 3d 20 32 2c  TE t3 SET h = 2,
fda0: 20 69 20 3d 20 32 3b 0a 20 20 20 20 44 45 4c 45   i = 2;.    DELE
fdb0: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  TE FROM t1;.    
fdc0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
fdd0: 3b 0a 20 20 7d 0a 7d 20 7b 68 65 6c 6c 6f 20 7b  ;.  }.} {hello {
fde0: 7d 20 7b 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  } {}}..#--------
fdf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
fe00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
fe10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
fe20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
fe30: 2d 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20  -.# Verify that 
fe40: 74 69 63 6b 65 74 20 64 64 30 38 65 35 61 39 38  ticket dd08e5a98
fe50: 38 64 30 30 64 65 63 63 34 61 35 34 33 64 61 61  8d00decc4a543daa
fe60: 38 64 62 62 66 61 62 39 63 35 37 37 61 64 38 20  8dbbfab9c577ad8 
fe70: 68 61 73 20 62 65 65 6e 0a 23 20 66 69 78 65 64  has been.# fixed
fe80: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 69 74 68  ..#.do_test with
fe90: 6f 75 74 5f 72 6f 77 69 64 33 2d 64 64 30 38 65  out_rowid3-dd08e
fea0: 35 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  5.1.1 {.  execsq
feb0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66  l {.    PRAGMA f
fec0: 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 4e 3b 0a  oreign_keys=ON;.
fed0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
fee0: 20 74 64 64 30 38 28 61 20 49 4e 54 45 47 45 52   tdd08(a INTEGER
fef0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29   PRIMARY KEY, b)
ff00: 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a   WITHOUT rowid;.
ff10: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
ff20: 45 20 49 4e 44 45 58 20 69 64 64 30 38 20 4f 4e  E INDEX idd08 ON
ff30: 20 74 64 64 30 38 28 61 2c 62 29 3b 0a 20 20 20   tdd08(a,b);.   
ff40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 64 64   INSERT INTO tdd
ff50: 30 38 20 56 41 4c 55 45 53 28 32 30 30 2c 33 30  08 VALUES(200,30
ff60: 30 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20  0);..    CREATE 
ff70: 54 41 42 4c 45 20 74 64 64 30 38 5f 62 28 77 2c  TABLE tdd08_b(w,
ff80: 78 2c 79 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59  x,y, FOREIGN KEY
ff90: 28 78 2c 79 29 20 52 45 46 45 52 45 4e 43 45 53  (x,y) REFERENCES
ffa0: 20 74 64 64 30 38 28 61 2c 62 29 29 3b 0a 20 20   tdd08(a,b));.  
ffb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 64    INSERT INTO td
ffc0: 64 30 38 5f 62 20 56 41 4c 55 45 53 28 31 30 30  d08_b VALUES(100
ffd0: 2c 32 30 30 2c 33 30 30 29 3b 0a 20 20 7d 0a 7d  ,200,300);.  }.}
ffe0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68   {}.do_test with
fff0: 6f 75 74 5f 72 6f 77 69 64 33 2d 64 64 30 38 65  out_rowid3-dd08e
10000 35 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  5.1.2 {.  catchs
10010 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
10020 46 52 4f 4d 20 74 64 64 30 38 3b 0a 20 20 7d 0a  FROM tdd08;.  }.
10030 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45  } {1 {FOREIGN KE
10040 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
10050 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69  led}}.do_test wi
10060 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 64 64 30  thout_rowid3-dd0
10070 38 65 35 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63  8e5.1.3 {.  exec
10080 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
10090 20 2a 20 46 52 4f 4d 20 74 64 64 30 38 3b 0a 20   * FROM tdd08;. 
100a0 20 7d 0a 7d 20 7b 32 30 30 20 33 30 30 7d 0a 64   }.} {200 300}.d
100b0 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  o_test without_r
100c0 6f 77 69 64 33 2d 64 64 30 38 65 35 2e 31 2e 34  owid3-dd08e5.1.4
100d0 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
100e0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
100f0 74 64 64 30 38 5f 62 20 56 41 4c 55 45 53 28 34  tdd08_b VALUES(4
10100 30 30 2c 35 30 30 2c 33 30 30 29 3b 0a 20 20 7d  00,500,300);.  }
10110 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
10120 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
10130 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 77  iled}}.do_test w
10140 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d 64 64  ithout_rowid3-dd
10150 30 38 65 35 2e 31 2e 35 20 7b 0a 20 20 63 61 74  08e5.1.5 {.  cat
10160 63 68 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  chsql {.    UPDA
10170 54 45 20 74 64 64 30 38 5f 62 20 53 45 54 20 78  TE tdd08_b SET x
10180 3d 78 2b 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  =x+1;.  }.} {1 {
10190 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
101a0 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a  traint failed}}.
101b0 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  do_test without_
101c0 72 6f 77 69 64 33 2d 64 64 30 38 65 35 2e 31 2e  rowid3-dd08e5.1.
101d0 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
101e0 0a 20 20 20 20 55 50 44 41 54 45 20 74 64 64 30  .    UPDATE tdd0
101f0 38 20 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d  8 SET a=a+1;.  }
10200 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20 4b  .} {1 {FOREIGN K
10210 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
10220 69 6c 65 64 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  iled}}..#-------
10230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10270 2d 2d 0a 23 20 56 65 72 69 66 79 20 74 68 61 74  --.# Verify that
10280 20 74 69 63 6b 65 74 20 63 65 37 63 31 33 33 65   ticket ce7c133e
10290 61 36 63 63 39 63 63 64 63 31 61 36 30 64 38 30  a6cc9ccdc1a60d80
102a0 34 34 31 66 38 30 62 36 31 38 30 66 35 65 62 61  441f80b6180f5eba
102b0 0a 23 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74  .# fixed..#.do_t
102c0 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
102d0 64 33 2d 63 65 37 63 31 33 2e 31 2e 31 20 7b 0a  d3-ce7c13.1.1 {.
102e0 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
102f0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 63 65  CREATE TABLE tce
10300 37 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  71(a INTEGER PRI
10310 4d 41 52 59 20 4b 45 59 2c 20 62 29 20 57 49 54  MARY KEY, b) WIT
10320 48 4f 55 54 20 72 6f 77 69 64 3b 0a 20 20 20 20  HOUT rowid;.    
10330 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e  CREATE UNIQUE IN
10340 44 45 58 20 69 63 65 37 31 20 4f 4e 20 74 63 65  DEX ice71 ON tce
10350 37 31 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53  71(a,b);.    INS
10360 45 52 54 20 49 4e 54 4f 20 74 63 65 37 31 20 56  ERT INTO tce71 V
10370 41 4c 55 45 53 28 31 30 30 2c 32 30 30 29 3b 0a  ALUES(100,200);.
10380 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
10390 20 74 63 65 37 32 28 77 2c 20 78 2c 20 79 2c 20   tce72(w, x, y, 
103a0 46 4f 52 45 49 47 4e 20 4b 45 59 28 78 2c 79 29  FOREIGN KEY(x,y)
103b0 20 52 45 46 45 52 45 4e 43 45 53 20 74 63 65 37   REFERENCES tce7
103c0 31 28 61 2c 62 29 29 3b 0a 20 20 20 20 49 4e 53  1(a,b));.    INS
103d0 45 52 54 20 49 4e 54 4f 20 74 63 65 37 32 20 56  ERT INTO tce72 V
103e0 41 4c 55 45 53 28 33 30 30 2c 31 30 30 2c 32 30  ALUES(300,100,20
103f0 30 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  0);.    UPDATE t
10400 63 65 37 31 20 73 65 74 20 62 20 3d 20 32 30 30  ce71 set b = 200
10410 20 77 68 65 72 65 20 61 20 3d 20 31 30 30 3b 0a   where a = 100;.
10420 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
10430 4d 20 74 63 65 37 31 2c 20 74 63 65 37 32 3b 0a  M tce71, tce72;.
10440 20 20 7d 0a 7d 20 7b 31 30 30 20 32 30 30 20 33    }.} {100 200 3
10450 30 30 20 31 30 30 20 32 30 30 7d 0a 64 6f 5f 74  00 100 200}.do_t
10460 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
10470 64 33 2d 63 65 37 63 31 33 2e 31 2e 32 20 7b 0a  d3-ce7c13.1.2 {.
10480 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
10490 20 55 50 44 41 54 45 20 74 63 65 37 31 20 73 65   UPDATE tce71 se
104a0 74 20 62 20 3d 20 32 30 31 20 77 68 65 72 65 20  t b = 201 where 
104b0 61 20 3d 20 31 30 30 3b 0a 20 20 7d 0a 7d 20 7b  a = 100;.  }.} {
104c0 31 20 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  1 {FOREIGN KEY c
104d0 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
104e0 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f  }}.do_test witho
104f0 75 74 5f 72 6f 77 69 64 33 2d 63 65 37 63 31 33  ut_rowid3-ce7c13
10500 2e 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  .1.3 {.  catchsq
10510 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
10520 63 65 37 31 20 73 65 74 20 61 20 3d 20 31 30 31  ce71 set a = 101
10530 20 77 68 65 72 65 20 61 20 3d 20 31 30 30 3b 0a   where a = 100;.
10540 20 20 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47    }.} {1 {FOREIG
10550 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
10560 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73   failed}}.do_tes
10570 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
10580 2d 63 65 37 63 31 33 2e 31 2e 34 20 7b 0a 20 20  -ce7c13.1.4 {.  
10590 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
105a0 45 41 54 45 20 54 41 42 4c 45 20 74 63 65 37 33  EATE TABLE tce73
105b0 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
105c0 52 59 20 4b 45 59 2c 20 62 2c 20 55 4e 49 51 55  RY KEY, b, UNIQU
105d0 45 28 61 2c 62 29 29 20 57 49 54 48 4f 55 54 20  E(a,b)) WITHOUT 
105e0 72 6f 77 69 64 3b 0a 20 20 20 20 49 4e 53 45 52  rowid;.    INSER
105f0 54 20 49 4e 54 4f 20 74 63 65 37 33 20 56 41 4c  T INTO tce73 VAL
10600 55 45 53 28 31 30 30 2c 32 30 30 29 3b 0a 20 20  UES(100,200);.  
10610 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
10620 63 65 37 34 28 77 2c 20 78 2c 20 79 2c 20 46 4f  ce74(w, x, y, FO
10630 52 45 49 47 4e 20 4b 45 59 28 78 2c 79 29 20 52  REIGN KEY(x,y) R
10640 45 46 45 52 45 4e 43 45 53 20 74 63 65 37 33 28  EFERENCES tce73(
10650 61 2c 62 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  a,b));.    INSER
10660 54 20 49 4e 54 4f 20 74 63 65 37 34 20 56 41 4c  T INTO tce74 VAL
10670 55 45 53 28 33 30 30 2c 31 30 30 2c 32 30 30 29  UES(300,100,200)
10680 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 63 65  ;.    UPDATE tce
10690 37 33 20 73 65 74 20 62 20 3d 20 32 30 30 20 77  73 set b = 200 w
106a0 68 65 72 65 20 61 20 3d 20 31 30 30 3b 0a 20 20  here a = 100;.  
106b0 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
106c0 74 63 65 37 33 2c 20 74 63 65 37 34 3b 0a 20 20  tce73, tce74;.  
106d0 7d 0a 7d 20 7b 31 30 30 20 32 30 30 20 33 30 30  }.} {100 200 300
106e0 20 31 30 30 20 32 30 30 7d 0a 64 6f 5f 74 65 73   100 200}.do_tes
106f0 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33  t without_rowid3
10700 2d 63 65 37 63 31 33 2e 31 2e 35 20 7b 0a 20 20  -ce7c13.1.5 {.  
10710 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 55  catchsql {.    U
10720 50 44 41 54 45 20 74 63 65 37 33 20 73 65 74 20  PDATE tce73 set 
10730 62 20 3d 20 32 30 31 20 77 68 65 72 65 20 61 20  b = 201 where a 
10740 3d 20 31 30 30 3b 0a 20 20 7d 0a 7d 20 7b 31 20  = 100;.  }.} {1 
10750 7b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  {FOREIGN KEY con
10760 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d  straint failed}}
10770 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
10780 5f 72 6f 77 69 64 33 2d 63 65 37 63 31 33 2e 31  _rowid3-ce7c13.1
10790 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .6 {.  catchsql 
107a0 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 63 65  {.    UPDATE tce
107b0 37 33 20 73 65 74 20 61 20 3d 20 31 30 31 20 77  73 set a = 101 w
107c0 68 65 72 65 20 61 20 3d 20 31 30 30 3b 0a 20 20  here a = 100;.  
107d0 7d 0a 7d 20 7b 31 20 7b 46 4f 52 45 49 47 4e 20  }.} {1 {FOREIGN 
107e0 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
107f0 61 69 6c 65 64 7d 7d 0a 0a 23 20 43 6f 6e 66 69  ailed}}..# Confi
10800 72 6d 20 74 68 61 74 20 63 68 61 6e 67 65 73 28  rm that changes(
10810 29 20 77 6f 72 6b 73 20 6f 6e 20 57 49 54 48 4f  ) works on WITHO
10820 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20  UT ROWID tables 
10830 74 68 61 74 20 75 73 65 20 74 68 65 0a 23 20 78  that use the.# x
10840 66 65 72 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  fer optimization
10850 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  ..#.db close.sql
10860 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a  ite3 db :memory:
10870 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
10880 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 33 2d   without_rowid3-
10890 33 30 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  30.1 {.  CREATE 
108a0 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 50 52 49  TABLE t1(a,b,PRI
108b0 4d 41 52 59 20 4b 45 59 28 61 2c 62 29 29 20 57  MARY KEY(a,b)) W
108c0 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
108d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
108e0 61 2c 62 2c 50 52 49 4d 41 52 59 20 4b 45 59 28  a,b,PRIMARY KEY(
108f0 61 2c 62 29 29 20 57 49 54 48 4f 55 54 20 52 4f  a,b)) WITHOUT RO
10900 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  WID;.  INSERT IN
10910 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
10920 29 2c 28 33 2c 34 29 2c 28 35 2c 36 29 3b 0a 20  ),(3,4),(5,6);. 
10930 20 53 45 4c 45 43 54 20 63 68 61 6e 67 65 73 28   SELECT changes(
10940 29 3b 0a 7d 20 7b 33 7d 0a 64 6f 5f 65 78 65 63  );.} {3}.do_exec
10950 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74  sql_test without
10960 5f 72 6f 77 69 64 33 2d 33 30 2e 32 20 7b 0a 20  _rowid3-30.2 {. 
10970 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
10980 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
10990 3b 0a 20 20 53 45 4c 45 43 54 20 63 68 61 6e 67  ;.  SELECT chang
109a0 65 73 28 29 3b 0a 7d 20 7b 33 7d 0a 0a 66 69 6e  es();.} {3}..fin
109b0 69 73 68 5f 74 65 73 74 0a                       ish_test.