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.1.1.1 2012/02/21 17:04:16 misho Exp $
13:
14: set testdir [file dirname $argv0]
15: source $testdir/tester.tcl
16: db close
17:
18: ifcapable !shared_cache {
19: finish_test
20: return
21: }
22: set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
23:
24: # Ticket #1824
25: #
26: do_test shared3-1.1 {
27: forcedelete 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}}
38: do_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:
43: db1 close
44: db2 close
45:
46: do_test shared3-2.1 {
47: sqlite3 db1 test.db
48: execsql {
49: PRAGMA main.cache_size = 10;
50: } db1
51: } {}
52: do_test shared3-2.2 {
53: execsql { PRAGMA main.cache_size } db1
54: } {10}
55: do_test shared3-2.3 {
56: sqlite3 db2 test.db
57: execsql { PRAGMA main.cache_size } db1
58: } {10}
59: do_test shared3-2.4 {
60: execsql { PRAGMA main.cache_size } db2
61: } {10}
62: do_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: #
72: if {$::tcl_platform(platform)=="unix"} {
73: set alternative_name ./test.db
74: } else {
75: set alternative_name TEST.DB
76: }
77: do_test shared3-2.6 {
78: sqlite3 db3 $alternative_name
79: catchsql {select count(*) from sqlite_master} db3
80: } {0 1}
81: do_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}
88: do_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:
102: db1 close
103: db2 close
104: db3 close
105:
106: sqlite3_enable_shared_cache $::enable_shared_cache
107: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>