Modifications to ensure the nExtraDelete-related assert() statement does not fail.
FossilOrigin-Name: f43ff8f82d6c1239e6f9a32e7716421c1180ac74
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
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
|
||||
@@ -412,7 +412,7 @@ F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
|
||||
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
|
||||
@@ -642,7 +642,7 @@ F test/fkey6.test abb59f866c1b44926fd02d1fdd217d831fe04f48
|
||||
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
|
||||
@@ -1422,7 +1422,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
||||
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
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1d3bf6bebdda9f96734bc139601e9b05344ea0b4
|
||||
f43ff8f82d6c1239e6f9a32e7716421c1180ac74
|
||||
+11
-21
@@ -4405,14 +4405,16 @@ case OP_Delete: {
|
||||
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
|
||||
|
||||
@@ -4960,21 +4962,9 @@ case OP_IdxDelete: {
|
||||
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;
|
||||
|
||||
@@ -158,5 +158,53 @@ do_test 3.2 {
|
||||
}
|
||||
} {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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user