Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Auto-vacuum bugfix: Do not attempt to move a pointer-map page during auto-vacuum. (CVS 2044) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
bd50fbb5fecd1829c87e8ca72c458c71 |
User & Date: | danielk1977 2004-11-03 03:52:37.000 |
Context
2004-11-03
| ||
03:59 | The makefile now runs mkkeywordhash.c. Keywords that are unused are omitted from the keyword hash table. (CVS 2045) (check-in: 007aec1133 user: drh tags: trunk) | |
03:52 | Auto-vacuum bugfix: Do not attempt to move a pointer-map page during auto-vacuum. (CVS 2044) (check-in: bd50fbb5fe user: danielk1977 tags: trunk) | |
03:01 | Fix an auto-vacuum bug that occurs when a btree cell is promoted to the parent page during a delete. (CVS 2043) (check-in: b7d953e119 user: danielk1977 tags: trunk) | |
Changes
Changes to src/btree.c.
1 2 3 4 5 6 7 8 9 10 11 | /* ** 2004 April 6 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* ** 2004 April 6 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** $Id: btree.c,v 1.201 2004/11/03 03:52:37 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** For a detailed discussion of BTrees, refer to ** ** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3: ** "Sorting And Searching", pages 473-480. Addison-Wesley ** Publishing Company, Reading, Massachusetts. |
︙ | ︙ | |||
1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 | /* Figure out how many free-pages are in the database. If there are no ** free pages, then auto-vacuum is a no-op. */ nFreeList = get4byte(&pBt->pPage1->aData[36]); if( nFreeList==0 ) return SQLITE_OK; origDbSize = sqlite3pager_pagecount(pPager); finDbSize = origDbSize - nFreeList; TRACE(("AUTOVACUUM: Begin (db size %d->%d)\n", origDbSize, finDbSize)); /* Note: This is temporary code for use during development of auto-vacuum. ** ** Inspect the pointer map to make sure there are no root pages with a | > > > | 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 | /* Figure out how many free-pages are in the database. If there are no ** free pages, then auto-vacuum is a no-op. */ nFreeList = get4byte(&pBt->pPage1->aData[36]); if( nFreeList==0 ) return SQLITE_OK; /* TODO: This does not calculate finDbSize correctly for the case where ** pointer-map pages must be deallocated. */ origDbSize = sqlite3pager_pagecount(pPager); finDbSize = origDbSize - nFreeList; TRACE(("AUTOVACUUM: Begin (db size %d->%d)\n", origDbSize, finDbSize)); /* Note: This is temporary code for use during development of auto-vacuum. ** ** Inspect the pointer map to make sure there are no root pages with a |
︙ | ︙ | |||
1667 1668 1669 1670 1671 1672 1673 | ** to a free page earlier in the file (somewhere before finDbSize). */ for( iDbPage=finDbSize+1; iDbPage<=origDbSize; iDbPage++ ){ rc = ptrmapGet(pBt, iDbPage, &eType, &iPtrPage); if( rc!=SQLITE_OK ) goto autovacuum_out; assert( eType!=PTRMAP_ROOTPAGE ); | | | > | 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 | ** to a free page earlier in the file (somewhere before finDbSize). */ for( iDbPage=finDbSize+1; iDbPage<=origDbSize; iDbPage++ ){ rc = ptrmapGet(pBt, iDbPage, &eType, &iPtrPage); if( rc!=SQLITE_OK ) goto autovacuum_out; assert( eType!=PTRMAP_ROOTPAGE ); /* If iDbPage is a free or pointer map page, do not swap it. */ if( eType==PTRMAP_FREEPAGE || iDbPage==PTRMAP_PAGENO(pBt->pageSize, iDbPage) ){ continue; } rc = getPage(pBt, iDbPage, &pDbMemPage); if( rc!=SQLITE_OK ) goto autovacuum_out; pDbPage = pDbMemPage->aData; /* Find the next page in the free-list that is not already at the end |
︙ | ︙ |