Fix an incompatibility between the Tcl interface and the "memdb" vfs by allowing memdb to accept filenames that begin with '\' characters.

FossilOrigin-Name: bd537f2057a4800bd30e7dd57405c3e57df649471104c80bd32573a89568029e
This commit is contained in:
dan 2022-12-15 18:56:12 +00:00
parent a51e044a5b
commit 118b53bd21
4 changed files with 54 additions and 43 deletions

View File

@ -1,5 +1,5 @@
C Added\sa\scouple\smissing\s'not\spart\sof\sthe\spublic\sAPI'\stags\son\sfunctions\sin\ssqlite3-wasm.c.\sNo\scode\schanges.
D 2022-12-15T18:50:30.614
C Fix\san\sincompatibility\sbetween\sthe\sTcl\sinterface\sand\sthe\s"memdb"\svfs\sby\sallowing\smemdb\sto\saccept\sfilenames\sthat\sbegin\swith\s'\\'\scharacters.
D 2022-12-15T18:56:12.441
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -615,7 +615,7 @@ F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
F src/mem2.c c8bfc9446fd0798bddd495eb5d9dbafa7d4b7287d8c22d50a83ac9daa26d8a75
F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6
F src/mem5.c 5a3dbd8ac8a6501152a4fc1fcae9b0900c2d7eb0589c4ec7456fdde15725a26c
F src/memdb.c 3c1f3a3daa670294bad0056e66c17f5fe75cfa1da1850056a5a94347ec32e6bd
F src/memdb.c 1d4adda82e1277b0ededcdc5c23d217e19aa0a66c191f6c0c0ff9ade98124a9c
F src/memjournal.c c283c6c95d940eb9dc70f1863eef3ee40382dbd35e5a1108026e7817c206e8a0
F src/msvc.h 3a15918220367a8876be3fa4f2abe423a861491e84b864fb2b7426bf022a28f8
F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25
@ -1317,7 +1317,7 @@ F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e
F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f
F test/memdb.test c1f2a343ad14398d5d6debda6ea33e80d0dafcc7
F test/memdb1.test 2c4e9cc10d21c6bf4e217d72b7f6b8ba9b2605971bb2c5e6df76018e189f98f5
F test/memdb2.test d1dc6058ee59f78c7f46f85e069bb974a981920f8c499f0167690d16c0b079f6
F test/memdb2.test 7789975b96b0726032a22c1afc026592c7ff175bf05be11f1d640791541a77ea
F test/memjournal.test 70f3a00c7f84ee2978ad14e831231caa1e7f23915a2c54b4f775a021d5740c6c
F test/memjournal2.test 6b9083cfaab9a3281ec545c3da2487999e8025fb7501bbae10f713f80c56454c
F test/memleak.test 10b9c6c57e19fc68c32941495e9ba1c50123f6e2
@ -2067,8 +2067,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 751e344f4cd2045caf97920cc9f4571caf0de1ba83b94ded902a03b36c10a389
R 7c259616b48958b222370dcf666e6512
U stephan
Z ceb56069ad8fabf4af8cfb5eb42bafe3
P eb27feecea508f3491a09699f2339951facd2345d479cfd3020183dc2af703b2
R d9029a8d7af89f7bcaaa52e77671d993
U dan
Z 711e972efe20ba3f8cde77248740eec0
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
eb27feecea508f3491a09699f2339951facd2345d479cfd3020183dc2af703b2
bd537f2057a4800bd30e7dd57405c3e57df649471104c80bd32573a89568029e

View File

@ -535,7 +535,7 @@ static int memdbOpen(
memset(pFile, 0, sizeof(*pFile));
szName = sqlite3Strlen30(zName);
if( szName>1 && zName[0]=='/' ){
if( szName>1 && (zName[0]=='/' || zName[0]=='\\') ){
int i;
#ifndef SQLITE_MUTEX_OMIT
sqlite3_mutex *pVfsMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);

View File

@ -14,7 +14,7 @@
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix memdb1
set testprefix memdb2
do_not_use_codec
ifcapable !deserialize {
@ -28,39 +28,50 @@ db close
# Test that when using a memdb database, it is not possible to upgrade
# to an EXCLUSIVE lock if some other client is holding SHARED.
#
sqlite3 db file:/test.db?vfs=memdb -uri 1
sqlite3 db2 file:/test.db?vfs=memdb -uri 1
foreach {tn fname} {
1 file:/test.db?vfs=memdb
2 file:\\test.db?vfs=memdb
} {
if {$tn==2} breakpoint
sqlite3 db $fname -uri 1
sqlite3 db2 $fname -uri 1
do_execsql_test 1.1 {
CREATE TABLE t1(x, y);
INSERT INTO t1 VALUES(1, 2);
do_execsql_test 1.$tn.1 {
CREATE TABLE t1(x, y);
INSERT INTO t1 VALUES(1, 2);
}
do_execsql_test -db db2 1.$tn.2 {
BEGIN;
SELECT * FROM t1;
} {1 2}
do_execsql_test 1.$tn.3 {
BEGIN;
INSERT INTO t1 VALUES(3, 4);
}
do_catchsql_test 1.$tn.4 {
COMMIT
} {1 {database is locked}}
do_execsql_test -db db2 1.$tn.5 {
SELECT * FROM t1;
END;
} {1 2}
do_execsql_test 1.$tn.6 {
COMMIT
} {}
do_execsql_test -db db2 1.$tn.7 {
SELECT * FROM t1
} {1 2 3 4}
db close
db2 close
}
do_execsql_test -db db2 1.2 {
BEGIN;
SELECT * FROM t1;
} {1 2}
do_execsql_test 1.3 {
BEGIN;
INSERT INTO t1 VALUES(3, 4);
}
do_catchsql_test 1.4 {
COMMIT
} {1 {database is locked}}
do_execsql_test -db db2 1.5 {
SELECT * FROM t1;
END;
} {1 2}
do_execsql_test 1.6 {
COMMIT
} {}
do_execsql_test -db db2 1.7 {
SELECT * FROM t1
} {1 2 3 4}
finish_test