multiwrite01.test 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. /*
  2. ** This script sets up five different tasks all writing and updating
  3. ** the database at the same time, but each in its own table.
  4. */
  5. --task 1 build-t1
  6. DROP TABLE IF EXISTS t1;
  7. CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
  8. --sleep 1
  9. INSERT INTO t1 VALUES(1, randomblob(2000));
  10. INSERT INTO t1 VALUES(2, randomblob(1000));
  11. --sleep 1
  12. INSERT INTO t1 SELECT a+2, randomblob(1500) FROM t1;
  13. INSERT INTO t1 SELECT a+4, randomblob(1500) FROM t1;
  14. INSERT INTO t1 SELECT a+8, randomblob(1500) FROM t1;
  15. --sleep 1
  16. INSERT INTO t1 SELECT a+16, randomblob(1500) FROM t1;
  17. --sleep 1
  18. INSERT INTO t1 SELECT a+32, randomblob(1500) FROM t1;
  19. SELECT count(*) FROM t1;
  20. --match 64
  21. SELECT avg(length(b)) FROM t1;
  22. --match 1500.0
  23. --sleep 2
  24. UPDATE t1 SET b='x'||a||'y';
  25. SELECT sum(length(b)) FROM t1;
  26. --match 247
  27. SELECT a FROM t1 WHERE b='x17y';
  28. --match 17
  29. CREATE INDEX t1b ON t1(b);
  30. SELECT a FROM t1 WHERE b='x17y';
  31. --match 17
  32. SELECT a FROM t1 WHERE b GLOB 'x2?y' ORDER BY b DESC LIMIT 5;
  33. --match 29 28 27 26 25
  34. --end
  35. --task 2 build-t2
  36. DROP TABLE IF EXISTS t2;
  37. CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
  38. --sleep 1
  39. INSERT INTO t2 VALUES(1, randomblob(2000));
  40. INSERT INTO t2 VALUES(2, randomblob(1000));
  41. --sleep 1
  42. INSERT INTO t2 SELECT a+2, randomblob(1500) FROM t2;
  43. INSERT INTO t2 SELECT a+4, randomblob(1500) FROM t2;
  44. INSERT INTO t2 SELECT a+8, randomblob(1500) FROM t2;
  45. --sleep 1
  46. INSERT INTO t2 SELECT a+16, randomblob(1500) FROM t2;
  47. --sleep 1
  48. INSERT INTO t2 SELECT a+32, randomblob(1500) FROM t2;
  49. SELECT count(*) FROM t2;
  50. --match 64
  51. SELECT avg(length(b)) FROM t2;
  52. --match 1500.0
  53. --sleep 2
  54. UPDATE t2 SET b='x'||a||'y';
  55. SELECT sum(length(b)) FROM t2;
  56. --match 247
  57. SELECT a FROM t2 WHERE b='x17y';
  58. --match 17
  59. CREATE INDEX t2b ON t2(b);
  60. SELECT a FROM t2 WHERE b='x17y';
  61. --match 17
  62. SELECT a FROM t2 WHERE b GLOB 'x2?y' ORDER BY b DESC LIMIT 5;
  63. --match 29 28 27 26 25
  64. --end
  65. --task 3 build-t3
  66. DROP TABLE IF EXISTS t3;
  67. CREATE TABLE t3(a INTEGER PRIMARY KEY, b);
  68. --sleep 1
  69. INSERT INTO t3 VALUES(1, randomblob(2000));
  70. INSERT INTO t3 VALUES(2, randomblob(1000));
  71. --sleep 1
  72. INSERT INTO t3 SELECT a+2, randomblob(1500) FROM t3;
  73. INSERT INTO t3 SELECT a+4, randomblob(1500) FROM t3;
  74. INSERT INTO t3 SELECT a+8, randomblob(1500) FROM t3;
  75. --sleep 1
  76. INSERT INTO t3 SELECT a+16, randomblob(1500) FROM t3;
  77. --sleep 1
  78. INSERT INTO t3 SELECT a+32, randomblob(1500) FROM t3;
  79. SELECT count(*) FROM t3;
  80. --match 64
  81. SELECT avg(length(b)) FROM t3;
  82. --match 1500.0
  83. --sleep 2
  84. UPDATE t3 SET b='x'||a||'y';
  85. SELECT sum(length(b)) FROM t3;
  86. --match 247
  87. SELECT a FROM t3 WHERE b='x17y';
  88. --match 17
  89. CREATE INDEX t3b ON t3(b);
  90. SELECT a FROM t3 WHERE b='x17y';
  91. --match 17
  92. SELECT a FROM t3 WHERE b GLOB 'x2?y' ORDER BY b DESC LIMIT 5;
  93. --match 29 28 27 26 25
  94. --end
  95. --task 4 build-t4
  96. DROP TABLE IF EXISTS t4;
  97. CREATE TABLE t4(a INTEGER PRIMARY KEY, b);
  98. --sleep 1
  99. INSERT INTO t4 VALUES(1, randomblob(2000));
  100. INSERT INTO t4 VALUES(2, randomblob(1000));
  101. --sleep 1
  102. INSERT INTO t4 SELECT a+2, randomblob(1500) FROM t4;
  103. INSERT INTO t4 SELECT a+4, randomblob(1500) FROM t4;
  104. INSERT INTO t4 SELECT a+8, randomblob(1500) FROM t4;
  105. --sleep 1
  106. INSERT INTO t4 SELECT a+16, randomblob(1500) FROM t4;
  107. --sleep 1
  108. INSERT INTO t4 SELECT a+32, randomblob(1500) FROM t4;
  109. SELECT count(*) FROM t4;
  110. --match 64
  111. SELECT avg(length(b)) FROM t4;
  112. --match 1500.0
  113. --sleep 2
  114. UPDATE t4 SET b='x'||a||'y';
  115. SELECT sum(length(b)) FROM t4;
  116. --match 247
  117. SELECT a FROM t4 WHERE b='x17y';
  118. --match 17
  119. CREATE INDEX t4b ON t4(b);
  120. SELECT a FROM t4 WHERE b='x17y';
  121. --match 17
  122. SELECT a FROM t4 WHERE b GLOB 'x2?y' ORDER BY b DESC LIMIT 5;
  123. --match 29 28 27 26 25
  124. --end
  125. --task 5 build-t5
  126. DROP TABLE IF EXISTS t5;
  127. CREATE TABLE t5(a INTEGER PRIMARY KEY, b);
  128. --sleep 1
  129. INSERT INTO t5 VALUES(1, randomblob(2000));
  130. INSERT INTO t5 VALUES(2, randomblob(1000));
  131. --sleep 1
  132. INSERT INTO t5 SELECT a+2, randomblob(1500) FROM t5;
  133. INSERT INTO t5 SELECT a+4, randomblob(1500) FROM t5;
  134. INSERT INTO t5 SELECT a+8, randomblob(1500) FROM t5;
  135. --sleep 1
  136. INSERT INTO t5 SELECT a+16, randomblob(1500) FROM t5;
  137. --sleep 1
  138. INSERT INTO t5 SELECT a+32, randomblob(1500) FROM t5;
  139. SELECT count(*) FROM t5;
  140. --match 64
  141. SELECT avg(length(b)) FROM t5;
  142. --match 1500.0
  143. --sleep 2
  144. UPDATE t5 SET b='x'||a||'y';
  145. SELECT sum(length(b)) FROM t5;
  146. --match 247
  147. SELECT a FROM t5 WHERE b='x17y';
  148. --match 17
  149. CREATE INDEX t5b ON t5(b);
  150. SELECT a FROM t5 WHERE b='x17y';
  151. --match 17
  152. SELECT a FROM t5 WHERE b GLOB 'x2?y' ORDER BY b DESC LIMIT 5;
  153. --match 29 28 27 26 25
  154. --end
  155. --wait all
  156. SELECT count(*), sum(length(b)) FROM t1;
  157. --match 64 247
  158. SELECT count(*), sum(length(b)) FROM t2;
  159. --match 64 247
  160. SELECT count(*), sum(length(b)) FROM t3;
  161. --match 64 247
  162. SELECT count(*), sum(length(b)) FROM t4;
  163. --match 64 247
  164. SELECT count(*), sum(length(b)) FROM t5;
  165. --match 64 247
  166. --task 1
  167. SELECT t1.a FROM t1, t2
  168. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  169. ORDER BY t1.a LIMIT 4
  170. --match 33 34 35 36
  171. SELECT t3.a FROM t3, t4
  172. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  173. ORDER BY t3.a LIMIT 7
  174. --match 45 46 47 48 49 50 51
  175. --end
  176. --task 5
  177. SELECT t1.a FROM t1, t2
  178. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  179. ORDER BY t1.a LIMIT 4
  180. --match 33 34 35 36
  181. SELECT t3.a FROM t3, t4
  182. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  183. ORDER BY t3.a LIMIT 7
  184. --match 45 46 47 48 49 50 51
  185. --end
  186. --task 3
  187. SELECT t1.a FROM t1, t2
  188. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  189. ORDER BY t1.a LIMIT 4
  190. --match 33 34 35 36
  191. SELECT t3.a FROM t3, t4
  192. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  193. ORDER BY t3.a LIMIT 7
  194. --match 45 46 47 48 49 50 51
  195. --end
  196. --task 2
  197. SELECT t1.a FROM t1, t2
  198. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  199. ORDER BY t1.a LIMIT 4
  200. --match 33 34 35 36
  201. SELECT t3.a FROM t3, t4
  202. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  203. ORDER BY t3.a LIMIT 7
  204. --match 45 46 47 48 49 50 51
  205. --end
  206. --task 4
  207. SELECT t1.a FROM t1, t2
  208. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  209. ORDER BY t1.a LIMIT 4
  210. --match 33 34 35 36
  211. SELECT t3.a FROM t3, t4
  212. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  213. ORDER BY t3.a LIMIT 7
  214. --match 45 46 47 48 49 50 51
  215. --end
  216. --wait all
  217. --task 5
  218. DROP INDEX t5b;
  219. --sleep 5
  220. PRAGMA integrity_check(10);
  221. --match ok
  222. CREATE INDEX t5b ON t5(b DESC);
  223. --end
  224. --task 3
  225. DROP INDEX t3b;
  226. --sleep 5
  227. PRAGMA integrity_check(10);
  228. --match ok
  229. CREATE INDEX t3b ON t3(b DESC);
  230. --end
  231. --task 1
  232. DROP INDEX t1b;
  233. --sleep 5
  234. PRAGMA integrity_check(10);
  235. --match ok
  236. CREATE INDEX t1b ON t1(b DESC);
  237. --end
  238. --task 2
  239. DROP INDEX t2b;
  240. --sleep 5
  241. PRAGMA integrity_check(10);
  242. --match ok
  243. CREATE INDEX t2b ON t2(b DESC);
  244. --end
  245. --task 4
  246. DROP INDEX t4b;
  247. --sleep 5
  248. PRAGMA integrity_check(10);
  249. --match ok
  250. CREATE INDEX t4b ON t4(b DESC);
  251. --end
  252. --wait all
  253. --task 1
  254. SELECT t1.a FROM t1, t2
  255. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  256. ORDER BY t1.a LIMIT 4
  257. --match 33 34 35 36
  258. SELECT t3.a FROM t3, t4
  259. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  260. ORDER BY t3.a LIMIT 7
  261. --match 45 46 47 48 49 50 51
  262. --end
  263. --task 5
  264. SELECT t1.a FROM t1, t2
  265. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  266. ORDER BY t1.a LIMIT 4
  267. --match 33 34 35 36
  268. SELECT t3.a FROM t3, t4
  269. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  270. ORDER BY t3.a LIMIT 7
  271. --match 45 46 47 48 49 50 51
  272. --end
  273. --task 3
  274. SELECT t1.a FROM t1, t2
  275. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  276. ORDER BY t1.a LIMIT 4
  277. --match 33 34 35 36
  278. SELECT t3.a FROM t3, t4
  279. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  280. ORDER BY t3.a LIMIT 7
  281. --match 45 46 47 48 49 50 51
  282. --end
  283. --task 2
  284. SELECT t1.a FROM t1, t2
  285. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  286. ORDER BY t1.a LIMIT 4
  287. --match 33 34 35 36
  288. SELECT t3.a FROM t3, t4
  289. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  290. ORDER BY t3.a LIMIT 7
  291. --match 45 46 47 48 49 50 51
  292. --end
  293. --task 4
  294. SELECT t1.a FROM t1, t2
  295. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  296. ORDER BY t1.a LIMIT 4
  297. --match 33 34 35 36
  298. SELECT t3.a FROM t3, t4
  299. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  300. ORDER BY t3.a LIMIT 7
  301. --match 45 46 47 48 49 50 51
  302. --end
  303. --wait all
  304. VACUUM;
  305. PRAGMA integrity_check(10);
  306. --match ok
  307. --task 1
  308. UPDATE t1 SET b=randomblob(20000);
  309. --sleep 5
  310. UPDATE t1 SET b='x'||a||'y';
  311. SELECT a FROM t1 WHERE b='x63y';
  312. --match 63
  313. --end
  314. --task 2
  315. UPDATE t2 SET b=randomblob(20000);
  316. --sleep 5
  317. UPDATE t2 SET b='x'||a||'y';
  318. SELECT a FROM t2 WHERE b='x63y';
  319. --match 63
  320. --end
  321. --task 3
  322. UPDATE t3 SET b=randomblob(20000);
  323. --sleep 5
  324. UPDATE t3 SET b='x'||a||'y';
  325. SELECT a FROM t3 WHERE b='x63y';
  326. --match 63
  327. --end
  328. --task 4
  329. UPDATE t4 SET b=randomblob(20000);
  330. --sleep 5
  331. UPDATE t4 SET b='x'||a||'y';
  332. SELECT a FROM t4 WHERE b='x63y';
  333. --match 63
  334. --end
  335. --task 5
  336. UPDATE t5 SET b=randomblob(20000);
  337. --sleep 5
  338. UPDATE t5 SET b='x'||a||'y';
  339. SELECT a FROM t5 WHERE b='x63y';
  340. --match 63
  341. --end
  342. --wait all
  343. --task 1
  344. SELECT t1.a FROM t1, t2
  345. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  346. ORDER BY t1.a LIMIT 4
  347. --match 33 34 35 36
  348. SELECT t3.a FROM t3, t4
  349. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  350. ORDER BY t3.a LIMIT 7
  351. --match 45 46 47 48 49 50 51
  352. --end
  353. --task 5
  354. SELECT t1.a FROM t1, t2
  355. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  356. ORDER BY t1.a LIMIT 4
  357. --match 33 34 35 36
  358. SELECT t3.a FROM t3, t4
  359. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  360. ORDER BY t3.a LIMIT 7
  361. --match 45 46 47 48 49 50 51
  362. --end
  363. --task 3
  364. SELECT t1.a FROM t1, t2
  365. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  366. ORDER BY t1.a LIMIT 4
  367. --match 33 34 35 36
  368. SELECT t3.a FROM t3, t4
  369. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  370. ORDER BY t3.a LIMIT 7
  371. --match 45 46 47 48 49 50 51
  372. --end
  373. --task 2
  374. SELECT t1.a FROM t1, t2
  375. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  376. ORDER BY t1.a LIMIT 4
  377. --match 33 34 35 36
  378. SELECT t3.a FROM t3, t4
  379. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  380. ORDER BY t3.a LIMIT 7
  381. --match 45 46 47 48 49 50 51
  382. --end
  383. --task 4
  384. SELECT t1.a FROM t1, t2
  385. WHERE t2.b GLOB 'x3?y' AND t1.b=('x'||(t2.a+3)||'y')
  386. ORDER BY t1.a LIMIT 4
  387. --match 33 34 35 36
  388. SELECT t3.a FROM t3, t4
  389. WHERE t4.b GLOB 'x4?y' AND t3.b=('x'||(t4.a+5)||'y')
  390. ORDER BY t3.a LIMIT 7
  391. --match 45 46 47 48 49 50 51
  392. --end
  393. --wait all