-C Change\sthe\sname\sof\sthe\sBTREE_IDXDELETE\sflag\sto\sBTREE_AUXDELETE,\sto\sbetter\nreflect\sits\spurpose.
-D 2016-01-27T16:26:25.226
+C Modifications\sto\sensure\sthe\snExtraDelete-related\sassert()\sstatement\sdoes\snot\sfail.
+D 2016-01-28T17:06:17.501
F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 6fca5455aaecbd14479f33f091aa19df2d3d2969
F src/utf.c 32d7f82aa921322f3e1c956f4b58f019ebd2c6b3
F src/util.c 72d40df0a52d3f30b462a15f0e094fcbade6dc82
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c c367615fecb5fae8a39113ee2b6ecbab94e4bcd3
+F src/vdbe.c 66c429896ce44ebcbe199f1c7a592c12095158f0
F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337
F src/vdbeInt.h 40c728712a2975855a2ac6aac44bf02dfd4a4c30
F src/vdbeapi.c ffae8f5af4570fbd548504e815e9fb7227f0822e
F test/fkey7.test 72e915890ee4a005daaf3002cb208e8fe973ac13
F test/fkey8.test 8f08203458321e6c19a263829de4cfc936274ab0
F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
-F test/fordelete.test f794392f1768584609fa439f7528484dc04d3a03
+F test/fordelete.test 57ed9b953eeace09dd2eac3251b40bf9d6990aec
F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
F test/fts-9fd058691.test 78b887e30ae6816df0e1fed6259de4b5a64ad33c
F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P bbd25cf179df5bda1fe729928d6746248f06e46f
-R 21474325914b9893f106ce3a1694990c
-U drh
-Z 6ce2f1bf15f4f84bace517d6cc10a5ac
+P 1d3bf6bebdda9f96734bc139601e9b05344ea0b4
+R 8c4c31e27c8a082a17d0a49af9f3ce1b
+U dan
+Z 9dc5d2517a8a4fb456754e0a3cfe77cf
-1d3bf6bebdda9f96734bc139601e9b05344ea0b4
\ No newline at end of file
+f43ff8f82d6c1239e6f9a32e7716421c1180ac74
\ No newline at end of file
assert( OPFLAG_AUXDELETE==BTREE_AUXDELETE );
#ifdef SQLITE_DEBUG
- if( pC->isEphemeral==0
- && (pOp->p5 & OPFLAG_AUXDELETE)==0
- && (pC->wrFlag & OPFLAG_FORDELETE)==0
- ){
- nExtraDelete++;
- }
- if( pOp->p2 & OPFLAG_NCHANGE ){
- nExtraDelete--;
+ if( p->pFrame==0 ){
+ if( pC->isEphemeral==0
+ && (pOp->p5 & OPFLAG_AUXDELETE)==0
+ && (pC->wrFlag & OPFLAG_FORDELETE)==0
+ ){
+ nExtraDelete++;
+ }
+ if( pOp->p2 & OPFLAG_NCHANGE ){
+ nExtraDelete--;
+ }
}
#endif
r.nField = (u16)pOp->p3;
r.default_rc = 0;
r.aMem = &aMem[pOp->p2];
-#ifdef SQLITE_DEBUG
- {
- int i;
- for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) );
- if( pC->isEphemeral==0
- && (pOp->p5 & OPFLAG_AUXDELETE)==0
- && (pC->wrFlag & OPFLAG_FORDELETE)==0
- ){
- nExtraDelete++;
- }
- }
-#endif
rc = sqlite3BtreeMovetoUnpacked(pCrsr, &r, 0, 0, &res);
if( rc==SQLITE_OK && res==0 ){
- rc = sqlite3BtreeDelete(pCrsr, 0);
+ rc = sqlite3BtreeDelete(pCrsr, BTREE_AUXDELETE);
}
assert( pC->deferredMoveto==0 );
pC->cacheStatus = CACHE_STALE;
}
} {6 {} {} {}}
+
+#-------------------------------------------------------------------------
+#
+reset_db
+do_execsql_test 4.0 {
+ CREATE TABLE log(x);
+ CREATE TABLE p1(one PRIMARY KEY, two);
+
+ CREATE TRIGGER tr_bd BEFORE DELETE ON p1 BEGIN
+ INSERT INTO log VALUES('delete');
+ END;
+ INSERT INTO p1 VALUES('a', 'A'), ('b', 'B'), ('c', 'C');
+ DELETE FROM p1 WHERE one = 'a';
+}
+
+reset_db
+do_execsql_test 4.1 {
+ BEGIN TRANSACTION;
+ CREATE TABLE tbl(a PRIMARY KEY, b, c);
+ CREATE TABLE log(a, b, c);
+ INSERT INTO "tbl" VALUES(1,2,3);
+ CREATE TRIGGER the_trigger BEFORE DELETE ON tbl BEGIN
+ INSERT INTO log VALUES(1, 2,3);
+ END;
+ COMMIT;
+ DELETE FROM tbl WHERE a=1;
+}
+
+reset_db
+do_execsql_test 5.1 {
+ PRAGMA foreign_keys = 1;
+ CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
+ CREATE TABLE t2(
+ c INTEGER PRIMARY KEY,
+ d INTEGER DEFAULT 1 REFERENCES t1 ON DELETE SET DEFAULT
+ );
+} {}
+do_execsql_test 5.2 {
+ INSERT INTO t1 VALUES(1, 'one');
+ INSERT INTO t1 VALUES(2, 'two');
+ INSERT INTO t2 VALUES(1, 2);
+ SELECT * FROM t2;
+} {1 2}
+do_execsql_test 5.3 {
+ DELETE FROM t1 WHERE a = 2;
+} {}
+
+
finish_test