Add asserts as evidence that all FK constraints are either immediate or

deferred.

FossilOrigin-Name: 634ef4fc9f4051245b38f558bb1c733031548c2f
This commit is contained in:
drh 2009-10-12 22:30:49 +00:00
parent 9a616f5607
commit 4c4298392e
5 changed files with 19 additions and 14 deletions

View File

@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE----- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 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. C Add\sasserts\sas\sevidence\sthat\sall\sFK\sconstraints\sare\seither\simmediate\sor\ndeferred.
D 2009-10-12T20:01:50 D 2009-10-12T22:30:49
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -112,14 +112,14 @@ F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7
F src/btree.c 9c425425784c5d569bc0309c22251698ba906451 F src/btree.c 9c425425784c5d569bc0309c22251698ba906451
F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe
F src/btreeInt.h 1c86297e69380f6577e7ae67452597dd8d5c2705 F src/btreeInt.h 1c86297e69380f6577e7ae67452597dd8d5c2705
F src/build.c 1988dad2799d0421cd9fb6431fd3a1667115522e F src/build.c 3c5762687d0554ebe8844dfaddb828fcc15fe16d
F src/callback.c 10d237171472865f58fb07d515737238c9e06688 F src/callback.c 10d237171472865f58fb07d515737238c9e06688
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0 F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
F src/date.c 657ff12ca0f1195b531561afacbb38b772d16638 F src/date.c 657ff12ca0f1195b531561afacbb38b772d16638
F src/delete.c 308e300d599d2d11b838687e2cf7309d42f29a1a F src/delete.c 308e300d599d2d11b838687e2cf7309d42f29a1a
F src/expr.c c7f3f718bd5c392344ec8694a41c1824f30cf375 F src/expr.c c7f3f718bd5c392344ec8694a41c1824f30cf375
F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff
F src/fkey.c 2b79b3851b6f12104ab1d9f63566a117728926e2 F src/fkey.c 34ee2b0d60cc52f05dd6a205ce843c248096b509
F src/func.c e536218d193b8d326aab91120bc4c6f28aa2b606 F src/func.c e536218d193b8d326aab91120bc4c6f28aa2b606
F src/global.c 271952d199a8cc59d4ce840b3bbbfd2f30c8ba32 F src/global.c 271952d199a8cc59d4ce840b3bbbfd2f30c8ba32
F src/hash.c ebcaa921ffd9d86f7ea5ae16a0a29d1c871130a7 F src/hash.c ebcaa921ffd9d86f7ea5ae16a0a29d1c871130a7
@ -167,7 +167,7 @@ F src/select.c 1d0a13137532321b4364f964e46f057d271691e3
F src/shell.c 270231b3f587f1f86391b9994fdfcd5d472c3fdf F src/shell.c 270231b3f587f1f86391b9994fdfcd5d472c3fdf
F src/sqlite.h.in 8e1ccddb12b5e983d0a17e1f1477c72b0a72dd84 F src/sqlite.h.in 8e1ccddb12b5e983d0a17e1f1477c72b0a72dd84
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h 61c55f5f83c63813903f374e9b33173572f0559a F src/sqliteInt.h 44cded4d6b78fe5fb5339454c44e51c64b7d8ed8
F src/sqliteLimit.h 38b2fffcd01faeaeaadea71b2b47695a81580c8b F src/sqliteLimit.h 38b2fffcd01faeaeaadea71b2b47695a81580c8b
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76 F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
@ -759,14 +759,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 5633cb2b5b91a54e677dde76e31e319cd7d51780 P a4ab5215fed231c8e5f8714f5cadafd1209b362a
R bbf4996fcde5fed7535634c628dbe80e R 4b18d30182072a8cd3031fc782eadfe8
U drh U drh
Z ca40e99b9f3c91922320c8e8c4d2d4d4 Z ae8de04e4c5b2fdecf560180fe83fec1
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux) Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFK04sxoxKgR168RlERAmiVAJwP98j7ZksNarQBrEoSyQpXdMhFawCeNsx6 iD8DBQFK064doxKgR168RlERAlWQAJ92yqj4W/BOhV0IW1IUn+D4AqGiwgCeKY3c
Fz9yjd/luwPASc49P+Yopuk= ofWKl3KBlauHoZ3hAzBbU2Y=
=NY9x =e87L
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View File

@ -1 +1 @@
a4ab5215fed231c8e5f8714f5cadafd1209b362a 634ef4fc9f4051245b38f558bb1c733031548c2f

View File

@ -2267,7 +2267,7 @@ void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
Table *pTab; Table *pTab;
FKey *pFKey; FKey *pFKey;
if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return; 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; pFKey->isDeferred = (u8)isDeferred;
#endif #endif
} }

View File

@ -1178,7 +1178,11 @@ void sqlite3FkDelete(Table *pTab){
fkTriggerDelete(pTab->dbMem, pFKey->apTrigger[1]); fkTriggerDelete(pTab->dbMem, pFKey->apTrigger[1]);
#endif #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; pNext = pFKey->pNextFrom;
sqlite3DbFree(pTab->dbMem, pFKey); sqlite3DbFree(pTab->dbMem, pFKey);
} }

View File

@ -1289,6 +1289,7 @@ struct FKey {
FKey *pNextTo; /* Next foreign key on table named zTo */ FKey *pNextTo; /* Next foreign key on table named zTo */
FKey *pPrevTo; /* Previous foreign key on table named zTo */ FKey *pPrevTo; /* Previous foreign key on table named zTo */
int nCol; /* Number of columns in this key */ int nCol; /* Number of columns in this key */
/* EV: R-30323-21917 */
u8 isDeferred; /* True if constraint checking is deferred till COMMIT */ u8 isDeferred; /* True if constraint checking is deferred till COMMIT */
u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */ u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */
Trigger *apTrigger[2]; /* Triggers for aAction[] actions */ Trigger *apTrigger[2]; /* Triggers for aAction[] actions */