summaryrefslogtreecommitdiffstats
path: root/test/memdb2.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/memdb2.test')
-rw-r--r--test/memdb2.test76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/memdb2.test b/test/memdb2.test
new file mode 100644
index 0000000..7c21449
--- /dev/null
+++ b/test/memdb2.test
@@ -0,0 +1,76 @@
+# 2022-12-05
+#
+# 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 regression tests for SQLite library. The
+# focus of this file is the "memdb" VFS
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix memdb2
+do_not_use_codec
+
+ifcapable !deserialize {
+ finish_test
+ return
+}
+
+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.
+#
+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.$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
+}
+
+finish_test