From: dan Date: Thu, 27 Apr 2017 13:05:43 +0000 (+0000) Subject: If possible, delete the journal file when a database connection is closed. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0561247d074dd1f8cb80f7486a7da681d0bf78e1;p=thirdparty%2Fsqlite.git If possible, delete the journal file when a database connection is closed. FossilOrigin-Name: d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6 --- diff --git a/manifest b/manifest index 134a033d5c..e1c7caeb82 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Experimental\simplementation\sof\spessimistic\spage-level\slocking\sbased\son\nrollback\smode. -D 2017-04-26T20:45:00.409 +C If\spossible,\sdelete\sthe\sjournal\sfile\swhen\sa\sdatabase\sconnection\sis\sclosed. +D 2017-04-27T13:05:43.621 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6 @@ -389,7 +389,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c 30e2c43e4955db990e5b5a81e901f8aa74cc8820 F src/os_win.c 2a6c73eef01c51a048cc4ddccd57f981afbec18a F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c 80f36e7fa7413b227c8fefd9c23169984e648134308c4730681167cb54121384 +F src/pager.c 06b5d925ee44ce2dce1f8b55833312069377d6a9d4e8acfe466ad2767bd54d01 F src/pager.h 54f5321bc48768610a3a000d2f821fb849cbda35339abd185ceb5f214faf10bf F src/parse.y 0513387ce02fea97897d8caef82d45f347818593f24f1bdc48e0c530a8af122d F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870 @@ -1109,7 +1109,7 @@ F test/selectE.test a8730ca330fcf40ace158f134f4fe0eb00c7edbf F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3 F test/selectG.test e8600e379589e85e9fefd2fe4d44a4cdd63f6982 F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118 -F test/server2.test 68480691c8b16de757396fc43523329e0f275f53f48afa81d6362485ed7aa22f +F test/server2.test bdb66c32c1233b77195bcfac08f44d6cfed24cc4f44ffff8e825a5d8cc2bc624 F test/server3.test c33343f2f6bc23f2b4e2f047c3d083579f0cfac2795e0f1eb226ab34758967c0 F test/servercrash.test 816c132b26af008067cab2913783f67006d4003e3988f3f3ee1075742f6e0a6c F test/session.test 78fa2365e93d3663a6e933f86e7afc395adf18be @@ -1580,10 +1580,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 2d0b64316d66a362f5891ceb71a1fd8e4607732274b09b0a8472b97eef68ebc2 -R ba2951238a6a64860b2d30a7e3110580 -T *branch * server-edition -T *sym-server-edition * -T -sym-trunk * +P 64ecf7c7e512827e8a5a42f9f3ad92ff57ec868820e3943dbc74d5823f9a889d +R 2c66e9c685902346d0d00b9da82f87dd U dan -Z fdb999cd81f23109f6505ea72ca50eac +Z 084a9af7e4f3882f37830efa9cfd75a1 diff --git a/manifest.uuid b/manifest.uuid index 3b2427e063..e0e55a81f1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -64ecf7c7e512827e8a5a42f9f3ad92ff57ec868820e3943dbc74d5823f9a889d \ No newline at end of file +d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 7d8db16870..a52926eef2 100644 --- a/src/pager.c +++ b/src/pager.c @@ -4099,13 +4099,6 @@ int sqlite3PagerClose(Pager *pPager, sqlite3 *db){ (db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp) ); pPager->pWal = 0; -#endif -#ifdef SQLITE_SERVER_EDITION - if( pPager->pServer ){ - sqlite3ServerDisconnect(pPager->pServer, pPager->fd); - pPager->pServer = 0; - sqlite3_free(pPager->zJournal); - } #endif pager_reset(pPager); if( MEMDB ){ @@ -4123,10 +4116,24 @@ int sqlite3PagerClose(Pager *pPager, sqlite3 *db){ ** 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))); diff --git a/test/server2.test b/test/server2.test index b1a6fa067e..e52ce71644 100644 --- a/test/server2.test +++ b/test/server2.test @@ -94,8 +94,23 @@ 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