]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When moving pages as part of autovacuum on an in-memory database, make sure
authordrh <drh@noemail.net>
Fri, 20 Nov 2009 18:48:35 +0000 (18:48 +0000)
committerdrh <drh@noemail.net>
Fri, 20 Nov 2009 18:48:35 +0000 (18:48 +0000)
that the source location is journalled so that a ROLLBACK can occur.
Part of the fix for ticket [564d412f15a00]

FossilOrigin-Name: 2f42f91fe65b0b21671936013df08037091f0cc6

manifest
manifest.uuid
src/pager.c

index c6aa4ae3cf439a0755927e02e2b15bdefaf238d3..93484f0c892efaa44d4c87028722797e240dac14 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,8 @@
-C Merge\sleaf\saccidentally\screated\sby\s[1c4984c62f].
-D 2009-11-20T10:23:13
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+C When\smoving\spages\sas\spart\sof\sautovacuum\son\san\sin-memory\sdatabase,\smake\ssure\nthat\sthe\ssource\slocation\sis\sjournalled\sso\sthat\sa\sROLLBACK\scan\soccur.\nPart\sof\sthe\sfix\sfor\sticket\s[564d412f15a00]
+D 2009-11-20T18:48:36
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 7f6c6aa7feeeb5e26e01b344161d9aa1b5d64177
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -150,7 +153,7 @@ F src/os_common.h 240c88b163b02c21a9f21f87d49678a0aa21ff30
 F src/os_os2.c 75a8c7b9a00a2cf1a65f9fa4afbc27d46634bb2f
 F src/os_unix.c bdd6ca0932dcb51c344081aff430bcc71c14db7f
 F src/os_win.c 5ffab20249a61e0625f869efe157fa009747039b
-F src/pager.c 4adc8baf93d50aa8e567173d27a37ff103106dab
+F src/pager.c 3c408c646d2a4adba5aedde9862ef69a27be68d8
 F src/pager.h 1b32faf2e578ac3e7bcf9c9d11217128261c5c54
 F src/parse.y f785d814562a14dc19202f61abb4372845f64752
 F src/pcache.c 3b079306376e0e04c0d3df40c0a4b750a1839310
@@ -772,7 +775,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 1c4984c62f393f41f9182ea82546c16d02efa46f c6ed7e2a73a7a65cfa914ffcad4f603b6b7a22a8
-R a4c740bd2d6cd6d5d405c025a9a5ce19
-U dan
-Z 4d4aca1de07a44952499e25e5fd5b2ca
+P cae949ce971ca216e0f8880b2f93866619fa05be
+R 2694b0c14575364b4e238f551e9978fe
+U drh
+Z 282c516102a118903c65953429c1dd9e
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFLBuSLoxKgR168RlERAuGTAJ9fd56Dwjiro+x2qI/XWq9kCYvkpgCeNshK
+ifMBSSRy91DoqTPyE1WJ+1s=
+=D02H
+-----END PGP SIGNATURE-----
index 24c2c498f15ed83670f8d8db92f9c5f2eeb275be..4bea41f162ef2d1517aefb7e837647c06359805b 100644 (file)
@@ -1 +1 @@
-cae949ce971ca216e0f8880b2f93866619fa05be
\ No newline at end of file
+2f42f91fe65b0b21671936013df08037091f0cc6
\ No newline at end of file
index 5ef579947d3b77ff273fe1a706f757d290bb6967..d781c25c06bb89678e77fdafa2365cd65e61b8be 100644 (file)
@@ -5101,6 +5101,14 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
 
   assert( pPg->nRef>0 );
 
+  /* In order to be able to rollback, an in-memory database must journal
+  ** the page we are moving from.
+  */
+  if( MEMDB ){
+    rc = sqlite3PagerWrite(pPg);
+    if( rc ) return rc;
+  }
+
   /* If the page being moved is dirty and has not been saved by the latest
   ** savepoint, then save the current contents of the page into the 
   ** sub-journal now. This is required to handle the following scenario:
@@ -5119,7 +5127,7 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
   ** one or more savepoint bitvecs. This is the reason this function
   ** may return SQLITE_NOMEM.
   */
-  if( pPg->flags&PGHDR_DIRTY 
+  if( pPg->flags&PGHDR_DIRTY
    && subjRequiresPage(pPg)
    && SQLITE_OK!=(rc = subjournalPage(pPg))
   ){