mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Previous check-in was not correct. This is a better fix for the OP_Once
problem of ticket [06796225f59c057cd120f1]. FossilOrigin-Name: 8194dd2814b0b3f8cffbcb16306f55aabf1c1508b9d27fa806f92f0e6ecd7631
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Fix\sthe\sOP_Once\sopcode\sso\sthat\sit\sworks\scorrectly\sfor\srecursive\striggers.\nTicket\s[06796225f59c057cd120f1].
|
C Previous\scheck-in\swas\snot\scorrect.\s\sThis\sis\sa\sbetter\sfix\sfor\sthe\sOP_Once\nproblem\sof\sticket\s[06796225f59c057cd120f1].
|
||||||
D 2017-03-24T17:59:56.312
|
D 2017-03-24T18:38:41.822
|
||||||
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 1faf9f06aadc9284c212dea7bbc7c0dea7e8337f0287c81001eff500912c790a
|
F Makefile.msc 1faf9f06aadc9284c212dea7bbc7c0dea7e8337f0287c81001eff500912c790a
|
||||||
@@ -468,7 +468,7 @@ F src/update.c 456d4a4656f8a03c2abc88a51b19172197400e58
|
|||||||
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
||||||
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
|
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
|
||||||
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
|
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
|
||||||
F src/vdbe.c e59bd3416627d11f76da18ed5a85e93b3c6172892a9d44371d05a7c7183d7b94
|
F src/vdbe.c f1acf5744cef62cbfd0b503d84289f840b6cdc980ac47b0d9632dfdb89cc79eb
|
||||||
F src/vdbe.h caa5346d52bae2a3c8c1dcfa60a7a4dc878a9e3865cb8239da55808b316c8158
|
F src/vdbe.h caa5346d52bae2a3c8c1dcfa60a7a4dc878a9e3865cb8239da55808b316c8158
|
||||||
F src/vdbeInt.h 5db089ce18c4feff8820ec6e4cac2d2c82e03d4b1d96f10a6e43832147b8dffe
|
F src/vdbeInt.h 5db089ce18c4feff8820ec6e4cac2d2c82e03d4b1d96f10a6e43832147b8dffe
|
||||||
F src/vdbeapi.c 5b08d82592bcff4470601fe78aaabebd50837860
|
F src/vdbeapi.c 5b08d82592bcff4470601fe78aaabebd50837860
|
||||||
@@ -1360,7 +1360,7 @@ F test/triggerC.test 302d8995f5ffe63bbc15053abb3ef7a39cf5a092
|
|||||||
F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650
|
F test/triggerD.test 8e7f3921a92a5797d472732108109e44575fa650
|
||||||
F test/triggerE.test 15fa63f1097db1f83dd62d121616006978063d1f
|
F test/triggerE.test 15fa63f1097db1f83dd62d121616006978063d1f
|
||||||
F test/triggerF.test 55b1eb13433997faac3a4948c1d8252f6c8c636b
|
F test/triggerF.test 55b1eb13433997faac3a4948c1d8252f6c8c636b
|
||||||
F test/triggerG.test 6eb0dbb4ce35df990034e54951e882c69ffbc3462e9c33a021edf66464f8b91b
|
F test/triggerG.test 175cafdc6399d85231a09e82e051b0e45a2fd1f23dd08ae715bc359716149ab6
|
||||||
F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1
|
F test/tt3_checkpoint.c 9e75cf7c1c364f52e1c47fd0f14c4340a9db0fe1
|
||||||
F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
|
F test/tt3_index.c 39eec10a35f57672225be4d182862152896dee4a
|
||||||
F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
|
F test/tt3_lookaside1.c 0377e202c3c2a50d688cb65ba203afeda6fafeb9
|
||||||
@@ -1569,7 +1569,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P c5441d2df2526723f72610cc14dd243223663979e67ecdd76fe06fcd366f2b29
|
P 2556014514f36808e6d18b25722eae0daeeb8fbb5d18af13a9698ea6c6db1679
|
||||||
R 06e33989e2f9f8999f70d02209e735fb
|
R 0d4df4a8a9e2796f99d4dab5fea97642
|
||||||
U drh
|
U drh
|
||||||
Z d9ba825914c037a52e49ea53bb54865f
|
Z 19353cf9e153b27d983c51cfd380c21a
|
||||||
|
@@ -1 +1 @@
|
|||||||
2556014514f36808e6d18b25722eae0daeeb8fbb5d18af13a9698ea6c6db1679
|
8194dd2814b0b3f8cffbcb16306f55aabf1c1508b9d27fa806f92f0e6ecd7631
|
@@ -2354,9 +2354,9 @@ case OP_Once: { /* jump */
|
|||||||
iAddr = (int)(pOp - p->aOp);
|
iAddr = (int)(pOp - p->aOp);
|
||||||
if( (p->pFrame->aOnce[iAddr/8] & (1<<(iAddr & 7)))!=0 ){
|
if( (p->pFrame->aOnce[iAddr/8] & (1<<(iAddr & 7)))!=0 ){
|
||||||
VdbeBranchTaken(1, 2);
|
VdbeBranchTaken(1, 2);
|
||||||
p->pFrame->aOnce[iAddr/8] |= 1<<(iAddr & 7);
|
|
||||||
goto jump_to_p2;
|
goto jump_to_p2;
|
||||||
}
|
}
|
||||||
|
p->pFrame->aOnce[iAddr/8] |= 1<<(iAddr & 7);
|
||||||
}else{
|
}else{
|
||||||
if( p->aOp[0].p1==pOp->p1 ){
|
if( p->aOp[0].p1==pOp->p1 ){
|
||||||
VdbeBranchTaken(1, 2);
|
VdbeBranchTaken(1, 2);
|
||||||
@@ -5943,6 +5943,7 @@ case OP_Program: { /* jump */
|
|||||||
p->nCursor = (u16)pFrame->nChildCsr;
|
p->nCursor = (u16)pFrame->nChildCsr;
|
||||||
p->apCsr = (VdbeCursor **)&aMem[p->nMem];
|
p->apCsr = (VdbeCursor **)&aMem[p->nMem];
|
||||||
pFrame->aOnce = (u8*)&p->apCsr[pProgram->nCsr];
|
pFrame->aOnce = (u8*)&p->apCsr[pProgram->nCsr];
|
||||||
|
memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8);
|
||||||
p->aOp = aOp = pProgram->aOp;
|
p->aOp = aOp = pProgram->aOp;
|
||||||
p->nOp = pProgram->nOp;
|
p->nOp = pProgram->nOp;
|
||||||
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
||||||
|
@@ -44,4 +44,22 @@ do_execsql_test 110 {
|
|||||||
SELECT b FROM t2 ORDER BY b;
|
SELECT b FROM t2 ORDER BY b;
|
||||||
} {202 203 302 303 402 403 502 503}
|
} {202 203 302 303 402 403 502 503}
|
||||||
|
|
||||||
|
do_execsql_test 200 {
|
||||||
|
DELETE FROM t1;
|
||||||
|
INSERT INTO t1(a) VALUES(0),(2),(3),(8),(9);
|
||||||
|
DELETE FROM t2;
|
||||||
|
DELETE FROM t3;
|
||||||
|
DROP TRIGGER tr;
|
||||||
|
CREATE TRIGGER tr AFTER INSERT ON t3 BEGIN
|
||||||
|
INSERT INTO t3 SELECT new.c+1 WHERE new.c<5;
|
||||||
|
INSERT INTO t2 SELECT new.c*10000+xx.a*100+yy.a
|
||||||
|
FROM t1 AS xx, t1 AS yy
|
||||||
|
WHERE xx.a IN (1,2,3,4)
|
||||||
|
AND yy.a IN (2,3,4,5);
|
||||||
|
END;
|
||||||
|
|
||||||
|
INSERT INTO t3 VALUES(2);
|
||||||
|
SELECT b FROM t2 ORDER BY b;
|
||||||
|
} {20202 20203 20302 20303 30202 30203 30302 30303 40202 40203 40302 40303 50202 50203 50302 50303}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user