# 2016 July 8
#
# 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.
#

if {$tcl_platform(platform)!="windows"} return

set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix win32nolock

do_test win32nolock-1.0 {
  sqlite3 db test.db
  execsql {
    CREATE TABLE t1(a, b);
    BEGIN;
    INSERT INTO t1 VALUES(1, 2);
  }
} {}

do_test win32nolock-1.1 {
  execsql COMMIT
  catchsql { SELECT * FROM t1 }
} {0 {1 2}}

db close

do_test win32nolock-1.2 {
  sqlite3 db test.db -vfs win32-none
  sqlite3 db2 test.db -vfs win32-none
  execsql { PRAGMA mmap_size = 0 } db2
  execsql {
    BEGIN;
    INSERT INTO t1 VALUES(3, 4);
  }
} {}

do_test win32nolock-1.3 {
  execsql { SELECT * FROM t1 }
} {1 2 3 4}

do_test win32nolock-1.4 {
  execsql { SELECT * FROM t1; } db2
} {1 2}

do_test win32nolock-1.5 {
  execsql {
    BEGIN;
    SELECT * FROM t1;
  } db2
} {1 2}

do_test win32nolock-1.6 {
  execsql COMMIT
  execsql {SELECT * FROM t1} db2
} {1 2}

ifcapable memorymanage {
  do_test win32nolock-1.7 {
    sqlite3_release_memory 1000000
    execsql {SELECT * FROM t1} db2
  } {1 2 3 4}
}

do_test win32nolock-1.8 {
  db close
  db2 close
} {}

do_test win32nolock-1.9.1 {
  sqlite3 db test.db
  sqlite3 db2 test.db
  list [catchsql { BEGIN EXCLUSIVE; } db] \
      [catchsql { BEGIN EXCLUSIVE; } db2]
} {{0 {}} {1 {database is locked}}}

do_test win32nolock-1.9.2 {
  db close
  db2 close
} {}

do_test win32nolock-1.10.1 {
  sqlite3 db test.db -vfs win32-none
  sqlite3 db2 test.db
  list [catchsql { BEGIN EXCLUSIVE; } db] \
      [catchsql { BEGIN EXCLUSIVE; } db2]
} {{0 {}} {0 {}}}

do_test win32nolock-1.10.2 {
  db close
  db2 close
} {}

do_test win32nolock-1.11.1 {
  sqlite3 db test.db
  sqlite3 db2 test.db -vfs win32-none
  list [catchsql { BEGIN EXCLUSIVE; } db] \
      [catchsql { BEGIN EXCLUSIVE; } db2]
} {{0 {}} {0 {}}}

do_test win32nolock-1.11.2 {
  db close
  db2 close
} {}

do_test win32nolock-1.12.1 {
  sqlite3 db test.db -vfs win32-none
  sqlite3 db2 test.db -vfs win32-none
  list [catchsql { BEGIN EXCLUSIVE; } db] \
      [catchsql { BEGIN EXCLUSIVE; } db2]
} {{0 {}} {0 {}}}

do_test win32nolock-1.12.2 {
  db close
  db2 close
} {}

finish_test
