]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
If the root pages numbers of the internal schema are adjusted due to
authordrh <drh@noemail.net>
Fri, 20 Nov 2009 15:02:34 +0000 (15:02 +0000)
committerdrh <drh@noemail.net>
Fri, 20 Nov 2009 15:02:34 +0000 (15:02 +0000)
autovacuum on a DROP TABLE statement and that statement later aborts (for
example, due to an OOM error) then reset the internal schema at the
conclusion of the statement.
Partial fix for ticket [564d412f15a].

FossilOrigin-Name: e493b093f8ca722c3160b32a16fb615023978dc9

manifest
manifest.uuid
src/vdbe.c

index 2b90089a2e2e02123c9291ca1a6c21622d844ffd..dd42d07acf084b069b7bc2bf9495950ecf927ef5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Avoid\sunnecessary\spage\scache\sallocations\swhen\smove\sa\spage\swhile\sautovacuuming\s\nan\sin-memory\sdatabase,\ssince\sthe\sallocation\smight\sfail\smaking\sit\simpossible\sto\nrollback\sthe\stransaction.
-D 2009-11-20T13:18:14
+C If\sthe\sroot\spages\snumbers\sof\sthe\sinternal\sschema\sare\sadjusted\sdue\sto\s\nautovacuum\son\sa\sDROP\sTABLE\sstatement\sand\sthat\sstatement\slater\saborts\s(for\nexample,\sdue\sto\san\sOOM\serror)\sthen\sreset\sthe\sinternal\sschema\sat\sthe\nconclusion\sof\sthe\sstatement.\nPartial\sfix\sfor\sticket\s[564d412f15a].
+D 2009-11-20T15:02:34
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 7f6c6aa7feeeb5e26e01b344161d9aa1b5d64177
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -212,7 +212,7 @@ F src/update.c 8efeb09822886e33c265dd96d29a3d865ea6dcf2
 F src/utf.c dad16adcc0c35ef2437dca125a4b07419d361052
 F src/util.c ad4f03079ba0fe83590d1cc9197e8e4844e38592
 F src/vacuum.c 03309a08d549f9389cc3a3589afd4fadbdaf0679
-F src/vdbe.c 95fa2b51a4e602f74594bd9a0f679b7eaf44f9c0
+F src/vdbe.c 89d618dd0b4544e319dfab84db7356e7ee5aa430
 F src/vdbe.h 5f35750615163d1064052785b4a9f0eb004a720d
 F src/vdbeInt.h d7ea821ac7813c9bea0fe87558c35e07b2c7c44d
 F src/vdbeapi.c 17680ab7a75ec938c5ba039a6c87489d01faf2cb
@@ -775,14 +775,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 1cf0e3cc14bad22867e740736c2886dc1c4a48dc
-R 9f96df8d77aacbbe5a229c0e4825c7d0
+P 9a429349ccc2fa9acd28365a86578f602e87dafb
+R 98fcdb3bebf5cd6b5539291ec5159fa2
 U drh
-Z a83b32939b8fe43907602c37e80ee0e1
+Z d921d0e136eadcd906a3ecc76e7083b9
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFLBpcaoxKgR168RlERAjs+AJ9hMDoeCFoEOCx4N9Df2gvUGnw6XgCffKZD
-ZrQJ/Xtolyd5+f1xqb7zDs0=
-=mb8x
+iD8DBQFLBq+NoxKgR168RlERAuHoAJ4xcaWqbV9st4vnlQ8SbWQTMKFcKACgiAlE
+s6FOzlbJpHpo7yi7MLuMesw=
+=HELf
 -----END PGP SIGNATURE-----
index 5f8c3805218b682a18194ca83b8e1a57643a08fa..48d0393e3e2cd83e52252509a8eda52ee6bc8b0e 100644 (file)
@@ -1 +1 @@
-9a429349ccc2fa9acd28365a86578f602e87dafb
\ No newline at end of file
+e493b093f8ca722c3160b32a16fb615023978dc9
\ No newline at end of file
index 90dd90e67bb47f847589ef9396df856c1c5ba31e..17afa4e5834dd63a4eca15709e2d7d9abcc76f94 100644 (file)
@@ -543,6 +543,7 @@ int sqlite3VdbeExec(
   Op *pOp;                   /* Current operation */
   int rc = SQLITE_OK;        /* Value to return */
   sqlite3 *db = p->db;       /* The database */
+  u8 resetSchemaOnFault = 0; /* Reset schema after an error if true */
   u8 encoding = ENC(db);     /* The database encoding */
 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
   u8 checkProgress;          /* True if progress callbacks are enabled */
@@ -4430,6 +4431,7 @@ case OP_Destroy: {     /* out2-prerelease */
 #ifndef SQLITE_OMIT_AUTOVACUUM
     if( rc==SQLITE_OK && iMoved!=0 ){
       sqlite3RootPageMoved(&db->aDb[iDb], iMoved, pOp->p1);
+      resetSchemaOnFault = 1;
     }
 #endif
   }
@@ -5709,6 +5711,7 @@ vdbe_error_halt:
   sqlite3VdbeHalt(p);
   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
   rc = SQLITE_ERROR;
+  if( resetSchemaOnFault ) sqlite3ResetInternalSchema(db, 0);
 
   /* This is the only way out of this procedure.  We have to
   ** release the mutexes on btrees that were acquired at the