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