Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | If possible, delete the journal file when a database connection is closed. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | server-edition |
Files: | files | file ages | folders |
SHA3-256: |
d5b5326df25b85b1c3926cd693bcde1c |
User & Date: | dan 2017-04-27 13:05:43.621 |
Context
2017-04-27
| ||
14:12 | Do not write master journal filenames into server-mode journal files. Use SQLITE_MUTEX_STATIC_APP1 to protect critical sections in server.c. (check-in: 3144ae40d2 user: dan tags: server-edition) | |
13:05 | If possible, delete the journal file when a database connection is closed. (check-in: d5b5326df2 user: dan tags: server-edition) | |
2017-04-26
| ||
20:45 | Experimental implementation of pessimistic page-level locking based on rollback mode. (check-in: 64ecf7c7e5 user: dan tags: server-edition) | |
Changes
Changes to src/pager.c.
︙ | ︙ | |||
4095 4096 4097 4098 4099 4100 4101 | pPager->exclusiveMode = 0; #ifndef SQLITE_OMIT_WAL assert( db || pPager->pWal==0 ); sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags, pPager->pageSize, (db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp) ); pPager->pWal = 0; | < < < < < < < > > > > > > > > > > > > > > | 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 | pPager->exclusiveMode = 0; #ifndef SQLITE_OMIT_WAL assert( db || pPager->pWal==0 ); sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags, pPager->pageSize, (db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp) ); pPager->pWal = 0; #endif pager_reset(pPager); if( MEMDB ){ pager_unlock(pPager); }else{ /* If it is open, sync the journal file before calling UnlockAndRollback. ** If this is not done, then an unsynced portion of the open journal ** file may be played back into the database. If a power failure occurs ** while this is happening, the database could become corrupt. ** ** If an error occurs while trying to sync the journal, shift the pager ** into the ERROR state. This causes UnlockAndRollback to unlock the ** database and close the journal file without attempting to roll it ** back or finalize it. The next database user will have to do hot-journal ** rollback before accessing the database file. */ if( isOpen(pPager->jfd) ){ if( pagerIsServer(pPager) ){ assert( pPager->journalMode==PAGER_JOURNALMODE_PERSIST ); pPager->journalMode = PAGER_JOURNALMODE_DELETE; /* If necessary, change the pager state so that the journal file ** is deleted by the call to pagerUnlockAndRollback() below. */ if( pPager->eState==PAGER_OPEN ) pPager->eState = PAGER_READER; } pager_error(pPager, pagerSyncHotJournal(pPager)); } pagerUnlockAndRollback(pPager); } #ifdef SQLITE_SERVER_EDITION if( pagerIsServer(pPager) ){ sqlite3ServerDisconnect(pPager->pServer, pPager->fd); pPager->pServer = 0; sqlite3_free(pPager->zJournal); } #endif sqlite3EndBenignMalloc(); enable_simulated_io_errors(); PAGERTRACE(("CLOSE %d\n", PAGERID(pPager))); IOTRACE(("CLOSE %p\n", pPager)) sqlite3OsClose(pPager->jfd); sqlite3OsClose(pPager->fd); sqlite3PageFree(pTmp); |
︙ | ︙ |
Changes to test/server2.test.
︙ | ︙ | |||
90 91 92 93 94 95 96 97 | # Transaction is automatically rolled back in this case. sqlite3_get_autocommit db2 } {1} do_test 2.8 { execsql COMMIT execsql { SELECT * FROM t1 } db2 } {1 2 5 6} | > > | > > > > > > > > > > > > > | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | # Transaction is automatically rolled back in this case. sqlite3_get_autocommit db2 } {1} do_test 2.8 { execsql COMMIT execsql { SELECT * FROM t1 } db2 } {1 2 5 6} db2 close #------------------------------------------------------------------------- # reset_db do_execsql_test 3.0 { CREATE TABLE t1(a, b); } do_test 3.1 { glob test.db* } {test.db-journal0 test.db test.db-hma} do_test 3.2 { db close glob test.db* } {test.db} finish_test |