# 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
