- C Add\sextra\stests\sand\sa\sfix\sfor\srollbacks\sof\sUNLOCKED\stransactions.
- D 2015-08-21T14:21:22.365
-C Fix\stypo\sin\scomment.\s\sNo\schanges\sto\scode.
-D 2015-08-21T12:37:49.414
++C Merge\strunk\schanges\swith\sthis\sbranch.
++D 2015-08-21T16:22:04.553
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
- F Makefile.in 4de3ef40c8b3b75c0c55ff4242a43c8ce1ad90ee
+ F Makefile.in 4f663b6b4954b9b1eb0e6f08387688a93b57542d
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
- F Makefile.msc 3c258b2f98adb08c7ca5950bee2d6670d6ee3f9a
+ F Makefile.msc cf63e11a5395cf887515ac7b78e2057dfe442fcd
F Makefile.vxworks e1b65dea203f054e71653415bd8f96dcaed47858
F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
- F VERSION ce0ae95abd7121c534f6917c1c8f2b70d9acd4db
+ F VERSION ccfc4d1576dbfdeece0a4372a2e6a2e37d3e7975
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
F src/backup.c 4d9134dc988a87838c06056c89c0e8c4700a0452
F src/bitvec.c d1f21d7d91690747881f03940584f4cc548c9d3d
F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
-F src/btree.c f48b3ef91676c06a90a8832987ecef6b94c931ee
-F src/btree.h 969adc948e89e449220ff0ff724c94bb2a52e9f1
-F src/btreeInt.h 8177c9ab90d772d6d2c6c517e05bed774b7c92c0
-F src/build.c 5eb5d055a1d1cdaaea25e01b12607aa894bc0911
+F src/btree.c a00a7c4809d642bf6c63979e73face9fed53dc66
+F src/btree.h 00d4cdb747c4172a5566faf037116985dbbc377e
- F src/btreeInt.h 9f77bac260d81cc74ecd96cccf73a8c5af1688c4
- F src/build.c 28c15c43eefc0066ff64040526ff649c32fe5523
++F src/btreeInt.h 1f7258e1f35ba3cc2197f9019f523dd20d59a0d8
++F src/build.c e47b6fffe14a28d9050e6747beebb01597d37542
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
F src/ctime.c 5a0b735dc95604766f5dac73973658eef782ee8b
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
F src/lempar.c 92bafa308607dd985ca389a788cd9e0a2b608712
F src/loadext.c dfcee8c7c032cd0fd55af3e0fc1fcfb01e426df2
- F src/main.c ebbd5a45caf66ce0ebdf1b6c0bc4784e3cfcd768
-F src/main.c e17fcffae4306a9b8334faf3bac80d7396850b54
++F src/main.c f4a8a75649073b85048505e2bdda4419936d9eb6
F src/malloc.c 19461e159bccf0e2cf06a50e867963d0a7b124a8
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c abe6ee469b6c5a35c7f22bfeb9c9bac664a1c987
F src/os_unix.c 388c023582b17890f10c980b30ec1922b471753b
F src/os_win.c 40b3af7a47eb1107d0d69e592bec345a3b7b798a
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
-F src/pager.c aa916ca28606ccf4b6877dfc2b643ccbca86589f
-F src/pager.h 6d435f563b3f7fcae4b84433b76a6ac2730036e2
-F src/parse.y ad9af8552f6f340bd646577ca63356a6f82b6a7e
+F src/pager.c 48a76f16a75112c9b064e21e1d1ecf0b4d87b5cd
+F src/pager.h 3fc23bca2e7d606ca4fbdd923713cdcdcec48297
- F src/parse.y 199145cd982587d70fa3db2f9b11f7ab118f0acd
++F src/parse.y e9accdb2cb1795f75f478e7ce89e17b19d7d4da7
F src/pcache.c cde06aa50962595e412d497e22fd2e07878ba1f0
F src/pcache.h 9968603796240cdf83da7e7bef76edf90619cea9
- F src/pcache1.c d08939800abf3031bd0affd5a13fbc4d7ba3fb68
- F src/pragma.c e52084b37a08a88f258830518461e94627af2621
+ F src/pcache1.c a3fe31b17e841ec70beee72a2c960e9c787a8857
+ F src/pragma.c 669bc0fdb3fb5554e18330e8dd9743319bac16f4
F src/pragma.h 631a91c8b0e6ca8f051a1d8a4a0da4150e04620a
F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
F src/printf.c 2bc439ff20a4aad0e0ad50a37a67b5eae7d20edc
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
- F src/resolve.c 2d47554370de8de6dd5be060cef9559eec315005
+ F src/resolve.c 7a67cd2aebc9a9eeecd1d104eb6a9237388eb452
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c 57ef3d98c4400b93eea318813be41b2af2da2217
- F src/shell.c 8af3cced094aebb5f57a8ad739b9dafc7867eed7
- F src/sqlite.h.in f623dd30a4fb7df2fb44a2a85e27813d25e486c2
+ F src/select.c c46de38c1b66355f02a839bb72eb13f277e6d19c
+ F src/shell.c b1f91e60918df3a68efad1e3a11696b9a7e23d23
+ F src/sqlite.h.in 447ead0a6b3293206f04a0896553955d07cfb4b9
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
F src/sqlite3ext.h a0b948ebc89bac13941254641326a6aa248c2cc4
- F src/sqliteInt.h f14033fa6da3ca70f7dde5ba19dc1ed58055a2d7
-F src/sqliteInt.h 89e68539d645db597366a91411468b51e73c21a0
++F src/sqliteInt.h d4963f5f6b985b8f967be8e6e103be3cf36f1f42
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
F src/status.c f266ad8a2892d659b74f0f50cb6a88b6e7c12179
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
F src/trigger.c 322f23aad694e8f31d384dcfa386d52a48d3c52f
F src/update.c 487747b328b7216bb7f6af0695d6937d5c9e605f
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
- F src/util.c 46358a204b35971a839341cf64599d65b151ba88
+ F src/util.c bc9dd64b5db544218b871b66243871c202b2781f
-F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c 6d85be995bd2308a5aa2a68c7b564c5d4cc1a6fb
+F src/vacuum.c 4e7e18d889662eda281855a7125e56269069f215
- F src/vdbe.c fd6832408d9621ad347a65b01a05380fe766232f
++F src/vdbe.c 97b07a1af65971dab3d326742e912ac8c12108dd
F src/vdbe.h 7a75045d879118b9d3af7e8b3c108f2f27c51473
F src/vdbeInt.h 8b54e01ad0463590e7cffabce0bc36da9ee4f816
- F src/vdbeapi.c adabbd66eb2e3a10f3998485ee0be7e326d06ee4
- F src/vdbeaux.c 27feae106f3f4db298e65d37a9da4962aaff724b
+ F src/vdbeapi.c bda74ef4b5103d7b4a4be36f936d3cf2b56a7d6f
-F src/vdbeaux.c af2d86b2b114a106c94fc656503fc5c89594f5af
++F src/vdbeaux.c 0d62c6c2522d4a04e051d3862dfe7ae2f5c95598
F src/vdbeblob.c 4f2e8e075d238392df98c5e03a64342465b03f90
F src/vdbemem.c ae38a0d35ae71cf604381a887c170466ba518090
F src/vdbesort.c f5009e7a35e3065635d8918b9a31f498a499976b
F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
- F src/vtab.c 082b35a25a26e3d36f365ca8cd73c1922532f05e
+ F src/vtab.c d31174e4c8f592febab3fa7f69e18320b4fd657a
F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
-F src/wal.c 6fb6b68969e4692593c2552c4e7bff5882de2cb8
-F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
+F src/wal.c 37b25bbb52d6a736397d11e85068b1a496970fb2
+F src/wal.h 5aaed8ca6cad1406088042ff8767951a6a3c7b56
- F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
- F src/where.c 909eba3b6db984eb2adfbca9de2c237ee7056adb
- F src/whereInt.h 5f87e3c4b0551747d119730dfebddd3c54f04047
- F src/wherecode.c 5da5049224f12db314931ae7e0919b4914a2a0b1
- F src/whereexpr.c 9ce1c9cfedbf80c93c7d899497025ec8256ce652
+ F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
+ F src/where.c 66518a14a1238611aa0744d6980b6b7f544f4816
+ F src/whereInt.h 880a8599226ac1c00203490d934f3ed79b292572
+ F src/wherecode.c 69f19535a6de0cceb10e16b31a3a03463e31bc24
+ F src/whereexpr.c f9dbd159127452150c92b558e184827ecb8f9229
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P 7c36147846484c96023939864417b5624f3bc5f8
- R d431131c35d67ee146c27b397321fd1c
-P 64d13339d44d1b7ec6768a33421f2138cb7872d8
-R 260ec5cb722f012aed82a5e5217a1778
-U drh
-Z 32b72495e2d0c8597a1f587799e93112
++P 82cd837e72ed4cf5821be717369694be29a2997e 7b8d17dd840f64dac9a018a4547a97de799e94ab
++R a6aada1e15ca09028aeff07fdb262305
+U dan
- Z 6bf329345f5b33de62ef6fd5bfd9b35f
++Z 957a88b73b652ebea177f80c25ee0401
** is committed.
*/
int isTransaction = pSavepoint->pNext==0 && db->isTransactionSavepoint;
++ assert( db->bUnlocked==0 || db->isTransactionSavepoint==0 );
if( isTransaction && p1==SAVEPOINT_RELEASE ){
if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
goto vdbe_return;
assert( db->nVdbeActive>0 ); /* At least this one VM is active */
assert( p->bIsReader );
- if( turnOnAC && !iRollback &&
- (db->nVdbeWrite>0 || (db->bUnlocked && db->nVdbeActive>1))
- if( turnOnAC && !iRollback && db->nVdbeWrite>0 ){
- /* If this instruction implements a COMMIT and other VMs are writing
- ** return an error indicating that the other VMs must complete first.
- */
++ if( turnOnAC && !iRollback
++ && (db->nVdbeWrite>0 || (db->bUnlocked && db->nVdbeActive>1))
+ ){
- /* If this instruction implements a COMMIT and other VMs are writing
- ** return an error indicating that the other VMs must complete first.
- */
++ /* A transaction may only be committed if there are no other active
++ ** writer VMs. If the transaction is UNLOCKED, then it may only be
++ ** committed if there are no active VMs at all (readers or writers).
++ **
++ ** If this instruction is a COMMIT and the transaction may not be
++ ** committed due to one of the conditions above, return an error
++ ** indicating that other VMs must complete before the COMMIT can
++ ** be processed. */
sqlite3VdbeError(p, "cannot commit transaction - "
"SQL statements in progress");
rc = SQLITE_BUSY;
goto vdbe_return;
}else{
db->autoCommit = (u8)desiredAutoCommit;
- hrc = sqlite3VdbeHalt(p);
- if( (hrc & 0xFF)==SQLITE_BUSY ){
- p->pc = (int)(pOp - aOp);
- db->autoCommit = (u8)(1-desiredAutoCommit);
- p->rc = hrc;
- rc = SQLITE_BUSY;
- goto vdbe_return;
- }
- db->bUnlocked = (u8)bUnlocked;
}
- if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
++ hrc = sqlite3VdbeHalt(p);
++ if( (hrc & 0xFF)==SQLITE_BUSY ){
+ p->pc = (int)(pOp - aOp);
+ db->autoCommit = (u8)(1-desiredAutoCommit);
- p->rc = rc = SQLITE_BUSY;
++ p->rc = hrc;
++ rc = SQLITE_BUSY;
+ goto vdbe_return;
+ }
++ db->bUnlocked = (u8)bUnlocked;
assert( db->nStatement==0 );
sqlite3CloseSavepoints(db);
if( p->rc==SQLITE_OK ){