xref: /sqlite-3.40.0/test/shared3.test (revision e5dc4a20)
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