aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielk1977 <danielk1977@noemail.net>2007-12-12 16:06:23 +0000
committerdanielk1977 <danielk1977@noemail.net>2007-12-12 16:06:23 +0000
commit967573d56ac85e60c0e344372e4257d94b1585b5 (patch)
treec346a04c6ca9fc26213f1c89390e69f460a9d493
parent2d78617d66718bd970d999a8a9fce82de794c4aa (diff)
downloadsqlite-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--manifest16
-rw-r--r--manifest.uuid2
-rw-r--r--src/delete.c4
-rw-r--r--src/update.c4
-rw-r--r--test/tkt2832.test37
5 files changed, 47 insertions, 16 deletions
diff --git a/manifest b/manifest
index 586dfb438..1e5fa70ee 100644
--- 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
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