1f012ea3bSdrh# 2005 January 19 2f012ea3bSdrh# 3f012ea3bSdrh# The author disclaims copyright to this source code. In place of 4f012ea3bSdrh# a legal notice, here is a blessing: 5f012ea3bSdrh# 6f012ea3bSdrh# May you do good and not evil. 7f012ea3bSdrh# May you find forgiveness for yourself and forgive others. 8f012ea3bSdrh# May you share freely, never taking more than you give. 9f012ea3bSdrh# 10f012ea3bSdrh#*********************************************************************** 11f012ea3bSdrh# 128c0a791aSdanielk1977# $Id: shared3.test,v 1.4 2008/08/20 14:49:25 danielk1977 Exp $ 13f012ea3bSdrh 14f012ea3bSdrhset testdir [file dirname $argv0] 15f012ea3bSdrhsource $testdir/tester.tcl 1656c517aaSdanset testprefix shared3 17f012ea3bSdrhdb close 18f012ea3bSdrh 19f012ea3bSdrhifcapable !shared_cache { 20f012ea3bSdrh finish_test 21f012ea3bSdrh return 22f012ea3bSdrh} 23f012ea3bSdrhset ::enable_shared_cache [sqlite3_enable_shared_cache 1] 24f012ea3bSdrh 25f012ea3bSdrh# Ticket #1824 26f012ea3bSdrh# 27f012ea3bSdrhdo_test shared3-1.1 { 28fda06befSmistachkin forcedelete test.db test.db-journal 29f012ea3bSdrh sqlite3 db1 test.db 30f012ea3bSdrh db1 eval { 31f012ea3bSdrh PRAGMA encoding=UTF16; 32f012ea3bSdrh CREATE TABLE t1(x,y); 33f012ea3bSdrh INSERT INTO t1 VALUES('abc','This is a test string'); 34f012ea3bSdrh } 35f012ea3bSdrh db1 close 36f012ea3bSdrh sqlite3 db1 test.db 37f012ea3bSdrh db1 eval {SELECT * FROM t1} 38f012ea3bSdrh} {abc {This is a test string}} 39f012ea3bSdrhdo_test shared3-1.2 { 40f012ea3bSdrh sqlite3 db2 test.db 41f012ea3bSdrh db2 eval {SELECT y FROM t1 WHERE x='abc'} 42f012ea3bSdrh} {{This is a test string}} 43f012ea3bSdrh 44f012ea3bSdrhdb1 close 45f012ea3bSdrhdb2 close 46f012ea3bSdrh 479324c8f2Sdanielk1977do_test shared3-2.1 { 489324c8f2Sdanielk1977 sqlite3 db1 test.db 499324c8f2Sdanielk1977 execsql { 50171bfed3Sdanielk1977 PRAGMA main.cache_size = 10; 519324c8f2Sdanielk1977 } db1 529324c8f2Sdanielk1977} {} 539324c8f2Sdanielk1977do_test shared3-2.2 { 549324c8f2Sdanielk1977 execsql { PRAGMA main.cache_size } db1 55171bfed3Sdanielk1977} {10} 569324c8f2Sdanielk1977do_test shared3-2.3 { 579324c8f2Sdanielk1977 sqlite3 db2 test.db 589324c8f2Sdanielk1977 execsql { PRAGMA main.cache_size } db1 59171bfed3Sdanielk1977} {10} 609324c8f2Sdanielk1977do_test shared3-2.4 { 619324c8f2Sdanielk1977 execsql { PRAGMA main.cache_size } db2 62171bfed3Sdanielk1977} {10} 639324c8f2Sdanielk1977do_test shared3-2.5 { 649324c8f2Sdanielk1977 execsql { PRAGMA main.cache_size } db1 65171bfed3Sdanielk1977} {10} 66171bfed3Sdanielk1977 67171bfed3Sdanielk1977# The cache-size should now be 10 pages. However at one point there was 68171bfed3Sdanielk1977# a bug that caused the cache size to return to the default value when 69171bfed3Sdanielk1977# a second connection was opened on the shared-cache (as happened in 70171bfed3Sdanielk1977# test case shared3-2.3 above). The goal of the following tests is to 71171bfed3Sdanielk1977# ensure that the cache-size really is 10 pages. 72171bfed3Sdanielk1977# 73*e5dc4a20Sdrh#if {$::tcl_platform(platform)=="unix"} { 74*e5dc4a20Sdrh# set alternative_name ./test.db 75*e5dc4a20Sdrh#} else { 76*e5dc4a20Sdrh# set alternative_name TEST.DB 77*e5dc4a20Sdrh#} 78171bfed3Sdanielk1977do_test shared3-2.6 { 79*e5dc4a20Sdrh #sqlite3 db3 $alternative_name 80*e5dc4a20Sdrh sqlite3 db3 "file:./test.db?cache=private" -uri 1 81171bfed3Sdanielk1977 catchsql {select count(*) from sqlite_master} db3 82171bfed3Sdanielk1977} {0 1} 83171bfed3Sdanielk1977do_test shared3-2.7 { 84171bfed3Sdanielk1977 execsql { 85171bfed3Sdanielk1977 BEGIN; 86171bfed3Sdanielk1977 INSERT INTO t1 VALUES(10, randomblob(5000)) 87171bfed3Sdanielk1977 } db1 88171bfed3Sdanielk1977 catchsql {select count(*) from sqlite_master} db3 89171bfed3Sdanielk1977} {0 1} 90171bfed3Sdanielk1977do_test shared3-2.8 { 918c0a791aSdanielk1977 db3 close 92171bfed3Sdanielk1977 execsql { 93171bfed3Sdanielk1977 INSERT INTO t1 VALUES(10, randomblob(10000)) 94171bfed3Sdanielk1977 } db1 95171bfed3Sdanielk1977 96171bfed3Sdanielk1977 # If the pager-cache is really still limited to 10 pages, then the INSERT 97171bfed3Sdanielk1977 # statement above should have caused the pager to grab an exclusive lock 98171bfed3Sdanielk1977 # on the database file so that the cache could be spilled. 99171bfed3Sdanielk1977 # 100*e5dc4a20Sdrh catch { sqlite3 db3 "file:./test.db?cache=private" -uri 1 } 101171bfed3Sdanielk1977 catchsql {select count(*) from sqlite_master} db3 102171bfed3Sdanielk1977} {1 {database is locked}} 1039324c8f2Sdanielk1977 1049324c8f2Sdanielk1977db1 close 1059324c8f2Sdanielk1977db2 close 106171bfed3Sdanielk1977db3 close 1079324c8f2Sdanielk1977 10856c517aaSdan#------------------------------------------------------------------------- 10956c517aaSdan# At one point this was causing a faulty assert to fail. 11056c517aaSdan# 11156c517aaSdanforcedelete test.db 11256c517aaSdansqlite3 db test.db 11356c517aaSdansqlite3 db2 test.db 11456c517aaSdando_execsql_test 3.1 { 11556c517aaSdan PRAGMA auto_vacuum = 2; 11656c517aaSdan CREATE TABLE t1(x, y); 11756c517aaSdan INSERT INTO t1 VALUES(randomblob(500), randomblob(500)); 11856c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 11956c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12056c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12156c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12256c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12356c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12456c517aaSdan INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1; 12556c517aaSdan} 12656c517aaSdando_test 3.2 { 12756c517aaSdan execsql { SELECT count(*) FROM sqlite_master } db2 12856c517aaSdan} {1} 12956c517aaSdando_execsql_test 3.3 { 13056c517aaSdan BEGIN; 13156c517aaSdan DELETE FROM t1 WHERE 1; 13256c517aaSdan PRAGMA incremental_vacuum; 13356c517aaSdan} {} 13456c517aaSdando_test 3.4 { 13556c517aaSdan execsql { SELECT count(*) FROM sqlite_master } db2 13656c517aaSdan} {1} 13756c517aaSdando_test 3.5 { 13856c517aaSdan execsql { COMMIT } 13956c517aaSdan} {} 14056c517aaSdan 141f012ea3bSdrhsqlite3_enable_shared_cache $::enable_shared_cache 142f012ea3bSdrhfinish_test 143