PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/test/shared4.test

https://bitbucket.org/aware/sqlite
Unknown | 237 lines | 230 code | 7 blank | 0 comment | 0 complexity | f2d5137fa83d71160a075f88608b1d6b MD5 | raw file
  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:$
  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