mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Save the position of any open cursors before a rollback. (CVS 3026)
FossilOrigin-Name: 32d45bcf746e7e926b8cc8bd038d66e7c2ec6562
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Return\scode\swas\sbeing\sdropped\sbecause\sof\soverridden\svariable\sin\sOP_IsUnique.\sFix\sthis\sand\sthe\stest\slogic\sproblem\sthat\shid\sit.\s(CVS\s3025)
|
C Save\sthe\sposition\sof\sany\sopen\scursors\sbefore\sa\srollback.\s(CVS\s3026)
|
||||||
D 2006-01-24T13:09:33
|
D 2006-01-24T14:21:24
|
||||||
F Makefile.in 53841eb72e9eeb6030a8ce28c2595a92f440fd10
|
F Makefile.in 53841eb72e9eeb6030a8ce28c2595a92f440fd10
|
||||||
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
|
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@@ -34,7 +34,7 @@ F src/alter.c 90b779cf00489535cab6490df6dc050f40e4e874
|
|||||||
F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a
|
F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a
|
||||||
F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0
|
F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0
|
||||||
F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2
|
F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2
|
||||||
F src/btree.c e3cb390f7da8ebe9d81ffb59df2a9f9b65f9d344
|
F src/btree.c 5b71740985d4845f3a6ac7e0bb809e41d25830d4
|
||||||
F src/btree.h 5663c4f43e8521546ccebc8fc95acb013b8f3184
|
F src/btree.h 5663c4f43e8521546ccebc8fc95acb013b8f3184
|
||||||
F src/build.c feaa61e769d7887ffeaa060d746638c7b3e994ef
|
F src/build.c feaa61e769d7887ffeaa060d746638c7b3e994ef
|
||||||
F src/callback.c 1bf497306c32229114f826707054df7ebe10abf2
|
F src/callback.c 1bf497306c32229114f826707054df7ebe10abf2
|
||||||
@@ -227,7 +227,7 @@ F test/select6.test d8ea108b65607399580f2765df0aee5e464b0fd8
|
|||||||
F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
|
F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
|
||||||
F test/server1.test e328b8e641ba8fe9273132cfef497383185dc1f5
|
F test/server1.test e328b8e641ba8fe9273132cfef497383185dc1f5
|
||||||
F test/shared.test 0ed247941236788c255b3b29b5a82d5ca71b6432
|
F test/shared.test 0ed247941236788c255b3b29b5a82d5ca71b6432
|
||||||
F test/shared2.test 995efd4b78e9198f67717d87f88acb193aeb5fd7
|
F test/shared2.test 3466dc54ca69a3c50ac259e106fb5cd067b8cd53
|
||||||
F test/shared_err.test 162ad76d510370e4d3878cb6c376e1292db06005
|
F test/shared_err.test 162ad76d510370e4d3878cb6c376e1292db06005
|
||||||
F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
|
F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
|
||||||
F test/subquery.test ae324ee928c5fb463a3ce08a8860d6e7f1ca5797
|
F test/subquery.test ae324ee928c5fb463a3ce08a8860d6e7f1ca5797
|
||||||
@@ -344,7 +344,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
||||||
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
||||||
P d86f18a4277ebffb644ba2e574e0b697c8bbf8e4
|
P c30705a00d7d9d61fb9cb47a1019b1a186d690a7
|
||||||
R 7dfccdc93457a7fd816b98a21dcb1bda
|
R 6675c7ec185eda4043b15c5e61211396
|
||||||
U danielk1977
|
U danielk1977
|
||||||
Z aa3b02a91bab4996b62f927ed568dabe
|
Z 32002e918852056122387d8fed3cdfe2
|
||||||
|
@@ -1 +1 @@
|
|||||||
c30705a00d7d9d61fb9cb47a1019b1a186d690a7
|
32d45bcf746e7e926b8cc8bd038d66e7c2ec6562
|
@@ -9,7 +9,7 @@
|
|||||||
** May you share freely, never taking more than you give.
|
** May you share freely, never taking more than you give.
|
||||||
**
|
**
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
** $Id: btree.c,v 1.309 2006/01/23 13:47:47 danielk1977 Exp $
|
** $Id: btree.c,v 1.310 2006/01/24 14:21:24 danielk1977 Exp $
|
||||||
**
|
**
|
||||||
** This file implements a external (disk-based) database using BTrees.
|
** This file implements a external (disk-based) database using BTrees.
|
||||||
** For a detailed discussion of BTrees, refer to
|
** For a detailed discussion of BTrees, refer to
|
||||||
@@ -560,7 +560,8 @@ static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
|
|||||||
BtCursor *p;
|
BtCursor *p;
|
||||||
if( sqlite3ThreadDataReadOnly()->useSharedData ){
|
if( sqlite3ThreadDataReadOnly()->useSharedData ){
|
||||||
for(p=pBt->pCursor; p; p=p->pNext){
|
for(p=pBt->pCursor; p; p=p->pNext){
|
||||||
if( p!=pExcept && p->pgnoRoot==iRoot && p->eState==CURSOR_VALID ){
|
if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) &&
|
||||||
|
p->eState==CURSOR_VALID ){
|
||||||
int rc = saveCursorPosition(p);
|
int rc = saveCursorPosition(p);
|
||||||
if( SQLITE_OK!=rc ){
|
if( SQLITE_OK!=rc ){
|
||||||
return rc;
|
return rc;
|
||||||
@@ -2541,6 +2542,10 @@ int sqlite3BtreeRollback(Btree *p){
|
|||||||
BtShared *pBt = p->pBt;
|
BtShared *pBt = p->pBt;
|
||||||
MemPage *pPage1;
|
MemPage *pPage1;
|
||||||
|
|
||||||
|
rc = saveAllCursors(pBt, 0, 0);
|
||||||
|
if( rc!=SQLITE_OK ){
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
btreeIntegrity(p);
|
btreeIntegrity(p);
|
||||||
unlockAllTables(p);
|
unlockAllTables(p);
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
#
|
#
|
||||||
#***********************************************************************
|
#***********************************************************************
|
||||||
#
|
#
|
||||||
# $Id: shared2.test,v 1.2 2006/01/24 11:30:27 danielk1977 Exp $
|
# $Id: shared2.test,v 1.3 2006/01/24 14:21:24 danielk1977 Exp $
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
@@ -78,10 +78,51 @@ do_test shared2-1.3 {
|
|||||||
list $a $count
|
list $a $count
|
||||||
} {32 64}
|
} {32 64}
|
||||||
|
|
||||||
|
# Rollback data into or out of a table while a read-uncommitted
|
||||||
|
# cursor is scanning it.
|
||||||
|
#
|
||||||
|
do_test shared2-2.1 {
|
||||||
|
execsql {
|
||||||
|
INSERT INTO numbers VALUES(1, 'Medium length text field');
|
||||||
|
INSERT INTO numbers VALUES(2, 'Medium length text field');
|
||||||
|
INSERT INTO numbers VALUES(3, 'Medium length text field');
|
||||||
|
INSERT INTO numbers VALUES(4, 'Medium length text field');
|
||||||
|
BEGIN;
|
||||||
|
DELETE FROM numbers WHERE (a%2)=0;
|
||||||
|
} db1
|
||||||
|
set res [list]
|
||||||
|
db2 eval {
|
||||||
|
SELECT a FROM numbers ORDER BY a;
|
||||||
|
} {
|
||||||
|
lappend res $a
|
||||||
|
if {$a==3} {
|
||||||
|
execsql {ROLLBACK} db1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set res
|
||||||
|
} {1 3 4}
|
||||||
|
do_test shared2-2.2 {
|
||||||
|
execsql {
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO numbers VALUES(5, 'Medium length text field');
|
||||||
|
INSERT INTO numbers VALUES(6, 'Medium length text field');
|
||||||
|
} db1
|
||||||
|
set res [list]
|
||||||
|
db2 eval {
|
||||||
|
SELECT a FROM numbers ORDER BY a;
|
||||||
|
} {
|
||||||
|
lappend res $a
|
||||||
|
if {$a==5} {
|
||||||
|
execsql {ROLLBACK} db1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set res
|
||||||
|
} {1 2 3 4 5}
|
||||||
|
|
||||||
db1 close
|
db1 close
|
||||||
db2 close
|
db2 close
|
||||||
|
|
||||||
do_test shared2-1.4 {
|
do_test shared2-3.2 {
|
||||||
sqlite3_thread_cleanup
|
sqlite3_thread_cleanup
|
||||||
sqlite3_enable_shared_cache 1
|
sqlite3_enable_shared_cache 1
|
||||||
} {0}
|
} {0}
|
||||||
|
Reference in New Issue
Block a user