From: dan Date: Tue, 31 Aug 2010 16:25:19 +0000 (+0000) Subject: Do not clear the internal "schema has changed" flag when performing a savepoint rollb... X-Git-Tag: experimental~91 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c311feec55598fef6f7acb35e9c8a529b6d0582a;p=thirdparty%2Fsqlite.git Do not clear the internal "schema has changed" flag when performing a savepoint rollback. The schema changes may not have taken place within the savepoint being rolled back. FossilOrigin-Name: c2a84430d3b6bb53b19af9294973575178290f93 --- diff --git a/manifest b/manifest index bedb7e031a..1803ba18e8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Changes\sto\scomments\sand\stype\snames\sin\srtree.c. -D 2010-08-31T15:54:21 +C Do\snot\sclear\sthe\sinternal\s"schema\shas\schanged"\sflag\swhen\sperforming\sa\ssavepoint\srollback.\sThe\sschema\schanges\smay\snot\shave\staken\splace\swithin\sthe\ssavepoint\sbeing\srolled\sback. +D 2010-08-31T16:25:20 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -222,7 +222,7 @@ F src/update.c 227e6cd512108b84f69421fc6c7aa1b83d60d6e0 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 F src/util.c 5f5f4db4e799224713582bb49124827b16aa8e54 F src/vacuum.c 241a8386727c1497eba4955933356dfba6ff8c9f -F src/vdbe.c 36d9521bfc257bc068ad0bdee8f341d96d858ff7 +F src/vdbe.c 41a186c0f29ee2e9fcd8754d7e792540f3c0db40 F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h a247bd5448039e83394bf4179975b2ae0092874c F src/vdbeapi.c bec07756e1b3ec5cd054ce8d32a80787763fd07e @@ -570,7 +570,7 @@ F test/rollback.test 1a83118ea6db4e7d8c10eaa63871b5e90502ffdc F test/rowhash.test 0bc1d31415e4575d10cacf31e1a66b5cc0f8be81 F test/rowid.test e58e0acef38b527ed1b0b70d3ada588f804af287 F test/rtree.test 0c8d9dd458d6824e59683c19ab2ffa9ef946f798 -F test/savepoint.test 992d6429b6bce16ac172f7431975044ceaeb0803 +F test/savepoint.test 2b6c154ef80d086da9eb7afd8579f782b98076fd F test/savepoint2.test 9b8543940572a2f01a18298c3135ad0c9f4f67d7 F test/savepoint3.test e328085853b14898d78ceea00dfe7db18bb6a9ec F test/savepoint4.test c8f8159ade6d2acd9128be61e1230f1c1edc6cc0 @@ -851,7 +851,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P c9fe0a2392ba4ae53d1dfcb986a67beeeb33519f -R 301d7abc2fe21cc4b65e2daa2d7c00af +P 7c4f80ad272138cd4ab30455fae6a36498362933 +R 9842f8753de011b5314161323062b619 U dan -Z eacbd5c90af2b71f9a06ae40a306d809 +Z 858a8b145c877bef8fc144001bc5b64b diff --git a/manifest.uuid b/manifest.uuid index f117473d5f..fba18328e8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7c4f80ad272138cd4ab30455fae6a36498362933 \ No newline at end of file +c2a84430d3b6bb53b19af9294973575178290f93 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 90c1d784e2..d7f66aee59 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2606,6 +2606,7 @@ case OP_Savepoint: { if( p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){ sqlite3ExpirePreparedStatements(db); sqlite3ResetInternalSchema(db, 0); + db->flags = (db->flags | SQLITE_InternChanges); } } diff --git a/test/savepoint.test b/test/savepoint.test index 29f64f66ea..5b41c4579b 100644 --- a/test/savepoint.test +++ b/test/savepoint.test @@ -1019,4 +1019,26 @@ do_multiclient_test tn { } {1 2 3 4} } +#------------------------------------------------------------------------- +# This next block of tests verifies that a problem reported on the mailing +# list has been resolved. At one point the second "CREATE TABLE t6" would +# fail as table t6 still existed in the internal cache of the db schema +# (even though it had been removed from the database by the ROLLBACK +# command). +# +do_execsql_test savepoint-17.1 { + BEGIN; + CREATE TABLE t6(a, b); + INSERT INTO t6 VALUES(1, 2); + SAVEPOINT one; + INSERT INTO t6 VALUES(3, 4); + ROLLBACK TO one; + SELECT * FROM t6; + ROLLBACK; +} {1 2} + +do_execsql_test savepoint-17.2 { + CREATE TABLE t6(a, b); +} {} + finish_test