AryaWu/sqlite
0
1# 2005 January 192#3# The author disclaims copyright to this source code. In place of4# 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.tcl16set testprefix shared317db close18 19ifcapable !shared_cache {20 finish_test21 return22}23set ::enable_shared_cache [sqlite3_enable_shared_cache 1]24 25# Ticket #182426#27do_test shared3-1.1 {28 forcedelete test.db test.db-journal29 sqlite3 db1 test.db30 db1 eval {31 PRAGMA encoding=UTF16;32 CREATE TABLE t1(x,y);33 INSERT INTO t1 VALUES('abc','This is a test string');34 }35 db1 close36 sqlite3 db1 test.db37 db1 eval {SELECT * FROM t1}38} {abc {This is a test string}}39do_test shared3-1.2 {40 sqlite3 db2 test.db41 db2 eval {SELECT y FROM t1 WHERE x='abc'}42} {{This is a test string}}43 44db1 close45db2 close46 47do_test shared3-2.1 {48 sqlite3 db1 test.db49 execsql {50 PRAGMA main.cache_size = 10;51 } db152} {}53do_test shared3-2.2 {54 execsql { PRAGMA main.cache_size } db155} {10}56do_test shared3-2.3 {57 sqlite3 db2 test.db58 execsql { PRAGMA main.cache_size } db159} {10}60do_test shared3-2.4 {61 execsql { PRAGMA main.cache_size } db262} {10}63do_test shared3-2.5 {64 execsql { PRAGMA main.cache_size } db165} {10}66 67# The cache-size should now be 10 pages. However at one point there was68# a bug that caused the cache size to return to the default value when69# a second connection was opened on the shared-cache (as happened in70# test case shared3-2.3 above). The goal of the following tests is to71# ensure that the cache-size really is 10 pages.72#73#if {$::tcl_platform(platform) eq "unix"} {74# set alternative_name ./test.db75#} else {76# set alternative_name TEST.DB77#}78do_test shared3-2.6 {79 #sqlite3 db3 $alternative_name80 sqlite3 db3 "file:./test.db?cache=private" -uri 181 catchsql {select count(*) from sqlite_master} db382} {0 1}83do_test shared3-2.7 {84 execsql {85 BEGIN;86 INSERT INTO t1 VALUES(10, randomblob(5000))87 } db188 catchsql {select count(*) from sqlite_master} db389} {0 1}90do_test shared3-2.8 {91 db3 close92 execsql {93 INSERT INTO t1 VALUES(10, randomblob(10000))94 } db195 96 # If the pager-cache is really still limited to 10 pages, then the INSERT97 # statement above should have caused the pager to grab an exclusive lock98 # on the database file so that the cache could be spilled.99 #100 catch { sqlite3 db3 "file:./test.db?cache=private" -uri 1 }101 catchsql {select count(*) from sqlite_master} db3102} {1 {database is locked}}103 104db1 close105db2 close106db3 close107 108#-------------------------------------------------------------------------109# At one point this was causing a faulty assert to fail.110#111forcedelete test.db112sqlite3 db test.db113sqlite3 db2 test.db114do_execsql_test 3.1 {115 PRAGMA auto_vacuum = 2;116 CREATE TABLE t1(x, y);117 INSERT INTO t1 VALUES(randomblob(500), randomblob(500));118 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;119 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;120 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;121 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;122 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;123 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;124 INSERT INTO t1 SELECT randomblob(500), randomblob(500) FROM t1;125}126do_test 3.2 {127 execsql { SELECT count(*) FROM sqlite_master } db2128} {1}129do_execsql_test 3.3 {130 BEGIN;131 DELETE FROM t1 WHERE 1;132 PRAGMA incremental_vacuum;133} {}134do_test 3.4 {135 execsql { SELECT count(*) FROM sqlite_master } db2136} {1}137do_test 3.5 {138 execsql { COMMIT }139} {}140 141sqlite3_enable_shared_cache $::enable_shared_cache142finish_test143 