-C Fix\ssome\sissues\sin\sthe\snew\scode\son\sthis\sbranch\srelated\sto\sthe\shandling\sof\scorrupt\sdatabases.
-D 2014-10-24T18:43:57.313
+C Ensure\sthat\sthe\s"Any\sprior\scache\sentry\sassociated\swith\snewKey\sis\sguaranteed\snot\sto\sbe\spinned"\sguarantee\smade\sto\sxRekey\simplementations\sis\snot\sviolated.
+D 2014-10-24T20:57:03.500
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/backup.c a31809c65623cc41849b94d368917f8bb66e6a7e
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
F src/btmutex.c 49ca66250c7dfa844a4d4cb8272b87420d27d3a5
-F src/btree.c df15daf116e9ef1a7ff88257f6fb678ba385b5ea
+F src/btree.c 4decfb3b97d16afdd0e5a7e5f876af1f528e8a69
F src/btree.h a79aa6a71e7f1055f01052b7f821bd1c2dce95c8
F src/btreeInt.h 026d0129724e8f265fdc60d44ec240cf5a4e6179
F src/build.c 9dc2bd94347b878c89627000c92b0c8d97ec2919
F src/os_unix.c fb587121840f690101336879adfa6d0b2cd0e8c7
F src/os_win.c a019caaae2bcbbc0cc4c39af6e7d7e43d8426053
F src/os_win.h 09e751b20bbc107ffbd46e13555dc73576d88e21
-F src/pager.c d02833adf331a5913226595306d64731a3da33f6
+F src/pager.c 8d97b3633f098fef817656dcbf167ca904511d78
F src/pager.h d1eee3c3f741be247ce6d82752a178515fc8578b
F src/parse.y 5dfead8aed90cb0c7c1115898ee2266804daff45
F src/pcache.c 4121a0571c18581ee9f82f086d5e2030051ebd6a
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P eab8706dc47aa0a44caf73619de858397c3e0b4e
-R 8a34c36d0ed8bbbc0bb7360d0dc30d47
+P 19736dd9fbbb7e252c4f8715e2277d48ac41f5bc
+R c9d1872515b77329bc9fbfe4c8e91668
U dan
-Z 610a2814ec6cdf214c41e43dd2355678
+Z 931e363227b1144b3ac19bee87a82036
aPgFlags[i] = apNew[i]->pDbPage->flags;
}
for(i=0; i<nNew; i++){
- Pgno iGt = (i==0 ? 0 : apNew[i-1]->pgno);
- Pgno iMin = 0;
- u16 flags = 0;
- for(j=0; j<nNew; j++){
- Pgno iPgno = aPgno[j];
- if( iPgno>iGt && (iMin==0 || iPgno<iMin) ){
- iMin = iPgno;
- flags = aPgFlags[j];
+ int iBest = 0; /* aPgno[] index of page number to use */
+ Pgno pgno; /* Page number to use */
+ for(j=1; j<nNew; j++){
+ if( aPgno[j]<aPgno[iBest] ) iBest = j;
+ }
+ pgno = aPgno[iBest];
+ aPgno[iBest] = 0xffffffff;
+ if( iBest!=i ){
+ if( iBest>i ){
+ sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);
}
- }
- if( iMin==0 ){
- /* This case can only occur if aPgno[] contains duplicate page
- ** numbers. Which can only happen if the database is corrupt. */
- assert( CORRUPT_DB );
- rc = SQLITE_CORRUPT_BKPT;
- goto balance_cleanup;
- }else if( apNew[i]->pgno!=iMin ){
- sqlite3PagerRekey(apNew[i]->pDbPage, iMin, flags);
- apNew[i]->pgno = iMin;
+ sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);
+ apNew[i]->pgno = pgno;
}
}
** page number to iNew and sets the value of the PgHdr.flags field to
** the value passed as the third parameter.
*/
-void sqlite3PagerRekey(DbPage *pPage, Pgno iNew, u16 flags){
- PgHdr *pPg = (PgHdr*)pPage;
- assert( (flags & PGHDR_DIRTY) && (pPg->flags & PGHDR_DIRTY) );
- assert( !subjRequiresPage(pPg) );
+void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){
assert( pPg->pgno!=iNew );
pPg->flags = flags;
sqlite3PcacheMove(pPg, iNew);