/ Check-in [01d97e5b]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:This is an experimental patch that ensures that all cursors have their position saved prior to starting a ROLLBACK TO.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | savepoint-rollback
Files: files | file ages | folders
SHA1: 01d97e5b6502b1811b52a681f445e1aaae6c0ee6
User & Date: drh 2017-02-02 00:46:55
Context
2017-02-02
20:32
Ensure that all cursors have their positions saved prior to rolling back a savepoint. check-in: 8e03a8e9 user: drh tags: trunk
02:28
Use the sqlite3_blob interface for reading values from the %_node shadow table in RTREE. This is a work in progress. There are still some minor problems. check-in: fc4917d7 user: drh tags: rtree-sqlite3_blob
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: 01d97e5b user: drh tags: savepoint-rollback
2017-02-01
23:06
Fix harmless compiler warnings seen with MSVC. check-in: 0c66cf0f user: mistachkin tags: trunk
Changes
Hide Diffs Unified Diffs Show Whitespace Changes Patch

Changes to src/btree.c.

4034
4035
4036
4037
4038
4039
4040




4041

4042
4043
4044
4045
4046
4047
4048
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);




    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);








>
>
>
>
|
>







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);