Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Bug fix: When the database file grows in size during a transaction, make sure the last page of the file gets written to disk even if that page is on the free list and contains no data. Otherwise the disk file will be too small which can lead to database corruption in subsequent transactions. (CVS 643) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
36fc0add660f9f3676783765d37280aa |
User & Date: | drh 2002-06-25 14:43:58.000 |
Context
2002-06-25
| ||
14:46 | Fix a spelling error in the change log. (CVS 644) (check-in: 37cc40442b user: drh tags: trunk) | |
14:43 | Bug fix: When the database file grows in size during a transaction, make sure the last page of the file gets written to disk even if that page is on the free list and contains no data. Otherwise the disk file will be too small which can lead to database corruption in subsequent transactions. (CVS 643) (check-in: 36fc0add66 user: drh tags: trunk) | |
13:16 | Enhance the INTEGRITY_CHECK pragma to test the auxiliary database file in addition to the main database file. (CVS 642) (check-in: 52eba4de30 user: drh tags: trunk) | |
Changes
Changes to VERSION.
|
| | | 1 | 2.5.3 |
Changes to src/pager.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** ** @(#) $Id: pager.c,v 1.47 2002/06/25 14:43:58 drh Exp $ */ #include "sqliteInt.h" #include "pager.h" #include "os.h" #include <assert.h> #include <string.h> |
︙ | ︙ | |||
1191 1192 1193 1194 1195 1196 1197 | ** sqlitepager_dont_rollback() below, more than double the speed ** of large INSERT operations and quadruple the speed of large DELETEs. */ void sqlitepager_dont_write(Pager *pPager, Pgno pgno){ PgHdr *pPg; pPg = pager_lookup(pPager, pgno); if( pPg && pPg->dirty ){ | > > > > > > > > > > | > | 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 | ** sqlitepager_dont_rollback() below, more than double the speed ** of large INSERT operations and quadruple the speed of large DELETEs. */ void sqlitepager_dont_write(Pager *pPager, Pgno pgno){ PgHdr *pPg; pPg = pager_lookup(pPager, pgno); if( pPg && pPg->dirty ){ if( pPager->dbSize==(int)pPg->pgno && pPager->origDbSize<pPager->dbSize ){ /* If this pages is the last page in the file and the file has grown ** during the current transaction, then do NOT mark the page as clean. ** When the database file grows, we must make sure that the last page ** gets written at least once so that the disk file will be the correct ** size. If you do not write this page and the size of the file ** on the disk ends up being too small, that can lead to database ** corruption during the next transaction. */ }else{ pPg->dirty = 0; } } } /* ** A call to this routine tells the pager that if a rollback occurs, ** it is not necessary to restore the data on the given page. This ** means that the pager does not have to record the given page in the |
︙ | ︙ |
Changes to www/changes.tcl.
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 32 33 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Jun 24 (2.5.2)} { <li>Added the new <b>SQLITE_TEMP_MASTER</b> table which records the schema for temporary tables in the same way that <b>SQLITE_MASTER</b> does for persistent tables.</li> <li>Added an optimization to UNION ALL</li> <li>Fixed a bug in the processing of LEFT OUTER JOIN</li> | > > > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Jun 24 (2.5.3)} { <li>Bug fix: Database corruption can occur due to the optimization that was introduced in version 2.4.0 (checking [410]). The problem should now be fixed. The use of versions 2.4.0 through 2.5.2 is not recommended.</li> } chng {2002 Jun 24 (2.5.2)} { <li>Added the new <b>SQLITE_TEMP_MASTER</b> table which records the schema for temporary tables in the same way that <b>SQLITE_MASTER</b> does for persistent tables.</li> <li>Added an optimization to UNION ALL</li> <li>Fixed a bug in the processing of LEFT OUTER JOIN</li> |
︙ | ︙ |