mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Extend the code in memjournal.c so that it subsumes the role of journal.c. And (untested) can flush journal or statement journal files to disk after they grow to a specified size.
FossilOrigin-Name: e0b0b4316531fc8afa74b4882d9c74a91030ec69
This commit is contained in:
24
src/pager.c
24
src/pager.c
@@ -1724,7 +1724,7 @@ static void releaseAllSavepoints(Pager *pPager){
|
||||
for(ii=0; ii<pPager->nSavepoint; ii++){
|
||||
sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
|
||||
}
|
||||
if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){
|
||||
if( !pPager->exclusiveMode || sqlite3JournalIsInMemory(pPager->sjfd) ){
|
||||
sqlite3OsClose(pPager->sjfd);
|
||||
}
|
||||
sqlite3_free(pPager->aSavepoint);
|
||||
@@ -1962,8 +1962,8 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
|
||||
assert( !pagerUseWal(pPager) );
|
||||
|
||||
/* Finalize the journal file. */
|
||||
if( sqlite3IsMemJournal(pPager->jfd) ){
|
||||
assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY );
|
||||
if( sqlite3JournalIsInMemory(pPager->jfd) ){
|
||||
/* assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ); */
|
||||
sqlite3OsClose(pPager->jfd);
|
||||
}else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
|
||||
if( pPager->journalOff==0 ){
|
||||
@@ -1991,7 +1991,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
|
||||
** file should be closed and deleted. If this connection writes to
|
||||
** the database file, it will do so using an in-memory journal.
|
||||
*/
|
||||
int bDelete = (!pPager->tempFile && sqlite3JournalExists(pPager->jfd));
|
||||
int bDelete = (!pPager->tempFile&&!sqlite3JournalIsInMemory(pPager->jfd));
|
||||
assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE
|
||||
|| pPager->journalMode==PAGER_JOURNALMODE_MEMORY
|
||||
|| pPager->journalMode==PAGER_JOURNALMODE_WAL
|
||||
@@ -4578,18 +4578,8 @@ int sqlite3PagerOpen(
|
||||
int nUri = 0; /* Number of bytes of URI args at *zUri */
|
||||
|
||||
/* Figure out how much space is required for each journal file-handle
|
||||
** (there are two of them, the main journal and the sub-journal). This
|
||||
** is the maximum space required for an in-memory journal file handle
|
||||
** and a regular journal file-handle. Note that a "regular journal-handle"
|
||||
** may be a wrapper capable of caching the first portion of the journal
|
||||
** file in memory to implement the atomic-write optimization (see
|
||||
** source file journal.c).
|
||||
*/
|
||||
if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){
|
||||
journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
|
||||
}else{
|
||||
journalFileSize = ROUND8(sqlite3MemJournalSize());
|
||||
}
|
||||
** (there are two of them, the main journal and the sub-journal). */
|
||||
journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
|
||||
|
||||
/* Set the output variable to NULL in case an error occurs. */
|
||||
*ppPager = 0;
|
||||
@@ -6667,7 +6657,7 @@ int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
|
||||
if( op==SAVEPOINT_RELEASE ){
|
||||
if( nNew==0 && isOpen(pPager->sjfd) ){
|
||||
/* Only truncate if it is an in-memory sub-journal. */
|
||||
if( sqlite3IsMemJournal(pPager->sjfd) ){
|
||||
if( sqlite3JournalIsInMemory(pPager->sjfd) ){
|
||||
rc = sqlite3OsTruncate(pPager->sjfd, 0);
|
||||
assert( rc==SQLITE_OK );
|
||||
}
|
||||
|
Reference in New Issue
Block a user