1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-05 15:55:57 +03:00

Do not delete tables with the same name when dropping triggers.

Ticket #430. (CVS 1074)

FossilOrigin-Name: ef58f163b08d13f8e9b69459bd83e0bf9d5b404b
This commit is contained in:
drh
2003-08-16 12:37:51 +00:00
parent 8e18bac793
commit 9b1b01bb76
5 changed files with 60 additions and 16 deletions

View File

@@ -1,5 +1,5 @@
C Fix\sa\ssegfault\sthat\soccurs\sin\sthe\sVACUUM\scommand\sif\srun\son\san\sempty\sdatabase\nwith\sthe\sEMPTY_RESULT_CALLBACKS\spragma\senabled.\s\sTicket\s#427.\s(CVS\s1073) C Do\snot\sdelete\stables\swith\sthe\ssame\sname\swhen\sdropping\striggers.\nTicket\s#430.\s(CVS\s1074)
D 2003-08-15T13:24:52 D 2003-08-16T12:37:52
F Makefile.in 9ad23ed4ca97f9670c4496432e3fbd4b3760ebde F Makefile.in 9ad23ed4ca97f9670c4496432e3fbd4b3760ebde
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -55,11 +55,11 @@ F src/test2.c 5014337d8576b731cce5b5a14bec4f0daf432700
F src/test3.c 30985ebdfaf3ee1462a9b0652d3efbdc8d9798f5 F src/test3.c 30985ebdfaf3ee1462a9b0652d3efbdc8d9798f5
F src/threadtest.c d641a5219e718e18a1a80a50eb9bb549f451f42e F src/threadtest.c d641a5219e718e18a1a80a50eb9bb549f451f42e
F src/tokenize.c 2ba93fe10d5f57f0cc20b07417c3244a30c324b3 F src/tokenize.c 2ba93fe10d5f57f0cc20b07417c3244a30c324b3
F src/trigger.c 6ff205aaac4869e402d9902e528e1d22a85de14c F src/trigger.c 474581eaab388233df01bb019e558af2965decbf
F src/update.c 24260b4fda00c9726d27699a0561d53c0dccc397 F src/update.c 24260b4fda00c9726d27699a0561d53c0dccc397
F src/util.c 9ab0f573d31ad8c3cf1fcb6bef7a6299e09463fa F src/util.c 9ab0f573d31ad8c3cf1fcb6bef7a6299e09463fa
F src/vacuum.c e4724eade07e4cf8897060a8cf632dbd92408eeb F src/vacuum.c e4724eade07e4cf8897060a8cf632dbd92408eeb
F src/vdbe.c 779fa3b15148161282a71241ff9733a54a8b0648 F src/vdbe.c fb7f2fc00cd3400ca7e7b10b2b6cc692dfa8c59b
F src/vdbe.h d853ed6cc4727fa9e8ace6187c55afcf817041dd F src/vdbe.h d853ed6cc4727fa9e8ace6187c55afcf817041dd
F src/where.c 83b2a2d26d5c3bea33457a83e541bb1dcf7b1248 F src/where.c 83b2a2d26d5c3bea33457a83e541bb1dcf7b1248
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
@@ -121,7 +121,7 @@ F test/tclsqlite.test d9bdfc0afca9ee605c50ecb39e94ae4dea8c222b
F test/temptable.test c82bd6f800f10e8cf96921af6315e5f1c21e2692 F test/temptable.test c82bd6f800f10e8cf96921af6315e5f1c21e2692
F test/tester.tcl 2671536d3650c29e7c105219f277568b0884cb58 F test/tester.tcl 2671536d3650c29e7c105219f277568b0884cb58
F test/trans.test 75e7a171b5d2d94ee56766459113e2ad0e5f809d F test/trans.test 75e7a171b5d2d94ee56766459113e2ad0e5f809d
F test/trigger1.test 6efd402da3b74e2d9e6a42b8a97413575fbf48f6 F test/trigger1.test 9f82134e5afad3158b0892c088fa5a8d79d56236
F test/trigger2.test 22aa0519ae18cf83568c7fba7b8cee893dd6b824 F test/trigger2.test 22aa0519ae18cf83568c7fba7b8cee893dd6b824
F test/trigger3.test a95ccace88291449f5eae7139ec438a42f90654d F test/trigger3.test a95ccace88291449f5eae7139ec438a42f90654d
F test/trigger4.test 542afce45774e8f8e1130b96b8675f414d6e4bd8 F test/trigger4.test 542afce45774e8f8e1130b96b8675f414d6e4bd8
@@ -168,7 +168,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331 F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
P 17bdfeb284880d82cd546e6c191c3a37121ec861 P 3563e9cf9d6b20f09e92deb21fdda93bcd8fb583
R 99126044d381fca63089f0ab608b861d R 2e87b58b5a40574a4f4655a00aae49e0
U drh U drh
Z ffa6c41bb25f99b70e59810bf367fde2 Z a19c702b91baa7a5eaffe7897fd8fbab

View File

@@ -1 +1 @@
3563e9cf9d6b20f09e92deb21fdda93bcd8fb583 ef58f163b08d13f8e9b69459bd83e0bf9d5b404b

View File

@@ -450,14 +450,15 @@ void sqliteDropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){
if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){ if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){
int base; int base;
static VdbeOp dropTrigger[] = { static VdbeOp dropTrigger[] = {
{ OP_Rewind, 0, ADDR(8), 0}, { OP_Rewind, 0, ADDR(9), 0},
{ OP_String, 0, 0, 0}, /* 1 */ { OP_String, 0, 0, 0}, /* 1 */
{ OP_MemStore, 1, 1, 0},
{ OP_MemLoad, 1, 0, 0}, /* 3 */
{ OP_Column, 0, 1, 0}, { OP_Column, 0, 1, 0},
{ OP_Ne, 0, ADDR(7), 0}, { OP_Ne, 0, ADDR(8), 0},
{ OP_String, 0, 0, "trigger"},
{ OP_Column, 0, 0, 0},
{ OP_Ne, 0, ADDR(8), 0},
{ OP_Delete, 0, 0, 0}, { OP_Delete, 0, 0, 0},
{ OP_Next, 0, ADDR(3), 0}, /* 7 */ { OP_Next, 0, ADDR(1), 0}, /* 8 */
}; };
sqliteBeginWriteOperation(pParse, 0, 0); sqliteBeginWriteOperation(pParse, 0, 0);

View File

@@ -36,7 +36,7 @@
** in this file for details. If in doubt, do not deviate from existing ** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code. ** commenting and indentation practices when changing or adding code.
** **
** $Id: vdbe.c,v 1.235 2003/07/27 17:16:07 drh Exp $ ** $Id: vdbe.c,v 1.236 2003/08/16 12:37:52 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include "os.h" #include "os.h"
@@ -1845,7 +1845,7 @@ case OP_Pull: {
tz = zStack[from]; tz = zStack[from];
Deephemeralize(p, to); Deephemeralize(p, to);
for(i=from; i<to; i++){ for(i=from; i<to; i++){
Deephemeralize(p, i); Deephemeralize(p, i+1);
aStack[i] = aStack[i+1]; aStack[i] = aStack[i+1];
assert( (aStack[i].flags & STK_Ephem)==0 ); assert( (aStack[i].flags & STK_Ephem)==0 );
if( aStack[i].flags & (STK_Dyn|STK_Static) ){ if( aStack[i].flags & (STK_Dyn|STK_Static) ){

View File

@@ -309,4 +309,47 @@ do_test trigger-4.4 {
integrity_check trigger-5.1 integrity_check trigger-5.1
# Create a trigger with the same name as a table. Make sure the
# trigger works. Then drop the trigger. Make sure the table is
# still there.
#
do_test trigger-6.1 {
execsql {SELECT type, name FROM sqlite_master}
} {view v1 table t2}
do_test trigger-6.2 {
execsql {
CREATE TRIGGER t2 BEFORE DELETE ON t2 BEGIN
SELECT RAISE(ABORT,'deletes are not allows');
END;
SELECT type, name FROM sqlite_master;
}
} {view v1 table t2 trigger t2}
do_test trigger-6.3 {
catchsql {DELETE FROM t2}
} {1 {deletes are not allows}}
do_test trigger-6.4 {
execsql {SELECT * FROM t2}
} {3 4 7 8}
do_test trigger-6.5 {
db close
sqlite db test.db
execsql {SELECT type, name FROM sqlite_master}
} {view v1 table t2 trigger t2}
do_test trigger-6.6 {
execsql {
DROP TRIGGER t2;
SELECT type, name FROM sqlite_master;
}
} {view v1 table t2}
do_test trigger-6.7 {
execsql {SELECT * FROM t2}
} {3 4 7 8}
do_test trigger-6.8 {
db close
sqlite db test.db
execsql {SELECT * FROM t2}
} {3 4 7 8}
integrity_check trigger-7.1
finish_test finish_test