]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix some problems similar to #2832, but caused by triggers instead of an OR REPLACE...
authordanielk1977 <danielk1977@noemail.net>
Wed, 12 Dec 2007 16:06:23 +0000 (16:06 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 12 Dec 2007 16:06:23 +0000 (16:06 +0000)
FossilOrigin-Name: ee98ae17187296f7b0181c3d4d2b942d5cd4bc8f

manifest
manifest.uuid
src/delete.c
src/update.c
test/tkt2832.test

index 586dfb438013a130762daf71fd0a0de6d5fdfbde..1e5fa70eeb97995cf602a5b3db748bab701e0225 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Test\sfile\scontaining\sminimal\sexample\sof\sbug\s#2832.\s(CVS\s4614)
-D 2007-12-12T14:46:58
+C Fix\ssome\sproblems\ssimilar\sto\s#2832,\sbut\scaused\sby\striggers\sinstead\sof\san\sOR\sREPLACE\sclause.\s(CVS\s4615)
+D 2007-12-12T16:06:23
 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
 F Makefile.in 0590398f62fc2c456ff4c45e9741f5a718b7e2ac
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -90,7 +90,7 @@ F src/build.c 580561a0d9e070ff2741f3b115cae51c1ef08260
 F src/callback.c 77b302b0d41468dcda78c70e706e5b84577f0fa0
 F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131
 F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6
-F src/delete.c 034b87768c4135a22038a86a205f9d2d5f68a143
+F src/delete.c 889a3aacc81b68505b68d5e6b8872313dda3bc33
 F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
 F src/expr.c 7c8e3295ddeb835ed081b8573caaf8c3fd7c9f9c
 F src/func.c 9c87ddf907e72ac1990146ff2d68dce21d68b419
@@ -164,7 +164,7 @@ F src/test_tclvar.c b2d1115e4d489179d3f029e765211b2ad527ba59
 F src/test_thread.c a98d69cae883e53d3686fc25889a5fa5f51439f8
 F src/tokenize.c 67e42600ab34f976f2b1288c499ad6c98d652f0e
 F src/trigger.c 66695e1375b969ea41a38dec9f40ea28bb0ac767
-F src/update.c e773be79b616532bbc093c2f02564ca1ee803308
+F src/update.c 57c07b63410cdd3d14888e33439aa1955a3514c1
 F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
 F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
 F src/vacuum.c 25ffbd766f25bca099ead1c1e11f5528c86102b8
@@ -479,7 +479,7 @@ F test/tkt2767.test 6b02308d553d194f329a469bf5c157fe724738d4
 F test/tkt2817.test 709a2201a5590bf56cb97f6fb168a62282203fd1
 F test/tkt2820.test 017fdee33aaef7abc092beab6088816f1942304b
 F test/tkt2822.test 09033348a14f5a5729724b0db7c1687cfc876b9f
-F test/tkt2832.test c16f3f7f49bdb4d33a72a5165730e0e7ed41d34f
+F test/tkt2832.test 536bec5de015651eee160325619de3227556ab3c
 F test/trace.test 75ffc1b992c780d054748a656e3e7fd674f18567
 F test/trans.test b73289992b46d38d9479ecc4fdc03d8edb2413dc
 F test/trigger1.test 7c13f39ca36f529bf856e05c7d004fc0531d48b4
@@ -599,7 +599,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 18e10f816782ca7842f651e9b2a23da1aab645c8
-R 17fe7dbdc7be62239db13f722fc18035
+P ed2e61a9fab6a9a102031c10bc6f89e78b4c7447
+R 836a6292677e4b1390bbceac9e74ab95
 U danielk1977
-Z 2a4a2427e0221a3ee3b043134f983d09
+Z cf94711319107941195920b73881749c
index fde31910621763ace121fd217bc37840aa6f4e6f..0d8af0f3f4ef6d99d2cee7c8cfbe97d7b4c66038 100644 (file)
@@ -1 +1 @@
-ed2e61a9fab6a9a102031c10bc6f89e78b4c7447
\ No newline at end of file
+ee98ae17187296f7b0181c3d4d2b942d5cd4bc8f
\ No newline at end of file
index 187d1efc65d3d488b6ab4dc9f2cd7852cea7c15d..6b580a3d34603cf36a4c2a78889a9082346acbea 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** in order to generate code for DELETE FROM statements.
 **
-** $Id: delete.c,v 1.131 2007/11/11 18:36:34 drh Exp $
+** $Id: delete.c,v 1.132 2007/12/12 16:06:23 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 
@@ -283,7 +283,7 @@ void sqlite3DeleteFrom(
       if( !isView ){
         sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
       }
-      sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
+      sqlite3VdbeAddOp(v, OP_NotExists, iCur, addr);
       sqlite3VdbeAddOp(v, OP_Rowid, iCur, 0);
       sqlite3VdbeAddOp(v, OP_RowData, iCur, 0);
       sqlite3VdbeAddOp(v, OP_Insert, oldIdx, 0);
index 019a37f947a8c2e55553840d74afcac1cd45f014..bf5a5caac0acf7272d793a2ed747cfd32f4050ae 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle UPDATE statements.
 **
-** $Id: update.c,v 1.143 2007/12/12 12:25:22 drh Exp $
+** $Id: update.c,v 1.144 2007/12/12 16:06:23 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 
@@ -340,7 +340,7 @@ void sqlite3Update(
       */
       sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
     }
-    sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
+    sqlite3VdbeAddOp(v, OP_NotExists, iCur, addr);
 
     /* Generate the OLD table
     */
index c61bd24fe8361632e247f9ba17fb6721ff0fa47b..39ae8c8f11356f3137f6c03bf334c4f650eb72fe 100644 (file)
 #
 # This file is to test that ticket #2832 has been fixed.
 #
-# $Id: tkt2832.test,v 1.1 2007/12/12 14:46:58 danielk1977 Exp $
+# $Id: tkt2832.test,v 1.2 2007/12/12 16:06:23 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 
-do_test tkt2832-2.1 {
+do_test tkt2832-1.1 {
   execsql {
     CREATE TABLE t1(a PRIMARY KEY);
     INSERT INTO t1 VALUES(2);
@@ -25,12 +25,43 @@ do_test tkt2832-2.1 {
     INSERT INTO t1 VALUES(3);
   }
 } {}
-do_test tkt2832-2.2 {
+do_test tkt2832-1.2 {
   execsql {
     UPDATE OR REPLACE t1 SET a = 1;
     SELECT * FROM t1;
   }
 } {1}
 
+do_test tkt2832-2.1 {
+  execsql {
+    CREATE TABLE t2(a, b);
+    CREATE TRIGGER t2_t AFTER UPDATE ON t2 BEGIN
+      DELETE FROM t2 WHERE a = new.a + 1;
+    END;
+    INSERT INTO t2 VALUES(1, 2);
+    INSERT INTO t2 VALUES(2, 3);
+  }
+} {}
+do_test tkt2832-2.2 {
+  execsql { 
+    UPDATE t2 SET b = 5 
+  }
+} {}
+
+do_test tkt2832-3.1 {
+  execsql {
+    CREATE TABLE t3(a, b);
+    CREATE TRIGGER t3_t AFTER DELETE ON t3 BEGIN
+      DELETE FROM t3 WHERE a = old.a + 1;
+    END;
+    INSERT INTO t3 VALUES(1, 2);
+    INSERT INTO t3 VALUES(2, 3);
+  }
+} {}
+do_test tkt2832-3.2 {
+  explain { DELETE FROM t3 WHERE 1 }
+  execsql { DELETE FROM t3 WHERE 1 }
+} {}
+
 finish_test