Fossil SCM
Update SQLite to the 3.7.2 release candidate.
Commit
6fd2ff1b09a8468e761c02af630eb2bca07687b5
Parent
1e08452c6574e0a…
2 files changed
+39
-20
+3
-3
+39
-20
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | /****************************************************************************** |
| 2 | 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | -** version 3.7.1. By combining all the individual C code files into this | |
| 3 | +** version 3.7.2. By combining all the individual C code files into this | |
| 4 | 4 | ** single large file, the entire code can be compiled as a one translation |
| 5 | 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | 7 | ** of 5% are more are commonly seen when SQLite is compiled as a single |
| 8 | 8 | ** translation unit. |
| @@ -642,13 +642,13 @@ | ||
| 642 | 642 | ** |
| 643 | 643 | ** See also: [sqlite3_libversion()], |
| 644 | 644 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 645 | 645 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 646 | 646 | */ |
| 647 | -#define SQLITE_VERSION "3.7.1" | |
| 648 | -#define SQLITE_VERSION_NUMBER 3007001 | |
| 649 | -#define SQLITE_SOURCE_ID "2010-08-20 15:32:21 5523ecd32295c188e3bf5dbd57d92d2879461e32" | |
| 647 | +#define SQLITE_VERSION "3.7.2" | |
| 648 | +#define SQLITE_VERSION_NUMBER 3007002 | |
| 649 | +#define SQLITE_SOURCE_ID "2010-08-23 18:52:01 42537b60566f288167f1b5864a5435986838e3a3" | |
| 650 | 650 | |
| 651 | 651 | /* |
| 652 | 652 | ** CAPI3REF: Run-Time Library Version Numbers |
| 653 | 653 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 654 | 654 | ** |
| @@ -35310,17 +35310,18 @@ | ||
| 35310 | 35310 | ** that the page is either dirty or still matches the calculated page-hash. |
| 35311 | 35311 | */ |
| 35312 | 35312 | #define CHECK_PAGE(x) checkPage(x) |
| 35313 | 35313 | static void checkPage(PgHdr *pPg){ |
| 35314 | 35314 | Pager *pPager = pPg->pPager; |
| 35315 | - assert( !pPg->pageHash || pPager->errCode | |
| 35316 | - || (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); | |
| 35315 | + assert( pPager->eState!=PAGER_ERROR ); | |
| 35316 | + assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); | |
| 35317 | 35317 | } |
| 35318 | 35318 | |
| 35319 | 35319 | #else |
| 35320 | 35320 | #define pager_datahash(X,Y) 0 |
| 35321 | 35321 | #define pager_pagehash(X) 0 |
| 35322 | +#define pager_set_pagehash(X) | |
| 35322 | 35323 | #define CHECK_PAGE(x) |
| 35323 | 35324 | #endif /* SQLITE_CHECK_PAGES */ |
| 35324 | 35325 | |
| 35325 | 35326 | /* |
| 35326 | 35327 | ** When this is called the journal file for pager pPager must be open. |
| @@ -36086,15 +36087,23 @@ | ||
| 36086 | 36087 | sqlite3OsClose(pPager->jfd); |
| 36087 | 36088 | if( !pPager->tempFile ){ |
| 36088 | 36089 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); |
| 36089 | 36090 | } |
| 36090 | 36091 | } |
| 36092 | + } | |
| 36091 | 36093 | |
| 36092 | 36094 | #ifdef SQLITE_CHECK_PAGES |
| 36093 | - sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); | |
| 36095 | + sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); | |
| 36096 | + if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){ | |
| 36097 | + PgHdr *p = pager_lookup(pPager, 1); | |
| 36098 | + if( p ){ | |
| 36099 | + p->pageHash = 0; | |
| 36100 | + sqlite3PagerUnref(p); | |
| 36101 | + } | |
| 36102 | + } | |
| 36094 | 36103 | #endif |
| 36095 | - } | |
| 36104 | + | |
| 36096 | 36105 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 36097 | 36106 | pPager->pInJournal = 0; |
| 36098 | 36107 | pPager->nRec = 0; |
| 36099 | 36108 | sqlite3PcacheCleanAll(pPager->pPCache); |
| 36100 | 36109 | sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); |
| @@ -36437,13 +36446,12 @@ | ||
| 36437 | 36446 | ** database corruption may ensue. |
| 36438 | 36447 | */ |
| 36439 | 36448 | assert( !pagerUseWal(pPager) ); |
| 36440 | 36449 | sqlite3PcacheMakeClean(pPg); |
| 36441 | 36450 | } |
| 36442 | -#ifdef SQLITE_CHECK_PAGES | |
| 36443 | - pPg->pageHash = pager_pagehash(pPg); | |
| 36444 | -#endif | |
| 36451 | + pager_set_pagehash(pPg); | |
| 36452 | + | |
| 36445 | 36453 | /* If this was page 1, then restore the value of Pager.dbFileVers. |
| 36446 | 36454 | ** Do this before any decoding. */ |
| 36447 | 36455 | if( pgno==1 ){ |
| 36448 | 36456 | memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); |
| 36449 | 36457 | } |
| @@ -37078,10 +37086,18 @@ | ||
| 37078 | 37086 | PgHdr *p; |
| 37079 | 37087 | for(p=pList; p; p=p->pDirty){ |
| 37080 | 37088 | sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData); |
| 37081 | 37089 | } |
| 37082 | 37090 | } |
| 37091 | + | |
| 37092 | +#ifdef SQLITE_CHECK_PAGES | |
| 37093 | + { | |
| 37094 | + PgHdr *p; | |
| 37095 | + for(p=pList; p; p=p->pDirty) pager_set_pagehash(p); | |
| 37096 | + } | |
| 37097 | +#endif | |
| 37098 | + | |
| 37083 | 37099 | return rc; |
| 37084 | 37100 | } |
| 37085 | 37101 | |
| 37086 | 37102 | /* |
| 37087 | 37103 | ** Begin a read transaction on the WAL. |
| @@ -38096,13 +38112,11 @@ | ||
| 38096 | 38112 | PAGER_INCR(sqlite3_pager_writedb_count); |
| 38097 | 38113 | PAGER_INCR(pPager->nWrite); |
| 38098 | 38114 | }else{ |
| 38099 | 38115 | PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); |
| 38100 | 38116 | } |
| 38101 | -#ifdef SQLITE_CHECK_PAGES | |
| 38102 | - pList->pageHash = pager_pagehash(pList); | |
| 38103 | -#endif | |
| 38117 | + pager_set_pagehash(pList); | |
| 38104 | 38118 | pList = pList->pDirty; |
| 38105 | 38119 | } |
| 38106 | 38120 | |
| 38107 | 38121 | return rc; |
| 38108 | 38122 | } |
| @@ -39086,13 +39100,11 @@ | ||
| 39086 | 39100 | rc = readDbPage(pPg); |
| 39087 | 39101 | if( rc!=SQLITE_OK ){ |
| 39088 | 39102 | goto pager_acquire_err; |
| 39089 | 39103 | } |
| 39090 | 39104 | } |
| 39091 | -#ifdef SQLITE_CHECK_PAGES | |
| 39092 | - pPg->pageHash = pager_pagehash(pPg); | |
| 39093 | -#endif | |
| 39105 | + pager_set_pagehash(pPg); | |
| 39094 | 39106 | } |
| 39095 | 39107 | |
| 39096 | 39108 | return SQLITE_OK; |
| 39097 | 39109 | |
| 39098 | 39110 | pager_acquire_err: |
| @@ -39586,13 +39598,11 @@ | ||
| 39586 | 39598 | Pager *pPager = pPg->pPager; |
| 39587 | 39599 | if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ |
| 39588 | 39600 | PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); |
| 39589 | 39601 | IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) |
| 39590 | 39602 | pPg->flags |= PGHDR_DONT_WRITE; |
| 39591 | -#ifdef SQLITE_CHECK_PAGES | |
| 39592 | - pPg->pageHash = pager_pagehash(pPg); | |
| 39593 | -#endif | |
| 39603 | + pager_set_pagehash(pPg); | |
| 39594 | 39604 | } |
| 39595 | 39605 | } |
| 39596 | 39606 | |
| 39597 | 39607 | /* |
| 39598 | 39608 | ** This routine is called to increment the value of the database file |
| @@ -45250,15 +45260,20 @@ | ||
| 45250 | 45260 | #ifndef SQLITE_OMIT_AUTOVACUUM |
| 45251 | 45261 | /* |
| 45252 | 45262 | ** Given a page number of a regular database page, return the page |
| 45253 | 45263 | ** number for the pointer-map page that contains the entry for the |
| 45254 | 45264 | ** input page number. |
| 45265 | +** | |
| 45266 | +** Return 0 (not a valid page) for pgno==1 since there is | |
| 45267 | +** no pointer map associated with page 1. The integrity_check logic | |
| 45268 | +** requires that ptrmapPageno(*,1)!=1. | |
| 45255 | 45269 | */ |
| 45256 | 45270 | static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ |
| 45257 | 45271 | int nPagesPerMapPage; |
| 45258 | 45272 | Pgno iPtrMap, ret; |
| 45259 | 45273 | assert( sqlite3_mutex_held(pBt->mutex) ); |
| 45274 | + if( pgno<2 ) return 0; | |
| 45260 | 45275 | nPagesPerMapPage = (pBt->usableSize/5)+1; |
| 45261 | 45276 | iPtrMap = (pgno-2)/nPagesPerMapPage; |
| 45262 | 45277 | ret = (iPtrMap*nPagesPerMapPage) + 2; |
| 45263 | 45278 | if( ret==PENDING_BYTE_PAGE(pBt) ){ |
| 45264 | 45279 | ret++; |
| @@ -49322,10 +49337,14 @@ | ||
| 49322 | 49337 | } |
| 49323 | 49338 | if( k==0 ){ |
| 49324 | 49339 | if( !pPrevTrunk ){ |
| 49325 | 49340 | memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); |
| 49326 | 49341 | }else{ |
| 49342 | + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); | |
| 49343 | + if( rc!=SQLITE_OK ){ | |
| 49344 | + goto end_allocate_page; | |
| 49345 | + } | |
| 49327 | 49346 | memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); |
| 49328 | 49347 | } |
| 49329 | 49348 | }else{ |
| 49330 | 49349 | /* The trunk page is required by the caller but it contains |
| 49331 | 49350 | ** pointers to free-list leaves. The first leaf becomes a trunk |
| 49332 | 49351 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.7.1. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a one translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% are more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -642,13 +642,13 @@ | |
| 642 | ** |
| 643 | ** See also: [sqlite3_libversion()], |
| 644 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 645 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 646 | */ |
| 647 | #define SQLITE_VERSION "3.7.1" |
| 648 | #define SQLITE_VERSION_NUMBER 3007001 |
| 649 | #define SQLITE_SOURCE_ID "2010-08-20 15:32:21 5523ecd32295c188e3bf5dbd57d92d2879461e32" |
| 650 | |
| 651 | /* |
| 652 | ** CAPI3REF: Run-Time Library Version Numbers |
| 653 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 654 | ** |
| @@ -35310,17 +35310,18 @@ | |
| 35310 | ** that the page is either dirty or still matches the calculated page-hash. |
| 35311 | */ |
| 35312 | #define CHECK_PAGE(x) checkPage(x) |
| 35313 | static void checkPage(PgHdr *pPg){ |
| 35314 | Pager *pPager = pPg->pPager; |
| 35315 | assert( !pPg->pageHash || pPager->errCode |
| 35316 | || (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); |
| 35317 | } |
| 35318 | |
| 35319 | #else |
| 35320 | #define pager_datahash(X,Y) 0 |
| 35321 | #define pager_pagehash(X) 0 |
| 35322 | #define CHECK_PAGE(x) |
| 35323 | #endif /* SQLITE_CHECK_PAGES */ |
| 35324 | |
| 35325 | /* |
| 35326 | ** When this is called the journal file for pager pPager must be open. |
| @@ -36086,15 +36087,23 @@ | |
| 36086 | sqlite3OsClose(pPager->jfd); |
| 36087 | if( !pPager->tempFile ){ |
| 36088 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); |
| 36089 | } |
| 36090 | } |
| 36091 | |
| 36092 | #ifdef SQLITE_CHECK_PAGES |
| 36093 | sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); |
| 36094 | #endif |
| 36095 | } |
| 36096 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 36097 | pPager->pInJournal = 0; |
| 36098 | pPager->nRec = 0; |
| 36099 | sqlite3PcacheCleanAll(pPager->pPCache); |
| 36100 | sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); |
| @@ -36437,13 +36446,12 @@ | |
| 36437 | ** database corruption may ensue. |
| 36438 | */ |
| 36439 | assert( !pagerUseWal(pPager) ); |
| 36440 | sqlite3PcacheMakeClean(pPg); |
| 36441 | } |
| 36442 | #ifdef SQLITE_CHECK_PAGES |
| 36443 | pPg->pageHash = pager_pagehash(pPg); |
| 36444 | #endif |
| 36445 | /* If this was page 1, then restore the value of Pager.dbFileVers. |
| 36446 | ** Do this before any decoding. */ |
| 36447 | if( pgno==1 ){ |
| 36448 | memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); |
| 36449 | } |
| @@ -37078,10 +37086,18 @@ | |
| 37078 | PgHdr *p; |
| 37079 | for(p=pList; p; p=p->pDirty){ |
| 37080 | sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData); |
| 37081 | } |
| 37082 | } |
| 37083 | return rc; |
| 37084 | } |
| 37085 | |
| 37086 | /* |
| 37087 | ** Begin a read transaction on the WAL. |
| @@ -38096,13 +38112,11 @@ | |
| 38096 | PAGER_INCR(sqlite3_pager_writedb_count); |
| 38097 | PAGER_INCR(pPager->nWrite); |
| 38098 | }else{ |
| 38099 | PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); |
| 38100 | } |
| 38101 | #ifdef SQLITE_CHECK_PAGES |
| 38102 | pList->pageHash = pager_pagehash(pList); |
| 38103 | #endif |
| 38104 | pList = pList->pDirty; |
| 38105 | } |
| 38106 | |
| 38107 | return rc; |
| 38108 | } |
| @@ -39086,13 +39100,11 @@ | |
| 39086 | rc = readDbPage(pPg); |
| 39087 | if( rc!=SQLITE_OK ){ |
| 39088 | goto pager_acquire_err; |
| 39089 | } |
| 39090 | } |
| 39091 | #ifdef SQLITE_CHECK_PAGES |
| 39092 | pPg->pageHash = pager_pagehash(pPg); |
| 39093 | #endif |
| 39094 | } |
| 39095 | |
| 39096 | return SQLITE_OK; |
| 39097 | |
| 39098 | pager_acquire_err: |
| @@ -39586,13 +39598,11 @@ | |
| 39586 | Pager *pPager = pPg->pPager; |
| 39587 | if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ |
| 39588 | PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); |
| 39589 | IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) |
| 39590 | pPg->flags |= PGHDR_DONT_WRITE; |
| 39591 | #ifdef SQLITE_CHECK_PAGES |
| 39592 | pPg->pageHash = pager_pagehash(pPg); |
| 39593 | #endif |
| 39594 | } |
| 39595 | } |
| 39596 | |
| 39597 | /* |
| 39598 | ** This routine is called to increment the value of the database file |
| @@ -45250,15 +45260,20 @@ | |
| 45250 | #ifndef SQLITE_OMIT_AUTOVACUUM |
| 45251 | /* |
| 45252 | ** Given a page number of a regular database page, return the page |
| 45253 | ** number for the pointer-map page that contains the entry for the |
| 45254 | ** input page number. |
| 45255 | */ |
| 45256 | static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ |
| 45257 | int nPagesPerMapPage; |
| 45258 | Pgno iPtrMap, ret; |
| 45259 | assert( sqlite3_mutex_held(pBt->mutex) ); |
| 45260 | nPagesPerMapPage = (pBt->usableSize/5)+1; |
| 45261 | iPtrMap = (pgno-2)/nPagesPerMapPage; |
| 45262 | ret = (iPtrMap*nPagesPerMapPage) + 2; |
| 45263 | if( ret==PENDING_BYTE_PAGE(pBt) ){ |
| 45264 | ret++; |
| @@ -49322,10 +49337,14 @@ | |
| 49322 | } |
| 49323 | if( k==0 ){ |
| 49324 | if( !pPrevTrunk ){ |
| 49325 | memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); |
| 49326 | }else{ |
| 49327 | memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); |
| 49328 | } |
| 49329 | }else{ |
| 49330 | /* The trunk page is required by the caller but it contains |
| 49331 | ** pointers to free-list leaves. The first leaf becomes a trunk |
| 49332 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.7.2. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a one translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% are more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -642,13 +642,13 @@ | |
| 642 | ** |
| 643 | ** See also: [sqlite3_libversion()], |
| 644 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 645 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 646 | */ |
| 647 | #define SQLITE_VERSION "3.7.2" |
| 648 | #define SQLITE_VERSION_NUMBER 3007002 |
| 649 | #define SQLITE_SOURCE_ID "2010-08-23 18:52:01 42537b60566f288167f1b5864a5435986838e3a3" |
| 650 | |
| 651 | /* |
| 652 | ** CAPI3REF: Run-Time Library Version Numbers |
| 653 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 654 | ** |
| @@ -35310,17 +35310,18 @@ | |
| 35310 | ** that the page is either dirty or still matches the calculated page-hash. |
| 35311 | */ |
| 35312 | #define CHECK_PAGE(x) checkPage(x) |
| 35313 | static void checkPage(PgHdr *pPg){ |
| 35314 | Pager *pPager = pPg->pPager; |
| 35315 | assert( pPager->eState!=PAGER_ERROR ); |
| 35316 | assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); |
| 35317 | } |
| 35318 | |
| 35319 | #else |
| 35320 | #define pager_datahash(X,Y) 0 |
| 35321 | #define pager_pagehash(X) 0 |
| 35322 | #define pager_set_pagehash(X) |
| 35323 | #define CHECK_PAGE(x) |
| 35324 | #endif /* SQLITE_CHECK_PAGES */ |
| 35325 | |
| 35326 | /* |
| 35327 | ** When this is called the journal file for pager pPager must be open. |
| @@ -36086,15 +36087,23 @@ | |
| 36087 | sqlite3OsClose(pPager->jfd); |
| 36088 | if( !pPager->tempFile ){ |
| 36089 | rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); |
| 36090 | } |
| 36091 | } |
| 36092 | } |
| 36093 | |
| 36094 | #ifdef SQLITE_CHECK_PAGES |
| 36095 | sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); |
| 36096 | if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){ |
| 36097 | PgHdr *p = pager_lookup(pPager, 1); |
| 36098 | if( p ){ |
| 36099 | p->pageHash = 0; |
| 36100 | sqlite3PagerUnref(p); |
| 36101 | } |
| 36102 | } |
| 36103 | #endif |
| 36104 | |
| 36105 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 36106 | pPager->pInJournal = 0; |
| 36107 | pPager->nRec = 0; |
| 36108 | sqlite3PcacheCleanAll(pPager->pPCache); |
| 36109 | sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); |
| @@ -36437,13 +36446,12 @@ | |
| 36446 | ** database corruption may ensue. |
| 36447 | */ |
| 36448 | assert( !pagerUseWal(pPager) ); |
| 36449 | sqlite3PcacheMakeClean(pPg); |
| 36450 | } |
| 36451 | pager_set_pagehash(pPg); |
| 36452 | |
| 36453 | /* If this was page 1, then restore the value of Pager.dbFileVers. |
| 36454 | ** Do this before any decoding. */ |
| 36455 | if( pgno==1 ){ |
| 36456 | memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); |
| 36457 | } |
| @@ -37078,10 +37086,18 @@ | |
| 37086 | PgHdr *p; |
| 37087 | for(p=pList; p; p=p->pDirty){ |
| 37088 | sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData); |
| 37089 | } |
| 37090 | } |
| 37091 | |
| 37092 | #ifdef SQLITE_CHECK_PAGES |
| 37093 | { |
| 37094 | PgHdr *p; |
| 37095 | for(p=pList; p; p=p->pDirty) pager_set_pagehash(p); |
| 37096 | } |
| 37097 | #endif |
| 37098 | |
| 37099 | return rc; |
| 37100 | } |
| 37101 | |
| 37102 | /* |
| 37103 | ** Begin a read transaction on the WAL. |
| @@ -38096,13 +38112,11 @@ | |
| 38112 | PAGER_INCR(sqlite3_pager_writedb_count); |
| 38113 | PAGER_INCR(pPager->nWrite); |
| 38114 | }else{ |
| 38115 | PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); |
| 38116 | } |
| 38117 | pager_set_pagehash(pList); |
| 38118 | pList = pList->pDirty; |
| 38119 | } |
| 38120 | |
| 38121 | return rc; |
| 38122 | } |
| @@ -39086,13 +39100,11 @@ | |
| 39100 | rc = readDbPage(pPg); |
| 39101 | if( rc!=SQLITE_OK ){ |
| 39102 | goto pager_acquire_err; |
| 39103 | } |
| 39104 | } |
| 39105 | pager_set_pagehash(pPg); |
| 39106 | } |
| 39107 | |
| 39108 | return SQLITE_OK; |
| 39109 | |
| 39110 | pager_acquire_err: |
| @@ -39586,13 +39598,11 @@ | |
| 39598 | Pager *pPager = pPg->pPager; |
| 39599 | if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ |
| 39600 | PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); |
| 39601 | IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) |
| 39602 | pPg->flags |= PGHDR_DONT_WRITE; |
| 39603 | pager_set_pagehash(pPg); |
| 39604 | } |
| 39605 | } |
| 39606 | |
| 39607 | /* |
| 39608 | ** This routine is called to increment the value of the database file |
| @@ -45250,15 +45260,20 @@ | |
| 45260 | #ifndef SQLITE_OMIT_AUTOVACUUM |
| 45261 | /* |
| 45262 | ** Given a page number of a regular database page, return the page |
| 45263 | ** number for the pointer-map page that contains the entry for the |
| 45264 | ** input page number. |
| 45265 | ** |
| 45266 | ** Return 0 (not a valid page) for pgno==1 since there is |
| 45267 | ** no pointer map associated with page 1. The integrity_check logic |
| 45268 | ** requires that ptrmapPageno(*,1)!=1. |
| 45269 | */ |
| 45270 | static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ |
| 45271 | int nPagesPerMapPage; |
| 45272 | Pgno iPtrMap, ret; |
| 45273 | assert( sqlite3_mutex_held(pBt->mutex) ); |
| 45274 | if( pgno<2 ) return 0; |
| 45275 | nPagesPerMapPage = (pBt->usableSize/5)+1; |
| 45276 | iPtrMap = (pgno-2)/nPagesPerMapPage; |
| 45277 | ret = (iPtrMap*nPagesPerMapPage) + 2; |
| 45278 | if( ret==PENDING_BYTE_PAGE(pBt) ){ |
| 45279 | ret++; |
| @@ -49322,10 +49337,14 @@ | |
| 49337 | } |
| 49338 | if( k==0 ){ |
| 49339 | if( !pPrevTrunk ){ |
| 49340 | memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); |
| 49341 | }else{ |
| 49342 | rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); |
| 49343 | if( rc!=SQLITE_OK ){ |
| 49344 | goto end_allocate_page; |
| 49345 | } |
| 49346 | memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); |
| 49347 | } |
| 49348 | }else{ |
| 49349 | /* The trunk page is required by the caller but it contains |
| 49350 | ** pointers to free-list leaves. The first leaf becomes a trunk |
| 49351 |
+3
-3
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -105,13 +105,13 @@ | ||
| 105 | 105 | ** |
| 106 | 106 | ** See also: [sqlite3_libversion()], |
| 107 | 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | 109 | */ |
| 110 | -#define SQLITE_VERSION "3.7.1" | |
| 111 | -#define SQLITE_VERSION_NUMBER 3007001 | |
| 112 | -#define SQLITE_SOURCE_ID "2010-08-20 15:32:21 5523ecd32295c188e3bf5dbd57d92d2879461e32" | |
| 110 | +#define SQLITE_VERSION "3.7.2" | |
| 111 | +#define SQLITE_VERSION_NUMBER 3007002 | |
| 112 | +#define SQLITE_SOURCE_ID "2010-08-23 18:52:01 42537b60566f288167f1b5864a5435986838e3a3" | |
| 113 | 113 | |
| 114 | 114 | /* |
| 115 | 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | 117 | ** |
| 118 | 118 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -105,13 +105,13 @@ | |
| 105 | ** |
| 106 | ** See also: [sqlite3_libversion()], |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.1" |
| 111 | #define SQLITE_VERSION_NUMBER 3007001 |
| 112 | #define SQLITE_SOURCE_ID "2010-08-20 15:32:21 5523ecd32295c188e3bf5dbd57d92d2879461e32" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| 118 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -105,13 +105,13 @@ | |
| 105 | ** |
| 106 | ** See also: [sqlite3_libversion()], |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.2" |
| 111 | #define SQLITE_VERSION_NUMBER 3007002 |
| 112 | #define SQLITE_SOURCE_ID "2010-08-23 18:52:01 42537b60566f288167f1b5864a5435986838e3a3" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| 118 |