From: danielk1977 Date: Mon, 28 Apr 2008 16:19:35 +0000 (+0000) Subject: Fix a shared-cache mode problem triggered when sqlite3_open16() was used to open... X-Git-Tag: version-3.6.10~1118 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f51bf48b327afde2a11727f76a0af9c44cbf372c;p=thirdparty%2Fsqlite.git Fix a shared-cache mode problem triggered when sqlite3_open16() was used to open the second or subsequent connections to a utf-8 database. (CVS 5059) FossilOrigin-Name: 20946bf6dd704416c41edd863103e85fc7ab4ef2 --- diff --git a/manifest b/manifest index 93d0dd0979..09462d54c3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Work\saround\sa\sNaN\sbug\sin\ssome\sversions\sof\sTcl.\s(CVS\s5058) -D 2008-04-28T15:23:03 +C Fix\sa\sshared-cache\smode\sproblem\striggered\swhen\ssqlite3_open16()\swas\sused\sto\sopen\sthe\ssecond\sor\ssubsequent\sconnections\sto\sa\sutf-8\sdatabase.\s(CVS\s5059) +D 2008-04-28T16:19:35 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in 25b3282a4ac39388632c2fb0e044ff494d490952 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -103,7 +103,7 @@ F src/insert.c 9d59bf8eb43ce8399e6f818eaf1612a4c1dfeb2e F src/journal.c 807bed7a158979ac8d63953e1774e8d85bff65e2 F src/legacy.c 8267890e6a0a71f13b680794520999c642299081 F src/loadext.c 5c20a5afeb154e68d62ed6d9c634add1b21387fd -F src/main.c 3300916fb626e3e3873c25e9cd966a3b311d1c68 +F src/main.c 367b5806a04e0014101fa70e2e5265e12f6a7030 F src/malloc.c 12c1ae98ef1eff34b13c9eb526e0b7b479e1e820 F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217 F src/mem1.c fc716ff521b6dd3e43eaa211967383308800e70a @@ -430,7 +430,7 @@ F test/select6.test 399f14b9ba37b768afe5d2cd8c12e4f340a69db8 F test/select7.test 7906735805cfbee4dddc0bed4c14e68d7f5f9c5f F test/select8.test 391de11bdd52339c30580dabbbbe97e3e9a3c79d F test/server1.test f5b790d4c0498179151ca8a7715a65a7802c859c -F test/shared.test f4501cfdff9236191ac1f9e84e6597a63d0d9600 +F test/shared.test bff836a2c32418f01561d268b4c1d026a454e59b F test/shared2.test 0ee9de8964d70e451936a48c41cb161d9134ccf4 F test/shared3.test 01e3e124dbb3859788aabc7cfb82f7ea04421749 F test/shared_err.test 202ce115a4bfab2b41da5d4c9431f68a474134a6 @@ -630,7 +630,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 8eb2c07c520c12c2cd4610596dbec451c8275e95 -R 0d20d66feeaace19e07473438052cbbe -U drh -Z 82e30186eb61b94a6ebb1cd09ee72fb5 +P 7bf8213ce9f591f4c2ef6c1e19a17712e3bae9e3 +R 613b7949fdaa0711be115c0f2be92a3b +U danielk1977 +Z 355fdcb5723cd5025089cad5f7c888ad diff --git a/manifest.uuid b/manifest.uuid index b510a04ee9..036e360041 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7bf8213ce9f591f4c2ef6c1e19a17712e3bae9e3 \ No newline at end of file +20946bf6dd704416c41edd863103e85fc7ab4ef2 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 940a3c1c2a..06fc5c1b9a 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.434 2008/04/16 00:49:12 drh Exp $ +** $Id: main.c,v 1.435 2008/04/28 16:19:35 danielk1977 Exp $ */ #include "sqliteInt.h" #include @@ -1248,12 +1248,8 @@ int sqlite3_open16( rc = openDatabase(zFilename8, ppDb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); assert( *ppDb || rc==SQLITE_NOMEM ); - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){ ENC(*ppDb) = SQLITE_UTF16NATIVE; - if( rc!=SQLITE_OK ){ - sqlite3_close(*ppDb); - *ppDb = 0; - } } } sqlite3ValueFree(pVal); diff --git a/test/shared.test b/test/shared.test index 0b51e23299..f05e9651a2 100644 --- a/test/shared.test +++ b/test/shared.test @@ -9,7 +9,7 @@ # #*********************************************************************** # -# $Id: shared.test,v 1.30 2008/02/08 18:25:48 danielk1977 Exp $ +# $Id: shared.test,v 1.31 2008/04/28 16:19:35 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -636,6 +636,7 @@ ifcapable utf16 { do_test shared-$av.8.1.2 { string range [execsql {PRAGMA encoding;}] 0 end-2 } {UTF-16} + do_test shared-$av.8.1.3 { sqlite3 db2 test.db execsql { @@ -654,6 +655,7 @@ ifcapable utf16 { PRAGMA encoding; } } {UTF-8} + file delete -force test2.db test2.db-journal do_test shared-$av.8.2.1 { execsql { @@ -670,6 +672,35 @@ ifcapable utf16 { string range [execsql {PRAGMA encoding;} db2] 0 end-2 } {UTF-16} + catch {db close} + catch {db2 close} + file delete -force test.db test2.db + + do_test shared-$av.8.3.2 { + sqlite3 db test.db + execsql { CREATE TABLE def(d, e, f) } + execsql { PRAGMA encoding } + } {UTF-8} + do_test shared-$av.8.3.3 { + set zDb16 "[encoding convertto unicode test.db]\x00\x00" + set db16 [sqlite3_open16 $zDb16 {}] + + set stmt [sqlite3_prepare $db16 "SELECT sql FROM sqlite_master" -1 DUMMY] + sqlite3_step $stmt + set sql [sqlite3_column_text $stmt 0] + sqlite3_finalize $stmt + set sql + } {CREATE TABLE def(d, e, f)} + do_test shared-$av.8.3.4 { + set stmt [sqlite3_prepare $db16 "PRAGMA encoding" -1 DUMMY] + sqlite3_step $stmt + set enc [sqlite3_column_text $stmt 0] + sqlite3_finalize $stmt + set enc + } {UTF-8} + + sqlite3_close $db16 + # Bug #2547 is causing this to fail. if 0 { do_test shared-$av.8.2.3 {