]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not clear the internal "schema has changed" flag when performing a savepoint rollb...
authordan <dan@noemail.net>
Tue, 31 Aug 2010 16:25:19 +0000 (16:25 +0000)
committerdan <dan@noemail.net>
Tue, 31 Aug 2010 16:25:19 +0000 (16:25 +0000)
FossilOrigin-Name: c2a84430d3b6bb53b19af9294973575178290f93

manifest
manifest.uuid
src/vdbe.c
test/savepoint.test

index bedb7e031a8232258c4b2995d6604c9b8add5d52..1803ba18e84659ab4420856a4554bea8f5a244c8 100644 (file)
--- 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
index f117473d5fce4db00af6434171654beb55983856..fba18328e80bae12d71229174ba7b2981401938b 100644 (file)
@@ -1 +1 @@
-7c4f80ad272138cd4ab30455fae6a36498362933
\ No newline at end of file
+c2a84430d3b6bb53b19af9294973575178290f93
\ No newline at end of file
index 90c1d784e26f720f248ff7b022c4c34424f675cd..d7f66aee59e7d0933b551fa1ca826132c9b981ea 100644 (file)
@@ -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);
         }
       }
   
index 29f64f66ea9d8afe84c099cd459ec59c81842314..5b41c4579b8c0930e32247977c3d512317bb3328 100644 (file)
@@ -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