Avoid calling sqlite3BtreeKeysize() on a b-tree cursor in SKIPNEXT or SKIPPREV state.

FossilOrigin-Name: 54e7d3fcb1ab21c03ffef1af93ae029a2901098a
This commit is contained in:
dan 2014-11-17 19:42:48 +00:00
parent dd715f7c57
commit 2b8669a9da
4 changed files with 49 additions and 8 deletions

View File

@ -1,5 +1,5 @@
C Do\snot\sautomatically\sremove\sthe\sDISTINCT\skeyword\sfrom\s"a\sIN\s(SELECT\sDISTINCT\s...)"\sexpressions.\sFix\sfor\s[db87229497].
D 2014-11-14T15:28:33.929
C Avoid\scalling\ssqlite3BtreeKeysize()\son\sa\sb-tree\scursor\sin\sSKIPNEXT\sor\sSKIPPREV\sstate.
D 2014-11-17T19:42:48.262
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in a226317fdf3f4c895fb3cfedc355b4d0868ce1fb
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -291,7 +291,7 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
F src/util.c 3b627daa45c7308c1e36e3dbaa3f9ce7e5c7fa73
F src/vacuum.c 9b30ec729337dd012ed88d4c292922c8ef9cf00c
F src/vdbe.c 5e47308836e9bb5fdb4835fdf88eeab071848d3f
F src/vdbe.c 5d3991d723f00ef86263f4d494e105faba5a5abd
F src/vdbe.h 6fc69d9c5e146302c56e163cb4b31d1ee64a18c3
F src/vdbeInt.h 9bb69ff2447c34b6ccc58b34ec35b615f86ead78
F src/vdbeapi.c 07acb615d1e4170e71fc1b0d087f3c53a1ad8e83
@ -734,7 +734,7 @@ F test/misc4.test 9c078510fbfff05a9869a0b6d8b86a623ad2c4f6
F test/misc5.test 528468b26d03303b1f047146e5eefc941b9069f5
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
F test/misc7.test edd0b63e2ee29a256900b0514f6fff27e19e9bb2
F test/misc8.test e838ec20c9c988bc94812fdb89af26409c20931b
F test/misc8.test fc2754d38892f7dac30c22db3616c2764f117d66
F test/misuse.test 3c34719944ba045cc6c188a4852ba04680728912
F test/mmap1.test 1bfd611b9841eafb44f7d83c0788e146d84a33c9
F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022
@ -1221,7 +1221,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P ef03a203351a6002e2b1075139717e4234c816cd
R bb54553354aa14551393c5e5701542c8
P 55e453aadbb676dda07f0fa537d39ce184ef636c
R 6cd25f6196e6f786753b0fb88328cee1
U dan
Z f91e19e3f2d1e58cdccd86465c86ab70
Z f594bfe54166ed1c0f3ae7a5a057ba04

View File

@ -1 +1 @@
55e453aadbb676dda07f0fa537d39ce184ef636c
54e7d3fcb1ab21c03ffef1af93ae029a2901098a

View File

@ -4408,6 +4408,10 @@ case OP_Rowid: { /* out2-prerelease */
assert( pC->pCursor!=0 );
rc = sqlite3VdbeCursorRestore(pC);
if( rc ) goto abort_due_to_error;
if( pC->nullRow ){
pOut->flags = MEM_Null;
break;
}
rc = sqlite3BtreeKeySize(pC->pCursor, &v);
assert( rc==SQLITE_OK ); /* Always so because of CursorRestore() above */
}

View File

@ -58,4 +58,41 @@ do_catchsql_test misc8-1.7 {
} {1 {abort due to ROLLBACK}}
reset_db
proc dbeval {sql} { db eval $sql }
db func eval dbeval
do_execsql_test misc8-2.1 {
CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER) WITHOUT ROWID;
CREATE TABLE t2(c INTEGER PRIMARY KEY, d INTEGER, x BLOB);
INSERT INTO t1 VALUES(0,0);
INSERT INTO t1 VALUES(10,10);
INSERT INTO t2 VALUES(1,1,zeroblob(200));
INSERT INTO t2 VALUES(2,2,zeroblob(200));
INSERT INTO t2 VALUES(3,3,zeroblob(200));
INSERT INTO t2 VALUES(4,4,zeroblob(200));
INSERT INTO t2 VALUES(5,5,zeroblob(200));
INSERT INTO t2 VALUES(6,6,zeroblob(200));
INSERT INTO t2 VALUES(7,7,zeroblob(200));
INSERT INTO t2 VALUES(8,8,zeroblob(200));
INSERT INTO t2 VALUES(9,9,zeroblob(200));
INSERT INTO t2 VALUES(10,10,zeroblob(200));
SELECT a, c, eval(
printf('DELETE FROM t2 WHERE c=%d AND %d>5', a+c, a+c)
) FROM t1, t2;
} {
0 1 {} 10 1 {}
0 2 {} 10 2 {}
0 3 {} 10 3 {}
0 4 {} 10 4 {}
0 5 {} 10 5 {}
0 6 {} 10 {} {}
0 7 {} 10 {} {}
0 8 {} 10 {} {}
0 9 {} 10 {} {}
0 10 {} 10 {} {}
}
finish_test