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
This commit is contained in:
dan 2010-08-31 16:25:19 +00:00
parent 9977edc7c6
commit c311feec55
4 changed files with 31 additions and 8 deletions

@ -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

@ -1 +1 @@
7c4f80ad272138cd4ab30455fae6a36498362933
c2a84430d3b6bb53b19af9294973575178290f93

@ -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);
}
}

@ -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