]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
If possible, delete the journal file when a database connection is closed.
authordan <dan@noemail.net>
Thu, 27 Apr 2017 13:05:43 +0000 (13:05 +0000)
committerdan <dan@noemail.net>
Thu, 27 Apr 2017 13:05:43 +0000 (13:05 +0000)
FossilOrigin-Name: d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6

manifest
manifest.uuid
src/pager.c
test/server2.test

index 134a033d5c230e8fc93ad81a017ecea9a24737b0..e1c7caeb8239af96da58243d60489415d2913388 100644 (file)
--- 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
index 3b2427e0633b90234dcd8f9830842c339eef777e..e0e55a81f1fa9e98fb7762996e33b8eda035feff 100644 (file)
@@ -1 +1 @@
-64ecf7c7e512827e8a5a42f9f3ad92ff57ec868820e3943dbc74d5823f9a889d
\ No newline at end of file
+d5b5326df25b85b1c3926cd693bcde1ca08e6e03b8aea151a82d222fc9c23dd6
\ No newline at end of file
index 7d8db16870b5020dfa31813a6b9fd2beba9d38b9..a52926eef2e84504752a58e85b042cfb226515d5 100644 (file)
@@ -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)));
index b1a6fa067ed2c4c85116e288ac2008c656b2aa53..e52ce71644841de8b8f887a4144c2c4c4d793cae 100644 (file)
@@ -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