When coding a trigger, assume that the "oldmask" requires all columns until

we know otherwise.  That pessimistic assumption assures that all necessary
parameters are available on a cascading delete trigger.
Ticket [e25d9ea771f]

FossilOrigin-Name: 03e464be51a1c36fc02cf31178ae91f736dfddd6
This commit is contained in:
drh 2009-09-17 00:41:19 +00:00
parent 3492dd71dd
commit 3991bb0dee
4 changed files with 38 additions and 11 deletions

View File

@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
C Make\ssure\ssufficient\sspace\sis\sallocated\sfor\sat\sleast\sone\sVDBE\scursor\swhen\nautoincrement\sis\sused.\s\sTicket\s[a696379c1f088].
D 2009-09-14T23:47:25
C When\scoding\sa\strigger,\sassume\sthat\sthe\s"oldmask"\srequires\sall\scolumns\suntil\nwe\sknow\sotherwise.\s\sThat\spessimistic\sassumption\sassures\sthat\sall\snecessary\nparameters\sare\savailable\son\sa\scascading\sdelete\strigger.\nTicket\s[e25d9ea771f]
D 2009-09-17T00:41:20
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in e360e1214027efbf62cf18ac80ec646d4081c272
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -203,7 +203,7 @@ F src/test_tclvar.c 9e42fa59d3d2f064b7ab8628e7ab2dc8a9fe93d4
F src/test_thread.c b8a1ab7ca1a632f18e8a361880d5d65eeea08eac
F src/test_wsd.c 3ae5101de6cbfda2720152ab659ea84079719241
F src/tokenize.c af8a56e6a50c5042fc305bfa796275e9bf26ff2b
F src/trigger.c 054c08339b3471c785f1cf041ed878a425850e33
F src/trigger.c 45a2f8a80ea0bdf2b0c35c26c36024ccee3e4835
F src/update.c e5f9f75aad9fd5c11a3f95a10e865df9a3fa9015
F src/utf.c 99cf927eabb104621ba889ac0dd075fc1657ad30
F src/util.c 59d4e9456bf1fe581f415a783fa0cee6115c8f35
@ -685,7 +685,7 @@ F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4
F test/trigger9.test 5b0789f1c5c4600961f8e68511b825b87be53e31
F test/triggerA.test 0718ad2d9bfef27c7af00e636df79bee6b988da7
F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe
F test/triggerC.test 1ee7e3a78aec7b58eb040d0ae0a320e5bab35262
F test/triggerC.test 4b1c11936b717527f321a7509c562dee7a19a55f
F test/types.test 9a825ec8eea4e965d7113b74c76a78bb5240f2ac
F test/types2.test 3555aacf8ed8dc883356e59efc314707e6247a84
F test/types3.test a0f66bf12f80fad89493535474f7a6d16fa58150
@ -753,14 +753,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P f8c02b2b720e26a9ca7e35cb8015888fae538351
R 350133137c3f0af4b0c84284f6d8572f
P 2b2a1ef74e24857b8d18f6370894588fc2aa5ebb
R 9a7876e95b7e3028c3294666c8d5f084
U drh
Z b500a4abe8614a669e79470cf20f906b
Z a60c28ee99e48e9334fd675fa369d09c
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFKrtYRoxKgR168RlERAgrrAKCErouAmMYoH9zkzTR/jOkT6XOJDACfZKv+
s9+4YOgaHtWs5h7ziUH6YfM=
=Z6jj
iD8DBQFKsYW1oxKgR168RlERAjObAJ4uhjAuQKCus/CBsGhTXVE95h0SiQCeNQRt
3TI/iRBjobltvxwvLDAEUAs=
=KUZ6
-----END PGP SIGNATURE-----

View File

@ -1 +1 @@
2b2a1ef74e24857b8d18f6370894588fc2aa5ebb
03e464be51a1c36fc02cf31178ae91f736dfddd6

View File

@ -809,6 +809,7 @@ static TriggerPrg *codeRowTrigger(
pProgram->nRef = 1;
pPrg->pTrigger = pTrigger;
pPrg->orconf = orconf;
pPrg->oldmask = 0xffffffff;
/* Allocate and populate a new Parse context to use for coding the
** trigger sub-program. */

View File

@ -761,5 +761,31 @@ do_test triggerC-7.9 {
}
} {2 3 4 3 5 6 8 1 2}
# Ticket [e25d9ea771febc9c311928c1c01c3163dcb26643]
#
do_test triggerC-9.1 {
execsql {
CREATE TABLE t9(a,b);
CREATE INDEX t9b ON t9(b);
INSERT INTO t9 VALUES(1,0);
INSERT INTO t9 VALUES(2,1);
INSERT INTO t9 VALUES(3,2);
INSERT INTO t9 SELECT a+3, a+2 FROM t9;
INSERT INTO t9 SELECT a+6, a+5 FROM t9;
SELECT a FROM t9 ORDER BY a;
}
} {1 2 3 4 5 6 7 8 9 10 11 12}
do_test triggerC-9.2 {
execsql {
CREATE TRIGGER t9r1 AFTER DELETE ON t9 BEGIN
DELETE FROM t9 WHERE b=old.a;
END;
DELETE FROM t9 WHERE b=4;
SELECT a FROM t9 ORDER BY a;
}
} {1 2 3 4}
finish_test