1# 2005 January 19
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# $Id: shared3.test,v 1.4 2008/08/20 14:49:25 danielk1977 Exp $
13
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16db close
17
18ifcapable !shared_cache {
19  finish_test
20  return
21}
22set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
23
24# Ticket #1824
25#
26do_test shared3-1.1 {
27  file delete -force test.db test.db-journal
28  sqlite3 db1 test.db
29  db1 eval {
30    PRAGMA encoding=UTF16;
31    CREATE TABLE t1(x,y);
32    INSERT INTO t1 VALUES('abc','This is a test string');
33  }
34  db1 close
35  sqlite3 db1 test.db
36  db1 eval {SELECT * FROM t1}
37} {abc {This is a test string}}
38do_test shared3-1.2 {
39  sqlite3 db2 test.db
40  db2 eval {SELECT y FROM t1 WHERE x='abc'}
41} {{This is a test string}}
42
43db1 close
44db2 close
45
46do_test shared3-2.1 {
47  sqlite3 db1 test.db
48  execsql {
49    PRAGMA main.cache_size = 10;
50  } db1
51} {}
52do_test shared3-2.2 {
53  execsql { PRAGMA main.cache_size } db1
54} {10}
55do_test shared3-2.3 {
56  sqlite3 db2 test.db
57  execsql { PRAGMA main.cache_size } db1
58} {10}
59do_test shared3-2.4 {
60  execsql { PRAGMA main.cache_size } db2
61} {10}
62do_test shared3-2.5 {
63  execsql { PRAGMA main.cache_size } db1
64} {10}
65
66# The cache-size should now be 10 pages. However at one point there was
67# a bug that caused the cache size to return to the default value when
68# a second connection was opened on the shared-cache (as happened in
69# test case shared3-2.3 above). The goal of the following tests is to
70# ensure that the cache-size really is 10 pages.
71#
72if {$::tcl_platform(platform)=="unix"} {
73  set alternative_name ./test.db
74} else {
75  set alternative_name TEST.DB
76}
77do_test shared3-2.6 {
78  sqlite3 db3 $alternative_name
79  catchsql {select count(*) from sqlite_master} db3
80} {0 1}
81do_test shared3-2.7 {
82  execsql {
83    BEGIN;
84    INSERT INTO t1 VALUES(10, randomblob(5000))
85  } db1
86  catchsql {select count(*) from sqlite_master} db3
87} {0 1}
88do_test shared3-2.8 {
89  db3 close
90  execsql {
91    INSERT INTO t1 VALUES(10, randomblob(10000))
92  } db1
93
94  # If the pager-cache is really still limited to 10 pages, then the INSERT
95  # statement above should have caused the pager to grab an exclusive lock
96  # on the database file so that the cache could be spilled.
97  #
98  catch { sqlite3 db3 $alternative_name }
99  catchsql {select count(*) from sqlite_master} db3
100} {1 {database is locked}}
101
102db1 close
103db2 close
104#db3 close
105
106sqlite3_enable_shared_cache $::enable_shared_cache
107finish_test
108