From 4c4298392e109ca67a25626f50f87715356b67b6 Mon Sep 17 00:00:00 2001 From: drh <drh@noemail.net> Date: Mon, 12 Oct 2009 22:30:49 +0000 Subject: [PATCH] Add asserts as evidence that all FK constraints are either immediate or deferred. FossilOrigin-Name: 634ef4fc9f4051245b38f558bb1c733031548c2f --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/build.c | 2 +- src/fkey.c | 6 +++++- src/sqliteInt.h | 1 + 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 21c0be2c37..871b1a258a 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C When\sprocessing\sFK\sconstraints\son\schanges\sto\sparent\stables,\smake\ssure\sthe\nnames\sof\schild\stables\sappear\scorrectly\sin\sthe\soutput\sof\sEXPLAIN\sQUERY\sPLAN. -D 2009-10-12T20:01:50 +C Add\sasserts\sas\sevidence\sthat\sall\sFK\sconstraints\sare\seither\simmediate\sor\ndeferred. +D 2009-10-12T22:30:49 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -112,14 +112,14 @@ F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7 F src/btree.c 9c425425784c5d569bc0309c22251698ba906451 F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe F src/btreeInt.h 1c86297e69380f6577e7ae67452597dd8d5c2705 -F src/build.c 1988dad2799d0421cd9fb6431fd3a1667115522e +F src/build.c 3c5762687d0554ebe8844dfaddb828fcc15fe16d F src/callback.c 10d237171472865f58fb07d515737238c9e06688 F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0 F src/date.c 657ff12ca0f1195b531561afacbb38b772d16638 F src/delete.c 308e300d599d2d11b838687e2cf7309d42f29a1a F src/expr.c c7f3f718bd5c392344ec8694a41c1824f30cf375 F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff -F src/fkey.c 2b79b3851b6f12104ab1d9f63566a117728926e2 +F src/fkey.c 34ee2b0d60cc52f05dd6a205ce843c248096b509 F src/func.c e536218d193b8d326aab91120bc4c6f28aa2b606 F src/global.c 271952d199a8cc59d4ce840b3bbbfd2f30c8ba32 F src/hash.c ebcaa921ffd9d86f7ea5ae16a0a29d1c871130a7 @@ -167,7 +167,7 @@ F src/select.c 1d0a13137532321b4364f964e46f057d271691e3 F src/shell.c 270231b3f587f1f86391b9994fdfcd5d472c3fdf F src/sqlite.h.in 8e1ccddb12b5e983d0a17e1f1477c72b0a72dd84 F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 -F src/sqliteInt.h 61c55f5f83c63813903f374e9b33173572f0559a +F src/sqliteInt.h 44cded4d6b78fe5fb5339454c44e51c64b7d8ed8 F src/sqliteLimit.h 38b2fffcd01faeaeaadea71b2b47695a81580c8b F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76 F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d @@ -759,14 +759,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 5633cb2b5b91a54e677dde76e31e319cd7d51780 -R bbf4996fcde5fed7535634c628dbe80e +P a4ab5215fed231c8e5f8714f5cadafd1209b362a +R 4b18d30182072a8cd3031fc782eadfe8 U drh -Z ca40e99b9f3c91922320c8e8c4d2d4d4 +Z ae8de04e4c5b2fdecf560180fe83fec1 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFK04sxoxKgR168RlERAmiVAJwP98j7ZksNarQBrEoSyQpXdMhFawCeNsx6 -Fz9yjd/luwPASc49P+Yopuk= -=NY9x +iD8DBQFK064doxKgR168RlERAlWQAJ92yqj4W/BOhV0IW1IUn+D4AqGiwgCeKY3c +ofWKl3KBlauHoZ3hAzBbU2Y= +=e87L -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index b6b786996b..e04631e9d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a4ab5215fed231c8e5f8714f5cadafd1209b362a \ No newline at end of file +634ef4fc9f4051245b38f558bb1c733031548c2f \ No newline at end of file diff --git a/src/build.c b/src/build.c index 215b3c0a99..7b0ea04bfc 100644 --- a/src/build.c +++ b/src/build.c @@ -2267,7 +2267,7 @@ void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){ Table *pTab; FKey *pFKey; if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return; - assert( isDeferred==0 || isDeferred==1 ); + assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */ pFKey->isDeferred = (u8)isDeferred; #endif } diff --git a/src/fkey.c b/src/fkey.c index 55d0a4f92d..8af7ea9243 100644 --- a/src/fkey.c +++ b/src/fkey.c @@ -1178,7 +1178,11 @@ void sqlite3FkDelete(Table *pTab){ fkTriggerDelete(pTab->dbMem, pFKey->apTrigger[1]); #endif - /* Delete the memory allocated for the FK structure. */ + /* EV: R-30323-21917 Each foreign key constraint in SQLite is + ** classified as either immediate or deferred. + */ + assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 ); + pNext = pFKey->pNextFrom; sqlite3DbFree(pTab->dbMem, pFKey); } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 03ff1be11d..2675f44fb1 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1289,6 +1289,7 @@ struct FKey { FKey *pNextTo; /* Next foreign key on table named zTo */ FKey *pPrevTo; /* Previous foreign key on table named zTo */ int nCol; /* Number of columns in this key */ + /* EV: R-30323-21917 */ u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ Trigger *apTrigger[2]; /* Triggers for aAction[] actions */