diff options
author | danielk1977 <danielk1977@noemail.net> | 2007-12-12 16:06:23 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2007-12-12 16:06:23 +0000 |
commit | 967573d56ac85e60c0e344372e4257d94b1585b5 (patch) | |
tree | c346a04c6ca9fc26213f1c89390e69f460a9d493 | |
parent | 2d78617d66718bd970d999a8a9fce82de794c4aa (diff) | |
download | sqlite-967573d56ac85e60c0e344372e4257d94b1585b5.tar.gz sqlite-967573d56ac85e60c0e344372e4257d94b1585b5.zip |
Fix some problems similar to #2832, but caused by triggers instead of an OR REPLACE clause. (CVS 4615)
FossilOrigin-Name: ee98ae17187296f7b0181c3d4d2b942d5cd4bc8f
-rw-r--r-- | manifest | 16 | ||||
-rw-r--r-- | manifest.uuid | 2 | ||||
-rw-r--r-- | src/delete.c | 4 | ||||
-rw-r--r-- | src/update.c | 4 | ||||
-rw-r--r-- | test/tkt2832.test | 37 |
5 files changed, 47 insertions, 16 deletions
@@ -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 diff --git a/manifest.uuid b/manifest.uuid index fde319106..0d8af0f3f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ed2e61a9fab6a9a102031c10bc6f89e78b4c7447
\ No newline at end of file +ee98ae17187296f7b0181c3d4d2b942d5cd4bc8f
\ No newline at end of file diff --git a/src/delete.c b/src/delete.c index 187d1efc6..6b580a3d3 100644 --- a/src/delete.c +++ b/src/delete.c @@ -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); diff --git a/src/update.c b/src/update.c index 019a37f94..bf5a5caac 100644 --- a/src/update.c +++ b/src/update.c @@ -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 */ diff --git a/test/tkt2832.test b/test/tkt2832.test index c61bd24fe..39ae8c8f1 100644 --- a/test/tkt2832.test +++ b/test/tkt2832.test @@ -11,13 +11,13 @@ # # 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 |