]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Disable the RESTRICT foreign key action if "PRAGMA defer_foreign_keys" is set.
authordan <dan@noemail.net>
Thu, 25 Feb 2016 19:52:11 +0000 (19:52 +0000)
committerdan <dan@noemail.net>
Thu, 25 Feb 2016 19:52:11 +0000 (19:52 +0000)
FossilOrigin-Name: 8fea1166016c659ece83e0045bc348f478a9ba6a

1  2 
ext/session/sessionC.test
manifest
manifest.uuid
src/fkey.c

index 81cc53f5a6a4a2bc94ffc3b665ddeb48b7a5a64b,81cc53f5a6a4a2bc94ffc3b665ddeb48b7a5a64b..390a31deb63da223812e121ff7df40358a4420cf
@@@ -26,11 -26,11 +26,19 @@@ set testprefix session
  # ON DELETE RESTRICT foreign key action is triggered, or if a trigger
  # program raises a constraint somehow.
  #
++# UPDATE: The above is no longer true, as "PRAGMA defer_foreign_keys"
++# now disables "RESTRICT" processing. The test below has been rewritten 
++# to use a trigger instead of a foreign key to test this case.
++#
  do_execsql_test 1.0 {
    PRAGMA foreign_keys = 1;
  
    CREATE TABLE p(a PRIMARY KEY, b, c);
--  CREATE TABLE c(d PRIMARY KEY, e REFERENCES p ON DELETE RESTRICT);
++  CREATE TABLE c(d PRIMARY KEY, e /* REFERENCES p ON DELETE RESTRICT */);
++
++  CREATE TRIGGER restrict_trig BEFORE DELETE ON p BEGIN
++    SELECT raise(ABORT, 'error!') FROM c WHERE e=old.a;
++  END;
  
    INSERT INTO p VALUES('one', 1, 1);
    INSERT INTO p VALUES('two', 2, 2);
diff --cc manifest
index 0cea1da469370581294cb92e23570e4f9884dcf1,66d0b52411589991156d2a344b310dcf95f41884..fa91c62a2beb2257e0b77c1057f5bc16e4fc82a5
+++ b/manifest
@@@ -1,10 -1,10 +1,10 @@@
- C Merge\sall\sthe\slatest\schanges\sfrom\strunk.
- D 2016-02-25T18:54:30.918
+ C Disable\sthe\sRESTRICT\sforeign\skey\saction\sif\s"PRAGMA\sdefer_foreign_keys"\sis\sset.
 -D 2016-01-21T17:25:56.966
 -F Makefile.in a47ec69daac0cdfe3413e50ceea6dc8da3dc4ecb
++D 2016-02-25T19:52:11.580
 +F Makefile.in 5cbf3f753328d1bcd3a6117785b4874d99612f8f
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 -F Makefile.msc b4d0270955b3f102214b2242f2a1b802c22ee21b
 +F Makefile.msc cf5496f4c4e256a79bae1804da61703647b26398
  F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
 -F VERSION 866588d1edf0ccb5b0d33896974338f97564f719
 +F VERSION c6b1f51809551d60ad001e6d87cf3ab2c7f54b6f
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
@@@ -278,7 -274,7 +278,7 @@@ F ext/session/session8.test 8e194b3f655
  F ext/session/session9.test 5409d90d8141881d08285ed1c2c0d8d10fb92069
  F ext/session/sessionA.test 1feeab0b8e03527f08f2f1defb442da25480138f
  F ext/session/sessionB.test 886252dcb7e692e62ef7e357456200912e367823
--F ext/session/sessionC.test 3982f8577b0744c5ce3aaef7cfeb5bd903f17fe4
++F ext/session/sessionC.test 97556f5164ac29f2344b24bd7de6a3a35a95c390
  F ext/session/sessionD.test d4744c78334162851d2a2f285c7e603e31b49aa2
  F ext/session/sessionE.test e60a238c47f0feb3bb707e7f35e22be09c7e8f26
  F ext/session/sessionF.test c2f178d4dfd723a5fd94a730ea2ccb44c669e3ce
@@@ -305,28 -301,28 +305,28 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
  F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
  F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
 -F src/alter.c 9d649e46c780166e416fb11dbd23f8d49aab8267
 -F src/analyze.c 0043d3e501f04297fed2bb50b488bc08d5c39f36
 -F src/attach.c 07b3a34a1702dce92a7f1d3888c0c06222b63760
 +F src/alter.c 7603afbd61f55e7c644b8de4a42f33e58c0b7eaa
 +F src/analyze.c ab57b6763dd4c6170a20673d14882c033affd188
 +F src/attach.c a3724c64de1099d85e30751213d285752aed9505
  F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
 -F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
 -F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
 +F src/backup.c f60f0aa55d25d853ffde53d0b0370a7bb7ee41ce
 +F src/bitvec.c 3ee4c8b2c94ed3a7377256e18199e6ff5cf33f63
  F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
 -F src/btree.c f224ae877fde69d1a9d430f502edaf8502752dbe
 -F src/btree.h 68ef301795e00cdf1d3ab93abc44a43b7fe771e0
 +F src/btree.c 7bb920c473c277380fcb3e8a8ee28ce1a48e0abc
 +F src/btree.h a5008b9afe56e8e54ade6c436a910f112defcca9
  F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
 -F src/build.c 31af80bba31ac159967951ef58f3144cc7db9d70
 -F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261
 -F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
 +F src/build.c 6661513c8f90a23d44ed5e5ada7ea40fac6b6b77
 +F src/callback.c 2e76147783386374bf01b227f752c81ec872d730
 +F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
  F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
 -F src/date.c 997651e3ee6c2818fbf7fcdb7156cef9eb3ece20
 -F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
 -F src/delete.c 86e3940d07fe69a40270c2aaf6ca6c7adf19246c
 -F src/expr.c df0d7c3230d59abd679da22ff5ce4cfd0e3a0e63
 +F src/date.c 0b73e681c11fca867fec554750c07fe0d4e417c1
 +F src/dbstat.c c845548d4346e606e2f2b7d2e714ace2b8a7dd1b
 +F src/delete.c eeac28b3d3d88e3541bdf93e91ea7492a7b67842
 +F src/expr.c 9adb58153f6e943b703d43e9a1f67f77b5a75721
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
- F src/fkey.c 08edad1fce30f761f14b3997e89bad58f9f7f4e0
 -F src/fkey.c 3fd2e17526d8586fdeafa376672c9303b7e35e7f
 -F src/func.c ba6c03f9e440f5693086c08ee88e6e60212b3504
 -F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260
++F src/fkey.c a842533c411b9aef63a2814bbdc24f8a21e14cd8
 +F src/func.c 552d300265aed09eea21f68ac742a440550c0062
 +F src/global.c ded7b97efd16efda5062b65e857198e46c40e652
  F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
  F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
@@@ -660,11 -656,11 +660,11 @@@ F test/fkey2.test f3d27ecba480a348c3289
  F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49
  F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
  F test/fkey5.test 5a373303f201ac03c22ba1ef17a733d3f56e611a
- F test/fkey6.test 6697550baa38505c9952eff130ab26a2d156c0cc
+ F test/fkey6.test d078a1e323a740062bed38df32b8a736fd320dc0
  F test/fkey7.test 72e915890ee4a005daaf3002cb208e8fe973ac13
 -F test/fkey8.test 8f08203458321e6c19a263829de4cfc936274ab0
 +F test/fkey8.test 7bd1dd0174a0e29a90c62c517b9e2a410a0b345d
  F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
 -F test/fordelete.test ba12ec1d27cc34a4c23db4446029126d773f3849
 +F test/fordelete.test eb93a2f34137bb87bdab88fcab06c0bd92719aff
  F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
  F test/fts-9fd058691.test 78b887e30ae6816df0e1fed6259de4b5a64ad33c
  F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7
@@@ -1448,9 -1438,12 +1448,9 @@@ F tool/varint.c 5d94cb5003db9dbbcbcc5df
  F tool/vdbe-compress.tcl 5926c71f9c12d2ab73ef35c29376e756eb68361c
  F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 -F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 +F tool/warnings.sh a98af506df552f3b3c0d904f94e4cdc4e1a6d598
  F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P 631023dd9aa19cd8d92d712941d58e7148821995 bf46179d4484376909dce40ffcc06fecb19b3544
- R 7e6dc514e3703b1055f28159276cc00f
- U drh
- Z d59a306a1e57a2c5fa67f4c507e15fb8
 -P 36cb3d6e274a06a78693ca506feaad0b14bde11d
 -R f0ee48a1a8d6b1b8328a4821e1589857
 -T *branch * disable-restrict
 -T *sym-disable-restrict *
 -T -sym-sessions *
++P b86590043e17705ada90562cf30f69b3e3ef65a4 82470d1c3a41221c78bcdd402b2219c4c21c43af
++R ed4175ea9b6a35a3a633e24a66e7650f
+ U dan
 -Z 284a240298ca9699332d11236aa182a9
++Z 25048b6cbead70238ee6379efe484cce
diff --cc manifest.uuid
index fa6b7d256f8c0ccad5486f48992746afa359a6ed,f82434f679e548fd8813a101bc7efac70a391dab..e3bf0b26096b4c858d3792b8c889102dd85ec7b1
@@@ -1,1 -1,1 +1,1 @@@
- b86590043e17705ada90562cf30f69b3e3ef65a4
 -82470d1c3a41221c78bcdd402b2219c4c21c43af
++8fea1166016c659ece83e0045bc348f478a9ba6a
diff --cc src/fkey.c
index 38fd4f756b79f3b4ca6709385b7ea2c9320ff7fc,8ad6cfbe785f10f4257bf4d096d522b27f62fa67..97eba1ddd7273bbf95cb30c546b0d13a34690526
@@@ -1163,8 -1163,12 +1163,11 @@@ static Trigger *fkActionTrigger
  
    action = pFKey->aAction[iAction];
    pTrigger = pFKey->apTrigger[iAction];
+   if( (db->flags & SQLITE_DeferFKs) && action==OE_Restrict ){
+     return 0;
+   }
  
    if( action!=OE_None && !pTrigger ){
 -    u8 enableLookaside;           /* Copy of db->lookaside.bEnabled */
      char const *zFrom;            /* Name of child table */
      int nFrom;                    /* Length in bytes of zFrom */
      Index *pIdx = 0;              /* Parent key index for this FK */