]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not delete tables with the same name when dropping triggers.
authordrh <drh@noemail.net>
Sat, 16 Aug 2003 12:37:51 +0000 (12:37 +0000)
committerdrh <drh@noemail.net>
Sat, 16 Aug 2003 12:37:51 +0000 (12:37 +0000)
Ticket #430. (CVS 1074)

FossilOrigin-Name: ef58f163b08d13f8e9b69459bd83e0bf9d5b404b

manifest
manifest.uuid
src/trigger.c
src/vdbe.c
test/trigger1.test

index 24e9d4b1464e3b0671cd7140357d554c06296afe..5caa282c3cf71f15124f5fe563c212786fa769d6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -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)
-D 2003-08-15T13:24:52
+C Do\snot\sdelete\stables\swith\sthe\ssame\sname\swhen\sdropping\striggers.\nTicket\s#430.\s(CVS\s1074)
+D 2003-08-16T12:37:52
 F Makefile.in 9ad23ed4ca97f9670c4496432e3fbd4b3760ebde
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -55,11 +55,11 @@ F src/test2.c 5014337d8576b731cce5b5a14bec4f0daf432700
 F src/test3.c 30985ebdfaf3ee1462a9b0652d3efbdc8d9798f5
 F src/threadtest.c d641a5219e718e18a1a80a50eb9bb549f451f42e
 F src/tokenize.c 2ba93fe10d5f57f0cc20b07417c3244a30c324b3
-F src/trigger.c 6ff205aaac4869e402d9902e528e1d22a85de14c
+F src/trigger.c 474581eaab388233df01bb019e558af2965decbf
 F src/update.c 24260b4fda00c9726d27699a0561d53c0dccc397
 F src/util.c 9ab0f573d31ad8c3cf1fcb6bef7a6299e09463fa
 F src/vacuum.c e4724eade07e4cf8897060a8cf632dbd92408eeb
-F src/vdbe.c 779fa3b15148161282a71241ff9733a54a8b0648
+F src/vdbe.c fb7f2fc00cd3400ca7e7b10b2b6cc692dfa8c59b
 F src/vdbe.h d853ed6cc4727fa9e8ace6187c55afcf817041dd
 F src/where.c 83b2a2d26d5c3bea33457a83e541bb1dcf7b1248
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
@@ -121,7 +121,7 @@ F test/tclsqlite.test d9bdfc0afca9ee605c50ecb39e94ae4dea8c222b
 F test/temptable.test c82bd6f800f10e8cf96921af6315e5f1c21e2692
 F test/tester.tcl 2671536d3650c29e7c105219f277568b0884cb58
 F test/trans.test 75e7a171b5d2d94ee56766459113e2ad0e5f809d
-F test/trigger1.test 6efd402da3b74e2d9e6a42b8a97413575fbf48f6
+F test/trigger1.test 9f82134e5afad3158b0892c088fa5a8d79d56236
 F test/trigger2.test 22aa0519ae18cf83568c7fba7b8cee893dd6b824
 F test/trigger3.test a95ccace88291449f5eae7139ec438a42f90654d
 F test/trigger4.test 542afce45774e8f8e1130b96b8675f414d6e4bd8
@@ -168,7 +168,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
 F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
-P 17bdfeb284880d82cd546e6c191c3a37121ec861
-R 99126044d381fca63089f0ab608b861d
+P 3563e9cf9d6b20f09e92deb21fdda93bcd8fb583
+R 2e87b58b5a40574a4f4655a00aae49e0
 U drh
-Z ffa6c41bb25f99b70e59810bf367fde2
+Z a19c702b91baa7a5eaffe7897fd8fbab
index cf5cbdc27cb286bd31bc6beb241760874e7e4d57..c3fc7d3d3c04661d27f88ff86289b319fe791d93 100644 (file)
@@ -1 +1 @@
-3563e9cf9d6b20f09e92deb21fdda93bcd8fb583
\ No newline at end of file
+ef58f163b08d13f8e9b69459bd83e0bf9d5b404b
\ No newline at end of file
index 97891b2cb92d48b8ab5a07946b2ff4f7068daf1e..7e90de877cb07da6d4f26d4738f8ff4446b295bd 100644 (file)
@@ -450,14 +450,15 @@ void sqliteDropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){
   if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){
     int base;
     static VdbeOp dropTrigger[] = {
-      { OP_Rewind,     0, ADDR(8),  0},
+      { OP_Rewind,     0, ADDR(9),  0},
       { OP_String,     0, 0,        0}, /* 1 */
-      { OP_MemStore,   1, 1,        0},
-      { OP_MemLoad,    1, 0,        0}, /* 3 */
       { 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_Next,       0, ADDR(3),  0}, /* 7 */
+      { OP_Next,       0, ADDR(1),  0}, /* 8 */
     };
 
     sqliteBeginWriteOperation(pParse, 0, 0);
index d6739dddb479246550ee81f6e1d3f6ed22da6c22..3ea8f213e3f7dcd7b73d053fcf8a72743b05b51f 100644 (file)
@@ -36,7 +36,7 @@
 ** in this file for details.  If in doubt, do not deviate from existing
 ** 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 "os.h"
@@ -1845,7 +1845,7 @@ case OP_Pull: {
   tz = zStack[from];
   Deephemeralize(p, to);
   for(i=from; i<to; i++){
-    Deephemeralize(p, i);
+    Deephemeralize(p, i+1);
     aStack[i] = aStack[i+1];
     assert( (aStack[i].flags & STK_Ephem)==0 );
     if( aStack[i].flags & (STK_Dyn|STK_Static) ){
index cc53cec1f15cdc6932f1ec1cca029c26ef919fd3..0c93e47851a95f10b028dad7141692dc59593395 100644 (file)
@@ -309,4 +309,47 @@ do_test trigger-4.4 {
 
 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