gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/shared4.test (about) 1 # 2008 July 14 2 # 3 # The author disclaims copyright to this source code. In place of 4 # 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 16 set testdir [file dirname $argv0] 17 source $testdir/tester.tcl 18 db close 19 20 # This script is only valid if we are running shared-cache mode in a 21 # threadsafe-capable database engine. 22 # 23 ifcapable !shared_cache||!compound { 24 finish_test 25 return 26 } 27 set ::enable_shared_cache [sqlite3_enable_shared_cache 1] 28 29 # Prepare multiple databases in shared cache mode. 30 # 31 do_test shared4-1.1 { 32 forcedelete test1.db test1.db-journal 33 forcedelete test2.db test2.db-journal 34 forcedelete test3.db test3.db-journal 35 forcedelete test4.db test4.db-journal 36 sqlite3 db1 test1.db 37 sqlite3 db2 test2.db 38 sqlite3 db3 test3.db 39 sqlite3 db4 test4.db 40 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 ALL 78 SELECT b FROM t2 UNION ALL 79 SELECT c FROM t3 UNION ALL 80 SELECT d FROM t4; 81 } 82 } {111 222 333 444} 83 do_test shared4-1.2 { 84 db2 eval { 85 SELECT a FROM t1 UNION ALL 86 SELECT b FROM t2 UNION ALL 87 SELECT d FROM t4 UNION ALL 88 SELECT c FROM t3; 89 } 90 } {111 222 444 333} 91 do_test shared4-1.3 { 92 db3 eval { 93 SELECT a FROM t1 UNION ALL 94 SELECT c FROM t3 UNION ALL 95 SELECT b FROM t2 UNION ALL 96 SELECT d FROM t4; 97 } 98 } {111 333 222 444} 99 do_test shared4-1.4 { 100 db4 eval { 101 SELECT a FROM t1 UNION ALL 102 SELECT c FROM t3 UNION ALL 103 SELECT d FROM t4 UNION ALL 104 SELECT b FROM t2; 105 } 106 } {111 333 444 222} 107 do_test shared4-1.5 { 108 db3 eval { 109 SELECT a FROM t1 UNION ALL 110 SELECT d FROM t4 UNION ALL 111 SELECT b FROM t2 UNION ALL 112 SELECT c FROM t3; 113 } 114 } {111 444 222 333} 115 do_test shared4-1.6 { 116 db4 eval { 117 SELECT a FROM t1 UNION ALL 118 SELECT d FROM t4 UNION ALL 119 SELECT c FROM t3 UNION ALL 120 SELECT b FROM t2; 121 } 122 } {111 444 333 222} 123 do_test shared4-1.7 { 124 db1 eval { 125 SELECT b FROM t2 UNION ALL 126 SELECT a FROM t1 UNION ALL 127 SELECT c FROM t3 UNION ALL 128 SELECT d FROM t4; 129 } 130 } {222 111 333 444} 131 do_test shared4-1.8 { 132 db2 eval { 133 SELECT b FROM t2 UNION ALL 134 SELECT a FROM t1 UNION ALL 135 SELECT d FROM t4 UNION ALL 136 SELECT c FROM t3; 137 } 138 } {222 111 444 333} 139 do_test shared4-1.9 { 140 db3 eval { 141 SELECT b FROM t2 UNION ALL 142 SELECT c FROM t3 UNION ALL 143 SELECT a FROM t1 UNION ALL 144 SELECT d FROM t4; 145 } 146 } {222 333 111 444} 147 do_test shared4-1.10 { 148 db4 eval { 149 SELECT b FROM t2 UNION ALL 150 SELECT c FROM t3 UNION ALL 151 SELECT d FROM t4 UNION ALL 152 SELECT a FROM t1; 153 } 154 } {222 333 444 111} 155 do_test shared4-1.11 { 156 db1 eval { 157 SELECT c FROM t3 UNION ALL 158 SELECT a FROM t1 UNION ALL 159 SELECT b FROM t2 UNION ALL 160 SELECT d FROM t4; 161 } 162 } {333 111 222 444} 163 do_test shared4-1.12 { 164 db2 eval { 165 SELECT c FROM t3 UNION ALL 166 SELECT a FROM t1 UNION ALL 167 SELECT d FROM t4 UNION ALL 168 SELECT b FROM t2; 169 } 170 } {333 111 444 222} 171 172 do_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 ALL 199 SELECT b FROM t2 UNION ALL 200 SELECT c FROM t3 UNION ALL 201 SELECT d FROM t4; 202 } 203 } {1111111 2222222 3333333 4444444} 204 do_test shared4-2.2 { 205 db2 eval { 206 SELECT a FROM t1 UNION ALL 207 SELECT b FROM t2 UNION ALL 208 SELECT d FROM t4 UNION ALL 209 SELECT c FROM t3; 210 } 211 } {1111111 2222222 4444444 3333333} 212 do_test shared4-2.3 { 213 db3 eval { 214 SELECT a FROM t1 UNION ALL 215 SELECT c FROM t3 UNION ALL 216 SELECT b FROM t2 UNION ALL 217 SELECT d FROM t4; 218 } 219 } {1111111 3333333 2222222 4444444} 220 do_test shared4-2.4 { 221 db4 eval { 222 SELECT a FROM t1 UNION ALL 223 SELECT c FROM t3 UNION ALL 224 SELECT d FROM t4 UNION ALL 225 SELECT b FROM t2; 226 } 227 } {1111111 3333333 4444444 2222222} 228 229 230 db1 close 231 db2 close 232 db3 close 233 db4 close 234 235 sqlite3_enable_shared_cache $::enable_shared_cache 236 finish_test