mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Do not record the inserted rowid on when doing an INSERT within a trigger.
Ticket #290. (CVS 906) FossilOrigin-Name: 96a717661a3b7108fe0cacb588d81fd8e91eb640
This commit is contained in:
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Change\slemon\sto\suse\s<stdarg.h>\sinstead\sof\s<varargs.h>\sbecause\sGCC\sno\slonger\nsupports\svarargs.h.\s\sTickets\s#288\sand\s#280.\s\sIronically,\slemon\soriginally\nused\svarargs.h\sbecause\sstdarg.h\swas\snot\ssupported\sby\sthe\scompiler\sI\swas\nusing\sin\s1989\s(which\swas\sgcc\sif\sI\srecall\scorrectly.)\s(CVS\s905)
|
||||
D 2003-04-15T01:49:49
|
||||
C Do\snot\srecord\sthe\sinserted\srowid\son\swhen\sdoing\san\sINSERT\swithin\sa\strigger.\nTicket\s#290.\s(CVS\s906)
|
||||
D 2003-04-15T14:01:43
|
||||
F Makefile.in df3a4db41a7450468b5fe934d9dd8f723b631249
|
||||
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
|
||||
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
|
||||
@ -58,7 +58,7 @@ F src/trigger.c bd5a5b234b47f28f9f21a46243dcaf1c5b2383a3
|
||||
F src/update.c b368369f1fbe6d7f56a53e5ffad3b75dae9e3e1a
|
||||
F src/util.c 8953c612a036e30f24c1c1f5a1498176173daa37
|
||||
F src/vacuum.c ac65e9578506a0cdf70ece2668e5b22f4895477c
|
||||
F src/vdbe.c cf9ef07b1fce5a340d8926a493f9313208f1773f
|
||||
F src/vdbe.c 0fa25d177b02523dbdcb48395053ed5cc21829ee
|
||||
F src/vdbe.h 985c24f312d10f9ef8f9a8b8ea62fcdf68e82f21
|
||||
F src/where.c e5733f7d5e9cc4ed3590dc3401f779e7b7bb8127
|
||||
F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
|
||||
@ -101,7 +101,7 @@ F test/pragma.test d45d130f532bfe86ebd5ba74862d88b36ded8998
|
||||
F test/printf.test a29b8afa24edb4411adfe473b12ac32c84098fce
|
||||
F test/quick.test c527bdb899b12a8cd8ceecce45f72922099f4095
|
||||
F test/quote.test 08f23385c685d3dc7914ec760d492cacea7f6e3d
|
||||
F test/rowid.test 4c55943300cddf73dd0f88d40a268cab14c83274
|
||||
F test/rowid.test 82bd07c959eb56ce14feb85cac591750af714ddf
|
||||
F test/select1.test 0d708cec567104653ec9aa49fecf3444a2e7d150
|
||||
F test/select2.test aceea74fd895b9d007512f72499db589735bd8e4
|
||||
F test/select3.test 445a1a3dde4e2fd32541b311f55da5e2f8079d76
|
||||
@ -161,7 +161,7 @@ F www/speed.tcl cb4c10a722614aea76d2c51f32ee43400d5951be
|
||||
F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098
|
||||
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
|
||||
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
|
||||
P e76787f877c456abdc8bc88bfefc50eaeed68744
|
||||
R 2082ff273f79da67ec128510ffa08236
|
||||
P 7902e4778ec86e25ad949ae7a6d55b63ac0e85f3
|
||||
R dd4a1ed15ab6eb4c2551ae58dad32820
|
||||
U drh
|
||||
Z 21cc95134a25d7c9da7271d70e2e3747
|
||||
Z 207b6a42d8bab1444378577acd311c3c
|
||||
|
@ -1 +1 @@
|
||||
7902e4778ec86e25ad949ae7a6d55b63ac0e85f3
|
||||
96a717661a3b7108fe0cacb588d81fd8e91eb640
|
@ -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.213 2003/04/15 01:19:49 drh Exp $
|
||||
** $Id: vdbe.c,v 1.214 2003/04/15 14:01:43 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include <ctype.h>
|
||||
@ -3916,7 +3916,8 @@ case OP_NewRecno: {
|
||||
** be an integer. The stack is popped twice by this instruction.
|
||||
**
|
||||
** If P2==1 then the row change count is incremented. If P2==0 the
|
||||
** row change count is unmodified.
|
||||
** row change count is unmodified. The rowid is stored for subsequent
|
||||
** return by the sqlite_last_insert_rowid() function if P2 is 1.
|
||||
*/
|
||||
/* Opcode: PutStrKey P1 * *
|
||||
**
|
||||
@ -3945,8 +3946,10 @@ case OP_PutStrKey: {
|
||||
nKey = sizeof(int);
|
||||
iKey = intToKey(aStack[nos].i);
|
||||
zKey = (char*)&iKey;
|
||||
if( pOp->p2 ){
|
||||
db->nChange++;
|
||||
db->lastRowid = aStack[nos].i;
|
||||
if( pOp->p2 ) db->nChange++;
|
||||
}
|
||||
if( pC->nextRowidValid && aStack[nos].i>=pC->nextRowid ){
|
||||
pC->nextRowidValid = 0;
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
# focus of this file is testing the magic ROWID column that is
|
||||
# found on all tables.
|
||||
#
|
||||
# $Id: rowid.test,v 1.8 2002/02/19 22:42:06 drh Exp $
|
||||
# $Id: rowid.test,v 1.9 2003/04/15 14:01:44 drh Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@ -353,4 +353,57 @@ do_test rowid-7.8 {
|
||||
}
|
||||
} {2 66 3 111}
|
||||
|
||||
# Make sure AFTER triggers that do INSERTs do not change the last_insert_rowid.
|
||||
# Ticket #290
|
||||
#
|
||||
do_test rowid-8.1 {
|
||||
execsql {
|
||||
CREATE TABLE t3(a integer primary key);
|
||||
CREATE TABLE t4(x);
|
||||
INSERT INTO t4 VALUES(1);
|
||||
CREATE TRIGGER r3 AFTER INSERT on t3 FOR EACH ROW BEGIN
|
||||
INSERT INTO t4 VALUES(NEW.a+10);
|
||||
END;
|
||||
SELECT * FROM t3;
|
||||
}
|
||||
} {}
|
||||
do_test rowid-8.2 {
|
||||
execsql {
|
||||
SELECT rowid, * FROM t4;
|
||||
}
|
||||
} {1 1}
|
||||
do_test rowid-8.3 {
|
||||
execsql {
|
||||
INSERT INTO t3 VALUES(123);
|
||||
SELECT last_insert_rowid();
|
||||
}
|
||||
} {123}
|
||||
do_test rowid-8.4 {
|
||||
execsql {
|
||||
SELECT * FROM t3;
|
||||
}
|
||||
} {123}
|
||||
do_test rowid-8.5 {
|
||||
execsql {
|
||||
SELECT rowid, * FROM t4;
|
||||
}
|
||||
} {1 1 2 133}
|
||||
do_test rowid-8.6 {
|
||||
execsql {
|
||||
INSERT INTO t3 VALUES(NULL);
|
||||
SELECT last_insert_rowid();
|
||||
}
|
||||
} {124}
|
||||
do_test rowid-8.7 {
|
||||
execsql {
|
||||
SELECT * FROM t3;
|
||||
}
|
||||
} {123 124}
|
||||
do_test rowid-8.8 {
|
||||
execsql {
|
||||
SELECT rowid, * FROM t4;
|
||||
}
|
||||
} {1 1 2 133 3 {}}
|
||||
|
||||
|
||||
finish_test
|
||||
|
Reference in New Issue
Block a user