AryaWu/sqlite
0
1# 2008 July 142#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# Test the btree mutex protocol for shared cache mode.13#14# $Id: shared4.test,v 1.2 2008/08/04 03:51:24 danielk1977 Exp $15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18db close19 20# This script is only valid if we are running shared-cache mode in a21# threadsafe-capable database engine.22#23ifcapable !shared_cache||!compound {24 finish_test25 return26}27set ::enable_shared_cache [sqlite3_enable_shared_cache 1]28 29# Prepare multiple databases in shared cache mode.30#31do_test shared4-1.1 {32 forcedelete test1.db test1.db-journal33 forcedelete test2.db test2.db-journal34 forcedelete test3.db test3.db-journal35 forcedelete test4.db test4.db-journal36 sqlite3 db1 test1.db37 sqlite3 db2 test2.db38 sqlite3 db3 test3.db39 sqlite3 db4 test4.db40 db1 eval {41 CREATE TABLE t1(a);42 INSERT INTO t1 VALUES(111);43 }44 db2 eval {45 CREATE TABLE t2(b);46 INSERT INTO t2 VALUES(222);47 }48 db3 eval {49 CREATE TABLE t3(c);50 INSERT INTO t3 VALUES(333);51 }52 db4 eval {53 CREATE TABLE t4(d);54 INSERT INTO t4 VALUES(444);55 }56 db1 eval {57 ATTACH DATABASE 'test2.db' AS two;58 ATTACH DATABASE 'test3.db' AS three;59 ATTACH DATABASE 'test4.db' AS four;60 }61 db2 eval {62 ATTACH DATABASE 'test4.db' AS four;63 ATTACH DATABASE 'test3.db' AS three;64 ATTACH DATABASE 'test1.db' AS one;65 }66 db3 eval {67 ATTACH DATABASE 'test1.db' AS one;68 ATTACH DATABASE 'test2.db' AS two;69 ATTACH DATABASE 'test4.db' AS four;70 }71 db4 eval {72 ATTACH DATABASE 'test3.db' AS three;73 ATTACH DATABASE 'test2.db' AS two;74 ATTACH DATABASE 'test1.db' AS one;75 }76 db1 eval {77 SELECT a FROM t1 UNION ALL78 SELECT b FROM t2 UNION ALL79 SELECT c FROM t3 UNION ALL80 SELECT d FROM t4;81 }82} {111 222 333 444}83do_test shared4-1.2 {84 db2 eval {85 SELECT a FROM t1 UNION ALL86 SELECT b FROM t2 UNION ALL87 SELECT d FROM t4 UNION ALL88 SELECT c FROM t3;89 }90} {111 222 444 333}91do_test shared4-1.3 {92 db3 eval {93 SELECT a FROM t1 UNION ALL94 SELECT c FROM t3 UNION ALL95 SELECT b FROM t2 UNION ALL96 SELECT d FROM t4;97 }98} {111 333 222 444}99do_test shared4-1.4 {100 db4 eval {101 SELECT a FROM t1 UNION ALL102 SELECT c FROM t3 UNION ALL103 SELECT d FROM t4 UNION ALL104 SELECT b FROM t2;105 }106} {111 333 444 222}107do_test shared4-1.5 {108 db3 eval {109 SELECT a FROM t1 UNION ALL110 SELECT d FROM t4 UNION ALL111 SELECT b FROM t2 UNION ALL112 SELECT c FROM t3;113 }114} {111 444 222 333}115do_test shared4-1.6 {116 db4 eval {117 SELECT a FROM t1 UNION ALL118 SELECT d FROM t4 UNION ALL119 SELECT c FROM t3 UNION ALL120 SELECT b FROM t2;121 }122} {111 444 333 222}123do_test shared4-1.7 {124 db1 eval {125 SELECT b FROM t2 UNION ALL126 SELECT a FROM t1 UNION ALL127 SELECT c FROM t3 UNION ALL128 SELECT d FROM t4;129 }130} {222 111 333 444}131do_test shared4-1.8 {132 db2 eval {133 SELECT b FROM t2 UNION ALL134 SELECT a FROM t1 UNION ALL135 SELECT d FROM t4 UNION ALL136 SELECT c FROM t3;137 }138} {222 111 444 333}139do_test shared4-1.9 {140 db3 eval {141 SELECT b FROM t2 UNION ALL142 SELECT c FROM t3 UNION ALL143 SELECT a FROM t1 UNION ALL144 SELECT d FROM t4;145 }146} {222 333 111 444}147do_test shared4-1.10 {148 db4 eval {149 SELECT b FROM t2 UNION ALL150 SELECT c FROM t3 UNION ALL151 SELECT d FROM t4 UNION ALL152 SELECT a FROM t1;153 }154} {222 333 444 111}155do_test shared4-1.11 {156 db1 eval {157 SELECT c FROM t3 UNION ALL158 SELECT a FROM t1 UNION ALL159 SELECT b FROM t2 UNION ALL160 SELECT d FROM t4;161 }162} {333 111 222 444}163do_test shared4-1.12 {164 db2 eval {165 SELECT c FROM t3 UNION ALL166 SELECT a FROM t1 UNION ALL167 SELECT d FROM t4 UNION ALL168 SELECT b FROM t2;169 }170} {333 111 444 222}171 172do_test shared4-2.1 {173 db1 eval {174 UPDATE t1 SET a=a+1000;175 UPDATE t2 SET b=b+2000;176 UPDATE t3 SET c=c+3000;177 UPDATE t4 SET d=d+4000;178 }179 db2 eval {180 UPDATE t1 SET a=a+10000;181 UPDATE t2 SET b=b+20000;182 UPDATE t3 SET c=c+30000;183 UPDATE t4 SET d=d+40000;184 }185 db3 eval {186 UPDATE t1 SET a=a+100000;187 UPDATE t2 SET b=b+200000;188 UPDATE t3 SET c=c+300000;189 UPDATE t4 SET d=d+400000;190 }191 db4 eval {192 UPDATE t1 SET a=a+1000000;193 UPDATE t2 SET b=b+2000000;194 UPDATE t3 SET c=c+3000000;195 UPDATE t4 SET d=d+4000000;196 }197 db1 eval {198 SELECT a FROM t1 UNION ALL199 SELECT b FROM t2 UNION ALL200 SELECT c FROM t3 UNION ALL201 SELECT d FROM t4;202 }203} {1111111 2222222 3333333 4444444}204do_test shared4-2.2 {205 db2 eval {206 SELECT a FROM t1 UNION ALL207 SELECT b FROM t2 UNION ALL208 SELECT d FROM t4 UNION ALL209 SELECT c FROM t3;210 }211} {1111111 2222222 4444444 3333333}212do_test shared4-2.3 {213 db3 eval {214 SELECT a FROM t1 UNION ALL215 SELECT c FROM t3 UNION ALL216 SELECT b FROM t2 UNION ALL217 SELECT d FROM t4;218 }219} {1111111 3333333 2222222 4444444}220do_test shared4-2.4 {221 db4 eval {222 SELECT a FROM t1 UNION ALL223 SELECT c FROM t3 UNION ALL224 SELECT d FROM t4 UNION ALL225 SELECT b FROM t2;226 }227} {1111111 3333333 4444444 2222222}228 229 230db1 close231db2 close232db3 close233db4 close234 235sqlite3_enable_shared_cache $::enable_shared_cache236finish_test237 