# 2005 January 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.
#
#***********************************************************************
#
# $Id: shared3.test,v 1.4 2008/08/20 14:49:25 danielk1977 Exp $

set testdir [file dirname $argv0]
source $testdir/tester.tcl
db close

ifcapable !shared_cache {
  finish_test
  return
}
set ::enable_shared_cache [sqlite3_enable_shared_cache 1]

# Ticket #1824
#
do_test shared3-1.1 {
  forcedelete test.db test.db-journal
  sqlite3 db1 test.db
  db1 eval {
    PRAGMA encoding=UTF16;
    CREATE TABLE t1(x,y);
    INSERT INTO t1 VALUES('abc','This is a test string');
  }
  db1 close
  sqlite3 db1 test.db
  db1 eval {SELECT * FROM t1}
} {abc {This is a test string}}
do_test shared3-1.2 {
  sqlite3 db2 test.db
  db2 eval {SELECT y FROM t1 WHERE x='abc'}
} {{This is a test string}}

db1 close
db2 close

do_test shared3-2.1 {
  sqlite3 db1 test.db
  execsql {
    PRAGMA main.cache_size = 10;
  } db1
} {}
do_test shared3-2.2 {
  execsql { PRAGMA main.cache_size } db1
} {10}
do_test shared3-2.3 {
  sqlite3 db2 test.db
  execsql { PRAGMA main.cache_size } db1
} {10}
do_test shared3-2.4 {
  execsql { PRAGMA main.cache_size } db2
} {10}
do_test shared3-2.5 {
  execsql { PRAGMA main.cache_size } db1
} {10}

# The cache-size should now be 10 pages. However at one point there was
# a bug that caused the cache size to return to the default value when
# a second connection was opened on the shared-cache (as happened in
# test case shared3-2.3 above). The goal of the following tests is to
# ensure that the cache-size really is 10 pages.
#
if {$::tcl_platform(platform)=="unix"} {
  set alternative_name ./test.db
} else {
  set alternative_name TEST.DB
}
do_test shared3-2.6 {
  sqlite3 db3 $alternative_name
  catchsql {select count(*) from sqlite_master} db3
} {0 1}
do_test shared3-2.7 {
  execsql {
    BEGIN;
    INSERT INTO t1 VALUES(10, randomblob(5000))
  } db1
  catchsql {select count(*) from sqlite_master} db3
} {0 1}
do_test shared3-2.8 {
  db3 close
  execsql {
    INSERT INTO t1 VALUES(10, randomblob(10000))
  } db1

  # If the pager-cache is really still limited to 10 pages, then the INSERT
  # statement above should have caused the pager to grab an exclusive lock
  # on the database file so that the cache could be spilled.
  #
  catch { sqlite3 db3 $alternative_name }
  catchsql {select count(*) from sqlite_master} db3
} {1 {database is locked}}

db1 close
db2 close
db3 close

sqlite3_enable_shared_cache $::enable_shared_cache
finish_test
