xref: /sqlite-3.40.0/test/shared4.test (revision 7b96f2fa)
165cef1afSdrh# 2008 July 14
265cef1afSdrh#
365cef1afSdrh# The author disclaims copyright to this source code.  In place of
465cef1afSdrh# a legal notice, here is a blessing:
565cef1afSdrh#
665cef1afSdrh#    May you do good and not evil.
765cef1afSdrh#    May you find forgiveness for yourself and forgive others.
865cef1afSdrh#    May you share freely, never taking more than you give.
965cef1afSdrh#
1065cef1afSdrh#***********************************************************************
1165cef1afSdrh#
1265cef1afSdrh# Test the btree mutex protocol for shared cache mode.
1365cef1afSdrh#
14de3e41e3Sdanielk1977# $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $
1565cef1afSdrh
1665cef1afSdrhset testdir [file dirname $argv0]
1765cef1afSdrhsource $testdir/tester.tcl
1865cef1afSdrhdb close
1965cef1afSdrh
2065cef1afSdrh# This script is only valid if we are running shared-cache mode in a
2165cef1afSdrh# threadsafe-capable database engine.
2265cef1afSdrh#
23de3e41e3Sdanielk1977ifcapable !shared_cache||!compound {
2465cef1afSdrh  finish_test
2565cef1afSdrh  return
2665cef1afSdrh}
2765cef1afSdrhset ::enable_shared_cache [sqlite3_enable_shared_cache 1]
2865cef1afSdrh
2965cef1afSdrh# Prepare multiple databases in shared cache mode.
3065cef1afSdrh#
3165cef1afSdrhdo_test shared4-1.1 {
32*fda06befSmistachkin  forcedelete test1.db test1.db-journal
33*fda06befSmistachkin  forcedelete test2.db test2.db-journal
34*fda06befSmistachkin  forcedelete test3.db test3.db-journal
35*fda06befSmistachkin  forcedelete test4.db test4.db-journal
3665cef1afSdrh  sqlite3 db1 test1.db
3765cef1afSdrh  sqlite3 db2 test2.db
3865cef1afSdrh  sqlite3 db3 test3.db
3965cef1afSdrh  sqlite3 db4 test4.db
4065cef1afSdrh  db1 eval {
4165cef1afSdrh    CREATE TABLE t1(a);
4265cef1afSdrh    INSERT INTO t1 VALUES(111);
4365cef1afSdrh  }
4465cef1afSdrh  db2 eval {
4565cef1afSdrh    CREATE TABLE t2(b);
4665cef1afSdrh    INSERT INTO t2 VALUES(222);
4765cef1afSdrh  }
4865cef1afSdrh  db3 eval {
4965cef1afSdrh    CREATE TABLE t3(c);
5065cef1afSdrh    INSERT INTO t3 VALUES(333);
5165cef1afSdrh  }
5265cef1afSdrh  db4 eval {
5365cef1afSdrh    CREATE TABLE t4(d);
5465cef1afSdrh    INSERT INTO t4 VALUES(444);
5565cef1afSdrh  }
5665cef1afSdrh  db1 eval {
5765cef1afSdrh    ATTACH DATABASE 'test2.db' AS two;
5865cef1afSdrh    ATTACH DATABASE 'test3.db' AS three;
5965cef1afSdrh    ATTACH DATABASE 'test4.db' AS four;
6065cef1afSdrh  }
6165cef1afSdrh  db2 eval {
6265cef1afSdrh    ATTACH DATABASE 'test4.db' AS four;
6365cef1afSdrh    ATTACH DATABASE 'test3.db' AS three;
6465cef1afSdrh    ATTACH DATABASE 'test1.db' AS one;
6565cef1afSdrh  }
6665cef1afSdrh  db3 eval {
6765cef1afSdrh    ATTACH DATABASE 'test1.db' AS one;
6865cef1afSdrh    ATTACH DATABASE 'test2.db' AS two;
6965cef1afSdrh    ATTACH DATABASE 'test4.db' AS four;
7065cef1afSdrh  }
7165cef1afSdrh  db4 eval {
7265cef1afSdrh    ATTACH DATABASE 'test3.db' AS three;
7365cef1afSdrh    ATTACH DATABASE 'test2.db' AS two;
7465cef1afSdrh    ATTACH DATABASE 'test1.db' AS one;
7565cef1afSdrh  }
7665cef1afSdrh  db1 eval {
7765cef1afSdrh     SELECT a FROM t1 UNION ALL
7865cef1afSdrh     SELECT b FROM t2 UNION ALL
7965cef1afSdrh     SELECT c FROM t3 UNION ALL
8065cef1afSdrh     SELECT d FROM t4;
8165cef1afSdrh  }
8265cef1afSdrh} {111 222 333 444}
8365cef1afSdrhdo_test shared4-1.2 {
8465cef1afSdrh  db2 eval {
8565cef1afSdrh     SELECT a FROM t1 UNION ALL
8665cef1afSdrh     SELECT b FROM t2 UNION ALL
8765cef1afSdrh     SELECT d FROM t4 UNION ALL
8865cef1afSdrh     SELECT c FROM t3;
8965cef1afSdrh  }
9065cef1afSdrh} {111 222 444 333}
9165cef1afSdrhdo_test shared4-1.3 {
9265cef1afSdrh  db3 eval {
9365cef1afSdrh     SELECT a FROM t1 UNION ALL
9465cef1afSdrh     SELECT c FROM t3 UNION ALL
9565cef1afSdrh     SELECT b FROM t2 UNION ALL
9665cef1afSdrh     SELECT d FROM t4;
9765cef1afSdrh  }
9865cef1afSdrh} {111 333 222 444}
9965cef1afSdrhdo_test shared4-1.4 {
10065cef1afSdrh  db4 eval {
10165cef1afSdrh     SELECT a FROM t1 UNION ALL
10265cef1afSdrh     SELECT c FROM t3 UNION ALL
10365cef1afSdrh     SELECT d FROM t4 UNION ALL
10465cef1afSdrh     SELECT b FROM t2;
10565cef1afSdrh  }
10665cef1afSdrh} {111 333 444 222}
10765cef1afSdrhdo_test shared4-1.5 {
10865cef1afSdrh  db3 eval {
10965cef1afSdrh     SELECT a FROM t1 UNION ALL
11065cef1afSdrh     SELECT d FROM t4 UNION ALL
11165cef1afSdrh     SELECT b FROM t2 UNION ALL
11265cef1afSdrh     SELECT c FROM t3;
11365cef1afSdrh  }
11465cef1afSdrh} {111 444 222 333}
11565cef1afSdrhdo_test shared4-1.6 {
11665cef1afSdrh  db4 eval {
11765cef1afSdrh     SELECT a FROM t1 UNION ALL
11865cef1afSdrh     SELECT d FROM t4 UNION ALL
11965cef1afSdrh     SELECT c FROM t3 UNION ALL
12065cef1afSdrh     SELECT b FROM t2;
12165cef1afSdrh  }
12265cef1afSdrh} {111 444 333 222}
12365cef1afSdrhdo_test shared4-1.7 {
12465cef1afSdrh  db1 eval {
12565cef1afSdrh     SELECT b FROM t2 UNION ALL
12665cef1afSdrh     SELECT a FROM t1 UNION ALL
12765cef1afSdrh     SELECT c FROM t3 UNION ALL
12865cef1afSdrh     SELECT d FROM t4;
12965cef1afSdrh  }
13065cef1afSdrh} {222 111 333 444}
13165cef1afSdrhdo_test shared4-1.8 {
13265cef1afSdrh  db2 eval {
13365cef1afSdrh     SELECT b FROM t2 UNION ALL
13465cef1afSdrh     SELECT a FROM t1 UNION ALL
13565cef1afSdrh     SELECT d FROM t4 UNION ALL
13665cef1afSdrh     SELECT c FROM t3;
13765cef1afSdrh  }
13865cef1afSdrh} {222 111 444 333}
13965cef1afSdrhdo_test shared4-1.9 {
14065cef1afSdrh  db3 eval {
14165cef1afSdrh     SELECT b FROM t2 UNION ALL
14265cef1afSdrh     SELECT c FROM t3 UNION ALL
14365cef1afSdrh     SELECT a FROM t1 UNION ALL
14465cef1afSdrh     SELECT d FROM t4;
14565cef1afSdrh  }
14665cef1afSdrh} {222 333 111 444}
14765cef1afSdrhdo_test shared4-1.10 {
14865cef1afSdrh  db4 eval {
14965cef1afSdrh     SELECT b FROM t2 UNION ALL
15065cef1afSdrh     SELECT c FROM t3 UNION ALL
15165cef1afSdrh     SELECT d FROM t4 UNION ALL
15265cef1afSdrh     SELECT a FROM t1;
15365cef1afSdrh  }
15465cef1afSdrh} {222 333 444 111}
15565cef1afSdrhdo_test shared4-1.11 {
15665cef1afSdrh  db1 eval {
15765cef1afSdrh     SELECT c FROM t3 UNION ALL
15865cef1afSdrh     SELECT a FROM t1 UNION ALL
15965cef1afSdrh     SELECT b FROM t2 UNION ALL
16065cef1afSdrh     SELECT d FROM t4;
16165cef1afSdrh  }
16265cef1afSdrh} {333 111 222 444}
16365cef1afSdrhdo_test shared4-1.12 {
16465cef1afSdrh  db2 eval {
16565cef1afSdrh     SELECT c FROM t3 UNION ALL
16665cef1afSdrh     SELECT a FROM t1 UNION ALL
16765cef1afSdrh     SELECT d FROM t4 UNION ALL
16865cef1afSdrh     SELECT b FROM t2;
16965cef1afSdrh  }
17065cef1afSdrh} {333 111 444 222}
17165cef1afSdrh
17265cef1afSdrhdo_test shared4-2.1 {
17365cef1afSdrh  db1 eval {
17465cef1afSdrh    UPDATE t1 SET a=a+1000;
17565cef1afSdrh    UPDATE t2 SET b=b+2000;
17665cef1afSdrh    UPDATE t3 SET c=c+3000;
17765cef1afSdrh    UPDATE t4 SET d=d+4000;
17865cef1afSdrh  }
17965cef1afSdrh  db2 eval {
18065cef1afSdrh    UPDATE t1 SET a=a+10000;
18165cef1afSdrh    UPDATE t2 SET b=b+20000;
18265cef1afSdrh    UPDATE t3 SET c=c+30000;
18365cef1afSdrh    UPDATE t4 SET d=d+40000;
18465cef1afSdrh  }
18565cef1afSdrh  db3 eval {
18665cef1afSdrh    UPDATE t1 SET a=a+100000;
18765cef1afSdrh    UPDATE t2 SET b=b+200000;
18865cef1afSdrh    UPDATE t3 SET c=c+300000;
18965cef1afSdrh    UPDATE t4 SET d=d+400000;
19065cef1afSdrh  }
19165cef1afSdrh  db4 eval {
19265cef1afSdrh    UPDATE t1 SET a=a+1000000;
19365cef1afSdrh    UPDATE t2 SET b=b+2000000;
19465cef1afSdrh    UPDATE t3 SET c=c+3000000;
19565cef1afSdrh    UPDATE t4 SET d=d+4000000;
19665cef1afSdrh  }
19765cef1afSdrh  db1 eval {
19865cef1afSdrh     SELECT a FROM t1 UNION ALL
19965cef1afSdrh     SELECT b FROM t2 UNION ALL
20065cef1afSdrh     SELECT c FROM t3 UNION ALL
20165cef1afSdrh     SELECT d FROM t4;
20265cef1afSdrh  }
20365cef1afSdrh} {1111111 2222222 3333333 4444444}
20465cef1afSdrhdo_test shared4-2.2 {
20565cef1afSdrh  db2 eval {
20665cef1afSdrh     SELECT a FROM t1 UNION ALL
20765cef1afSdrh     SELECT b FROM t2 UNION ALL
20865cef1afSdrh     SELECT d FROM t4 UNION ALL
20965cef1afSdrh     SELECT c FROM t3;
21065cef1afSdrh  }
21165cef1afSdrh} {1111111 2222222 4444444 3333333}
21265cef1afSdrhdo_test shared4-2.3 {
21365cef1afSdrh  db3 eval {
21465cef1afSdrh     SELECT a FROM t1 UNION ALL
21565cef1afSdrh     SELECT c FROM t3 UNION ALL
21665cef1afSdrh     SELECT b FROM t2 UNION ALL
21765cef1afSdrh     SELECT d FROM t4;
21865cef1afSdrh  }
21965cef1afSdrh} {1111111 3333333 2222222 4444444}
22065cef1afSdrhdo_test shared4-2.4 {
22165cef1afSdrh  db4 eval {
22265cef1afSdrh     SELECT a FROM t1 UNION ALL
22365cef1afSdrh     SELECT c FROM t3 UNION ALL
22465cef1afSdrh     SELECT d FROM t4 UNION ALL
22565cef1afSdrh     SELECT b FROM t2;
22665cef1afSdrh  }
22765cef1afSdrh} {1111111 3333333 4444444 2222222}
22865cef1afSdrh
22965cef1afSdrh
23065cef1afSdrhdb1 close
23165cef1afSdrhdb2 close
23265cef1afSdrhdb3 close
23365cef1afSdrhdb4 close
23465cef1afSdrh
23565cef1afSdrhsqlite3_enable_shared_cache $::enable_shared_cache
23665cef1afSdrhfinish_test
237