From: drh Date: Mon, 10 May 2010 14:10:57 +0000 (+0000) Subject: If an ATTACH command files due to OP_JournalMode but still attaches the X-Git-Tag: version-3.7.2~393 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acd07818921cfffa70b677d61d0614ccb8c1429b;p=thirdparty%2Fsqlite.git If an ATTACH command files due to OP_JournalMode but still attaches the database, make sure VACUUM still detaches it when done. FossilOrigin-Name: 6ecdc7ba2b5e79e8b5862fb49cf6c2b99a40659a --- diff --git a/manifest b/manifest index a91bfec1ac..9cea8204c7 100644 --- 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----- diff --git a/manifest.uuid b/manifest.uuid index fd06dc3781..47a3d28a16 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0bdea4cfbd7832f2a00c01b93c92ba13d20139ef \ No newline at end of file +6ecdc7ba2b5e79e8b5862fb49cf6c2b99a40659a \ No newline at end of file diff --git a/src/vacuum.c b/src/vacuum.c index 2e3c899124..e95b4aa902 100644 --- a/src/vacuum.c +++ b/src/vacuum.c @@ -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