-C Fix\sreporting\son\slocks\sfrom\sexternal\sprocesses.\sVarious\sother\sfixes.
-D 2020-09-02T15:26:28.763
+C Add\stests\sfor\svirtual\stable\sshmlock.
+D 2020-09-02T16:14:17.011
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F test/shell7.test 115132f66d0463417f408562cc2cf534f6bbc6d83a6d50f0072a9eb171bae97f
F test/shell8.test 96be02ea0c21f05b24c1883d7b711a1fa8525a68ab7b636aacf6057876941013
F test/shmlock.test 3dbf017d34ab0c60abe6a44e447d3552154bd0c87b41eaf5ceacd408dd13fda5
+F test/shmlockvtab.test b5f78b3de4bf111c173fd494ef1d962333f6afd4d6ccbfbef0425cf71aed3178
F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
F test/shrink.test 1b4330b1fd9e818c04726d45cb28db73087535ce
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P ef10e1b386d7a9028eab64e1f4802e3d6b2df11c6723130a29e5effc8dcb2e80
-R 1fe025e21af9295b836249b2ab87a4c4
+P 459de23e869c79357221100e81d2c8e0b812ed3260e58d7d7acb3419876f41a3
+R 637719ed77f67752632996ec57ddfff5
U dan
-Z 312afa0e4b2458b1639f92694294c2f3
+Z 75180f503b9702867928ecc1ca309dda
--- /dev/null
+# 2015-08-19
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# This file implements tests for table-valued-functions implemented using
+# eponymous virtual tables.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+source $testdir/lock_common.tcl
+set testprefix shmlockvtab
+
+ifcapable !vtab||!wal {
+ finish_test
+ return
+}
+
+load_static_extension db shmlockvtab
+do_execsql_test 1.0 {
+ SELECT * FROM shmlock
+}
+
+do_execsql_test 1.1 {
+ CREATE TABLE t1(a, b);
+ PRAGMA journal_mode = wal;
+ SELECT * FROM t1;
+ SELECT lock, locktype, mxframe FROM shmlock;
+} {
+ wal
+ READ(0) R 0
+}
+
+do_execsql_test 1.2 {
+ BEGIN EXCLUSIVE;
+ SELECT lock, locktype, coalesce(mxframe, 'NULL') FROM shmlock;
+} {
+ WRITE W NULL
+ READ(0) R 0
+}
+
+do_execsql_test 1.3 {
+ INSERT INTO t1 VALUES(3, 4);
+ COMMIT;
+ SELECT lock, locktype, mxframe FROM shmlock;
+} {
+ READ(1) R 1
+}
+
+do_execsql_test 1.4 {
+ INSERT INTO t1 VALUES(5, 6);
+ INSERT INTO t1 VALUES(8, 7);
+ SELECT lock, locktype, mxframe FROM shmlock;
+} {
+ READ(1) R 3
+}
+
+do_test 1.5 {
+ execsql { SELECT connid FROM shmlock }
+} {/[0123456789ABCDEF]*/}
+
+do_test 1.6 {
+ file_control_shmlock_name db main thisdb
+ execsql { SELECT * FROM shmlock }
+} {thisdb READ(1) R 3}
+
+do_test 1.7 {
+ sqlite3 db2 test.db
+ load_static_extension db2 shmlockvtab
+ file_control_shmlock_name db2 main thisdb2
+ execsql { SELECT * FROM shmlock } db2
+} {thisdb2 READ(1) R 3}
+
+forcedelete test.db2
+
+do_execsql_test 1.8 {
+ ATTACH 'test.db2' AS aux;
+ SELECT * FROM shmlock('aux');
+} {}
+
+do_execsql_test 1.9 {
+ SELECT * FROM shmlock('main');
+} {thisdb READ(1) R 3}
+
+do_test 1.10 {
+ file_control_shmlock_name db aux auxdb
+ execsql {
+ PRAGMA aux.journal_mode = wal;
+ CREATE TABLE aux.t1(x);
+ }
+} {wal}
+
+do_execsql_test 1.11 {
+ SELECT * FROM shmlock('aux');
+} {}
+
+do_execsql_test 1.12 {
+ BEGIN EXCLUSIVE;
+ INSERT INTO aux.t1 VALUES('val');
+ SELECT * FROM shmlock('aux');
+} {
+ auxdb WRITE W {}
+ auxdb READ(1) R 2
+}
+
+file_control_shmlock_name db aux {Fred's database}
+do_execsql_test 1.13 {
+ SELECT * FROM shmlock('aux');
+} {
+ {Fred's database} WRITE W {}
+ {Fred's database} READ(1) R 2
+}
+
+do_multiclient_test tn {
+ code1 { load_static_extension db shmlockvtab }
+ do_test 2.$tn.0 {
+ sql1 {
+ CREATE TABLE t1(a, b);
+ PRAGMA journal_mode = wal;
+ INSERT INTO t1 VALUES('A', 'B');
+ }
+ } {wal}
+
+ do_test 2.$tn.1 {
+ sql2 {
+ BEGIN EXCLUSIVE;
+ SELECT * FROM t1
+ }
+ sql1 {
+ SELECT lock, locktype, mxframe FROM shmlock WHERE lock='WRITE'
+ }
+ } {WRITE W {}}
+ do_test 2.$tn.2 {
+ sql1 { SELECT lock, locktype, mxframe FROM shmlock ORDER BY 1 }
+ } {READ(1) R 1 READ(1) R 1 WRITE W {}}
+}
+
+
+finish_test
+