Do now allow a COMMIT to occur while even a single write operating is

in progress. (CVS 6790)

FossilOrigin-Name: 605520ec04061e389226fbec59f7aedf674b3c4e
This commit is contained in:
drh 2009-06-19 22:23:41 +00:00
parent bf66446972
commit 9eb8cbe5c0
4 changed files with 19 additions and 14 deletions

View File

@ -1,5 +1,5 @@
C Fix\sthe\scomment\son\sthe\ssqlite3PExpr()\ssubroutine.\s\sTicket\s#3924.\s(CVS\s6789)
D 2009-06-19T18:32:55
C Do\snow\sallow\sa\sCOMMIT\sto\soccur\swhile\seven\sa\ssingle\swrite\soperating\sis\nin\sprogress.\s(CVS\s6790)
D 2009-06-19T22:23:42
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 8b8fb7823264331210cddf103831816c286ba446
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -203,7 +203,7 @@ F src/update.c 6ae6c26adff8dc34532d578f66e6cfde04b5d177
F src/utf.c 9541d28f40441812c0b40f00334372a0542c00ff
F src/util.c a7e981e032c3c9c0887d50d7e658a33cb355b43d
F src/vacuum.c 0e14f371ea3326c6b8cfba257286d798cd20db59
F src/vdbe.c ad47fc3df73544d25e47ebb116b6d4777306256c
F src/vdbe.c 51b0d7394f70a114b11bf0263dfe7c59b802f932
F src/vdbe.h 35a648bc3279a120da24f34d9a25213ec15daf8a
F src/vdbeInt.h f5147efa8ead0ae78496487a83c7e87c54ffa405
F src/vdbeapi.c 73bd1d2c57b953bc688d1d8c84b24c2084c2aec7
@ -396,7 +396,7 @@ F test/in.test d49419c6df515852f477fa513f3317181d46bc92
F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75
F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0
F test/in4.test 64f3cc1acde1b9161ccdd8e5bde3daefdb5b2617
F test/incrblob.test 4b9437bbb38724343dadbbcca6356bc2a9b435d1
F test/incrblob.test c80087a8ec28b4a58b5299251074048e17754f8f
F test/incrblob2.test 7ef4581745dd80155a451637aa779b49df90787d
F test/incrblob_err.test c577c91d4ed9e8336cdb188b15d6ee2a6fe9604e
F test/incrvacuum.test d0fb6ef6d747ef5c5ebe878aafa72dd3e178856b
@ -736,7 +736,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
P 62db08bc0de936e4a418ae583a3bdbbf33d7787e
R ac56c8a806f7dbc960ad044fa18040b8
P 4bb96db6b4d2cfa71430a2646c1082a494e3519f
R 08dcdc73da6a8280bf5856390715cfc3
U drh
Z d0d0a90f42959f30bda016cc31abe318
Z 895f5e5e40c3bf3e476a61fb4fd77290

View File

@ -1 +1 @@
4bb96db6b4d2cfa71430a2646c1082a494e3519f
605520ec04061e389226fbec59f7aedf674b3c4e

View File

@ -43,7 +43,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.856 2009/06/19 14:06:03 drh Exp $
** $Id: vdbe.c,v 1.857 2009/06/19 22:23:42 drh Exp $
*/
#include "sqliteInt.h"
#include "vdbeInt.h"
@ -2651,7 +2651,7 @@ case OP_AutoCommit: {
sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
"SQL statements in progress");
rc = SQLITE_BUSY;
}else if( turnOnAC && !iRollback && db->writeVdbeCnt>1 ){
}else if( turnOnAC && !iRollback && db->writeVdbeCnt>0 ){
/* If this instruction implements a COMMIT and other VMs are writing
** return an error indicating that the other VMs must complete first.
*/

View File

@ -9,7 +9,7 @@
#
#***********************************************************************
#
# $Id: incrblob.test,v 1.23 2008/11/05 16:37:35 drh Exp $
# $Id: incrblob.test,v 1.24 2009/06/19 22:23:42 drh Exp $
#
set testdir [file dirname $argv0]
@ -451,8 +451,8 @@ do_test incrblob-6.9 {
} {}
# At this point rollback should be illegal (because
# there is an open blob channel). But commit is allowed because
# the blob is read-only.
# there is an open blob channel). But commit is also illegal because
# the open blob is read-write.
#
do_test incrblob-6.10 {
catchsql {
@ -463,7 +463,7 @@ do_test incrblob-6.11 {
catchsql {
COMMIT;
} db2
} {0 {}}
} {1 {cannot commit transaction - SQL statements in progress}}
do_test incrblob-6.12 {
execsql {
@ -474,6 +474,11 @@ do_test incrblob-6.13 {
close $::blob
} {}
do_test incrblob-6.14 {
catchsql {
COMMIT;
} db2
} {0 {}}
do_test incrblob-6.15 {
execsql {
SELECT * FROM blobs WHERE rowid = 4;
}