]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
If an ATTACH command files due to OP_JournalMode but still attaches the
authordrh <drh@noemail.net>
Mon, 10 May 2010 14:10:57 +0000 (14:10 +0000)
committerdrh <drh@noemail.net>
Mon, 10 May 2010 14:10:57 +0000 (14:10 +0000)
database, make sure VACUUM still detaches it when done.

FossilOrigin-Name: 6ecdc7ba2b5e79e8b5862fb49cf6c2b99a40659a

manifest
manifest.uuid
src/vacuum.c

index a91bfec1ac624e59a315a2326d0152753f93e6d2..9cea8204c73edba4408b215c64b88903995c092a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Enhance\sthe\sOP_JournalMode\sopcode\swith\san\signore-errors\soption\sand\suse\sthat\noption\sthe\sATTACH\scommand.
-D 2010-05-10T11:20:06
+C If\san\sATTACH\scommand\sfiles\sdue\sto\sOP_JournalMode\sbut\sstill\sattaches\sthe\ndatabase,\smake\ssure\sVACUUM\sstill\sdetaches\sit\swhen\sdone.
+D 2010-05-10T14:10:58
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -217,7 +217,7 @@ F src/trigger.c 8927588cb9e6d47f933b53bfe74200fbb504100d
 F src/update.c c0dc6b75ad28b76b619042d934f337b02acee208
 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685
 F src/util.c 32aebf04c10e51ad3977a928b7416bed671b620b
-F src/vacuum.c 90a32e098cf06c5524c76b21027ee7520a821065
+F src/vacuum.c b17355fc10cef0875626932ec2f1fa1deb0daa48
 F src/vdbe.c 066dab3af747cb56a8277b26695f88b17b189b3d
 F src/vdbe.h 471f6a3dcec4817ca33596fe7f6654d56c0e75f3
 F src/vdbeInt.h 19ebc8c2a2e938340051ee65af3f377fb99102d1
@@ -816,14 +816,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P be114bdf9bb98c7287f8cb54340c630b0c412e9d
-R 338d6602848868b4fdc5f43d8042cacf
+P 0bdea4cfbd7832f2a00c01b93c92ba13d20139ef
+R 9014c21dcf58ddf23dc85907a38f6c75
 U drh
-Z 84070859675575cea6f23c42561ae695
+Z d231509bf5d75d0a7182ae588ca4bb8b
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFL5+vqoxKgR168RlERAhAYAJ9X+wZ4rOhzhAxjTWIMsJCrOuKhnQCeMjaZ
-7HQKFwCzaUZuXQ/pI06hEvs=
-=kH/t
+iD4DBQFL6BP2oxKgR168RlERAignAJQNAle/gWkbKShnq3kcL+DtdcO2AJ9vguYT
+n1LeBzEa/iP6Gu/jqjlBKQ==
+=h4WY
 -----END PGP SIGNATURE-----
index fd06dc3781f7c01072517758d04bb44807702aab..47a3d28a16e356358813a674800944890fd9592e 100644 (file)
@@ -1 +1 @@
-0bdea4cfbd7832f2a00c01b93c92ba13d20139ef
\ No newline at end of file
+6ecdc7ba2b5e79e8b5862fb49cf6c2b99a40659a
\ No newline at end of file
index 2e3c89912489f8c2ebd1e1991aef23b6b14a9b08..e95b4aa90290edda180eb76bf22248a5552e5d6f 100644 (file)
@@ -103,7 +103,8 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
   void (*saved_xTrace)(void*,const char*);  /* Saved db->xTrace */
   Db *pDb = 0;            /* Database to detach at end of vacuum */
   int isMemDb;            /* True if vacuuming a :memory: database */
-  int nRes;
+  int nRes;               /* Bytes of reserved space at the end of each page */
+  int nDb;                /* Number of attached databases */
 
   if( !db->autoCommit ){
     sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
@@ -138,15 +139,18 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
   ** time to parse and run the PRAGMA to turn journalling off than it does
   ** to write the journal header file.
   */
+  nDb = db->nDb;
   if( sqlite3TempInMemory(db) ){
     zSql = "ATTACH ':memory:' AS vacuum_db;";
   }else{
     zSql = "ATTACH '' AS vacuum_db;";
   }
   rc = execSql(db, pzErrMsg, zSql);
+  if( db->nDb>nDb ){
+    pDb = &db->aDb[db->nDb-1];
+    assert( strcmp(pDb->zName,"vacuum_db")==0 );
+  }
   if( rc!=SQLITE_OK ) goto end_of_vacuum;
-  pDb = &db->aDb[db->nDb-1];
-  assert( strcmp(db->aDb[db->nDb-1].zName,"vacuum_db")==0 );
   pTemp = db->aDb[db->nDb-1].pBt;
 
   /* The call to execSql() to attach the temp database has left the file