Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Ensure that all cursors have their positions saved prior to rolling back a savepoint. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8e03a8e95fada5c24d369672a71f6e02 |
User & Date: | drh 2017-02-02 20:32:28.731 |
Context
2017-02-03
| ||
15:16 | Improved tests for the carray() table-valued function. (check-in: 83a099f139 user: drh tags: trunk) | |
14:44 | Modify the sqlite3SelectDup() routine to avoid recursing on Select.pPrior. (check-in: a7674ead5b user: dan tags: recursive-selectdup) | |
2017-02-02
| ||
23:57 | Add the sqlite3_blob_reset() interface. Enhance the behavior of sqlite3_blob objects so that they can go active again after encountering an error by rerunning sqlite3_blob_reopen(). More work needed on the documentation. (check-in: 53b77838f0 user: drh tags: sqlite3_blob_reset) | |
20:32 | Ensure that all cursors have their positions saved prior to rolling back a savepoint. (check-in: 8e03a8e95f user: drh tags: trunk) | |
19:24 | Fix issues in the sha1 extension seen with MSVC. (check-in: 5a0da77c22 user: mistachkin tags: trunk) | |
00:46 | This is an experimental patch that ensures that all cursors have their position saved prior to starting a ROLLBACK TO. (Closed-Leaf check-in: 01d97e5b65 user: drh tags: savepoint-rollback) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
4034 4035 4036 4037 4038 4039 4040 | int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ int rc = SQLITE_OK; if( p && p->inTrans==TRANS_WRITE ){ BtShared *pBt = p->pBt; assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); sqlite3BtreeEnter(p); | > > > > | > | 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 | int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ int rc = SQLITE_OK; if( p && p->inTrans==TRANS_WRITE ){ BtShared *pBt = p->pBt; assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); sqlite3BtreeEnter(p); if( op==SAVEPOINT_ROLLBACK ){ rc = saveAllCursors(pBt, 0, 0); } if( rc==SQLITE_OK ){ rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); } if( rc==SQLITE_OK ){ if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){ pBt->nPage = 0; } rc = newDatabase(pBt); pBt->nPage = get4byte(28 + pBt->pPage1->aData); |
︙ | ︙ |