shared4.test 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  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. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. db close
  18. puts hello
  19. # This script is only valid if we are running shared-cache mode in a
  20. # threadsafe-capable database engine.
  21. #
  22. ifcapable !shared_cache||!compound {
  23. finish_test
  24. return
  25. }
  26. set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
  27. # Prepare multiple databases in shared cache mode.
  28. #
  29. do_test shared4-1.1 {
  30. forcedelete test1.db test1.db-journal
  31. forcedelete test2.db test2.db-journal
  32. forcedelete test3.db test3.db-journal
  33. forcedelete test4.db test4.db-journal
  34. sqlite3 db1 test1.db
  35. sqlite3 db2 test2.db
  36. sqlite3 db3 test3.db
  37. sqlite3 db4 test4.db
  38. db1 eval {
  39. CREATE TABLE t1(a);
  40. INSERT INTO t1 VALUES(111);
  41. }
  42. db2 eval {
  43. CREATE TABLE t2(b);
  44. INSERT INTO t2 VALUES(222);
  45. }
  46. db3 eval {
  47. CREATE TABLE t3(c);
  48. INSERT INTO t3 VALUES(333);
  49. }
  50. db4 eval {
  51. CREATE TABLE t4(d);
  52. INSERT INTO t4 VALUES(444);
  53. }
  54. db1 eval {
  55. ATTACH DATABASE 'test2.db' AS two;
  56. ATTACH DATABASE 'test3.db' AS three;
  57. ATTACH DATABASE 'test4.db' AS four;
  58. }
  59. db2 eval {
  60. ATTACH DATABASE 'test4.db' AS four;
  61. ATTACH DATABASE 'test3.db' AS three;
  62. ATTACH DATABASE 'test1.db' AS one;
  63. }
  64. db3 eval {
  65. ATTACH DATABASE 'test1.db' AS one;
  66. ATTACH DATABASE 'test2.db' AS two;
  67. ATTACH DATABASE 'test4.db' AS four;
  68. }
  69. db4 eval {
  70. ATTACH DATABASE 'test3.db' AS three;
  71. ATTACH DATABASE 'test2.db' AS two;
  72. ATTACH DATABASE 'test1.db' AS one;
  73. }
  74. db1 eval {
  75. SELECT a FROM t1 UNION ALL
  76. SELECT b FROM t2 UNION ALL
  77. SELECT c FROM t3 UNION ALL
  78. SELECT d FROM t4;
  79. }
  80. } {111 222 333 444}
  81. do_test shared4-1.2 {
  82. db2 eval {
  83. SELECT a FROM t1 UNION ALL
  84. SELECT b FROM t2 UNION ALL
  85. SELECT d FROM t4 UNION ALL
  86. SELECT c FROM t3;
  87. }
  88. } {111 222 444 333}
  89. do_test shared4-1.3 {
  90. db3 eval {
  91. SELECT a FROM t1 UNION ALL
  92. SELECT c FROM t3 UNION ALL
  93. SELECT b FROM t2 UNION ALL
  94. SELECT d FROM t4;
  95. }
  96. } {111 333 222 444}
  97. do_test shared4-1.4 {
  98. db4 eval {
  99. SELECT a FROM t1 UNION ALL
  100. SELECT c FROM t3 UNION ALL
  101. SELECT d FROM t4 UNION ALL
  102. SELECT b FROM t2;
  103. }
  104. } {111 333 444 222}
  105. do_test shared4-1.5 {
  106. db3 eval {
  107. SELECT a FROM t1 UNION ALL
  108. SELECT d FROM t4 UNION ALL
  109. SELECT b FROM t2 UNION ALL
  110. SELECT c FROM t3;
  111. }
  112. } {111 444 222 333}
  113. do_test shared4-1.6 {
  114. db4 eval {
  115. SELECT a FROM t1 UNION ALL
  116. SELECT d FROM t4 UNION ALL
  117. SELECT c FROM t3 UNION ALL
  118. SELECT b FROM t2;
  119. }
  120. } {111 444 333 222}
  121. do_test shared4-1.7 {
  122. db1 eval {
  123. SELECT b FROM t2 UNION ALL
  124. SELECT a FROM t1 UNION ALL
  125. SELECT c FROM t3 UNION ALL
  126. SELECT d FROM t4;
  127. }
  128. } {222 111 333 444}
  129. do_test shared4-1.8 {
  130. db2 eval {
  131. SELECT b FROM t2 UNION ALL
  132. SELECT a FROM t1 UNION ALL
  133. SELECT d FROM t4 UNION ALL
  134. SELECT c FROM t3;
  135. }
  136. } {222 111 444 333}
  137. do_test shared4-1.9 {
  138. db3 eval {
  139. SELECT b FROM t2 UNION ALL
  140. SELECT c FROM t3 UNION ALL
  141. SELECT a FROM t1 UNION ALL
  142. SELECT d FROM t4;
  143. }
  144. } {222 333 111 444}
  145. do_test shared4-1.10 {
  146. db4 eval {
  147. SELECT b FROM t2 UNION ALL
  148. SELECT c FROM t3 UNION ALL
  149. SELECT d FROM t4 UNION ALL
  150. SELECT a FROM t1;
  151. }
  152. } {222 333 444 111}
  153. do_test shared4-1.11 {
  154. db1 eval {
  155. SELECT c FROM t3 UNION ALL
  156. SELECT a FROM t1 UNION ALL
  157. SELECT b FROM t2 UNION ALL
  158. SELECT d FROM t4;
  159. }
  160. } {333 111 222 444}
  161. do_test shared4-1.12 {
  162. db2 eval {
  163. SELECT c FROM t3 UNION ALL
  164. SELECT a FROM t1 UNION ALL
  165. SELECT d FROM t4 UNION ALL
  166. SELECT b FROM t2;
  167. }
  168. } {333 111 444 222}
  169. do_test shared4-2.1 {
  170. db1 eval {
  171. UPDATE t1 SET a=a+1000;
  172. UPDATE t2 SET b=b+2000;
  173. UPDATE t3 SET c=c+3000;
  174. UPDATE t4 SET d=d+4000;
  175. }
  176. db2 eval {
  177. UPDATE t1 SET a=a+10000;
  178. UPDATE t2 SET b=b+20000;
  179. UPDATE t3 SET c=c+30000;
  180. UPDATE t4 SET d=d+40000;
  181. }
  182. db3 eval {
  183. UPDATE t1 SET a=a+100000;
  184. UPDATE t2 SET b=b+200000;
  185. UPDATE t3 SET c=c+300000;
  186. UPDATE t4 SET d=d+400000;
  187. }
  188. db4 eval {
  189. UPDATE t1 SET a=a+1000000;
  190. UPDATE t2 SET b=b+2000000;
  191. UPDATE t3 SET c=c+3000000;
  192. UPDATE t4 SET d=d+4000000;
  193. }
  194. db1 eval {
  195. SELECT a FROM t1 UNION ALL
  196. SELECT b FROM t2 UNION ALL
  197. SELECT c FROM t3 UNION ALL
  198. SELECT d FROM t4;
  199. }
  200. } {1111111 2222222 3333333 4444444}
  201. do_test shared4-2.2 {
  202. db2 eval {
  203. SELECT a FROM t1 UNION ALL
  204. SELECT b FROM t2 UNION ALL
  205. SELECT d FROM t4 UNION ALL
  206. SELECT c FROM t3;
  207. }
  208. } {1111111 2222222 4444444 3333333}
  209. do_test shared4-2.3 {
  210. db3 eval {
  211. SELECT a FROM t1 UNION ALL
  212. SELECT c FROM t3 UNION ALL
  213. SELECT b FROM t2 UNION ALL
  214. SELECT d FROM t4;
  215. }
  216. } {1111111 3333333 2222222 4444444}
  217. do_test shared4-2.4 {
  218. db4 eval {
  219. SELECT a FROM t1 UNION ALL
  220. SELECT c FROM t3 UNION ALL
  221. SELECT d FROM t4 UNION ALL
  222. SELECT b FROM t2;
  223. }
  224. } {1111111 3333333 4444444 2222222}
  225. db1 close
  226. db2 close
  227. db3 close
  228. db4 close
  229. sqlite3_enable_shared_cache $::enable_shared_cache
  230. finish_test