1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
# 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
set testprefix shared3
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
sqlite3 db3 "file:./test.db?cache=private" -uri 1
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 "file:./test.db?cache=private" -uri 1 }
catchsql {select count(*) from sqlite_master} db3
} {1 {database is locked}}
db1 close
db2 close
db3 close
#-------------------------------------------------------------------------
# At one point this was causing a faulty assert to fail.
#
forcedelete test.db
sqlite3 db test.db
sqlite3 db2 test.db
do_execsql_test 3.1 {
PRAGMA auto_vacuum = 2;
CREATE TABLE t1(x, y);
INSERT INTO t1 VALUES(randomblob(500), randomblob(500));
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;
}
do_test 3.2 {
execsql { SELECT count(*) FROM sqlite_master } db2
} {1}
do_execsql_test 3.3 {
BEGIN;
DELETE FROM t1 WHERE 1;
PRAGMA incremental_vacuum;
} {}
do_test 3.4 {
execsql { SELECT count(*) FROM sqlite_master } db2
} {1}
do_test 3.5 {
execsql { COMMIT }
} {}
sqlite3_enable_shared_cache $::enable_shared_cache
finish_test
|