| Index: third_party/sqlite/src/test/shared.test | 
| diff --git a/third_party/sqlite/src/test/shared.test b/third_party/sqlite/src/test/shared.test | 
| index 35ddf08820355a2566bee8a6b0e03f73945feca4..4eab476582c2230ca24cdcdadda3205ba2217563 100644 | 
| --- a/third_party/sqlite/src/test/shared.test | 
| +++ b/third_party/sqlite/src/test/shared.test | 
| @@ -27,7 +27,7 @@ set ::enable_shared_cache [sqlite3_enable_shared_cache 1] | 
| foreach av [list 0 1] { | 
|  | 
| # Open the database connection and execute the auto-vacuum pragma | 
| -file delete -force test.db | 
| +forcedelete test.db | 
| sqlite3 db test.db | 
|  | 
| ifcapable autovacuum { | 
| @@ -293,9 +293,9 @@ catch {db3 close} | 
| #     db2.main  ->   ./test2.db | 
| #     db2.test  ->   ./test.db | 
| # | 
| -file delete -force test.db | 
| -file delete -force test2.db | 
| -file delete -force test2.db-journal | 
| +forcedelete test.db | 
| +forcedelete test2.db | 
| +forcedelete test2.db-journal | 
| sqlite3 db  test.db | 
| sqlite3 db2 test2.db | 
| do_test shared-$av.4.1.1 { | 
| @@ -426,7 +426,7 @@ catch {db close} | 
| # Tests shared-5.* | 
| # | 
| foreach db [list test.db test1.db test2.db test3.db] { | 
| -  file delete -force $db ${db}-journal | 
| +  forcedelete $db ${db}-journal | 
| } | 
| do_test shared-$av.5.1.1 { | 
| sqlite3 db1 test.db | 
| @@ -557,7 +557,7 @@ do_test shared-$av.6.1.4 { | 
| catch {db1 close} | 
| catch {db2 close} | 
| foreach f [list test.db test2.db] { | 
| -  file delete -force $f ${f}-journal | 
| +  forcedelete $f ${f}-journal | 
| } | 
|  | 
| #-------------------------------------------------------------------------- | 
| @@ -643,7 +643,7 @@ unset -nocomplain contents | 
| # The following tests try to trick the shared-cache code into assuming | 
| # the wrong encoding for a database. | 
| # | 
| -file delete -force test.db test.db-journal | 
| +forcedelete test.db test.db-journal | 
| ifcapable utf16 { | 
| do_test shared-$av.8.1.1 { | 
| sqlite3 db test.db | 
| @@ -675,7 +675,7 @@ ifcapable utf16 { | 
| } | 
| } {UTF-8} | 
|  | 
| -  file delete -force test2.db test2.db-journal | 
| +  forcedelete test2.db test2.db-journal | 
| do_test shared-$av.8.2.1 { | 
| execsql { | 
| ATTACH 'test2.db' AS aux; | 
| @@ -693,7 +693,7 @@ ifcapable utf16 { | 
|  | 
| catch {db close} | 
| catch {db2 close} | 
| -  file delete -force test.db test2.db | 
| +  forcedelete test.db test2.db | 
|  | 
| do_test shared-$av.8.3.2 { | 
| sqlite3 db test.db | 
| @@ -732,7 +732,7 @@ if 0 { | 
|  | 
| catch {db close} | 
| catch {db2 close} | 
| -file delete -force test.db test2.db | 
| +forcedelete test.db test2.db | 
|  | 
| #--------------------------------------------------------------------------- | 
| # The following tests - shared-9.* - test interactions between TEMP triggers | 
| @@ -772,7 +772,7 @@ do_test shared-$av.9.3 { | 
| # | 
| do_test shared-$av.10.1 { | 
| # Create a small sample database with two connections to it (db and db2). | 
| -  file delete -force test.db | 
| +  forcedelete test.db | 
| sqlite3 db  test.db | 
| sqlite3 db2 test.db | 
| execsql { | 
| @@ -853,7 +853,7 @@ do_test shared-$av.10.11 { | 
| } {} | 
|  | 
| do_test shared-$av.11.1 { | 
| -  file delete -force test.db | 
| +  forcedelete test.db | 
| sqlite3 db  test.db | 
| sqlite3 db2 test.db | 
| execsql { | 
| @@ -904,9 +904,11 @@ do_test shared-$av.11.8 { | 
| set res | 
| } {1 4 {} 7} | 
| if {[llength [info command sqlite3_shared_cache_report]]==1} { | 
| -  do_test shared-$av.11.9 { | 
| -    string tolower [sqlite3_shared_cache_report] | 
| -  } [string tolower [list [file nativename [file normalize test.db]] 2]] | 
| +  ifcapable curdir { | 
| +    do_test shared-$av.11.9 { | 
| +      string tolower [sqlite3_shared_cache_report] | 
| +    } [string tolower [list [file nativename [file normalize test.db]] 2]] | 
| +  } | 
| } | 
|  | 
| do_test shared-$av.11.11 { | 
| @@ -916,7 +918,7 @@ do_test shared-$av.11.11 { | 
|  | 
| # This tests that if it is impossible to free any pages, SQLite will | 
| # exceed the limit set by PRAGMA cache_size. | 
| -file delete -force test.db test.db-journal | 
| +forcedelete test.db test.db-journal | 
| sqlite3 db test.db | 
| ifcapable pager_pragmas { | 
| do_test shared-$av.12.1 { | 
| @@ -963,7 +965,7 @@ do_test shared-$av.12.X { | 
| # database handle. This covers an extra line or two. | 
| # | 
| do_test shared-$av.13.1 { | 
| -  file delete -force test2.db test3.db test4.db test5.db | 
| +  forcedelete test2.db test3.db test4.db test5.db | 
| sqlite3 db :memory: | 
| execsql { | 
| ATTACH 'test2.db' AS aux2; | 
| @@ -1026,7 +1028,7 @@ do_test shared-$av.14.3 { | 
| # assert() statements in the C code. | 
| # | 
| do_test shared-$av-15.1 { | 
| -  file delete -force test.db | 
| +  forcedelete test.db | 
| sqlite3 db test.db -fullmutex 1 | 
| sqlite3 db2 test.db -fullmutex 1 | 
| execsql { | 
| @@ -1056,7 +1058,127 @@ do_test shared-$av-15.2 { | 
| db close | 
| db2 close | 
|  | 
| -} | 
| +# Shared cache on a :memory: database.  This only works for URI filenames. | 
| +# | 
| +do_test shared-$av-16.1 { | 
| +  sqlite3 db1 file::memory: -uri 1 | 
| +  sqlite3 db2 file::memory: -uri 1 | 
| +  db1 eval { | 
| +    CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3); | 
| +  } | 
| +  db2 eval { | 
| +    SELECT x FROM t1 ORDER BY x; | 
| +  } | 
| +} {1 2 3} | 
| +do_test shared-$av-16.2 { | 
| +  db2 eval { | 
| +    INSERT INTO t1 VALUES(99); | 
| +    DELETE FROM t1 WHERE x=2; | 
| +  } | 
| +  db1 eval { | 
| +    SELECT x FROM t1 ORDER BY x; | 
| +  } | 
| +} {1 3 99} | 
| + | 
| +# Verify that there is no cache sharing ordinary (non-URI) filenames are | 
| +# used. | 
| +# | 
| +do_test shared-$av-16.3 { | 
| +  db1 close | 
| +  db2 close | 
| +  sqlite3 db1 :memory: | 
| +  sqlite3 db2 :memory: | 
| +  db1 eval { | 
| +    CREATE TABLE t1(x); INSERT INTO t1 VALUES(4),(5),(6); | 
| +  } | 
| +  catchsql { | 
| +    SELECT * FROM t1; | 
| +  } db2 | 
| +} {1 {no such table: t1}} | 
| + | 
| +# Shared cache on named memory databases. | 
| +# | 
| +do_test shared-$av-16.4 { | 
| +  db1 close | 
| +  db2 close | 
| +  forcedelete test.db test.db-wal test.db-journal | 
| +  sqlite3 db1 file:test.db?mode=memory -uri 1 | 
| +  sqlite3 db2 file:test.db?mode=memory -uri 1 | 
| +  db1 eval { | 
| +    CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3); | 
| +  } | 
| +  db2 eval { | 
| +    SELECT x FROM t1 ORDER BY x; | 
| +  } | 
| +} {1 2 3} | 
| +do_test shared-$av-16.5 { | 
| +  db2 eval { | 
| +    INSERT INTO t1 VALUES(99); | 
| +    DELETE FROM t1 WHERE x=2; | 
| +  } | 
| +  db1 eval { | 
| +    SELECT x FROM t1 ORDER BY x; | 
| +  } | 
| +} {1 3 99} | 
| +do_test shared-$av-16.6 { | 
| +  file exists test.db | 
| +} {0}  ;# Verify that the database is in-memory | 
| + | 
| +# Shared cache on named memory databases with different names. | 
| +# | 
| +do_test shared-$av-16.7 { | 
| +  db1 close | 
| +  db2 close | 
| +  forcedelete test1.db test2.db | 
| +  sqlite3 db1 file:test1.db?mode=memory -uri 1 | 
| +  sqlite3 db2 file:test2.db?mode=memory -uri 1 | 
| +  db1 eval { | 
| +    CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3); | 
| +  } | 
| +  catchsql { | 
| +    SELECT x FROM t1 ORDER BY x; | 
| +  } db2 | 
| +} {1 {no such table: t1}} | 
| +do_test shared-$av-16.8 { | 
| +  file exists test1.db | 
| +} {0}  ;# Verify that the database is in-memory | 
| + | 
| +# Shared cache on named memory databases attached to readonly connections. | 
| +# | 
| +do_test shared-$av-16.8.1 { | 
| +  db1 close | 
| +  db2 close | 
| + | 
| +  sqlite3 db test1.db | 
| +  db eval { | 
| +    CREATE TABLE yy(a, b); | 
| +    INSERT INTO yy VALUES(77, 88); | 
| +  } | 
| +  db close | 
| + | 
| +  sqlite3 db1 test1.db -uri 1 -readonly 1 | 
| +  sqlite3 db2 test2.db -uri 1 | 
| + | 
| +  db1 eval { | 
| +    ATTACH 'file:mem?mode=memory&cache=shared' AS shared; | 
| +    CREATE TABLE shared.xx(a, b); | 
| +    INSERT INTO xx VALUES(55, 66); | 
| +  } | 
| +  db2 eval { | 
| +    ATTACH 'file:mem?mode=memory&cache=shared' AS shared; | 
| +    SELECT * FROM xx; | 
| +  } | 
| +} {55 66} | 
| + | 
| +do_test shared-$av-16.8.2 { db1 eval { SELECT * FROM yy } } {77 88} | 
| +do_test shared-$av-16.8.3 { | 
| +  list [catch {db1 eval { INSERT INTO yy VALUES(1, 2) }} msg] $msg | 
| +} {1 {attempt to write a readonly database}} | 
| + | 
| +db1 close | 
| +db2 close | 
| + | 
| +}  ;# end of autovacuum on/off loop | 
|  | 
| sqlite3_enable_shared_cache $::enable_shared_cache | 
| finish_test | 
|  |