From: dan Date: Wed, 13 Feb 2019 08:40:34 +0000 (+0000) Subject: Fix a problem with OPEN_REUSE_SCHEMA connections reloading the temp schema. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d62150108af8f0d98872651168d7e845650e1c50;p=thirdparty%2Fsqlite.git Fix a problem with OPEN_REUSE_SCHEMA connections reloading the temp schema. FossilOrigin-Name: 7c2ec2d4cfcda9c0aa6d57bd9a12ff98b78e648533d49da27f91d5a37bf1e001 --- diff --git a/manifest b/manifest index 68cd624384..77f938b151 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stests\sfor\screating\stemp\sschema\sobjects\swith\sSQLITE_OPEN_REUSE_SCHEMA\sconnections. -D 2019-02-12T20:58:34.269 +C Fix\sa\sproblem\swith\sOPEN_REUSE_SCHEMA\sconnections\sreloading\sthe\stemp\sschema. +D 2019-02-13T08:40:34.055 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 56456706c4da271309914c756c9c8ea537685f1c79f8785afa72f968d6810482 @@ -458,7 +458,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 18046bf14f0e3fa294ef3f7c2dc30ca7e95f3ac11ec222ad906e40b150051bde F src/btree.h 63b94fb38ce571c15eb6a3661815561b501d23d5948b2d1e951fbd7a2d04e8d3 F src/btreeInt.h cd82f0f08886078bf99b29e1a7045960b1ca5d9d5829c38607e1299c508eaf00 -F src/build.c 70fa06d96fd4265652921c52c40e664e3b6f7d1b8fce9702976dff56a0117e81 +F src/build.c 98beafec3e352c5f1d5883b7a764854cf3f8bb9f42fdc89ae9b90ff73ce3d9b5 F src/callback.c eaa832c5b8b6f64e9ca78f61c3d9034a6a4d697ae426dbbc7de1c760045f6dc3 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 109e58d00f62e8e71ee1eb5944ac18b90171c928ab2e082e058056e1137cc20b @@ -1227,8 +1227,8 @@ F test/releasetest.tcl 7712811e0f4e2f198ec786cb2e1352b3793d7395f48a3cceef0572d88 F test/resetdb.test 8062cf10a09d8c048f8de7711e94571c38b38168db0e5877ba7561789e5eeb2b F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/reuse1.test 5eee2efc7ee559fa9bdd214e35b351d5a949ad466c1671c256fee1f133e7eeea -F test/reuse2.test 03216f8879c6cff34614237bbf28ebea8433d7dabd62419458d4e16279ac6fb3 -F test/reuse3.test 9b4752890ef8949fd3e50bf919937b485a449381a80d62af0ce9c8cf64193ef4 +F test/reuse2.test 350a01c5600336be4d60fedee7932ea5f2c65b8698ac54f889100551d44ab825 +F test/reuse3.test 4eab99d5762c74422f24664680f4e482edd79f593919ffa3f18368735ee3b944 F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa F test/rollback2.test bc868d57899dc6972e2b4483faae0e03365a0556941474eec487ae21d8d38bb6 F test/rollbackfault.test 0e646aeab8840c399cfbfa43daab46fd609cf04a @@ -1808,7 +1808,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P ea611d7cba604dc901c8088ccfa13367a5ee75f9499ea8d8b62a590daac2eae0 -R 624cf2ef39b4bc5553e92a01f0394bcf +P 8c07b609fccc43795498b942c733896defd8887e4ddd9e0ef48c124dfcf9fd7f +R 765b6e0bdb51edd5b378e5259607a03d U dan -Z 6b6c8fa6adc2da0fcdac53dd75baa86e +Z c13672cd797193c9057764ed19647533 diff --git a/manifest.uuid b/manifest.uuid index eec45f0492..c092348ad2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8c07b609fccc43795498b942c733896defd8887e4ddd9e0ef48c124dfcf9fd7f \ No newline at end of file +7c2ec2d4cfcda9c0aa6d57bd9a12ff98b78e648533d49da27f91d5a37bf1e001 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 9c17cf776f..3960fa2fb1 100644 --- a/src/build.c +++ b/src/build.c @@ -315,10 +315,13 @@ Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ assert( sqlite3SchemaMutexHeld(db, j, 0) ); if( IsReuseSchema(db) && DbHasProperty(db, j, DB_SchemaLoaded)==0 - && db->init.busy==0 + && (db->init.busy==0 || (j!=1 && db->init.iDb==1)) ){ + struct sqlite3InitInfo sv = db->init; + memset(&db->init, 0, sizeof(struct sqlite3InitInfo)); sqlite3InitOne(db, j, 0, 0); bUnload = (j!=1); + db->init = sv; } p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName); if( p ) return p; diff --git a/test/reuse2.test b/test/reuse2.test index 20f3dd0dd0..f05e3665d2 100644 --- a/test/reuse2.test +++ b/test/reuse2.test @@ -166,7 +166,7 @@ do_execsql_test -db db2 4.1.7 { } do_execsql_test 4.1.8 { SELECT 'nref=' || nRef, 'nschema=' || nSchema FROM schemapool ORDER BY 1; -} {nref=3 nschema=1} +} {nref=6 nschema=1} do_test 4.2.1 { catchsql { SELECT * FROM abc } db2 diff --git a/test/reuse3.test b/test/reuse3.test index ca2438c9bd..4e00907cb7 100644 --- a/test/reuse3.test +++ b/test/reuse3.test @@ -52,11 +52,18 @@ do_execsql_test 1.6 { BEGIN; DROP TRIGGER tr1; ROLLBACK; +} + +do_execsql_test 1.7 { + SELECT * FROM v1 +} {1 2 3} + +do_execsql_test 1.8 { INSERT INTO t1 VALUES(4, 5, 6); SELECT * FROM t2 } {1 4} -do_execsql_test 1.7 { +do_execsql_test 1.9 { SELECT * FROM v1 } {1 2 3 4 5 6}