1SET @max_row = 20;
2SET @@session.default_storage_engine = 'InnoDB';
3
4#------------------------------------------------------------------------
5#  0. Setting of auxiliary variables + Creation of an auxiliary tables
6#     needed in many testcases
7#------------------------------------------------------------------------
8SELECT @max_row DIV 2 INTO @max_row_div2;
9SELECT @max_row DIV 3 INTO @max_row_div3;
10SELECT @max_row DIV 4 INTO @max_row_div4;
11SET @max_int_4 = 2147483647;
12DROP TABLE IF EXISTS t0_template;
13CREATE TABLE t0_template (
14f_int1 INTEGER DEFAULT 0,
15f_int2 INTEGER DEFAULT 0,
16f_char1 CHAR(20),
17f_char2 CHAR(20),
18f_charbig VARCHAR(1000) ,
19PRIMARY KEY(f_int1))
20ENGINE = MEMORY;
21#     Logging of <max_row> INSERTs into t0_template suppressed
22DROP TABLE IF EXISTS t0_definition;
23CREATE TABLE t0_definition (
24state CHAR(3),
25create_command VARBINARY(5000),
26file_list      VARBINARY(10000),
27PRIMARY KEY (state)
28) ENGINE = MEMORY;
29DROP TABLE IF EXISTS t0_aux;
30CREATE TABLE t0_aux ( f_int1 INTEGER DEFAULT 0,
31f_int2 INTEGER DEFAULT 0,
32f_char1 CHAR(20),
33f_char2 CHAR(20),
34f_charbig VARCHAR(1000) )
35ENGINE = MEMORY;
36SET AUTOCOMMIT= 1;
37SET @@session.sql_mode= '';
38# End of basic preparations needed for all tests
39#-----------------------------------------------
40
41#========================================================================
42#  1.    ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
43#========================================================================
44#------------------------------------------------------------------------
45#  1.1   ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1)
46#        within the partitioning function
47#------------------------------------------------------------------------
48DROP TABLE IF EXISTS t1;
49CREATE TABLE t1 (
50f_int1 INTEGER DEFAULT 0,
51f_int2 INTEGER DEFAULT 0,
52f_char1 CHAR(20),
53f_char2 CHAR(20),
54f_charbig VARCHAR(1000)
55
56)
57PARTITION BY HASH(f_int1) PARTITIONS 2;
58INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
59SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
60WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
61ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
62ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
63DROP TABLE t1;
64CREATE TABLE t1 (
65f_int1 INTEGER DEFAULT 0,
66f_int2 INTEGER DEFAULT 0,
67f_char1 CHAR(20),
68f_char2 CHAR(20),
69f_charbig VARCHAR(1000)
70
71)
72PARTITION BY KEY(f_int1) PARTITIONS 5;
73INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
74SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
75WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
76ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
77ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
78DROP TABLE t1;
79CREATE TABLE t1 (
80f_int1 INTEGER DEFAULT 0,
81f_int2 INTEGER DEFAULT 0,
82f_char1 CHAR(20),
83f_char2 CHAR(20),
84f_charbig VARCHAR(1000)
85
86)
87PARTITION BY LIST(MOD(f_int1,4))
88(PARTITION part_3 VALUES IN (-3),
89PARTITION part_2 VALUES IN (-2),
90PARTITION part_1 VALUES IN (-1),
91PARTITION part_N VALUES IN (NULL),
92PARTITION part0 VALUES IN (0),
93PARTITION part1 VALUES IN (1),
94PARTITION part2 VALUES IN (2),
95PARTITION part3 VALUES IN (3));
96INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
97SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
98WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
99ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
100ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
101DROP TABLE t1;
102CREATE TABLE t1 (
103f_int1 INTEGER DEFAULT 0,
104f_int2 INTEGER DEFAULT 0,
105f_char1 CHAR(20),
106f_char2 CHAR(20),
107f_charbig VARCHAR(1000)
108
109)
110PARTITION BY RANGE(f_int1)
111(PARTITION parta VALUES LESS THAN (0),
112PARTITION partb VALUES LESS THAN (5),
113PARTITION partc VALUES LESS THAN (10),
114PARTITION partd VALUES LESS THAN (10 + 5),
115PARTITION parte VALUES LESS THAN (20),
116PARTITION partf VALUES LESS THAN (2147483646));
117INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
118SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
119WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
120ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
121ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
122DROP TABLE t1;
123CREATE TABLE t1 (
124f_int1 INTEGER DEFAULT 0,
125f_int2 INTEGER DEFAULT 0,
126f_char1 CHAR(20),
127f_char2 CHAR(20),
128f_charbig VARCHAR(1000)
129
130)
131PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
132(PARTITION parta VALUES LESS THAN (0),
133PARTITION partb VALUES LESS THAN (5),
134PARTITION partc VALUES LESS THAN (10),
135PARTITION partd VALUES LESS THAN (2147483646));
136INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
137SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
138WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
139ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
140ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
141DROP TABLE t1;
142CREATE TABLE t1 (
143f_int1 INTEGER DEFAULT 0,
144f_int2 INTEGER DEFAULT 0,
145f_char1 CHAR(20),
146f_char2 CHAR(20),
147f_charbig VARCHAR(1000)
148
149)
150PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
151(PARTITION part1 VALUES LESS THAN (0)
152(SUBPARTITION subpart11, SUBPARTITION subpart12),
153PARTITION part2 VALUES LESS THAN (5)
154(SUBPARTITION subpart21, SUBPARTITION subpart22),
155PARTITION part3 VALUES LESS THAN (10)
156(SUBPARTITION subpart31, SUBPARTITION subpart32),
157PARTITION part4 VALUES LESS THAN (2147483646)
158(SUBPARTITION subpart41, SUBPARTITION subpart42));
159INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
160SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
161WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
162ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
163ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
164DROP TABLE t1;
165CREATE TABLE t1 (
166f_int1 INTEGER DEFAULT 0,
167f_int2 INTEGER DEFAULT 0,
168f_char1 CHAR(20),
169f_char2 CHAR(20),
170f_charbig VARCHAR(1000)
171
172)
173PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
174(PARTITION part1 VALUES IN (0)
175(SUBPARTITION sp11, SUBPARTITION sp12),
176PARTITION part2 VALUES IN (1)
177(SUBPARTITION sp21, SUBPARTITION sp22),
178PARTITION part3 VALUES IN (2)
179(SUBPARTITION sp31, SUBPARTITION sp32),
180PARTITION part4 VALUES IN (NULL)
181(SUBPARTITION sp41, SUBPARTITION sp42));
182INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
183SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
184WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
185ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
186ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
187DROP TABLE t1;
188CREATE TABLE t1 (
189f_int1 INTEGER DEFAULT 0,
190f_int2 INTEGER DEFAULT 0,
191f_char1 CHAR(20),
192f_char2 CHAR(20),
193f_charbig VARCHAR(1000)
194
195)
196PARTITION BY LIST(ABS(MOD(f_int1,2)))
197SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
198(PARTITION part1 VALUES IN (0),
199PARTITION part2 VALUES IN (1),
200PARTITION part3 VALUES IN (NULL));
201INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
202SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
203WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
204ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
205ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function
206DROP TABLE t1;
207DROP TABLE IF EXISTS t1;
208CREATE TABLE t1 (
209f_int1 INTEGER DEFAULT 0,
210f_int2 INTEGER DEFAULT 0,
211f_char1 CHAR(20),
212f_char2 CHAR(20),
213f_charbig VARCHAR(1000)
214
215)
216PARTITION BY HASH(f_int1) PARTITIONS 2;
217INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
218SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
219WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
220ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
221ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
222DROP TABLE t1;
223CREATE TABLE t1 (
224f_int1 INTEGER DEFAULT 0,
225f_int2 INTEGER DEFAULT 0,
226f_char1 CHAR(20),
227f_char2 CHAR(20),
228f_charbig VARCHAR(1000)
229
230)
231PARTITION BY KEY(f_int1) PARTITIONS 5;
232INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
233SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
234WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
235ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
236ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
237DROP TABLE t1;
238CREATE TABLE t1 (
239f_int1 INTEGER DEFAULT 0,
240f_int2 INTEGER DEFAULT 0,
241f_char1 CHAR(20),
242f_char2 CHAR(20),
243f_charbig VARCHAR(1000)
244
245)
246PARTITION BY LIST(MOD(f_int1,4))
247(PARTITION part_3 VALUES IN (-3),
248PARTITION part_2 VALUES IN (-2),
249PARTITION part_1 VALUES IN (-1),
250PARTITION part_N VALUES IN (NULL),
251PARTITION part0 VALUES IN (0),
252PARTITION part1 VALUES IN (1),
253PARTITION part2 VALUES IN (2),
254PARTITION part3 VALUES IN (3));
255INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
256SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
257WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
258ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
259ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
260DROP TABLE t1;
261CREATE TABLE t1 (
262f_int1 INTEGER DEFAULT 0,
263f_int2 INTEGER DEFAULT 0,
264f_char1 CHAR(20),
265f_char2 CHAR(20),
266f_charbig VARCHAR(1000)
267
268)
269PARTITION BY RANGE(f_int1)
270(PARTITION parta VALUES LESS THAN (0),
271PARTITION partb VALUES LESS THAN (5),
272PARTITION partc VALUES LESS THAN (10),
273PARTITION partd VALUES LESS THAN (10 + 5),
274PARTITION parte VALUES LESS THAN (20),
275PARTITION partf VALUES LESS THAN (2147483646));
276INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
277SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
278WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
279ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
280ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
281DROP TABLE t1;
282CREATE TABLE t1 (
283f_int1 INTEGER DEFAULT 0,
284f_int2 INTEGER DEFAULT 0,
285f_char1 CHAR(20),
286f_char2 CHAR(20),
287f_charbig VARCHAR(1000)
288
289)
290PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
291(PARTITION parta VALUES LESS THAN (0),
292PARTITION partb VALUES LESS THAN (5),
293PARTITION partc VALUES LESS THAN (10),
294PARTITION partd VALUES LESS THAN (2147483646));
295INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
296SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
297WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
298ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
299ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
300DROP TABLE t1;
301CREATE TABLE t1 (
302f_int1 INTEGER DEFAULT 0,
303f_int2 INTEGER DEFAULT 0,
304f_char1 CHAR(20),
305f_char2 CHAR(20),
306f_charbig VARCHAR(1000)
307
308)
309PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
310(PARTITION part1 VALUES LESS THAN (0)
311(SUBPARTITION subpart11, SUBPARTITION subpart12),
312PARTITION part2 VALUES LESS THAN (5)
313(SUBPARTITION subpart21, SUBPARTITION subpart22),
314PARTITION part3 VALUES LESS THAN (10)
315(SUBPARTITION subpart31, SUBPARTITION subpart32),
316PARTITION part4 VALUES LESS THAN (2147483646)
317(SUBPARTITION subpart41, SUBPARTITION subpart42));
318INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
319SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
320WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
321ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
322ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
323DROP TABLE t1;
324CREATE TABLE t1 (
325f_int1 INTEGER DEFAULT 0,
326f_int2 INTEGER DEFAULT 0,
327f_char1 CHAR(20),
328f_char2 CHAR(20),
329f_charbig VARCHAR(1000)
330
331)
332PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
333(PARTITION part1 VALUES IN (0)
334(SUBPARTITION sp11, SUBPARTITION sp12),
335PARTITION part2 VALUES IN (1)
336(SUBPARTITION sp21, SUBPARTITION sp22),
337PARTITION part3 VALUES IN (2)
338(SUBPARTITION sp31, SUBPARTITION sp32),
339PARTITION part4 VALUES IN (NULL)
340(SUBPARTITION sp41, SUBPARTITION sp42));
341INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
342SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
343WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
344ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
345ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
346DROP TABLE t1;
347CREATE TABLE t1 (
348f_int1 INTEGER DEFAULT 0,
349f_int2 INTEGER DEFAULT 0,
350f_char1 CHAR(20),
351f_char2 CHAR(20),
352f_charbig VARCHAR(1000)
353
354)
355PARTITION BY LIST(ABS(MOD(f_int1,2)))
356SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
357(PARTITION part1 VALUES IN (0),
358PARTITION part2 VALUES IN (1),
359PARTITION part3 VALUES IN (NULL));
360INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
361SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
362WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
363ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
364ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function
365DROP TABLE t1;
366#  1.1.3 PRIMARY KEY consisting of two columns
367DROP TABLE IF EXISTS t1;
368CREATE TABLE t1 (
369f_int1 INTEGER DEFAULT 0,
370f_int2 INTEGER DEFAULT 0,
371f_char1 CHAR(20),
372f_char2 CHAR(20),
373f_charbig VARCHAR(1000)
374
375)
376PARTITION BY HASH(f_int1) PARTITIONS 2;
377INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
378SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
379WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
380ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
381INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
382SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
383WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
384# Start usability test (inc/partition_check.inc)
385create_command
386SHOW CREATE TABLE t1;
387Table	Create Table
388t1	CREATE TABLE `t1` (
389  `f_int1` int(11) NOT NULL DEFAULT 0,
390  `f_int2` int(11) NOT NULL DEFAULT 0,
391  `f_char1` char(20) DEFAULT NULL,
392  `f_char2` char(20) DEFAULT NULL,
393  `f_charbig` varchar(1000) DEFAULT NULL,
394  PRIMARY KEY (`f_int1`,`f_int2`)
395) ENGINE=InnoDB DEFAULT CHARSET=latin1
396 PARTITION BY HASH (`f_int1`)
397PARTITIONS 2
398
399# check prerequisites-1 success:    1
400# check COUNT(*) success:    1
401# check MIN/MAX(f_int1) success:    1
402# check MIN/MAX(f_int2) success:    1
403INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
404SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
405CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
406WHERE f_int1 IN (2,3);
407ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
408# check prerequisites-3 success:    1
409# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
410INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
411SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
412CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
413WHERE f_int1 IN (2,3);
414DELETE FROM t1 WHERE f_charbig = 'delete me';
415INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
416SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
417CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
418WHERE f_int1 IN (2,3);
419DELETE FROM t1 WHERE f_charbig = 'delete me';
420# check read via f_int1 success: 1
421# check read via f_int2 success: 1
422
423# check multiple-1 success: 	1
424DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
425
426# check multiple-2 success: 	1
427INSERT INTO t1 SELECT * FROM t0_template
428WHERE MOD(f_int1,3) = 0;
429
430# check multiple-3 success: 	1
431UPDATE t1 SET f_int1 = f_int1 + @max_row
432WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
433AND @max_row_div2 + @max_row_div4;
434
435# check multiple-4 success: 	1
436DELETE FROM t1
437WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
438AND @max_row_div2 + @max_row_div4 + @max_row;
439
440# check multiple-5 success: 	1
441SELECT COUNT(*) INTO @try_count FROM t0_template
442WHERE MOD(f_int1,3) = 0
443AND f_int1 BETWEEN @max_row_div2 AND @max_row;
444SELECT COUNT(*) INTO @clash_count
445FROM t1 INNER JOIN t0_template USING(f_int1)
446WHERE MOD(f_int1,3) = 0
447AND f_int1 BETWEEN @max_row_div2 AND @max_row;
448SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
449INSERT INTO t1
450SET f_int1 = @cur_value , f_int2 = @cur_value,
451f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
452f_charbig = '#SINGLE#';
453
454# check single-1 success: 	1
455SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
456INSERT INTO t1
457SET f_int1 = @cur_value , f_int2 = @cur_value,
458f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
459f_charbig = '#SINGLE#';
460
461# check single-2 success: 	1
462SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
463SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
464UPDATE t1 SET f_int1 = @cur_value2
465WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
466
467# check single-3 success: 	1
468SET @cur_value1= -1;
469SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
470UPDATE t1 SET f_int1 = @cur_value1
471WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
472
473# check single-4 success: 	1
474SELECT MAX(f_int1) INTO @cur_value FROM t1;
475DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
476
477# check single-5 success: 	1
478DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
479
480# check single-6 success: 	1
481INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
482
483# check single-7 success: 	1
484DELETE FROM t1 WHERE f_charbig = '#2147483647##';
485DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
486INSERT t1 SET f_int1 = 0 , f_int2 = 0,
487f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
488f_charbig = '#NULL#';
489INSERT INTO t1
490SET f_int1 = NULL , f_int2 = -@max_row,
491f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
492f_charbig = '#NULL#';
493ERROR 23000: Column 'f_int1' cannot be null
494# check null success:    1
495DELETE FROM t1
496WHERE f_int1 = 0 AND f_int2 = 0
497AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
498AND f_charbig = '#NULL#';
499INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
500SELECT f_int1, f_int1, '', '', 'was inserted'
501   FROM t0_template source_tab
502WHERE MOD(f_int1,3) = 0
503AND f_int1 BETWEEN @max_row_div2 AND @max_row
504ON DUPLICATE KEY
505UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
506f_int2 = 2 * @max_row + source_tab.f_int1,
507f_charbig = 'was updated';
508
509# check unique-1-a success: 	1
510
511# check unique-1-b success: 	1
512DELETE FROM t1 WHERE f_charbig = 'was inserted';
513UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
514f_int2 = CAST(f_char1 AS SIGNED INT),
515f_charbig = CONCAT('===',f_char1,'===')
516WHERE f_charbig = 'was updated';
517REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
518SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
519   FROM t0_template source_tab
520WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
521
522# check replace success: 	1
523DELETE FROM t1
524WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
525DELETE FROM t1
526WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
527f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
528UPDATE t1 SET f_int2 = f_int1,
529f_char1 = CAST(f_int1 AS CHAR),
530f_char2 = CAST(f_int1 AS CHAR),
531f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
532WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
533SET AUTOCOMMIT= 0;
534INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
535SELECT f_int1, f_int1, '', '', 'was inserted'
536FROM t0_template source_tab
537WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
538
539# check transactions-1 success: 	1
540COMMIT WORK;
541
542# check transactions-2 success: 	1
543ROLLBACK WORK;
544
545# check transactions-3 success: 	1
546DELETE FROM t1 WHERE f_charbig = 'was inserted';
547COMMIT WORK;
548ROLLBACK WORK;
549
550# check transactions-4 success: 	1
551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
552SELECT f_int1, f_int1, '', '', 'was inserted'
553FROM t0_template source_tab
554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
555
556# check transactions-5 success: 	1
557ROLLBACK WORK;
558
559# check transactions-6 success: 	1
560# INFO: Storage engine used for t1 seems to be transactional.
561COMMIT;
562
563# check transactions-7 success: 	1
564DELETE FROM t1 WHERE f_charbig = 'was inserted';
565COMMIT WORK;
566SET @@session.sql_mode = 'traditional';
567SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
569SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
570'', '', 'was inserted' FROM t0_template
571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
572ERROR 22012: Division by 0
573COMMIT;
574
575# check transactions-8 success: 	1
576# INFO: Storage engine used for t1 seems to be able to revert
577#       changes made by the failing statement.
578SET @@session.sql_mode = '';
579SET AUTOCOMMIT= 1;
580DELETE FROM t1 WHERE f_charbig = 'was inserted';
581COMMIT WORK;
582UPDATE t1 SET f_charbig = REPEAT('b', 1000);
583
584# check special-1 success: 	1
585UPDATE t1 SET f_charbig = '';
586
587# check special-2 success: 	1
588UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
589INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
590SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
592INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
593SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
594'just inserted' FROM t0_template
595WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
596CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
597BEGIN
598UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
599f_charbig = 'updated by trigger'
600      WHERE f_int1 = new.f_int1;
601END|
602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
603SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
605
606# check trigger-1 success: 	1
607DROP TRIGGER trg_1;
608UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
609f_int2 = CAST(f_char1 AS SIGNED INT),
610f_charbig = 'just inserted'
611   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
612DELETE FROM t0_aux
613WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
614INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
615SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
616'just inserted' FROM t0_template
617WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
618CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
619BEGIN
620UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
621f_charbig = 'updated by trigger'
622      WHERE f_int1 = new.f_int1;
623END|
624INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
625SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
627
628# check trigger-2 success: 	1
629DROP TRIGGER trg_1;
630UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
631f_int2 = CAST(f_char1 AS SIGNED INT),
632f_charbig = 'just inserted'
633   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
634DELETE FROM t0_aux
635WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
636INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
637SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
638'just inserted' FROM t0_template
639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
640CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
641BEGIN
642UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
643f_charbig = 'updated by trigger'
644      WHERE f_int1 = new.f_int1;
645END|
646UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
647WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
648
649# check trigger-3 success: 	1
650DROP TRIGGER trg_1;
651UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
652f_int2 = CAST(f_char1 AS SIGNED INT),
653f_charbig = 'just inserted'
654   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
655DELETE FROM t0_aux
656WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
657INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
658SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
659'just inserted' FROM t0_template
660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
661CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
662BEGIN
663UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
664f_charbig = 'updated by trigger'
665      WHERE f_int1 = - old.f_int1;
666END|
667UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
668WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
669
670# check trigger-4 success: 	1
671DROP TRIGGER trg_1;
672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
673f_int2 = CAST(f_char1 AS SIGNED INT),
674f_charbig = 'just inserted'
675   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
676DELETE FROM t0_aux
677WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
678INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
679SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
680'just inserted' FROM t0_template
681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
682CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
683BEGIN
684UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
685f_charbig = 'updated by trigger'
686      WHERE f_int1 = new.f_int1;
687END|
688UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
689WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
690
691# check trigger-5 success: 	1
692DROP TRIGGER trg_1;
693UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
694f_int2 = CAST(f_char1 AS SIGNED INT),
695f_charbig = 'just inserted'
696   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
697DELETE FROM t0_aux
698WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
699INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
700SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
701'just inserted' FROM t0_template
702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
703CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
704BEGIN
705UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
706f_charbig = 'updated by trigger'
707      WHERE f_int1 = - old.f_int1;
708END|
709UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
710WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
711
712# check trigger-6 success: 	1
713DROP TRIGGER trg_1;
714UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
715f_int2 = CAST(f_char1 AS SIGNED INT),
716f_charbig = 'just inserted'
717   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
718DELETE FROM t0_aux
719WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
720INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
721SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
722'just inserted' FROM t0_template
723WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
724CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
725BEGIN
726UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
727f_charbig = 'updated by trigger'
728      WHERE f_int1 = - old.f_int1;
729END|
730DELETE FROM t0_aux
731WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
732
733# check trigger-7 success: 	1
734DROP TRIGGER trg_1;
735UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
736f_int2 = CAST(f_char1 AS SIGNED INT),
737f_charbig = 'just inserted'
738   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
739DELETE FROM t0_aux
740WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
741INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
742SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
743'just inserted' FROM t0_template
744WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
745CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
746BEGIN
747UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
748f_charbig = 'updated by trigger'
749      WHERE f_int1 = - old.f_int1;
750END|
751DELETE FROM t0_aux
752WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
753
754# check trigger-8 success: 	1
755DROP TRIGGER trg_1;
756UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
757f_int2 = CAST(f_char1 AS SIGNED INT),
758f_charbig = 'just inserted'
759   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
760DELETE FROM t0_aux
761WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
762DELETE FROM t1
763WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
764CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
765BEGIN
766SET new.f_int1 = old.f_int1 + @max_row,
767new.f_int2 = old.f_int2 - @max_row,
768new.f_charbig = '####updated per update trigger####';
769END|
770UPDATE t1
771SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
772f_charbig = '####updated per update statement itself####';
773
774# check trigger-9 success: 	1
775DROP TRIGGER trg_2;
776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
777f_int2 = CAST(f_char1 AS SIGNED INT),
778f_charbig = CONCAT('===',f_char1,'===');
779CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
780BEGIN
781SET new.f_int1 = new.f_int1 + @max_row,
782new.f_int2 = new.f_int2 - @max_row,
783new.f_charbig = '####updated per update trigger####';
784END|
785UPDATE t1
786SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
787f_charbig = '####updated per update statement itself####';
788
789# check trigger-10 success: 	1
790DROP TRIGGER trg_2;
791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
792f_int2 = CAST(f_char1 AS SIGNED INT),
793f_charbig = CONCAT('===',f_char1,'===');
794CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
795BEGIN
796SET new.f_int1 = @my_max1 + @counter,
797new.f_int2 = @my_min2 - @counter,
798new.f_charbig = '####updated per insert trigger####';
799SET @counter = @counter + 1;
800END|
801SET @counter = 1;
802SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
803INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
804SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
805CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
806WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
807ORDER BY f_int1;
808DROP TRIGGER trg_3;
809
810# check trigger-11 success: 	1
811DELETE FROM t1
812WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
813AND f_int2 <> CAST(f_char1 AS SIGNED INT)
814AND f_charbig = '####updated per insert trigger####';
815CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
816BEGIN
817SET new.f_int1 = @my_max1 + @counter,
818new.f_int2 = @my_min2 - @counter,
819new.f_charbig = '####updated per insert trigger####';
820SET @counter = @counter + 1;
821END|
822SET @counter = 1;
823SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
824INSERT INTO t1 (f_char1, f_char2, f_charbig)
825SELECT CAST(f_int1 AS CHAR),
826CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
827WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
828ORDER BY f_int1;
829DROP TRIGGER trg_3;
830
831# check trigger-12 success: 	1
832DELETE FROM t1
833WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
834AND f_int2 <> CAST(f_char1 AS SIGNED INT)
835AND f_charbig = '####updated per insert trigger####';
836ANALYZE  TABLE t1;
837Table	Op	Msg_type	Msg_text
838test.t1	analyze	status	OK
839CHECK    TABLE t1 EXTENDED;
840Table	Op	Msg_type	Msg_text
841test.t1	check	status	OK
842CHECKSUM TABLE t1 EXTENDED;
843Table	Checksum
844test.t1	<some_value>
845OPTIMIZE TABLE t1;
846Table	Op	Msg_type	Msg_text
847test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
848test.t1	optimize	status	OK
849# check layout success:    1
850REPAIR   TABLE t1 EXTENDED;
851Table	Op	Msg_type	Msg_text
852test.t1	repair	status	OK
853# check layout success:    1
854TRUNCATE t1;
855
856# check TRUNCATE success: 	1
857# check layout success:    1
858# End usability test (inc/partition_check.inc)
859DROP TABLE t1;
860CREATE TABLE t1 (
861f_int1 INTEGER DEFAULT 0,
862f_int2 INTEGER DEFAULT 0,
863f_char1 CHAR(20),
864f_char2 CHAR(20),
865f_charbig VARCHAR(1000)
866
867)
868PARTITION BY KEY(f_int1) PARTITIONS 5;
869INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
870SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
871WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
872ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
873INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
874SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
875WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
876# Start usability test (inc/partition_check.inc)
877create_command
878SHOW CREATE TABLE t1;
879Table	Create Table
880t1	CREATE TABLE `t1` (
881  `f_int1` int(11) NOT NULL DEFAULT 0,
882  `f_int2` int(11) NOT NULL DEFAULT 0,
883  `f_char1` char(20) DEFAULT NULL,
884  `f_char2` char(20) DEFAULT NULL,
885  `f_charbig` varchar(1000) DEFAULT NULL,
886  PRIMARY KEY (`f_int1`,`f_int2`)
887) ENGINE=InnoDB DEFAULT CHARSET=latin1
888 PARTITION BY KEY (`f_int1`)
889PARTITIONS 5
890
891# check prerequisites-1 success:    1
892# check COUNT(*) success:    1
893# check MIN/MAX(f_int1) success:    1
894# check MIN/MAX(f_int2) success:    1
895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
896SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
897CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
898WHERE f_int1 IN (2,3);
899ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
900# check prerequisites-3 success:    1
901# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
902INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
903SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
904CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
905WHERE f_int1 IN (2,3);
906DELETE FROM t1 WHERE f_charbig = 'delete me';
907INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
908SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
909CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
910WHERE f_int1 IN (2,3);
911DELETE FROM t1 WHERE f_charbig = 'delete me';
912# check read via f_int1 success: 1
913# check read via f_int2 success: 1
914
915# check multiple-1 success: 	1
916DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
917
918# check multiple-2 success: 	1
919INSERT INTO t1 SELECT * FROM t0_template
920WHERE MOD(f_int1,3) = 0;
921
922# check multiple-3 success: 	1
923UPDATE t1 SET f_int1 = f_int1 + @max_row
924WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
925AND @max_row_div2 + @max_row_div4;
926
927# check multiple-4 success: 	1
928DELETE FROM t1
929WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
930AND @max_row_div2 + @max_row_div4 + @max_row;
931
932# check multiple-5 success: 	1
933SELECT COUNT(*) INTO @try_count FROM t0_template
934WHERE MOD(f_int1,3) = 0
935AND f_int1 BETWEEN @max_row_div2 AND @max_row;
936SELECT COUNT(*) INTO @clash_count
937FROM t1 INNER JOIN t0_template USING(f_int1)
938WHERE MOD(f_int1,3) = 0
939AND f_int1 BETWEEN @max_row_div2 AND @max_row;
940SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
941INSERT INTO t1
942SET f_int1 = @cur_value , f_int2 = @cur_value,
943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
944f_charbig = '#SINGLE#';
945
946# check single-1 success: 	1
947SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
948INSERT INTO t1
949SET f_int1 = @cur_value , f_int2 = @cur_value,
950f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
951f_charbig = '#SINGLE#';
952
953# check single-2 success: 	1
954SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
955SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
956UPDATE t1 SET f_int1 = @cur_value2
957WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
958
959# check single-3 success: 	1
960SET @cur_value1= -1;
961SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
962UPDATE t1 SET f_int1 = @cur_value1
963WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
964
965# check single-4 success: 	1
966SELECT MAX(f_int1) INTO @cur_value FROM t1;
967DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
968
969# check single-5 success: 	1
970DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
971
972# check single-6 success: 	1
973INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
974
975# check single-7 success: 	1
976DELETE FROM t1 WHERE f_charbig = '#2147483647##';
977DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
978INSERT t1 SET f_int1 = 0 , f_int2 = 0,
979f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
980f_charbig = '#NULL#';
981INSERT INTO t1
982SET f_int1 = NULL , f_int2 = -@max_row,
983f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
984f_charbig = '#NULL#';
985ERROR 23000: Column 'f_int1' cannot be null
986# check null success:    1
987DELETE FROM t1
988WHERE f_int1 = 0 AND f_int2 = 0
989AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
990AND f_charbig = '#NULL#';
991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
992SELECT f_int1, f_int1, '', '', 'was inserted'
993   FROM t0_template source_tab
994WHERE MOD(f_int1,3) = 0
995AND f_int1 BETWEEN @max_row_div2 AND @max_row
996ON DUPLICATE KEY
997UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
998f_int2 = 2 * @max_row + source_tab.f_int1,
999f_charbig = 'was updated';
1000
1001# check unique-1-a success: 	1
1002
1003# check unique-1-b success: 	1
1004DELETE FROM t1 WHERE f_charbig = 'was inserted';
1005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1006f_int2 = CAST(f_char1 AS SIGNED INT),
1007f_charbig = CONCAT('===',f_char1,'===')
1008WHERE f_charbig = 'was updated';
1009REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1010SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1011   FROM t0_template source_tab
1012WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1013
1014# check replace success: 	1
1015DELETE FROM t1
1016WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1017DELETE FROM t1
1018WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1019f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1020UPDATE t1 SET f_int2 = f_int1,
1021f_char1 = CAST(f_int1 AS CHAR),
1022f_char2 = CAST(f_int1 AS CHAR),
1023f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1024WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1025SET AUTOCOMMIT= 0;
1026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1027SELECT f_int1, f_int1, '', '', 'was inserted'
1028FROM t0_template source_tab
1029WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1030
1031# check transactions-1 success: 	1
1032COMMIT WORK;
1033
1034# check transactions-2 success: 	1
1035ROLLBACK WORK;
1036
1037# check transactions-3 success: 	1
1038DELETE FROM t1 WHERE f_charbig = 'was inserted';
1039COMMIT WORK;
1040ROLLBACK WORK;
1041
1042# check transactions-4 success: 	1
1043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1044SELECT f_int1, f_int1, '', '', 'was inserted'
1045FROM t0_template source_tab
1046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1047
1048# check transactions-5 success: 	1
1049ROLLBACK WORK;
1050
1051# check transactions-6 success: 	1
1052# INFO: Storage engine used for t1 seems to be transactional.
1053COMMIT;
1054
1055# check transactions-7 success: 	1
1056DELETE FROM t1 WHERE f_charbig = 'was inserted';
1057COMMIT WORK;
1058SET @@session.sql_mode = 'traditional';
1059SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1060INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1061SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1062'', '', 'was inserted' FROM t0_template
1063WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1064ERROR 22012: Division by 0
1065COMMIT;
1066
1067# check transactions-8 success: 	1
1068# INFO: Storage engine used for t1 seems to be able to revert
1069#       changes made by the failing statement.
1070SET @@session.sql_mode = '';
1071SET AUTOCOMMIT= 1;
1072DELETE FROM t1 WHERE f_charbig = 'was inserted';
1073COMMIT WORK;
1074UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1075
1076# check special-1 success: 	1
1077UPDATE t1 SET f_charbig = '';
1078
1079# check special-2 success: 	1
1080UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1081INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1082SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1083WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1084INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1085SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1086'just inserted' FROM t0_template
1087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1088CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1089BEGIN
1090UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1091f_charbig = 'updated by trigger'
1092      WHERE f_int1 = new.f_int1;
1093END|
1094INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1095SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1096WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1097
1098# check trigger-1 success: 	1
1099DROP TRIGGER trg_1;
1100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1101f_int2 = CAST(f_char1 AS SIGNED INT),
1102f_charbig = 'just inserted'
1103   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1104DELETE FROM t0_aux
1105WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1107SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1108'just inserted' FROM t0_template
1109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1110CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1111BEGIN
1112UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1113f_charbig = 'updated by trigger'
1114      WHERE f_int1 = new.f_int1;
1115END|
1116INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1117SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1119
1120# check trigger-2 success: 	1
1121DROP TRIGGER trg_1;
1122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1123f_int2 = CAST(f_char1 AS SIGNED INT),
1124f_charbig = 'just inserted'
1125   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1126DELETE FROM t0_aux
1127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1130'just inserted' FROM t0_template
1131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1132CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1133BEGIN
1134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1135f_charbig = 'updated by trigger'
1136      WHERE f_int1 = new.f_int1;
1137END|
1138UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1140
1141# check trigger-3 success: 	1
1142DROP TRIGGER trg_1;
1143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1144f_int2 = CAST(f_char1 AS SIGNED INT),
1145f_charbig = 'just inserted'
1146   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1147DELETE FROM t0_aux
1148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1151'just inserted' FROM t0_template
1152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1153CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1154BEGIN
1155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1156f_charbig = 'updated by trigger'
1157      WHERE f_int1 = - old.f_int1;
1158END|
1159UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1160WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1161
1162# check trigger-4 success: 	1
1163DROP TRIGGER trg_1;
1164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1165f_int2 = CAST(f_char1 AS SIGNED INT),
1166f_charbig = 'just inserted'
1167   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1168DELETE FROM t0_aux
1169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1172'just inserted' FROM t0_template
1173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1174CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1175BEGIN
1176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1177f_charbig = 'updated by trigger'
1178      WHERE f_int1 = new.f_int1;
1179END|
1180UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1182
1183# check trigger-5 success: 	1
1184DROP TRIGGER trg_1;
1185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1186f_int2 = CAST(f_char1 AS SIGNED INT),
1187f_charbig = 'just inserted'
1188   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1189DELETE FROM t0_aux
1190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1193'just inserted' FROM t0_template
1194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1195CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1196BEGIN
1197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1198f_charbig = 'updated by trigger'
1199      WHERE f_int1 = - old.f_int1;
1200END|
1201UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1203
1204# check trigger-6 success: 	1
1205DROP TRIGGER trg_1;
1206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1207f_int2 = CAST(f_char1 AS SIGNED INT),
1208f_charbig = 'just inserted'
1209   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1210DELETE FROM t0_aux
1211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1212INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1213SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1214'just inserted' FROM t0_template
1215WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1216CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1217BEGIN
1218UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1219f_charbig = 'updated by trigger'
1220      WHERE f_int1 = - old.f_int1;
1221END|
1222DELETE FROM t0_aux
1223WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1224
1225# check trigger-7 success: 	1
1226DROP TRIGGER trg_1;
1227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1228f_int2 = CAST(f_char1 AS SIGNED INT),
1229f_charbig = 'just inserted'
1230   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1231DELETE FROM t0_aux
1232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1235'just inserted' FROM t0_template
1236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1237CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1238BEGIN
1239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1240f_charbig = 'updated by trigger'
1241      WHERE f_int1 = - old.f_int1;
1242END|
1243DELETE FROM t0_aux
1244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1245
1246# check trigger-8 success: 	1
1247DROP TRIGGER trg_1;
1248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1249f_int2 = CAST(f_char1 AS SIGNED INT),
1250f_charbig = 'just inserted'
1251   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1252DELETE FROM t0_aux
1253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1254DELETE FROM t1
1255WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1256CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1257BEGIN
1258SET new.f_int1 = old.f_int1 + @max_row,
1259new.f_int2 = old.f_int2 - @max_row,
1260new.f_charbig = '####updated per update trigger####';
1261END|
1262UPDATE t1
1263SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1264f_charbig = '####updated per update statement itself####';
1265
1266# check trigger-9 success: 	1
1267DROP TRIGGER trg_2;
1268UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1269f_int2 = CAST(f_char1 AS SIGNED INT),
1270f_charbig = CONCAT('===',f_char1,'===');
1271CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1272BEGIN
1273SET new.f_int1 = new.f_int1 + @max_row,
1274new.f_int2 = new.f_int2 - @max_row,
1275new.f_charbig = '####updated per update trigger####';
1276END|
1277UPDATE t1
1278SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1279f_charbig = '####updated per update statement itself####';
1280
1281# check trigger-10 success: 	1
1282DROP TRIGGER trg_2;
1283UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1284f_int2 = CAST(f_char1 AS SIGNED INT),
1285f_charbig = CONCAT('===',f_char1,'===');
1286CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1287BEGIN
1288SET new.f_int1 = @my_max1 + @counter,
1289new.f_int2 = @my_min2 - @counter,
1290new.f_charbig = '####updated per insert trigger####';
1291SET @counter = @counter + 1;
1292END|
1293SET @counter = 1;
1294SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1295INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1296SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1297CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1298WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1299ORDER BY f_int1;
1300DROP TRIGGER trg_3;
1301
1302# check trigger-11 success: 	1
1303DELETE FROM t1
1304WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1305AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1306AND f_charbig = '####updated per insert trigger####';
1307CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1308BEGIN
1309SET new.f_int1 = @my_max1 + @counter,
1310new.f_int2 = @my_min2 - @counter,
1311new.f_charbig = '####updated per insert trigger####';
1312SET @counter = @counter + 1;
1313END|
1314SET @counter = 1;
1315SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1316INSERT INTO t1 (f_char1, f_char2, f_charbig)
1317SELECT CAST(f_int1 AS CHAR),
1318CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1320ORDER BY f_int1;
1321DROP TRIGGER trg_3;
1322
1323# check trigger-12 success: 	1
1324DELETE FROM t1
1325WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1326AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1327AND f_charbig = '####updated per insert trigger####';
1328ANALYZE  TABLE t1;
1329Table	Op	Msg_type	Msg_text
1330test.t1	analyze	status	OK
1331CHECK    TABLE t1 EXTENDED;
1332Table	Op	Msg_type	Msg_text
1333test.t1	check	status	OK
1334CHECKSUM TABLE t1 EXTENDED;
1335Table	Checksum
1336test.t1	<some_value>
1337OPTIMIZE TABLE t1;
1338Table	Op	Msg_type	Msg_text
1339test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1340test.t1	optimize	status	OK
1341# check layout success:    1
1342REPAIR   TABLE t1 EXTENDED;
1343Table	Op	Msg_type	Msg_text
1344test.t1	repair	status	OK
1345# check layout success:    1
1346TRUNCATE t1;
1347
1348# check TRUNCATE success: 	1
1349# check layout success:    1
1350# End usability test (inc/partition_check.inc)
1351DROP TABLE t1;
1352CREATE TABLE t1 (
1353f_int1 INTEGER DEFAULT 0,
1354f_int2 INTEGER DEFAULT 0,
1355f_char1 CHAR(20),
1356f_char2 CHAR(20),
1357f_charbig VARCHAR(1000)
1358
1359)
1360PARTITION BY LIST(MOD(f_int1,4))
1361(PARTITION part_3 VALUES IN (-3),
1362PARTITION part_2 VALUES IN (-2),
1363PARTITION part_1 VALUES IN (-1),
1364PARTITION part_N VALUES IN (NULL),
1365PARTITION part0 VALUES IN (0),
1366PARTITION part1 VALUES IN (1),
1367PARTITION part2 VALUES IN (2),
1368PARTITION part3 VALUES IN (3));
1369INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1370SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1371WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1372ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
1373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1375WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1376# Start usability test (inc/partition_check.inc)
1377create_command
1378SHOW CREATE TABLE t1;
1379Table	Create Table
1380t1	CREATE TABLE `t1` (
1381  `f_int1` int(11) NOT NULL DEFAULT 0,
1382  `f_int2` int(11) NOT NULL DEFAULT 0,
1383  `f_char1` char(20) DEFAULT NULL,
1384  `f_char2` char(20) DEFAULT NULL,
1385  `f_charbig` varchar(1000) DEFAULT NULL,
1386  PRIMARY KEY (`f_int1`,`f_int2`)
1387) ENGINE=InnoDB DEFAULT CHARSET=latin1
1388 PARTITION BY LIST (`f_int1` MOD 4)
1389(PARTITION `part_3` VALUES IN (-3) ENGINE = InnoDB,
1390 PARTITION `part_2` VALUES IN (-2) ENGINE = InnoDB,
1391 PARTITION `part_1` VALUES IN (-1) ENGINE = InnoDB,
1392 PARTITION `part_N` VALUES IN (NULL) ENGINE = InnoDB,
1393 PARTITION `part0` VALUES IN (0) ENGINE = InnoDB,
1394 PARTITION `part1` VALUES IN (1) ENGINE = InnoDB,
1395 PARTITION `part2` VALUES IN (2) ENGINE = InnoDB,
1396 PARTITION `part3` VALUES IN (3) ENGINE = InnoDB)
1397
1398# check prerequisites-1 success:    1
1399# check COUNT(*) success:    1
1400# check MIN/MAX(f_int1) success:    1
1401# check MIN/MAX(f_int2) success:    1
1402INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1403SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1404CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1405WHERE f_int1 IN (2,3);
1406ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
1407# check prerequisites-3 success:    1
1408# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1409INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1410SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1411CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1412WHERE f_int1 IN (2,3);
1413DELETE FROM t1 WHERE f_charbig = 'delete me';
1414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1415SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1416CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1417WHERE f_int1 IN (2,3);
1418DELETE FROM t1 WHERE f_charbig = 'delete me';
1419# check read via f_int1 success: 1
1420# check read via f_int2 success: 1
1421
1422# check multiple-1 success: 	1
1423DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1424
1425# check multiple-2 success: 	1
1426INSERT INTO t1 SELECT * FROM t0_template
1427WHERE MOD(f_int1,3) = 0;
1428
1429# check multiple-3 success: 	1
1430UPDATE t1 SET f_int1 = f_int1 + @max_row
1431WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1432AND @max_row_div2 + @max_row_div4;
1433
1434# check multiple-4 success: 	1
1435DELETE FROM t1
1436WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1437AND @max_row_div2 + @max_row_div4 + @max_row;
1438
1439# check multiple-5 success: 	1
1440SELECT COUNT(*) INTO @try_count FROM t0_template
1441WHERE MOD(f_int1,3) = 0
1442AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1443SELECT COUNT(*) INTO @clash_count
1444FROM t1 INNER JOIN t0_template USING(f_int1)
1445WHERE MOD(f_int1,3) = 0
1446AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1447SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1448INSERT INTO t1
1449SET f_int1 = @cur_value , f_int2 = @cur_value,
1450f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1451f_charbig = '#SINGLE#';
1452
1453# check single-1 success: 	1
1454SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1455INSERT INTO t1
1456SET f_int1 = @cur_value , f_int2 = @cur_value,
1457f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1458f_charbig = '#SINGLE#';
1459
1460# check single-2 success: 	1
1461SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1462SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1463UPDATE t1 SET f_int1 = @cur_value2
1464WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1465
1466# check single-3 success: 	1
1467SET @cur_value1= -1;
1468SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1469UPDATE t1 SET f_int1 = @cur_value1
1470WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1471
1472# check single-4 success: 	1
1473SELECT MAX(f_int1) INTO @cur_value FROM t1;
1474DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1475
1476# check single-5 success: 	1
1477DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1478
1479# check single-6 success: 	1
1480INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1481
1482# check single-7 success: 	1
1483DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1484DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1485INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1486f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1487f_charbig = '#NULL#';
1488INSERT INTO t1
1489SET f_int1 = NULL , f_int2 = -@max_row,
1490f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1491f_charbig = '#NULL#';
1492ERROR 23000: Column 'f_int1' cannot be null
1493# check null success:    1
1494DELETE FROM t1
1495WHERE f_int1 = 0 AND f_int2 = 0
1496AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1497AND f_charbig = '#NULL#';
1498INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1499SELECT f_int1, f_int1, '', '', 'was inserted'
1500   FROM t0_template source_tab
1501WHERE MOD(f_int1,3) = 0
1502AND f_int1 BETWEEN @max_row_div2 AND @max_row
1503ON DUPLICATE KEY
1504UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
1505f_int2 = 2 * @max_row + source_tab.f_int1,
1506f_charbig = 'was updated';
1507
1508# check unique-1-a success: 	1
1509
1510# check unique-1-b success: 	1
1511DELETE FROM t1 WHERE f_charbig = 'was inserted';
1512UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1513f_int2 = CAST(f_char1 AS SIGNED INT),
1514f_charbig = CONCAT('===',f_char1,'===')
1515WHERE f_charbig = 'was updated';
1516REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1517SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
1518   FROM t0_template source_tab
1519WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1520
1521# check replace success: 	1
1522DELETE FROM t1
1523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
1524DELETE FROM t1
1525WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
1526f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
1527UPDATE t1 SET f_int2 = f_int1,
1528f_char1 = CAST(f_int1 AS CHAR),
1529f_char2 = CAST(f_int1 AS CHAR),
1530f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
1531WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
1532SET AUTOCOMMIT= 0;
1533INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1534SELECT f_int1, f_int1, '', '', 'was inserted'
1535FROM t0_template source_tab
1536WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1537
1538# check transactions-1 success: 	1
1539COMMIT WORK;
1540
1541# check transactions-2 success: 	1
1542ROLLBACK WORK;
1543
1544# check transactions-3 success: 	1
1545DELETE FROM t1 WHERE f_charbig = 'was inserted';
1546COMMIT WORK;
1547ROLLBACK WORK;
1548
1549# check transactions-4 success: 	1
1550INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1551SELECT f_int1, f_int1, '', '', 'was inserted'
1552FROM t0_template source_tab
1553WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1554
1555# check transactions-5 success: 	1
1556ROLLBACK WORK;
1557
1558# check transactions-6 success: 	1
1559# INFO: Storage engine used for t1 seems to be transactional.
1560COMMIT;
1561
1562# check transactions-7 success: 	1
1563DELETE FROM t1 WHERE f_charbig = 'was inserted';
1564COMMIT WORK;
1565SET @@session.sql_mode = 'traditional';
1566SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1568SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1569'', '', 'was inserted' FROM t0_template
1570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1571ERROR 22012: Division by 0
1572COMMIT;
1573
1574# check transactions-8 success: 	1
1575# INFO: Storage engine used for t1 seems to be able to revert
1576#       changes made by the failing statement.
1577SET @@session.sql_mode = '';
1578SET AUTOCOMMIT= 1;
1579DELETE FROM t1 WHERE f_charbig = 'was inserted';
1580COMMIT WORK;
1581UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1582
1583# check special-1 success: 	1
1584UPDATE t1 SET f_charbig = '';
1585
1586# check special-2 success: 	1
1587UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1588INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1589SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1591INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1592SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1593'just inserted' FROM t0_template
1594WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1595CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1596BEGIN
1597UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1598f_charbig = 'updated by trigger'
1599      WHERE f_int1 = new.f_int1;
1600END|
1601INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1602SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1603WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1604
1605# check trigger-1 success: 	1
1606DROP TRIGGER trg_1;
1607UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1608f_int2 = CAST(f_char1 AS SIGNED INT),
1609f_charbig = 'just inserted'
1610   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1611DELETE FROM t0_aux
1612WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1613INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1614SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1615'just inserted' FROM t0_template
1616WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1617CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1618BEGIN
1619UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1620f_charbig = 'updated by trigger'
1621      WHERE f_int1 = new.f_int1;
1622END|
1623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1624SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1625WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1626
1627# check trigger-2 success: 	1
1628DROP TRIGGER trg_1;
1629UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1630f_int2 = CAST(f_char1 AS SIGNED INT),
1631f_charbig = 'just inserted'
1632   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1633DELETE FROM t0_aux
1634WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1635INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1636SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1637'just inserted' FROM t0_template
1638WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1639CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1640BEGIN
1641UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1642f_charbig = 'updated by trigger'
1643      WHERE f_int1 = new.f_int1;
1644END|
1645UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1646WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1647
1648# check trigger-3 success: 	1
1649DROP TRIGGER trg_1;
1650UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1651f_int2 = CAST(f_char1 AS SIGNED INT),
1652f_charbig = 'just inserted'
1653   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1654DELETE FROM t0_aux
1655WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1656INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1657SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1658'just inserted' FROM t0_template
1659WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1660CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1661BEGIN
1662UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1663f_charbig = 'updated by trigger'
1664      WHERE f_int1 = - old.f_int1;
1665END|
1666UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1667WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1668
1669# check trigger-4 success: 	1
1670DROP TRIGGER trg_1;
1671UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1672f_int2 = CAST(f_char1 AS SIGNED INT),
1673f_charbig = 'just inserted'
1674   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1675DELETE FROM t0_aux
1676WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1677INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1678SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1679'just inserted' FROM t0_template
1680WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1681CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1682BEGIN
1683UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1684f_charbig = 'updated by trigger'
1685      WHERE f_int1 = new.f_int1;
1686END|
1687UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1688WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1689
1690# check trigger-5 success: 	1
1691DROP TRIGGER trg_1;
1692UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1693f_int2 = CAST(f_char1 AS SIGNED INT),
1694f_charbig = 'just inserted'
1695   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1696DELETE FROM t0_aux
1697WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1698INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1699SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1700'just inserted' FROM t0_template
1701WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1702CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1703BEGIN
1704UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1705f_charbig = 'updated by trigger'
1706      WHERE f_int1 = - old.f_int1;
1707END|
1708UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1709WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1710
1711# check trigger-6 success: 	1
1712DROP TRIGGER trg_1;
1713UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1714f_int2 = CAST(f_char1 AS SIGNED INT),
1715f_charbig = 'just inserted'
1716   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1717DELETE FROM t0_aux
1718WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1719INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1720SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1721'just inserted' FROM t0_template
1722WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1723CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1724BEGIN
1725UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1726f_charbig = 'updated by trigger'
1727      WHERE f_int1 = - old.f_int1;
1728END|
1729DELETE FROM t0_aux
1730WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1731
1732# check trigger-7 success: 	1
1733DROP TRIGGER trg_1;
1734UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1735f_int2 = CAST(f_char1 AS SIGNED INT),
1736f_charbig = 'just inserted'
1737   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1738DELETE FROM t0_aux
1739WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1740INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1741SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1742'just inserted' FROM t0_template
1743WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1744CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1745BEGIN
1746UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1747f_charbig = 'updated by trigger'
1748      WHERE f_int1 = - old.f_int1;
1749END|
1750DELETE FROM t0_aux
1751WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1752
1753# check trigger-8 success: 	1
1754DROP TRIGGER trg_1;
1755UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1756f_int2 = CAST(f_char1 AS SIGNED INT),
1757f_charbig = 'just inserted'
1758   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1759DELETE FROM t0_aux
1760WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1761DELETE FROM t1
1762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1763CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1764BEGIN
1765SET new.f_int1 = old.f_int1 + @max_row,
1766new.f_int2 = old.f_int2 - @max_row,
1767new.f_charbig = '####updated per update trigger####';
1768END|
1769UPDATE t1
1770SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1771f_charbig = '####updated per update statement itself####';
1772
1773# check trigger-9 success: 	1
1774DROP TRIGGER trg_2;
1775UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1776f_int2 = CAST(f_char1 AS SIGNED INT),
1777f_charbig = CONCAT('===',f_char1,'===');
1778CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1779BEGIN
1780SET new.f_int1 = new.f_int1 + @max_row,
1781new.f_int2 = new.f_int2 - @max_row,
1782new.f_charbig = '####updated per update trigger####';
1783END|
1784UPDATE t1
1785SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1786f_charbig = '####updated per update statement itself####';
1787
1788# check trigger-10 success: 	1
1789DROP TRIGGER trg_2;
1790UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1791f_int2 = CAST(f_char1 AS SIGNED INT),
1792f_charbig = CONCAT('===',f_char1,'===');
1793CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1794BEGIN
1795SET new.f_int1 = @my_max1 + @counter,
1796new.f_int2 = @my_min2 - @counter,
1797new.f_charbig = '####updated per insert trigger####';
1798SET @counter = @counter + 1;
1799END|
1800SET @counter = 1;
1801SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1802INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1803SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1804CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1805WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1806ORDER BY f_int1;
1807DROP TRIGGER trg_3;
1808
1809# check trigger-11 success: 	1
1810DELETE FROM t1
1811WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1812AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1813AND f_charbig = '####updated per insert trigger####';
1814CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1815BEGIN
1816SET new.f_int1 = @my_max1 + @counter,
1817new.f_int2 = @my_min2 - @counter,
1818new.f_charbig = '####updated per insert trigger####';
1819SET @counter = @counter + 1;
1820END|
1821SET @counter = 1;
1822SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1823INSERT INTO t1 (f_char1, f_char2, f_charbig)
1824SELECT CAST(f_int1 AS CHAR),
1825CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1826WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1827ORDER BY f_int1;
1828DROP TRIGGER trg_3;
1829
1830# check trigger-12 success: 	1
1831DELETE FROM t1
1832WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1833AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1834AND f_charbig = '####updated per insert trigger####';
1835ANALYZE  TABLE t1;
1836Table	Op	Msg_type	Msg_text
1837test.t1	analyze	status	OK
1838CHECK    TABLE t1 EXTENDED;
1839Table	Op	Msg_type	Msg_text
1840test.t1	check	status	OK
1841CHECKSUM TABLE t1 EXTENDED;
1842Table	Checksum
1843test.t1	<some_value>
1844OPTIMIZE TABLE t1;
1845Table	Op	Msg_type	Msg_text
1846test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1847test.t1	optimize	status	OK
1848# check layout success:    1
1849REPAIR   TABLE t1 EXTENDED;
1850Table	Op	Msg_type	Msg_text
1851test.t1	repair	status	OK
1852# check layout success:    1
1853TRUNCATE t1;
1854
1855# check TRUNCATE success: 	1
1856# check layout success:    1
1857# End usability test (inc/partition_check.inc)
1858DROP TABLE t1;
1859CREATE TABLE t1 (
1860f_int1 INTEGER DEFAULT 0,
1861f_int2 INTEGER DEFAULT 0,
1862f_char1 CHAR(20),
1863f_char2 CHAR(20),
1864f_charbig VARCHAR(1000)
1865
1866)
1867PARTITION BY RANGE(f_int1)
1868(PARTITION parta VALUES LESS THAN (0),
1869PARTITION partb VALUES LESS THAN (5),
1870PARTITION partc VALUES LESS THAN (10),
1871PARTITION partd VALUES LESS THAN (10 + 5),
1872PARTITION parte VALUES LESS THAN (20),
1873PARTITION partf VALUES LESS THAN (2147483646));
1874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1877ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
1878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1880WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1881# Start usability test (inc/partition_check.inc)
1882create_command
1883SHOW CREATE TABLE t1;
1884Table	Create Table
1885t1	CREATE TABLE `t1` (
1886  `f_int1` int(11) NOT NULL DEFAULT 0,
1887  `f_int2` int(11) NOT NULL DEFAULT 0,
1888  `f_char1` char(20) DEFAULT NULL,
1889  `f_char2` char(20) DEFAULT NULL,
1890  `f_charbig` varchar(1000) DEFAULT NULL,
1891  PRIMARY KEY (`f_int1`,`f_int2`)
1892) ENGINE=InnoDB DEFAULT CHARSET=latin1
1893 PARTITION BY RANGE (`f_int1`)
1894(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
1895 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
1896 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
1897 PARTITION `partd` VALUES LESS THAN (15) ENGINE = InnoDB,
1898 PARTITION `parte` VALUES LESS THAN (20) ENGINE = InnoDB,
1899 PARTITION `partf` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
1900
1901# check prerequisites-1 success:    1
1902# check COUNT(*) success:    1
1903# check MIN/MAX(f_int1) success:    1
1904# check MIN/MAX(f_int2) success:    1
1905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1906SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1907CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1908WHERE f_int1 IN (2,3);
1909ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
1910# check prerequisites-3 success:    1
1911# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
1912INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1913SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1914CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1915WHERE f_int1 IN (2,3);
1916DELETE FROM t1 WHERE f_charbig = 'delete me';
1917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1918SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
1919CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
1920WHERE f_int1 IN (2,3);
1921DELETE FROM t1 WHERE f_charbig = 'delete me';
1922# check read via f_int1 success: 1
1923# check read via f_int2 success: 1
1924
1925# check multiple-1 success: 	1
1926DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1927
1928# check multiple-2 success: 	1
1929INSERT INTO t1 SELECT * FROM t0_template
1930WHERE MOD(f_int1,3) = 0;
1931
1932# check multiple-3 success: 	1
1933UPDATE t1 SET f_int1 = f_int1 + @max_row
1934WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1935AND @max_row_div2 + @max_row_div4;
1936
1937# check multiple-4 success: 	1
1938DELETE FROM t1
1939WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1940AND @max_row_div2 + @max_row_div4 + @max_row;
1941
1942# check multiple-5 success: 	1
1943SELECT COUNT(*) INTO @try_count FROM t0_template
1944WHERE MOD(f_int1,3) = 0
1945AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1946SELECT COUNT(*) INTO @clash_count
1947FROM t1 INNER JOIN t0_template USING(f_int1)
1948WHERE MOD(f_int1,3) = 0
1949AND f_int1 BETWEEN @max_row_div2 AND @max_row;
1950SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1951INSERT INTO t1
1952SET f_int1 = @cur_value , f_int2 = @cur_value,
1953f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1954f_charbig = '#SINGLE#';
1955
1956# check single-1 success: 	1
1957SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1958INSERT INTO t1
1959SET f_int1 = @cur_value , f_int2 = @cur_value,
1960f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1961f_charbig = '#SINGLE#';
1962
1963# check single-2 success: 	1
1964SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1965SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1966UPDATE t1 SET f_int1 = @cur_value2
1967WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1968
1969# check single-3 success: 	1
1970SET @cur_value1= -1;
1971SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1972UPDATE t1 SET f_int1 = @cur_value1
1973WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1974
1975# check single-4 success: 	1
1976SELECT MAX(f_int1) INTO @cur_value FROM t1;
1977DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1978
1979# check single-5 success: 	1
1980DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1981
1982# check single-6 success: 	1
1983INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1984ERROR HY000: Table has no partition for value 2147483647
1985DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1986INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1987f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1988f_charbig = '#NULL#';
1989INSERT INTO t1
1990SET f_int1 = NULL , f_int2 = -@max_row,
1991f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1992f_charbig = '#NULL#';
1993ERROR 23000: Column 'f_int1' cannot be null
1994# check null success:    1
1995DELETE FROM t1
1996WHERE f_int1 = 0 AND f_int2 = 0
1997AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1998AND f_charbig = '#NULL#';
1999INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2000SELECT f_int1, f_int1, '', '', 'was inserted'
2001   FROM t0_template source_tab
2002WHERE MOD(f_int1,3) = 0
2003AND f_int1 BETWEEN @max_row_div2 AND @max_row
2004ON DUPLICATE KEY
2005UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2006f_int2 = 2 * @max_row + source_tab.f_int1,
2007f_charbig = 'was updated';
2008
2009# check unique-1-a success: 	1
2010
2011# check unique-1-b success: 	1
2012DELETE FROM t1 WHERE f_charbig = 'was inserted';
2013UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2014f_int2 = CAST(f_char1 AS SIGNED INT),
2015f_charbig = CONCAT('===',f_char1,'===')
2016WHERE f_charbig = 'was updated';
2017REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2018SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2019   FROM t0_template source_tab
2020WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2021
2022# check replace success: 	1
2023DELETE FROM t1
2024WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2025DELETE FROM t1
2026WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2027f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2028UPDATE t1 SET f_int2 = f_int1,
2029f_char1 = CAST(f_int1 AS CHAR),
2030f_char2 = CAST(f_int1 AS CHAR),
2031f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2032WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2033SET AUTOCOMMIT= 0;
2034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2035SELECT f_int1, f_int1, '', '', 'was inserted'
2036FROM t0_template source_tab
2037WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2038
2039# check transactions-1 success: 	1
2040COMMIT WORK;
2041
2042# check transactions-2 success: 	1
2043ROLLBACK WORK;
2044
2045# check transactions-3 success: 	1
2046DELETE FROM t1 WHERE f_charbig = 'was inserted';
2047COMMIT WORK;
2048ROLLBACK WORK;
2049
2050# check transactions-4 success: 	1
2051INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2052SELECT f_int1, f_int1, '', '', 'was inserted'
2053FROM t0_template source_tab
2054WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2055
2056# check transactions-5 success: 	1
2057ROLLBACK WORK;
2058
2059# check transactions-6 success: 	1
2060# INFO: Storage engine used for t1 seems to be transactional.
2061COMMIT;
2062
2063# check transactions-7 success: 	1
2064DELETE FROM t1 WHERE f_charbig = 'was inserted';
2065COMMIT WORK;
2066SET @@session.sql_mode = 'traditional';
2067SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2068INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2069SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2070'', '', 'was inserted' FROM t0_template
2071WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2072ERROR 22012: Division by 0
2073COMMIT;
2074
2075# check transactions-8 success: 	1
2076# INFO: Storage engine used for t1 seems to be able to revert
2077#       changes made by the failing statement.
2078SET @@session.sql_mode = '';
2079SET AUTOCOMMIT= 1;
2080DELETE FROM t1 WHERE f_charbig = 'was inserted';
2081COMMIT WORK;
2082UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2083
2084# check special-1 success: 	1
2085UPDATE t1 SET f_charbig = '';
2086
2087# check special-2 success: 	1
2088UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2089INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2090SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2092INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2093SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2094'just inserted' FROM t0_template
2095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2096CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2097BEGIN
2098UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2099f_charbig = 'updated by trigger'
2100      WHERE f_int1 = new.f_int1;
2101END|
2102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2103SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2104WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2105
2106# check trigger-1 success: 	1
2107DROP TRIGGER trg_1;
2108UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2109f_int2 = CAST(f_char1 AS SIGNED INT),
2110f_charbig = 'just inserted'
2111   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2112DELETE FROM t0_aux
2113WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2114INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2115SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2116'just inserted' FROM t0_template
2117WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2118CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2119BEGIN
2120UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2121f_charbig = 'updated by trigger'
2122      WHERE f_int1 = new.f_int1;
2123END|
2124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2125SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2127
2128# check trigger-2 success: 	1
2129DROP TRIGGER trg_1;
2130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2131f_int2 = CAST(f_char1 AS SIGNED INT),
2132f_charbig = 'just inserted'
2133   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2134DELETE FROM t0_aux
2135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2138'just inserted' FROM t0_template
2139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2140CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2141BEGIN
2142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2143f_charbig = 'updated by trigger'
2144      WHERE f_int1 = new.f_int1;
2145END|
2146UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2148
2149# check trigger-3 success: 	1
2150DROP TRIGGER trg_1;
2151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2152f_int2 = CAST(f_char1 AS SIGNED INT),
2153f_charbig = 'just inserted'
2154   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2155DELETE FROM t0_aux
2156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2157INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2158SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2159'just inserted' FROM t0_template
2160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2161CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2162BEGIN
2163UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2164f_charbig = 'updated by trigger'
2165      WHERE f_int1 = - old.f_int1;
2166END|
2167UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2168WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2169
2170# check trigger-4 success: 	1
2171DROP TRIGGER trg_1;
2172UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2173f_int2 = CAST(f_char1 AS SIGNED INT),
2174f_charbig = 'just inserted'
2175   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2176DELETE FROM t0_aux
2177WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2178INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2179SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2180'just inserted' FROM t0_template
2181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2182CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2183BEGIN
2184UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2185f_charbig = 'updated by trigger'
2186      WHERE f_int1 = new.f_int1;
2187END|
2188UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2189WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2190
2191# check trigger-5 success: 	1
2192DROP TRIGGER trg_1;
2193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2194f_int2 = CAST(f_char1 AS SIGNED INT),
2195f_charbig = 'just inserted'
2196   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2197DELETE FROM t0_aux
2198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2201'just inserted' FROM t0_template
2202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2203CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2204BEGIN
2205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2206f_charbig = 'updated by trigger'
2207      WHERE f_int1 = - old.f_int1;
2208END|
2209UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2211
2212# check trigger-6 success: 	1
2213DROP TRIGGER trg_1;
2214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2215f_int2 = CAST(f_char1 AS SIGNED INT),
2216f_charbig = 'just inserted'
2217   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2218DELETE FROM t0_aux
2219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2220INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2221SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2222'just inserted' FROM t0_template
2223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2224CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2225BEGIN
2226UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2227f_charbig = 'updated by trigger'
2228      WHERE f_int1 = - old.f_int1;
2229END|
2230DELETE FROM t0_aux
2231WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2232
2233# check trigger-7 success: 	1
2234DROP TRIGGER trg_1;
2235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2236f_int2 = CAST(f_char1 AS SIGNED INT),
2237f_charbig = 'just inserted'
2238   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2239DELETE FROM t0_aux
2240WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2241INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2242SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2243'just inserted' FROM t0_template
2244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2245CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2246BEGIN
2247UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2248f_charbig = 'updated by trigger'
2249      WHERE f_int1 = - old.f_int1;
2250END|
2251DELETE FROM t0_aux
2252WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2253
2254# check trigger-8 success: 	1
2255DROP TRIGGER trg_1;
2256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2257f_int2 = CAST(f_char1 AS SIGNED INT),
2258f_charbig = 'just inserted'
2259   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2260DELETE FROM t0_aux
2261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2262DELETE FROM t1
2263WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2264CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2265BEGIN
2266SET new.f_int1 = old.f_int1 + @max_row,
2267new.f_int2 = old.f_int2 - @max_row,
2268new.f_charbig = '####updated per update trigger####';
2269END|
2270UPDATE t1
2271SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2272f_charbig = '####updated per update statement itself####';
2273
2274# check trigger-9 success: 	1
2275DROP TRIGGER trg_2;
2276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2277f_int2 = CAST(f_char1 AS SIGNED INT),
2278f_charbig = CONCAT('===',f_char1,'===');
2279CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2280BEGIN
2281SET new.f_int1 = new.f_int1 + @max_row,
2282new.f_int2 = new.f_int2 - @max_row,
2283new.f_charbig = '####updated per update trigger####';
2284END|
2285UPDATE t1
2286SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2287f_charbig = '####updated per update statement itself####';
2288
2289# check trigger-10 success: 	1
2290DROP TRIGGER trg_2;
2291UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2292f_int2 = CAST(f_char1 AS SIGNED INT),
2293f_charbig = CONCAT('===',f_char1,'===');
2294CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2295BEGIN
2296SET new.f_int1 = @my_max1 + @counter,
2297new.f_int2 = @my_min2 - @counter,
2298new.f_charbig = '####updated per insert trigger####';
2299SET @counter = @counter + 1;
2300END|
2301SET @counter = 1;
2302SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2303INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2304SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2305CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2307ORDER BY f_int1;
2308DROP TRIGGER trg_3;
2309
2310# check trigger-11 success: 	1
2311DELETE FROM t1
2312WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2313AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2314AND f_charbig = '####updated per insert trigger####';
2315CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2316BEGIN
2317SET new.f_int1 = @my_max1 + @counter,
2318new.f_int2 = @my_min2 - @counter,
2319new.f_charbig = '####updated per insert trigger####';
2320SET @counter = @counter + 1;
2321END|
2322SET @counter = 1;
2323SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2324INSERT INTO t1 (f_char1, f_char2, f_charbig)
2325SELECT CAST(f_int1 AS CHAR),
2326CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2328ORDER BY f_int1;
2329DROP TRIGGER trg_3;
2330
2331# check trigger-12 success: 	1
2332DELETE FROM t1
2333WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2334AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2335AND f_charbig = '####updated per insert trigger####';
2336ANALYZE  TABLE t1;
2337Table	Op	Msg_type	Msg_text
2338test.t1	analyze	status	OK
2339CHECK    TABLE t1 EXTENDED;
2340Table	Op	Msg_type	Msg_text
2341test.t1	check	status	OK
2342CHECKSUM TABLE t1 EXTENDED;
2343Table	Checksum
2344test.t1	<some_value>
2345OPTIMIZE TABLE t1;
2346Table	Op	Msg_type	Msg_text
2347test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2348test.t1	optimize	status	OK
2349# check layout success:    1
2350REPAIR   TABLE t1 EXTENDED;
2351Table	Op	Msg_type	Msg_text
2352test.t1	repair	status	OK
2353# check layout success:    1
2354TRUNCATE t1;
2355
2356# check TRUNCATE success: 	1
2357# check layout success:    1
2358# End usability test (inc/partition_check.inc)
2359DROP TABLE t1;
2360CREATE TABLE t1 (
2361f_int1 INTEGER DEFAULT 0,
2362f_int2 INTEGER DEFAULT 0,
2363f_char1 CHAR(20),
2364f_char2 CHAR(20),
2365f_charbig VARCHAR(1000)
2366
2367)
2368PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
2369(PARTITION parta VALUES LESS THAN (0),
2370PARTITION partb VALUES LESS THAN (5),
2371PARTITION partc VALUES LESS THAN (10),
2372PARTITION partd VALUES LESS THAN (2147483646));
2373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2375WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2376ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
2377INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2378SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2379WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2380# Start usability test (inc/partition_check.inc)
2381create_command
2382SHOW CREATE TABLE t1;
2383Table	Create Table
2384t1	CREATE TABLE `t1` (
2385  `f_int1` int(11) NOT NULL DEFAULT 0,
2386  `f_int2` int(11) NOT NULL DEFAULT 0,
2387  `f_char1` char(20) DEFAULT NULL,
2388  `f_char2` char(20) DEFAULT NULL,
2389  `f_charbig` varchar(1000) DEFAULT NULL,
2390  PRIMARY KEY (`f_int1`,`f_int2`)
2391) ENGINE=InnoDB DEFAULT CHARSET=latin1
2392 PARTITION BY RANGE (`f_int1` DIV 2)
2393SUBPARTITION BY HASH (`f_int1`)
2394SUBPARTITIONS 2
2395(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
2396 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
2397 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
2398 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
2399
2400# check prerequisites-1 success:    1
2401# check COUNT(*) success:    1
2402# check MIN/MAX(f_int1) success:    1
2403# check MIN/MAX(f_int2) success:    1
2404INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2405SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2406CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2407WHERE f_int1 IN (2,3);
2408ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
2409# check prerequisites-3 success:    1
2410# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2411INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2412SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2413CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2414WHERE f_int1 IN (2,3);
2415DELETE FROM t1 WHERE f_charbig = 'delete me';
2416INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2417SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2418CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2419WHERE f_int1 IN (2,3);
2420DELETE FROM t1 WHERE f_charbig = 'delete me';
2421# check read via f_int1 success: 1
2422# check read via f_int2 success: 1
2423
2424# check multiple-1 success: 	1
2425DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2426
2427# check multiple-2 success: 	1
2428INSERT INTO t1 SELECT * FROM t0_template
2429WHERE MOD(f_int1,3) = 0;
2430
2431# check multiple-3 success: 	1
2432UPDATE t1 SET f_int1 = f_int1 + @max_row
2433WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2434AND @max_row_div2 + @max_row_div4;
2435
2436# check multiple-4 success: 	1
2437DELETE FROM t1
2438WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2439AND @max_row_div2 + @max_row_div4 + @max_row;
2440
2441# check multiple-5 success: 	1
2442SELECT COUNT(*) INTO @try_count FROM t0_template
2443WHERE MOD(f_int1,3) = 0
2444AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2445SELECT COUNT(*) INTO @clash_count
2446FROM t1 INNER JOIN t0_template USING(f_int1)
2447WHERE MOD(f_int1,3) = 0
2448AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2449SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2450INSERT INTO t1
2451SET f_int1 = @cur_value , f_int2 = @cur_value,
2452f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2453f_charbig = '#SINGLE#';
2454
2455# check single-1 success: 	1
2456SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2457INSERT INTO t1
2458SET f_int1 = @cur_value , f_int2 = @cur_value,
2459f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2460f_charbig = '#SINGLE#';
2461
2462# check single-2 success: 	1
2463SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2464SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2465UPDATE t1 SET f_int1 = @cur_value2
2466WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2467
2468# check single-3 success: 	1
2469SET @cur_value1= -1;
2470SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2471UPDATE t1 SET f_int1 = @cur_value1
2472WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2473
2474# check single-4 success: 	1
2475SELECT MAX(f_int1) INTO @cur_value FROM t1;
2476DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2477
2478# check single-5 success: 	1
2479DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2480
2481# check single-6 success: 	1
2482INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2483
2484# check single-7 success: 	1
2485DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2486DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2487INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2488f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2489f_charbig = '#NULL#';
2490INSERT INTO t1
2491SET f_int1 = NULL , f_int2 = -@max_row,
2492f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2493f_charbig = '#NULL#';
2494ERROR 23000: Column 'f_int1' cannot be null
2495# check null success:    1
2496DELETE FROM t1
2497WHERE f_int1 = 0 AND f_int2 = 0
2498AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2499AND f_charbig = '#NULL#';
2500INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2501SELECT f_int1, f_int1, '', '', 'was inserted'
2502   FROM t0_template source_tab
2503WHERE MOD(f_int1,3) = 0
2504AND f_int1 BETWEEN @max_row_div2 AND @max_row
2505ON DUPLICATE KEY
2506UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
2507f_int2 = 2 * @max_row + source_tab.f_int1,
2508f_charbig = 'was updated';
2509
2510# check unique-1-a success: 	1
2511
2512# check unique-1-b success: 	1
2513DELETE FROM t1 WHERE f_charbig = 'was inserted';
2514UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2515f_int2 = CAST(f_char1 AS SIGNED INT),
2516f_charbig = CONCAT('===',f_char1,'===')
2517WHERE f_charbig = 'was updated';
2518REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2519SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
2520   FROM t0_template source_tab
2521WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2522
2523# check replace success: 	1
2524DELETE FROM t1
2525WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
2526DELETE FROM t1
2527WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
2528f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
2529UPDATE t1 SET f_int2 = f_int1,
2530f_char1 = CAST(f_int1 AS CHAR),
2531f_char2 = CAST(f_int1 AS CHAR),
2532f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
2533WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
2534SET AUTOCOMMIT= 0;
2535INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2536SELECT f_int1, f_int1, '', '', 'was inserted'
2537FROM t0_template source_tab
2538WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2539
2540# check transactions-1 success: 	1
2541COMMIT WORK;
2542
2543# check transactions-2 success: 	1
2544ROLLBACK WORK;
2545
2546# check transactions-3 success: 	1
2547DELETE FROM t1 WHERE f_charbig = 'was inserted';
2548COMMIT WORK;
2549ROLLBACK WORK;
2550
2551# check transactions-4 success: 	1
2552INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2553SELECT f_int1, f_int1, '', '', 'was inserted'
2554FROM t0_template source_tab
2555WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2556
2557# check transactions-5 success: 	1
2558ROLLBACK WORK;
2559
2560# check transactions-6 success: 	1
2561# INFO: Storage engine used for t1 seems to be transactional.
2562COMMIT;
2563
2564# check transactions-7 success: 	1
2565DELETE FROM t1 WHERE f_charbig = 'was inserted';
2566COMMIT WORK;
2567SET @@session.sql_mode = 'traditional';
2568SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2569INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2570SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2571'', '', 'was inserted' FROM t0_template
2572WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2573ERROR 22012: Division by 0
2574COMMIT;
2575
2576# check transactions-8 success: 	1
2577# INFO: Storage engine used for t1 seems to be able to revert
2578#       changes made by the failing statement.
2579SET @@session.sql_mode = '';
2580SET AUTOCOMMIT= 1;
2581DELETE FROM t1 WHERE f_charbig = 'was inserted';
2582COMMIT WORK;
2583UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2584
2585# check special-1 success: 	1
2586UPDATE t1 SET f_charbig = '';
2587
2588# check special-2 success: 	1
2589UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2590INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2591SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2593INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2594SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2595'just inserted' FROM t0_template
2596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2597CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2598BEGIN
2599UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2600f_charbig = 'updated by trigger'
2601      WHERE f_int1 = new.f_int1;
2602END|
2603INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2604SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2606
2607# check trigger-1 success: 	1
2608DROP TRIGGER trg_1;
2609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2610f_int2 = CAST(f_char1 AS SIGNED INT),
2611f_charbig = 'just inserted'
2612   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2613DELETE FROM t0_aux
2614WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2617'just inserted' FROM t0_template
2618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2619CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2620BEGIN
2621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2622f_charbig = 'updated by trigger'
2623      WHERE f_int1 = new.f_int1;
2624END|
2625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2628
2629# check trigger-2 success: 	1
2630DROP TRIGGER trg_1;
2631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2632f_int2 = CAST(f_char1 AS SIGNED INT),
2633f_charbig = 'just inserted'
2634   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2635DELETE FROM t0_aux
2636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2639'just inserted' FROM t0_template
2640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2641CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2642BEGIN
2643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2644f_charbig = 'updated by trigger'
2645      WHERE f_int1 = new.f_int1;
2646END|
2647UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2648WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2649
2650# check trigger-3 success: 	1
2651DROP TRIGGER trg_1;
2652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2653f_int2 = CAST(f_char1 AS SIGNED INT),
2654f_charbig = 'just inserted'
2655   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2656DELETE FROM t0_aux
2657WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2659SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2660'just inserted' FROM t0_template
2661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2662CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2663BEGIN
2664UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2665f_charbig = 'updated by trigger'
2666      WHERE f_int1 = - old.f_int1;
2667END|
2668UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2669WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2670
2671# check trigger-4 success: 	1
2672DROP TRIGGER trg_1;
2673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2674f_int2 = CAST(f_char1 AS SIGNED INT),
2675f_charbig = 'just inserted'
2676   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2677DELETE FROM t0_aux
2678WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2679INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2680SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2681'just inserted' FROM t0_template
2682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2683CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2684BEGIN
2685UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2686f_charbig = 'updated by trigger'
2687      WHERE f_int1 = new.f_int1;
2688END|
2689UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2690WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2691
2692# check trigger-5 success: 	1
2693DROP TRIGGER trg_1;
2694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2695f_int2 = CAST(f_char1 AS SIGNED INT),
2696f_charbig = 'just inserted'
2697   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2698DELETE FROM t0_aux
2699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2702'just inserted' FROM t0_template
2703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2704CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2705BEGIN
2706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2707f_charbig = 'updated by trigger'
2708      WHERE f_int1 = - old.f_int1;
2709END|
2710UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2712
2713# check trigger-6 success: 	1
2714DROP TRIGGER trg_1;
2715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2716f_int2 = CAST(f_char1 AS SIGNED INT),
2717f_charbig = 'just inserted'
2718   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2719DELETE FROM t0_aux
2720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2723'just inserted' FROM t0_template
2724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2725CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2726BEGIN
2727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2728f_charbig = 'updated by trigger'
2729      WHERE f_int1 = - old.f_int1;
2730END|
2731DELETE FROM t0_aux
2732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2733
2734# check trigger-7 success: 	1
2735DROP TRIGGER trg_1;
2736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2737f_int2 = CAST(f_char1 AS SIGNED INT),
2738f_charbig = 'just inserted'
2739   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2740DELETE FROM t0_aux
2741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2744'just inserted' FROM t0_template
2745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2746CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2747BEGIN
2748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2749f_charbig = 'updated by trigger'
2750      WHERE f_int1 = - old.f_int1;
2751END|
2752DELETE FROM t0_aux
2753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2754
2755# check trigger-8 success: 	1
2756DROP TRIGGER trg_1;
2757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2758f_int2 = CAST(f_char1 AS SIGNED INT),
2759f_charbig = 'just inserted'
2760   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2761DELETE FROM t0_aux
2762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2763DELETE FROM t1
2764WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2765CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2766BEGIN
2767SET new.f_int1 = old.f_int1 + @max_row,
2768new.f_int2 = old.f_int2 - @max_row,
2769new.f_charbig = '####updated per update trigger####';
2770END|
2771UPDATE t1
2772SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2773f_charbig = '####updated per update statement itself####';
2774
2775# check trigger-9 success: 	1
2776DROP TRIGGER trg_2;
2777UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2778f_int2 = CAST(f_char1 AS SIGNED INT),
2779f_charbig = CONCAT('===',f_char1,'===');
2780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2781BEGIN
2782SET new.f_int1 = new.f_int1 + @max_row,
2783new.f_int2 = new.f_int2 - @max_row,
2784new.f_charbig = '####updated per update trigger####';
2785END|
2786UPDATE t1
2787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2788f_charbig = '####updated per update statement itself####';
2789
2790# check trigger-10 success: 	1
2791DROP TRIGGER trg_2;
2792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2793f_int2 = CAST(f_char1 AS SIGNED INT),
2794f_charbig = CONCAT('===',f_char1,'===');
2795CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2796BEGIN
2797SET new.f_int1 = @my_max1 + @counter,
2798new.f_int2 = @my_min2 - @counter,
2799new.f_charbig = '####updated per insert trigger####';
2800SET @counter = @counter + 1;
2801END|
2802SET @counter = 1;
2803SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2805SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2806CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2808ORDER BY f_int1;
2809DROP TRIGGER trg_3;
2810
2811# check trigger-11 success: 	1
2812DELETE FROM t1
2813WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2814AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2815AND f_charbig = '####updated per insert trigger####';
2816CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2817BEGIN
2818SET new.f_int1 = @my_max1 + @counter,
2819new.f_int2 = @my_min2 - @counter,
2820new.f_charbig = '####updated per insert trigger####';
2821SET @counter = @counter + 1;
2822END|
2823SET @counter = 1;
2824SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2825INSERT INTO t1 (f_char1, f_char2, f_charbig)
2826SELECT CAST(f_int1 AS CHAR),
2827CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2829ORDER BY f_int1;
2830DROP TRIGGER trg_3;
2831
2832# check trigger-12 success: 	1
2833DELETE FROM t1
2834WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2835AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2836AND f_charbig = '####updated per insert trigger####';
2837ANALYZE  TABLE t1;
2838Table	Op	Msg_type	Msg_text
2839test.t1	analyze	status	OK
2840CHECK    TABLE t1 EXTENDED;
2841Table	Op	Msg_type	Msg_text
2842test.t1	check	status	OK
2843CHECKSUM TABLE t1 EXTENDED;
2844Table	Checksum
2845test.t1	<some_value>
2846OPTIMIZE TABLE t1;
2847Table	Op	Msg_type	Msg_text
2848test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2849test.t1	optimize	status	OK
2850# check layout success:    1
2851REPAIR   TABLE t1 EXTENDED;
2852Table	Op	Msg_type	Msg_text
2853test.t1	repair	status	OK
2854# check layout success:    1
2855TRUNCATE t1;
2856
2857# check TRUNCATE success: 	1
2858# check layout success:    1
2859# End usability test (inc/partition_check.inc)
2860DROP TABLE t1;
2861CREATE TABLE t1 (
2862f_int1 INTEGER DEFAULT 0,
2863f_int2 INTEGER DEFAULT 0,
2864f_char1 CHAR(20),
2865f_char2 CHAR(20),
2866f_charbig VARCHAR(1000)
2867
2868)
2869PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
2870(PARTITION part1 VALUES LESS THAN (0)
2871(SUBPARTITION subpart11, SUBPARTITION subpart12),
2872PARTITION part2 VALUES LESS THAN (5)
2873(SUBPARTITION subpart21, SUBPARTITION subpart22),
2874PARTITION part3 VALUES LESS THAN (10)
2875(SUBPARTITION subpart31, SUBPARTITION subpart32),
2876PARTITION part4 VALUES LESS THAN (2147483646)
2877(SUBPARTITION subpart41, SUBPARTITION subpart42));
2878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2880WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2881ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
2882INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2883SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2884WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2885# Start usability test (inc/partition_check.inc)
2886create_command
2887SHOW CREATE TABLE t1;
2888Table	Create Table
2889t1	CREATE TABLE `t1` (
2890  `f_int1` int(11) NOT NULL DEFAULT 0,
2891  `f_int2` int(11) NOT NULL DEFAULT 0,
2892  `f_char1` char(20) DEFAULT NULL,
2893  `f_char2` char(20) DEFAULT NULL,
2894  `f_charbig` varchar(1000) DEFAULT NULL,
2895  PRIMARY KEY (`f_int1`,`f_int2`)
2896) ENGINE=InnoDB DEFAULT CHARSET=latin1
2897 PARTITION BY RANGE (`f_int1`)
2898SUBPARTITION BY KEY (`f_int1`)
2899(PARTITION `part1` VALUES LESS THAN (0)
2900 (SUBPARTITION `subpart11` ENGINE = InnoDB,
2901  SUBPARTITION `subpart12` ENGINE = InnoDB),
2902 PARTITION `part2` VALUES LESS THAN (5)
2903 (SUBPARTITION `subpart21` ENGINE = InnoDB,
2904  SUBPARTITION `subpart22` ENGINE = InnoDB),
2905 PARTITION `part3` VALUES LESS THAN (10)
2906 (SUBPARTITION `subpart31` ENGINE = InnoDB,
2907  SUBPARTITION `subpart32` ENGINE = InnoDB),
2908 PARTITION `part4` VALUES LESS THAN (2147483646)
2909 (SUBPARTITION `subpart41` ENGINE = InnoDB,
2910  SUBPARTITION `subpart42` ENGINE = InnoDB))
2911
2912# check prerequisites-1 success:    1
2913# check COUNT(*) success:    1
2914# check MIN/MAX(f_int1) success:    1
2915# check MIN/MAX(f_int2) success:    1
2916INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2917SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2918CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2919WHERE f_int1 IN (2,3);
2920ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
2921# check prerequisites-3 success:    1
2922# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
2923INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2924SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2925CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2926WHERE f_int1 IN (2,3);
2927DELETE FROM t1 WHERE f_charbig = 'delete me';
2928INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2929SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
2930CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
2931WHERE f_int1 IN (2,3);
2932DELETE FROM t1 WHERE f_charbig = 'delete me';
2933# check read via f_int1 success: 1
2934# check read via f_int2 success: 1
2935
2936# check multiple-1 success: 	1
2937DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2938
2939# check multiple-2 success: 	1
2940INSERT INTO t1 SELECT * FROM t0_template
2941WHERE MOD(f_int1,3) = 0;
2942
2943# check multiple-3 success: 	1
2944UPDATE t1 SET f_int1 = f_int1 + @max_row
2945WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2946AND @max_row_div2 + @max_row_div4;
2947
2948# check multiple-4 success: 	1
2949DELETE FROM t1
2950WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2951AND @max_row_div2 + @max_row_div4 + @max_row;
2952
2953# check multiple-5 success: 	1
2954SELECT COUNT(*) INTO @try_count FROM t0_template
2955WHERE MOD(f_int1,3) = 0
2956AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2957SELECT COUNT(*) INTO @clash_count
2958FROM t1 INNER JOIN t0_template USING(f_int1)
2959WHERE MOD(f_int1,3) = 0
2960AND f_int1 BETWEEN @max_row_div2 AND @max_row;
2961SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2962INSERT INTO t1
2963SET f_int1 = @cur_value , f_int2 = @cur_value,
2964f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2965f_charbig = '#SINGLE#';
2966
2967# check single-1 success: 	1
2968SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2969INSERT INTO t1
2970SET f_int1 = @cur_value , f_int2 = @cur_value,
2971f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2972f_charbig = '#SINGLE#';
2973
2974# check single-2 success: 	1
2975SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2976SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2977UPDATE t1 SET f_int1 = @cur_value2
2978WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2979
2980# check single-3 success: 	1
2981SET @cur_value1= -1;
2982SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2983UPDATE t1 SET f_int1 = @cur_value1
2984WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2985
2986# check single-4 success: 	1
2987SELECT MAX(f_int1) INTO @cur_value FROM t1;
2988DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2989
2990# check single-5 success: 	1
2991DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2992
2993# check single-6 success: 	1
2994INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2995ERROR HY000: Table has no partition for value 2147483647
2996DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2997INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2998f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2999f_charbig = '#NULL#';
3000INSERT INTO t1
3001SET f_int1 = NULL , f_int2 = -@max_row,
3002f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3003f_charbig = '#NULL#';
3004ERROR 23000: Column 'f_int1' cannot be null
3005# check null success:    1
3006DELETE FROM t1
3007WHERE f_int1 = 0 AND f_int2 = 0
3008AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3009AND f_charbig = '#NULL#';
3010INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3011SELECT f_int1, f_int1, '', '', 'was inserted'
3012   FROM t0_template source_tab
3013WHERE MOD(f_int1,3) = 0
3014AND f_int1 BETWEEN @max_row_div2 AND @max_row
3015ON DUPLICATE KEY
3016UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3017f_int2 = 2 * @max_row + source_tab.f_int1,
3018f_charbig = 'was updated';
3019
3020# check unique-1-a success: 	1
3021
3022# check unique-1-b success: 	1
3023DELETE FROM t1 WHERE f_charbig = 'was inserted';
3024UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3025f_int2 = CAST(f_char1 AS SIGNED INT),
3026f_charbig = CONCAT('===',f_char1,'===')
3027WHERE f_charbig = 'was updated';
3028REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3029SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3030   FROM t0_template source_tab
3031WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3032
3033# check replace success: 	1
3034DELETE FROM t1
3035WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3036DELETE FROM t1
3037WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3038f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3039UPDATE t1 SET f_int2 = f_int1,
3040f_char1 = CAST(f_int1 AS CHAR),
3041f_char2 = CAST(f_int1 AS CHAR),
3042f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3043WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3044SET AUTOCOMMIT= 0;
3045INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3046SELECT f_int1, f_int1, '', '', 'was inserted'
3047FROM t0_template source_tab
3048WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3049
3050# check transactions-1 success: 	1
3051COMMIT WORK;
3052
3053# check transactions-2 success: 	1
3054ROLLBACK WORK;
3055
3056# check transactions-3 success: 	1
3057DELETE FROM t1 WHERE f_charbig = 'was inserted';
3058COMMIT WORK;
3059ROLLBACK WORK;
3060
3061# check transactions-4 success: 	1
3062INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3063SELECT f_int1, f_int1, '', '', 'was inserted'
3064FROM t0_template source_tab
3065WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3066
3067# check transactions-5 success: 	1
3068ROLLBACK WORK;
3069
3070# check transactions-6 success: 	1
3071# INFO: Storage engine used for t1 seems to be transactional.
3072COMMIT;
3073
3074# check transactions-7 success: 	1
3075DELETE FROM t1 WHERE f_charbig = 'was inserted';
3076COMMIT WORK;
3077SET @@session.sql_mode = 'traditional';
3078SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3079INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3080SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3081'', '', 'was inserted' FROM t0_template
3082WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3083ERROR 22012: Division by 0
3084COMMIT;
3085
3086# check transactions-8 success: 	1
3087# INFO: Storage engine used for t1 seems to be able to revert
3088#       changes made by the failing statement.
3089SET @@session.sql_mode = '';
3090SET AUTOCOMMIT= 1;
3091DELETE FROM t1 WHERE f_charbig = 'was inserted';
3092COMMIT WORK;
3093UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3094
3095# check special-1 success: 	1
3096UPDATE t1 SET f_charbig = '';
3097
3098# check special-2 success: 	1
3099UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3100INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3101SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3102WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3103INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3104SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3105'just inserted' FROM t0_template
3106WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3107CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3108BEGIN
3109UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3110f_charbig = 'updated by trigger'
3111      WHERE f_int1 = new.f_int1;
3112END|
3113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3114SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3115WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3116
3117# check trigger-1 success: 	1
3118DROP TRIGGER trg_1;
3119UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3120f_int2 = CAST(f_char1 AS SIGNED INT),
3121f_charbig = 'just inserted'
3122   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3123DELETE FROM t0_aux
3124WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3126SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3127'just inserted' FROM t0_template
3128WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3129CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3130BEGIN
3131UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3132f_charbig = 'updated by trigger'
3133      WHERE f_int1 = new.f_int1;
3134END|
3135INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3136SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3138
3139# check trigger-2 success: 	1
3140DROP TRIGGER trg_1;
3141UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3142f_int2 = CAST(f_char1 AS SIGNED INT),
3143f_charbig = 'just inserted'
3144   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3145DELETE FROM t0_aux
3146WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3147INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3148SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3149'just inserted' FROM t0_template
3150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3151CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3152BEGIN
3153UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3154f_charbig = 'updated by trigger'
3155      WHERE f_int1 = new.f_int1;
3156END|
3157UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3158WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3159
3160# check trigger-3 success: 	1
3161DROP TRIGGER trg_1;
3162UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3163f_int2 = CAST(f_char1 AS SIGNED INT),
3164f_charbig = 'just inserted'
3165   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3166DELETE FROM t0_aux
3167WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3168INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3169SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3170'just inserted' FROM t0_template
3171WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3172CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3173BEGIN
3174UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3175f_charbig = 'updated by trigger'
3176      WHERE f_int1 = - old.f_int1;
3177END|
3178UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3179WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3180
3181# check trigger-4 success: 	1
3182DROP TRIGGER trg_1;
3183UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3184f_int2 = CAST(f_char1 AS SIGNED INT),
3185f_charbig = 'just inserted'
3186   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3187DELETE FROM t0_aux
3188WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3189INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3190SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3191'just inserted' FROM t0_template
3192WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3193CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3194BEGIN
3195UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3196f_charbig = 'updated by trigger'
3197      WHERE f_int1 = new.f_int1;
3198END|
3199UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3200WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3201
3202# check trigger-5 success: 	1
3203DROP TRIGGER trg_1;
3204UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3205f_int2 = CAST(f_char1 AS SIGNED INT),
3206f_charbig = 'just inserted'
3207   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3208DELETE FROM t0_aux
3209WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3210INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3211SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3212'just inserted' FROM t0_template
3213WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3214CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3215BEGIN
3216UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3217f_charbig = 'updated by trigger'
3218      WHERE f_int1 = - old.f_int1;
3219END|
3220UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3221WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3222
3223# check trigger-6 success: 	1
3224DROP TRIGGER trg_1;
3225UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3226f_int2 = CAST(f_char1 AS SIGNED INT),
3227f_charbig = 'just inserted'
3228   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3229DELETE FROM t0_aux
3230WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3231INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3232SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3233'just inserted' FROM t0_template
3234WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3235CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3236BEGIN
3237UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3238f_charbig = 'updated by trigger'
3239      WHERE f_int1 = - old.f_int1;
3240END|
3241DELETE FROM t0_aux
3242WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3243
3244# check trigger-7 success: 	1
3245DROP TRIGGER trg_1;
3246UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3247f_int2 = CAST(f_char1 AS SIGNED INT),
3248f_charbig = 'just inserted'
3249   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3250DELETE FROM t0_aux
3251WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3252INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3253SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3254'just inserted' FROM t0_template
3255WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3256CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3257BEGIN
3258UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3259f_charbig = 'updated by trigger'
3260      WHERE f_int1 = - old.f_int1;
3261END|
3262DELETE FROM t0_aux
3263WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3264
3265# check trigger-8 success: 	1
3266DROP TRIGGER trg_1;
3267UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3268f_int2 = CAST(f_char1 AS SIGNED INT),
3269f_charbig = 'just inserted'
3270   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3271DELETE FROM t0_aux
3272WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3273DELETE FROM t1
3274WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3275CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3276BEGIN
3277SET new.f_int1 = old.f_int1 + @max_row,
3278new.f_int2 = old.f_int2 - @max_row,
3279new.f_charbig = '####updated per update trigger####';
3280END|
3281UPDATE t1
3282SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3283f_charbig = '####updated per update statement itself####';
3284
3285# check trigger-9 success: 	1
3286DROP TRIGGER trg_2;
3287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3288f_int2 = CAST(f_char1 AS SIGNED INT),
3289f_charbig = CONCAT('===',f_char1,'===');
3290CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3291BEGIN
3292SET new.f_int1 = new.f_int1 + @max_row,
3293new.f_int2 = new.f_int2 - @max_row,
3294new.f_charbig = '####updated per update trigger####';
3295END|
3296UPDATE t1
3297SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3298f_charbig = '####updated per update statement itself####';
3299
3300# check trigger-10 success: 	1
3301DROP TRIGGER trg_2;
3302UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3303f_int2 = CAST(f_char1 AS SIGNED INT),
3304f_charbig = CONCAT('===',f_char1,'===');
3305CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3306BEGIN
3307SET new.f_int1 = @my_max1 + @counter,
3308new.f_int2 = @my_min2 - @counter,
3309new.f_charbig = '####updated per insert trigger####';
3310SET @counter = @counter + 1;
3311END|
3312SET @counter = 1;
3313SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3314INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3315SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3316CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3317WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3318ORDER BY f_int1;
3319DROP TRIGGER trg_3;
3320
3321# check trigger-11 success: 	1
3322DELETE FROM t1
3323WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3324AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3325AND f_charbig = '####updated per insert trigger####';
3326CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3327BEGIN
3328SET new.f_int1 = @my_max1 + @counter,
3329new.f_int2 = @my_min2 - @counter,
3330new.f_charbig = '####updated per insert trigger####';
3331SET @counter = @counter + 1;
3332END|
3333SET @counter = 1;
3334SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3335INSERT INTO t1 (f_char1, f_char2, f_charbig)
3336SELECT CAST(f_int1 AS CHAR),
3337CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3338WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3339ORDER BY f_int1;
3340DROP TRIGGER trg_3;
3341
3342# check trigger-12 success: 	1
3343DELETE FROM t1
3344WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3345AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3346AND f_charbig = '####updated per insert trigger####';
3347ANALYZE  TABLE t1;
3348Table	Op	Msg_type	Msg_text
3349test.t1	analyze	status	OK
3350CHECK    TABLE t1 EXTENDED;
3351Table	Op	Msg_type	Msg_text
3352test.t1	check	status	OK
3353CHECKSUM TABLE t1 EXTENDED;
3354Table	Checksum
3355test.t1	<some_value>
3356OPTIMIZE TABLE t1;
3357Table	Op	Msg_type	Msg_text
3358test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3359test.t1	optimize	status	OK
3360# check layout success:    1
3361REPAIR   TABLE t1 EXTENDED;
3362Table	Op	Msg_type	Msg_text
3363test.t1	repair	status	OK
3364# check layout success:    1
3365TRUNCATE t1;
3366
3367# check TRUNCATE success: 	1
3368# check layout success:    1
3369# End usability test (inc/partition_check.inc)
3370DROP TABLE t1;
3371CREATE TABLE t1 (
3372f_int1 INTEGER DEFAULT 0,
3373f_int2 INTEGER DEFAULT 0,
3374f_char1 CHAR(20),
3375f_char2 CHAR(20),
3376f_charbig VARCHAR(1000)
3377
3378)
3379PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
3380(PARTITION part1 VALUES IN (0)
3381(SUBPARTITION sp11, SUBPARTITION sp12),
3382PARTITION part2 VALUES IN (1)
3383(SUBPARTITION sp21, SUBPARTITION sp22),
3384PARTITION part3 VALUES IN (2)
3385(SUBPARTITION sp31, SUBPARTITION sp32),
3386PARTITION part4 VALUES IN (NULL)
3387(SUBPARTITION sp41, SUBPARTITION sp42));
3388INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3389SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3390WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3391ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
3392INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3393SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3394WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3395# Start usability test (inc/partition_check.inc)
3396create_command
3397SHOW CREATE TABLE t1;
3398Table	Create Table
3399t1	CREATE TABLE `t1` (
3400  `f_int1` int(11) NOT NULL DEFAULT 0,
3401  `f_int2` int(11) NOT NULL DEFAULT 0,
3402  `f_char1` char(20) DEFAULT NULL,
3403  `f_char2` char(20) DEFAULT NULL,
3404  `f_charbig` varchar(1000) DEFAULT NULL,
3405  PRIMARY KEY (`f_int1`,`f_int2`)
3406) ENGINE=InnoDB DEFAULT CHARSET=latin1
3407 PARTITION BY LIST (abs(`f_int1` MOD 3))
3408SUBPARTITION BY HASH (`f_int1` + 1)
3409(PARTITION `part1` VALUES IN (0)
3410 (SUBPARTITION `sp11` ENGINE = InnoDB,
3411  SUBPARTITION `sp12` ENGINE = InnoDB),
3412 PARTITION `part2` VALUES IN (1)
3413 (SUBPARTITION `sp21` ENGINE = InnoDB,
3414  SUBPARTITION `sp22` ENGINE = InnoDB),
3415 PARTITION `part3` VALUES IN (2)
3416 (SUBPARTITION `sp31` ENGINE = InnoDB,
3417  SUBPARTITION `sp32` ENGINE = InnoDB),
3418 PARTITION `part4` VALUES IN (NULL)
3419 (SUBPARTITION `sp41` ENGINE = InnoDB,
3420  SUBPARTITION `sp42` ENGINE = InnoDB))
3421
3422# check prerequisites-1 success:    1
3423# check COUNT(*) success:    1
3424# check MIN/MAX(f_int1) success:    1
3425# check MIN/MAX(f_int2) success:    1
3426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3427SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3428CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3429WHERE f_int1 IN (2,3);
3430ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3431# check prerequisites-3 success:    1
3432# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3434SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3435CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3436WHERE f_int1 IN (2,3);
3437DELETE FROM t1 WHERE f_charbig = 'delete me';
3438INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3439SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3440CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3441WHERE f_int1 IN (2,3);
3442DELETE FROM t1 WHERE f_charbig = 'delete me';
3443# check read via f_int1 success: 1
3444# check read via f_int2 success: 1
3445
3446# check multiple-1 success: 	1
3447DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3448
3449# check multiple-2 success: 	1
3450INSERT INTO t1 SELECT * FROM t0_template
3451WHERE MOD(f_int1,3) = 0;
3452
3453# check multiple-3 success: 	1
3454UPDATE t1 SET f_int1 = f_int1 + @max_row
3455WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3456AND @max_row_div2 + @max_row_div4;
3457
3458# check multiple-4 success: 	1
3459DELETE FROM t1
3460WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3461AND @max_row_div2 + @max_row_div4 + @max_row;
3462
3463# check multiple-5 success: 	1
3464SELECT COUNT(*) INTO @try_count FROM t0_template
3465WHERE MOD(f_int1,3) = 0
3466AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3467SELECT COUNT(*) INTO @clash_count
3468FROM t1 INNER JOIN t0_template USING(f_int1)
3469WHERE MOD(f_int1,3) = 0
3470AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3471SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3472INSERT INTO t1
3473SET f_int1 = @cur_value , f_int2 = @cur_value,
3474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3475f_charbig = '#SINGLE#';
3476
3477# check single-1 success: 	1
3478SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3479INSERT INTO t1
3480SET f_int1 = @cur_value , f_int2 = @cur_value,
3481f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3482f_charbig = '#SINGLE#';
3483
3484# check single-2 success: 	1
3485SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3486SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3487UPDATE t1 SET f_int1 = @cur_value2
3488WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3489
3490# check single-3 success: 	1
3491SET @cur_value1= -1;
3492SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3493UPDATE t1 SET f_int1 = @cur_value1
3494WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3495
3496# check single-4 success: 	1
3497SELECT MAX(f_int1) INTO @cur_value FROM t1;
3498DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3499
3500# check single-5 success: 	1
3501DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3502
3503# check single-6 success: 	1
3504INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3505
3506# check single-7 success: 	1
3507DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3508DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3509INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3510f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3511f_charbig = '#NULL#';
3512INSERT INTO t1
3513SET f_int1 = NULL , f_int2 = -@max_row,
3514f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3515f_charbig = '#NULL#';
3516ERROR 23000: Column 'f_int1' cannot be null
3517# check null success:    1
3518DELETE FROM t1
3519WHERE f_int1 = 0 AND f_int2 = 0
3520AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3521AND f_charbig = '#NULL#';
3522INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3523SELECT f_int1, f_int1, '', '', 'was inserted'
3524   FROM t0_template source_tab
3525WHERE MOD(f_int1,3) = 0
3526AND f_int1 BETWEEN @max_row_div2 AND @max_row
3527ON DUPLICATE KEY
3528UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3529f_int2 = 2 * @max_row + source_tab.f_int1,
3530f_charbig = 'was updated';
3531
3532# check unique-1-a success: 	1
3533
3534# check unique-1-b success: 	1
3535DELETE FROM t1 WHERE f_charbig = 'was inserted';
3536UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3537f_int2 = CAST(f_char1 AS SIGNED INT),
3538f_charbig = CONCAT('===',f_char1,'===')
3539WHERE f_charbig = 'was updated';
3540REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3541SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3542   FROM t0_template source_tab
3543WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3544
3545# check replace success: 	1
3546DELETE FROM t1
3547WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3548DELETE FROM t1
3549WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3550f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3551UPDATE t1 SET f_int2 = f_int1,
3552f_char1 = CAST(f_int1 AS CHAR),
3553f_char2 = CAST(f_int1 AS CHAR),
3554f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3555WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3556SET AUTOCOMMIT= 0;
3557INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3558SELECT f_int1, f_int1, '', '', 'was inserted'
3559FROM t0_template source_tab
3560WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3561
3562# check transactions-1 success: 	1
3563COMMIT WORK;
3564
3565# check transactions-2 success: 	1
3566ROLLBACK WORK;
3567
3568# check transactions-3 success: 	1
3569DELETE FROM t1 WHERE f_charbig = 'was inserted';
3570COMMIT WORK;
3571ROLLBACK WORK;
3572
3573# check transactions-4 success: 	1
3574INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3575SELECT f_int1, f_int1, '', '', 'was inserted'
3576FROM t0_template source_tab
3577WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3578
3579# check transactions-5 success: 	1
3580ROLLBACK WORK;
3581
3582# check transactions-6 success: 	1
3583# INFO: Storage engine used for t1 seems to be transactional.
3584COMMIT;
3585
3586# check transactions-7 success: 	1
3587DELETE FROM t1 WHERE f_charbig = 'was inserted';
3588COMMIT WORK;
3589SET @@session.sql_mode = 'traditional';
3590SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3591INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3592SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3593'', '', 'was inserted' FROM t0_template
3594WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3595ERROR 22012: Division by 0
3596COMMIT;
3597
3598# check transactions-8 success: 	1
3599# INFO: Storage engine used for t1 seems to be able to revert
3600#       changes made by the failing statement.
3601SET @@session.sql_mode = '';
3602SET AUTOCOMMIT= 1;
3603DELETE FROM t1 WHERE f_charbig = 'was inserted';
3604COMMIT WORK;
3605UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3606
3607# check special-1 success: 	1
3608UPDATE t1 SET f_charbig = '';
3609
3610# check special-2 success: 	1
3611UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3612INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3613SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3614WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3617'just inserted' FROM t0_template
3618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3619CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3620BEGIN
3621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3622f_charbig = 'updated by trigger'
3623      WHERE f_int1 = new.f_int1;
3624END|
3625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3628
3629# check trigger-1 success: 	1
3630DROP TRIGGER trg_1;
3631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3632f_int2 = CAST(f_char1 AS SIGNED INT),
3633f_charbig = 'just inserted'
3634   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3635DELETE FROM t0_aux
3636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3639'just inserted' FROM t0_template
3640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3641CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3642BEGIN
3643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3644f_charbig = 'updated by trigger'
3645      WHERE f_int1 = new.f_int1;
3646END|
3647INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3648SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3649WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3650
3651# check trigger-2 success: 	1
3652DROP TRIGGER trg_1;
3653UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3654f_int2 = CAST(f_char1 AS SIGNED INT),
3655f_charbig = 'just inserted'
3656   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3657DELETE FROM t0_aux
3658WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3659INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3660SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3661'just inserted' FROM t0_template
3662WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3663CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3664BEGIN
3665UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3666f_charbig = 'updated by trigger'
3667      WHERE f_int1 = new.f_int1;
3668END|
3669UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3670WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3671
3672# check trigger-3 success: 	1
3673DROP TRIGGER trg_1;
3674UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3675f_int2 = CAST(f_char1 AS SIGNED INT),
3676f_charbig = 'just inserted'
3677   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3678DELETE FROM t0_aux
3679WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3680INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3681SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3682'just inserted' FROM t0_template
3683WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3684CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3685BEGIN
3686UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3687f_charbig = 'updated by trigger'
3688      WHERE f_int1 = - old.f_int1;
3689END|
3690UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3691WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3692
3693# check trigger-4 success: 	1
3694DROP TRIGGER trg_1;
3695UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3696f_int2 = CAST(f_char1 AS SIGNED INT),
3697f_charbig = 'just inserted'
3698   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3699DELETE FROM t0_aux
3700WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3701INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3702SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3703'just inserted' FROM t0_template
3704WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3705CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3706BEGIN
3707UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3708f_charbig = 'updated by trigger'
3709      WHERE f_int1 = new.f_int1;
3710END|
3711UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3712WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3713
3714# check trigger-5 success: 	1
3715DROP TRIGGER trg_1;
3716UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3717f_int2 = CAST(f_char1 AS SIGNED INT),
3718f_charbig = 'just inserted'
3719   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3720DELETE FROM t0_aux
3721WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3722INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3723SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3724'just inserted' FROM t0_template
3725WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3726CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3727BEGIN
3728UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3729f_charbig = 'updated by trigger'
3730      WHERE f_int1 = - old.f_int1;
3731END|
3732UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3733WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3734
3735# check trigger-6 success: 	1
3736DROP TRIGGER trg_1;
3737UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3738f_int2 = CAST(f_char1 AS SIGNED INT),
3739f_charbig = 'just inserted'
3740   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3741DELETE FROM t0_aux
3742WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3743INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3744SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3745'just inserted' FROM t0_template
3746WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3747CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3748BEGIN
3749UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3750f_charbig = 'updated by trigger'
3751      WHERE f_int1 = - old.f_int1;
3752END|
3753DELETE FROM t0_aux
3754WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3755
3756# check trigger-7 success: 	1
3757DROP TRIGGER trg_1;
3758UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3759f_int2 = CAST(f_char1 AS SIGNED INT),
3760f_charbig = 'just inserted'
3761   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3762DELETE FROM t0_aux
3763WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3764INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3765SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3766'just inserted' FROM t0_template
3767WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3768CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3769BEGIN
3770UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3771f_charbig = 'updated by trigger'
3772      WHERE f_int1 = - old.f_int1;
3773END|
3774DELETE FROM t0_aux
3775WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3776
3777# check trigger-8 success: 	1
3778DROP TRIGGER trg_1;
3779UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3780f_int2 = CAST(f_char1 AS SIGNED INT),
3781f_charbig = 'just inserted'
3782   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3783DELETE FROM t0_aux
3784WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3785DELETE FROM t1
3786WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3787CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3788BEGIN
3789SET new.f_int1 = old.f_int1 + @max_row,
3790new.f_int2 = old.f_int2 - @max_row,
3791new.f_charbig = '####updated per update trigger####';
3792END|
3793UPDATE t1
3794SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3795f_charbig = '####updated per update statement itself####';
3796
3797# check trigger-9 success: 	1
3798DROP TRIGGER trg_2;
3799UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3800f_int2 = CAST(f_char1 AS SIGNED INT),
3801f_charbig = CONCAT('===',f_char1,'===');
3802CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3803BEGIN
3804SET new.f_int1 = new.f_int1 + @max_row,
3805new.f_int2 = new.f_int2 - @max_row,
3806new.f_charbig = '####updated per update trigger####';
3807END|
3808UPDATE t1
3809SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3810f_charbig = '####updated per update statement itself####';
3811
3812# check trigger-10 success: 	1
3813DROP TRIGGER trg_2;
3814UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3815f_int2 = CAST(f_char1 AS SIGNED INT),
3816f_charbig = CONCAT('===',f_char1,'===');
3817CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3818BEGIN
3819SET new.f_int1 = @my_max1 + @counter,
3820new.f_int2 = @my_min2 - @counter,
3821new.f_charbig = '####updated per insert trigger####';
3822SET @counter = @counter + 1;
3823END|
3824SET @counter = 1;
3825SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3826INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3827SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3828CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3830ORDER BY f_int1;
3831DROP TRIGGER trg_3;
3832
3833# check trigger-11 success: 	1
3834DELETE FROM t1
3835WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3836AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3837AND f_charbig = '####updated per insert trigger####';
3838CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3839BEGIN
3840SET new.f_int1 = @my_max1 + @counter,
3841new.f_int2 = @my_min2 - @counter,
3842new.f_charbig = '####updated per insert trigger####';
3843SET @counter = @counter + 1;
3844END|
3845SET @counter = 1;
3846SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3847INSERT INTO t1 (f_char1, f_char2, f_charbig)
3848SELECT CAST(f_int1 AS CHAR),
3849CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3850WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3851ORDER BY f_int1;
3852DROP TRIGGER trg_3;
3853
3854# check trigger-12 success: 	1
3855DELETE FROM t1
3856WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3857AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3858AND f_charbig = '####updated per insert trigger####';
3859ANALYZE  TABLE t1;
3860Table	Op	Msg_type	Msg_text
3861test.t1	analyze	status	OK
3862CHECK    TABLE t1 EXTENDED;
3863Table	Op	Msg_type	Msg_text
3864test.t1	check	status	OK
3865CHECKSUM TABLE t1 EXTENDED;
3866Table	Checksum
3867test.t1	<some_value>
3868OPTIMIZE TABLE t1;
3869Table	Op	Msg_type	Msg_text
3870test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3871test.t1	optimize	status	OK
3872# check layout success:    1
3873REPAIR   TABLE t1 EXTENDED;
3874Table	Op	Msg_type	Msg_text
3875test.t1	repair	status	OK
3876# check layout success:    1
3877TRUNCATE t1;
3878
3879# check TRUNCATE success: 	1
3880# check layout success:    1
3881# End usability test (inc/partition_check.inc)
3882DROP TABLE t1;
3883CREATE TABLE t1 (
3884f_int1 INTEGER DEFAULT 0,
3885f_int2 INTEGER DEFAULT 0,
3886f_char1 CHAR(20),
3887f_char2 CHAR(20),
3888f_charbig VARCHAR(1000)
3889
3890)
3891PARTITION BY LIST(ABS(MOD(f_int1,2)))
3892SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
3893(PARTITION part1 VALUES IN (0),
3894PARTITION part2 VALUES IN (1),
3895PARTITION part3 VALUES IN (NULL));
3896INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3897SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3898WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3899ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
3900INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3901SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3902WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3903# Start usability test (inc/partition_check.inc)
3904create_command
3905SHOW CREATE TABLE t1;
3906Table	Create Table
3907t1	CREATE TABLE `t1` (
3908  `f_int1` int(11) NOT NULL DEFAULT 0,
3909  `f_int2` int(11) NOT NULL DEFAULT 0,
3910  `f_char1` char(20) DEFAULT NULL,
3911  `f_char2` char(20) DEFAULT NULL,
3912  `f_charbig` varchar(1000) DEFAULT NULL,
3913  PRIMARY KEY (`f_int1`,`f_int2`)
3914) ENGINE=InnoDB DEFAULT CHARSET=latin1
3915 PARTITION BY LIST (abs(`f_int1` MOD 2))
3916SUBPARTITION BY KEY (`f_int1`)
3917SUBPARTITIONS 3
3918(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB,
3919 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB,
3920 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB)
3921
3922# check prerequisites-1 success:    1
3923# check COUNT(*) success:    1
3924# check MIN/MAX(f_int1) success:    1
3925# check MIN/MAX(f_int2) success:    1
3926INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3927SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3928CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3929WHERE f_int1 IN (2,3);
3930ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3931# check prerequisites-3 success:    1
3932# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3934SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3935CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3936WHERE f_int1 IN (2,3);
3937DELETE FROM t1 WHERE f_charbig = 'delete me';
3938INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3939SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3940CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3941WHERE f_int1 IN (2,3);
3942DELETE FROM t1 WHERE f_charbig = 'delete me';
3943# check read via f_int1 success: 1
3944# check read via f_int2 success: 1
3945
3946# check multiple-1 success: 	1
3947DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3948
3949# check multiple-2 success: 	1
3950INSERT INTO t1 SELECT * FROM t0_template
3951WHERE MOD(f_int1,3) = 0;
3952
3953# check multiple-3 success: 	1
3954UPDATE t1 SET f_int1 = f_int1 + @max_row
3955WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3956AND @max_row_div2 + @max_row_div4;
3957
3958# check multiple-4 success: 	1
3959DELETE FROM t1
3960WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3961AND @max_row_div2 + @max_row_div4 + @max_row;
3962
3963# check multiple-5 success: 	1
3964SELECT COUNT(*) INTO @try_count FROM t0_template
3965WHERE MOD(f_int1,3) = 0
3966AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3967SELECT COUNT(*) INTO @clash_count
3968FROM t1 INNER JOIN t0_template USING(f_int1)
3969WHERE MOD(f_int1,3) = 0
3970AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3971SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3972INSERT INTO t1
3973SET f_int1 = @cur_value , f_int2 = @cur_value,
3974f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3975f_charbig = '#SINGLE#';
3976
3977# check single-1 success: 	1
3978SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3979INSERT INTO t1
3980SET f_int1 = @cur_value , f_int2 = @cur_value,
3981f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3982f_charbig = '#SINGLE#';
3983
3984# check single-2 success: 	1
3985SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3986SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3987UPDATE t1 SET f_int1 = @cur_value2
3988WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3989
3990# check single-3 success: 	1
3991SET @cur_value1= -1;
3992SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3993UPDATE t1 SET f_int1 = @cur_value1
3994WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3995
3996# check single-4 success: 	1
3997SELECT MAX(f_int1) INTO @cur_value FROM t1;
3998DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3999
4000# check single-5 success: 	1
4001DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4002
4003# check single-6 success: 	1
4004INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4005
4006# check single-7 success: 	1
4007DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4008DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4009INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4010f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4011f_charbig = '#NULL#';
4012INSERT INTO t1
4013SET f_int1 = NULL , f_int2 = -@max_row,
4014f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4015f_charbig = '#NULL#';
4016ERROR 23000: Column 'f_int1' cannot be null
4017# check null success:    1
4018DELETE FROM t1
4019WHERE f_int1 = 0 AND f_int2 = 0
4020AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4021AND f_charbig = '#NULL#';
4022INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4023SELECT f_int1, f_int1, '', '', 'was inserted'
4024   FROM t0_template source_tab
4025WHERE MOD(f_int1,3) = 0
4026AND f_int1 BETWEEN @max_row_div2 AND @max_row
4027ON DUPLICATE KEY
4028UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4029f_int2 = 2 * @max_row + source_tab.f_int1,
4030f_charbig = 'was updated';
4031
4032# check unique-1-a success: 	1
4033
4034# check unique-1-b success: 	1
4035DELETE FROM t1 WHERE f_charbig = 'was inserted';
4036UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4037f_int2 = CAST(f_char1 AS SIGNED INT),
4038f_charbig = CONCAT('===',f_char1,'===')
4039WHERE f_charbig = 'was updated';
4040REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4041SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4042   FROM t0_template source_tab
4043WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4044
4045# check replace success: 	1
4046DELETE FROM t1
4047WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4048DELETE FROM t1
4049WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4050f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4051UPDATE t1 SET f_int2 = f_int1,
4052f_char1 = CAST(f_int1 AS CHAR),
4053f_char2 = CAST(f_int1 AS CHAR),
4054f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4055WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4056SET AUTOCOMMIT= 0;
4057INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4058SELECT f_int1, f_int1, '', '', 'was inserted'
4059FROM t0_template source_tab
4060WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4061
4062# check transactions-1 success: 	1
4063COMMIT WORK;
4064
4065# check transactions-2 success: 	1
4066ROLLBACK WORK;
4067
4068# check transactions-3 success: 	1
4069DELETE FROM t1 WHERE f_charbig = 'was inserted';
4070COMMIT WORK;
4071ROLLBACK WORK;
4072
4073# check transactions-4 success: 	1
4074INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4075SELECT f_int1, f_int1, '', '', 'was inserted'
4076FROM t0_template source_tab
4077WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4078
4079# check transactions-5 success: 	1
4080ROLLBACK WORK;
4081
4082# check transactions-6 success: 	1
4083# INFO: Storage engine used for t1 seems to be transactional.
4084COMMIT;
4085
4086# check transactions-7 success: 	1
4087DELETE FROM t1 WHERE f_charbig = 'was inserted';
4088COMMIT WORK;
4089SET @@session.sql_mode = 'traditional';
4090SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4092SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4093'', '', 'was inserted' FROM t0_template
4094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4095ERROR 22012: Division by 0
4096COMMIT;
4097
4098# check transactions-8 success: 	1
4099# INFO: Storage engine used for t1 seems to be able to revert
4100#       changes made by the failing statement.
4101SET @@session.sql_mode = '';
4102SET AUTOCOMMIT= 1;
4103DELETE FROM t1 WHERE f_charbig = 'was inserted';
4104COMMIT WORK;
4105UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4106
4107# check special-1 success: 	1
4108UPDATE t1 SET f_charbig = '';
4109
4110# check special-2 success: 	1
4111UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4112INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4113SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4115INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4116SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4117'just inserted' FROM t0_template
4118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4119CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4120BEGIN
4121UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4122f_charbig = 'updated by trigger'
4123      WHERE f_int1 = new.f_int1;
4124END|
4125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4126SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4127WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4128
4129# check trigger-1 success: 	1
4130DROP TRIGGER trg_1;
4131UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4132f_int2 = CAST(f_char1 AS SIGNED INT),
4133f_charbig = 'just inserted'
4134   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4135DELETE FROM t0_aux
4136WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4137INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4138SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4139'just inserted' FROM t0_template
4140WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4141CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4142BEGIN
4143UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4144f_charbig = 'updated by trigger'
4145      WHERE f_int1 = new.f_int1;
4146END|
4147INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4148SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4149WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4150
4151# check trigger-2 success: 	1
4152DROP TRIGGER trg_1;
4153UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4154f_int2 = CAST(f_char1 AS SIGNED INT),
4155f_charbig = 'just inserted'
4156   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4157DELETE FROM t0_aux
4158WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4159INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4160SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4161'just inserted' FROM t0_template
4162WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4163CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4164BEGIN
4165UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4166f_charbig = 'updated by trigger'
4167      WHERE f_int1 = new.f_int1;
4168END|
4169UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4170WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4171
4172# check trigger-3 success: 	1
4173DROP TRIGGER trg_1;
4174UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4175f_int2 = CAST(f_char1 AS SIGNED INT),
4176f_charbig = 'just inserted'
4177   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4178DELETE FROM t0_aux
4179WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4180INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4181SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4182'just inserted' FROM t0_template
4183WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4184CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4185BEGIN
4186UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4187f_charbig = 'updated by trigger'
4188      WHERE f_int1 = - old.f_int1;
4189END|
4190UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4191WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4192
4193# check trigger-4 success: 	1
4194DROP TRIGGER trg_1;
4195UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4196f_int2 = CAST(f_char1 AS SIGNED INT),
4197f_charbig = 'just inserted'
4198   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4199DELETE FROM t0_aux
4200WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4201INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4202SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4203'just inserted' FROM t0_template
4204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4205CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4206BEGIN
4207UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4208f_charbig = 'updated by trigger'
4209      WHERE f_int1 = new.f_int1;
4210END|
4211UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4212WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4213
4214# check trigger-5 success: 	1
4215DROP TRIGGER trg_1;
4216UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4217f_int2 = CAST(f_char1 AS SIGNED INT),
4218f_charbig = 'just inserted'
4219   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4220DELETE FROM t0_aux
4221WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4222INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4223SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4224'just inserted' FROM t0_template
4225WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4226CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4227BEGIN
4228UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4229f_charbig = 'updated by trigger'
4230      WHERE f_int1 = - old.f_int1;
4231END|
4232UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4233WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4234
4235# check trigger-6 success: 	1
4236DROP TRIGGER trg_1;
4237UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4238f_int2 = CAST(f_char1 AS SIGNED INT),
4239f_charbig = 'just inserted'
4240   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4241DELETE FROM t0_aux
4242WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4243INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4244SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4245'just inserted' FROM t0_template
4246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4247CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4248BEGIN
4249UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4250f_charbig = 'updated by trigger'
4251      WHERE f_int1 = - old.f_int1;
4252END|
4253DELETE FROM t0_aux
4254WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4255
4256# check trigger-7 success: 	1
4257DROP TRIGGER trg_1;
4258UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4259f_int2 = CAST(f_char1 AS SIGNED INT),
4260f_charbig = 'just inserted'
4261   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4262DELETE FROM t0_aux
4263WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4264INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4265SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4266'just inserted' FROM t0_template
4267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4268CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4269BEGIN
4270UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4271f_charbig = 'updated by trigger'
4272      WHERE f_int1 = - old.f_int1;
4273END|
4274DELETE FROM t0_aux
4275WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4276
4277# check trigger-8 success: 	1
4278DROP TRIGGER trg_1;
4279UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4280f_int2 = CAST(f_char1 AS SIGNED INT),
4281f_charbig = 'just inserted'
4282   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4283DELETE FROM t0_aux
4284WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4285DELETE FROM t1
4286WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4287CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4288BEGIN
4289SET new.f_int1 = old.f_int1 + @max_row,
4290new.f_int2 = old.f_int2 - @max_row,
4291new.f_charbig = '####updated per update trigger####';
4292END|
4293UPDATE t1
4294SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4295f_charbig = '####updated per update statement itself####';
4296
4297# check trigger-9 success: 	1
4298DROP TRIGGER trg_2;
4299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4300f_int2 = CAST(f_char1 AS SIGNED INT),
4301f_charbig = CONCAT('===',f_char1,'===');
4302CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4303BEGIN
4304SET new.f_int1 = new.f_int1 + @max_row,
4305new.f_int2 = new.f_int2 - @max_row,
4306new.f_charbig = '####updated per update trigger####';
4307END|
4308UPDATE t1
4309SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4310f_charbig = '####updated per update statement itself####';
4311
4312# check trigger-10 success: 	1
4313DROP TRIGGER trg_2;
4314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4315f_int2 = CAST(f_char1 AS SIGNED INT),
4316f_charbig = CONCAT('===',f_char1,'===');
4317CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4318BEGIN
4319SET new.f_int1 = @my_max1 + @counter,
4320new.f_int2 = @my_min2 - @counter,
4321new.f_charbig = '####updated per insert trigger####';
4322SET @counter = @counter + 1;
4323END|
4324SET @counter = 1;
4325SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4326INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4327SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4328CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4329WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4330ORDER BY f_int1;
4331DROP TRIGGER trg_3;
4332
4333# check trigger-11 success: 	1
4334DELETE FROM t1
4335WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4336AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4337AND f_charbig = '####updated per insert trigger####';
4338CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4339BEGIN
4340SET new.f_int1 = @my_max1 + @counter,
4341new.f_int2 = @my_min2 - @counter,
4342new.f_charbig = '####updated per insert trigger####';
4343SET @counter = @counter + 1;
4344END|
4345SET @counter = 1;
4346SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4347INSERT INTO t1 (f_char1, f_char2, f_charbig)
4348SELECT CAST(f_int1 AS CHAR),
4349CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4351ORDER BY f_int1;
4352DROP TRIGGER trg_3;
4353
4354# check trigger-12 success: 	1
4355DELETE FROM t1
4356WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4357AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4358AND f_charbig = '####updated per insert trigger####';
4359ANALYZE  TABLE t1;
4360Table	Op	Msg_type	Msg_text
4361test.t1	analyze	status	OK
4362CHECK    TABLE t1 EXTENDED;
4363Table	Op	Msg_type	Msg_text
4364test.t1	check	status	OK
4365CHECKSUM TABLE t1 EXTENDED;
4366Table	Checksum
4367test.t1	<some_value>
4368OPTIMIZE TABLE t1;
4369Table	Op	Msg_type	Msg_text
4370test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4371test.t1	optimize	status	OK
4372# check layout success:    1
4373REPAIR   TABLE t1 EXTENDED;
4374Table	Op	Msg_type	Msg_text
4375test.t1	repair	status	OK
4376# check layout success:    1
4377TRUNCATE t1;
4378
4379# check TRUNCATE success: 	1
4380# check layout success:    1
4381# End usability test (inc/partition_check.inc)
4382DROP TABLE t1;
4383DROP TABLE IF EXISTS t1;
4384CREATE TABLE t1 (
4385f_int1 INTEGER DEFAULT 0,
4386f_int2 INTEGER DEFAULT 0,
4387f_char1 CHAR(20),
4388f_char2 CHAR(20),
4389f_charbig VARCHAR(1000)
4390
4391)
4392PARTITION BY HASH(f_int1) PARTITIONS 2;
4393INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4394SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4395WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4396ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
4397INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4398SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4399WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4400# Start usability test (inc/partition_check.inc)
4401create_command
4402SHOW CREATE TABLE t1;
4403Table	Create Table
4404t1	CREATE TABLE `t1` (
4405  `f_int1` int(11) NOT NULL DEFAULT 0,
4406  `f_int2` int(11) NOT NULL DEFAULT 0,
4407  `f_char1` char(20) DEFAULT NULL,
4408  `f_char2` char(20) DEFAULT NULL,
4409  `f_charbig` varchar(1000) DEFAULT NULL,
4410  PRIMARY KEY (`f_int2`,`f_int1`)
4411) ENGINE=InnoDB DEFAULT CHARSET=latin1
4412 PARTITION BY HASH (`f_int1`)
4413PARTITIONS 2
4414
4415# check prerequisites-1 success:    1
4416# check COUNT(*) success:    1
4417# check MIN/MAX(f_int1) success:    1
4418# check MIN/MAX(f_int2) success:    1
4419INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4420SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4421CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4422WHERE f_int1 IN (2,3);
4423ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4424# check prerequisites-3 success:    1
4425# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4427SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4428CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4429WHERE f_int1 IN (2,3);
4430DELETE FROM t1 WHERE f_charbig = 'delete me';
4431INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4432SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4433CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4434WHERE f_int1 IN (2,3);
4435DELETE FROM t1 WHERE f_charbig = 'delete me';
4436# check read via f_int1 success: 1
4437# check read via f_int2 success: 1
4438
4439# check multiple-1 success: 	1
4440DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4441
4442# check multiple-2 success: 	1
4443INSERT INTO t1 SELECT * FROM t0_template
4444WHERE MOD(f_int1,3) = 0;
4445
4446# check multiple-3 success: 	1
4447UPDATE t1 SET f_int1 = f_int1 + @max_row
4448WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4449AND @max_row_div2 + @max_row_div4;
4450
4451# check multiple-4 success: 	1
4452DELETE FROM t1
4453WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4454AND @max_row_div2 + @max_row_div4 + @max_row;
4455
4456# check multiple-5 success: 	1
4457SELECT COUNT(*) INTO @try_count FROM t0_template
4458WHERE MOD(f_int1,3) = 0
4459AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4460SELECT COUNT(*) INTO @clash_count
4461FROM t1 INNER JOIN t0_template USING(f_int1)
4462WHERE MOD(f_int1,3) = 0
4463AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4464SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4465INSERT INTO t1
4466SET f_int1 = @cur_value , f_int2 = @cur_value,
4467f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4468f_charbig = '#SINGLE#';
4469
4470# check single-1 success: 	1
4471SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4472INSERT INTO t1
4473SET f_int1 = @cur_value , f_int2 = @cur_value,
4474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4475f_charbig = '#SINGLE#';
4476
4477# check single-2 success: 	1
4478SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4479SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4480UPDATE t1 SET f_int1 = @cur_value2
4481WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4482
4483# check single-3 success: 	1
4484SET @cur_value1= -1;
4485SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4486UPDATE t1 SET f_int1 = @cur_value1
4487WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4488
4489# check single-4 success: 	1
4490SELECT MAX(f_int1) INTO @cur_value FROM t1;
4491DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4492
4493# check single-5 success: 	1
4494DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4495
4496# check single-6 success: 	1
4497INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4498
4499# check single-7 success: 	1
4500DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4501DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4502INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4503f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4504f_charbig = '#NULL#';
4505INSERT INTO t1
4506SET f_int1 = NULL , f_int2 = -@max_row,
4507f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4508f_charbig = '#NULL#';
4509ERROR 23000: Column 'f_int1' cannot be null
4510# check null success:    1
4511DELETE FROM t1
4512WHERE f_int1 = 0 AND f_int2 = 0
4513AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4514AND f_charbig = '#NULL#';
4515INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4516SELECT f_int1, f_int1, '', '', 'was inserted'
4517   FROM t0_template source_tab
4518WHERE MOD(f_int1,3) = 0
4519AND f_int1 BETWEEN @max_row_div2 AND @max_row
4520ON DUPLICATE KEY
4521UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4522f_int2 = 2 * @max_row + source_tab.f_int1,
4523f_charbig = 'was updated';
4524
4525# check unique-1-a success: 	1
4526
4527# check unique-1-b success: 	1
4528DELETE FROM t1 WHERE f_charbig = 'was inserted';
4529UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4530f_int2 = CAST(f_char1 AS SIGNED INT),
4531f_charbig = CONCAT('===',f_char1,'===')
4532WHERE f_charbig = 'was updated';
4533REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4534SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4535   FROM t0_template source_tab
4536WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4537
4538# check replace success: 	1
4539DELETE FROM t1
4540WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4541DELETE FROM t1
4542WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4543f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4544UPDATE t1 SET f_int2 = f_int1,
4545f_char1 = CAST(f_int1 AS CHAR),
4546f_char2 = CAST(f_int1 AS CHAR),
4547f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4548WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4549SET AUTOCOMMIT= 0;
4550INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4551SELECT f_int1, f_int1, '', '', 'was inserted'
4552FROM t0_template source_tab
4553WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4554
4555# check transactions-1 success: 	1
4556COMMIT WORK;
4557
4558# check transactions-2 success: 	1
4559ROLLBACK WORK;
4560
4561# check transactions-3 success: 	1
4562DELETE FROM t1 WHERE f_charbig = 'was inserted';
4563COMMIT WORK;
4564ROLLBACK WORK;
4565
4566# check transactions-4 success: 	1
4567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4568SELECT f_int1, f_int1, '', '', 'was inserted'
4569FROM t0_template source_tab
4570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4571
4572# check transactions-5 success: 	1
4573ROLLBACK WORK;
4574
4575# check transactions-6 success: 	1
4576# INFO: Storage engine used for t1 seems to be transactional.
4577COMMIT;
4578
4579# check transactions-7 success: 	1
4580DELETE FROM t1 WHERE f_charbig = 'was inserted';
4581COMMIT WORK;
4582SET @@session.sql_mode = 'traditional';
4583SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4584INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4585SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4586'', '', 'was inserted' FROM t0_template
4587WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4588ERROR 22012: Division by 0
4589COMMIT;
4590
4591# check transactions-8 success: 	1
4592# INFO: Storage engine used for t1 seems to be able to revert
4593#       changes made by the failing statement.
4594SET @@session.sql_mode = '';
4595SET AUTOCOMMIT= 1;
4596DELETE FROM t1 WHERE f_charbig = 'was inserted';
4597COMMIT WORK;
4598UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4599
4600# check special-1 success: 	1
4601UPDATE t1 SET f_charbig = '';
4602
4603# check special-2 success: 	1
4604UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4605INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4606SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4607WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4610'just inserted' FROM t0_template
4611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4612CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4613BEGIN
4614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4615f_charbig = 'updated by trigger'
4616      WHERE f_int1 = new.f_int1;
4617END|
4618INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4619SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4621
4622# check trigger-1 success: 	1
4623DROP TRIGGER trg_1;
4624UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4625f_int2 = CAST(f_char1 AS SIGNED INT),
4626f_charbig = 'just inserted'
4627   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4628DELETE FROM t0_aux
4629WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4630INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4631SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4632'just inserted' FROM t0_template
4633WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4634CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4635BEGIN
4636UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4637f_charbig = 'updated by trigger'
4638      WHERE f_int1 = new.f_int1;
4639END|
4640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4641SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4643
4644# check trigger-2 success: 	1
4645DROP TRIGGER trg_1;
4646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4647f_int2 = CAST(f_char1 AS SIGNED INT),
4648f_charbig = 'just inserted'
4649   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4650DELETE FROM t0_aux
4651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4654'just inserted' FROM t0_template
4655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4656CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4657BEGIN
4658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4659f_charbig = 'updated by trigger'
4660      WHERE f_int1 = new.f_int1;
4661END|
4662UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4663WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4664
4665# check trigger-3 success: 	1
4666DROP TRIGGER trg_1;
4667UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4668f_int2 = CAST(f_char1 AS SIGNED INT),
4669f_charbig = 'just inserted'
4670   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4671DELETE FROM t0_aux
4672WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4674SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4675'just inserted' FROM t0_template
4676WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4677CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4678BEGIN
4679UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4680f_charbig = 'updated by trigger'
4681      WHERE f_int1 = - old.f_int1;
4682END|
4683UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4684WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4685
4686# check trigger-4 success: 	1
4687DROP TRIGGER trg_1;
4688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4689f_int2 = CAST(f_char1 AS SIGNED INT),
4690f_charbig = 'just inserted'
4691   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4692DELETE FROM t0_aux
4693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4696'just inserted' FROM t0_template
4697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4698CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4699BEGIN
4700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4701f_charbig = 'updated by trigger'
4702      WHERE f_int1 = new.f_int1;
4703END|
4704UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4705WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4706
4707# check trigger-5 success: 	1
4708DROP TRIGGER trg_1;
4709UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4710f_int2 = CAST(f_char1 AS SIGNED INT),
4711f_charbig = 'just inserted'
4712   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4713DELETE FROM t0_aux
4714WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4715INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4716SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4717'just inserted' FROM t0_template
4718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4719CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4720BEGIN
4721UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4722f_charbig = 'updated by trigger'
4723      WHERE f_int1 = - old.f_int1;
4724END|
4725UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4726WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4727
4728# check trigger-6 success: 	1
4729DROP TRIGGER trg_1;
4730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4731f_int2 = CAST(f_char1 AS SIGNED INT),
4732f_charbig = 'just inserted'
4733   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4734DELETE FROM t0_aux
4735WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4737SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4738'just inserted' FROM t0_template
4739WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4740CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4741BEGIN
4742UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4743f_charbig = 'updated by trigger'
4744      WHERE f_int1 = - old.f_int1;
4745END|
4746DELETE FROM t0_aux
4747WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4748
4749# check trigger-7 success: 	1
4750DROP TRIGGER trg_1;
4751UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4752f_int2 = CAST(f_char1 AS SIGNED INT),
4753f_charbig = 'just inserted'
4754   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4755DELETE FROM t0_aux
4756WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4757INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4758SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4759'just inserted' FROM t0_template
4760WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4761CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4762BEGIN
4763UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4764f_charbig = 'updated by trigger'
4765      WHERE f_int1 = - old.f_int1;
4766END|
4767DELETE FROM t0_aux
4768WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4769
4770# check trigger-8 success: 	1
4771DROP TRIGGER trg_1;
4772UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4773f_int2 = CAST(f_char1 AS SIGNED INT),
4774f_charbig = 'just inserted'
4775   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4776DELETE FROM t0_aux
4777WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4778DELETE FROM t1
4779WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4781BEGIN
4782SET new.f_int1 = old.f_int1 + @max_row,
4783new.f_int2 = old.f_int2 - @max_row,
4784new.f_charbig = '####updated per update trigger####';
4785END|
4786UPDATE t1
4787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4788f_charbig = '####updated per update statement itself####';
4789
4790# check trigger-9 success: 	1
4791DROP TRIGGER trg_2;
4792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4793f_int2 = CAST(f_char1 AS SIGNED INT),
4794f_charbig = CONCAT('===',f_char1,'===');
4795CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4796BEGIN
4797SET new.f_int1 = new.f_int1 + @max_row,
4798new.f_int2 = new.f_int2 - @max_row,
4799new.f_charbig = '####updated per update trigger####';
4800END|
4801UPDATE t1
4802SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4803f_charbig = '####updated per update statement itself####';
4804
4805# check trigger-10 success: 	1
4806DROP TRIGGER trg_2;
4807UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4808f_int2 = CAST(f_char1 AS SIGNED INT),
4809f_charbig = CONCAT('===',f_char1,'===');
4810CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4811BEGIN
4812SET new.f_int1 = @my_max1 + @counter,
4813new.f_int2 = @my_min2 - @counter,
4814new.f_charbig = '####updated per insert trigger####';
4815SET @counter = @counter + 1;
4816END|
4817SET @counter = 1;
4818SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4819INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4820SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4821CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4822WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4823ORDER BY f_int1;
4824DROP TRIGGER trg_3;
4825
4826# check trigger-11 success: 	1
4827DELETE FROM t1
4828WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4829AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4830AND f_charbig = '####updated per insert trigger####';
4831CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4832BEGIN
4833SET new.f_int1 = @my_max1 + @counter,
4834new.f_int2 = @my_min2 - @counter,
4835new.f_charbig = '####updated per insert trigger####';
4836SET @counter = @counter + 1;
4837END|
4838SET @counter = 1;
4839SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4840INSERT INTO t1 (f_char1, f_char2, f_charbig)
4841SELECT CAST(f_int1 AS CHAR),
4842CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4843WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4844ORDER BY f_int1;
4845DROP TRIGGER trg_3;
4846
4847# check trigger-12 success: 	1
4848DELETE FROM t1
4849WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4850AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4851AND f_charbig = '####updated per insert trigger####';
4852ANALYZE  TABLE t1;
4853Table	Op	Msg_type	Msg_text
4854test.t1	analyze	status	OK
4855CHECK    TABLE t1 EXTENDED;
4856Table	Op	Msg_type	Msg_text
4857test.t1	check	status	OK
4858CHECKSUM TABLE t1 EXTENDED;
4859Table	Checksum
4860test.t1	<some_value>
4861OPTIMIZE TABLE t1;
4862Table	Op	Msg_type	Msg_text
4863test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4864test.t1	optimize	status	OK
4865# check layout success:    1
4866REPAIR   TABLE t1 EXTENDED;
4867Table	Op	Msg_type	Msg_text
4868test.t1	repair	status	OK
4869# check layout success:    1
4870TRUNCATE t1;
4871
4872# check TRUNCATE success: 	1
4873# check layout success:    1
4874# End usability test (inc/partition_check.inc)
4875DROP TABLE t1;
4876CREATE TABLE t1 (
4877f_int1 INTEGER DEFAULT 0,
4878f_int2 INTEGER DEFAULT 0,
4879f_char1 CHAR(20),
4880f_char2 CHAR(20),
4881f_charbig VARCHAR(1000)
4882
4883)
4884PARTITION BY KEY(f_int1) PARTITIONS 5;
4885INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4886SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4887WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4888ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
4889INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4890SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4891WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4892# Start usability test (inc/partition_check.inc)
4893create_command
4894SHOW CREATE TABLE t1;
4895Table	Create Table
4896t1	CREATE TABLE `t1` (
4897  `f_int1` int(11) NOT NULL DEFAULT 0,
4898  `f_int2` int(11) NOT NULL DEFAULT 0,
4899  `f_char1` char(20) DEFAULT NULL,
4900  `f_char2` char(20) DEFAULT NULL,
4901  `f_charbig` varchar(1000) DEFAULT NULL,
4902  PRIMARY KEY (`f_int2`,`f_int1`)
4903) ENGINE=InnoDB DEFAULT CHARSET=latin1
4904 PARTITION BY KEY (`f_int1`)
4905PARTITIONS 5
4906
4907# check prerequisites-1 success:    1
4908# check COUNT(*) success:    1
4909# check MIN/MAX(f_int1) success:    1
4910# check MIN/MAX(f_int2) success:    1
4911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4913CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4914WHERE f_int1 IN (2,3);
4915ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4916# check prerequisites-3 success:    1
4917# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4918INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4919SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4920CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4921WHERE f_int1 IN (2,3);
4922DELETE FROM t1 WHERE f_charbig = 'delete me';
4923INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4924SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4925CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4926WHERE f_int1 IN (2,3);
4927DELETE FROM t1 WHERE f_charbig = 'delete me';
4928# check read via f_int1 success: 1
4929# check read via f_int2 success: 1
4930
4931# check multiple-1 success: 	1
4932DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4933
4934# check multiple-2 success: 	1
4935INSERT INTO t1 SELECT * FROM t0_template
4936WHERE MOD(f_int1,3) = 0;
4937
4938# check multiple-3 success: 	1
4939UPDATE t1 SET f_int1 = f_int1 + @max_row
4940WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4941AND @max_row_div2 + @max_row_div4;
4942
4943# check multiple-4 success: 	1
4944DELETE FROM t1
4945WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4946AND @max_row_div2 + @max_row_div4 + @max_row;
4947
4948# check multiple-5 success: 	1
4949SELECT COUNT(*) INTO @try_count FROM t0_template
4950WHERE MOD(f_int1,3) = 0
4951AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4952SELECT COUNT(*) INTO @clash_count
4953FROM t1 INNER JOIN t0_template USING(f_int1)
4954WHERE MOD(f_int1,3) = 0
4955AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4956SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4957INSERT INTO t1
4958SET f_int1 = @cur_value , f_int2 = @cur_value,
4959f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4960f_charbig = '#SINGLE#';
4961
4962# check single-1 success: 	1
4963SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4964INSERT INTO t1
4965SET f_int1 = @cur_value , f_int2 = @cur_value,
4966f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4967f_charbig = '#SINGLE#';
4968
4969# check single-2 success: 	1
4970SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4971SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4972UPDATE t1 SET f_int1 = @cur_value2
4973WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4974
4975# check single-3 success: 	1
4976SET @cur_value1= -1;
4977SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4978UPDATE t1 SET f_int1 = @cur_value1
4979WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4980
4981# check single-4 success: 	1
4982SELECT MAX(f_int1) INTO @cur_value FROM t1;
4983DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4984
4985# check single-5 success: 	1
4986DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4987
4988# check single-6 success: 	1
4989INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4990
4991# check single-7 success: 	1
4992DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4993DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4994INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4995f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4996f_charbig = '#NULL#';
4997INSERT INTO t1
4998SET f_int1 = NULL , f_int2 = -@max_row,
4999f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5000f_charbig = '#NULL#';
5001ERROR 23000: Column 'f_int1' cannot be null
5002# check null success:    1
5003DELETE FROM t1
5004WHERE f_int1 = 0 AND f_int2 = 0
5005AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5006AND f_charbig = '#NULL#';
5007INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5008SELECT f_int1, f_int1, '', '', 'was inserted'
5009   FROM t0_template source_tab
5010WHERE MOD(f_int1,3) = 0
5011AND f_int1 BETWEEN @max_row_div2 AND @max_row
5012ON DUPLICATE KEY
5013UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5014f_int2 = 2 * @max_row + source_tab.f_int1,
5015f_charbig = 'was updated';
5016
5017# check unique-1-a success: 	1
5018
5019# check unique-1-b success: 	1
5020DELETE FROM t1 WHERE f_charbig = 'was inserted';
5021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5022f_int2 = CAST(f_char1 AS SIGNED INT),
5023f_charbig = CONCAT('===',f_char1,'===')
5024WHERE f_charbig = 'was updated';
5025REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5026SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5027   FROM t0_template source_tab
5028WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5029
5030# check replace success: 	1
5031DELETE FROM t1
5032WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5033DELETE FROM t1
5034WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5035f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5036UPDATE t1 SET f_int2 = f_int1,
5037f_char1 = CAST(f_int1 AS CHAR),
5038f_char2 = CAST(f_int1 AS CHAR),
5039f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5040WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5041SET AUTOCOMMIT= 0;
5042INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5043SELECT f_int1, f_int1, '', '', 'was inserted'
5044FROM t0_template source_tab
5045WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5046
5047# check transactions-1 success: 	1
5048COMMIT WORK;
5049
5050# check transactions-2 success: 	1
5051ROLLBACK WORK;
5052
5053# check transactions-3 success: 	1
5054DELETE FROM t1 WHERE f_charbig = 'was inserted';
5055COMMIT WORK;
5056ROLLBACK WORK;
5057
5058# check transactions-4 success: 	1
5059INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5060SELECT f_int1, f_int1, '', '', 'was inserted'
5061FROM t0_template source_tab
5062WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5063
5064# check transactions-5 success: 	1
5065ROLLBACK WORK;
5066
5067# check transactions-6 success: 	1
5068# INFO: Storage engine used for t1 seems to be transactional.
5069COMMIT;
5070
5071# check transactions-7 success: 	1
5072DELETE FROM t1 WHERE f_charbig = 'was inserted';
5073COMMIT WORK;
5074SET @@session.sql_mode = 'traditional';
5075SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5076INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5077SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5078'', '', 'was inserted' FROM t0_template
5079WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5080ERROR 22012: Division by 0
5081COMMIT;
5082
5083# check transactions-8 success: 	1
5084# INFO: Storage engine used for t1 seems to be able to revert
5085#       changes made by the failing statement.
5086SET @@session.sql_mode = '';
5087SET AUTOCOMMIT= 1;
5088DELETE FROM t1 WHERE f_charbig = 'was inserted';
5089COMMIT WORK;
5090UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5091
5092# check special-1 success: 	1
5093UPDATE t1 SET f_charbig = '';
5094
5095# check special-2 success: 	1
5096UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5097INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5098SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5099WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5100INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5101SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5102'just inserted' FROM t0_template
5103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5104CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5105BEGIN
5106UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5107f_charbig = 'updated by trigger'
5108      WHERE f_int1 = new.f_int1;
5109END|
5110INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5111SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5112WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5113
5114# check trigger-1 success: 	1
5115DROP TRIGGER trg_1;
5116UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5117f_int2 = CAST(f_char1 AS SIGNED INT),
5118f_charbig = 'just inserted'
5119   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5120DELETE FROM t0_aux
5121WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5122INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5123SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5124'just inserted' FROM t0_template
5125WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5126CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5127BEGIN
5128UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5129f_charbig = 'updated by trigger'
5130      WHERE f_int1 = new.f_int1;
5131END|
5132INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5133SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5134WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5135
5136# check trigger-2 success: 	1
5137DROP TRIGGER trg_1;
5138UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5139f_int2 = CAST(f_char1 AS SIGNED INT),
5140f_charbig = 'just inserted'
5141   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5142DELETE FROM t0_aux
5143WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5144INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5145SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5146'just inserted' FROM t0_template
5147WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5148CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5149BEGIN
5150UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5151f_charbig = 'updated by trigger'
5152      WHERE f_int1 = new.f_int1;
5153END|
5154UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5155WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5156
5157# check trigger-3 success: 	1
5158DROP TRIGGER trg_1;
5159UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5160f_int2 = CAST(f_char1 AS SIGNED INT),
5161f_charbig = 'just inserted'
5162   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5163DELETE FROM t0_aux
5164WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5165INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5166SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5167'just inserted' FROM t0_template
5168WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5169CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5170BEGIN
5171UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5172f_charbig = 'updated by trigger'
5173      WHERE f_int1 = - old.f_int1;
5174END|
5175UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5176WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5177
5178# check trigger-4 success: 	1
5179DROP TRIGGER trg_1;
5180UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5181f_int2 = CAST(f_char1 AS SIGNED INT),
5182f_charbig = 'just inserted'
5183   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5184DELETE FROM t0_aux
5185WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5186INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5187SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5188'just inserted' FROM t0_template
5189WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5190CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5191BEGIN
5192UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5193f_charbig = 'updated by trigger'
5194      WHERE f_int1 = new.f_int1;
5195END|
5196UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5197WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5198
5199# check trigger-5 success: 	1
5200DROP TRIGGER trg_1;
5201UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5202f_int2 = CAST(f_char1 AS SIGNED INT),
5203f_charbig = 'just inserted'
5204   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5205DELETE FROM t0_aux
5206WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5207INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5208SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5209'just inserted' FROM t0_template
5210WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5211CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5212BEGIN
5213UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5214f_charbig = 'updated by trigger'
5215      WHERE f_int1 = - old.f_int1;
5216END|
5217UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5218WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5219
5220# check trigger-6 success: 	1
5221DROP TRIGGER trg_1;
5222UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5223f_int2 = CAST(f_char1 AS SIGNED INT),
5224f_charbig = 'just inserted'
5225   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5226DELETE FROM t0_aux
5227WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5228INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5229SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5230'just inserted' FROM t0_template
5231WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5232CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5233BEGIN
5234UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5235f_charbig = 'updated by trigger'
5236      WHERE f_int1 = - old.f_int1;
5237END|
5238DELETE FROM t0_aux
5239WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5240
5241# check trigger-7 success: 	1
5242DROP TRIGGER trg_1;
5243UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5244f_int2 = CAST(f_char1 AS SIGNED INT),
5245f_charbig = 'just inserted'
5246   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5247DELETE FROM t0_aux
5248WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5249INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5250SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5251'just inserted' FROM t0_template
5252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5253CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5254BEGIN
5255UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5256f_charbig = 'updated by trigger'
5257      WHERE f_int1 = - old.f_int1;
5258END|
5259DELETE FROM t0_aux
5260WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5261
5262# check trigger-8 success: 	1
5263DROP TRIGGER trg_1;
5264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5265f_int2 = CAST(f_char1 AS SIGNED INT),
5266f_charbig = 'just inserted'
5267   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5268DELETE FROM t0_aux
5269WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5270DELETE FROM t1
5271WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5272CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5273BEGIN
5274SET new.f_int1 = old.f_int1 + @max_row,
5275new.f_int2 = old.f_int2 - @max_row,
5276new.f_charbig = '####updated per update trigger####';
5277END|
5278UPDATE t1
5279SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5280f_charbig = '####updated per update statement itself####';
5281
5282# check trigger-9 success: 	1
5283DROP TRIGGER trg_2;
5284UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5285f_int2 = CAST(f_char1 AS SIGNED INT),
5286f_charbig = CONCAT('===',f_char1,'===');
5287CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5288BEGIN
5289SET new.f_int1 = new.f_int1 + @max_row,
5290new.f_int2 = new.f_int2 - @max_row,
5291new.f_charbig = '####updated per update trigger####';
5292END|
5293UPDATE t1
5294SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5295f_charbig = '####updated per update statement itself####';
5296
5297# check trigger-10 success: 	1
5298DROP TRIGGER trg_2;
5299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5300f_int2 = CAST(f_char1 AS SIGNED INT),
5301f_charbig = CONCAT('===',f_char1,'===');
5302CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5303BEGIN
5304SET new.f_int1 = @my_max1 + @counter,
5305new.f_int2 = @my_min2 - @counter,
5306new.f_charbig = '####updated per insert trigger####';
5307SET @counter = @counter + 1;
5308END|
5309SET @counter = 1;
5310SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5311INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5312SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5313CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5314WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5315ORDER BY f_int1;
5316DROP TRIGGER trg_3;
5317
5318# check trigger-11 success: 	1
5319DELETE FROM t1
5320WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5321AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5322AND f_charbig = '####updated per insert trigger####';
5323CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5324BEGIN
5325SET new.f_int1 = @my_max1 + @counter,
5326new.f_int2 = @my_min2 - @counter,
5327new.f_charbig = '####updated per insert trigger####';
5328SET @counter = @counter + 1;
5329END|
5330SET @counter = 1;
5331SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5332INSERT INTO t1 (f_char1, f_char2, f_charbig)
5333SELECT CAST(f_int1 AS CHAR),
5334CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5335WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5336ORDER BY f_int1;
5337DROP TRIGGER trg_3;
5338
5339# check trigger-12 success: 	1
5340DELETE FROM t1
5341WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5342AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5343AND f_charbig = '####updated per insert trigger####';
5344ANALYZE  TABLE t1;
5345Table	Op	Msg_type	Msg_text
5346test.t1	analyze	status	OK
5347CHECK    TABLE t1 EXTENDED;
5348Table	Op	Msg_type	Msg_text
5349test.t1	check	status	OK
5350CHECKSUM TABLE t1 EXTENDED;
5351Table	Checksum
5352test.t1	<some_value>
5353OPTIMIZE TABLE t1;
5354Table	Op	Msg_type	Msg_text
5355test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5356test.t1	optimize	status	OK
5357# check layout success:    1
5358REPAIR   TABLE t1 EXTENDED;
5359Table	Op	Msg_type	Msg_text
5360test.t1	repair	status	OK
5361# check layout success:    1
5362TRUNCATE t1;
5363
5364# check TRUNCATE success: 	1
5365# check layout success:    1
5366# End usability test (inc/partition_check.inc)
5367DROP TABLE t1;
5368CREATE TABLE t1 (
5369f_int1 INTEGER DEFAULT 0,
5370f_int2 INTEGER DEFAULT 0,
5371f_char1 CHAR(20),
5372f_char2 CHAR(20),
5373f_charbig VARCHAR(1000)
5374
5375)
5376PARTITION BY LIST(MOD(f_int1,4))
5377(PARTITION part_3 VALUES IN (-3),
5378PARTITION part_2 VALUES IN (-2),
5379PARTITION part_1 VALUES IN (-1),
5380PARTITION part_N VALUES IN (NULL),
5381PARTITION part0 VALUES IN (0),
5382PARTITION part1 VALUES IN (1),
5383PARTITION part2 VALUES IN (2),
5384PARTITION part3 VALUES IN (3));
5385INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5386SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5387WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5388ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
5389INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5390SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5391WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5392# Start usability test (inc/partition_check.inc)
5393create_command
5394SHOW CREATE TABLE t1;
5395Table	Create Table
5396t1	CREATE TABLE `t1` (
5397  `f_int1` int(11) NOT NULL DEFAULT 0,
5398  `f_int2` int(11) NOT NULL DEFAULT 0,
5399  `f_char1` char(20) DEFAULT NULL,
5400  `f_char2` char(20) DEFAULT NULL,
5401  `f_charbig` varchar(1000) DEFAULT NULL,
5402  PRIMARY KEY (`f_int2`,`f_int1`)
5403) ENGINE=InnoDB DEFAULT CHARSET=latin1
5404 PARTITION BY LIST (`f_int1` MOD 4)
5405(PARTITION `part_3` VALUES IN (-3) ENGINE = InnoDB,
5406 PARTITION `part_2` VALUES IN (-2) ENGINE = InnoDB,
5407 PARTITION `part_1` VALUES IN (-1) ENGINE = InnoDB,
5408 PARTITION `part_N` VALUES IN (NULL) ENGINE = InnoDB,
5409 PARTITION `part0` VALUES IN (0) ENGINE = InnoDB,
5410 PARTITION `part1` VALUES IN (1) ENGINE = InnoDB,
5411 PARTITION `part2` VALUES IN (2) ENGINE = InnoDB,
5412 PARTITION `part3` VALUES IN (3) ENGINE = InnoDB)
5413
5414# check prerequisites-1 success:    1
5415# check COUNT(*) success:    1
5416# check MIN/MAX(f_int1) success:    1
5417# check MIN/MAX(f_int2) success:    1
5418INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5419SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5420CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5421WHERE f_int1 IN (2,3);
5422ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5423# check prerequisites-3 success:    1
5424# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5425INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5426SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5427CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5428WHERE f_int1 IN (2,3);
5429DELETE FROM t1 WHERE f_charbig = 'delete me';
5430INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5431SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5432CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5433WHERE f_int1 IN (2,3);
5434DELETE FROM t1 WHERE f_charbig = 'delete me';
5435# check read via f_int1 success: 1
5436# check read via f_int2 success: 1
5437
5438# check multiple-1 success: 	1
5439DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5440
5441# check multiple-2 success: 	1
5442INSERT INTO t1 SELECT * FROM t0_template
5443WHERE MOD(f_int1,3) = 0;
5444
5445# check multiple-3 success: 	1
5446UPDATE t1 SET f_int1 = f_int1 + @max_row
5447WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5448AND @max_row_div2 + @max_row_div4;
5449
5450# check multiple-4 success: 	1
5451DELETE FROM t1
5452WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5453AND @max_row_div2 + @max_row_div4 + @max_row;
5454
5455# check multiple-5 success: 	1
5456SELECT COUNT(*) INTO @try_count FROM t0_template
5457WHERE MOD(f_int1,3) = 0
5458AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5459SELECT COUNT(*) INTO @clash_count
5460FROM t1 INNER JOIN t0_template USING(f_int1)
5461WHERE MOD(f_int1,3) = 0
5462AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5463SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5464INSERT INTO t1
5465SET f_int1 = @cur_value , f_int2 = @cur_value,
5466f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5467f_charbig = '#SINGLE#';
5468
5469# check single-1 success: 	1
5470SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5471INSERT INTO t1
5472SET f_int1 = @cur_value , f_int2 = @cur_value,
5473f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5474f_charbig = '#SINGLE#';
5475
5476# check single-2 success: 	1
5477SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5478SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5479UPDATE t1 SET f_int1 = @cur_value2
5480WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5481
5482# check single-3 success: 	1
5483SET @cur_value1= -1;
5484SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5485UPDATE t1 SET f_int1 = @cur_value1
5486WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5487
5488# check single-4 success: 	1
5489SELECT MAX(f_int1) INTO @cur_value FROM t1;
5490DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5491
5492# check single-5 success: 	1
5493DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5494
5495# check single-6 success: 	1
5496INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5497
5498# check single-7 success: 	1
5499DELETE FROM t1 WHERE f_charbig = '#2147483647##';
5500DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5501INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5502f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5503f_charbig = '#NULL#';
5504INSERT INTO t1
5505SET f_int1 = NULL , f_int2 = -@max_row,
5506f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5507f_charbig = '#NULL#';
5508ERROR 23000: Column 'f_int1' cannot be null
5509# check null success:    1
5510DELETE FROM t1
5511WHERE f_int1 = 0 AND f_int2 = 0
5512AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5513AND f_charbig = '#NULL#';
5514INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5515SELECT f_int1, f_int1, '', '', 'was inserted'
5516   FROM t0_template source_tab
5517WHERE MOD(f_int1,3) = 0
5518AND f_int1 BETWEEN @max_row_div2 AND @max_row
5519ON DUPLICATE KEY
5520UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5521f_int2 = 2 * @max_row + source_tab.f_int1,
5522f_charbig = 'was updated';
5523
5524# check unique-1-a success: 	1
5525
5526# check unique-1-b success: 	1
5527DELETE FROM t1 WHERE f_charbig = 'was inserted';
5528UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5529f_int2 = CAST(f_char1 AS SIGNED INT),
5530f_charbig = CONCAT('===',f_char1,'===')
5531WHERE f_charbig = 'was updated';
5532REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5533SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5534   FROM t0_template source_tab
5535WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5536
5537# check replace success: 	1
5538DELETE FROM t1
5539WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5540DELETE FROM t1
5541WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5542f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5543UPDATE t1 SET f_int2 = f_int1,
5544f_char1 = CAST(f_int1 AS CHAR),
5545f_char2 = CAST(f_int1 AS CHAR),
5546f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5547WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5548SET AUTOCOMMIT= 0;
5549INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5550SELECT f_int1, f_int1, '', '', 'was inserted'
5551FROM t0_template source_tab
5552WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5553
5554# check transactions-1 success: 	1
5555COMMIT WORK;
5556
5557# check transactions-2 success: 	1
5558ROLLBACK WORK;
5559
5560# check transactions-3 success: 	1
5561DELETE FROM t1 WHERE f_charbig = 'was inserted';
5562COMMIT WORK;
5563ROLLBACK WORK;
5564
5565# check transactions-4 success: 	1
5566INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5567SELECT f_int1, f_int1, '', '', 'was inserted'
5568FROM t0_template source_tab
5569WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5570
5571# check transactions-5 success: 	1
5572ROLLBACK WORK;
5573
5574# check transactions-6 success: 	1
5575# INFO: Storage engine used for t1 seems to be transactional.
5576COMMIT;
5577
5578# check transactions-7 success: 	1
5579DELETE FROM t1 WHERE f_charbig = 'was inserted';
5580COMMIT WORK;
5581SET @@session.sql_mode = 'traditional';
5582SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5583INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5584SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5585'', '', 'was inserted' FROM t0_template
5586WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5587ERROR 22012: Division by 0
5588COMMIT;
5589
5590# check transactions-8 success: 	1
5591# INFO: Storage engine used for t1 seems to be able to revert
5592#       changes made by the failing statement.
5593SET @@session.sql_mode = '';
5594SET AUTOCOMMIT= 1;
5595DELETE FROM t1 WHERE f_charbig = 'was inserted';
5596COMMIT WORK;
5597UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5598
5599# check special-1 success: 	1
5600UPDATE t1 SET f_charbig = '';
5601
5602# check special-2 success: 	1
5603UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5604INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5605SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5606WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5607INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5608SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5609'just inserted' FROM t0_template
5610WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5611CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5612BEGIN
5613UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5614f_charbig = 'updated by trigger'
5615      WHERE f_int1 = new.f_int1;
5616END|
5617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5618SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5619WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5620
5621# check trigger-1 success: 	1
5622DROP TRIGGER trg_1;
5623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5624f_int2 = CAST(f_char1 AS SIGNED INT),
5625f_charbig = 'just inserted'
5626   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5627DELETE FROM t0_aux
5628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5631'just inserted' FROM t0_template
5632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5633CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5634BEGIN
5635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5636f_charbig = 'updated by trigger'
5637      WHERE f_int1 = new.f_int1;
5638END|
5639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5640SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5641WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5642
5643# check trigger-2 success: 	1
5644DROP TRIGGER trg_1;
5645UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5646f_int2 = CAST(f_char1 AS SIGNED INT),
5647f_charbig = 'just inserted'
5648   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5649DELETE FROM t0_aux
5650WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5651INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5652SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5653'just inserted' FROM t0_template
5654WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5655CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5656BEGIN
5657UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5658f_charbig = 'updated by trigger'
5659      WHERE f_int1 = new.f_int1;
5660END|
5661UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5662WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5663
5664# check trigger-3 success: 	1
5665DROP TRIGGER trg_1;
5666UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5667f_int2 = CAST(f_char1 AS SIGNED INT),
5668f_charbig = 'just inserted'
5669   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5670DELETE FROM t0_aux
5671WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5672INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5673SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5674'just inserted' FROM t0_template
5675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5676CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5677BEGIN
5678UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5679f_charbig = 'updated by trigger'
5680      WHERE f_int1 = - old.f_int1;
5681END|
5682UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5683WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5684
5685# check trigger-4 success: 	1
5686DROP TRIGGER trg_1;
5687UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5688f_int2 = CAST(f_char1 AS SIGNED INT),
5689f_charbig = 'just inserted'
5690   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5691DELETE FROM t0_aux
5692WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5693INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5694SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5695'just inserted' FROM t0_template
5696WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5697CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5698BEGIN
5699UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5700f_charbig = 'updated by trigger'
5701      WHERE f_int1 = new.f_int1;
5702END|
5703UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5704WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5705
5706# check trigger-5 success: 	1
5707DROP TRIGGER trg_1;
5708UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5709f_int2 = CAST(f_char1 AS SIGNED INT),
5710f_charbig = 'just inserted'
5711   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5712DELETE FROM t0_aux
5713WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5715SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5716'just inserted' FROM t0_template
5717WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5718CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5719BEGIN
5720UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5721f_charbig = 'updated by trigger'
5722      WHERE f_int1 = - old.f_int1;
5723END|
5724UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5725WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5726
5727# check trigger-6 success: 	1
5728DROP TRIGGER trg_1;
5729UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5730f_int2 = CAST(f_char1 AS SIGNED INT),
5731f_charbig = 'just inserted'
5732   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5733DELETE FROM t0_aux
5734WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5735INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5736SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5737'just inserted' FROM t0_template
5738WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5739CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5740BEGIN
5741UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5742f_charbig = 'updated by trigger'
5743      WHERE f_int1 = - old.f_int1;
5744END|
5745DELETE FROM t0_aux
5746WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5747
5748# check trigger-7 success: 	1
5749DROP TRIGGER trg_1;
5750UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5751f_int2 = CAST(f_char1 AS SIGNED INT),
5752f_charbig = 'just inserted'
5753   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5754DELETE FROM t0_aux
5755WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5756INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5757SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5758'just inserted' FROM t0_template
5759WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5760CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5761BEGIN
5762UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5763f_charbig = 'updated by trigger'
5764      WHERE f_int1 = - old.f_int1;
5765END|
5766DELETE FROM t0_aux
5767WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5768
5769# check trigger-8 success: 	1
5770DROP TRIGGER trg_1;
5771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5772f_int2 = CAST(f_char1 AS SIGNED INT),
5773f_charbig = 'just inserted'
5774   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5775DELETE FROM t0_aux
5776WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5777DELETE FROM t1
5778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5779CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5780BEGIN
5781SET new.f_int1 = old.f_int1 + @max_row,
5782new.f_int2 = old.f_int2 - @max_row,
5783new.f_charbig = '####updated per update trigger####';
5784END|
5785UPDATE t1
5786SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5787f_charbig = '####updated per update statement itself####';
5788
5789# check trigger-9 success: 	1
5790DROP TRIGGER trg_2;
5791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5792f_int2 = CAST(f_char1 AS SIGNED INT),
5793f_charbig = CONCAT('===',f_char1,'===');
5794CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5795BEGIN
5796SET new.f_int1 = new.f_int1 + @max_row,
5797new.f_int2 = new.f_int2 - @max_row,
5798new.f_charbig = '####updated per update trigger####';
5799END|
5800UPDATE t1
5801SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5802f_charbig = '####updated per update statement itself####';
5803
5804# check trigger-10 success: 	1
5805DROP TRIGGER trg_2;
5806UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5807f_int2 = CAST(f_char1 AS SIGNED INT),
5808f_charbig = CONCAT('===',f_char1,'===');
5809CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5810BEGIN
5811SET new.f_int1 = @my_max1 + @counter,
5812new.f_int2 = @my_min2 - @counter,
5813new.f_charbig = '####updated per insert trigger####';
5814SET @counter = @counter + 1;
5815END|
5816SET @counter = 1;
5817SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5818INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5819SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5820CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5821WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5822ORDER BY f_int1;
5823DROP TRIGGER trg_3;
5824
5825# check trigger-11 success: 	1
5826DELETE FROM t1
5827WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5828AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5829AND f_charbig = '####updated per insert trigger####';
5830CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5831BEGIN
5832SET new.f_int1 = @my_max1 + @counter,
5833new.f_int2 = @my_min2 - @counter,
5834new.f_charbig = '####updated per insert trigger####';
5835SET @counter = @counter + 1;
5836END|
5837SET @counter = 1;
5838SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5839INSERT INTO t1 (f_char1, f_char2, f_charbig)
5840SELECT CAST(f_int1 AS CHAR),
5841CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5843ORDER BY f_int1;
5844DROP TRIGGER trg_3;
5845
5846# check trigger-12 success: 	1
5847DELETE FROM t1
5848WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5849AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5850AND f_charbig = '####updated per insert trigger####';
5851ANALYZE  TABLE t1;
5852Table	Op	Msg_type	Msg_text
5853test.t1	analyze	status	OK
5854CHECK    TABLE t1 EXTENDED;
5855Table	Op	Msg_type	Msg_text
5856test.t1	check	status	OK
5857CHECKSUM TABLE t1 EXTENDED;
5858Table	Checksum
5859test.t1	<some_value>
5860OPTIMIZE TABLE t1;
5861Table	Op	Msg_type	Msg_text
5862test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5863test.t1	optimize	status	OK
5864# check layout success:    1
5865REPAIR   TABLE t1 EXTENDED;
5866Table	Op	Msg_type	Msg_text
5867test.t1	repair	status	OK
5868# check layout success:    1
5869TRUNCATE t1;
5870
5871# check TRUNCATE success: 	1
5872# check layout success:    1
5873# End usability test (inc/partition_check.inc)
5874DROP TABLE t1;
5875CREATE TABLE t1 (
5876f_int1 INTEGER DEFAULT 0,
5877f_int2 INTEGER DEFAULT 0,
5878f_char1 CHAR(20),
5879f_char2 CHAR(20),
5880f_charbig VARCHAR(1000)
5881
5882)
5883PARTITION BY RANGE(f_int1)
5884(PARTITION parta VALUES LESS THAN (0),
5885PARTITION partb VALUES LESS THAN (5),
5886PARTITION partc VALUES LESS THAN (10),
5887PARTITION partd VALUES LESS THAN (10 + 5),
5888PARTITION parte VALUES LESS THAN (20),
5889PARTITION partf VALUES LESS THAN (2147483646));
5890INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5891SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5892WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5893ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
5894INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5895SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5896WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5897# Start usability test (inc/partition_check.inc)
5898create_command
5899SHOW CREATE TABLE t1;
5900Table	Create Table
5901t1	CREATE TABLE `t1` (
5902  `f_int1` int(11) NOT NULL DEFAULT 0,
5903  `f_int2` int(11) NOT NULL DEFAULT 0,
5904  `f_char1` char(20) DEFAULT NULL,
5905  `f_char2` char(20) DEFAULT NULL,
5906  `f_charbig` varchar(1000) DEFAULT NULL,
5907  PRIMARY KEY (`f_int2`,`f_int1`)
5908) ENGINE=InnoDB DEFAULT CHARSET=latin1
5909 PARTITION BY RANGE (`f_int1`)
5910(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
5911 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
5912 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
5913 PARTITION `partd` VALUES LESS THAN (15) ENGINE = InnoDB,
5914 PARTITION `parte` VALUES LESS THAN (20) ENGINE = InnoDB,
5915 PARTITION `partf` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
5916
5917# check prerequisites-1 success:    1
5918# check COUNT(*) success:    1
5919# check MIN/MAX(f_int1) success:    1
5920# check MIN/MAX(f_int2) success:    1
5921INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5922SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5923CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5924WHERE f_int1 IN (2,3);
5925ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5926# check prerequisites-3 success:    1
5927# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5928INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5929SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5930CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5931WHERE f_int1 IN (2,3);
5932DELETE FROM t1 WHERE f_charbig = 'delete me';
5933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5934SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5935CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5936WHERE f_int1 IN (2,3);
5937DELETE FROM t1 WHERE f_charbig = 'delete me';
5938# check read via f_int1 success: 1
5939# check read via f_int2 success: 1
5940
5941# check multiple-1 success: 	1
5942DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5943
5944# check multiple-2 success: 	1
5945INSERT INTO t1 SELECT * FROM t0_template
5946WHERE MOD(f_int1,3) = 0;
5947
5948# check multiple-3 success: 	1
5949UPDATE t1 SET f_int1 = f_int1 + @max_row
5950WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5951AND @max_row_div2 + @max_row_div4;
5952
5953# check multiple-4 success: 	1
5954DELETE FROM t1
5955WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5956AND @max_row_div2 + @max_row_div4 + @max_row;
5957
5958# check multiple-5 success: 	1
5959SELECT COUNT(*) INTO @try_count FROM t0_template
5960WHERE MOD(f_int1,3) = 0
5961AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5962SELECT COUNT(*) INTO @clash_count
5963FROM t1 INNER JOIN t0_template USING(f_int1)
5964WHERE MOD(f_int1,3) = 0
5965AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5966SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5967INSERT INTO t1
5968SET f_int1 = @cur_value , f_int2 = @cur_value,
5969f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5970f_charbig = '#SINGLE#';
5971
5972# check single-1 success: 	1
5973SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5974INSERT INTO t1
5975SET f_int1 = @cur_value , f_int2 = @cur_value,
5976f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5977f_charbig = '#SINGLE#';
5978
5979# check single-2 success: 	1
5980SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5981SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5982UPDATE t1 SET f_int1 = @cur_value2
5983WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5984
5985# check single-3 success: 	1
5986SET @cur_value1= -1;
5987SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5988UPDATE t1 SET f_int1 = @cur_value1
5989WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5990
5991# check single-4 success: 	1
5992SELECT MAX(f_int1) INTO @cur_value FROM t1;
5993DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5994
5995# check single-5 success: 	1
5996DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5997
5998# check single-6 success: 	1
5999INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6000ERROR HY000: Table has no partition for value 2147483647
6001DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6002INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6003f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6004f_charbig = '#NULL#';
6005INSERT INTO t1
6006SET f_int1 = NULL , f_int2 = -@max_row,
6007f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6008f_charbig = '#NULL#';
6009ERROR 23000: Column 'f_int1' cannot be null
6010# check null success:    1
6011DELETE FROM t1
6012WHERE f_int1 = 0 AND f_int2 = 0
6013AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6014AND f_charbig = '#NULL#';
6015INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6016SELECT f_int1, f_int1, '', '', 'was inserted'
6017   FROM t0_template source_tab
6018WHERE MOD(f_int1,3) = 0
6019AND f_int1 BETWEEN @max_row_div2 AND @max_row
6020ON DUPLICATE KEY
6021UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6022f_int2 = 2 * @max_row + source_tab.f_int1,
6023f_charbig = 'was updated';
6024
6025# check unique-1-a success: 	1
6026
6027# check unique-1-b success: 	1
6028DELETE FROM t1 WHERE f_charbig = 'was inserted';
6029UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6030f_int2 = CAST(f_char1 AS SIGNED INT),
6031f_charbig = CONCAT('===',f_char1,'===')
6032WHERE f_charbig = 'was updated';
6033REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6034SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6035   FROM t0_template source_tab
6036WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6037
6038# check replace success: 	1
6039DELETE FROM t1
6040WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6041DELETE FROM t1
6042WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6043f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6044UPDATE t1 SET f_int2 = f_int1,
6045f_char1 = CAST(f_int1 AS CHAR),
6046f_char2 = CAST(f_int1 AS CHAR),
6047f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6048WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6049SET AUTOCOMMIT= 0;
6050INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6051SELECT f_int1, f_int1, '', '', 'was inserted'
6052FROM t0_template source_tab
6053WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6054
6055# check transactions-1 success: 	1
6056COMMIT WORK;
6057
6058# check transactions-2 success: 	1
6059ROLLBACK WORK;
6060
6061# check transactions-3 success: 	1
6062DELETE FROM t1 WHERE f_charbig = 'was inserted';
6063COMMIT WORK;
6064ROLLBACK WORK;
6065
6066# check transactions-4 success: 	1
6067INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6068SELECT f_int1, f_int1, '', '', 'was inserted'
6069FROM t0_template source_tab
6070WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6071
6072# check transactions-5 success: 	1
6073ROLLBACK WORK;
6074
6075# check transactions-6 success: 	1
6076# INFO: Storage engine used for t1 seems to be transactional.
6077COMMIT;
6078
6079# check transactions-7 success: 	1
6080DELETE FROM t1 WHERE f_charbig = 'was inserted';
6081COMMIT WORK;
6082SET @@session.sql_mode = 'traditional';
6083SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6084INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6085SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6086'', '', 'was inserted' FROM t0_template
6087WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6088ERROR 22012: Division by 0
6089COMMIT;
6090
6091# check transactions-8 success: 	1
6092# INFO: Storage engine used for t1 seems to be able to revert
6093#       changes made by the failing statement.
6094SET @@session.sql_mode = '';
6095SET AUTOCOMMIT= 1;
6096DELETE FROM t1 WHERE f_charbig = 'was inserted';
6097COMMIT WORK;
6098UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6099
6100# check special-1 success: 	1
6101UPDATE t1 SET f_charbig = '';
6102
6103# check special-2 success: 	1
6104UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6105INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6106SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6107WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6108INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6109SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6110'just inserted' FROM t0_template
6111WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6112CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6113BEGIN
6114UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6115f_charbig = 'updated by trigger'
6116      WHERE f_int1 = new.f_int1;
6117END|
6118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6119SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6120WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6121
6122# check trigger-1 success: 	1
6123DROP TRIGGER trg_1;
6124UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6125f_int2 = CAST(f_char1 AS SIGNED INT),
6126f_charbig = 'just inserted'
6127   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6128DELETE FROM t0_aux
6129WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6130INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6131SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6132'just inserted' FROM t0_template
6133WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6134CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6135BEGIN
6136UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6137f_charbig = 'updated by trigger'
6138      WHERE f_int1 = new.f_int1;
6139END|
6140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6141SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6142WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6143
6144# check trigger-2 success: 	1
6145DROP TRIGGER trg_1;
6146UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6147f_int2 = CAST(f_char1 AS SIGNED INT),
6148f_charbig = 'just inserted'
6149   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6150DELETE FROM t0_aux
6151WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6152INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6153SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6154'just inserted' FROM t0_template
6155WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6156CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6157BEGIN
6158UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6159f_charbig = 'updated by trigger'
6160      WHERE f_int1 = new.f_int1;
6161END|
6162UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6163WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6164
6165# check trigger-3 success: 	1
6166DROP TRIGGER trg_1;
6167UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6168f_int2 = CAST(f_char1 AS SIGNED INT),
6169f_charbig = 'just inserted'
6170   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6171DELETE FROM t0_aux
6172WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6173INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6174SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6175'just inserted' FROM t0_template
6176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6177CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6178BEGIN
6179UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6180f_charbig = 'updated by trigger'
6181      WHERE f_int1 = - old.f_int1;
6182END|
6183UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6184WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6185
6186# check trigger-4 success: 	1
6187DROP TRIGGER trg_1;
6188UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6189f_int2 = CAST(f_char1 AS SIGNED INT),
6190f_charbig = 'just inserted'
6191   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6192DELETE FROM t0_aux
6193WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6194INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6195SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6196'just inserted' FROM t0_template
6197WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6198CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6199BEGIN
6200UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6201f_charbig = 'updated by trigger'
6202      WHERE f_int1 = new.f_int1;
6203END|
6204UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6205WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6206
6207# check trigger-5 success: 	1
6208DROP TRIGGER trg_1;
6209UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6210f_int2 = CAST(f_char1 AS SIGNED INT),
6211f_charbig = 'just inserted'
6212   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6213DELETE FROM t0_aux
6214WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6216SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6217'just inserted' FROM t0_template
6218WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6219CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6220BEGIN
6221UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6222f_charbig = 'updated by trigger'
6223      WHERE f_int1 = - old.f_int1;
6224END|
6225UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6226WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6227
6228# check trigger-6 success: 	1
6229DROP TRIGGER trg_1;
6230UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6231f_int2 = CAST(f_char1 AS SIGNED INT),
6232f_charbig = 'just inserted'
6233   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6234DELETE FROM t0_aux
6235WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6236INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6237SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6238'just inserted' FROM t0_template
6239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6240CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6241BEGIN
6242UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6243f_charbig = 'updated by trigger'
6244      WHERE f_int1 = - old.f_int1;
6245END|
6246DELETE FROM t0_aux
6247WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6248
6249# check trigger-7 success: 	1
6250DROP TRIGGER trg_1;
6251UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6252f_int2 = CAST(f_char1 AS SIGNED INT),
6253f_charbig = 'just inserted'
6254   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6255DELETE FROM t0_aux
6256WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6257INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6258SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6259'just inserted' FROM t0_template
6260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6261CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6262BEGIN
6263UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6264f_charbig = 'updated by trigger'
6265      WHERE f_int1 = - old.f_int1;
6266END|
6267DELETE FROM t0_aux
6268WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6269
6270# check trigger-8 success: 	1
6271DROP TRIGGER trg_1;
6272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6273f_int2 = CAST(f_char1 AS SIGNED INT),
6274f_charbig = 'just inserted'
6275   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6276DELETE FROM t0_aux
6277WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6278DELETE FROM t1
6279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6280CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6281BEGIN
6282SET new.f_int1 = old.f_int1 + @max_row,
6283new.f_int2 = old.f_int2 - @max_row,
6284new.f_charbig = '####updated per update trigger####';
6285END|
6286UPDATE t1
6287SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6288f_charbig = '####updated per update statement itself####';
6289
6290# check trigger-9 success: 	1
6291DROP TRIGGER trg_2;
6292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6293f_int2 = CAST(f_char1 AS SIGNED INT),
6294f_charbig = CONCAT('===',f_char1,'===');
6295CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6296BEGIN
6297SET new.f_int1 = new.f_int1 + @max_row,
6298new.f_int2 = new.f_int2 - @max_row,
6299new.f_charbig = '####updated per update trigger####';
6300END|
6301UPDATE t1
6302SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6303f_charbig = '####updated per update statement itself####';
6304
6305# check trigger-10 success: 	1
6306DROP TRIGGER trg_2;
6307UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6308f_int2 = CAST(f_char1 AS SIGNED INT),
6309f_charbig = CONCAT('===',f_char1,'===');
6310CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6311BEGIN
6312SET new.f_int1 = @my_max1 + @counter,
6313new.f_int2 = @my_min2 - @counter,
6314new.f_charbig = '####updated per insert trigger####';
6315SET @counter = @counter + 1;
6316END|
6317SET @counter = 1;
6318SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6319INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6320SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6321CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6322WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6323ORDER BY f_int1;
6324DROP TRIGGER trg_3;
6325
6326# check trigger-11 success: 	1
6327DELETE FROM t1
6328WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6329AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6330AND f_charbig = '####updated per insert trigger####';
6331CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6332BEGIN
6333SET new.f_int1 = @my_max1 + @counter,
6334new.f_int2 = @my_min2 - @counter,
6335new.f_charbig = '####updated per insert trigger####';
6336SET @counter = @counter + 1;
6337END|
6338SET @counter = 1;
6339SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6340INSERT INTO t1 (f_char1, f_char2, f_charbig)
6341SELECT CAST(f_int1 AS CHAR),
6342CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6343WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6344ORDER BY f_int1;
6345DROP TRIGGER trg_3;
6346
6347# check trigger-12 success: 	1
6348DELETE FROM t1
6349WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6350AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6351AND f_charbig = '####updated per insert trigger####';
6352ANALYZE  TABLE t1;
6353Table	Op	Msg_type	Msg_text
6354test.t1	analyze	status	OK
6355CHECK    TABLE t1 EXTENDED;
6356Table	Op	Msg_type	Msg_text
6357test.t1	check	status	OK
6358CHECKSUM TABLE t1 EXTENDED;
6359Table	Checksum
6360test.t1	<some_value>
6361OPTIMIZE TABLE t1;
6362Table	Op	Msg_type	Msg_text
6363test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6364test.t1	optimize	status	OK
6365# check layout success:    1
6366REPAIR   TABLE t1 EXTENDED;
6367Table	Op	Msg_type	Msg_text
6368test.t1	repair	status	OK
6369# check layout success:    1
6370TRUNCATE t1;
6371
6372# check TRUNCATE success: 	1
6373# check layout success:    1
6374# End usability test (inc/partition_check.inc)
6375DROP TABLE t1;
6376CREATE TABLE t1 (
6377f_int1 INTEGER DEFAULT 0,
6378f_int2 INTEGER DEFAULT 0,
6379f_char1 CHAR(20),
6380f_char2 CHAR(20),
6381f_charbig VARCHAR(1000)
6382
6383)
6384PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
6385(PARTITION parta VALUES LESS THAN (0),
6386PARTITION partb VALUES LESS THAN (5),
6387PARTITION partc VALUES LESS THAN (10),
6388PARTITION partd VALUES LESS THAN (2147483646));
6389INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6390SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6391WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6392ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
6393INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6394SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6395WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6396# Start usability test (inc/partition_check.inc)
6397create_command
6398SHOW CREATE TABLE t1;
6399Table	Create Table
6400t1	CREATE TABLE `t1` (
6401  `f_int1` int(11) NOT NULL DEFAULT 0,
6402  `f_int2` int(11) NOT NULL DEFAULT 0,
6403  `f_char1` char(20) DEFAULT NULL,
6404  `f_char2` char(20) DEFAULT NULL,
6405  `f_charbig` varchar(1000) DEFAULT NULL,
6406  PRIMARY KEY (`f_int2`,`f_int1`)
6407) ENGINE=InnoDB DEFAULT CHARSET=latin1
6408 PARTITION BY RANGE (`f_int1` DIV 2)
6409SUBPARTITION BY HASH (`f_int1`)
6410SUBPARTITIONS 2
6411(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
6412 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
6413 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
6414 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
6415
6416# check prerequisites-1 success:    1
6417# check COUNT(*) success:    1
6418# check MIN/MAX(f_int1) success:    1
6419# check MIN/MAX(f_int2) success:    1
6420INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6421SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6422CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6423WHERE f_int1 IN (2,3);
6424ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6425# check prerequisites-3 success:    1
6426# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6427INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6428SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6429CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6430WHERE f_int1 IN (2,3);
6431DELETE FROM t1 WHERE f_charbig = 'delete me';
6432INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6433SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6434CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6435WHERE f_int1 IN (2,3);
6436DELETE FROM t1 WHERE f_charbig = 'delete me';
6437# check read via f_int1 success: 1
6438# check read via f_int2 success: 1
6439
6440# check multiple-1 success: 	1
6441DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6442
6443# check multiple-2 success: 	1
6444INSERT INTO t1 SELECT * FROM t0_template
6445WHERE MOD(f_int1,3) = 0;
6446
6447# check multiple-3 success: 	1
6448UPDATE t1 SET f_int1 = f_int1 + @max_row
6449WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6450AND @max_row_div2 + @max_row_div4;
6451
6452# check multiple-4 success: 	1
6453DELETE FROM t1
6454WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6455AND @max_row_div2 + @max_row_div4 + @max_row;
6456
6457# check multiple-5 success: 	1
6458SELECT COUNT(*) INTO @try_count FROM t0_template
6459WHERE MOD(f_int1,3) = 0
6460AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6461SELECT COUNT(*) INTO @clash_count
6462FROM t1 INNER JOIN t0_template USING(f_int1)
6463WHERE MOD(f_int1,3) = 0
6464AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6465SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6466INSERT INTO t1
6467SET f_int1 = @cur_value , f_int2 = @cur_value,
6468f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6469f_charbig = '#SINGLE#';
6470
6471# check single-1 success: 	1
6472SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6473INSERT INTO t1
6474SET f_int1 = @cur_value , f_int2 = @cur_value,
6475f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6476f_charbig = '#SINGLE#';
6477
6478# check single-2 success: 	1
6479SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6480SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6481UPDATE t1 SET f_int1 = @cur_value2
6482WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6483
6484# check single-3 success: 	1
6485SET @cur_value1= -1;
6486SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6487UPDATE t1 SET f_int1 = @cur_value1
6488WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6489
6490# check single-4 success: 	1
6491SELECT MAX(f_int1) INTO @cur_value FROM t1;
6492DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6493
6494# check single-5 success: 	1
6495DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6496
6497# check single-6 success: 	1
6498INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6499
6500# check single-7 success: 	1
6501DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6502DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6503INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6504f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6505f_charbig = '#NULL#';
6506INSERT INTO t1
6507SET f_int1 = NULL , f_int2 = -@max_row,
6508f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6509f_charbig = '#NULL#';
6510ERROR 23000: Column 'f_int1' cannot be null
6511# check null success:    1
6512DELETE FROM t1
6513WHERE f_int1 = 0 AND f_int2 = 0
6514AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6515AND f_charbig = '#NULL#';
6516INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6517SELECT f_int1, f_int1, '', '', 'was inserted'
6518   FROM t0_template source_tab
6519WHERE MOD(f_int1,3) = 0
6520AND f_int1 BETWEEN @max_row_div2 AND @max_row
6521ON DUPLICATE KEY
6522UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6523f_int2 = 2 * @max_row + source_tab.f_int1,
6524f_charbig = 'was updated';
6525
6526# check unique-1-a success: 	1
6527
6528# check unique-1-b success: 	1
6529DELETE FROM t1 WHERE f_charbig = 'was inserted';
6530UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6531f_int2 = CAST(f_char1 AS SIGNED INT),
6532f_charbig = CONCAT('===',f_char1,'===')
6533WHERE f_charbig = 'was updated';
6534REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6535SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6536   FROM t0_template source_tab
6537WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6538
6539# check replace success: 	1
6540DELETE FROM t1
6541WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6542DELETE FROM t1
6543WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6544f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6545UPDATE t1 SET f_int2 = f_int1,
6546f_char1 = CAST(f_int1 AS CHAR),
6547f_char2 = CAST(f_int1 AS CHAR),
6548f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6549WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6550SET AUTOCOMMIT= 0;
6551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6552SELECT f_int1, f_int1, '', '', 'was inserted'
6553FROM t0_template source_tab
6554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6555
6556# check transactions-1 success: 	1
6557COMMIT WORK;
6558
6559# check transactions-2 success: 	1
6560ROLLBACK WORK;
6561
6562# check transactions-3 success: 	1
6563DELETE FROM t1 WHERE f_charbig = 'was inserted';
6564COMMIT WORK;
6565ROLLBACK WORK;
6566
6567# check transactions-4 success: 	1
6568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6569SELECT f_int1, f_int1, '', '', 'was inserted'
6570FROM t0_template source_tab
6571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6572
6573# check transactions-5 success: 	1
6574ROLLBACK WORK;
6575
6576# check transactions-6 success: 	1
6577# INFO: Storage engine used for t1 seems to be transactional.
6578COMMIT;
6579
6580# check transactions-7 success: 	1
6581DELETE FROM t1 WHERE f_charbig = 'was inserted';
6582COMMIT WORK;
6583SET @@session.sql_mode = 'traditional';
6584SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6585INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6586SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6587'', '', 'was inserted' FROM t0_template
6588WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6589ERROR 22012: Division by 0
6590COMMIT;
6591
6592# check transactions-8 success: 	1
6593# INFO: Storage engine used for t1 seems to be able to revert
6594#       changes made by the failing statement.
6595SET @@session.sql_mode = '';
6596SET AUTOCOMMIT= 1;
6597DELETE FROM t1 WHERE f_charbig = 'was inserted';
6598COMMIT WORK;
6599UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6600
6601# check special-1 success: 	1
6602UPDATE t1 SET f_charbig = '';
6603
6604# check special-2 success: 	1
6605UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6606INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6607SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6608WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6609INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6610SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6611'just inserted' FROM t0_template
6612WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6613CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6614BEGIN
6615UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6616f_charbig = 'updated by trigger'
6617      WHERE f_int1 = new.f_int1;
6618END|
6619INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6620SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6622
6623# check trigger-1 success: 	1
6624DROP TRIGGER trg_1;
6625UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6626f_int2 = CAST(f_char1 AS SIGNED INT),
6627f_charbig = 'just inserted'
6628   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6629DELETE FROM t0_aux
6630WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6633'just inserted' FROM t0_template
6634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6635CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6636BEGIN
6637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6638f_charbig = 'updated by trigger'
6639      WHERE f_int1 = new.f_int1;
6640END|
6641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6642SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6644
6645# check trigger-2 success: 	1
6646DROP TRIGGER trg_1;
6647UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6648f_int2 = CAST(f_char1 AS SIGNED INT),
6649f_charbig = 'just inserted'
6650   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6651DELETE FROM t0_aux
6652WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6653INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6654SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6655'just inserted' FROM t0_template
6656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6657CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6658BEGIN
6659UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6660f_charbig = 'updated by trigger'
6661      WHERE f_int1 = new.f_int1;
6662END|
6663UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6664WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6665
6666# check trigger-3 success: 	1
6667DROP TRIGGER trg_1;
6668UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6669f_int2 = CAST(f_char1 AS SIGNED INT),
6670f_charbig = 'just inserted'
6671   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6672DELETE FROM t0_aux
6673WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6674INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6675SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6676'just inserted' FROM t0_template
6677WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6678CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6679BEGIN
6680UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6681f_charbig = 'updated by trigger'
6682      WHERE f_int1 = - old.f_int1;
6683END|
6684UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6685WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6686
6687# check trigger-4 success: 	1
6688DROP TRIGGER trg_1;
6689UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6690f_int2 = CAST(f_char1 AS SIGNED INT),
6691f_charbig = 'just inserted'
6692   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6693DELETE FROM t0_aux
6694WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6695INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6696SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6697'just inserted' FROM t0_template
6698WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6699CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6700BEGIN
6701UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6702f_charbig = 'updated by trigger'
6703      WHERE f_int1 = new.f_int1;
6704END|
6705UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6706WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6707
6708# check trigger-5 success: 	1
6709DROP TRIGGER trg_1;
6710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6711f_int2 = CAST(f_char1 AS SIGNED INT),
6712f_charbig = 'just inserted'
6713   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6714DELETE FROM t0_aux
6715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6718'just inserted' FROM t0_template
6719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6720CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6721BEGIN
6722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6723f_charbig = 'updated by trigger'
6724      WHERE f_int1 = - old.f_int1;
6725END|
6726UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6728
6729# check trigger-6 success: 	1
6730DROP TRIGGER trg_1;
6731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6732f_int2 = CAST(f_char1 AS SIGNED INT),
6733f_charbig = 'just inserted'
6734   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6735DELETE FROM t0_aux
6736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6739'just inserted' FROM t0_template
6740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6741CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6742BEGIN
6743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6744f_charbig = 'updated by trigger'
6745      WHERE f_int1 = - old.f_int1;
6746END|
6747DELETE FROM t0_aux
6748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6749
6750# check trigger-7 success: 	1
6751DROP TRIGGER trg_1;
6752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6753f_int2 = CAST(f_char1 AS SIGNED INT),
6754f_charbig = 'just inserted'
6755   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6756DELETE FROM t0_aux
6757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6760'just inserted' FROM t0_template
6761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6762CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6763BEGIN
6764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6765f_charbig = 'updated by trigger'
6766      WHERE f_int1 = - old.f_int1;
6767END|
6768DELETE FROM t0_aux
6769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6770
6771# check trigger-8 success: 	1
6772DROP TRIGGER trg_1;
6773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6774f_int2 = CAST(f_char1 AS SIGNED INT),
6775f_charbig = 'just inserted'
6776   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6777DELETE FROM t0_aux
6778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6779DELETE FROM t1
6780WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6781CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6782BEGIN
6783SET new.f_int1 = old.f_int1 + @max_row,
6784new.f_int2 = old.f_int2 - @max_row,
6785new.f_charbig = '####updated per update trigger####';
6786END|
6787UPDATE t1
6788SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6789f_charbig = '####updated per update statement itself####';
6790
6791# check trigger-9 success: 	1
6792DROP TRIGGER trg_2;
6793UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6794f_int2 = CAST(f_char1 AS SIGNED INT),
6795f_charbig = CONCAT('===',f_char1,'===');
6796CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6797BEGIN
6798SET new.f_int1 = new.f_int1 + @max_row,
6799new.f_int2 = new.f_int2 - @max_row,
6800new.f_charbig = '####updated per update trigger####';
6801END|
6802UPDATE t1
6803SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6804f_charbig = '####updated per update statement itself####';
6805
6806# check trigger-10 success: 	1
6807DROP TRIGGER trg_2;
6808UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6809f_int2 = CAST(f_char1 AS SIGNED INT),
6810f_charbig = CONCAT('===',f_char1,'===');
6811CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6812BEGIN
6813SET new.f_int1 = @my_max1 + @counter,
6814new.f_int2 = @my_min2 - @counter,
6815new.f_charbig = '####updated per insert trigger####';
6816SET @counter = @counter + 1;
6817END|
6818SET @counter = 1;
6819SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6820INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6821SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6822CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6823WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6824ORDER BY f_int1;
6825DROP TRIGGER trg_3;
6826
6827# check trigger-11 success: 	1
6828DELETE FROM t1
6829WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6830AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6831AND f_charbig = '####updated per insert trigger####';
6832CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6833BEGIN
6834SET new.f_int1 = @my_max1 + @counter,
6835new.f_int2 = @my_min2 - @counter,
6836new.f_charbig = '####updated per insert trigger####';
6837SET @counter = @counter + 1;
6838END|
6839SET @counter = 1;
6840SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6841INSERT INTO t1 (f_char1, f_char2, f_charbig)
6842SELECT CAST(f_int1 AS CHAR),
6843CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6844WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6845ORDER BY f_int1;
6846DROP TRIGGER trg_3;
6847
6848# check trigger-12 success: 	1
6849DELETE FROM t1
6850WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6851AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6852AND f_charbig = '####updated per insert trigger####';
6853ANALYZE  TABLE t1;
6854Table	Op	Msg_type	Msg_text
6855test.t1	analyze	status	OK
6856CHECK    TABLE t1 EXTENDED;
6857Table	Op	Msg_type	Msg_text
6858test.t1	check	status	OK
6859CHECKSUM TABLE t1 EXTENDED;
6860Table	Checksum
6861test.t1	<some_value>
6862OPTIMIZE TABLE t1;
6863Table	Op	Msg_type	Msg_text
6864test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6865test.t1	optimize	status	OK
6866# check layout success:    1
6867REPAIR   TABLE t1 EXTENDED;
6868Table	Op	Msg_type	Msg_text
6869test.t1	repair	status	OK
6870# check layout success:    1
6871TRUNCATE t1;
6872
6873# check TRUNCATE success: 	1
6874# check layout success:    1
6875# End usability test (inc/partition_check.inc)
6876DROP TABLE t1;
6877CREATE TABLE t1 (
6878f_int1 INTEGER DEFAULT 0,
6879f_int2 INTEGER DEFAULT 0,
6880f_char1 CHAR(20),
6881f_char2 CHAR(20),
6882f_charbig VARCHAR(1000)
6883
6884)
6885PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
6886(PARTITION part1 VALUES LESS THAN (0)
6887(SUBPARTITION subpart11, SUBPARTITION subpart12),
6888PARTITION part2 VALUES LESS THAN (5)
6889(SUBPARTITION subpart21, SUBPARTITION subpart22),
6890PARTITION part3 VALUES LESS THAN (10)
6891(SUBPARTITION subpart31, SUBPARTITION subpart32),
6892PARTITION part4 VALUES LESS THAN (2147483646)
6893(SUBPARTITION subpart41, SUBPARTITION subpart42));
6894INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6895SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6896WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6897ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
6898INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6899SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6900WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6901# Start usability test (inc/partition_check.inc)
6902create_command
6903SHOW CREATE TABLE t1;
6904Table	Create Table
6905t1	CREATE TABLE `t1` (
6906  `f_int1` int(11) NOT NULL DEFAULT 0,
6907  `f_int2` int(11) NOT NULL DEFAULT 0,
6908  `f_char1` char(20) DEFAULT NULL,
6909  `f_char2` char(20) DEFAULT NULL,
6910  `f_charbig` varchar(1000) DEFAULT NULL,
6911  PRIMARY KEY (`f_int2`,`f_int1`)
6912) ENGINE=InnoDB DEFAULT CHARSET=latin1
6913 PARTITION BY RANGE (`f_int1`)
6914SUBPARTITION BY KEY (`f_int1`)
6915(PARTITION `part1` VALUES LESS THAN (0)
6916 (SUBPARTITION `subpart11` ENGINE = InnoDB,
6917  SUBPARTITION `subpart12` ENGINE = InnoDB),
6918 PARTITION `part2` VALUES LESS THAN (5)
6919 (SUBPARTITION `subpart21` ENGINE = InnoDB,
6920  SUBPARTITION `subpart22` ENGINE = InnoDB),
6921 PARTITION `part3` VALUES LESS THAN (10)
6922 (SUBPARTITION `subpart31` ENGINE = InnoDB,
6923  SUBPARTITION `subpart32` ENGINE = InnoDB),
6924 PARTITION `part4` VALUES LESS THAN (2147483646)
6925 (SUBPARTITION `subpart41` ENGINE = InnoDB,
6926  SUBPARTITION `subpart42` ENGINE = InnoDB))
6927
6928# check prerequisites-1 success:    1
6929# check COUNT(*) success:    1
6930# check MIN/MAX(f_int1) success:    1
6931# check MIN/MAX(f_int2) success:    1
6932INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6933SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6934CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6935WHERE f_int1 IN (2,3);
6936ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6937# check prerequisites-3 success:    1
6938# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6939INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6940SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6941CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6942WHERE f_int1 IN (2,3);
6943DELETE FROM t1 WHERE f_charbig = 'delete me';
6944INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6945SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6946CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6947WHERE f_int1 IN (2,3);
6948DELETE FROM t1 WHERE f_charbig = 'delete me';
6949# check read via f_int1 success: 1
6950# check read via f_int2 success: 1
6951
6952# check multiple-1 success: 	1
6953DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6954
6955# check multiple-2 success: 	1
6956INSERT INTO t1 SELECT * FROM t0_template
6957WHERE MOD(f_int1,3) = 0;
6958
6959# check multiple-3 success: 	1
6960UPDATE t1 SET f_int1 = f_int1 + @max_row
6961WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6962AND @max_row_div2 + @max_row_div4;
6963
6964# check multiple-4 success: 	1
6965DELETE FROM t1
6966WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6967AND @max_row_div2 + @max_row_div4 + @max_row;
6968
6969# check multiple-5 success: 	1
6970SELECT COUNT(*) INTO @try_count FROM t0_template
6971WHERE MOD(f_int1,3) = 0
6972AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6973SELECT COUNT(*) INTO @clash_count
6974FROM t1 INNER JOIN t0_template USING(f_int1)
6975WHERE MOD(f_int1,3) = 0
6976AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6977SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6978INSERT INTO t1
6979SET f_int1 = @cur_value , f_int2 = @cur_value,
6980f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6981f_charbig = '#SINGLE#';
6982
6983# check single-1 success: 	1
6984SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6985INSERT INTO t1
6986SET f_int1 = @cur_value , f_int2 = @cur_value,
6987f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6988f_charbig = '#SINGLE#';
6989
6990# check single-2 success: 	1
6991SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6992SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6993UPDATE t1 SET f_int1 = @cur_value2
6994WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6995
6996# check single-3 success: 	1
6997SET @cur_value1= -1;
6998SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6999UPDATE t1 SET f_int1 = @cur_value1
7000WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7001
7002# check single-4 success: 	1
7003SELECT MAX(f_int1) INTO @cur_value FROM t1;
7004DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7005
7006# check single-5 success: 	1
7007DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7008
7009# check single-6 success: 	1
7010INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7011ERROR HY000: Table has no partition for value 2147483647
7012DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7013INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7014f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7015f_charbig = '#NULL#';
7016INSERT INTO t1
7017SET f_int1 = NULL , f_int2 = -@max_row,
7018f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7019f_charbig = '#NULL#';
7020ERROR 23000: Column 'f_int1' cannot be null
7021# check null success:    1
7022DELETE FROM t1
7023WHERE f_int1 = 0 AND f_int2 = 0
7024AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7025AND f_charbig = '#NULL#';
7026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7027SELECT f_int1, f_int1, '', '', 'was inserted'
7028   FROM t0_template source_tab
7029WHERE MOD(f_int1,3) = 0
7030AND f_int1 BETWEEN @max_row_div2 AND @max_row
7031ON DUPLICATE KEY
7032UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7033f_int2 = 2 * @max_row + source_tab.f_int1,
7034f_charbig = 'was updated';
7035
7036# check unique-1-a success: 	1
7037
7038# check unique-1-b success: 	1
7039DELETE FROM t1 WHERE f_charbig = 'was inserted';
7040UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7041f_int2 = CAST(f_char1 AS SIGNED INT),
7042f_charbig = CONCAT('===',f_char1,'===')
7043WHERE f_charbig = 'was updated';
7044REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7045SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7046   FROM t0_template source_tab
7047WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7048
7049# check replace success: 	1
7050DELETE FROM t1
7051WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7052DELETE FROM t1
7053WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7054f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7055UPDATE t1 SET f_int2 = f_int1,
7056f_char1 = CAST(f_int1 AS CHAR),
7057f_char2 = CAST(f_int1 AS CHAR),
7058f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7059WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7060SET AUTOCOMMIT= 0;
7061INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7062SELECT f_int1, f_int1, '', '', 'was inserted'
7063FROM t0_template source_tab
7064WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7065
7066# check transactions-1 success: 	1
7067COMMIT WORK;
7068
7069# check transactions-2 success: 	1
7070ROLLBACK WORK;
7071
7072# check transactions-3 success: 	1
7073DELETE FROM t1 WHERE f_charbig = 'was inserted';
7074COMMIT WORK;
7075ROLLBACK WORK;
7076
7077# check transactions-4 success: 	1
7078INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7079SELECT f_int1, f_int1, '', '', 'was inserted'
7080FROM t0_template source_tab
7081WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7082
7083# check transactions-5 success: 	1
7084ROLLBACK WORK;
7085
7086# check transactions-6 success: 	1
7087# INFO: Storage engine used for t1 seems to be transactional.
7088COMMIT;
7089
7090# check transactions-7 success: 	1
7091DELETE FROM t1 WHERE f_charbig = 'was inserted';
7092COMMIT WORK;
7093SET @@session.sql_mode = 'traditional';
7094SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7096SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7097'', '', 'was inserted' FROM t0_template
7098WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7099ERROR 22012: Division by 0
7100COMMIT;
7101
7102# check transactions-8 success: 	1
7103# INFO: Storage engine used for t1 seems to be able to revert
7104#       changes made by the failing statement.
7105SET @@session.sql_mode = '';
7106SET AUTOCOMMIT= 1;
7107DELETE FROM t1 WHERE f_charbig = 'was inserted';
7108COMMIT WORK;
7109UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7110
7111# check special-1 success: 	1
7112UPDATE t1 SET f_charbig = '';
7113
7114# check special-2 success: 	1
7115UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7116INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7117SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7119INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7120SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7121'just inserted' FROM t0_template
7122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7123CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7124BEGIN
7125UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7126f_charbig = 'updated by trigger'
7127      WHERE f_int1 = new.f_int1;
7128END|
7129INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7130SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7132
7133# check trigger-1 success: 	1
7134DROP TRIGGER trg_1;
7135UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7136f_int2 = CAST(f_char1 AS SIGNED INT),
7137f_charbig = 'just inserted'
7138   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7139DELETE FROM t0_aux
7140WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7141INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7142SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7143'just inserted' FROM t0_template
7144WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7145CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7146BEGIN
7147UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7148f_charbig = 'updated by trigger'
7149      WHERE f_int1 = new.f_int1;
7150END|
7151INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7152SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7153WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7154
7155# check trigger-2 success: 	1
7156DROP TRIGGER trg_1;
7157UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7158f_int2 = CAST(f_char1 AS SIGNED INT),
7159f_charbig = 'just inserted'
7160   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7161DELETE FROM t0_aux
7162WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7164SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7165'just inserted' FROM t0_template
7166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7167CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7168BEGIN
7169UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7170f_charbig = 'updated by trigger'
7171      WHERE f_int1 = new.f_int1;
7172END|
7173UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7174WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7175
7176# check trigger-3 success: 	1
7177DROP TRIGGER trg_1;
7178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7179f_int2 = CAST(f_char1 AS SIGNED INT),
7180f_charbig = 'just inserted'
7181   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7182DELETE FROM t0_aux
7183WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7184INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7185SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7186'just inserted' FROM t0_template
7187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7188CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7189BEGIN
7190UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7191f_charbig = 'updated by trigger'
7192      WHERE f_int1 = - old.f_int1;
7193END|
7194UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7195WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7196
7197# check trigger-4 success: 	1
7198DROP TRIGGER trg_1;
7199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7200f_int2 = CAST(f_char1 AS SIGNED INT),
7201f_charbig = 'just inserted'
7202   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7203DELETE FROM t0_aux
7204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7207'just inserted' FROM t0_template
7208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7209CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7210BEGIN
7211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7212f_charbig = 'updated by trigger'
7213      WHERE f_int1 = new.f_int1;
7214END|
7215UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7216WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7217
7218# check trigger-5 success: 	1
7219DROP TRIGGER trg_1;
7220UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7221f_int2 = CAST(f_char1 AS SIGNED INT),
7222f_charbig = 'just inserted'
7223   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7224DELETE FROM t0_aux
7225WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7226INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7227SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7228'just inserted' FROM t0_template
7229WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7230CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7231BEGIN
7232UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7233f_charbig = 'updated by trigger'
7234      WHERE f_int1 = - old.f_int1;
7235END|
7236UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7237WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7238
7239# check trigger-6 success: 	1
7240DROP TRIGGER trg_1;
7241UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7242f_int2 = CAST(f_char1 AS SIGNED INT),
7243f_charbig = 'just inserted'
7244   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7245DELETE FROM t0_aux
7246WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7247INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7248SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7249'just inserted' FROM t0_template
7250WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7251CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7252BEGIN
7253UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7254f_charbig = 'updated by trigger'
7255      WHERE f_int1 = - old.f_int1;
7256END|
7257DELETE FROM t0_aux
7258WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7259
7260# check trigger-7 success: 	1
7261DROP TRIGGER trg_1;
7262UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7263f_int2 = CAST(f_char1 AS SIGNED INT),
7264f_charbig = 'just inserted'
7265   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7266DELETE FROM t0_aux
7267WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7268INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7269SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7270'just inserted' FROM t0_template
7271WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7272CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7273BEGIN
7274UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7275f_charbig = 'updated by trigger'
7276      WHERE f_int1 = - old.f_int1;
7277END|
7278DELETE FROM t0_aux
7279WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7280
7281# check trigger-8 success: 	1
7282DROP TRIGGER trg_1;
7283UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7284f_int2 = CAST(f_char1 AS SIGNED INT),
7285f_charbig = 'just inserted'
7286   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7287DELETE FROM t0_aux
7288WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7289DELETE FROM t1
7290WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7291CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7292BEGIN
7293SET new.f_int1 = old.f_int1 + @max_row,
7294new.f_int2 = old.f_int2 - @max_row,
7295new.f_charbig = '####updated per update trigger####';
7296END|
7297UPDATE t1
7298SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7299f_charbig = '####updated per update statement itself####';
7300
7301# check trigger-9 success: 	1
7302DROP TRIGGER trg_2;
7303UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7304f_int2 = CAST(f_char1 AS SIGNED INT),
7305f_charbig = CONCAT('===',f_char1,'===');
7306CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7307BEGIN
7308SET new.f_int1 = new.f_int1 + @max_row,
7309new.f_int2 = new.f_int2 - @max_row,
7310new.f_charbig = '####updated per update trigger####';
7311END|
7312UPDATE t1
7313SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7314f_charbig = '####updated per update statement itself####';
7315
7316# check trigger-10 success: 	1
7317DROP TRIGGER trg_2;
7318UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7319f_int2 = CAST(f_char1 AS SIGNED INT),
7320f_charbig = CONCAT('===',f_char1,'===');
7321CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7322BEGIN
7323SET new.f_int1 = @my_max1 + @counter,
7324new.f_int2 = @my_min2 - @counter,
7325new.f_charbig = '####updated per insert trigger####';
7326SET @counter = @counter + 1;
7327END|
7328SET @counter = 1;
7329SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7330INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7331SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7332CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7334ORDER BY f_int1;
7335DROP TRIGGER trg_3;
7336
7337# check trigger-11 success: 	1
7338DELETE FROM t1
7339WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7340AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7341AND f_charbig = '####updated per insert trigger####';
7342CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7343BEGIN
7344SET new.f_int1 = @my_max1 + @counter,
7345new.f_int2 = @my_min2 - @counter,
7346new.f_charbig = '####updated per insert trigger####';
7347SET @counter = @counter + 1;
7348END|
7349SET @counter = 1;
7350SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7351INSERT INTO t1 (f_char1, f_char2, f_charbig)
7352SELECT CAST(f_int1 AS CHAR),
7353CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7355ORDER BY f_int1;
7356DROP TRIGGER trg_3;
7357
7358# check trigger-12 success: 	1
7359DELETE FROM t1
7360WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7361AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7362AND f_charbig = '####updated per insert trigger####';
7363ANALYZE  TABLE t1;
7364Table	Op	Msg_type	Msg_text
7365test.t1	analyze	status	OK
7366CHECK    TABLE t1 EXTENDED;
7367Table	Op	Msg_type	Msg_text
7368test.t1	check	status	OK
7369CHECKSUM TABLE t1 EXTENDED;
7370Table	Checksum
7371test.t1	<some_value>
7372OPTIMIZE TABLE t1;
7373Table	Op	Msg_type	Msg_text
7374test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7375test.t1	optimize	status	OK
7376# check layout success:    1
7377REPAIR   TABLE t1 EXTENDED;
7378Table	Op	Msg_type	Msg_text
7379test.t1	repair	status	OK
7380# check layout success:    1
7381TRUNCATE t1;
7382
7383# check TRUNCATE success: 	1
7384# check layout success:    1
7385# End usability test (inc/partition_check.inc)
7386DROP TABLE t1;
7387CREATE TABLE t1 (
7388f_int1 INTEGER DEFAULT 0,
7389f_int2 INTEGER DEFAULT 0,
7390f_char1 CHAR(20),
7391f_char2 CHAR(20),
7392f_charbig VARCHAR(1000)
7393
7394)
7395PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
7396(PARTITION part1 VALUES IN (0)
7397(SUBPARTITION sp11, SUBPARTITION sp12),
7398PARTITION part2 VALUES IN (1)
7399(SUBPARTITION sp21, SUBPARTITION sp22),
7400PARTITION part3 VALUES IN (2)
7401(SUBPARTITION sp31, SUBPARTITION sp32),
7402PARTITION part4 VALUES IN (NULL)
7403(SUBPARTITION sp41, SUBPARTITION sp42));
7404INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7405SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7406WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7407ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
7408INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7409SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7410WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7411# Start usability test (inc/partition_check.inc)
7412create_command
7413SHOW CREATE TABLE t1;
7414Table	Create Table
7415t1	CREATE TABLE `t1` (
7416  `f_int1` int(11) NOT NULL DEFAULT 0,
7417  `f_int2` int(11) NOT NULL DEFAULT 0,
7418  `f_char1` char(20) DEFAULT NULL,
7419  `f_char2` char(20) DEFAULT NULL,
7420  `f_charbig` varchar(1000) DEFAULT NULL,
7421  PRIMARY KEY (`f_int2`,`f_int1`)
7422) ENGINE=InnoDB DEFAULT CHARSET=latin1
7423 PARTITION BY LIST (abs(`f_int1` MOD 3))
7424SUBPARTITION BY HASH (`f_int1` + 1)
7425(PARTITION `part1` VALUES IN (0)
7426 (SUBPARTITION `sp11` ENGINE = InnoDB,
7427  SUBPARTITION `sp12` ENGINE = InnoDB),
7428 PARTITION `part2` VALUES IN (1)
7429 (SUBPARTITION `sp21` ENGINE = InnoDB,
7430  SUBPARTITION `sp22` ENGINE = InnoDB),
7431 PARTITION `part3` VALUES IN (2)
7432 (SUBPARTITION `sp31` ENGINE = InnoDB,
7433  SUBPARTITION `sp32` ENGINE = InnoDB),
7434 PARTITION `part4` VALUES IN (NULL)
7435 (SUBPARTITION `sp41` ENGINE = InnoDB,
7436  SUBPARTITION `sp42` ENGINE = InnoDB))
7437
7438# check prerequisites-1 success:    1
7439# check COUNT(*) success:    1
7440# check MIN/MAX(f_int1) success:    1
7441# check MIN/MAX(f_int2) success:    1
7442INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7443SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7444CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7445WHERE f_int1 IN (2,3);
7446ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7447# check prerequisites-3 success:    1
7448# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7449INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7450SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7451CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7452WHERE f_int1 IN (2,3);
7453DELETE FROM t1 WHERE f_charbig = 'delete me';
7454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7455SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7456CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7457WHERE f_int1 IN (2,3);
7458DELETE FROM t1 WHERE f_charbig = 'delete me';
7459# check read via f_int1 success: 1
7460# check read via f_int2 success: 1
7461
7462# check multiple-1 success: 	1
7463DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7464
7465# check multiple-2 success: 	1
7466INSERT INTO t1 SELECT * FROM t0_template
7467WHERE MOD(f_int1,3) = 0;
7468
7469# check multiple-3 success: 	1
7470UPDATE t1 SET f_int1 = f_int1 + @max_row
7471WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7472AND @max_row_div2 + @max_row_div4;
7473
7474# check multiple-4 success: 	1
7475DELETE FROM t1
7476WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7477AND @max_row_div2 + @max_row_div4 + @max_row;
7478
7479# check multiple-5 success: 	1
7480SELECT COUNT(*) INTO @try_count FROM t0_template
7481WHERE MOD(f_int1,3) = 0
7482AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7483SELECT COUNT(*) INTO @clash_count
7484FROM t1 INNER JOIN t0_template USING(f_int1)
7485WHERE MOD(f_int1,3) = 0
7486AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7487SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7488INSERT INTO t1
7489SET f_int1 = @cur_value , f_int2 = @cur_value,
7490f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7491f_charbig = '#SINGLE#';
7492
7493# check single-1 success: 	1
7494SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7495INSERT INTO t1
7496SET f_int1 = @cur_value , f_int2 = @cur_value,
7497f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7498f_charbig = '#SINGLE#';
7499
7500# check single-2 success: 	1
7501SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7502SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7503UPDATE t1 SET f_int1 = @cur_value2
7504WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7505
7506# check single-3 success: 	1
7507SET @cur_value1= -1;
7508SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7509UPDATE t1 SET f_int1 = @cur_value1
7510WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7511
7512# check single-4 success: 	1
7513SELECT MAX(f_int1) INTO @cur_value FROM t1;
7514DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7515
7516# check single-5 success: 	1
7517DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7518
7519# check single-6 success: 	1
7520INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7521
7522# check single-7 success: 	1
7523DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7524DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7525INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7526f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7527f_charbig = '#NULL#';
7528INSERT INTO t1
7529SET f_int1 = NULL , f_int2 = -@max_row,
7530f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7531f_charbig = '#NULL#';
7532ERROR 23000: Column 'f_int1' cannot be null
7533# check null success:    1
7534DELETE FROM t1
7535WHERE f_int1 = 0 AND f_int2 = 0
7536AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7537AND f_charbig = '#NULL#';
7538INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7539SELECT f_int1, f_int1, '', '', 'was inserted'
7540   FROM t0_template source_tab
7541WHERE MOD(f_int1,3) = 0
7542AND f_int1 BETWEEN @max_row_div2 AND @max_row
7543ON DUPLICATE KEY
7544UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7545f_int2 = 2 * @max_row + source_tab.f_int1,
7546f_charbig = 'was updated';
7547
7548# check unique-1-a success: 	1
7549
7550# check unique-1-b success: 	1
7551DELETE FROM t1 WHERE f_charbig = 'was inserted';
7552UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7553f_int2 = CAST(f_char1 AS SIGNED INT),
7554f_charbig = CONCAT('===',f_char1,'===')
7555WHERE f_charbig = 'was updated';
7556REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7557SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7558   FROM t0_template source_tab
7559WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7560
7561# check replace success: 	1
7562DELETE FROM t1
7563WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7564DELETE FROM t1
7565WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7566f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7567UPDATE t1 SET f_int2 = f_int1,
7568f_char1 = CAST(f_int1 AS CHAR),
7569f_char2 = CAST(f_int1 AS CHAR),
7570f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7571WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7572SET AUTOCOMMIT= 0;
7573INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7574SELECT f_int1, f_int1, '', '', 'was inserted'
7575FROM t0_template source_tab
7576WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7577
7578# check transactions-1 success: 	1
7579COMMIT WORK;
7580
7581# check transactions-2 success: 	1
7582ROLLBACK WORK;
7583
7584# check transactions-3 success: 	1
7585DELETE FROM t1 WHERE f_charbig = 'was inserted';
7586COMMIT WORK;
7587ROLLBACK WORK;
7588
7589# check transactions-4 success: 	1
7590INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7591SELECT f_int1, f_int1, '', '', 'was inserted'
7592FROM t0_template source_tab
7593WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7594
7595# check transactions-5 success: 	1
7596ROLLBACK WORK;
7597
7598# check transactions-6 success: 	1
7599# INFO: Storage engine used for t1 seems to be transactional.
7600COMMIT;
7601
7602# check transactions-7 success: 	1
7603DELETE FROM t1 WHERE f_charbig = 'was inserted';
7604COMMIT WORK;
7605SET @@session.sql_mode = 'traditional';
7606SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7607INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7608SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7609'', '', 'was inserted' FROM t0_template
7610WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7611ERROR 22012: Division by 0
7612COMMIT;
7613
7614# check transactions-8 success: 	1
7615# INFO: Storage engine used for t1 seems to be able to revert
7616#       changes made by the failing statement.
7617SET @@session.sql_mode = '';
7618SET AUTOCOMMIT= 1;
7619DELETE FROM t1 WHERE f_charbig = 'was inserted';
7620COMMIT WORK;
7621UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7622
7623# check special-1 success: 	1
7624UPDATE t1 SET f_charbig = '';
7625
7626# check special-2 success: 	1
7627UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7628INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7629SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7630WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7633'just inserted' FROM t0_template
7634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7635CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7636BEGIN
7637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7638f_charbig = 'updated by trigger'
7639      WHERE f_int1 = new.f_int1;
7640END|
7641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7642SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7644
7645# check trigger-1 success: 	1
7646DROP TRIGGER trg_1;
7647UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7648f_int2 = CAST(f_char1 AS SIGNED INT),
7649f_charbig = 'just inserted'
7650   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7651DELETE FROM t0_aux
7652WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7653INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7654SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7655'just inserted' FROM t0_template
7656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7657CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7658BEGIN
7659UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7660f_charbig = 'updated by trigger'
7661      WHERE f_int1 = new.f_int1;
7662END|
7663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7664SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7665WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7666
7667# check trigger-2 success: 	1
7668DROP TRIGGER trg_1;
7669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7670f_int2 = CAST(f_char1 AS SIGNED INT),
7671f_charbig = 'just inserted'
7672   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7673DELETE FROM t0_aux
7674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7677'just inserted' FROM t0_template
7678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7679CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7680BEGIN
7681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7682f_charbig = 'updated by trigger'
7683      WHERE f_int1 = new.f_int1;
7684END|
7685UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7687
7688# check trigger-3 success: 	1
7689DROP TRIGGER trg_1;
7690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7691f_int2 = CAST(f_char1 AS SIGNED INT),
7692f_charbig = 'just inserted'
7693   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7694DELETE FROM t0_aux
7695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7698'just inserted' FROM t0_template
7699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7700CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7701BEGIN
7702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7703f_charbig = 'updated by trigger'
7704      WHERE f_int1 = - old.f_int1;
7705END|
7706UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7708
7709# check trigger-4 success: 	1
7710DROP TRIGGER trg_1;
7711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7712f_int2 = CAST(f_char1 AS SIGNED INT),
7713f_charbig = 'just inserted'
7714   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7715DELETE FROM t0_aux
7716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7719'just inserted' FROM t0_template
7720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7721CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7722BEGIN
7723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7724f_charbig = 'updated by trigger'
7725      WHERE f_int1 = new.f_int1;
7726END|
7727UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7729
7730# check trigger-5 success: 	1
7731DROP TRIGGER trg_1;
7732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7733f_int2 = CAST(f_char1 AS SIGNED INT),
7734f_charbig = 'just inserted'
7735   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7736DELETE FROM t0_aux
7737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7740'just inserted' FROM t0_template
7741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7742CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7743BEGIN
7744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7745f_charbig = 'updated by trigger'
7746      WHERE f_int1 = - old.f_int1;
7747END|
7748UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7750
7751# check trigger-6 success: 	1
7752DROP TRIGGER trg_1;
7753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7754f_int2 = CAST(f_char1 AS SIGNED INT),
7755f_charbig = 'just inserted'
7756   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7757DELETE FROM t0_aux
7758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7759INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7760SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7761'just inserted' FROM t0_template
7762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7763CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7764BEGIN
7765UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7766f_charbig = 'updated by trigger'
7767      WHERE f_int1 = - old.f_int1;
7768END|
7769DELETE FROM t0_aux
7770WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7771
7772# check trigger-7 success: 	1
7773DROP TRIGGER trg_1;
7774UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7775f_int2 = CAST(f_char1 AS SIGNED INT),
7776f_charbig = 'just inserted'
7777   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7778DELETE FROM t0_aux
7779WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7780INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7781SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7782'just inserted' FROM t0_template
7783WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7784CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7785BEGIN
7786UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7787f_charbig = 'updated by trigger'
7788      WHERE f_int1 = - old.f_int1;
7789END|
7790DELETE FROM t0_aux
7791WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7792
7793# check trigger-8 success: 	1
7794DROP TRIGGER trg_1;
7795UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7796f_int2 = CAST(f_char1 AS SIGNED INT),
7797f_charbig = 'just inserted'
7798   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7799DELETE FROM t0_aux
7800WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7801DELETE FROM t1
7802WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7803CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7804BEGIN
7805SET new.f_int1 = old.f_int1 + @max_row,
7806new.f_int2 = old.f_int2 - @max_row,
7807new.f_charbig = '####updated per update trigger####';
7808END|
7809UPDATE t1
7810SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7811f_charbig = '####updated per update statement itself####';
7812
7813# check trigger-9 success: 	1
7814DROP TRIGGER trg_2;
7815UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7816f_int2 = CAST(f_char1 AS SIGNED INT),
7817f_charbig = CONCAT('===',f_char1,'===');
7818CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7819BEGIN
7820SET new.f_int1 = new.f_int1 + @max_row,
7821new.f_int2 = new.f_int2 - @max_row,
7822new.f_charbig = '####updated per update trigger####';
7823END|
7824UPDATE t1
7825SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7826f_charbig = '####updated per update statement itself####';
7827
7828# check trigger-10 success: 	1
7829DROP TRIGGER trg_2;
7830UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7831f_int2 = CAST(f_char1 AS SIGNED INT),
7832f_charbig = CONCAT('===',f_char1,'===');
7833CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7834BEGIN
7835SET new.f_int1 = @my_max1 + @counter,
7836new.f_int2 = @my_min2 - @counter,
7837new.f_charbig = '####updated per insert trigger####';
7838SET @counter = @counter + 1;
7839END|
7840SET @counter = 1;
7841SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7842INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7843SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7844CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7846ORDER BY f_int1;
7847DROP TRIGGER trg_3;
7848
7849# check trigger-11 success: 	1
7850DELETE FROM t1
7851WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7852AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7853AND f_charbig = '####updated per insert trigger####';
7854CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7855BEGIN
7856SET new.f_int1 = @my_max1 + @counter,
7857new.f_int2 = @my_min2 - @counter,
7858new.f_charbig = '####updated per insert trigger####';
7859SET @counter = @counter + 1;
7860END|
7861SET @counter = 1;
7862SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7863INSERT INTO t1 (f_char1, f_char2, f_charbig)
7864SELECT CAST(f_int1 AS CHAR),
7865CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7866WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7867ORDER BY f_int1;
7868DROP TRIGGER trg_3;
7869
7870# check trigger-12 success: 	1
7871DELETE FROM t1
7872WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7873AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7874AND f_charbig = '####updated per insert trigger####';
7875ANALYZE  TABLE t1;
7876Table	Op	Msg_type	Msg_text
7877test.t1	analyze	status	OK
7878CHECK    TABLE t1 EXTENDED;
7879Table	Op	Msg_type	Msg_text
7880test.t1	check	status	OK
7881CHECKSUM TABLE t1 EXTENDED;
7882Table	Checksum
7883test.t1	<some_value>
7884OPTIMIZE TABLE t1;
7885Table	Op	Msg_type	Msg_text
7886test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7887test.t1	optimize	status	OK
7888# check layout success:    1
7889REPAIR   TABLE t1 EXTENDED;
7890Table	Op	Msg_type	Msg_text
7891test.t1	repair	status	OK
7892# check layout success:    1
7893TRUNCATE t1;
7894
7895# check TRUNCATE success: 	1
7896# check layout success:    1
7897# End usability test (inc/partition_check.inc)
7898DROP TABLE t1;
7899CREATE TABLE t1 (
7900f_int1 INTEGER DEFAULT 0,
7901f_int2 INTEGER DEFAULT 0,
7902f_char1 CHAR(20),
7903f_char2 CHAR(20),
7904f_charbig VARCHAR(1000)
7905
7906)
7907PARTITION BY LIST(ABS(MOD(f_int1,2)))
7908SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
7909(PARTITION part1 VALUES IN (0),
7910PARTITION part2 VALUES IN (1),
7911PARTITION part3 VALUES IN (NULL));
7912INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7913SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7914WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7915ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
7916INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7917SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7918WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7919# Start usability test (inc/partition_check.inc)
7920create_command
7921SHOW CREATE TABLE t1;
7922Table	Create Table
7923t1	CREATE TABLE `t1` (
7924  `f_int1` int(11) NOT NULL DEFAULT 0,
7925  `f_int2` int(11) NOT NULL DEFAULT 0,
7926  `f_char1` char(20) DEFAULT NULL,
7927  `f_char2` char(20) DEFAULT NULL,
7928  `f_charbig` varchar(1000) DEFAULT NULL,
7929  PRIMARY KEY (`f_int2`,`f_int1`)
7930) ENGINE=InnoDB DEFAULT CHARSET=latin1
7931 PARTITION BY LIST (abs(`f_int1` MOD 2))
7932SUBPARTITION BY KEY (`f_int1`)
7933SUBPARTITIONS 3
7934(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB,
7935 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB,
7936 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB)
7937
7938# check prerequisites-1 success:    1
7939# check COUNT(*) success:    1
7940# check MIN/MAX(f_int1) success:    1
7941# check MIN/MAX(f_int2) success:    1
7942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7943SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7944CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7945WHERE f_int1 IN (2,3);
7946ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7947# check prerequisites-3 success:    1
7948# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7949INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7950SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7951CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7952WHERE f_int1 IN (2,3);
7953DELETE FROM t1 WHERE f_charbig = 'delete me';
7954INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7955SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7956CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7957WHERE f_int1 IN (2,3);
7958DELETE FROM t1 WHERE f_charbig = 'delete me';
7959# check read via f_int1 success: 1
7960# check read via f_int2 success: 1
7961
7962# check multiple-1 success: 	1
7963DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7964
7965# check multiple-2 success: 	1
7966INSERT INTO t1 SELECT * FROM t0_template
7967WHERE MOD(f_int1,3) = 0;
7968
7969# check multiple-3 success: 	1
7970UPDATE t1 SET f_int1 = f_int1 + @max_row
7971WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7972AND @max_row_div2 + @max_row_div4;
7973
7974# check multiple-4 success: 	1
7975DELETE FROM t1
7976WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7977AND @max_row_div2 + @max_row_div4 + @max_row;
7978
7979# check multiple-5 success: 	1
7980SELECT COUNT(*) INTO @try_count FROM t0_template
7981WHERE MOD(f_int1,3) = 0
7982AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7983SELECT COUNT(*) INTO @clash_count
7984FROM t1 INNER JOIN t0_template USING(f_int1)
7985WHERE MOD(f_int1,3) = 0
7986AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7987SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7988INSERT INTO t1
7989SET f_int1 = @cur_value , f_int2 = @cur_value,
7990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7991f_charbig = '#SINGLE#';
7992
7993# check single-1 success: 	1
7994SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7995INSERT INTO t1
7996SET f_int1 = @cur_value , f_int2 = @cur_value,
7997f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7998f_charbig = '#SINGLE#';
7999
8000# check single-2 success: 	1
8001SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8002SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8003UPDATE t1 SET f_int1 = @cur_value2
8004WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8005
8006# check single-3 success: 	1
8007SET @cur_value1= -1;
8008SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8009UPDATE t1 SET f_int1 = @cur_value1
8010WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8011
8012# check single-4 success: 	1
8013SELECT MAX(f_int1) INTO @cur_value FROM t1;
8014DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8015
8016# check single-5 success: 	1
8017DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8018
8019# check single-6 success: 	1
8020INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8021
8022# check single-7 success: 	1
8023DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8024DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8025INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8026f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8027f_charbig = '#NULL#';
8028INSERT INTO t1
8029SET f_int1 = NULL , f_int2 = -@max_row,
8030f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8031f_charbig = '#NULL#';
8032ERROR 23000: Column 'f_int1' cannot be null
8033# check null success:    1
8034DELETE FROM t1
8035WHERE f_int1 = 0 AND f_int2 = 0
8036AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8037AND f_charbig = '#NULL#';
8038INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8039SELECT f_int1, f_int1, '', '', 'was inserted'
8040   FROM t0_template source_tab
8041WHERE MOD(f_int1,3) = 0
8042AND f_int1 BETWEEN @max_row_div2 AND @max_row
8043ON DUPLICATE KEY
8044UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8045f_int2 = 2 * @max_row + source_tab.f_int1,
8046f_charbig = 'was updated';
8047
8048# check unique-1-a success: 	1
8049
8050# check unique-1-b success: 	1
8051DELETE FROM t1 WHERE f_charbig = 'was inserted';
8052UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8053f_int2 = CAST(f_char1 AS SIGNED INT),
8054f_charbig = CONCAT('===',f_char1,'===')
8055WHERE f_charbig = 'was updated';
8056REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8057SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8058   FROM t0_template source_tab
8059WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8060
8061# check replace success: 	1
8062DELETE FROM t1
8063WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8064DELETE FROM t1
8065WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8066f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8067UPDATE t1 SET f_int2 = f_int1,
8068f_char1 = CAST(f_int1 AS CHAR),
8069f_char2 = CAST(f_int1 AS CHAR),
8070f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8071WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8072SET AUTOCOMMIT= 0;
8073INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8074SELECT f_int1, f_int1, '', '', 'was inserted'
8075FROM t0_template source_tab
8076WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8077
8078# check transactions-1 success: 	1
8079COMMIT WORK;
8080
8081# check transactions-2 success: 	1
8082ROLLBACK WORK;
8083
8084# check transactions-3 success: 	1
8085DELETE FROM t1 WHERE f_charbig = 'was inserted';
8086COMMIT WORK;
8087ROLLBACK WORK;
8088
8089# check transactions-4 success: 	1
8090INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8091SELECT f_int1, f_int1, '', '', 'was inserted'
8092FROM t0_template source_tab
8093WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8094
8095# check transactions-5 success: 	1
8096ROLLBACK WORK;
8097
8098# check transactions-6 success: 	1
8099# INFO: Storage engine used for t1 seems to be transactional.
8100COMMIT;
8101
8102# check transactions-7 success: 	1
8103DELETE FROM t1 WHERE f_charbig = 'was inserted';
8104COMMIT WORK;
8105SET @@session.sql_mode = 'traditional';
8106SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8107INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8108SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8109'', '', 'was inserted' FROM t0_template
8110WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8111ERROR 22012: Division by 0
8112COMMIT;
8113
8114# check transactions-8 success: 	1
8115# INFO: Storage engine used for t1 seems to be able to revert
8116#       changes made by the failing statement.
8117SET @@session.sql_mode = '';
8118SET AUTOCOMMIT= 1;
8119DELETE FROM t1 WHERE f_charbig = 'was inserted';
8120COMMIT WORK;
8121UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8122
8123# check special-1 success: 	1
8124UPDATE t1 SET f_charbig = '';
8125
8126# check special-2 success: 	1
8127UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8128INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8129SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8131INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8132SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8133'just inserted' FROM t0_template
8134WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8135CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8136BEGIN
8137UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8138f_charbig = 'updated by trigger'
8139      WHERE f_int1 = new.f_int1;
8140END|
8141INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8142SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8144
8145# check trigger-1 success: 	1
8146DROP TRIGGER trg_1;
8147UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8148f_int2 = CAST(f_char1 AS SIGNED INT),
8149f_charbig = 'just inserted'
8150   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8151DELETE FROM t0_aux
8152WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8153INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8154SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8155'just inserted' FROM t0_template
8156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8157CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8158BEGIN
8159UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8160f_charbig = 'updated by trigger'
8161      WHERE f_int1 = new.f_int1;
8162END|
8163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8164SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8165WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8166
8167# check trigger-2 success: 	1
8168DROP TRIGGER trg_1;
8169UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8170f_int2 = CAST(f_char1 AS SIGNED INT),
8171f_charbig = 'just inserted'
8172   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8173DELETE FROM t0_aux
8174WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8175INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8176SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8177'just inserted' FROM t0_template
8178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8179CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8180BEGIN
8181UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8182f_charbig = 'updated by trigger'
8183      WHERE f_int1 = new.f_int1;
8184END|
8185UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8186WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8187
8188# check trigger-3 success: 	1
8189DROP TRIGGER trg_1;
8190UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8191f_int2 = CAST(f_char1 AS SIGNED INT),
8192f_charbig = 'just inserted'
8193   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8194DELETE FROM t0_aux
8195WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8196INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8197SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8198'just inserted' FROM t0_template
8199WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8200CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8201BEGIN
8202UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8203f_charbig = 'updated by trigger'
8204      WHERE f_int1 = - old.f_int1;
8205END|
8206UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8207WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8208
8209# check trigger-4 success: 	1
8210DROP TRIGGER trg_1;
8211UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8212f_int2 = CAST(f_char1 AS SIGNED INT),
8213f_charbig = 'just inserted'
8214   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8215DELETE FROM t0_aux
8216WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8217INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8218SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8219'just inserted' FROM t0_template
8220WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8221CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8222BEGIN
8223UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8224f_charbig = 'updated by trigger'
8225      WHERE f_int1 = new.f_int1;
8226END|
8227UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8228WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8229
8230# check trigger-5 success: 	1
8231DROP TRIGGER trg_1;
8232UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8233f_int2 = CAST(f_char1 AS SIGNED INT),
8234f_charbig = 'just inserted'
8235   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8236DELETE FROM t0_aux
8237WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8238INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8239SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8240'just inserted' FROM t0_template
8241WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8242CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8243BEGIN
8244UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8245f_charbig = 'updated by trigger'
8246      WHERE f_int1 = - old.f_int1;
8247END|
8248UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8249WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8250
8251# check trigger-6 success: 	1
8252DROP TRIGGER trg_1;
8253UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8254f_int2 = CAST(f_char1 AS SIGNED INT),
8255f_charbig = 'just inserted'
8256   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8257DELETE FROM t0_aux
8258WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8259INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8260SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8261'just inserted' FROM t0_template
8262WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8263CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8264BEGIN
8265UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8266f_charbig = 'updated by trigger'
8267      WHERE f_int1 = - old.f_int1;
8268END|
8269DELETE FROM t0_aux
8270WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8271
8272# check trigger-7 success: 	1
8273DROP TRIGGER trg_1;
8274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8275f_int2 = CAST(f_char1 AS SIGNED INT),
8276f_charbig = 'just inserted'
8277   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8278DELETE FROM t0_aux
8279WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8280INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8281SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8282'just inserted' FROM t0_template
8283WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8284CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8285BEGIN
8286UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8287f_charbig = 'updated by trigger'
8288      WHERE f_int1 = - old.f_int1;
8289END|
8290DELETE FROM t0_aux
8291WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8292
8293# check trigger-8 success: 	1
8294DROP TRIGGER trg_1;
8295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8296f_int2 = CAST(f_char1 AS SIGNED INT),
8297f_charbig = 'just inserted'
8298   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8299DELETE FROM t0_aux
8300WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8301DELETE FROM t1
8302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8303CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8304BEGIN
8305SET new.f_int1 = old.f_int1 + @max_row,
8306new.f_int2 = old.f_int2 - @max_row,
8307new.f_charbig = '####updated per update trigger####';
8308END|
8309UPDATE t1
8310SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8311f_charbig = '####updated per update statement itself####';
8312
8313# check trigger-9 success: 	1
8314DROP TRIGGER trg_2;
8315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8316f_int2 = CAST(f_char1 AS SIGNED INT),
8317f_charbig = CONCAT('===',f_char1,'===');
8318CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8319BEGIN
8320SET new.f_int1 = new.f_int1 + @max_row,
8321new.f_int2 = new.f_int2 - @max_row,
8322new.f_charbig = '####updated per update trigger####';
8323END|
8324UPDATE t1
8325SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8326f_charbig = '####updated per update statement itself####';
8327
8328# check trigger-10 success: 	1
8329DROP TRIGGER trg_2;
8330UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8331f_int2 = CAST(f_char1 AS SIGNED INT),
8332f_charbig = CONCAT('===',f_char1,'===');
8333CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8334BEGIN
8335SET new.f_int1 = @my_max1 + @counter,
8336new.f_int2 = @my_min2 - @counter,
8337new.f_charbig = '####updated per insert trigger####';
8338SET @counter = @counter + 1;
8339END|
8340SET @counter = 1;
8341SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8342INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8343SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8344CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8346ORDER BY f_int1;
8347DROP TRIGGER trg_3;
8348
8349# check trigger-11 success: 	1
8350DELETE FROM t1
8351WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8352AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8353AND f_charbig = '####updated per insert trigger####';
8354CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8355BEGIN
8356SET new.f_int1 = @my_max1 + @counter,
8357new.f_int2 = @my_min2 - @counter,
8358new.f_charbig = '####updated per insert trigger####';
8359SET @counter = @counter + 1;
8360END|
8361SET @counter = 1;
8362SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8363INSERT INTO t1 (f_char1, f_char2, f_charbig)
8364SELECT CAST(f_int1 AS CHAR),
8365CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8366WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8367ORDER BY f_int1;
8368DROP TRIGGER trg_3;
8369
8370# check trigger-12 success: 	1
8371DELETE FROM t1
8372WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8373AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8374AND f_charbig = '####updated per insert trigger####';
8375ANALYZE  TABLE t1;
8376Table	Op	Msg_type	Msg_text
8377test.t1	analyze	status	OK
8378CHECK    TABLE t1 EXTENDED;
8379Table	Op	Msg_type	Msg_text
8380test.t1	check	status	OK
8381CHECKSUM TABLE t1 EXTENDED;
8382Table	Checksum
8383test.t1	<some_value>
8384OPTIMIZE TABLE t1;
8385Table	Op	Msg_type	Msg_text
8386test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8387test.t1	optimize	status	OK
8388# check layout success:    1
8389REPAIR   TABLE t1 EXTENDED;
8390Table	Op	Msg_type	Msg_text
8391test.t1	repair	status	OK
8392# check layout success:    1
8393TRUNCATE t1;
8394
8395# check TRUNCATE success: 	1
8396# check layout success:    1
8397# End usability test (inc/partition_check.inc)
8398DROP TABLE t1;
8399#  1.1.4 UNIQUE INDEX consisting of two columns
8400DROP TABLE IF EXISTS t1;
8401CREATE TABLE t1 (
8402f_int1 INTEGER DEFAULT 0,
8403f_int2 INTEGER DEFAULT 0,
8404f_char1 CHAR(20),
8405f_char2 CHAR(20),
8406f_charbig VARCHAR(1000)
8407
8408)
8409PARTITION BY HASH(f_int1) PARTITIONS 2;
8410INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8411SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8412WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8413ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
8414INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8415SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8416WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8417# Start usability test (inc/partition_check.inc)
8418create_command
8419SHOW CREATE TABLE t1;
8420Table	Create Table
8421t1	CREATE TABLE `t1` (
8422  `f_int1` int(11) DEFAULT 0,
8423  `f_int2` int(11) DEFAULT 0,
8424  `f_char1` char(20) DEFAULT NULL,
8425  `f_char2` char(20) DEFAULT NULL,
8426  `f_charbig` varchar(1000) DEFAULT NULL,
8427  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8428) ENGINE=InnoDB DEFAULT CHARSET=latin1
8429 PARTITION BY HASH (`f_int1`)
8430PARTITIONS 2
8431
8432# check prerequisites-1 success:    1
8433# check COUNT(*) success:    1
8434# check MIN/MAX(f_int1) success:    1
8435# check MIN/MAX(f_int2) success:    1
8436INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8437SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8438CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8439WHERE f_int1 IN (2,3);
8440ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
8441# check prerequisites-3 success:    1
8442# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8443INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8444SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8445CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8446WHERE f_int1 IN (2,3);
8447DELETE FROM t1 WHERE f_charbig = 'delete me';
8448INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8449SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8450CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8451WHERE f_int1 IN (2,3);
8452DELETE FROM t1 WHERE f_charbig = 'delete me';
8453# check read via f_int1 success: 1
8454# check read via f_int2 success: 1
8455
8456# check multiple-1 success: 	1
8457DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8458
8459# check multiple-2 success: 	1
8460INSERT INTO t1 SELECT * FROM t0_template
8461WHERE MOD(f_int1,3) = 0;
8462
8463# check multiple-3 success: 	1
8464UPDATE t1 SET f_int1 = f_int1 + @max_row
8465WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8466AND @max_row_div2 + @max_row_div4;
8467
8468# check multiple-4 success: 	1
8469DELETE FROM t1
8470WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8471AND @max_row_div2 + @max_row_div4 + @max_row;
8472
8473# check multiple-5 success: 	1
8474SELECT COUNT(*) INTO @try_count FROM t0_template
8475WHERE MOD(f_int1,3) = 0
8476AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8477SELECT COUNT(*) INTO @clash_count
8478FROM t1 INNER JOIN t0_template USING(f_int1)
8479WHERE MOD(f_int1,3) = 0
8480AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8481SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8482INSERT INTO t1
8483SET f_int1 = @cur_value , f_int2 = @cur_value,
8484f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8485f_charbig = '#SINGLE#';
8486
8487# check single-1 success: 	1
8488SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8489INSERT INTO t1
8490SET f_int1 = @cur_value , f_int2 = @cur_value,
8491f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8492f_charbig = '#SINGLE#';
8493
8494# check single-2 success: 	1
8495SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8496SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8497UPDATE t1 SET f_int1 = @cur_value2
8498WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8499
8500# check single-3 success: 	1
8501SET @cur_value1= -1;
8502SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8503UPDATE t1 SET f_int1 = @cur_value1
8504WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8505
8506# check single-4 success: 	1
8507SELECT MAX(f_int1) INTO @cur_value FROM t1;
8508DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8509
8510# check single-5 success: 	1
8511DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8512
8513# check single-6 success: 	1
8514INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8515
8516# check single-7 success: 	1
8517DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8518DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8519INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8520f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8521f_charbig = '#NULL#';
8522INSERT INTO t1
8523SET f_int1 = NULL , f_int2 = -@max_row,
8524f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8525f_charbig = '#NULL#';
8526# check null success:    1
8527
8528# check null-1 success: 	1
8529UPDATE t1 SET f_int1 = -@max_row
8530WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8531AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8532
8533# check null-2 success: 	1
8534UPDATE t1 SET f_int1 = NULL
8535WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8536AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8537
8538# check null-3 success: 	1
8539DELETE FROM t1
8540WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
8541AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
8542
8543# check null-4 success: 	1
8544DELETE FROM t1
8545WHERE f_int1 = 0 AND f_int2 = 0
8546AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8547AND f_charbig = '#NULL#';
8548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8549SELECT f_int1, f_int1, '', '', 'was inserted'
8550   FROM t0_template source_tab
8551WHERE MOD(f_int1,3) = 0
8552AND f_int1 BETWEEN @max_row_div2 AND @max_row
8553ON DUPLICATE KEY
8554UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8555f_int2 = 2 * @max_row + source_tab.f_int1,
8556f_charbig = 'was updated';
8557
8558# check unique-1-a success: 	1
8559
8560# check unique-1-b success: 	1
8561DELETE FROM t1 WHERE f_charbig = 'was inserted';
8562UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8563f_int2 = CAST(f_char1 AS SIGNED INT),
8564f_charbig = CONCAT('===',f_char1,'===')
8565WHERE f_charbig = 'was updated';
8566REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8567SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8568   FROM t0_template source_tab
8569WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8570
8571# check replace success: 	1
8572DELETE FROM t1
8573WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8574DELETE FROM t1
8575WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8576f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8577UPDATE t1 SET f_int2 = f_int1,
8578f_char1 = CAST(f_int1 AS CHAR),
8579f_char2 = CAST(f_int1 AS CHAR),
8580f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8581WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8582SET AUTOCOMMIT= 0;
8583INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8584SELECT f_int1, f_int1, '', '', 'was inserted'
8585FROM t0_template source_tab
8586WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8587
8588# check transactions-1 success: 	1
8589COMMIT WORK;
8590
8591# check transactions-2 success: 	1
8592ROLLBACK WORK;
8593
8594# check transactions-3 success: 	1
8595DELETE FROM t1 WHERE f_charbig = 'was inserted';
8596COMMIT WORK;
8597ROLLBACK WORK;
8598
8599# check transactions-4 success: 	1
8600INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8601SELECT f_int1, f_int1, '', '', 'was inserted'
8602FROM t0_template source_tab
8603WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8604
8605# check transactions-5 success: 	1
8606ROLLBACK WORK;
8607
8608# check transactions-6 success: 	1
8609# INFO: Storage engine used for t1 seems to be transactional.
8610COMMIT;
8611
8612# check transactions-7 success: 	1
8613DELETE FROM t1 WHERE f_charbig = 'was inserted';
8614COMMIT WORK;
8615SET @@session.sql_mode = 'traditional';
8616SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8617INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8618SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8619'', '', 'was inserted' FROM t0_template
8620WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8621ERROR 22012: Division by 0
8622COMMIT;
8623
8624# check transactions-8 success: 	1
8625# INFO: Storage engine used for t1 seems to be able to revert
8626#       changes made by the failing statement.
8627SET @@session.sql_mode = '';
8628SET AUTOCOMMIT= 1;
8629DELETE FROM t1 WHERE f_charbig = 'was inserted';
8630COMMIT WORK;
8631UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8632
8633# check special-1 success: 	1
8634UPDATE t1 SET f_charbig = '';
8635
8636# check special-2 success: 	1
8637UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8638INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8639SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8641INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8642SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8643'just inserted' FROM t0_template
8644WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8645CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8646BEGIN
8647UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8648f_charbig = 'updated by trigger'
8649      WHERE f_int1 = new.f_int1;
8650END|
8651INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8652SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8654
8655# check trigger-1 success: 	1
8656DROP TRIGGER trg_1;
8657UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8658f_int2 = CAST(f_char1 AS SIGNED INT),
8659f_charbig = 'just inserted'
8660   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8661DELETE FROM t0_aux
8662WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8664SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8665'just inserted' FROM t0_template
8666WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8667CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8668BEGIN
8669UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8670f_charbig = 'updated by trigger'
8671      WHERE f_int1 = new.f_int1;
8672END|
8673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8674SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8676
8677# check trigger-2 success: 	1
8678DROP TRIGGER trg_1;
8679UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8680f_int2 = CAST(f_char1 AS SIGNED INT),
8681f_charbig = 'just inserted'
8682   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8683DELETE FROM t0_aux
8684WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8685INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8686SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8687'just inserted' FROM t0_template
8688WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8689CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8690BEGIN
8691UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8692f_charbig = 'updated by trigger'
8693      WHERE f_int1 = new.f_int1;
8694END|
8695UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8696WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8697
8698# check trigger-3 success: 	1
8699DROP TRIGGER trg_1;
8700UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8701f_int2 = CAST(f_char1 AS SIGNED INT),
8702f_charbig = 'just inserted'
8703   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8704DELETE FROM t0_aux
8705WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8706INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8707SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8708'just inserted' FROM t0_template
8709WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8710CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8711BEGIN
8712UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8713f_charbig = 'updated by trigger'
8714      WHERE f_int1 = - old.f_int1;
8715END|
8716UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8717WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8718
8719# check trigger-4 success: 	1
8720DROP TRIGGER trg_1;
8721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8722f_int2 = CAST(f_char1 AS SIGNED INT),
8723f_charbig = 'just inserted'
8724   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8725DELETE FROM t0_aux
8726WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8727INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8728SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8729'just inserted' FROM t0_template
8730WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8731CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8732BEGIN
8733UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8734f_charbig = 'updated by trigger'
8735      WHERE f_int1 = new.f_int1;
8736END|
8737UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8738WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8739
8740# check trigger-5 success: 	1
8741DROP TRIGGER trg_1;
8742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8743f_int2 = CAST(f_char1 AS SIGNED INT),
8744f_charbig = 'just inserted'
8745   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8746DELETE FROM t0_aux
8747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8750'just inserted' FROM t0_template
8751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8752CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8753BEGIN
8754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8755f_charbig = 'updated by trigger'
8756      WHERE f_int1 = - old.f_int1;
8757END|
8758UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8760
8761# check trigger-6 success: 	1
8762DROP TRIGGER trg_1;
8763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8764f_int2 = CAST(f_char1 AS SIGNED INT),
8765f_charbig = 'just inserted'
8766   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8767DELETE FROM t0_aux
8768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8771'just inserted' FROM t0_template
8772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8773CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8774BEGIN
8775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8776f_charbig = 'updated by trigger'
8777      WHERE f_int1 = - old.f_int1;
8778END|
8779DELETE FROM t0_aux
8780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8781
8782# check trigger-7 success: 	1
8783DROP TRIGGER trg_1;
8784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8785f_int2 = CAST(f_char1 AS SIGNED INT),
8786f_charbig = 'just inserted'
8787   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8788DELETE FROM t0_aux
8789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8790INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8791SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8792'just inserted' FROM t0_template
8793WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8794CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8795BEGIN
8796UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8797f_charbig = 'updated by trigger'
8798      WHERE f_int1 = - old.f_int1;
8799END|
8800DELETE FROM t0_aux
8801WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8802
8803# check trigger-8 success: 	1
8804DROP TRIGGER trg_1;
8805UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8806f_int2 = CAST(f_char1 AS SIGNED INT),
8807f_charbig = 'just inserted'
8808   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8809DELETE FROM t0_aux
8810WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8811DELETE FROM t1
8812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8813CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8814BEGIN
8815SET new.f_int1 = old.f_int1 + @max_row,
8816new.f_int2 = old.f_int2 - @max_row,
8817new.f_charbig = '####updated per update trigger####';
8818END|
8819UPDATE t1
8820SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8821f_charbig = '####updated per update statement itself####';
8822
8823# check trigger-9 success: 	1
8824DROP TRIGGER trg_2;
8825UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8826f_int2 = CAST(f_char1 AS SIGNED INT),
8827f_charbig = CONCAT('===',f_char1,'===');
8828CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8829BEGIN
8830SET new.f_int1 = new.f_int1 + @max_row,
8831new.f_int2 = new.f_int2 - @max_row,
8832new.f_charbig = '####updated per update trigger####';
8833END|
8834UPDATE t1
8835SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8836f_charbig = '####updated per update statement itself####';
8837
8838# check trigger-10 success: 	1
8839DROP TRIGGER trg_2;
8840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8841f_int2 = CAST(f_char1 AS SIGNED INT),
8842f_charbig = CONCAT('===',f_char1,'===');
8843CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8844BEGIN
8845SET new.f_int1 = @my_max1 + @counter,
8846new.f_int2 = @my_min2 - @counter,
8847new.f_charbig = '####updated per insert trigger####';
8848SET @counter = @counter + 1;
8849END|
8850SET @counter = 1;
8851SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8852INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8853SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8854CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8855WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8856ORDER BY f_int1;
8857DROP TRIGGER trg_3;
8858
8859# check trigger-11 success: 	1
8860DELETE FROM t1
8861WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8862AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8863AND f_charbig = '####updated per insert trigger####';
8864CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8865BEGIN
8866SET new.f_int1 = @my_max1 + @counter,
8867new.f_int2 = @my_min2 - @counter,
8868new.f_charbig = '####updated per insert trigger####';
8869SET @counter = @counter + 1;
8870END|
8871SET @counter = 1;
8872SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8873INSERT INTO t1 (f_char1, f_char2, f_charbig)
8874SELECT CAST(f_int1 AS CHAR),
8875CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8876WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8877ORDER BY f_int1;
8878DROP TRIGGER trg_3;
8879
8880# check trigger-12 success: 	1
8881DELETE FROM t1
8882WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8883AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8884AND f_charbig = '####updated per insert trigger####';
8885ANALYZE  TABLE t1;
8886Table	Op	Msg_type	Msg_text
8887test.t1	analyze	status	OK
8888CHECK    TABLE t1 EXTENDED;
8889Table	Op	Msg_type	Msg_text
8890test.t1	check	status	OK
8891CHECKSUM TABLE t1 EXTENDED;
8892Table	Checksum
8893test.t1	<some_value>
8894OPTIMIZE TABLE t1;
8895Table	Op	Msg_type	Msg_text
8896test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8897test.t1	optimize	status	OK
8898# check layout success:    1
8899REPAIR   TABLE t1 EXTENDED;
8900Table	Op	Msg_type	Msg_text
8901test.t1	repair	status	OK
8902# check layout success:    1
8903TRUNCATE t1;
8904
8905# check TRUNCATE success: 	1
8906# check layout success:    1
8907# End usability test (inc/partition_check.inc)
8908DROP TABLE t1;
8909CREATE TABLE t1 (
8910f_int1 INTEGER DEFAULT 0,
8911f_int2 INTEGER DEFAULT 0,
8912f_char1 CHAR(20),
8913f_char2 CHAR(20),
8914f_charbig VARCHAR(1000)
8915
8916)
8917PARTITION BY KEY(f_int1) PARTITIONS 5;
8918INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8919SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8920WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8921ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
8922INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8923SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8924WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8925# Start usability test (inc/partition_check.inc)
8926create_command
8927SHOW CREATE TABLE t1;
8928Table	Create Table
8929t1	CREATE TABLE `t1` (
8930  `f_int1` int(11) DEFAULT 0,
8931  `f_int2` int(11) DEFAULT 0,
8932  `f_char1` char(20) DEFAULT NULL,
8933  `f_char2` char(20) DEFAULT NULL,
8934  `f_charbig` varchar(1000) DEFAULT NULL,
8935  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8936) ENGINE=InnoDB DEFAULT CHARSET=latin1
8937 PARTITION BY KEY (`f_int1`)
8938PARTITIONS 5
8939
8940# check prerequisites-1 success:    1
8941# check COUNT(*) success:    1
8942# check MIN/MAX(f_int1) success:    1
8943# check MIN/MAX(f_int2) success:    1
8944INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8945SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8946CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8947WHERE f_int1 IN (2,3);
8948ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
8949# check prerequisites-3 success:    1
8950# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8951INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8952SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8953CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8954WHERE f_int1 IN (2,3);
8955DELETE FROM t1 WHERE f_charbig = 'delete me';
8956INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8957SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8958CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8959WHERE f_int1 IN (2,3);
8960DELETE FROM t1 WHERE f_charbig = 'delete me';
8961# check read via f_int1 success: 1
8962# check read via f_int2 success: 1
8963
8964# check multiple-1 success: 	1
8965DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8966
8967# check multiple-2 success: 	1
8968INSERT INTO t1 SELECT * FROM t0_template
8969WHERE MOD(f_int1,3) = 0;
8970
8971# check multiple-3 success: 	1
8972UPDATE t1 SET f_int1 = f_int1 + @max_row
8973WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8974AND @max_row_div2 + @max_row_div4;
8975
8976# check multiple-4 success: 	1
8977DELETE FROM t1
8978WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8979AND @max_row_div2 + @max_row_div4 + @max_row;
8980
8981# check multiple-5 success: 	1
8982SELECT COUNT(*) INTO @try_count FROM t0_template
8983WHERE MOD(f_int1,3) = 0
8984AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8985SELECT COUNT(*) INTO @clash_count
8986FROM t1 INNER JOIN t0_template USING(f_int1)
8987WHERE MOD(f_int1,3) = 0
8988AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8989SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8990INSERT INTO t1
8991SET f_int1 = @cur_value , f_int2 = @cur_value,
8992f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8993f_charbig = '#SINGLE#';
8994
8995# check single-1 success: 	1
8996SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8997INSERT INTO t1
8998SET f_int1 = @cur_value , f_int2 = @cur_value,
8999f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9000f_charbig = '#SINGLE#';
9001
9002# check single-2 success: 	1
9003SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9004SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9005UPDATE t1 SET f_int1 = @cur_value2
9006WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9007
9008# check single-3 success: 	1
9009SET @cur_value1= -1;
9010SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9011UPDATE t1 SET f_int1 = @cur_value1
9012WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9013
9014# check single-4 success: 	1
9015SELECT MAX(f_int1) INTO @cur_value FROM t1;
9016DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9017
9018# check single-5 success: 	1
9019DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9020
9021# check single-6 success: 	1
9022INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9023
9024# check single-7 success: 	1
9025DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9026DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9027INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9028f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9029f_charbig = '#NULL#';
9030INSERT INTO t1
9031SET f_int1 = NULL , f_int2 = -@max_row,
9032f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9033f_charbig = '#NULL#';
9034# check null success:    1
9035
9036# check null-1 success: 	1
9037UPDATE t1 SET f_int1 = -@max_row
9038WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9039AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9040
9041# check null-2 success: 	1
9042UPDATE t1 SET f_int1 = NULL
9043WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9044AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9045
9046# check null-3 success: 	1
9047DELETE FROM t1
9048WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9049AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9050
9051# check null-4 success: 	1
9052DELETE FROM t1
9053WHERE f_int1 = 0 AND f_int2 = 0
9054AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9055AND f_charbig = '#NULL#';
9056INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9057SELECT f_int1, f_int1, '', '', 'was inserted'
9058   FROM t0_template source_tab
9059WHERE MOD(f_int1,3) = 0
9060AND f_int1 BETWEEN @max_row_div2 AND @max_row
9061ON DUPLICATE KEY
9062UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9063f_int2 = 2 * @max_row + source_tab.f_int1,
9064f_charbig = 'was updated';
9065
9066# check unique-1-a success: 	1
9067
9068# check unique-1-b success: 	1
9069DELETE FROM t1 WHERE f_charbig = 'was inserted';
9070UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9071f_int2 = CAST(f_char1 AS SIGNED INT),
9072f_charbig = CONCAT('===',f_char1,'===')
9073WHERE f_charbig = 'was updated';
9074REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9075SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9076   FROM t0_template source_tab
9077WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9078
9079# check replace success: 	1
9080DELETE FROM t1
9081WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9082DELETE FROM t1
9083WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9084f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9085UPDATE t1 SET f_int2 = f_int1,
9086f_char1 = CAST(f_int1 AS CHAR),
9087f_char2 = CAST(f_int1 AS CHAR),
9088f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9089WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9090SET AUTOCOMMIT= 0;
9091INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9092SELECT f_int1, f_int1, '', '', 'was inserted'
9093FROM t0_template source_tab
9094WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9095
9096# check transactions-1 success: 	1
9097COMMIT WORK;
9098
9099# check transactions-2 success: 	1
9100ROLLBACK WORK;
9101
9102# check transactions-3 success: 	1
9103DELETE FROM t1 WHERE f_charbig = 'was inserted';
9104COMMIT WORK;
9105ROLLBACK WORK;
9106
9107# check transactions-4 success: 	1
9108INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9109SELECT f_int1, f_int1, '', '', 'was inserted'
9110FROM t0_template source_tab
9111WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9112
9113# check transactions-5 success: 	1
9114ROLLBACK WORK;
9115
9116# check transactions-6 success: 	1
9117# INFO: Storage engine used for t1 seems to be transactional.
9118COMMIT;
9119
9120# check transactions-7 success: 	1
9121DELETE FROM t1 WHERE f_charbig = 'was inserted';
9122COMMIT WORK;
9123SET @@session.sql_mode = 'traditional';
9124SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9125INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9126SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9127'', '', 'was inserted' FROM t0_template
9128WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9129ERROR 22012: Division by 0
9130COMMIT;
9131
9132# check transactions-8 success: 	1
9133# INFO: Storage engine used for t1 seems to be able to revert
9134#       changes made by the failing statement.
9135SET @@session.sql_mode = '';
9136SET AUTOCOMMIT= 1;
9137DELETE FROM t1 WHERE f_charbig = 'was inserted';
9138COMMIT WORK;
9139UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9140
9141# check special-1 success: 	1
9142UPDATE t1 SET f_charbig = '';
9143
9144# check special-2 success: 	1
9145UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9146INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9147SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9151'just inserted' FROM t0_template
9152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9153CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9154BEGIN
9155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9156f_charbig = 'updated by trigger'
9157      WHERE f_int1 = new.f_int1;
9158END|
9159INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9160SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9161WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9162
9163# check trigger-1 success: 	1
9164DROP TRIGGER trg_1;
9165UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9166f_int2 = CAST(f_char1 AS SIGNED INT),
9167f_charbig = 'just inserted'
9168   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9169DELETE FROM t0_aux
9170WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9171INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9172SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9173'just inserted' FROM t0_template
9174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9175CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9176BEGIN
9177UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9178f_charbig = 'updated by trigger'
9179      WHERE f_int1 = new.f_int1;
9180END|
9181INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9182SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9183WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9184
9185# check trigger-2 success: 	1
9186DROP TRIGGER trg_1;
9187UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9188f_int2 = CAST(f_char1 AS SIGNED INT),
9189f_charbig = 'just inserted'
9190   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9191DELETE FROM t0_aux
9192WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9193INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9194SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9195'just inserted' FROM t0_template
9196WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9197CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9198BEGIN
9199UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9200f_charbig = 'updated by trigger'
9201      WHERE f_int1 = new.f_int1;
9202END|
9203UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9204WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9205
9206# check trigger-3 success: 	1
9207DROP TRIGGER trg_1;
9208UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9209f_int2 = CAST(f_char1 AS SIGNED INT),
9210f_charbig = 'just inserted'
9211   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9212DELETE FROM t0_aux
9213WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9214INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9215SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9216'just inserted' FROM t0_template
9217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9218CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9219BEGIN
9220UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9221f_charbig = 'updated by trigger'
9222      WHERE f_int1 = - old.f_int1;
9223END|
9224UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9225WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9226
9227# check trigger-4 success: 	1
9228DROP TRIGGER trg_1;
9229UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9230f_int2 = CAST(f_char1 AS SIGNED INT),
9231f_charbig = 'just inserted'
9232   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9233DELETE FROM t0_aux
9234WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9235INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9236SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9237'just inserted' FROM t0_template
9238WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9239CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9240BEGIN
9241UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9242f_charbig = 'updated by trigger'
9243      WHERE f_int1 = new.f_int1;
9244END|
9245UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9246WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9247
9248# check trigger-5 success: 	1
9249DROP TRIGGER trg_1;
9250UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9251f_int2 = CAST(f_char1 AS SIGNED INT),
9252f_charbig = 'just inserted'
9253   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9254DELETE FROM t0_aux
9255WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9256INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9257SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9258'just inserted' FROM t0_template
9259WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9260CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9261BEGIN
9262UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9263f_charbig = 'updated by trigger'
9264      WHERE f_int1 = - old.f_int1;
9265END|
9266UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9267WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9268
9269# check trigger-6 success: 	1
9270DROP TRIGGER trg_1;
9271UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9272f_int2 = CAST(f_char1 AS SIGNED INT),
9273f_charbig = 'just inserted'
9274   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9275DELETE FROM t0_aux
9276WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9277INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9278SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9279'just inserted' FROM t0_template
9280WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9281CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9282BEGIN
9283UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9284f_charbig = 'updated by trigger'
9285      WHERE f_int1 = - old.f_int1;
9286END|
9287DELETE FROM t0_aux
9288WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9289
9290# check trigger-7 success: 	1
9291DROP TRIGGER trg_1;
9292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9293f_int2 = CAST(f_char1 AS SIGNED INT),
9294f_charbig = 'just inserted'
9295   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9296DELETE FROM t0_aux
9297WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9298INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9299SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9300'just inserted' FROM t0_template
9301WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9302CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9303BEGIN
9304UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9305f_charbig = 'updated by trigger'
9306      WHERE f_int1 = - old.f_int1;
9307END|
9308DELETE FROM t0_aux
9309WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9310
9311# check trigger-8 success: 	1
9312DROP TRIGGER trg_1;
9313UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9314f_int2 = CAST(f_char1 AS SIGNED INT),
9315f_charbig = 'just inserted'
9316   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9317DELETE FROM t0_aux
9318WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9319DELETE FROM t1
9320WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9321CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9322BEGIN
9323SET new.f_int1 = old.f_int1 + @max_row,
9324new.f_int2 = old.f_int2 - @max_row,
9325new.f_charbig = '####updated per update trigger####';
9326END|
9327UPDATE t1
9328SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9329f_charbig = '####updated per update statement itself####';
9330
9331# check trigger-9 success: 	1
9332DROP TRIGGER trg_2;
9333UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9334f_int2 = CAST(f_char1 AS SIGNED INT),
9335f_charbig = CONCAT('===',f_char1,'===');
9336CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9337BEGIN
9338SET new.f_int1 = new.f_int1 + @max_row,
9339new.f_int2 = new.f_int2 - @max_row,
9340new.f_charbig = '####updated per update trigger####';
9341END|
9342UPDATE t1
9343SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9344f_charbig = '####updated per update statement itself####';
9345
9346# check trigger-10 success: 	1
9347DROP TRIGGER trg_2;
9348UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9349f_int2 = CAST(f_char1 AS SIGNED INT),
9350f_charbig = CONCAT('===',f_char1,'===');
9351CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9352BEGIN
9353SET new.f_int1 = @my_max1 + @counter,
9354new.f_int2 = @my_min2 - @counter,
9355new.f_charbig = '####updated per insert trigger####';
9356SET @counter = @counter + 1;
9357END|
9358SET @counter = 1;
9359SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9360INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9361SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9362CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9364ORDER BY f_int1;
9365DROP TRIGGER trg_3;
9366
9367# check trigger-11 success: 	1
9368DELETE FROM t1
9369WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9370AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9371AND f_charbig = '####updated per insert trigger####';
9372CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9373BEGIN
9374SET new.f_int1 = @my_max1 + @counter,
9375new.f_int2 = @my_min2 - @counter,
9376new.f_charbig = '####updated per insert trigger####';
9377SET @counter = @counter + 1;
9378END|
9379SET @counter = 1;
9380SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9381INSERT INTO t1 (f_char1, f_char2, f_charbig)
9382SELECT CAST(f_int1 AS CHAR),
9383CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9384WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9385ORDER BY f_int1;
9386DROP TRIGGER trg_3;
9387
9388# check trigger-12 success: 	1
9389DELETE FROM t1
9390WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9391AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9392AND f_charbig = '####updated per insert trigger####';
9393ANALYZE  TABLE t1;
9394Table	Op	Msg_type	Msg_text
9395test.t1	analyze	status	OK
9396CHECK    TABLE t1 EXTENDED;
9397Table	Op	Msg_type	Msg_text
9398test.t1	check	status	OK
9399CHECKSUM TABLE t1 EXTENDED;
9400Table	Checksum
9401test.t1	<some_value>
9402OPTIMIZE TABLE t1;
9403Table	Op	Msg_type	Msg_text
9404test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9405test.t1	optimize	status	OK
9406# check layout success:    1
9407REPAIR   TABLE t1 EXTENDED;
9408Table	Op	Msg_type	Msg_text
9409test.t1	repair	status	OK
9410# check layout success:    1
9411TRUNCATE t1;
9412
9413# check TRUNCATE success: 	1
9414# check layout success:    1
9415# End usability test (inc/partition_check.inc)
9416DROP TABLE t1;
9417CREATE TABLE t1 (
9418f_int1 INTEGER DEFAULT 0,
9419f_int2 INTEGER DEFAULT 0,
9420f_char1 CHAR(20),
9421f_char2 CHAR(20),
9422f_charbig VARCHAR(1000)
9423
9424)
9425PARTITION BY LIST(MOD(f_int1,4))
9426(PARTITION part_3 VALUES IN (-3),
9427PARTITION part_2 VALUES IN (-2),
9428PARTITION part_1 VALUES IN (-1),
9429PARTITION part_N VALUES IN (NULL),
9430PARTITION part0 VALUES IN (0),
9431PARTITION part1 VALUES IN (1),
9432PARTITION part2 VALUES IN (2),
9433PARTITION part3 VALUES IN (3));
9434INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9435SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9436WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9437ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
9438INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9439SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9440WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9441# Start usability test (inc/partition_check.inc)
9442create_command
9443SHOW CREATE TABLE t1;
9444Table	Create Table
9445t1	CREATE TABLE `t1` (
9446  `f_int1` int(11) DEFAULT 0,
9447  `f_int2` int(11) DEFAULT 0,
9448  `f_char1` char(20) DEFAULT NULL,
9449  `f_char2` char(20) DEFAULT NULL,
9450  `f_charbig` varchar(1000) DEFAULT NULL,
9451  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9452) ENGINE=InnoDB DEFAULT CHARSET=latin1
9453 PARTITION BY LIST (`f_int1` MOD 4)
9454(PARTITION `part_3` VALUES IN (-3) ENGINE = InnoDB,
9455 PARTITION `part_2` VALUES IN (-2) ENGINE = InnoDB,
9456 PARTITION `part_1` VALUES IN (-1) ENGINE = InnoDB,
9457 PARTITION `part_N` VALUES IN (NULL) ENGINE = InnoDB,
9458 PARTITION `part0` VALUES IN (0) ENGINE = InnoDB,
9459 PARTITION `part1` VALUES IN (1) ENGINE = InnoDB,
9460 PARTITION `part2` VALUES IN (2) ENGINE = InnoDB,
9461 PARTITION `part3` VALUES IN (3) ENGINE = InnoDB)
9462
9463# check prerequisites-1 success:    1
9464# check COUNT(*) success:    1
9465# check MIN/MAX(f_int1) success:    1
9466# check MIN/MAX(f_int2) success:    1
9467INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9468SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9469CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9470WHERE f_int1 IN (2,3);
9471ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
9472# check prerequisites-3 success:    1
9473# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9474INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9475SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9476CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9477WHERE f_int1 IN (2,3);
9478DELETE FROM t1 WHERE f_charbig = 'delete me';
9479INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9480SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9481CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9482WHERE f_int1 IN (2,3);
9483DELETE FROM t1 WHERE f_charbig = 'delete me';
9484# check read via f_int1 success: 1
9485# check read via f_int2 success: 1
9486
9487# check multiple-1 success: 	1
9488DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9489
9490# check multiple-2 success: 	1
9491INSERT INTO t1 SELECT * FROM t0_template
9492WHERE MOD(f_int1,3) = 0;
9493
9494# check multiple-3 success: 	1
9495UPDATE t1 SET f_int1 = f_int1 + @max_row
9496WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9497AND @max_row_div2 + @max_row_div4;
9498
9499# check multiple-4 success: 	1
9500DELETE FROM t1
9501WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9502AND @max_row_div2 + @max_row_div4 + @max_row;
9503
9504# check multiple-5 success: 	1
9505SELECT COUNT(*) INTO @try_count FROM t0_template
9506WHERE MOD(f_int1,3) = 0
9507AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9508SELECT COUNT(*) INTO @clash_count
9509FROM t1 INNER JOIN t0_template USING(f_int1)
9510WHERE MOD(f_int1,3) = 0
9511AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9512SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9513INSERT INTO t1
9514SET f_int1 = @cur_value , f_int2 = @cur_value,
9515f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9516f_charbig = '#SINGLE#';
9517
9518# check single-1 success: 	1
9519SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9520INSERT INTO t1
9521SET f_int1 = @cur_value , f_int2 = @cur_value,
9522f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9523f_charbig = '#SINGLE#';
9524
9525# check single-2 success: 	1
9526SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9527SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9528UPDATE t1 SET f_int1 = @cur_value2
9529WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9530
9531# check single-3 success: 	1
9532SET @cur_value1= -1;
9533SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9534UPDATE t1 SET f_int1 = @cur_value1
9535WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9536
9537# check single-4 success: 	1
9538SELECT MAX(f_int1) INTO @cur_value FROM t1;
9539DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9540
9541# check single-5 success: 	1
9542DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9543
9544# check single-6 success: 	1
9545INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9546
9547# check single-7 success: 	1
9548DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9549DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9550INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9551f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9552f_charbig = '#NULL#';
9553INSERT INTO t1
9554SET f_int1 = NULL , f_int2 = -@max_row,
9555f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9556f_charbig = '#NULL#';
9557# check null success:    1
9558
9559# check null-1 success: 	1
9560UPDATE t1 SET f_int1 = -@max_row
9561WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9562AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9563
9564# check null-2 success: 	1
9565UPDATE t1 SET f_int1 = NULL
9566WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9567AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9568
9569# check null-3 success: 	1
9570DELETE FROM t1
9571WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
9572AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
9573
9574# check null-4 success: 	1
9575DELETE FROM t1
9576WHERE f_int1 = 0 AND f_int2 = 0
9577AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9578AND f_charbig = '#NULL#';
9579INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9580SELECT f_int1, f_int1, '', '', 'was inserted'
9581   FROM t0_template source_tab
9582WHERE MOD(f_int1,3) = 0
9583AND f_int1 BETWEEN @max_row_div2 AND @max_row
9584ON DUPLICATE KEY
9585UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9586f_int2 = 2 * @max_row + source_tab.f_int1,
9587f_charbig = 'was updated';
9588
9589# check unique-1-a success: 	1
9590
9591# check unique-1-b success: 	1
9592DELETE FROM t1 WHERE f_charbig = 'was inserted';
9593UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9594f_int2 = CAST(f_char1 AS SIGNED INT),
9595f_charbig = CONCAT('===',f_char1,'===')
9596WHERE f_charbig = 'was updated';
9597REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9598SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9599   FROM t0_template source_tab
9600WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9601
9602# check replace success: 	1
9603DELETE FROM t1
9604WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9605DELETE FROM t1
9606WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9607f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9608UPDATE t1 SET f_int2 = f_int1,
9609f_char1 = CAST(f_int1 AS CHAR),
9610f_char2 = CAST(f_int1 AS CHAR),
9611f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9612WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9613SET AUTOCOMMIT= 0;
9614INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9615SELECT f_int1, f_int1, '', '', 'was inserted'
9616FROM t0_template source_tab
9617WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9618
9619# check transactions-1 success: 	1
9620COMMIT WORK;
9621
9622# check transactions-2 success: 	1
9623ROLLBACK WORK;
9624
9625# check transactions-3 success: 	1
9626DELETE FROM t1 WHERE f_charbig = 'was inserted';
9627COMMIT WORK;
9628ROLLBACK WORK;
9629
9630# check transactions-4 success: 	1
9631INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9632SELECT f_int1, f_int1, '', '', 'was inserted'
9633FROM t0_template source_tab
9634WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9635
9636# check transactions-5 success: 	1
9637ROLLBACK WORK;
9638
9639# check transactions-6 success: 	1
9640# INFO: Storage engine used for t1 seems to be transactional.
9641COMMIT;
9642
9643# check transactions-7 success: 	1
9644DELETE FROM t1 WHERE f_charbig = 'was inserted';
9645COMMIT WORK;
9646SET @@session.sql_mode = 'traditional';
9647SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9648INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9649SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9650'', '', 'was inserted' FROM t0_template
9651WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9652ERROR 22012: Division by 0
9653COMMIT;
9654
9655# check transactions-8 success: 	1
9656# INFO: Storage engine used for t1 seems to be able to revert
9657#       changes made by the failing statement.
9658SET @@session.sql_mode = '';
9659SET AUTOCOMMIT= 1;
9660DELETE FROM t1 WHERE f_charbig = 'was inserted';
9661COMMIT WORK;
9662UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9663
9664# check special-1 success: 	1
9665UPDATE t1 SET f_charbig = '';
9666
9667# check special-2 success: 	1
9668UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9669INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9670SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9671WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9672INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9673SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9674'just inserted' FROM t0_template
9675WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9676CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9677BEGIN
9678UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9679f_charbig = 'updated by trigger'
9680      WHERE f_int1 = new.f_int1;
9681END|
9682INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9683SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9684WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9685
9686# check trigger-1 success: 	1
9687DROP TRIGGER trg_1;
9688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9689f_int2 = CAST(f_char1 AS SIGNED INT),
9690f_charbig = 'just inserted'
9691   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9692DELETE FROM t0_aux
9693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9696'just inserted' FROM t0_template
9697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9698CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9699BEGIN
9700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9701f_charbig = 'updated by trigger'
9702      WHERE f_int1 = new.f_int1;
9703END|
9704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9705SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9706WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9707
9708# check trigger-2 success: 	1
9709DROP TRIGGER trg_1;
9710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9711f_int2 = CAST(f_char1 AS SIGNED INT),
9712f_charbig = 'just inserted'
9713   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9714DELETE FROM t0_aux
9715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9718'just inserted' FROM t0_template
9719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9720CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9721BEGIN
9722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9723f_charbig = 'updated by trigger'
9724      WHERE f_int1 = new.f_int1;
9725END|
9726UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9728
9729# check trigger-3 success: 	1
9730DROP TRIGGER trg_1;
9731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9732f_int2 = CAST(f_char1 AS SIGNED INT),
9733f_charbig = 'just inserted'
9734   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9735DELETE FROM t0_aux
9736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9739'just inserted' FROM t0_template
9740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9741CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9742BEGIN
9743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9744f_charbig = 'updated by trigger'
9745      WHERE f_int1 = - old.f_int1;
9746END|
9747UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9749
9750# check trigger-4 success: 	1
9751DROP TRIGGER trg_1;
9752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9753f_int2 = CAST(f_char1 AS SIGNED INT),
9754f_charbig = 'just inserted'
9755   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9756DELETE FROM t0_aux
9757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9760'just inserted' FROM t0_template
9761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9762CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9763BEGIN
9764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9765f_charbig = 'updated by trigger'
9766      WHERE f_int1 = new.f_int1;
9767END|
9768UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9770
9771# check trigger-5 success: 	1
9772DROP TRIGGER trg_1;
9773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9774f_int2 = CAST(f_char1 AS SIGNED INT),
9775f_charbig = 'just inserted'
9776   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9777DELETE FROM t0_aux
9778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9779INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9780SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9781'just inserted' FROM t0_template
9782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9783CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9784BEGIN
9785UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9786f_charbig = 'updated by trigger'
9787      WHERE f_int1 = - old.f_int1;
9788END|
9789UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9790WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9791
9792# check trigger-6 success: 	1
9793DROP TRIGGER trg_1;
9794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9795f_int2 = CAST(f_char1 AS SIGNED INT),
9796f_charbig = 'just inserted'
9797   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9798DELETE FROM t0_aux
9799WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9800INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9801SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9802'just inserted' FROM t0_template
9803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9804CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9805BEGIN
9806UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9807f_charbig = 'updated by trigger'
9808      WHERE f_int1 = - old.f_int1;
9809END|
9810DELETE FROM t0_aux
9811WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9812
9813# check trigger-7 success: 	1
9814DROP TRIGGER trg_1;
9815UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9816f_int2 = CAST(f_char1 AS SIGNED INT),
9817f_charbig = 'just inserted'
9818   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9819DELETE FROM t0_aux
9820WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9821INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9822SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9823'just inserted' FROM t0_template
9824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9825CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9826BEGIN
9827UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9828f_charbig = 'updated by trigger'
9829      WHERE f_int1 = - old.f_int1;
9830END|
9831DELETE FROM t0_aux
9832WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9833
9834# check trigger-8 success: 	1
9835DROP TRIGGER trg_1;
9836UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9837f_int2 = CAST(f_char1 AS SIGNED INT),
9838f_charbig = 'just inserted'
9839   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9840DELETE FROM t0_aux
9841WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9842DELETE FROM t1
9843WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9844CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9845BEGIN
9846SET new.f_int1 = old.f_int1 + @max_row,
9847new.f_int2 = old.f_int2 - @max_row,
9848new.f_charbig = '####updated per update trigger####';
9849END|
9850UPDATE t1
9851SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9852f_charbig = '####updated per update statement itself####';
9853
9854# check trigger-9 success: 	1
9855DROP TRIGGER trg_2;
9856UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9857f_int2 = CAST(f_char1 AS SIGNED INT),
9858f_charbig = CONCAT('===',f_char1,'===');
9859CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9860BEGIN
9861SET new.f_int1 = new.f_int1 + @max_row,
9862new.f_int2 = new.f_int2 - @max_row,
9863new.f_charbig = '####updated per update trigger####';
9864END|
9865UPDATE t1
9866SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9867f_charbig = '####updated per update statement itself####';
9868
9869# check trigger-10 success: 	1
9870DROP TRIGGER trg_2;
9871UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9872f_int2 = CAST(f_char1 AS SIGNED INT),
9873f_charbig = CONCAT('===',f_char1,'===');
9874CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9875BEGIN
9876SET new.f_int1 = @my_max1 + @counter,
9877new.f_int2 = @my_min2 - @counter,
9878new.f_charbig = '####updated per insert trigger####';
9879SET @counter = @counter + 1;
9880END|
9881SET @counter = 1;
9882SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9883INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9884SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9885CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9886WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9887ORDER BY f_int1;
9888DROP TRIGGER trg_3;
9889
9890# check trigger-11 success: 	1
9891DELETE FROM t1
9892WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9893AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9894AND f_charbig = '####updated per insert trigger####';
9895CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9896BEGIN
9897SET new.f_int1 = @my_max1 + @counter,
9898new.f_int2 = @my_min2 - @counter,
9899new.f_charbig = '####updated per insert trigger####';
9900SET @counter = @counter + 1;
9901END|
9902SET @counter = 1;
9903SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9904INSERT INTO t1 (f_char1, f_char2, f_charbig)
9905SELECT CAST(f_int1 AS CHAR),
9906CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9907WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9908ORDER BY f_int1;
9909DROP TRIGGER trg_3;
9910
9911# check trigger-12 success: 	1
9912DELETE FROM t1
9913WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9914AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9915AND f_charbig = '####updated per insert trigger####';
9916ANALYZE  TABLE t1;
9917Table	Op	Msg_type	Msg_text
9918test.t1	analyze	status	OK
9919CHECK    TABLE t1 EXTENDED;
9920Table	Op	Msg_type	Msg_text
9921test.t1	check	status	OK
9922CHECKSUM TABLE t1 EXTENDED;
9923Table	Checksum
9924test.t1	<some_value>
9925OPTIMIZE TABLE t1;
9926Table	Op	Msg_type	Msg_text
9927test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9928test.t1	optimize	status	OK
9929# check layout success:    1
9930REPAIR   TABLE t1 EXTENDED;
9931Table	Op	Msg_type	Msg_text
9932test.t1	repair	status	OK
9933# check layout success:    1
9934TRUNCATE t1;
9935
9936# check TRUNCATE success: 	1
9937# check layout success:    1
9938# End usability test (inc/partition_check.inc)
9939DROP TABLE t1;
9940CREATE TABLE t1 (
9941f_int1 INTEGER DEFAULT 0,
9942f_int2 INTEGER DEFAULT 0,
9943f_char1 CHAR(20),
9944f_char2 CHAR(20),
9945f_charbig VARCHAR(1000)
9946
9947)
9948PARTITION BY RANGE(f_int1)
9949(PARTITION parta VALUES LESS THAN (0),
9950PARTITION partb VALUES LESS THAN (5),
9951PARTITION partc VALUES LESS THAN (10),
9952PARTITION partd VALUES LESS THAN (10 + 5),
9953PARTITION parte VALUES LESS THAN (20),
9954PARTITION partf VALUES LESS THAN (2147483646));
9955INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9956SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9957WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9958ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
9959INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9960SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9961WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9962# Start usability test (inc/partition_check.inc)
9963create_command
9964SHOW CREATE TABLE t1;
9965Table	Create Table
9966t1	CREATE TABLE `t1` (
9967  `f_int1` int(11) DEFAULT 0,
9968  `f_int2` int(11) DEFAULT 0,
9969  `f_char1` char(20) DEFAULT NULL,
9970  `f_char2` char(20) DEFAULT NULL,
9971  `f_charbig` varchar(1000) DEFAULT NULL,
9972  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9973) ENGINE=InnoDB DEFAULT CHARSET=latin1
9974 PARTITION BY RANGE (`f_int1`)
9975(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
9976 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
9977 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
9978 PARTITION `partd` VALUES LESS THAN (15) ENGINE = InnoDB,
9979 PARTITION `parte` VALUES LESS THAN (20) ENGINE = InnoDB,
9980 PARTITION `partf` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
9981
9982# check prerequisites-1 success:    1
9983# check COUNT(*) success:    1
9984# check MIN/MAX(f_int1) success:    1
9985# check MIN/MAX(f_int2) success:    1
9986INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9987SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9988CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9989WHERE f_int1 IN (2,3);
9990ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
9991# check prerequisites-3 success:    1
9992# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9993INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9994SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9995CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9996WHERE f_int1 IN (2,3);
9997DELETE FROM t1 WHERE f_charbig = 'delete me';
9998INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9999SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10000CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10001WHERE f_int1 IN (2,3);
10002DELETE FROM t1 WHERE f_charbig = 'delete me';
10003# check read via f_int1 success: 1
10004# check read via f_int2 success: 1
10005
10006# check multiple-1 success: 	1
10007DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10008
10009# check multiple-2 success: 	1
10010INSERT INTO t1 SELECT * FROM t0_template
10011WHERE MOD(f_int1,3) = 0;
10012
10013# check multiple-3 success: 	1
10014UPDATE t1 SET f_int1 = f_int1 + @max_row
10015WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10016AND @max_row_div2 + @max_row_div4;
10017
10018# check multiple-4 success: 	1
10019DELETE FROM t1
10020WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10021AND @max_row_div2 + @max_row_div4 + @max_row;
10022
10023# check multiple-5 success: 	1
10024SELECT COUNT(*) INTO @try_count FROM t0_template
10025WHERE MOD(f_int1,3) = 0
10026AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10027SELECT COUNT(*) INTO @clash_count
10028FROM t1 INNER JOIN t0_template USING(f_int1)
10029WHERE MOD(f_int1,3) = 0
10030AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10031SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10032INSERT INTO t1
10033SET f_int1 = @cur_value , f_int2 = @cur_value,
10034f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10035f_charbig = '#SINGLE#';
10036
10037# check single-1 success: 	1
10038SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10039INSERT INTO t1
10040SET f_int1 = @cur_value , f_int2 = @cur_value,
10041f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10042f_charbig = '#SINGLE#';
10043
10044# check single-2 success: 	1
10045SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10046SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10047UPDATE t1 SET f_int1 = @cur_value2
10048WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10049
10050# check single-3 success: 	1
10051SET @cur_value1= -1;
10052SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10053UPDATE t1 SET f_int1 = @cur_value1
10054WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10055
10056# check single-4 success: 	1
10057SELECT MAX(f_int1) INTO @cur_value FROM t1;
10058DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10059
10060# check single-5 success: 	1
10061DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10062
10063# check single-6 success: 	1
10064INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10065ERROR HY000: Table has no partition for value 2147483647
10066DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10067INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10068f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10069f_charbig = '#NULL#';
10070INSERT INTO t1
10071SET f_int1 = NULL , f_int2 = -@max_row,
10072f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10073f_charbig = '#NULL#';
10074# check null success:    1
10075
10076# check null-1 success: 	1
10077UPDATE t1 SET f_int1 = -@max_row
10078WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10079AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10080
10081# check null-2 success: 	1
10082UPDATE t1 SET f_int1 = NULL
10083WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10084AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10085
10086# check null-3 success: 	1
10087DELETE FROM t1
10088WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10089AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10090
10091# check null-4 success: 	1
10092DELETE FROM t1
10093WHERE f_int1 = 0 AND f_int2 = 0
10094AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10095AND f_charbig = '#NULL#';
10096INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10097SELECT f_int1, f_int1, '', '', 'was inserted'
10098   FROM t0_template source_tab
10099WHERE MOD(f_int1,3) = 0
10100AND f_int1 BETWEEN @max_row_div2 AND @max_row
10101ON DUPLICATE KEY
10102UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10103f_int2 = 2 * @max_row + source_tab.f_int1,
10104f_charbig = 'was updated';
10105
10106# check unique-1-a success: 	1
10107
10108# check unique-1-b success: 	1
10109DELETE FROM t1 WHERE f_charbig = 'was inserted';
10110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10111f_int2 = CAST(f_char1 AS SIGNED INT),
10112f_charbig = CONCAT('===',f_char1,'===')
10113WHERE f_charbig = 'was updated';
10114REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10115SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10116   FROM t0_template source_tab
10117WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10118
10119# check replace success: 	1
10120DELETE FROM t1
10121WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10122DELETE FROM t1
10123WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10124f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10125UPDATE t1 SET f_int2 = f_int1,
10126f_char1 = CAST(f_int1 AS CHAR),
10127f_char2 = CAST(f_int1 AS CHAR),
10128f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10129WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10130SET AUTOCOMMIT= 0;
10131INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10132SELECT f_int1, f_int1, '', '', 'was inserted'
10133FROM t0_template source_tab
10134WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10135
10136# check transactions-1 success: 	1
10137COMMIT WORK;
10138
10139# check transactions-2 success: 	1
10140ROLLBACK WORK;
10141
10142# check transactions-3 success: 	1
10143DELETE FROM t1 WHERE f_charbig = 'was inserted';
10144COMMIT WORK;
10145ROLLBACK WORK;
10146
10147# check transactions-4 success: 	1
10148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10149SELECT f_int1, f_int1, '', '', 'was inserted'
10150FROM t0_template source_tab
10151WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10152
10153# check transactions-5 success: 	1
10154ROLLBACK WORK;
10155
10156# check transactions-6 success: 	1
10157# INFO: Storage engine used for t1 seems to be transactional.
10158COMMIT;
10159
10160# check transactions-7 success: 	1
10161DELETE FROM t1 WHERE f_charbig = 'was inserted';
10162COMMIT WORK;
10163SET @@session.sql_mode = 'traditional';
10164SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10165INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10166SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10167'', '', 'was inserted' FROM t0_template
10168WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10169ERROR 22012: Division by 0
10170COMMIT;
10171
10172# check transactions-8 success: 	1
10173# INFO: Storage engine used for t1 seems to be able to revert
10174#       changes made by the failing statement.
10175SET @@session.sql_mode = '';
10176SET AUTOCOMMIT= 1;
10177DELETE FROM t1 WHERE f_charbig = 'was inserted';
10178COMMIT WORK;
10179UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10180
10181# check special-1 success: 	1
10182UPDATE t1 SET f_charbig = '';
10183
10184# check special-2 success: 	1
10185UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10186INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10187SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10188WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10189INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10190SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10191'just inserted' FROM t0_template
10192WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10193CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10194BEGIN
10195UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10196f_charbig = 'updated by trigger'
10197      WHERE f_int1 = new.f_int1;
10198END|
10199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10200SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10201WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10202
10203# check trigger-1 success: 	1
10204DROP TRIGGER trg_1;
10205UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10206f_int2 = CAST(f_char1 AS SIGNED INT),
10207f_charbig = 'just inserted'
10208   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10209DELETE FROM t0_aux
10210WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10211INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10212SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10213'just inserted' FROM t0_template
10214WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10215CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10216BEGIN
10217UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10218f_charbig = 'updated by trigger'
10219      WHERE f_int1 = new.f_int1;
10220END|
10221INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10222SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10224
10225# check trigger-2 success: 	1
10226DROP TRIGGER trg_1;
10227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10228f_int2 = CAST(f_char1 AS SIGNED INT),
10229f_charbig = 'just inserted'
10230   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10231DELETE FROM t0_aux
10232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10235'just inserted' FROM t0_template
10236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10237CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10238BEGIN
10239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10240f_charbig = 'updated by trigger'
10241      WHERE f_int1 = new.f_int1;
10242END|
10243UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10245
10246# check trigger-3 success: 	1
10247DROP TRIGGER trg_1;
10248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10249f_int2 = CAST(f_char1 AS SIGNED INT),
10250f_charbig = 'just inserted'
10251   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10252DELETE FROM t0_aux
10253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10255SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10256'just inserted' FROM t0_template
10257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10258CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10259BEGIN
10260UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10261f_charbig = 'updated by trigger'
10262      WHERE f_int1 = - old.f_int1;
10263END|
10264UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10265WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10266
10267# check trigger-4 success: 	1
10268DROP TRIGGER trg_1;
10269UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10270f_int2 = CAST(f_char1 AS SIGNED INT),
10271f_charbig = 'just inserted'
10272   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10273DELETE FROM t0_aux
10274WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10275INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10276SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10277'just inserted' FROM t0_template
10278WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10279CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10280BEGIN
10281UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10282f_charbig = 'updated by trigger'
10283      WHERE f_int1 = new.f_int1;
10284END|
10285UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10286WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10287
10288# check trigger-5 success: 	1
10289DROP TRIGGER trg_1;
10290UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10291f_int2 = CAST(f_char1 AS SIGNED INT),
10292f_charbig = 'just inserted'
10293   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10294DELETE FROM t0_aux
10295WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10296INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10297SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10298'just inserted' FROM t0_template
10299WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10300CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10301BEGIN
10302UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10303f_charbig = 'updated by trigger'
10304      WHERE f_int1 = - old.f_int1;
10305END|
10306UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10307WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10308
10309# check trigger-6 success: 	1
10310DROP TRIGGER trg_1;
10311UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10312f_int2 = CAST(f_char1 AS SIGNED INT),
10313f_charbig = 'just inserted'
10314   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10315DELETE FROM t0_aux
10316WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10317INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10318SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10319'just inserted' FROM t0_template
10320WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10321CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10322BEGIN
10323UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10324f_charbig = 'updated by trigger'
10325      WHERE f_int1 = - old.f_int1;
10326END|
10327DELETE FROM t0_aux
10328WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10329
10330# check trigger-7 success: 	1
10331DROP TRIGGER trg_1;
10332UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10333f_int2 = CAST(f_char1 AS SIGNED INT),
10334f_charbig = 'just inserted'
10335   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10336DELETE FROM t0_aux
10337WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10338INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10339SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10340'just inserted' FROM t0_template
10341WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10342CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10343BEGIN
10344UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10345f_charbig = 'updated by trigger'
10346      WHERE f_int1 = - old.f_int1;
10347END|
10348DELETE FROM t0_aux
10349WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10350
10351# check trigger-8 success: 	1
10352DROP TRIGGER trg_1;
10353UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10354f_int2 = CAST(f_char1 AS SIGNED INT),
10355f_charbig = 'just inserted'
10356   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10357DELETE FROM t0_aux
10358WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10359DELETE FROM t1
10360WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10361CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10362BEGIN
10363SET new.f_int1 = old.f_int1 + @max_row,
10364new.f_int2 = old.f_int2 - @max_row,
10365new.f_charbig = '####updated per update trigger####';
10366END|
10367UPDATE t1
10368SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10369f_charbig = '####updated per update statement itself####';
10370
10371# check trigger-9 success: 	1
10372DROP TRIGGER trg_2;
10373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10374f_int2 = CAST(f_char1 AS SIGNED INT),
10375f_charbig = CONCAT('===',f_char1,'===');
10376CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10377BEGIN
10378SET new.f_int1 = new.f_int1 + @max_row,
10379new.f_int2 = new.f_int2 - @max_row,
10380new.f_charbig = '####updated per update trigger####';
10381END|
10382UPDATE t1
10383SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10384f_charbig = '####updated per update statement itself####';
10385
10386# check trigger-10 success: 	1
10387DROP TRIGGER trg_2;
10388UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10389f_int2 = CAST(f_char1 AS SIGNED INT),
10390f_charbig = CONCAT('===',f_char1,'===');
10391CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10392BEGIN
10393SET new.f_int1 = @my_max1 + @counter,
10394new.f_int2 = @my_min2 - @counter,
10395new.f_charbig = '####updated per insert trigger####';
10396SET @counter = @counter + 1;
10397END|
10398SET @counter = 1;
10399SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10400INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10401SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10402CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10404ORDER BY f_int1;
10405DROP TRIGGER trg_3;
10406
10407# check trigger-11 success: 	1
10408DELETE FROM t1
10409WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10410AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10411AND f_charbig = '####updated per insert trigger####';
10412CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10413BEGIN
10414SET new.f_int1 = @my_max1 + @counter,
10415new.f_int2 = @my_min2 - @counter,
10416new.f_charbig = '####updated per insert trigger####';
10417SET @counter = @counter + 1;
10418END|
10419SET @counter = 1;
10420SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10421INSERT INTO t1 (f_char1, f_char2, f_charbig)
10422SELECT CAST(f_int1 AS CHAR),
10423CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10424WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10425ORDER BY f_int1;
10426DROP TRIGGER trg_3;
10427
10428# check trigger-12 success: 	1
10429DELETE FROM t1
10430WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10431AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10432AND f_charbig = '####updated per insert trigger####';
10433ANALYZE  TABLE t1;
10434Table	Op	Msg_type	Msg_text
10435test.t1	analyze	status	OK
10436CHECK    TABLE t1 EXTENDED;
10437Table	Op	Msg_type	Msg_text
10438test.t1	check	status	OK
10439CHECKSUM TABLE t1 EXTENDED;
10440Table	Checksum
10441test.t1	<some_value>
10442OPTIMIZE TABLE t1;
10443Table	Op	Msg_type	Msg_text
10444test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10445test.t1	optimize	status	OK
10446# check layout success:    1
10447REPAIR   TABLE t1 EXTENDED;
10448Table	Op	Msg_type	Msg_text
10449test.t1	repair	status	OK
10450# check layout success:    1
10451TRUNCATE t1;
10452
10453# check TRUNCATE success: 	1
10454# check layout success:    1
10455# End usability test (inc/partition_check.inc)
10456DROP TABLE t1;
10457CREATE TABLE t1 (
10458f_int1 INTEGER DEFAULT 0,
10459f_int2 INTEGER DEFAULT 0,
10460f_char1 CHAR(20),
10461f_char2 CHAR(20),
10462f_charbig VARCHAR(1000)
10463
10464)
10465PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
10466(PARTITION parta VALUES LESS THAN (0),
10467PARTITION partb VALUES LESS THAN (5),
10468PARTITION partc VALUES LESS THAN (10),
10469PARTITION partd VALUES LESS THAN (2147483646));
10470INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10471SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10472WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10473ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
10474INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10475SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10476WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10477# Start usability test (inc/partition_check.inc)
10478create_command
10479SHOW CREATE TABLE t1;
10480Table	Create Table
10481t1	CREATE TABLE `t1` (
10482  `f_int1` int(11) DEFAULT 0,
10483  `f_int2` int(11) DEFAULT 0,
10484  `f_char1` char(20) DEFAULT NULL,
10485  `f_char2` char(20) DEFAULT NULL,
10486  `f_charbig` varchar(1000) DEFAULT NULL,
10487  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10488) ENGINE=InnoDB DEFAULT CHARSET=latin1
10489 PARTITION BY RANGE (`f_int1` DIV 2)
10490SUBPARTITION BY HASH (`f_int1`)
10491SUBPARTITIONS 2
10492(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
10493 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
10494 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
10495 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
10496
10497# check prerequisites-1 success:    1
10498# check COUNT(*) success:    1
10499# check MIN/MAX(f_int1) success:    1
10500# check MIN/MAX(f_int2) success:    1
10501INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10502SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10503CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10504WHERE f_int1 IN (2,3);
10505ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
10506# check prerequisites-3 success:    1
10507# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10508INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10509SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10510CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10511WHERE f_int1 IN (2,3);
10512DELETE FROM t1 WHERE f_charbig = 'delete me';
10513INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10514SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10515CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10516WHERE f_int1 IN (2,3);
10517DELETE FROM t1 WHERE f_charbig = 'delete me';
10518# check read via f_int1 success: 1
10519# check read via f_int2 success: 1
10520
10521# check multiple-1 success: 	1
10522DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10523
10524# check multiple-2 success: 	1
10525INSERT INTO t1 SELECT * FROM t0_template
10526WHERE MOD(f_int1,3) = 0;
10527
10528# check multiple-3 success: 	1
10529UPDATE t1 SET f_int1 = f_int1 + @max_row
10530WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10531AND @max_row_div2 + @max_row_div4;
10532
10533# check multiple-4 success: 	1
10534DELETE FROM t1
10535WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10536AND @max_row_div2 + @max_row_div4 + @max_row;
10537
10538# check multiple-5 success: 	1
10539SELECT COUNT(*) INTO @try_count FROM t0_template
10540WHERE MOD(f_int1,3) = 0
10541AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10542SELECT COUNT(*) INTO @clash_count
10543FROM t1 INNER JOIN t0_template USING(f_int1)
10544WHERE MOD(f_int1,3) = 0
10545AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10546SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10547INSERT INTO t1
10548SET f_int1 = @cur_value , f_int2 = @cur_value,
10549f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10550f_charbig = '#SINGLE#';
10551
10552# check single-1 success: 	1
10553SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10554INSERT INTO t1
10555SET f_int1 = @cur_value , f_int2 = @cur_value,
10556f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10557f_charbig = '#SINGLE#';
10558
10559# check single-2 success: 	1
10560SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10561SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10562UPDATE t1 SET f_int1 = @cur_value2
10563WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10564
10565# check single-3 success: 	1
10566SET @cur_value1= -1;
10567SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10568UPDATE t1 SET f_int1 = @cur_value1
10569WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10570
10571# check single-4 success: 	1
10572SELECT MAX(f_int1) INTO @cur_value FROM t1;
10573DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10574
10575# check single-5 success: 	1
10576DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10577
10578# check single-6 success: 	1
10579INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10580
10581# check single-7 success: 	1
10582DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10583DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10584INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10585f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10586f_charbig = '#NULL#';
10587INSERT INTO t1
10588SET f_int1 = NULL , f_int2 = -@max_row,
10589f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10590f_charbig = '#NULL#';
10591# check null success:    1
10592
10593# check null-1 success: 	1
10594UPDATE t1 SET f_int1 = -@max_row
10595WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10596AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10597
10598# check null-2 success: 	1
10599UPDATE t1 SET f_int1 = NULL
10600WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10601AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10602
10603# check null-3 success: 	1
10604DELETE FROM t1
10605WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
10606AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
10607
10608# check null-4 success: 	1
10609DELETE FROM t1
10610WHERE f_int1 = 0 AND f_int2 = 0
10611AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10612AND f_charbig = '#NULL#';
10613INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10614SELECT f_int1, f_int1, '', '', 'was inserted'
10615   FROM t0_template source_tab
10616WHERE MOD(f_int1,3) = 0
10617AND f_int1 BETWEEN @max_row_div2 AND @max_row
10618ON DUPLICATE KEY
10619UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10620f_int2 = 2 * @max_row + source_tab.f_int1,
10621f_charbig = 'was updated';
10622
10623# check unique-1-a success: 	1
10624
10625# check unique-1-b success: 	1
10626DELETE FROM t1 WHERE f_charbig = 'was inserted';
10627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10628f_int2 = CAST(f_char1 AS SIGNED INT),
10629f_charbig = CONCAT('===',f_char1,'===')
10630WHERE f_charbig = 'was updated';
10631REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10632SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10633   FROM t0_template source_tab
10634WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10635
10636# check replace success: 	1
10637DELETE FROM t1
10638WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10639DELETE FROM t1
10640WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10641f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10642UPDATE t1 SET f_int2 = f_int1,
10643f_char1 = CAST(f_int1 AS CHAR),
10644f_char2 = CAST(f_int1 AS CHAR),
10645f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10646WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10647SET AUTOCOMMIT= 0;
10648INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10649SELECT f_int1, f_int1, '', '', 'was inserted'
10650FROM t0_template source_tab
10651WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10652
10653# check transactions-1 success: 	1
10654COMMIT WORK;
10655
10656# check transactions-2 success: 	1
10657ROLLBACK WORK;
10658
10659# check transactions-3 success: 	1
10660DELETE FROM t1 WHERE f_charbig = 'was inserted';
10661COMMIT WORK;
10662ROLLBACK WORK;
10663
10664# check transactions-4 success: 	1
10665INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10666SELECT f_int1, f_int1, '', '', 'was inserted'
10667FROM t0_template source_tab
10668WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10669
10670# check transactions-5 success: 	1
10671ROLLBACK WORK;
10672
10673# check transactions-6 success: 	1
10674# INFO: Storage engine used for t1 seems to be transactional.
10675COMMIT;
10676
10677# check transactions-7 success: 	1
10678DELETE FROM t1 WHERE f_charbig = 'was inserted';
10679COMMIT WORK;
10680SET @@session.sql_mode = 'traditional';
10681SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10682INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10683SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10684'', '', 'was inserted' FROM t0_template
10685WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10686ERROR 22012: Division by 0
10687COMMIT;
10688
10689# check transactions-8 success: 	1
10690# INFO: Storage engine used for t1 seems to be able to revert
10691#       changes made by the failing statement.
10692SET @@session.sql_mode = '';
10693SET AUTOCOMMIT= 1;
10694DELETE FROM t1 WHERE f_charbig = 'was inserted';
10695COMMIT WORK;
10696UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10697
10698# check special-1 success: 	1
10699UPDATE t1 SET f_charbig = '';
10700
10701# check special-2 success: 	1
10702UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10703INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10704SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10705WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10706INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10707SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10708'just inserted' FROM t0_template
10709WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10710CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10711BEGIN
10712UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10713f_charbig = 'updated by trigger'
10714      WHERE f_int1 = new.f_int1;
10715END|
10716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10717SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10719
10720# check trigger-1 success: 	1
10721DROP TRIGGER trg_1;
10722UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10723f_int2 = CAST(f_char1 AS SIGNED INT),
10724f_charbig = 'just inserted'
10725   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10726DELETE FROM t0_aux
10727WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10728INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10729SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10730'just inserted' FROM t0_template
10731WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10732CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10733BEGIN
10734UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10735f_charbig = 'updated by trigger'
10736      WHERE f_int1 = new.f_int1;
10737END|
10738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10739SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10741
10742# check trigger-2 success: 	1
10743DROP TRIGGER trg_1;
10744UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10745f_int2 = CAST(f_char1 AS SIGNED INT),
10746f_charbig = 'just inserted'
10747   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10748DELETE FROM t0_aux
10749WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10750INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10751SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10752'just inserted' FROM t0_template
10753WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10754CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10755BEGIN
10756UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10757f_charbig = 'updated by trigger'
10758      WHERE f_int1 = new.f_int1;
10759END|
10760UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10761WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10762
10763# check trigger-3 success: 	1
10764DROP TRIGGER trg_1;
10765UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10766f_int2 = CAST(f_char1 AS SIGNED INT),
10767f_charbig = 'just inserted'
10768   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10769DELETE FROM t0_aux
10770WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10771INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10772SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10773'just inserted' FROM t0_template
10774WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10775CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10776BEGIN
10777UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10778f_charbig = 'updated by trigger'
10779      WHERE f_int1 = - old.f_int1;
10780END|
10781UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10782WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10783
10784# check trigger-4 success: 	1
10785DROP TRIGGER trg_1;
10786UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10787f_int2 = CAST(f_char1 AS SIGNED INT),
10788f_charbig = 'just inserted'
10789   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10790DELETE FROM t0_aux
10791WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10792INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10793SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10794'just inserted' FROM t0_template
10795WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10796CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10797BEGIN
10798UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10799f_charbig = 'updated by trigger'
10800      WHERE f_int1 = new.f_int1;
10801END|
10802UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10803WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10804
10805# check trigger-5 success: 	1
10806DROP TRIGGER trg_1;
10807UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10808f_int2 = CAST(f_char1 AS SIGNED INT),
10809f_charbig = 'just inserted'
10810   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10811DELETE FROM t0_aux
10812WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10813INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10814SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10815'just inserted' FROM t0_template
10816WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10817CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10818BEGIN
10819UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10820f_charbig = 'updated by trigger'
10821      WHERE f_int1 = - old.f_int1;
10822END|
10823UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10824WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10825
10826# check trigger-6 success: 	1
10827DROP TRIGGER trg_1;
10828UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10829f_int2 = CAST(f_char1 AS SIGNED INT),
10830f_charbig = 'just inserted'
10831   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10832DELETE FROM t0_aux
10833WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10834INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10835SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10836'just inserted' FROM t0_template
10837WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10838CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10839BEGIN
10840UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10841f_charbig = 'updated by trigger'
10842      WHERE f_int1 = - old.f_int1;
10843END|
10844DELETE FROM t0_aux
10845WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10846
10847# check trigger-7 success: 	1
10848DROP TRIGGER trg_1;
10849UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10850f_int2 = CAST(f_char1 AS SIGNED INT),
10851f_charbig = 'just inserted'
10852   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10853DELETE FROM t0_aux
10854WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10855INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10856SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10857'just inserted' FROM t0_template
10858WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10859CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10860BEGIN
10861UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10862f_charbig = 'updated by trigger'
10863      WHERE f_int1 = - old.f_int1;
10864END|
10865DELETE FROM t0_aux
10866WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10867
10868# check trigger-8 success: 	1
10869DROP TRIGGER trg_1;
10870UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10871f_int2 = CAST(f_char1 AS SIGNED INT),
10872f_charbig = 'just inserted'
10873   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10874DELETE FROM t0_aux
10875WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10876DELETE FROM t1
10877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10878CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10879BEGIN
10880SET new.f_int1 = old.f_int1 + @max_row,
10881new.f_int2 = old.f_int2 - @max_row,
10882new.f_charbig = '####updated per update trigger####';
10883END|
10884UPDATE t1
10885SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10886f_charbig = '####updated per update statement itself####';
10887
10888# check trigger-9 success: 	1
10889DROP TRIGGER trg_2;
10890UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10891f_int2 = CAST(f_char1 AS SIGNED INT),
10892f_charbig = CONCAT('===',f_char1,'===');
10893CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10894BEGIN
10895SET new.f_int1 = new.f_int1 + @max_row,
10896new.f_int2 = new.f_int2 - @max_row,
10897new.f_charbig = '####updated per update trigger####';
10898END|
10899UPDATE t1
10900SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10901f_charbig = '####updated per update statement itself####';
10902
10903# check trigger-10 success: 	1
10904DROP TRIGGER trg_2;
10905UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10906f_int2 = CAST(f_char1 AS SIGNED INT),
10907f_charbig = CONCAT('===',f_char1,'===');
10908CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10909BEGIN
10910SET new.f_int1 = @my_max1 + @counter,
10911new.f_int2 = @my_min2 - @counter,
10912new.f_charbig = '####updated per insert trigger####';
10913SET @counter = @counter + 1;
10914END|
10915SET @counter = 1;
10916SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10918SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10919CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10920WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10921ORDER BY f_int1;
10922DROP TRIGGER trg_3;
10923
10924# check trigger-11 success: 	1
10925DELETE FROM t1
10926WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10927AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10928AND f_charbig = '####updated per insert trigger####';
10929CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10930BEGIN
10931SET new.f_int1 = @my_max1 + @counter,
10932new.f_int2 = @my_min2 - @counter,
10933new.f_charbig = '####updated per insert trigger####';
10934SET @counter = @counter + 1;
10935END|
10936SET @counter = 1;
10937SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10938INSERT INTO t1 (f_char1, f_char2, f_charbig)
10939SELECT CAST(f_int1 AS CHAR),
10940CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10941WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10942ORDER BY f_int1;
10943DROP TRIGGER trg_3;
10944
10945# check trigger-12 success: 	1
10946DELETE FROM t1
10947WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10948AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10949AND f_charbig = '####updated per insert trigger####';
10950ANALYZE  TABLE t1;
10951Table	Op	Msg_type	Msg_text
10952test.t1	analyze	status	OK
10953CHECK    TABLE t1 EXTENDED;
10954Table	Op	Msg_type	Msg_text
10955test.t1	check	status	OK
10956CHECKSUM TABLE t1 EXTENDED;
10957Table	Checksum
10958test.t1	<some_value>
10959OPTIMIZE TABLE t1;
10960Table	Op	Msg_type	Msg_text
10961test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10962test.t1	optimize	status	OK
10963# check layout success:    1
10964REPAIR   TABLE t1 EXTENDED;
10965Table	Op	Msg_type	Msg_text
10966test.t1	repair	status	OK
10967# check layout success:    1
10968TRUNCATE t1;
10969
10970# check TRUNCATE success: 	1
10971# check layout success:    1
10972# End usability test (inc/partition_check.inc)
10973DROP TABLE t1;
10974CREATE TABLE t1 (
10975f_int1 INTEGER DEFAULT 0,
10976f_int2 INTEGER DEFAULT 0,
10977f_char1 CHAR(20),
10978f_char2 CHAR(20),
10979f_charbig VARCHAR(1000)
10980
10981)
10982PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
10983(PARTITION part1 VALUES LESS THAN (0)
10984(SUBPARTITION subpart11, SUBPARTITION subpart12),
10985PARTITION part2 VALUES LESS THAN (5)
10986(SUBPARTITION subpart21, SUBPARTITION subpart22),
10987PARTITION part3 VALUES LESS THAN (10)
10988(SUBPARTITION subpart31, SUBPARTITION subpart32),
10989PARTITION part4 VALUES LESS THAN (2147483646)
10990(SUBPARTITION subpart41, SUBPARTITION subpart42));
10991INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10992SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10993WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10994ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
10995INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10996SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10997WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10998# Start usability test (inc/partition_check.inc)
10999create_command
11000SHOW CREATE TABLE t1;
11001Table	Create Table
11002t1	CREATE TABLE `t1` (
11003  `f_int1` int(11) DEFAULT 0,
11004  `f_int2` int(11) DEFAULT 0,
11005  `f_char1` char(20) DEFAULT NULL,
11006  `f_char2` char(20) DEFAULT NULL,
11007  `f_charbig` varchar(1000) DEFAULT NULL,
11008  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11009) ENGINE=InnoDB DEFAULT CHARSET=latin1
11010 PARTITION BY RANGE (`f_int1`)
11011SUBPARTITION BY KEY (`f_int1`)
11012(PARTITION `part1` VALUES LESS THAN (0)
11013 (SUBPARTITION `subpart11` ENGINE = InnoDB,
11014  SUBPARTITION `subpart12` ENGINE = InnoDB),
11015 PARTITION `part2` VALUES LESS THAN (5)
11016 (SUBPARTITION `subpart21` ENGINE = InnoDB,
11017  SUBPARTITION `subpart22` ENGINE = InnoDB),
11018 PARTITION `part3` VALUES LESS THAN (10)
11019 (SUBPARTITION `subpart31` ENGINE = InnoDB,
11020  SUBPARTITION `subpart32` ENGINE = InnoDB),
11021 PARTITION `part4` VALUES LESS THAN (2147483646)
11022 (SUBPARTITION `subpart41` ENGINE = InnoDB,
11023  SUBPARTITION `subpart42` ENGINE = InnoDB))
11024
11025# check prerequisites-1 success:    1
11026# check COUNT(*) success:    1
11027# check MIN/MAX(f_int1) success:    1
11028# check MIN/MAX(f_int2) success:    1
11029INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11030SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11031CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11032WHERE f_int1 IN (2,3);
11033ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11034# check prerequisites-3 success:    1
11035# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11036INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11037SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11038CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11039WHERE f_int1 IN (2,3);
11040DELETE FROM t1 WHERE f_charbig = 'delete me';
11041INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11042SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11043CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11044WHERE f_int1 IN (2,3);
11045DELETE FROM t1 WHERE f_charbig = 'delete me';
11046# check read via f_int1 success: 1
11047# check read via f_int2 success: 1
11048
11049# check multiple-1 success: 	1
11050DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11051
11052# check multiple-2 success: 	1
11053INSERT INTO t1 SELECT * FROM t0_template
11054WHERE MOD(f_int1,3) = 0;
11055
11056# check multiple-3 success: 	1
11057UPDATE t1 SET f_int1 = f_int1 + @max_row
11058WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11059AND @max_row_div2 + @max_row_div4;
11060
11061# check multiple-4 success: 	1
11062DELETE FROM t1
11063WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11064AND @max_row_div2 + @max_row_div4 + @max_row;
11065
11066# check multiple-5 success: 	1
11067SELECT COUNT(*) INTO @try_count FROM t0_template
11068WHERE MOD(f_int1,3) = 0
11069AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11070SELECT COUNT(*) INTO @clash_count
11071FROM t1 INNER JOIN t0_template USING(f_int1)
11072WHERE MOD(f_int1,3) = 0
11073AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11074SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11075INSERT INTO t1
11076SET f_int1 = @cur_value , f_int2 = @cur_value,
11077f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11078f_charbig = '#SINGLE#';
11079
11080# check single-1 success: 	1
11081SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11082INSERT INTO t1
11083SET f_int1 = @cur_value , f_int2 = @cur_value,
11084f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11085f_charbig = '#SINGLE#';
11086
11087# check single-2 success: 	1
11088SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11089SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11090UPDATE t1 SET f_int1 = @cur_value2
11091WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11092
11093# check single-3 success: 	1
11094SET @cur_value1= -1;
11095SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11096UPDATE t1 SET f_int1 = @cur_value1
11097WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11098
11099# check single-4 success: 	1
11100SELECT MAX(f_int1) INTO @cur_value FROM t1;
11101DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11102
11103# check single-5 success: 	1
11104DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11105
11106# check single-6 success: 	1
11107INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11108ERROR HY000: Table has no partition for value 2147483647
11109DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11110INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11111f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11112f_charbig = '#NULL#';
11113INSERT INTO t1
11114SET f_int1 = NULL , f_int2 = -@max_row,
11115f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11116f_charbig = '#NULL#';
11117# check null success:    1
11118
11119# check null-1 success: 	1
11120UPDATE t1 SET f_int1 = -@max_row
11121WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11122AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11123
11124# check null-2 success: 	1
11125UPDATE t1 SET f_int1 = NULL
11126WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11127AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11128
11129# check null-3 success: 	1
11130DELETE FROM t1
11131WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11132AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11133
11134# check null-4 success: 	1
11135DELETE FROM t1
11136WHERE f_int1 = 0 AND f_int2 = 0
11137AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11138AND f_charbig = '#NULL#';
11139INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11140SELECT f_int1, f_int1, '', '', 'was inserted'
11141   FROM t0_template source_tab
11142WHERE MOD(f_int1,3) = 0
11143AND f_int1 BETWEEN @max_row_div2 AND @max_row
11144ON DUPLICATE KEY
11145UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11146f_int2 = 2 * @max_row + source_tab.f_int1,
11147f_charbig = 'was updated';
11148
11149# check unique-1-a success: 	1
11150
11151# check unique-1-b success: 	1
11152DELETE FROM t1 WHERE f_charbig = 'was inserted';
11153UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11154f_int2 = CAST(f_char1 AS SIGNED INT),
11155f_charbig = CONCAT('===',f_char1,'===')
11156WHERE f_charbig = 'was updated';
11157REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11158SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11159   FROM t0_template source_tab
11160WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11161
11162# check replace success: 	1
11163DELETE FROM t1
11164WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11165DELETE FROM t1
11166WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11167f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11168UPDATE t1 SET f_int2 = f_int1,
11169f_char1 = CAST(f_int1 AS CHAR),
11170f_char2 = CAST(f_int1 AS CHAR),
11171f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11172WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11173SET AUTOCOMMIT= 0;
11174INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11175SELECT f_int1, f_int1, '', '', 'was inserted'
11176FROM t0_template source_tab
11177WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11178
11179# check transactions-1 success: 	1
11180COMMIT WORK;
11181
11182# check transactions-2 success: 	1
11183ROLLBACK WORK;
11184
11185# check transactions-3 success: 	1
11186DELETE FROM t1 WHERE f_charbig = 'was inserted';
11187COMMIT WORK;
11188ROLLBACK WORK;
11189
11190# check transactions-4 success: 	1
11191INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11192SELECT f_int1, f_int1, '', '', 'was inserted'
11193FROM t0_template source_tab
11194WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11195
11196# check transactions-5 success: 	1
11197ROLLBACK WORK;
11198
11199# check transactions-6 success: 	1
11200# INFO: Storage engine used for t1 seems to be transactional.
11201COMMIT;
11202
11203# check transactions-7 success: 	1
11204DELETE FROM t1 WHERE f_charbig = 'was inserted';
11205COMMIT WORK;
11206SET @@session.sql_mode = 'traditional';
11207SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11208INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11209SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11210'', '', 'was inserted' FROM t0_template
11211WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11212ERROR 22012: Division by 0
11213COMMIT;
11214
11215# check transactions-8 success: 	1
11216# INFO: Storage engine used for t1 seems to be able to revert
11217#       changes made by the failing statement.
11218SET @@session.sql_mode = '';
11219SET AUTOCOMMIT= 1;
11220DELETE FROM t1 WHERE f_charbig = 'was inserted';
11221COMMIT WORK;
11222UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11223
11224# check special-1 success: 	1
11225UPDATE t1 SET f_charbig = '';
11226
11227# check special-2 success: 	1
11228UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11229INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11230SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11231WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11232INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11233SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11234'just inserted' FROM t0_template
11235WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11236CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11237BEGIN
11238UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11239f_charbig = 'updated by trigger'
11240      WHERE f_int1 = new.f_int1;
11241END|
11242INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11243SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11245
11246# check trigger-1 success: 	1
11247DROP TRIGGER trg_1;
11248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11249f_int2 = CAST(f_char1 AS SIGNED INT),
11250f_charbig = 'just inserted'
11251   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11252DELETE FROM t0_aux
11253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11255SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11256'just inserted' FROM t0_template
11257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11258CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11259BEGIN
11260UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11261f_charbig = 'updated by trigger'
11262      WHERE f_int1 = new.f_int1;
11263END|
11264INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11265SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11266WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11267
11268# check trigger-2 success: 	1
11269DROP TRIGGER trg_1;
11270UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11271f_int2 = CAST(f_char1 AS SIGNED INT),
11272f_charbig = 'just inserted'
11273   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11274DELETE FROM t0_aux
11275WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11276INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11277SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11278'just inserted' FROM t0_template
11279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11280CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11281BEGIN
11282UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11283f_charbig = 'updated by trigger'
11284      WHERE f_int1 = new.f_int1;
11285END|
11286UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11287WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11288
11289# check trigger-3 success: 	1
11290DROP TRIGGER trg_1;
11291UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11292f_int2 = CAST(f_char1 AS SIGNED INT),
11293f_charbig = 'just inserted'
11294   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11295DELETE FROM t0_aux
11296WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11297INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11298SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11299'just inserted' FROM t0_template
11300WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11301CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11302BEGIN
11303UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11304f_charbig = 'updated by trigger'
11305      WHERE f_int1 = - old.f_int1;
11306END|
11307UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11308WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11309
11310# check trigger-4 success: 	1
11311DROP TRIGGER trg_1;
11312UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11313f_int2 = CAST(f_char1 AS SIGNED INT),
11314f_charbig = 'just inserted'
11315   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11316DELETE FROM t0_aux
11317WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11318INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11319SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11320'just inserted' FROM t0_template
11321WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11322CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11323BEGIN
11324UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11325f_charbig = 'updated by trigger'
11326      WHERE f_int1 = new.f_int1;
11327END|
11328UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11329WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11330
11331# check trigger-5 success: 	1
11332DROP TRIGGER trg_1;
11333UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11334f_int2 = CAST(f_char1 AS SIGNED INT),
11335f_charbig = 'just inserted'
11336   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11337DELETE FROM t0_aux
11338WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11339INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11340SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11341'just inserted' FROM t0_template
11342WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11343CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11344BEGIN
11345UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11346f_charbig = 'updated by trigger'
11347      WHERE f_int1 = - old.f_int1;
11348END|
11349UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11350WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11351
11352# check trigger-6 success: 	1
11353DROP TRIGGER trg_1;
11354UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11355f_int2 = CAST(f_char1 AS SIGNED INT),
11356f_charbig = 'just inserted'
11357   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11358DELETE FROM t0_aux
11359WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11360INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11361SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11362'just inserted' FROM t0_template
11363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11364CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11365BEGIN
11366UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11367f_charbig = 'updated by trigger'
11368      WHERE f_int1 = - old.f_int1;
11369END|
11370DELETE FROM t0_aux
11371WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11372
11373# check trigger-7 success: 	1
11374DROP TRIGGER trg_1;
11375UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11376f_int2 = CAST(f_char1 AS SIGNED INT),
11377f_charbig = 'just inserted'
11378   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11379DELETE FROM t0_aux
11380WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11381INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11382SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11383'just inserted' FROM t0_template
11384WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11385CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11386BEGIN
11387UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11388f_charbig = 'updated by trigger'
11389      WHERE f_int1 = - old.f_int1;
11390END|
11391DELETE FROM t0_aux
11392WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11393
11394# check trigger-8 success: 	1
11395DROP TRIGGER trg_1;
11396UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11397f_int2 = CAST(f_char1 AS SIGNED INT),
11398f_charbig = 'just inserted'
11399   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11400DELETE FROM t0_aux
11401WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11402DELETE FROM t1
11403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11404CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11405BEGIN
11406SET new.f_int1 = old.f_int1 + @max_row,
11407new.f_int2 = old.f_int2 - @max_row,
11408new.f_charbig = '####updated per update trigger####';
11409END|
11410UPDATE t1
11411SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11412f_charbig = '####updated per update statement itself####';
11413
11414# check trigger-9 success: 	1
11415DROP TRIGGER trg_2;
11416UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11417f_int2 = CAST(f_char1 AS SIGNED INT),
11418f_charbig = CONCAT('===',f_char1,'===');
11419CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11420BEGIN
11421SET new.f_int1 = new.f_int1 + @max_row,
11422new.f_int2 = new.f_int2 - @max_row,
11423new.f_charbig = '####updated per update trigger####';
11424END|
11425UPDATE t1
11426SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11427f_charbig = '####updated per update statement itself####';
11428
11429# check trigger-10 success: 	1
11430DROP TRIGGER trg_2;
11431UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11432f_int2 = CAST(f_char1 AS SIGNED INT),
11433f_charbig = CONCAT('===',f_char1,'===');
11434CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11435BEGIN
11436SET new.f_int1 = @my_max1 + @counter,
11437new.f_int2 = @my_min2 - @counter,
11438new.f_charbig = '####updated per insert trigger####';
11439SET @counter = @counter + 1;
11440END|
11441SET @counter = 1;
11442SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11443INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11444SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11445CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11446WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11447ORDER BY f_int1;
11448DROP TRIGGER trg_3;
11449
11450# check trigger-11 success: 	1
11451DELETE FROM t1
11452WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11453AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11454AND f_charbig = '####updated per insert trigger####';
11455CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11456BEGIN
11457SET new.f_int1 = @my_max1 + @counter,
11458new.f_int2 = @my_min2 - @counter,
11459new.f_charbig = '####updated per insert trigger####';
11460SET @counter = @counter + 1;
11461END|
11462SET @counter = 1;
11463SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11464INSERT INTO t1 (f_char1, f_char2, f_charbig)
11465SELECT CAST(f_int1 AS CHAR),
11466CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11468ORDER BY f_int1;
11469DROP TRIGGER trg_3;
11470
11471# check trigger-12 success: 	1
11472DELETE FROM t1
11473WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11474AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11475AND f_charbig = '####updated per insert trigger####';
11476ANALYZE  TABLE t1;
11477Table	Op	Msg_type	Msg_text
11478test.t1	analyze	status	OK
11479CHECK    TABLE t1 EXTENDED;
11480Table	Op	Msg_type	Msg_text
11481test.t1	check	status	OK
11482CHECKSUM TABLE t1 EXTENDED;
11483Table	Checksum
11484test.t1	<some_value>
11485OPTIMIZE TABLE t1;
11486Table	Op	Msg_type	Msg_text
11487test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11488test.t1	optimize	status	OK
11489# check layout success:    1
11490REPAIR   TABLE t1 EXTENDED;
11491Table	Op	Msg_type	Msg_text
11492test.t1	repair	status	OK
11493# check layout success:    1
11494TRUNCATE t1;
11495
11496# check TRUNCATE success: 	1
11497# check layout success:    1
11498# End usability test (inc/partition_check.inc)
11499DROP TABLE t1;
11500CREATE TABLE t1 (
11501f_int1 INTEGER DEFAULT 0,
11502f_int2 INTEGER DEFAULT 0,
11503f_char1 CHAR(20),
11504f_char2 CHAR(20),
11505f_charbig VARCHAR(1000)
11506
11507)
11508PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
11509(PARTITION part1 VALUES IN (0)
11510(SUBPARTITION sp11, SUBPARTITION sp12),
11511PARTITION part2 VALUES IN (1)
11512(SUBPARTITION sp21, SUBPARTITION sp22),
11513PARTITION part3 VALUES IN (2)
11514(SUBPARTITION sp31, SUBPARTITION sp32),
11515PARTITION part4 VALUES IN (NULL)
11516(SUBPARTITION sp41, SUBPARTITION sp42));
11517INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11518SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11519WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11520ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
11521INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11522SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11524# Start usability test (inc/partition_check.inc)
11525create_command
11526SHOW CREATE TABLE t1;
11527Table	Create Table
11528t1	CREATE TABLE `t1` (
11529  `f_int1` int(11) DEFAULT 0,
11530  `f_int2` int(11) DEFAULT 0,
11531  `f_char1` char(20) DEFAULT NULL,
11532  `f_char2` char(20) DEFAULT NULL,
11533  `f_charbig` varchar(1000) DEFAULT NULL,
11534  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11535) ENGINE=InnoDB DEFAULT CHARSET=latin1
11536 PARTITION BY LIST (abs(`f_int1` MOD 3))
11537SUBPARTITION BY HASH (`f_int1` + 1)
11538(PARTITION `part1` VALUES IN (0)
11539 (SUBPARTITION `sp11` ENGINE = InnoDB,
11540  SUBPARTITION `sp12` ENGINE = InnoDB),
11541 PARTITION `part2` VALUES IN (1)
11542 (SUBPARTITION `sp21` ENGINE = InnoDB,
11543  SUBPARTITION `sp22` ENGINE = InnoDB),
11544 PARTITION `part3` VALUES IN (2)
11545 (SUBPARTITION `sp31` ENGINE = InnoDB,
11546  SUBPARTITION `sp32` ENGINE = InnoDB),
11547 PARTITION `part4` VALUES IN (NULL)
11548 (SUBPARTITION `sp41` ENGINE = InnoDB,
11549  SUBPARTITION `sp42` ENGINE = InnoDB))
11550
11551# check prerequisites-1 success:    1
11552# check COUNT(*) success:    1
11553# check MIN/MAX(f_int1) success:    1
11554# check MIN/MAX(f_int2) success:    1
11555INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11556SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11557CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11558WHERE f_int1 IN (2,3);
11559ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
11560# check prerequisites-3 success:    1
11561# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11562INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11563SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11564CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11565WHERE f_int1 IN (2,3);
11566DELETE FROM t1 WHERE f_charbig = 'delete me';
11567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11568SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11569CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11570WHERE f_int1 IN (2,3);
11571DELETE FROM t1 WHERE f_charbig = 'delete me';
11572# check read via f_int1 success: 1
11573# check read via f_int2 success: 1
11574
11575# check multiple-1 success: 	1
11576DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11577
11578# check multiple-2 success: 	1
11579INSERT INTO t1 SELECT * FROM t0_template
11580WHERE MOD(f_int1,3) = 0;
11581
11582# check multiple-3 success: 	1
11583UPDATE t1 SET f_int1 = f_int1 + @max_row
11584WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11585AND @max_row_div2 + @max_row_div4;
11586
11587# check multiple-4 success: 	1
11588DELETE FROM t1
11589WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11590AND @max_row_div2 + @max_row_div4 + @max_row;
11591
11592# check multiple-5 success: 	1
11593SELECT COUNT(*) INTO @try_count FROM t0_template
11594WHERE MOD(f_int1,3) = 0
11595AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11596SELECT COUNT(*) INTO @clash_count
11597FROM t1 INNER JOIN t0_template USING(f_int1)
11598WHERE MOD(f_int1,3) = 0
11599AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11600SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11601INSERT INTO t1
11602SET f_int1 = @cur_value , f_int2 = @cur_value,
11603f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11604f_charbig = '#SINGLE#';
11605
11606# check single-1 success: 	1
11607SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11608INSERT INTO t1
11609SET f_int1 = @cur_value , f_int2 = @cur_value,
11610f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11611f_charbig = '#SINGLE#';
11612
11613# check single-2 success: 	1
11614SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11615SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11616UPDATE t1 SET f_int1 = @cur_value2
11617WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11618
11619# check single-3 success: 	1
11620SET @cur_value1= -1;
11621SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11622UPDATE t1 SET f_int1 = @cur_value1
11623WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11624
11625# check single-4 success: 	1
11626SELECT MAX(f_int1) INTO @cur_value FROM t1;
11627DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11628
11629# check single-5 success: 	1
11630DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11631
11632# check single-6 success: 	1
11633INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11634
11635# check single-7 success: 	1
11636DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11637DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11638INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11639f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11640f_charbig = '#NULL#';
11641INSERT INTO t1
11642SET f_int1 = NULL , f_int2 = -@max_row,
11643f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11644f_charbig = '#NULL#';
11645# check null success:    1
11646
11647# check null-1 success: 	1
11648UPDATE t1 SET f_int1 = -@max_row
11649WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11650AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11651
11652# check null-2 success: 	1
11653UPDATE t1 SET f_int1 = NULL
11654WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11655AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11656
11657# check null-3 success: 	1
11658DELETE FROM t1
11659WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
11660AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
11661
11662# check null-4 success: 	1
11663DELETE FROM t1
11664WHERE f_int1 = 0 AND f_int2 = 0
11665AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11666AND f_charbig = '#NULL#';
11667INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11668SELECT f_int1, f_int1, '', '', 'was inserted'
11669   FROM t0_template source_tab
11670WHERE MOD(f_int1,3) = 0
11671AND f_int1 BETWEEN @max_row_div2 AND @max_row
11672ON DUPLICATE KEY
11673UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11674f_int2 = 2 * @max_row + source_tab.f_int1,
11675f_charbig = 'was updated';
11676
11677# check unique-1-a success: 	1
11678
11679# check unique-1-b success: 	1
11680DELETE FROM t1 WHERE f_charbig = 'was inserted';
11681UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11682f_int2 = CAST(f_char1 AS SIGNED INT),
11683f_charbig = CONCAT('===',f_char1,'===')
11684WHERE f_charbig = 'was updated';
11685REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11686SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11687   FROM t0_template source_tab
11688WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11689
11690# check replace success: 	1
11691DELETE FROM t1
11692WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11693DELETE FROM t1
11694WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11695f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11696UPDATE t1 SET f_int2 = f_int1,
11697f_char1 = CAST(f_int1 AS CHAR),
11698f_char2 = CAST(f_int1 AS CHAR),
11699f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11700WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11701SET AUTOCOMMIT= 0;
11702INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11703SELECT f_int1, f_int1, '', '', 'was inserted'
11704FROM t0_template source_tab
11705WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11706
11707# check transactions-1 success: 	1
11708COMMIT WORK;
11709
11710# check transactions-2 success: 	1
11711ROLLBACK WORK;
11712
11713# check transactions-3 success: 	1
11714DELETE FROM t1 WHERE f_charbig = 'was inserted';
11715COMMIT WORK;
11716ROLLBACK WORK;
11717
11718# check transactions-4 success: 	1
11719INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11720SELECT f_int1, f_int1, '', '', 'was inserted'
11721FROM t0_template source_tab
11722WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11723
11724# check transactions-5 success: 	1
11725ROLLBACK WORK;
11726
11727# check transactions-6 success: 	1
11728# INFO: Storage engine used for t1 seems to be transactional.
11729COMMIT;
11730
11731# check transactions-7 success: 	1
11732DELETE FROM t1 WHERE f_charbig = 'was inserted';
11733COMMIT WORK;
11734SET @@session.sql_mode = 'traditional';
11735SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11736INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11737SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11738'', '', 'was inserted' FROM t0_template
11739WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11740ERROR 22012: Division by 0
11741COMMIT;
11742
11743# check transactions-8 success: 	1
11744# INFO: Storage engine used for t1 seems to be able to revert
11745#       changes made by the failing statement.
11746SET @@session.sql_mode = '';
11747SET AUTOCOMMIT= 1;
11748DELETE FROM t1 WHERE f_charbig = 'was inserted';
11749COMMIT WORK;
11750UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11751
11752# check special-1 success: 	1
11753UPDATE t1 SET f_charbig = '';
11754
11755# check special-2 success: 	1
11756UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11757INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11758SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11759WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11760INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11761SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11762'just inserted' FROM t0_template
11763WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11764CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11765BEGIN
11766UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11767f_charbig = 'updated by trigger'
11768      WHERE f_int1 = new.f_int1;
11769END|
11770INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11771SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11773
11774# check trigger-1 success: 	1
11775DROP TRIGGER trg_1;
11776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11777f_int2 = CAST(f_char1 AS SIGNED INT),
11778f_charbig = 'just inserted'
11779   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11780DELETE FROM t0_aux
11781WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11782INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11783SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11784'just inserted' FROM t0_template
11785WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11786CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11787BEGIN
11788UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11789f_charbig = 'updated by trigger'
11790      WHERE f_int1 = new.f_int1;
11791END|
11792INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11793SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11794WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11795
11796# check trigger-2 success: 	1
11797DROP TRIGGER trg_1;
11798UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11799f_int2 = CAST(f_char1 AS SIGNED INT),
11800f_charbig = 'just inserted'
11801   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11802DELETE FROM t0_aux
11803WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11804INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11805SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11806'just inserted' FROM t0_template
11807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11808CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11809BEGIN
11810UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11811f_charbig = 'updated by trigger'
11812      WHERE f_int1 = new.f_int1;
11813END|
11814UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11815WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11816
11817# check trigger-3 success: 	1
11818DROP TRIGGER trg_1;
11819UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11820f_int2 = CAST(f_char1 AS SIGNED INT),
11821f_charbig = 'just inserted'
11822   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11823DELETE FROM t0_aux
11824WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11825INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11826SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11827'just inserted' FROM t0_template
11828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11829CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11830BEGIN
11831UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11832f_charbig = 'updated by trigger'
11833      WHERE f_int1 = - old.f_int1;
11834END|
11835UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11836WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11837
11838# check trigger-4 success: 	1
11839DROP TRIGGER trg_1;
11840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11841f_int2 = CAST(f_char1 AS SIGNED INT),
11842f_charbig = 'just inserted'
11843   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11844DELETE FROM t0_aux
11845WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11846INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11847SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11848'just inserted' FROM t0_template
11849WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11850CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11851BEGIN
11852UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11853f_charbig = 'updated by trigger'
11854      WHERE f_int1 = new.f_int1;
11855END|
11856UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11857WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11858
11859# check trigger-5 success: 	1
11860DROP TRIGGER trg_1;
11861UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11862f_int2 = CAST(f_char1 AS SIGNED INT),
11863f_charbig = 'just inserted'
11864   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11865DELETE FROM t0_aux
11866WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11867INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11868SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11869'just inserted' FROM t0_template
11870WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11871CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11872BEGIN
11873UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11874f_charbig = 'updated by trigger'
11875      WHERE f_int1 = - old.f_int1;
11876END|
11877UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11878WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11879
11880# check trigger-6 success: 	1
11881DROP TRIGGER trg_1;
11882UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11883f_int2 = CAST(f_char1 AS SIGNED INT),
11884f_charbig = 'just inserted'
11885   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11886DELETE FROM t0_aux
11887WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11888INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11889SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11890'just inserted' FROM t0_template
11891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11892CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11893BEGIN
11894UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11895f_charbig = 'updated by trigger'
11896      WHERE f_int1 = - old.f_int1;
11897END|
11898DELETE FROM t0_aux
11899WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11900
11901# check trigger-7 success: 	1
11902DROP TRIGGER trg_1;
11903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11904f_int2 = CAST(f_char1 AS SIGNED INT),
11905f_charbig = 'just inserted'
11906   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11907DELETE FROM t0_aux
11908WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11909INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11910SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11911'just inserted' FROM t0_template
11912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11913CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11914BEGIN
11915UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11916f_charbig = 'updated by trigger'
11917      WHERE f_int1 = - old.f_int1;
11918END|
11919DELETE FROM t0_aux
11920WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11921
11922# check trigger-8 success: 	1
11923DROP TRIGGER trg_1;
11924UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11925f_int2 = CAST(f_char1 AS SIGNED INT),
11926f_charbig = 'just inserted'
11927   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11928DELETE FROM t0_aux
11929WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11930DELETE FROM t1
11931WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11932CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11933BEGIN
11934SET new.f_int1 = old.f_int1 + @max_row,
11935new.f_int2 = old.f_int2 - @max_row,
11936new.f_charbig = '####updated per update trigger####';
11937END|
11938UPDATE t1
11939SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11940f_charbig = '####updated per update statement itself####';
11941
11942# check trigger-9 success: 	1
11943DROP TRIGGER trg_2;
11944UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11945f_int2 = CAST(f_char1 AS SIGNED INT),
11946f_charbig = CONCAT('===',f_char1,'===');
11947CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11948BEGIN
11949SET new.f_int1 = new.f_int1 + @max_row,
11950new.f_int2 = new.f_int2 - @max_row,
11951new.f_charbig = '####updated per update trigger####';
11952END|
11953UPDATE t1
11954SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11955f_charbig = '####updated per update statement itself####';
11956
11957# check trigger-10 success: 	1
11958DROP TRIGGER trg_2;
11959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11960f_int2 = CAST(f_char1 AS SIGNED INT),
11961f_charbig = CONCAT('===',f_char1,'===');
11962CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11963BEGIN
11964SET new.f_int1 = @my_max1 + @counter,
11965new.f_int2 = @my_min2 - @counter,
11966new.f_charbig = '####updated per insert trigger####';
11967SET @counter = @counter + 1;
11968END|
11969SET @counter = 1;
11970SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11971INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11972SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11973CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11974WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11975ORDER BY f_int1;
11976DROP TRIGGER trg_3;
11977
11978# check trigger-11 success: 	1
11979DELETE FROM t1
11980WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11981AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11982AND f_charbig = '####updated per insert trigger####';
11983CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11984BEGIN
11985SET new.f_int1 = @my_max1 + @counter,
11986new.f_int2 = @my_min2 - @counter,
11987new.f_charbig = '####updated per insert trigger####';
11988SET @counter = @counter + 1;
11989END|
11990SET @counter = 1;
11991SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11992INSERT INTO t1 (f_char1, f_char2, f_charbig)
11993SELECT CAST(f_int1 AS CHAR),
11994CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11995WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11996ORDER BY f_int1;
11997DROP TRIGGER trg_3;
11998
11999# check trigger-12 success: 	1
12000DELETE FROM t1
12001WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12002AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12003AND f_charbig = '####updated per insert trigger####';
12004ANALYZE  TABLE t1;
12005Table	Op	Msg_type	Msg_text
12006test.t1	analyze	status	OK
12007CHECK    TABLE t1 EXTENDED;
12008Table	Op	Msg_type	Msg_text
12009test.t1	check	status	OK
12010CHECKSUM TABLE t1 EXTENDED;
12011Table	Checksum
12012test.t1	<some_value>
12013OPTIMIZE TABLE t1;
12014Table	Op	Msg_type	Msg_text
12015test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12016test.t1	optimize	status	OK
12017# check layout success:    1
12018REPAIR   TABLE t1 EXTENDED;
12019Table	Op	Msg_type	Msg_text
12020test.t1	repair	status	OK
12021# check layout success:    1
12022TRUNCATE t1;
12023
12024# check TRUNCATE success: 	1
12025# check layout success:    1
12026# End usability test (inc/partition_check.inc)
12027DROP TABLE t1;
12028CREATE TABLE t1 (
12029f_int1 INTEGER DEFAULT 0,
12030f_int2 INTEGER DEFAULT 0,
12031f_char1 CHAR(20),
12032f_char2 CHAR(20),
12033f_charbig VARCHAR(1000)
12034
12035)
12036PARTITION BY LIST(ABS(MOD(f_int1,2)))
12037SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
12038(PARTITION part1 VALUES IN (0),
12039PARTITION part2 VALUES IN (1),
12040PARTITION part3 VALUES IN (NULL));
12041INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12042SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12043WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12044ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
12045INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12046SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12047WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12048# Start usability test (inc/partition_check.inc)
12049create_command
12050SHOW CREATE TABLE t1;
12051Table	Create Table
12052t1	CREATE TABLE `t1` (
12053  `f_int1` int(11) DEFAULT 0,
12054  `f_int2` int(11) DEFAULT 0,
12055  `f_char1` char(20) DEFAULT NULL,
12056  `f_char2` char(20) DEFAULT NULL,
12057  `f_charbig` varchar(1000) DEFAULT NULL,
12058  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
12059) ENGINE=InnoDB DEFAULT CHARSET=latin1
12060 PARTITION BY LIST (abs(`f_int1` MOD 2))
12061SUBPARTITION BY KEY (`f_int1`)
12062SUBPARTITIONS 3
12063(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB,
12064 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB,
12065 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB)
12066
12067# check prerequisites-1 success:    1
12068# check COUNT(*) success:    1
12069# check MIN/MAX(f_int1) success:    1
12070# check MIN/MAX(f_int2) success:    1
12071INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12072SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12073CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12074WHERE f_int1 IN (2,3);
12075ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12076# check prerequisites-3 success:    1
12077# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12078INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12079SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12080CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12081WHERE f_int1 IN (2,3);
12082DELETE FROM t1 WHERE f_charbig = 'delete me';
12083INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12084SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12085CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12086WHERE f_int1 IN (2,3);
12087DELETE FROM t1 WHERE f_charbig = 'delete me';
12088# check read via f_int1 success: 1
12089# check read via f_int2 success: 1
12090
12091# check multiple-1 success: 	1
12092DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12093
12094# check multiple-2 success: 	1
12095INSERT INTO t1 SELECT * FROM t0_template
12096WHERE MOD(f_int1,3) = 0;
12097
12098# check multiple-3 success: 	1
12099UPDATE t1 SET f_int1 = f_int1 + @max_row
12100WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12101AND @max_row_div2 + @max_row_div4;
12102
12103# check multiple-4 success: 	1
12104DELETE FROM t1
12105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12106AND @max_row_div2 + @max_row_div4 + @max_row;
12107
12108# check multiple-5 success: 	1
12109SELECT COUNT(*) INTO @try_count FROM t0_template
12110WHERE MOD(f_int1,3) = 0
12111AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12112SELECT COUNT(*) INTO @clash_count
12113FROM t1 INNER JOIN t0_template USING(f_int1)
12114WHERE MOD(f_int1,3) = 0
12115AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12116SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12117INSERT INTO t1
12118SET f_int1 = @cur_value , f_int2 = @cur_value,
12119f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12120f_charbig = '#SINGLE#';
12121
12122# check single-1 success: 	1
12123SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12124INSERT INTO t1
12125SET f_int1 = @cur_value , f_int2 = @cur_value,
12126f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12127f_charbig = '#SINGLE#';
12128
12129# check single-2 success: 	1
12130SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12131SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12132UPDATE t1 SET f_int1 = @cur_value2
12133WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12134
12135# check single-3 success: 	1
12136SET @cur_value1= -1;
12137SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12138UPDATE t1 SET f_int1 = @cur_value1
12139WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12140
12141# check single-4 success: 	1
12142SELECT MAX(f_int1) INTO @cur_value FROM t1;
12143DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12144
12145# check single-5 success: 	1
12146DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12147
12148# check single-6 success: 	1
12149INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12150
12151# check single-7 success: 	1
12152DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12153DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12154INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12155f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12156f_charbig = '#NULL#';
12157INSERT INTO t1
12158SET f_int1 = NULL , f_int2 = -@max_row,
12159f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12160f_charbig = '#NULL#';
12161# check null success:    1
12162
12163# check null-1 success: 	1
12164UPDATE t1 SET f_int1 = -@max_row
12165WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12166AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12167
12168# check null-2 success: 	1
12169UPDATE t1 SET f_int1 = NULL
12170WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12171AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12172
12173# check null-3 success: 	1
12174DELETE FROM t1
12175WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12176AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12177
12178# check null-4 success: 	1
12179DELETE FROM t1
12180WHERE f_int1 = 0 AND f_int2 = 0
12181AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12182AND f_charbig = '#NULL#';
12183INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12184SELECT f_int1, f_int1, '', '', 'was inserted'
12185   FROM t0_template source_tab
12186WHERE MOD(f_int1,3) = 0
12187AND f_int1 BETWEEN @max_row_div2 AND @max_row
12188ON DUPLICATE KEY
12189UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12190f_int2 = 2 * @max_row + source_tab.f_int1,
12191f_charbig = 'was updated';
12192
12193# check unique-1-a success: 	1
12194
12195# check unique-1-b success: 	1
12196DELETE FROM t1 WHERE f_charbig = 'was inserted';
12197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12198f_int2 = CAST(f_char1 AS SIGNED INT),
12199f_charbig = CONCAT('===',f_char1,'===')
12200WHERE f_charbig = 'was updated';
12201REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12202SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12203   FROM t0_template source_tab
12204WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12205
12206# check replace success: 	1
12207DELETE FROM t1
12208WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12209DELETE FROM t1
12210WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12211f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12212UPDATE t1 SET f_int2 = f_int1,
12213f_char1 = CAST(f_int1 AS CHAR),
12214f_char2 = CAST(f_int1 AS CHAR),
12215f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12216WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12217SET AUTOCOMMIT= 0;
12218INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12219SELECT f_int1, f_int1, '', '', 'was inserted'
12220FROM t0_template source_tab
12221WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12222
12223# check transactions-1 success: 	1
12224COMMIT WORK;
12225
12226# check transactions-2 success: 	1
12227ROLLBACK WORK;
12228
12229# check transactions-3 success: 	1
12230DELETE FROM t1 WHERE f_charbig = 'was inserted';
12231COMMIT WORK;
12232ROLLBACK WORK;
12233
12234# check transactions-4 success: 	1
12235INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12236SELECT f_int1, f_int1, '', '', 'was inserted'
12237FROM t0_template source_tab
12238WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12239
12240# check transactions-5 success: 	1
12241ROLLBACK WORK;
12242
12243# check transactions-6 success: 	1
12244# INFO: Storage engine used for t1 seems to be transactional.
12245COMMIT;
12246
12247# check transactions-7 success: 	1
12248DELETE FROM t1 WHERE f_charbig = 'was inserted';
12249COMMIT WORK;
12250SET @@session.sql_mode = 'traditional';
12251SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12253SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12254'', '', 'was inserted' FROM t0_template
12255WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12256ERROR 22012: Division by 0
12257COMMIT;
12258
12259# check transactions-8 success: 	1
12260# INFO: Storage engine used for t1 seems to be able to revert
12261#       changes made by the failing statement.
12262SET @@session.sql_mode = '';
12263SET AUTOCOMMIT= 1;
12264DELETE FROM t1 WHERE f_charbig = 'was inserted';
12265COMMIT WORK;
12266UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12267
12268# check special-1 success: 	1
12269UPDATE t1 SET f_charbig = '';
12270
12271# check special-2 success: 	1
12272UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12273INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12274SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12275WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12276INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12277SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12278'just inserted' FROM t0_template
12279WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12280CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12281BEGIN
12282UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12283f_charbig = 'updated by trigger'
12284      WHERE f_int1 = new.f_int1;
12285END|
12286INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12287SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12289
12290# check trigger-1 success: 	1
12291DROP TRIGGER trg_1;
12292UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12293f_int2 = CAST(f_char1 AS SIGNED INT),
12294f_charbig = 'just inserted'
12295   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12296DELETE FROM t0_aux
12297WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12298INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12299SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12300'just inserted' FROM t0_template
12301WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12302CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12303BEGIN
12304UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12305f_charbig = 'updated by trigger'
12306      WHERE f_int1 = new.f_int1;
12307END|
12308INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12309SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12311
12312# check trigger-2 success: 	1
12313DROP TRIGGER trg_1;
12314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12315f_int2 = CAST(f_char1 AS SIGNED INT),
12316f_charbig = 'just inserted'
12317   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12318DELETE FROM t0_aux
12319WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12320INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12321SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12322'just inserted' FROM t0_template
12323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12324CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12325BEGIN
12326UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12327f_charbig = 'updated by trigger'
12328      WHERE f_int1 = new.f_int1;
12329END|
12330UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12331WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12332
12333# check trigger-3 success: 	1
12334DROP TRIGGER trg_1;
12335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12336f_int2 = CAST(f_char1 AS SIGNED INT),
12337f_charbig = 'just inserted'
12338   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12339DELETE FROM t0_aux
12340WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12341INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12342SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12343'just inserted' FROM t0_template
12344WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12345CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12346BEGIN
12347UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12348f_charbig = 'updated by trigger'
12349      WHERE f_int1 = - old.f_int1;
12350END|
12351UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12352WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12353
12354# check trigger-4 success: 	1
12355DROP TRIGGER trg_1;
12356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12357f_int2 = CAST(f_char1 AS SIGNED INT),
12358f_charbig = 'just inserted'
12359   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12360DELETE FROM t0_aux
12361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12363SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12364'just inserted' FROM t0_template
12365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12366CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12367BEGIN
12368UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12369f_charbig = 'updated by trigger'
12370      WHERE f_int1 = new.f_int1;
12371END|
12372UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12373WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12374
12375# check trigger-5 success: 	1
12376DROP TRIGGER trg_1;
12377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12378f_int2 = CAST(f_char1 AS SIGNED INT),
12379f_charbig = 'just inserted'
12380   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12381DELETE FROM t0_aux
12382WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12383INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12384SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12385'just inserted' FROM t0_template
12386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12387CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12388BEGIN
12389UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12390f_charbig = 'updated by trigger'
12391      WHERE f_int1 = - old.f_int1;
12392END|
12393UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12394WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12395
12396# check trigger-6 success: 	1
12397DROP TRIGGER trg_1;
12398UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12399f_int2 = CAST(f_char1 AS SIGNED INT),
12400f_charbig = 'just inserted'
12401   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12402DELETE FROM t0_aux
12403WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12404INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12405SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12406'just inserted' FROM t0_template
12407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12408CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12409BEGIN
12410UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12411f_charbig = 'updated by trigger'
12412      WHERE f_int1 = - old.f_int1;
12413END|
12414DELETE FROM t0_aux
12415WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12416
12417# check trigger-7 success: 	1
12418DROP TRIGGER trg_1;
12419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12420f_int2 = CAST(f_char1 AS SIGNED INT),
12421f_charbig = 'just inserted'
12422   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12423DELETE FROM t0_aux
12424WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12427'just inserted' FROM t0_template
12428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12429CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12430BEGIN
12431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12432f_charbig = 'updated by trigger'
12433      WHERE f_int1 = - old.f_int1;
12434END|
12435DELETE FROM t0_aux
12436WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12437
12438# check trigger-8 success: 	1
12439DROP TRIGGER trg_1;
12440UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12441f_int2 = CAST(f_char1 AS SIGNED INT),
12442f_charbig = 'just inserted'
12443   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12444DELETE FROM t0_aux
12445WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12446DELETE FROM t1
12447WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12448CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12449BEGIN
12450SET new.f_int1 = old.f_int1 + @max_row,
12451new.f_int2 = old.f_int2 - @max_row,
12452new.f_charbig = '####updated per update trigger####';
12453END|
12454UPDATE t1
12455SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12456f_charbig = '####updated per update statement itself####';
12457
12458# check trigger-9 success: 	1
12459DROP TRIGGER trg_2;
12460UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12461f_int2 = CAST(f_char1 AS SIGNED INT),
12462f_charbig = CONCAT('===',f_char1,'===');
12463CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12464BEGIN
12465SET new.f_int1 = new.f_int1 + @max_row,
12466new.f_int2 = new.f_int2 - @max_row,
12467new.f_charbig = '####updated per update trigger####';
12468END|
12469UPDATE t1
12470SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12471f_charbig = '####updated per update statement itself####';
12472
12473# check trigger-10 success: 	1
12474DROP TRIGGER trg_2;
12475UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12476f_int2 = CAST(f_char1 AS SIGNED INT),
12477f_charbig = CONCAT('===',f_char1,'===');
12478CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12479BEGIN
12480SET new.f_int1 = @my_max1 + @counter,
12481new.f_int2 = @my_min2 - @counter,
12482new.f_charbig = '####updated per insert trigger####';
12483SET @counter = @counter + 1;
12484END|
12485SET @counter = 1;
12486SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12487INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12488SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12489CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12490WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12491ORDER BY f_int1;
12492DROP TRIGGER trg_3;
12493
12494# check trigger-11 success: 	1
12495DELETE FROM t1
12496WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12497AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12498AND f_charbig = '####updated per insert trigger####';
12499CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12500BEGIN
12501SET new.f_int1 = @my_max1 + @counter,
12502new.f_int2 = @my_min2 - @counter,
12503new.f_charbig = '####updated per insert trigger####';
12504SET @counter = @counter + 1;
12505END|
12506SET @counter = 1;
12507SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12508INSERT INTO t1 (f_char1, f_char2, f_charbig)
12509SELECT CAST(f_int1 AS CHAR),
12510CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12511WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12512ORDER BY f_int1;
12513DROP TRIGGER trg_3;
12514
12515# check trigger-12 success: 	1
12516DELETE FROM t1
12517WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12518AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12519AND f_charbig = '####updated per insert trigger####';
12520ANALYZE  TABLE t1;
12521Table	Op	Msg_type	Msg_text
12522test.t1	analyze	status	OK
12523CHECK    TABLE t1 EXTENDED;
12524Table	Op	Msg_type	Msg_text
12525test.t1	check	status	OK
12526CHECKSUM TABLE t1 EXTENDED;
12527Table	Checksum
12528test.t1	<some_value>
12529OPTIMIZE TABLE t1;
12530Table	Op	Msg_type	Msg_text
12531test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12532test.t1	optimize	status	OK
12533# check layout success:    1
12534REPAIR   TABLE t1 EXTENDED;
12535Table	Op	Msg_type	Msg_text
12536test.t1	repair	status	OK
12537# check layout success:    1
12538TRUNCATE t1;
12539
12540# check TRUNCATE success: 	1
12541# check layout success:    1
12542# End usability test (inc/partition_check.inc)
12543DROP TABLE t1;
12544DROP TABLE IF EXISTS t1;
12545CREATE TABLE t1 (
12546f_int1 INTEGER DEFAULT 0,
12547f_int2 INTEGER DEFAULT 0,
12548f_char1 CHAR(20),
12549f_char2 CHAR(20),
12550f_charbig VARCHAR(1000)
12551
12552)
12553PARTITION BY HASH(f_int1) PARTITIONS 2;
12554INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12555SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12556WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12557ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
12558INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12559SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12560WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12561# Start usability test (inc/partition_check.inc)
12562create_command
12563SHOW CREATE TABLE t1;
12564Table	Create Table
12565t1	CREATE TABLE `t1` (
12566  `f_int1` int(11) DEFAULT 0,
12567  `f_int2` int(11) DEFAULT 0,
12568  `f_char1` char(20) DEFAULT NULL,
12569  `f_char2` char(20) DEFAULT NULL,
12570  `f_charbig` varchar(1000) DEFAULT NULL,
12571  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12572) ENGINE=InnoDB DEFAULT CHARSET=latin1
12573 PARTITION BY HASH (`f_int1`)
12574PARTITIONS 2
12575
12576# check prerequisites-1 success:    1
12577# check COUNT(*) success:    1
12578# check MIN/MAX(f_int1) success:    1
12579# check MIN/MAX(f_int2) success:    1
12580INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12581SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12582CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12583WHERE f_int1 IN (2,3);
12584ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
12585# check prerequisites-3 success:    1
12586# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12587INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12588SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12589CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12590WHERE f_int1 IN (2,3);
12591DELETE FROM t1 WHERE f_charbig = 'delete me';
12592INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12593SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12594CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12595WHERE f_int1 IN (2,3);
12596DELETE FROM t1 WHERE f_charbig = 'delete me';
12597# check read via f_int1 success: 1
12598# check read via f_int2 success: 1
12599
12600# check multiple-1 success: 	1
12601DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12602
12603# check multiple-2 success: 	1
12604INSERT INTO t1 SELECT * FROM t0_template
12605WHERE MOD(f_int1,3) = 0;
12606
12607# check multiple-3 success: 	1
12608UPDATE t1 SET f_int1 = f_int1 + @max_row
12609WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12610AND @max_row_div2 + @max_row_div4;
12611
12612# check multiple-4 success: 	1
12613DELETE FROM t1
12614WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12615AND @max_row_div2 + @max_row_div4 + @max_row;
12616
12617# check multiple-5 success: 	1
12618SELECT COUNT(*) INTO @try_count FROM t0_template
12619WHERE MOD(f_int1,3) = 0
12620AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12621SELECT COUNT(*) INTO @clash_count
12622FROM t1 INNER JOIN t0_template USING(f_int1)
12623WHERE MOD(f_int1,3) = 0
12624AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12625SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12626INSERT INTO t1
12627SET f_int1 = @cur_value , f_int2 = @cur_value,
12628f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12629f_charbig = '#SINGLE#';
12630
12631# check single-1 success: 	1
12632SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12633INSERT INTO t1
12634SET f_int1 = @cur_value , f_int2 = @cur_value,
12635f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12636f_charbig = '#SINGLE#';
12637
12638# check single-2 success: 	1
12639SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12640SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12641UPDATE t1 SET f_int1 = @cur_value2
12642WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12643
12644# check single-3 success: 	1
12645SET @cur_value1= -1;
12646SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12647UPDATE t1 SET f_int1 = @cur_value1
12648WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12649
12650# check single-4 success: 	1
12651SELECT MAX(f_int1) INTO @cur_value FROM t1;
12652DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12653
12654# check single-5 success: 	1
12655DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12656
12657# check single-6 success: 	1
12658INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12659
12660# check single-7 success: 	1
12661DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12662DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12663INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12664f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12665f_charbig = '#NULL#';
12666INSERT INTO t1
12667SET f_int1 = NULL , f_int2 = -@max_row,
12668f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12669f_charbig = '#NULL#';
12670# check null success:    1
12671
12672# check null-1 success: 	1
12673UPDATE t1 SET f_int1 = -@max_row
12674WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12675AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12676
12677# check null-2 success: 	1
12678UPDATE t1 SET f_int1 = NULL
12679WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12680AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12681
12682# check null-3 success: 	1
12683DELETE FROM t1
12684WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12685AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12686
12687# check null-4 success: 	1
12688DELETE FROM t1
12689WHERE f_int1 = 0 AND f_int2 = 0
12690AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12691AND f_charbig = '#NULL#';
12692INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12693SELECT f_int1, f_int1, '', '', 'was inserted'
12694   FROM t0_template source_tab
12695WHERE MOD(f_int1,3) = 0
12696AND f_int1 BETWEEN @max_row_div2 AND @max_row
12697ON DUPLICATE KEY
12698UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12699f_int2 = 2 * @max_row + source_tab.f_int1,
12700f_charbig = 'was updated';
12701
12702# check unique-1-a success: 	1
12703
12704# check unique-1-b success: 	1
12705DELETE FROM t1 WHERE f_charbig = 'was inserted';
12706UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12707f_int2 = CAST(f_char1 AS SIGNED INT),
12708f_charbig = CONCAT('===',f_char1,'===')
12709WHERE f_charbig = 'was updated';
12710REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12711SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12712   FROM t0_template source_tab
12713WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12714
12715# check replace success: 	1
12716DELETE FROM t1
12717WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12718DELETE FROM t1
12719WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12720f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12721UPDATE t1 SET f_int2 = f_int1,
12722f_char1 = CAST(f_int1 AS CHAR),
12723f_char2 = CAST(f_int1 AS CHAR),
12724f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12725WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12726SET AUTOCOMMIT= 0;
12727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12728SELECT f_int1, f_int1, '', '', 'was inserted'
12729FROM t0_template source_tab
12730WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12731
12732# check transactions-1 success: 	1
12733COMMIT WORK;
12734
12735# check transactions-2 success: 	1
12736ROLLBACK WORK;
12737
12738# check transactions-3 success: 	1
12739DELETE FROM t1 WHERE f_charbig = 'was inserted';
12740COMMIT WORK;
12741ROLLBACK WORK;
12742
12743# check transactions-4 success: 	1
12744INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12745SELECT f_int1, f_int1, '', '', 'was inserted'
12746FROM t0_template source_tab
12747WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12748
12749# check transactions-5 success: 	1
12750ROLLBACK WORK;
12751
12752# check transactions-6 success: 	1
12753# INFO: Storage engine used for t1 seems to be transactional.
12754COMMIT;
12755
12756# check transactions-7 success: 	1
12757DELETE FROM t1 WHERE f_charbig = 'was inserted';
12758COMMIT WORK;
12759SET @@session.sql_mode = 'traditional';
12760SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12761INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12762SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12763'', '', 'was inserted' FROM t0_template
12764WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12765ERROR 22012: Division by 0
12766COMMIT;
12767
12768# check transactions-8 success: 	1
12769# INFO: Storage engine used for t1 seems to be able to revert
12770#       changes made by the failing statement.
12771SET @@session.sql_mode = '';
12772SET AUTOCOMMIT= 1;
12773DELETE FROM t1 WHERE f_charbig = 'was inserted';
12774COMMIT WORK;
12775UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12776
12777# check special-1 success: 	1
12778UPDATE t1 SET f_charbig = '';
12779
12780# check special-2 success: 	1
12781UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12782INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12783SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12784WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12785INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12786SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12787'just inserted' FROM t0_template
12788WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12789CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12790BEGIN
12791UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12792f_charbig = 'updated by trigger'
12793      WHERE f_int1 = new.f_int1;
12794END|
12795INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12796SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12797WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12798
12799# check trigger-1 success: 	1
12800DROP TRIGGER trg_1;
12801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12802f_int2 = CAST(f_char1 AS SIGNED INT),
12803f_charbig = 'just inserted'
12804   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12805DELETE FROM t0_aux
12806WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12807INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12808SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12809'just inserted' FROM t0_template
12810WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12811CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12812BEGIN
12813UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12814f_charbig = 'updated by trigger'
12815      WHERE f_int1 = new.f_int1;
12816END|
12817INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12818SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12820
12821# check trigger-2 success: 	1
12822DROP TRIGGER trg_1;
12823UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12824f_int2 = CAST(f_char1 AS SIGNED INT),
12825f_charbig = 'just inserted'
12826   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12827DELETE FROM t0_aux
12828WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12829INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12830SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12831'just inserted' FROM t0_template
12832WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12833CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12834BEGIN
12835UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12836f_charbig = 'updated by trigger'
12837      WHERE f_int1 = new.f_int1;
12838END|
12839UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12840WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12841
12842# check trigger-3 success: 	1
12843DROP TRIGGER trg_1;
12844UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12845f_int2 = CAST(f_char1 AS SIGNED INT),
12846f_charbig = 'just inserted'
12847   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12848DELETE FROM t0_aux
12849WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12850INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12851SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12852'just inserted' FROM t0_template
12853WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12854CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12855BEGIN
12856UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12857f_charbig = 'updated by trigger'
12858      WHERE f_int1 = - old.f_int1;
12859END|
12860UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12861WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12862
12863# check trigger-4 success: 	1
12864DROP TRIGGER trg_1;
12865UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12866f_int2 = CAST(f_char1 AS SIGNED INT),
12867f_charbig = 'just inserted'
12868   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12869DELETE FROM t0_aux
12870WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12871INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12872SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12873'just inserted' FROM t0_template
12874WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12875CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12876BEGIN
12877UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12878f_charbig = 'updated by trigger'
12879      WHERE f_int1 = new.f_int1;
12880END|
12881UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12882WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12883
12884# check trigger-5 success: 	1
12885DROP TRIGGER trg_1;
12886UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12887f_int2 = CAST(f_char1 AS SIGNED INT),
12888f_charbig = 'just inserted'
12889   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12890DELETE FROM t0_aux
12891WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12892INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12893SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12894'just inserted' FROM t0_template
12895WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12896CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12897BEGIN
12898UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12899f_charbig = 'updated by trigger'
12900      WHERE f_int1 = - old.f_int1;
12901END|
12902UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12903WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12904
12905# check trigger-6 success: 	1
12906DROP TRIGGER trg_1;
12907UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12908f_int2 = CAST(f_char1 AS SIGNED INT),
12909f_charbig = 'just inserted'
12910   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12911DELETE FROM t0_aux
12912WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12913INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12914SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12915'just inserted' FROM t0_template
12916WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12917CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12918BEGIN
12919UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12920f_charbig = 'updated by trigger'
12921      WHERE f_int1 = - old.f_int1;
12922END|
12923DELETE FROM t0_aux
12924WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12925
12926# check trigger-7 success: 	1
12927DROP TRIGGER trg_1;
12928UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12929f_int2 = CAST(f_char1 AS SIGNED INT),
12930f_charbig = 'just inserted'
12931   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12932DELETE FROM t0_aux
12933WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12934INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12935SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12936'just inserted' FROM t0_template
12937WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12938CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12939BEGIN
12940UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12941f_charbig = 'updated by trigger'
12942      WHERE f_int1 = - old.f_int1;
12943END|
12944DELETE FROM t0_aux
12945WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12946
12947# check trigger-8 success: 	1
12948DROP TRIGGER trg_1;
12949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12950f_int2 = CAST(f_char1 AS SIGNED INT),
12951f_charbig = 'just inserted'
12952   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12953DELETE FROM t0_aux
12954WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12955DELETE FROM t1
12956WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12957CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12958BEGIN
12959SET new.f_int1 = old.f_int1 + @max_row,
12960new.f_int2 = old.f_int2 - @max_row,
12961new.f_charbig = '####updated per update trigger####';
12962END|
12963UPDATE t1
12964SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12965f_charbig = '####updated per update statement itself####';
12966
12967# check trigger-9 success: 	1
12968DROP TRIGGER trg_2;
12969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12970f_int2 = CAST(f_char1 AS SIGNED INT),
12971f_charbig = CONCAT('===',f_char1,'===');
12972CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12973BEGIN
12974SET new.f_int1 = new.f_int1 + @max_row,
12975new.f_int2 = new.f_int2 - @max_row,
12976new.f_charbig = '####updated per update trigger####';
12977END|
12978UPDATE t1
12979SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12980f_charbig = '####updated per update statement itself####';
12981
12982# check trigger-10 success: 	1
12983DROP TRIGGER trg_2;
12984UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12985f_int2 = CAST(f_char1 AS SIGNED INT),
12986f_charbig = CONCAT('===',f_char1,'===');
12987CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12988BEGIN
12989SET new.f_int1 = @my_max1 + @counter,
12990new.f_int2 = @my_min2 - @counter,
12991new.f_charbig = '####updated per insert trigger####';
12992SET @counter = @counter + 1;
12993END|
12994SET @counter = 1;
12995SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12997SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12998CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12999WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13000ORDER BY f_int1;
13001DROP TRIGGER trg_3;
13002
13003# check trigger-11 success: 	1
13004DELETE FROM t1
13005WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13006AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13007AND f_charbig = '####updated per insert trigger####';
13008CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13009BEGIN
13010SET new.f_int1 = @my_max1 + @counter,
13011new.f_int2 = @my_min2 - @counter,
13012new.f_charbig = '####updated per insert trigger####';
13013SET @counter = @counter + 1;
13014END|
13015SET @counter = 1;
13016SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13017INSERT INTO t1 (f_char1, f_char2, f_charbig)
13018SELECT CAST(f_int1 AS CHAR),
13019CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13020WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13021ORDER BY f_int1;
13022DROP TRIGGER trg_3;
13023
13024# check trigger-12 success: 	1
13025DELETE FROM t1
13026WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13027AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13028AND f_charbig = '####updated per insert trigger####';
13029ANALYZE  TABLE t1;
13030Table	Op	Msg_type	Msg_text
13031test.t1	analyze	status	OK
13032CHECK    TABLE t1 EXTENDED;
13033Table	Op	Msg_type	Msg_text
13034test.t1	check	status	OK
13035CHECKSUM TABLE t1 EXTENDED;
13036Table	Checksum
13037test.t1	<some_value>
13038OPTIMIZE TABLE t1;
13039Table	Op	Msg_type	Msg_text
13040test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13041test.t1	optimize	status	OK
13042# check layout success:    1
13043REPAIR   TABLE t1 EXTENDED;
13044Table	Op	Msg_type	Msg_text
13045test.t1	repair	status	OK
13046# check layout success:    1
13047TRUNCATE t1;
13048
13049# check TRUNCATE success: 	1
13050# check layout success:    1
13051# End usability test (inc/partition_check.inc)
13052DROP TABLE t1;
13053CREATE TABLE t1 (
13054f_int1 INTEGER DEFAULT 0,
13055f_int2 INTEGER DEFAULT 0,
13056f_char1 CHAR(20),
13057f_char2 CHAR(20),
13058f_charbig VARCHAR(1000)
13059
13060)
13061PARTITION BY KEY(f_int1) PARTITIONS 5;
13062INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13063SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13064WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13065ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
13066INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13067SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13068WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13069# Start usability test (inc/partition_check.inc)
13070create_command
13071SHOW CREATE TABLE t1;
13072Table	Create Table
13073t1	CREATE TABLE `t1` (
13074  `f_int1` int(11) DEFAULT 0,
13075  `f_int2` int(11) DEFAULT 0,
13076  `f_char1` char(20) DEFAULT NULL,
13077  `f_char2` char(20) DEFAULT NULL,
13078  `f_charbig` varchar(1000) DEFAULT NULL,
13079  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13080) ENGINE=InnoDB DEFAULT CHARSET=latin1
13081 PARTITION BY KEY (`f_int1`)
13082PARTITIONS 5
13083
13084# check prerequisites-1 success:    1
13085# check COUNT(*) success:    1
13086# check MIN/MAX(f_int1) success:    1
13087# check MIN/MAX(f_int2) success:    1
13088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13089SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13090CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13091WHERE f_int1 IN (2,3);
13092ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13093# check prerequisites-3 success:    1
13094# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13096SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13097CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13098WHERE f_int1 IN (2,3);
13099DELETE FROM t1 WHERE f_charbig = 'delete me';
13100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13101SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13102CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13103WHERE f_int1 IN (2,3);
13104DELETE FROM t1 WHERE f_charbig = 'delete me';
13105# check read via f_int1 success: 1
13106# check read via f_int2 success: 1
13107
13108# check multiple-1 success: 	1
13109DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13110
13111# check multiple-2 success: 	1
13112INSERT INTO t1 SELECT * FROM t0_template
13113WHERE MOD(f_int1,3) = 0;
13114
13115# check multiple-3 success: 	1
13116UPDATE t1 SET f_int1 = f_int1 + @max_row
13117WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13118AND @max_row_div2 + @max_row_div4;
13119
13120# check multiple-4 success: 	1
13121DELETE FROM t1
13122WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13123AND @max_row_div2 + @max_row_div4 + @max_row;
13124
13125# check multiple-5 success: 	1
13126SELECT COUNT(*) INTO @try_count FROM t0_template
13127WHERE MOD(f_int1,3) = 0
13128AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13129SELECT COUNT(*) INTO @clash_count
13130FROM t1 INNER JOIN t0_template USING(f_int1)
13131WHERE MOD(f_int1,3) = 0
13132AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13133SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13134INSERT INTO t1
13135SET f_int1 = @cur_value , f_int2 = @cur_value,
13136f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13137f_charbig = '#SINGLE#';
13138
13139# check single-1 success: 	1
13140SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13141INSERT INTO t1
13142SET f_int1 = @cur_value , f_int2 = @cur_value,
13143f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13144f_charbig = '#SINGLE#';
13145
13146# check single-2 success: 	1
13147SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13148SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13149UPDATE t1 SET f_int1 = @cur_value2
13150WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13151
13152# check single-3 success: 	1
13153SET @cur_value1= -1;
13154SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13155UPDATE t1 SET f_int1 = @cur_value1
13156WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13157
13158# check single-4 success: 	1
13159SELECT MAX(f_int1) INTO @cur_value FROM t1;
13160DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13161
13162# check single-5 success: 	1
13163DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13164
13165# check single-6 success: 	1
13166INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13167
13168# check single-7 success: 	1
13169DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13170DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13171INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13172f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13173f_charbig = '#NULL#';
13174INSERT INTO t1
13175SET f_int1 = NULL , f_int2 = -@max_row,
13176f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13177f_charbig = '#NULL#';
13178# check null success:    1
13179
13180# check null-1 success: 	1
13181UPDATE t1 SET f_int1 = -@max_row
13182WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13183AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13184
13185# check null-2 success: 	1
13186UPDATE t1 SET f_int1 = NULL
13187WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13188AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13189
13190# check null-3 success: 	1
13191DELETE FROM t1
13192WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13193AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13194
13195# check null-4 success: 	1
13196DELETE FROM t1
13197WHERE f_int1 = 0 AND f_int2 = 0
13198AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13199AND f_charbig = '#NULL#';
13200INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13201SELECT f_int1, f_int1, '', '', 'was inserted'
13202   FROM t0_template source_tab
13203WHERE MOD(f_int1,3) = 0
13204AND f_int1 BETWEEN @max_row_div2 AND @max_row
13205ON DUPLICATE KEY
13206UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13207f_int2 = 2 * @max_row + source_tab.f_int1,
13208f_charbig = 'was updated';
13209
13210# check unique-1-a success: 	1
13211
13212# check unique-1-b success: 	1
13213DELETE FROM t1 WHERE f_charbig = 'was inserted';
13214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13215f_int2 = CAST(f_char1 AS SIGNED INT),
13216f_charbig = CONCAT('===',f_char1,'===')
13217WHERE f_charbig = 'was updated';
13218REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13219SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13220   FROM t0_template source_tab
13221WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13222
13223# check replace success: 	1
13224DELETE FROM t1
13225WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13226DELETE FROM t1
13227WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13228f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13229UPDATE t1 SET f_int2 = f_int1,
13230f_char1 = CAST(f_int1 AS CHAR),
13231f_char2 = CAST(f_int1 AS CHAR),
13232f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13233WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13234SET AUTOCOMMIT= 0;
13235INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13236SELECT f_int1, f_int1, '', '', 'was inserted'
13237FROM t0_template source_tab
13238WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13239
13240# check transactions-1 success: 	1
13241COMMIT WORK;
13242
13243# check transactions-2 success: 	1
13244ROLLBACK WORK;
13245
13246# check transactions-3 success: 	1
13247DELETE FROM t1 WHERE f_charbig = 'was inserted';
13248COMMIT WORK;
13249ROLLBACK WORK;
13250
13251# check transactions-4 success: 	1
13252INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13253SELECT f_int1, f_int1, '', '', 'was inserted'
13254FROM t0_template source_tab
13255WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13256
13257# check transactions-5 success: 	1
13258ROLLBACK WORK;
13259
13260# check transactions-6 success: 	1
13261# INFO: Storage engine used for t1 seems to be transactional.
13262COMMIT;
13263
13264# check transactions-7 success: 	1
13265DELETE FROM t1 WHERE f_charbig = 'was inserted';
13266COMMIT WORK;
13267SET @@session.sql_mode = 'traditional';
13268SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13269INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13270SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13271'', '', 'was inserted' FROM t0_template
13272WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13273ERROR 22012: Division by 0
13274COMMIT;
13275
13276# check transactions-8 success: 	1
13277# INFO: Storage engine used for t1 seems to be able to revert
13278#       changes made by the failing statement.
13279SET @@session.sql_mode = '';
13280SET AUTOCOMMIT= 1;
13281DELETE FROM t1 WHERE f_charbig = 'was inserted';
13282COMMIT WORK;
13283UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13284
13285# check special-1 success: 	1
13286UPDATE t1 SET f_charbig = '';
13287
13288# check special-2 success: 	1
13289UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13290INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13291SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13292WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13293INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13294SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13295'just inserted' FROM t0_template
13296WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13297CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13298BEGIN
13299UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13300f_charbig = 'updated by trigger'
13301      WHERE f_int1 = new.f_int1;
13302END|
13303INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13304SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13305WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13306
13307# check trigger-1 success: 	1
13308DROP TRIGGER trg_1;
13309UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13310f_int2 = CAST(f_char1 AS SIGNED INT),
13311f_charbig = 'just inserted'
13312   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13313DELETE FROM t0_aux
13314WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13315INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13316SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13317'just inserted' FROM t0_template
13318WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13319CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13320BEGIN
13321UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13322f_charbig = 'updated by trigger'
13323      WHERE f_int1 = new.f_int1;
13324END|
13325INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13326SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13328
13329# check trigger-2 success: 	1
13330DROP TRIGGER trg_1;
13331UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13332f_int2 = CAST(f_char1 AS SIGNED INT),
13333f_charbig = 'just inserted'
13334   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13335DELETE FROM t0_aux
13336WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13337INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13338SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13339'just inserted' FROM t0_template
13340WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13341CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13342BEGIN
13343UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13344f_charbig = 'updated by trigger'
13345      WHERE f_int1 = new.f_int1;
13346END|
13347UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13348WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13349
13350# check trigger-3 success: 	1
13351DROP TRIGGER trg_1;
13352UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13353f_int2 = CAST(f_char1 AS SIGNED INT),
13354f_charbig = 'just inserted'
13355   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13356DELETE FROM t0_aux
13357WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13358INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13359SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13360'just inserted' FROM t0_template
13361WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13362CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13363BEGIN
13364UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13365f_charbig = 'updated by trigger'
13366      WHERE f_int1 = - old.f_int1;
13367END|
13368UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13369WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13370
13371# check trigger-4 success: 	1
13372DROP TRIGGER trg_1;
13373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13374f_int2 = CAST(f_char1 AS SIGNED INT),
13375f_charbig = 'just inserted'
13376   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13377DELETE FROM t0_aux
13378WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13379INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13380SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13381'just inserted' FROM t0_template
13382WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13383CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13384BEGIN
13385UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13386f_charbig = 'updated by trigger'
13387      WHERE f_int1 = new.f_int1;
13388END|
13389UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13390WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13391
13392# check trigger-5 success: 	1
13393DROP TRIGGER trg_1;
13394UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13395f_int2 = CAST(f_char1 AS SIGNED INT),
13396f_charbig = 'just inserted'
13397   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13398DELETE FROM t0_aux
13399WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13400INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13401SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13402'just inserted' FROM t0_template
13403WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13404CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13405BEGIN
13406UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13407f_charbig = 'updated by trigger'
13408      WHERE f_int1 = - old.f_int1;
13409END|
13410UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13411WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13412
13413# check trigger-6 success: 	1
13414DROP TRIGGER trg_1;
13415UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13416f_int2 = CAST(f_char1 AS SIGNED INT),
13417f_charbig = 'just inserted'
13418   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13419DELETE FROM t0_aux
13420WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13421INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13422SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13423'just inserted' FROM t0_template
13424WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13425CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13426BEGIN
13427UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13428f_charbig = 'updated by trigger'
13429      WHERE f_int1 = - old.f_int1;
13430END|
13431DELETE FROM t0_aux
13432WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13433
13434# check trigger-7 success: 	1
13435DROP TRIGGER trg_1;
13436UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13437f_int2 = CAST(f_char1 AS SIGNED INT),
13438f_charbig = 'just inserted'
13439   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13440DELETE FROM t0_aux
13441WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13442INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13443SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13444'just inserted' FROM t0_template
13445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13446CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13447BEGIN
13448UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13449f_charbig = 'updated by trigger'
13450      WHERE f_int1 = - old.f_int1;
13451END|
13452DELETE FROM t0_aux
13453WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13454
13455# check trigger-8 success: 	1
13456DROP TRIGGER trg_1;
13457UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13458f_int2 = CAST(f_char1 AS SIGNED INT),
13459f_charbig = 'just inserted'
13460   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13461DELETE FROM t0_aux
13462WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13463DELETE FROM t1
13464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13465CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13466BEGIN
13467SET new.f_int1 = old.f_int1 + @max_row,
13468new.f_int2 = old.f_int2 - @max_row,
13469new.f_charbig = '####updated per update trigger####';
13470END|
13471UPDATE t1
13472SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13473f_charbig = '####updated per update statement itself####';
13474
13475# check trigger-9 success: 	1
13476DROP TRIGGER trg_2;
13477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13478f_int2 = CAST(f_char1 AS SIGNED INT),
13479f_charbig = CONCAT('===',f_char1,'===');
13480CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13481BEGIN
13482SET new.f_int1 = new.f_int1 + @max_row,
13483new.f_int2 = new.f_int2 - @max_row,
13484new.f_charbig = '####updated per update trigger####';
13485END|
13486UPDATE t1
13487SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13488f_charbig = '####updated per update statement itself####';
13489
13490# check trigger-10 success: 	1
13491DROP TRIGGER trg_2;
13492UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13493f_int2 = CAST(f_char1 AS SIGNED INT),
13494f_charbig = CONCAT('===',f_char1,'===');
13495CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13496BEGIN
13497SET new.f_int1 = @my_max1 + @counter,
13498new.f_int2 = @my_min2 - @counter,
13499new.f_charbig = '####updated per insert trigger####';
13500SET @counter = @counter + 1;
13501END|
13502SET @counter = 1;
13503SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13505SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13506CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13508ORDER BY f_int1;
13509DROP TRIGGER trg_3;
13510
13511# check trigger-11 success: 	1
13512DELETE FROM t1
13513WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13514AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13515AND f_charbig = '####updated per insert trigger####';
13516CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13517BEGIN
13518SET new.f_int1 = @my_max1 + @counter,
13519new.f_int2 = @my_min2 - @counter,
13520new.f_charbig = '####updated per insert trigger####';
13521SET @counter = @counter + 1;
13522END|
13523SET @counter = 1;
13524SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13525INSERT INTO t1 (f_char1, f_char2, f_charbig)
13526SELECT CAST(f_int1 AS CHAR),
13527CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13529ORDER BY f_int1;
13530DROP TRIGGER trg_3;
13531
13532# check trigger-12 success: 	1
13533DELETE FROM t1
13534WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13535AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13536AND f_charbig = '####updated per insert trigger####';
13537ANALYZE  TABLE t1;
13538Table	Op	Msg_type	Msg_text
13539test.t1	analyze	status	OK
13540CHECK    TABLE t1 EXTENDED;
13541Table	Op	Msg_type	Msg_text
13542test.t1	check	status	OK
13543CHECKSUM TABLE t1 EXTENDED;
13544Table	Checksum
13545test.t1	<some_value>
13546OPTIMIZE TABLE t1;
13547Table	Op	Msg_type	Msg_text
13548test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13549test.t1	optimize	status	OK
13550# check layout success:    1
13551REPAIR   TABLE t1 EXTENDED;
13552Table	Op	Msg_type	Msg_text
13553test.t1	repair	status	OK
13554# check layout success:    1
13555TRUNCATE t1;
13556
13557# check TRUNCATE success: 	1
13558# check layout success:    1
13559# End usability test (inc/partition_check.inc)
13560DROP TABLE t1;
13561CREATE TABLE t1 (
13562f_int1 INTEGER DEFAULT 0,
13563f_int2 INTEGER DEFAULT 0,
13564f_char1 CHAR(20),
13565f_char2 CHAR(20),
13566f_charbig VARCHAR(1000)
13567
13568)
13569PARTITION BY LIST(MOD(f_int1,4))
13570(PARTITION part_3 VALUES IN (-3),
13571PARTITION part_2 VALUES IN (-2),
13572PARTITION part_1 VALUES IN (-1),
13573PARTITION part_N VALUES IN (NULL),
13574PARTITION part0 VALUES IN (0),
13575PARTITION part1 VALUES IN (1),
13576PARTITION part2 VALUES IN (2),
13577PARTITION part3 VALUES IN (3));
13578INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13579SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13580WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13581ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
13582INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13583SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13584WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13585# Start usability test (inc/partition_check.inc)
13586create_command
13587SHOW CREATE TABLE t1;
13588Table	Create Table
13589t1	CREATE TABLE `t1` (
13590  `f_int1` int(11) DEFAULT 0,
13591  `f_int2` int(11) DEFAULT 0,
13592  `f_char1` char(20) DEFAULT NULL,
13593  `f_char2` char(20) DEFAULT NULL,
13594  `f_charbig` varchar(1000) DEFAULT NULL,
13595  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13596) ENGINE=InnoDB DEFAULT CHARSET=latin1
13597 PARTITION BY LIST (`f_int1` MOD 4)
13598(PARTITION `part_3` VALUES IN (-3) ENGINE = InnoDB,
13599 PARTITION `part_2` VALUES IN (-2) ENGINE = InnoDB,
13600 PARTITION `part_1` VALUES IN (-1) ENGINE = InnoDB,
13601 PARTITION `part_N` VALUES IN (NULL) ENGINE = InnoDB,
13602 PARTITION `part0` VALUES IN (0) ENGINE = InnoDB,
13603 PARTITION `part1` VALUES IN (1) ENGINE = InnoDB,
13604 PARTITION `part2` VALUES IN (2) ENGINE = InnoDB,
13605 PARTITION `part3` VALUES IN (3) ENGINE = InnoDB)
13606
13607# check prerequisites-1 success:    1
13608# check COUNT(*) success:    1
13609# check MIN/MAX(f_int1) success:    1
13610# check MIN/MAX(f_int2) success:    1
13611INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13612SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13613CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13614WHERE f_int1 IN (2,3);
13615ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
13616# check prerequisites-3 success:    1
13617# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13618INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13619SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13620CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13621WHERE f_int1 IN (2,3);
13622DELETE FROM t1 WHERE f_charbig = 'delete me';
13623INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13624SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13625CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13626WHERE f_int1 IN (2,3);
13627DELETE FROM t1 WHERE f_charbig = 'delete me';
13628# check read via f_int1 success: 1
13629# check read via f_int2 success: 1
13630
13631# check multiple-1 success: 	1
13632DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13633
13634# check multiple-2 success: 	1
13635INSERT INTO t1 SELECT * FROM t0_template
13636WHERE MOD(f_int1,3) = 0;
13637
13638# check multiple-3 success: 	1
13639UPDATE t1 SET f_int1 = f_int1 + @max_row
13640WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13641AND @max_row_div2 + @max_row_div4;
13642
13643# check multiple-4 success: 	1
13644DELETE FROM t1
13645WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13646AND @max_row_div2 + @max_row_div4 + @max_row;
13647
13648# check multiple-5 success: 	1
13649SELECT COUNT(*) INTO @try_count FROM t0_template
13650WHERE MOD(f_int1,3) = 0
13651AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13652SELECT COUNT(*) INTO @clash_count
13653FROM t1 INNER JOIN t0_template USING(f_int1)
13654WHERE MOD(f_int1,3) = 0
13655AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13656SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13657INSERT INTO t1
13658SET f_int1 = @cur_value , f_int2 = @cur_value,
13659f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13660f_charbig = '#SINGLE#';
13661
13662# check single-1 success: 	1
13663SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13664INSERT INTO t1
13665SET f_int1 = @cur_value , f_int2 = @cur_value,
13666f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13667f_charbig = '#SINGLE#';
13668
13669# check single-2 success: 	1
13670SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13671SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13672UPDATE t1 SET f_int1 = @cur_value2
13673WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13674
13675# check single-3 success: 	1
13676SET @cur_value1= -1;
13677SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13678UPDATE t1 SET f_int1 = @cur_value1
13679WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13680
13681# check single-4 success: 	1
13682SELECT MAX(f_int1) INTO @cur_value FROM t1;
13683DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13684
13685# check single-5 success: 	1
13686DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13687
13688# check single-6 success: 	1
13689INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13690
13691# check single-7 success: 	1
13692DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13693DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13694INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13695f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13696f_charbig = '#NULL#';
13697INSERT INTO t1
13698SET f_int1 = NULL , f_int2 = -@max_row,
13699f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13700f_charbig = '#NULL#';
13701# check null success:    1
13702
13703# check null-1 success: 	1
13704UPDATE t1 SET f_int1 = -@max_row
13705WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13706AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13707
13708# check null-2 success: 	1
13709UPDATE t1 SET f_int1 = NULL
13710WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13711AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13712
13713# check null-3 success: 	1
13714DELETE FROM t1
13715WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13716AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13717
13718# check null-4 success: 	1
13719DELETE FROM t1
13720WHERE f_int1 = 0 AND f_int2 = 0
13721AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13722AND f_charbig = '#NULL#';
13723INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13724SELECT f_int1, f_int1, '', '', 'was inserted'
13725   FROM t0_template source_tab
13726WHERE MOD(f_int1,3) = 0
13727AND f_int1 BETWEEN @max_row_div2 AND @max_row
13728ON DUPLICATE KEY
13729UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13730f_int2 = 2 * @max_row + source_tab.f_int1,
13731f_charbig = 'was updated';
13732
13733# check unique-1-a success: 	1
13734
13735# check unique-1-b success: 	1
13736DELETE FROM t1 WHERE f_charbig = 'was inserted';
13737UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13738f_int2 = CAST(f_char1 AS SIGNED INT),
13739f_charbig = CONCAT('===',f_char1,'===')
13740WHERE f_charbig = 'was updated';
13741REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13742SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13743   FROM t0_template source_tab
13744WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13745
13746# check replace success: 	1
13747DELETE FROM t1
13748WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13749DELETE FROM t1
13750WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13751f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13752UPDATE t1 SET f_int2 = f_int1,
13753f_char1 = CAST(f_int1 AS CHAR),
13754f_char2 = CAST(f_int1 AS CHAR),
13755f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13756WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13757SET AUTOCOMMIT= 0;
13758INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13759SELECT f_int1, f_int1, '', '', 'was inserted'
13760FROM t0_template source_tab
13761WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13762
13763# check transactions-1 success: 	1
13764COMMIT WORK;
13765
13766# check transactions-2 success: 	1
13767ROLLBACK WORK;
13768
13769# check transactions-3 success: 	1
13770DELETE FROM t1 WHERE f_charbig = 'was inserted';
13771COMMIT WORK;
13772ROLLBACK WORK;
13773
13774# check transactions-4 success: 	1
13775INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13776SELECT f_int1, f_int1, '', '', 'was inserted'
13777FROM t0_template source_tab
13778WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13779
13780# check transactions-5 success: 	1
13781ROLLBACK WORK;
13782
13783# check transactions-6 success: 	1
13784# INFO: Storage engine used for t1 seems to be transactional.
13785COMMIT;
13786
13787# check transactions-7 success: 	1
13788DELETE FROM t1 WHERE f_charbig = 'was inserted';
13789COMMIT WORK;
13790SET @@session.sql_mode = 'traditional';
13791SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13792INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13793SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13794'', '', 'was inserted' FROM t0_template
13795WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13796ERROR 22012: Division by 0
13797COMMIT;
13798
13799# check transactions-8 success: 	1
13800# INFO: Storage engine used for t1 seems to be able to revert
13801#       changes made by the failing statement.
13802SET @@session.sql_mode = '';
13803SET AUTOCOMMIT= 1;
13804DELETE FROM t1 WHERE f_charbig = 'was inserted';
13805COMMIT WORK;
13806UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13807
13808# check special-1 success: 	1
13809UPDATE t1 SET f_charbig = '';
13810
13811# check special-2 success: 	1
13812UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13813INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13814SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13816INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13817SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13818'just inserted' FROM t0_template
13819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13820CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13821BEGIN
13822UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13823f_charbig = 'updated by trigger'
13824      WHERE f_int1 = new.f_int1;
13825END|
13826INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13827SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13829
13830# check trigger-1 success: 	1
13831DROP TRIGGER trg_1;
13832UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13833f_int2 = CAST(f_char1 AS SIGNED INT),
13834f_charbig = 'just inserted'
13835   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13836DELETE FROM t0_aux
13837WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13838INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13839SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13840'just inserted' FROM t0_template
13841WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13842CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13843BEGIN
13844UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13845f_charbig = 'updated by trigger'
13846      WHERE f_int1 = new.f_int1;
13847END|
13848INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13849SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13850WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13851
13852# check trigger-2 success: 	1
13853DROP TRIGGER trg_1;
13854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13855f_int2 = CAST(f_char1 AS SIGNED INT),
13856f_charbig = 'just inserted'
13857   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13858DELETE FROM t0_aux
13859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13862'just inserted' FROM t0_template
13863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13864CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13865BEGIN
13866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13867f_charbig = 'updated by trigger'
13868      WHERE f_int1 = new.f_int1;
13869END|
13870UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13872
13873# check trigger-3 success: 	1
13874DROP TRIGGER trg_1;
13875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13876f_int2 = CAST(f_char1 AS SIGNED INT),
13877f_charbig = 'just inserted'
13878   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13879DELETE FROM t0_aux
13880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13881INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13882SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13883'just inserted' FROM t0_template
13884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13885CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13886BEGIN
13887UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13888f_charbig = 'updated by trigger'
13889      WHERE f_int1 = - old.f_int1;
13890END|
13891UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13892WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13893
13894# check trigger-4 success: 	1
13895DROP TRIGGER trg_1;
13896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13897f_int2 = CAST(f_char1 AS SIGNED INT),
13898f_charbig = 'just inserted'
13899   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13900DELETE FROM t0_aux
13901WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13902INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13903SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13904'just inserted' FROM t0_template
13905WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13906CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13907BEGIN
13908UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13909f_charbig = 'updated by trigger'
13910      WHERE f_int1 = new.f_int1;
13911END|
13912UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13913WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13914
13915# check trigger-5 success: 	1
13916DROP TRIGGER trg_1;
13917UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13918f_int2 = CAST(f_char1 AS SIGNED INT),
13919f_charbig = 'just inserted'
13920   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13921DELETE FROM t0_aux
13922WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13923INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13924SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13925'just inserted' FROM t0_template
13926WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13927CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13928BEGIN
13929UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13930f_charbig = 'updated by trigger'
13931      WHERE f_int1 = - old.f_int1;
13932END|
13933UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13934WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13935
13936# check trigger-6 success: 	1
13937DROP TRIGGER trg_1;
13938UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13939f_int2 = CAST(f_char1 AS SIGNED INT),
13940f_charbig = 'just inserted'
13941   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13942DELETE FROM t0_aux
13943WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13944INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13945SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13946'just inserted' FROM t0_template
13947WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13948CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13949BEGIN
13950UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13951f_charbig = 'updated by trigger'
13952      WHERE f_int1 = - old.f_int1;
13953END|
13954DELETE FROM t0_aux
13955WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13956
13957# check trigger-7 success: 	1
13958DROP TRIGGER trg_1;
13959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13960f_int2 = CAST(f_char1 AS SIGNED INT),
13961f_charbig = 'just inserted'
13962   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13963DELETE FROM t0_aux
13964WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13965INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13966SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13967'just inserted' FROM t0_template
13968WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13969CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13970BEGIN
13971UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13972f_charbig = 'updated by trigger'
13973      WHERE f_int1 = - old.f_int1;
13974END|
13975DELETE FROM t0_aux
13976WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13977
13978# check trigger-8 success: 	1
13979DROP TRIGGER trg_1;
13980UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13981f_int2 = CAST(f_char1 AS SIGNED INT),
13982f_charbig = 'just inserted'
13983   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13984DELETE FROM t0_aux
13985WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13986DELETE FROM t1
13987WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13988CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13989BEGIN
13990SET new.f_int1 = old.f_int1 + @max_row,
13991new.f_int2 = old.f_int2 - @max_row,
13992new.f_charbig = '####updated per update trigger####';
13993END|
13994UPDATE t1
13995SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13996f_charbig = '####updated per update statement itself####';
13997
13998# check trigger-9 success: 	1
13999DROP TRIGGER trg_2;
14000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14001f_int2 = CAST(f_char1 AS SIGNED INT),
14002f_charbig = CONCAT('===',f_char1,'===');
14003CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14004BEGIN
14005SET new.f_int1 = new.f_int1 + @max_row,
14006new.f_int2 = new.f_int2 - @max_row,
14007new.f_charbig = '####updated per update trigger####';
14008END|
14009UPDATE t1
14010SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14011f_charbig = '####updated per update statement itself####';
14012
14013# check trigger-10 success: 	1
14014DROP TRIGGER trg_2;
14015UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14016f_int2 = CAST(f_char1 AS SIGNED INT),
14017f_charbig = CONCAT('===',f_char1,'===');
14018CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14019BEGIN
14020SET new.f_int1 = @my_max1 + @counter,
14021new.f_int2 = @my_min2 - @counter,
14022new.f_charbig = '####updated per insert trigger####';
14023SET @counter = @counter + 1;
14024END|
14025SET @counter = 1;
14026SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14027INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14028SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14029CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14031ORDER BY f_int1;
14032DROP TRIGGER trg_3;
14033
14034# check trigger-11 success: 	1
14035DELETE FROM t1
14036WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14037AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14038AND f_charbig = '####updated per insert trigger####';
14039CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14040BEGIN
14041SET new.f_int1 = @my_max1 + @counter,
14042new.f_int2 = @my_min2 - @counter,
14043new.f_charbig = '####updated per insert trigger####';
14044SET @counter = @counter + 1;
14045END|
14046SET @counter = 1;
14047SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14048INSERT INTO t1 (f_char1, f_char2, f_charbig)
14049SELECT CAST(f_int1 AS CHAR),
14050CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14052ORDER BY f_int1;
14053DROP TRIGGER trg_3;
14054
14055# check trigger-12 success: 	1
14056DELETE FROM t1
14057WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14058AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14059AND f_charbig = '####updated per insert trigger####';
14060ANALYZE  TABLE t1;
14061Table	Op	Msg_type	Msg_text
14062test.t1	analyze	status	OK
14063CHECK    TABLE t1 EXTENDED;
14064Table	Op	Msg_type	Msg_text
14065test.t1	check	status	OK
14066CHECKSUM TABLE t1 EXTENDED;
14067Table	Checksum
14068test.t1	<some_value>
14069OPTIMIZE TABLE t1;
14070Table	Op	Msg_type	Msg_text
14071test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14072test.t1	optimize	status	OK
14073# check layout success:    1
14074REPAIR   TABLE t1 EXTENDED;
14075Table	Op	Msg_type	Msg_text
14076test.t1	repair	status	OK
14077# check layout success:    1
14078TRUNCATE t1;
14079
14080# check TRUNCATE success: 	1
14081# check layout success:    1
14082# End usability test (inc/partition_check.inc)
14083DROP TABLE t1;
14084CREATE TABLE t1 (
14085f_int1 INTEGER DEFAULT 0,
14086f_int2 INTEGER DEFAULT 0,
14087f_char1 CHAR(20),
14088f_char2 CHAR(20),
14089f_charbig VARCHAR(1000)
14090
14091)
14092PARTITION BY RANGE(f_int1)
14093(PARTITION parta VALUES LESS THAN (0),
14094PARTITION partb VALUES LESS THAN (5),
14095PARTITION partc VALUES LESS THAN (10),
14096PARTITION partd VALUES LESS THAN (10 + 5),
14097PARTITION parte VALUES LESS THAN (20),
14098PARTITION partf VALUES LESS THAN (2147483646));
14099INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14100SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14101WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14102ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
14103INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14104SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14105WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14106# Start usability test (inc/partition_check.inc)
14107create_command
14108SHOW CREATE TABLE t1;
14109Table	Create Table
14110t1	CREATE TABLE `t1` (
14111  `f_int1` int(11) DEFAULT 0,
14112  `f_int2` int(11) DEFAULT 0,
14113  `f_char1` char(20) DEFAULT NULL,
14114  `f_char2` char(20) DEFAULT NULL,
14115  `f_charbig` varchar(1000) DEFAULT NULL,
14116  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14117) ENGINE=InnoDB DEFAULT CHARSET=latin1
14118 PARTITION BY RANGE (`f_int1`)
14119(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
14120 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
14121 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
14122 PARTITION `partd` VALUES LESS THAN (15) ENGINE = InnoDB,
14123 PARTITION `parte` VALUES LESS THAN (20) ENGINE = InnoDB,
14124 PARTITION `partf` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
14125
14126# check prerequisites-1 success:    1
14127# check COUNT(*) success:    1
14128# check MIN/MAX(f_int1) success:    1
14129# check MIN/MAX(f_int2) success:    1
14130INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14131SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14132CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14133WHERE f_int1 IN (2,3);
14134ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14135# check prerequisites-3 success:    1
14136# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14137INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14138SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14139CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14140WHERE f_int1 IN (2,3);
14141DELETE FROM t1 WHERE f_charbig = 'delete me';
14142INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14143SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14144CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14145WHERE f_int1 IN (2,3);
14146DELETE FROM t1 WHERE f_charbig = 'delete me';
14147# check read via f_int1 success: 1
14148# check read via f_int2 success: 1
14149
14150# check multiple-1 success: 	1
14151DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14152
14153# check multiple-2 success: 	1
14154INSERT INTO t1 SELECT * FROM t0_template
14155WHERE MOD(f_int1,3) = 0;
14156
14157# check multiple-3 success: 	1
14158UPDATE t1 SET f_int1 = f_int1 + @max_row
14159WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14160AND @max_row_div2 + @max_row_div4;
14161
14162# check multiple-4 success: 	1
14163DELETE FROM t1
14164WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14165AND @max_row_div2 + @max_row_div4 + @max_row;
14166
14167# check multiple-5 success: 	1
14168SELECT COUNT(*) INTO @try_count FROM t0_template
14169WHERE MOD(f_int1,3) = 0
14170AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14171SELECT COUNT(*) INTO @clash_count
14172FROM t1 INNER JOIN t0_template USING(f_int1)
14173WHERE MOD(f_int1,3) = 0
14174AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14175SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14176INSERT INTO t1
14177SET f_int1 = @cur_value , f_int2 = @cur_value,
14178f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14179f_charbig = '#SINGLE#';
14180
14181# check single-1 success: 	1
14182SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14183INSERT INTO t1
14184SET f_int1 = @cur_value , f_int2 = @cur_value,
14185f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14186f_charbig = '#SINGLE#';
14187
14188# check single-2 success: 	1
14189SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14190SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14191UPDATE t1 SET f_int1 = @cur_value2
14192WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14193
14194# check single-3 success: 	1
14195SET @cur_value1= -1;
14196SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14197UPDATE t1 SET f_int1 = @cur_value1
14198WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14199
14200# check single-4 success: 	1
14201SELECT MAX(f_int1) INTO @cur_value FROM t1;
14202DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14203
14204# check single-5 success: 	1
14205DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14206
14207# check single-6 success: 	1
14208INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14209ERROR HY000: Table has no partition for value 2147483647
14210DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14211INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14212f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14213f_charbig = '#NULL#';
14214INSERT INTO t1
14215SET f_int1 = NULL , f_int2 = -@max_row,
14216f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14217f_charbig = '#NULL#';
14218# check null success:    1
14219
14220# check null-1 success: 	1
14221UPDATE t1 SET f_int1 = -@max_row
14222WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14223AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14224
14225# check null-2 success: 	1
14226UPDATE t1 SET f_int1 = NULL
14227WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14228AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14229
14230# check null-3 success: 	1
14231DELETE FROM t1
14232WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14233AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14234
14235# check null-4 success: 	1
14236DELETE FROM t1
14237WHERE f_int1 = 0 AND f_int2 = 0
14238AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14239AND f_charbig = '#NULL#';
14240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14241SELECT f_int1, f_int1, '', '', 'was inserted'
14242   FROM t0_template source_tab
14243WHERE MOD(f_int1,3) = 0
14244AND f_int1 BETWEEN @max_row_div2 AND @max_row
14245ON DUPLICATE KEY
14246UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14247f_int2 = 2 * @max_row + source_tab.f_int1,
14248f_charbig = 'was updated';
14249
14250# check unique-1-a success: 	1
14251
14252# check unique-1-b success: 	1
14253DELETE FROM t1 WHERE f_charbig = 'was inserted';
14254UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14255f_int2 = CAST(f_char1 AS SIGNED INT),
14256f_charbig = CONCAT('===',f_char1,'===')
14257WHERE f_charbig = 'was updated';
14258REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14259SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14260   FROM t0_template source_tab
14261WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14262
14263# check replace success: 	1
14264DELETE FROM t1
14265WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14266DELETE FROM t1
14267WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14268f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14269UPDATE t1 SET f_int2 = f_int1,
14270f_char1 = CAST(f_int1 AS CHAR),
14271f_char2 = CAST(f_int1 AS CHAR),
14272f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14273WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14274SET AUTOCOMMIT= 0;
14275INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14276SELECT f_int1, f_int1, '', '', 'was inserted'
14277FROM t0_template source_tab
14278WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14279
14280# check transactions-1 success: 	1
14281COMMIT WORK;
14282
14283# check transactions-2 success: 	1
14284ROLLBACK WORK;
14285
14286# check transactions-3 success: 	1
14287DELETE FROM t1 WHERE f_charbig = 'was inserted';
14288COMMIT WORK;
14289ROLLBACK WORK;
14290
14291# check transactions-4 success: 	1
14292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14293SELECT f_int1, f_int1, '', '', 'was inserted'
14294FROM t0_template source_tab
14295WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14296
14297# check transactions-5 success: 	1
14298ROLLBACK WORK;
14299
14300# check transactions-6 success: 	1
14301# INFO: Storage engine used for t1 seems to be transactional.
14302COMMIT;
14303
14304# check transactions-7 success: 	1
14305DELETE FROM t1 WHERE f_charbig = 'was inserted';
14306COMMIT WORK;
14307SET @@session.sql_mode = 'traditional';
14308SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14309INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14310SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14311'', '', 'was inserted' FROM t0_template
14312WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14313ERROR 22012: Division by 0
14314COMMIT;
14315
14316# check transactions-8 success: 	1
14317# INFO: Storage engine used for t1 seems to be able to revert
14318#       changes made by the failing statement.
14319SET @@session.sql_mode = '';
14320SET AUTOCOMMIT= 1;
14321DELETE FROM t1 WHERE f_charbig = 'was inserted';
14322COMMIT WORK;
14323UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14324
14325# check special-1 success: 	1
14326UPDATE t1 SET f_charbig = '';
14327
14328# check special-2 success: 	1
14329UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14330INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14331SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14333INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14334SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14335'just inserted' FROM t0_template
14336WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14337CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14338BEGIN
14339UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14340f_charbig = 'updated by trigger'
14341      WHERE f_int1 = new.f_int1;
14342END|
14343INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14344SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14345WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14346
14347# check trigger-1 success: 	1
14348DROP TRIGGER trg_1;
14349UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14350f_int2 = CAST(f_char1 AS SIGNED INT),
14351f_charbig = 'just inserted'
14352   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14353DELETE FROM t0_aux
14354WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14355INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14356SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14357'just inserted' FROM t0_template
14358WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14359CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14360BEGIN
14361UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14362f_charbig = 'updated by trigger'
14363      WHERE f_int1 = new.f_int1;
14364END|
14365INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14366SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14367WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14368
14369# check trigger-2 success: 	1
14370DROP TRIGGER trg_1;
14371UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14372f_int2 = CAST(f_char1 AS SIGNED INT),
14373f_charbig = 'just inserted'
14374   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14375DELETE FROM t0_aux
14376WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14377INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14378SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14379'just inserted' FROM t0_template
14380WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14381CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14382BEGIN
14383UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14384f_charbig = 'updated by trigger'
14385      WHERE f_int1 = new.f_int1;
14386END|
14387UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14388WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14389
14390# check trigger-3 success: 	1
14391DROP TRIGGER trg_1;
14392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14393f_int2 = CAST(f_char1 AS SIGNED INT),
14394f_charbig = 'just inserted'
14395   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14396DELETE FROM t0_aux
14397WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14400'just inserted' FROM t0_template
14401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14402CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14403BEGIN
14404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14405f_charbig = 'updated by trigger'
14406      WHERE f_int1 = - old.f_int1;
14407END|
14408UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14409WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14410
14411# check trigger-4 success: 	1
14412DROP TRIGGER trg_1;
14413UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14414f_int2 = CAST(f_char1 AS SIGNED INT),
14415f_charbig = 'just inserted'
14416   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14417DELETE FROM t0_aux
14418WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14419INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14420SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14421'just inserted' FROM t0_template
14422WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14423CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14424BEGIN
14425UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14426f_charbig = 'updated by trigger'
14427      WHERE f_int1 = new.f_int1;
14428END|
14429UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14430WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14431
14432# check trigger-5 success: 	1
14433DROP TRIGGER trg_1;
14434UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14435f_int2 = CAST(f_char1 AS SIGNED INT),
14436f_charbig = 'just inserted'
14437   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14438DELETE FROM t0_aux
14439WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14440INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14441SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14442'just inserted' FROM t0_template
14443WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14444CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14445BEGIN
14446UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14447f_charbig = 'updated by trigger'
14448      WHERE f_int1 = - old.f_int1;
14449END|
14450UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14451WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14452
14453# check trigger-6 success: 	1
14454DROP TRIGGER trg_1;
14455UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14456f_int2 = CAST(f_char1 AS SIGNED INT),
14457f_charbig = 'just inserted'
14458   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14459DELETE FROM t0_aux
14460WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14461INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14462SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14463'just inserted' FROM t0_template
14464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14465CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14466BEGIN
14467UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14468f_charbig = 'updated by trigger'
14469      WHERE f_int1 = - old.f_int1;
14470END|
14471DELETE FROM t0_aux
14472WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14473
14474# check trigger-7 success: 	1
14475DROP TRIGGER trg_1;
14476UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14477f_int2 = CAST(f_char1 AS SIGNED INT),
14478f_charbig = 'just inserted'
14479   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14480DELETE FROM t0_aux
14481WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14482INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14483SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14484'just inserted' FROM t0_template
14485WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14486CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14487BEGIN
14488UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14489f_charbig = 'updated by trigger'
14490      WHERE f_int1 = - old.f_int1;
14491END|
14492DELETE FROM t0_aux
14493WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14494
14495# check trigger-8 success: 	1
14496DROP TRIGGER trg_1;
14497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14498f_int2 = CAST(f_char1 AS SIGNED INT),
14499f_charbig = 'just inserted'
14500   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14501DELETE FROM t0_aux
14502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14503DELETE FROM t1
14504WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14505CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14506BEGIN
14507SET new.f_int1 = old.f_int1 + @max_row,
14508new.f_int2 = old.f_int2 - @max_row,
14509new.f_charbig = '####updated per update trigger####';
14510END|
14511UPDATE t1
14512SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14513f_charbig = '####updated per update statement itself####';
14514
14515# check trigger-9 success: 	1
14516DROP TRIGGER trg_2;
14517UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14518f_int2 = CAST(f_char1 AS SIGNED INT),
14519f_charbig = CONCAT('===',f_char1,'===');
14520CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14521BEGIN
14522SET new.f_int1 = new.f_int1 + @max_row,
14523new.f_int2 = new.f_int2 - @max_row,
14524new.f_charbig = '####updated per update trigger####';
14525END|
14526UPDATE t1
14527SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14528f_charbig = '####updated per update statement itself####';
14529
14530# check trigger-10 success: 	1
14531DROP TRIGGER trg_2;
14532UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14533f_int2 = CAST(f_char1 AS SIGNED INT),
14534f_charbig = CONCAT('===',f_char1,'===');
14535CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14536BEGIN
14537SET new.f_int1 = @my_max1 + @counter,
14538new.f_int2 = @my_min2 - @counter,
14539new.f_charbig = '####updated per insert trigger####';
14540SET @counter = @counter + 1;
14541END|
14542SET @counter = 1;
14543SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14544INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14545SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14546CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14547WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14548ORDER BY f_int1;
14549DROP TRIGGER trg_3;
14550
14551# check trigger-11 success: 	1
14552DELETE FROM t1
14553WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14554AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14555AND f_charbig = '####updated per insert trigger####';
14556CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14557BEGIN
14558SET new.f_int1 = @my_max1 + @counter,
14559new.f_int2 = @my_min2 - @counter,
14560new.f_charbig = '####updated per insert trigger####';
14561SET @counter = @counter + 1;
14562END|
14563SET @counter = 1;
14564SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14565INSERT INTO t1 (f_char1, f_char2, f_charbig)
14566SELECT CAST(f_int1 AS CHAR),
14567CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14569ORDER BY f_int1;
14570DROP TRIGGER trg_3;
14571
14572# check trigger-12 success: 	1
14573DELETE FROM t1
14574WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14575AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14576AND f_charbig = '####updated per insert trigger####';
14577ANALYZE  TABLE t1;
14578Table	Op	Msg_type	Msg_text
14579test.t1	analyze	status	OK
14580CHECK    TABLE t1 EXTENDED;
14581Table	Op	Msg_type	Msg_text
14582test.t1	check	status	OK
14583CHECKSUM TABLE t1 EXTENDED;
14584Table	Checksum
14585test.t1	<some_value>
14586OPTIMIZE TABLE t1;
14587Table	Op	Msg_type	Msg_text
14588test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14589test.t1	optimize	status	OK
14590# check layout success:    1
14591REPAIR   TABLE t1 EXTENDED;
14592Table	Op	Msg_type	Msg_text
14593test.t1	repair	status	OK
14594# check layout success:    1
14595TRUNCATE t1;
14596
14597# check TRUNCATE success: 	1
14598# check layout success:    1
14599# End usability test (inc/partition_check.inc)
14600DROP TABLE t1;
14601CREATE TABLE t1 (
14602f_int1 INTEGER DEFAULT 0,
14603f_int2 INTEGER DEFAULT 0,
14604f_char1 CHAR(20),
14605f_char2 CHAR(20),
14606f_charbig VARCHAR(1000)
14607
14608)
14609PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
14610(PARTITION parta VALUES LESS THAN (0),
14611PARTITION partb VALUES LESS THAN (5),
14612PARTITION partc VALUES LESS THAN (10),
14613PARTITION partd VALUES LESS THAN (2147483646));
14614INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14615SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14616WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14617ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
14618INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14619SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14620WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14621# Start usability test (inc/partition_check.inc)
14622create_command
14623SHOW CREATE TABLE t1;
14624Table	Create Table
14625t1	CREATE TABLE `t1` (
14626  `f_int1` int(11) DEFAULT 0,
14627  `f_int2` int(11) DEFAULT 0,
14628  `f_char1` char(20) DEFAULT NULL,
14629  `f_char2` char(20) DEFAULT NULL,
14630  `f_charbig` varchar(1000) DEFAULT NULL,
14631  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14632) ENGINE=InnoDB DEFAULT CHARSET=latin1
14633 PARTITION BY RANGE (`f_int1` DIV 2)
14634SUBPARTITION BY HASH (`f_int1`)
14635SUBPARTITIONS 2
14636(PARTITION `parta` VALUES LESS THAN (0) ENGINE = InnoDB,
14637 PARTITION `partb` VALUES LESS THAN (5) ENGINE = InnoDB,
14638 PARTITION `partc` VALUES LESS THAN (10) ENGINE = InnoDB,
14639 PARTITION `partd` VALUES LESS THAN (2147483646) ENGINE = InnoDB)
14640
14641# check prerequisites-1 success:    1
14642# check COUNT(*) success:    1
14643# check MIN/MAX(f_int1) success:    1
14644# check MIN/MAX(f_int2) success:    1
14645INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14646SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14647CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14648WHERE f_int1 IN (2,3);
14649ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
14650# check prerequisites-3 success:    1
14651# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14652INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14653SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14654CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14655WHERE f_int1 IN (2,3);
14656DELETE FROM t1 WHERE f_charbig = 'delete me';
14657INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14658SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14659CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14660WHERE f_int1 IN (2,3);
14661DELETE FROM t1 WHERE f_charbig = 'delete me';
14662# check read via f_int1 success: 1
14663# check read via f_int2 success: 1
14664
14665# check multiple-1 success: 	1
14666DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14667
14668# check multiple-2 success: 	1
14669INSERT INTO t1 SELECT * FROM t0_template
14670WHERE MOD(f_int1,3) = 0;
14671
14672# check multiple-3 success: 	1
14673UPDATE t1 SET f_int1 = f_int1 + @max_row
14674WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14675AND @max_row_div2 + @max_row_div4;
14676
14677# check multiple-4 success: 	1
14678DELETE FROM t1
14679WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14680AND @max_row_div2 + @max_row_div4 + @max_row;
14681
14682# check multiple-5 success: 	1
14683SELECT COUNT(*) INTO @try_count FROM t0_template
14684WHERE MOD(f_int1,3) = 0
14685AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14686SELECT COUNT(*) INTO @clash_count
14687FROM t1 INNER JOIN t0_template USING(f_int1)
14688WHERE MOD(f_int1,3) = 0
14689AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14690SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14691INSERT INTO t1
14692SET f_int1 = @cur_value , f_int2 = @cur_value,
14693f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14694f_charbig = '#SINGLE#';
14695
14696# check single-1 success: 	1
14697SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14698INSERT INTO t1
14699SET f_int1 = @cur_value , f_int2 = @cur_value,
14700f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14701f_charbig = '#SINGLE#';
14702
14703# check single-2 success: 	1
14704SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14705SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14706UPDATE t1 SET f_int1 = @cur_value2
14707WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14708
14709# check single-3 success: 	1
14710SET @cur_value1= -1;
14711SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14712UPDATE t1 SET f_int1 = @cur_value1
14713WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14714
14715# check single-4 success: 	1
14716SELECT MAX(f_int1) INTO @cur_value FROM t1;
14717DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14718
14719# check single-5 success: 	1
14720DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14721
14722# check single-6 success: 	1
14723INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14724
14725# check single-7 success: 	1
14726DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14727DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14728INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14729f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14730f_charbig = '#NULL#';
14731INSERT INTO t1
14732SET f_int1 = NULL , f_int2 = -@max_row,
14733f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14734f_charbig = '#NULL#';
14735# check null success:    1
14736
14737# check null-1 success: 	1
14738UPDATE t1 SET f_int1 = -@max_row
14739WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14740AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14741
14742# check null-2 success: 	1
14743UPDATE t1 SET f_int1 = NULL
14744WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14745AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14746
14747# check null-3 success: 	1
14748DELETE FROM t1
14749WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14750AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14751
14752# check null-4 success: 	1
14753DELETE FROM t1
14754WHERE f_int1 = 0 AND f_int2 = 0
14755AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14756AND f_charbig = '#NULL#';
14757INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14758SELECT f_int1, f_int1, '', '', 'was inserted'
14759   FROM t0_template source_tab
14760WHERE MOD(f_int1,3) = 0
14761AND f_int1 BETWEEN @max_row_div2 AND @max_row
14762ON DUPLICATE KEY
14763UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14764f_int2 = 2 * @max_row + source_tab.f_int1,
14765f_charbig = 'was updated';
14766
14767# check unique-1-a success: 	1
14768
14769# check unique-1-b success: 	1
14770DELETE FROM t1 WHERE f_charbig = 'was inserted';
14771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14772f_int2 = CAST(f_char1 AS SIGNED INT),
14773f_charbig = CONCAT('===',f_char1,'===')
14774WHERE f_charbig = 'was updated';
14775REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14776SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14777   FROM t0_template source_tab
14778WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14779
14780# check replace success: 	1
14781DELETE FROM t1
14782WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14783DELETE FROM t1
14784WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14785f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14786UPDATE t1 SET f_int2 = f_int1,
14787f_char1 = CAST(f_int1 AS CHAR),
14788f_char2 = CAST(f_int1 AS CHAR),
14789f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14790WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14791SET AUTOCOMMIT= 0;
14792INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14793SELECT f_int1, f_int1, '', '', 'was inserted'
14794FROM t0_template source_tab
14795WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14796
14797# check transactions-1 success: 	1
14798COMMIT WORK;
14799
14800# check transactions-2 success: 	1
14801ROLLBACK WORK;
14802
14803# check transactions-3 success: 	1
14804DELETE FROM t1 WHERE f_charbig = 'was inserted';
14805COMMIT WORK;
14806ROLLBACK WORK;
14807
14808# check transactions-4 success: 	1
14809INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14810SELECT f_int1, f_int1, '', '', 'was inserted'
14811FROM t0_template source_tab
14812WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14813
14814# check transactions-5 success: 	1
14815ROLLBACK WORK;
14816
14817# check transactions-6 success: 	1
14818# INFO: Storage engine used for t1 seems to be transactional.
14819COMMIT;
14820
14821# check transactions-7 success: 	1
14822DELETE FROM t1 WHERE f_charbig = 'was inserted';
14823COMMIT WORK;
14824SET @@session.sql_mode = 'traditional';
14825SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14826INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14827SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14828'', '', 'was inserted' FROM t0_template
14829WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14830ERROR 22012: Division by 0
14831COMMIT;
14832
14833# check transactions-8 success: 	1
14834# INFO: Storage engine used for t1 seems to be able to revert
14835#       changes made by the failing statement.
14836SET @@session.sql_mode = '';
14837SET AUTOCOMMIT= 1;
14838DELETE FROM t1 WHERE f_charbig = 'was inserted';
14839COMMIT WORK;
14840UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14841
14842# check special-1 success: 	1
14843UPDATE t1 SET f_charbig = '';
14844
14845# check special-2 success: 	1
14846UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14847INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14848SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14849WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14850INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14851SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14852'just inserted' FROM t0_template
14853WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14854CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14855BEGIN
14856UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14857f_charbig = 'updated by trigger'
14858      WHERE f_int1 = new.f_int1;
14859END|
14860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14861SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14862WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14863
14864# check trigger-1 success: 	1
14865DROP TRIGGER trg_1;
14866UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14867f_int2 = CAST(f_char1 AS SIGNED INT),
14868f_charbig = 'just inserted'
14869   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14870DELETE FROM t0_aux
14871WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14872INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14873SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14874'just inserted' FROM t0_template
14875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14876CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14877BEGIN
14878UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14879f_charbig = 'updated by trigger'
14880      WHERE f_int1 = new.f_int1;
14881END|
14882INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14883SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14885
14886# check trigger-2 success: 	1
14887DROP TRIGGER trg_1;
14888UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14889f_int2 = CAST(f_char1 AS SIGNED INT),
14890f_charbig = 'just inserted'
14891   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14892DELETE FROM t0_aux
14893WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14894INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14895SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14896'just inserted' FROM t0_template
14897WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14898CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14899BEGIN
14900UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14901f_charbig = 'updated by trigger'
14902      WHERE f_int1 = new.f_int1;
14903END|
14904UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14905WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14906
14907# check trigger-3 success: 	1
14908DROP TRIGGER trg_1;
14909UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14910f_int2 = CAST(f_char1 AS SIGNED INT),
14911f_charbig = 'just inserted'
14912   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14913DELETE FROM t0_aux
14914WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14915INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14916SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14917'just inserted' FROM t0_template
14918WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14919CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14920BEGIN
14921UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14922f_charbig = 'updated by trigger'
14923      WHERE f_int1 = - old.f_int1;
14924END|
14925UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14926WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14927
14928# check trigger-4 success: 	1
14929DROP TRIGGER trg_1;
14930UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14931f_int2 = CAST(f_char1 AS SIGNED INT),
14932f_charbig = 'just inserted'
14933   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14934DELETE FROM t0_aux
14935WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14936INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14937SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14938'just inserted' FROM t0_template
14939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14940CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14941BEGIN
14942UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14943f_charbig = 'updated by trigger'
14944      WHERE f_int1 = new.f_int1;
14945END|
14946UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14947WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14948
14949# check trigger-5 success: 	1
14950DROP TRIGGER trg_1;
14951UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14952f_int2 = CAST(f_char1 AS SIGNED INT),
14953f_charbig = 'just inserted'
14954   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14955DELETE FROM t0_aux
14956WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14957INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14958SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14959'just inserted' FROM t0_template
14960WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14961CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14962BEGIN
14963UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14964f_charbig = 'updated by trigger'
14965      WHERE f_int1 = - old.f_int1;
14966END|
14967UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14968WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14969
14970# check trigger-6 success: 	1
14971DROP TRIGGER trg_1;
14972UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14973f_int2 = CAST(f_char1 AS SIGNED INT),
14974f_charbig = 'just inserted'
14975   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14976DELETE FROM t0_aux
14977WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14978INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14979SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14980'just inserted' FROM t0_template
14981WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14982CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14983BEGIN
14984UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14985f_charbig = 'updated by trigger'
14986      WHERE f_int1 = - old.f_int1;
14987END|
14988DELETE FROM t0_aux
14989WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14990
14991# check trigger-7 success: 	1
14992DROP TRIGGER trg_1;
14993UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14994f_int2 = CAST(f_char1 AS SIGNED INT),
14995f_charbig = 'just inserted'
14996   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14997DELETE FROM t0_aux
14998WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14999INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15000SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15001'just inserted' FROM t0_template
15002WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15003CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15004BEGIN
15005UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15006f_charbig = 'updated by trigger'
15007      WHERE f_int1 = - old.f_int1;
15008END|
15009DELETE FROM t0_aux
15010WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15011
15012# check trigger-8 success: 	1
15013DROP TRIGGER trg_1;
15014UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15015f_int2 = CAST(f_char1 AS SIGNED INT),
15016f_charbig = 'just inserted'
15017   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15018DELETE FROM t0_aux
15019WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15020DELETE FROM t1
15021WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15022CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15023BEGIN
15024SET new.f_int1 = old.f_int1 + @max_row,
15025new.f_int2 = old.f_int2 - @max_row,
15026new.f_charbig = '####updated per update trigger####';
15027END|
15028UPDATE t1
15029SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15030f_charbig = '####updated per update statement itself####';
15031
15032# check trigger-9 success: 	1
15033DROP TRIGGER trg_2;
15034UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15035f_int2 = CAST(f_char1 AS SIGNED INT),
15036f_charbig = CONCAT('===',f_char1,'===');
15037CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15038BEGIN
15039SET new.f_int1 = new.f_int1 + @max_row,
15040new.f_int2 = new.f_int2 - @max_row,
15041new.f_charbig = '####updated per update trigger####';
15042END|
15043UPDATE t1
15044SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15045f_charbig = '####updated per update statement itself####';
15046
15047# check trigger-10 success: 	1
15048DROP TRIGGER trg_2;
15049UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15050f_int2 = CAST(f_char1 AS SIGNED INT),
15051f_charbig = CONCAT('===',f_char1,'===');
15052CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15053BEGIN
15054SET new.f_int1 = @my_max1 + @counter,
15055new.f_int2 = @my_min2 - @counter,
15056new.f_charbig = '####updated per insert trigger####';
15057SET @counter = @counter + 1;
15058END|
15059SET @counter = 1;
15060SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15061INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15062SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15063CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15064WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15065ORDER BY f_int1;
15066DROP TRIGGER trg_3;
15067
15068# check trigger-11 success: 	1
15069DELETE FROM t1
15070WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15071AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15072AND f_charbig = '####updated per insert trigger####';
15073CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15074BEGIN
15075SET new.f_int1 = @my_max1 + @counter,
15076new.f_int2 = @my_min2 - @counter,
15077new.f_charbig = '####updated per insert trigger####';
15078SET @counter = @counter + 1;
15079END|
15080SET @counter = 1;
15081SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15082INSERT INTO t1 (f_char1, f_char2, f_charbig)
15083SELECT CAST(f_int1 AS CHAR),
15084CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15085WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15086ORDER BY f_int1;
15087DROP TRIGGER trg_3;
15088
15089# check trigger-12 success: 	1
15090DELETE FROM t1
15091WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15092AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15093AND f_charbig = '####updated per insert trigger####';
15094ANALYZE  TABLE t1;
15095Table	Op	Msg_type	Msg_text
15096test.t1	analyze	status	OK
15097CHECK    TABLE t1 EXTENDED;
15098Table	Op	Msg_type	Msg_text
15099test.t1	check	status	OK
15100CHECKSUM TABLE t1 EXTENDED;
15101Table	Checksum
15102test.t1	<some_value>
15103OPTIMIZE TABLE t1;
15104Table	Op	Msg_type	Msg_text
15105test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15106test.t1	optimize	status	OK
15107# check layout success:    1
15108REPAIR   TABLE t1 EXTENDED;
15109Table	Op	Msg_type	Msg_text
15110test.t1	repair	status	OK
15111# check layout success:    1
15112TRUNCATE t1;
15113
15114# check TRUNCATE success: 	1
15115# check layout success:    1
15116# End usability test (inc/partition_check.inc)
15117DROP TABLE t1;
15118CREATE TABLE t1 (
15119f_int1 INTEGER DEFAULT 0,
15120f_int2 INTEGER DEFAULT 0,
15121f_char1 CHAR(20),
15122f_char2 CHAR(20),
15123f_charbig VARCHAR(1000)
15124
15125)
15126PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
15127(PARTITION part1 VALUES LESS THAN (0)
15128(SUBPARTITION subpart11, SUBPARTITION subpart12),
15129PARTITION part2 VALUES LESS THAN (5)
15130(SUBPARTITION subpart21, SUBPARTITION subpart22),
15131PARTITION part3 VALUES LESS THAN (10)
15132(SUBPARTITION subpart31, SUBPARTITION subpart32),
15133PARTITION part4 VALUES LESS THAN (2147483646)
15134(SUBPARTITION subpart41, SUBPARTITION subpart42));
15135INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15136SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15137WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15138ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
15139INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15140SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15141WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15142# Start usability test (inc/partition_check.inc)
15143create_command
15144SHOW CREATE TABLE t1;
15145Table	Create Table
15146t1	CREATE TABLE `t1` (
15147  `f_int1` int(11) DEFAULT 0,
15148  `f_int2` int(11) DEFAULT 0,
15149  `f_char1` char(20) DEFAULT NULL,
15150  `f_char2` char(20) DEFAULT NULL,
15151  `f_charbig` varchar(1000) DEFAULT NULL,
15152  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
15153) ENGINE=InnoDB DEFAULT CHARSET=latin1
15154 PARTITION BY RANGE (`f_int1`)
15155SUBPARTITION BY KEY (`f_int1`)
15156(PARTITION `part1` VALUES LESS THAN (0)
15157 (SUBPARTITION `subpart11` ENGINE = InnoDB,
15158  SUBPARTITION `subpart12` ENGINE = InnoDB),
15159 PARTITION `part2` VALUES LESS THAN (5)
15160 (SUBPARTITION `subpart21` ENGINE = InnoDB,
15161  SUBPARTITION `subpart22` ENGINE = InnoDB),
15162 PARTITION `part3` VALUES LESS THAN (10)
15163 (SUBPARTITION `subpart31` ENGINE = InnoDB,
15164  SUBPARTITION `subpart32` ENGINE = InnoDB),
15165 PARTITION `part4` VALUES LESS THAN (2147483646)
15166 (SUBPARTITION `subpart41` ENGINE = InnoDB,
15167  SUBPARTITION `subpart42` ENGINE = InnoDB))
15168
15169# check prerequisites-1 success:    1
15170# check COUNT(*) success:    1
15171# check MIN/MAX(f_int1) success:    1
15172# check MIN/MAX(f_int2) success:    1
15173INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15174SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15175CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15176WHERE f_int1 IN (2,3);
15177ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15178# check prerequisites-3 success:    1
15179# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15180INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15181SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15182CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15183WHERE f_int1 IN (2,3);
15184DELETE FROM t1 WHERE f_charbig = 'delete me';
15185INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15186SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15187CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15188WHERE f_int1 IN (2,3);
15189DELETE FROM t1 WHERE f_charbig = 'delete me';
15190# check read via f_int1 success: 1
15191# check read via f_int2 success: 1
15192
15193# check multiple-1 success: 	1
15194DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15195
15196# check multiple-2 success: 	1
15197INSERT INTO t1 SELECT * FROM t0_template
15198WHERE MOD(f_int1,3) = 0;
15199
15200# check multiple-3 success: 	1
15201UPDATE t1 SET f_int1 = f_int1 + @max_row
15202WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15203AND @max_row_div2 + @max_row_div4;
15204
15205# check multiple-4 success: 	1
15206DELETE FROM t1
15207WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15208AND @max_row_div2 + @max_row_div4 + @max_row;
15209
15210# check multiple-5 success: 	1
15211SELECT COUNT(*) INTO @try_count FROM t0_template
15212WHERE MOD(f_int1,3) = 0
15213AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15214SELECT COUNT(*) INTO @clash_count
15215FROM t1 INNER JOIN t0_template USING(f_int1)
15216WHERE MOD(f_int1,3) = 0
15217AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15218SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15219INSERT INTO t1
15220SET f_int1 = @cur_value , f_int2 = @cur_value,
15221f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15222f_charbig = '#SINGLE#';
15223
15224# check single-1 success: 	1
15225SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15226INSERT INTO t1
15227SET f_int1 = @cur_value , f_int2 = @cur_value,
15228f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15229f_charbig = '#SINGLE#';
15230
15231# check single-2 success: 	1
15232SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15233SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15234UPDATE t1 SET f_int1 = @cur_value2
15235WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15236
15237# check single-3 success: 	1
15238SET @cur_value1= -1;
15239SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15240UPDATE t1 SET f_int1 = @cur_value1
15241WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15242
15243# check single-4 success: 	1
15244SELECT MAX(f_int1) INTO @cur_value FROM t1;
15245DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15246
15247# check single-5 success: 	1
15248DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15249
15250# check single-6 success: 	1
15251INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15252ERROR HY000: Table has no partition for value 2147483647
15253DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15254INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15255f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15256f_charbig = '#NULL#';
15257INSERT INTO t1
15258SET f_int1 = NULL , f_int2 = -@max_row,
15259f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15260f_charbig = '#NULL#';
15261# check null success:    1
15262
15263# check null-1 success: 	1
15264UPDATE t1 SET f_int1 = -@max_row
15265WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15266AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15267
15268# check null-2 success: 	1
15269UPDATE t1 SET f_int1 = NULL
15270WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15271AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15272
15273# check null-3 success: 	1
15274DELETE FROM t1
15275WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15276AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15277
15278# check null-4 success: 	1
15279DELETE FROM t1
15280WHERE f_int1 = 0 AND f_int2 = 0
15281AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15282AND f_charbig = '#NULL#';
15283INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15284SELECT f_int1, f_int1, '', '', 'was inserted'
15285   FROM t0_template source_tab
15286WHERE MOD(f_int1,3) = 0
15287AND f_int1 BETWEEN @max_row_div2 AND @max_row
15288ON DUPLICATE KEY
15289UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15290f_int2 = 2 * @max_row + source_tab.f_int1,
15291f_charbig = 'was updated';
15292
15293# check unique-1-a success: 	1
15294
15295# check unique-1-b success: 	1
15296DELETE FROM t1 WHERE f_charbig = 'was inserted';
15297UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15298f_int2 = CAST(f_char1 AS SIGNED INT),
15299f_charbig = CONCAT('===',f_char1,'===')
15300WHERE f_charbig = 'was updated';
15301REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15302SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15303   FROM t0_template source_tab
15304WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15305
15306# check replace success: 	1
15307DELETE FROM t1
15308WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15309DELETE FROM t1
15310WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15311f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15312UPDATE t1 SET f_int2 = f_int1,
15313f_char1 = CAST(f_int1 AS CHAR),
15314f_char2 = CAST(f_int1 AS CHAR),
15315f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15316WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15317SET AUTOCOMMIT= 0;
15318INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15319SELECT f_int1, f_int1, '', '', 'was inserted'
15320FROM t0_template source_tab
15321WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15322
15323# check transactions-1 success: 	1
15324COMMIT WORK;
15325
15326# check transactions-2 success: 	1
15327ROLLBACK WORK;
15328
15329# check transactions-3 success: 	1
15330DELETE FROM t1 WHERE f_charbig = 'was inserted';
15331COMMIT WORK;
15332ROLLBACK WORK;
15333
15334# check transactions-4 success: 	1
15335INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15336SELECT f_int1, f_int1, '', '', 'was inserted'
15337FROM t0_template source_tab
15338WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15339
15340# check transactions-5 success: 	1
15341ROLLBACK WORK;
15342
15343# check transactions-6 success: 	1
15344# INFO: Storage engine used for t1 seems to be transactional.
15345COMMIT;
15346
15347# check transactions-7 success: 	1
15348DELETE FROM t1 WHERE f_charbig = 'was inserted';
15349COMMIT WORK;
15350SET @@session.sql_mode = 'traditional';
15351SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15352INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15353SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15354'', '', 'was inserted' FROM t0_template
15355WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15356ERROR 22012: Division by 0
15357COMMIT;
15358
15359# check transactions-8 success: 	1
15360# INFO: Storage engine used for t1 seems to be able to revert
15361#       changes made by the failing statement.
15362SET @@session.sql_mode = '';
15363SET AUTOCOMMIT= 1;
15364DELETE FROM t1 WHERE f_charbig = 'was inserted';
15365COMMIT WORK;
15366UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15367
15368# check special-1 success: 	1
15369UPDATE t1 SET f_charbig = '';
15370
15371# check special-2 success: 	1
15372UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15374SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15376INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15377SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15378'just inserted' FROM t0_template
15379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15380CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15381BEGIN
15382UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15383f_charbig = 'updated by trigger'
15384      WHERE f_int1 = new.f_int1;
15385END|
15386INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15387SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15388WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15389
15390# check trigger-1 success: 	1
15391DROP TRIGGER trg_1;
15392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15393f_int2 = CAST(f_char1 AS SIGNED INT),
15394f_charbig = 'just inserted'
15395   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15396DELETE FROM t0_aux
15397WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15400'just inserted' FROM t0_template
15401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15402CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15403BEGIN
15404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15405f_charbig = 'updated by trigger'
15406      WHERE f_int1 = new.f_int1;
15407END|
15408INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15409SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15411
15412# check trigger-2 success: 	1
15413DROP TRIGGER trg_1;
15414UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15415f_int2 = CAST(f_char1 AS SIGNED INT),
15416f_charbig = 'just inserted'
15417   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15418DELETE FROM t0_aux
15419WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15422'just inserted' FROM t0_template
15423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15424CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15425BEGIN
15426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15427f_charbig = 'updated by trigger'
15428      WHERE f_int1 = new.f_int1;
15429END|
15430UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15431WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15432
15433# check trigger-3 success: 	1
15434DROP TRIGGER trg_1;
15435UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15436f_int2 = CAST(f_char1 AS SIGNED INT),
15437f_charbig = 'just inserted'
15438   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15439DELETE FROM t0_aux
15440WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15441INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15442SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15443'just inserted' FROM t0_template
15444WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15445CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15446BEGIN
15447UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15448f_charbig = 'updated by trigger'
15449      WHERE f_int1 = - old.f_int1;
15450END|
15451UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15452WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15453
15454# check trigger-4 success: 	1
15455DROP TRIGGER trg_1;
15456UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15457f_int2 = CAST(f_char1 AS SIGNED INT),
15458f_charbig = 'just inserted'
15459   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15460DELETE FROM t0_aux
15461WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15462INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15463SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15464'just inserted' FROM t0_template
15465WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15466CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15467BEGIN
15468UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15469f_charbig = 'updated by trigger'
15470      WHERE f_int1 = new.f_int1;
15471END|
15472UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15473WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15474
15475# check trigger-5 success: 	1
15476DROP TRIGGER trg_1;
15477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15478f_int2 = CAST(f_char1 AS SIGNED INT),
15479f_charbig = 'just inserted'
15480   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15481DELETE FROM t0_aux
15482WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15484SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15485'just inserted' FROM t0_template
15486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15487CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15488BEGIN
15489UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15490f_charbig = 'updated by trigger'
15491      WHERE f_int1 = - old.f_int1;
15492END|
15493UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15494WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15495
15496# check trigger-6 success: 	1
15497DROP TRIGGER trg_1;
15498UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15499f_int2 = CAST(f_char1 AS SIGNED INT),
15500f_charbig = 'just inserted'
15501   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15502DELETE FROM t0_aux
15503WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15504INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15505SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15506'just inserted' FROM t0_template
15507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15508CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15509BEGIN
15510UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15511f_charbig = 'updated by trigger'
15512      WHERE f_int1 = - old.f_int1;
15513END|
15514DELETE FROM t0_aux
15515WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15516
15517# check trigger-7 success: 	1
15518DROP TRIGGER trg_1;
15519UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15520f_int2 = CAST(f_char1 AS SIGNED INT),
15521f_charbig = 'just inserted'
15522   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15523DELETE FROM t0_aux
15524WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15525INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15526SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15527'just inserted' FROM t0_template
15528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15529CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15530BEGIN
15531UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15532f_charbig = 'updated by trigger'
15533      WHERE f_int1 = - old.f_int1;
15534END|
15535DELETE FROM t0_aux
15536WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15537
15538# check trigger-8 success: 	1
15539DROP TRIGGER trg_1;
15540UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15541f_int2 = CAST(f_char1 AS SIGNED INT),
15542f_charbig = 'just inserted'
15543   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15544DELETE FROM t0_aux
15545WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15546DELETE FROM t1
15547WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15548CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15549BEGIN
15550SET new.f_int1 = old.f_int1 + @max_row,
15551new.f_int2 = old.f_int2 - @max_row,
15552new.f_charbig = '####updated per update trigger####';
15553END|
15554UPDATE t1
15555SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15556f_charbig = '####updated per update statement itself####';
15557
15558# check trigger-9 success: 	1
15559DROP TRIGGER trg_2;
15560UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15561f_int2 = CAST(f_char1 AS SIGNED INT),
15562f_charbig = CONCAT('===',f_char1,'===');
15563CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15564BEGIN
15565SET new.f_int1 = new.f_int1 + @max_row,
15566new.f_int2 = new.f_int2 - @max_row,
15567new.f_charbig = '####updated per update trigger####';
15568END|
15569UPDATE t1
15570SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15571f_charbig = '####updated per update statement itself####';
15572
15573# check trigger-10 success: 	1
15574DROP TRIGGER trg_2;
15575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15576f_int2 = CAST(f_char1 AS SIGNED INT),
15577f_charbig = CONCAT('===',f_char1,'===');
15578CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15579BEGIN
15580SET new.f_int1 = @my_max1 + @counter,
15581new.f_int2 = @my_min2 - @counter,
15582new.f_charbig = '####updated per insert trigger####';
15583SET @counter = @counter + 1;
15584END|
15585SET @counter = 1;
15586SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15587INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15588SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15589CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15591ORDER BY f_int1;
15592DROP TRIGGER trg_3;
15593
15594# check trigger-11 success: 	1
15595DELETE FROM t1
15596WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15597AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15598AND f_charbig = '####updated per insert trigger####';
15599CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15600BEGIN
15601SET new.f_int1 = @my_max1 + @counter,
15602new.f_int2 = @my_min2 - @counter,
15603new.f_charbig = '####updated per insert trigger####';
15604SET @counter = @counter + 1;
15605END|
15606SET @counter = 1;
15607SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15608INSERT INTO t1 (f_char1, f_char2, f_charbig)
15609SELECT CAST(f_int1 AS CHAR),
15610CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15612ORDER BY f_int1;
15613DROP TRIGGER trg_3;
15614
15615# check trigger-12 success: 	1
15616DELETE FROM t1
15617WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15618AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15619AND f_charbig = '####updated per insert trigger####';
15620ANALYZE  TABLE t1;
15621Table	Op	Msg_type	Msg_text
15622test.t1	analyze	status	OK
15623CHECK    TABLE t1 EXTENDED;
15624Table	Op	Msg_type	Msg_text
15625test.t1	check	status	OK
15626CHECKSUM TABLE t1 EXTENDED;
15627Table	Checksum
15628test.t1	<some_value>
15629OPTIMIZE TABLE t1;
15630Table	Op	Msg_type	Msg_text
15631test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15632test.t1	optimize	status	OK
15633# check layout success:    1
15634REPAIR   TABLE t1 EXTENDED;
15635Table	Op	Msg_type	Msg_text
15636test.t1	repair	status	OK
15637# check layout success:    1
15638TRUNCATE t1;
15639
15640# check TRUNCATE success: 	1
15641# check layout success:    1
15642# End usability test (inc/partition_check.inc)
15643DROP TABLE t1;
15644CREATE TABLE t1 (
15645f_int1 INTEGER DEFAULT 0,
15646f_int2 INTEGER DEFAULT 0,
15647f_char1 CHAR(20),
15648f_char2 CHAR(20),
15649f_charbig VARCHAR(1000)
15650
15651)
15652PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
15653(PARTITION part1 VALUES IN (0)
15654(SUBPARTITION sp11, SUBPARTITION sp12),
15655PARTITION part2 VALUES IN (1)
15656(SUBPARTITION sp21, SUBPARTITION sp22),
15657PARTITION part3 VALUES IN (2)
15658(SUBPARTITION sp31, SUBPARTITION sp32),
15659PARTITION part4 VALUES IN (NULL)
15660(SUBPARTITION sp41, SUBPARTITION sp42));
15661INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15662SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15663WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15664ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
15665INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15666SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15667WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15668# Start usability test (inc/partition_check.inc)
15669create_command
15670SHOW CREATE TABLE t1;
15671Table	Create Table
15672t1	CREATE TABLE `t1` (
15673  `f_int1` int(11) DEFAULT 0,
15674  `f_int2` int(11) DEFAULT 0,
15675  `f_char1` char(20) DEFAULT NULL,
15676  `f_char2` char(20) DEFAULT NULL,
15677  `f_charbig` varchar(1000) DEFAULT NULL,
15678  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
15679) ENGINE=InnoDB DEFAULT CHARSET=latin1
15680 PARTITION BY LIST (abs(`f_int1` MOD 3))
15681SUBPARTITION BY HASH (`f_int1` + 1)
15682(PARTITION `part1` VALUES IN (0)
15683 (SUBPARTITION `sp11` ENGINE = InnoDB,
15684  SUBPARTITION `sp12` ENGINE = InnoDB),
15685 PARTITION `part2` VALUES IN (1)
15686 (SUBPARTITION `sp21` ENGINE = InnoDB,
15687  SUBPARTITION `sp22` ENGINE = InnoDB),
15688 PARTITION `part3` VALUES IN (2)
15689 (SUBPARTITION `sp31` ENGINE = InnoDB,
15690  SUBPARTITION `sp32` ENGINE = InnoDB),
15691 PARTITION `part4` VALUES IN (NULL)
15692 (SUBPARTITION `sp41` ENGINE = InnoDB,
15693  SUBPARTITION `sp42` ENGINE = InnoDB))
15694
15695# check prerequisites-1 success:    1
15696# check COUNT(*) success:    1
15697# check MIN/MAX(f_int1) success:    1
15698# check MIN/MAX(f_int2) success:    1
15699INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15700SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15701CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15702WHERE f_int1 IN (2,3);
15703ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15704# check prerequisites-3 success:    1
15705# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15706INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15707SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15708CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15709WHERE f_int1 IN (2,3);
15710DELETE FROM t1 WHERE f_charbig = 'delete me';
15711INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15712SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15713CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15714WHERE f_int1 IN (2,3);
15715DELETE FROM t1 WHERE f_charbig = 'delete me';
15716# check read via f_int1 success: 1
15717# check read via f_int2 success: 1
15718
15719# check multiple-1 success: 	1
15720DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15721
15722# check multiple-2 success: 	1
15723INSERT INTO t1 SELECT * FROM t0_template
15724WHERE MOD(f_int1,3) = 0;
15725
15726# check multiple-3 success: 	1
15727UPDATE t1 SET f_int1 = f_int1 + @max_row
15728WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15729AND @max_row_div2 + @max_row_div4;
15730
15731# check multiple-4 success: 	1
15732DELETE FROM t1
15733WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15734AND @max_row_div2 + @max_row_div4 + @max_row;
15735
15736# check multiple-5 success: 	1
15737SELECT COUNT(*) INTO @try_count FROM t0_template
15738WHERE MOD(f_int1,3) = 0
15739AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15740SELECT COUNT(*) INTO @clash_count
15741FROM t1 INNER JOIN t0_template USING(f_int1)
15742WHERE MOD(f_int1,3) = 0
15743AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15744SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15745INSERT INTO t1
15746SET f_int1 = @cur_value , f_int2 = @cur_value,
15747f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15748f_charbig = '#SINGLE#';
15749
15750# check single-1 success: 	1
15751SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15752INSERT INTO t1
15753SET f_int1 = @cur_value , f_int2 = @cur_value,
15754f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15755f_charbig = '#SINGLE#';
15756
15757# check single-2 success: 	1
15758SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15759SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15760UPDATE t1 SET f_int1 = @cur_value2
15761WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15762
15763# check single-3 success: 	1
15764SET @cur_value1= -1;
15765SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15766UPDATE t1 SET f_int1 = @cur_value1
15767WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15768
15769# check single-4 success: 	1
15770SELECT MAX(f_int1) INTO @cur_value FROM t1;
15771DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15772
15773# check single-5 success: 	1
15774DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15775
15776# check single-6 success: 	1
15777INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15778
15779# check single-7 success: 	1
15780DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15781DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15782INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15783f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15784f_charbig = '#NULL#';
15785INSERT INTO t1
15786SET f_int1 = NULL , f_int2 = -@max_row,
15787f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15788f_charbig = '#NULL#';
15789# check null success:    1
15790
15791# check null-1 success: 	1
15792UPDATE t1 SET f_int1 = -@max_row
15793WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15794AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15795
15796# check null-2 success: 	1
15797UPDATE t1 SET f_int1 = NULL
15798WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15799AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15800
15801# check null-3 success: 	1
15802DELETE FROM t1
15803WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15804AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15805
15806# check null-4 success: 	1
15807DELETE FROM t1
15808WHERE f_int1 = 0 AND f_int2 = 0
15809AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15810AND f_charbig = '#NULL#';
15811INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15812SELECT f_int1, f_int1, '', '', 'was inserted'
15813   FROM t0_template source_tab
15814WHERE MOD(f_int1,3) = 0
15815AND f_int1 BETWEEN @max_row_div2 AND @max_row
15816ON DUPLICATE KEY
15817UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15818f_int2 = 2 * @max_row + source_tab.f_int1,
15819f_charbig = 'was updated';
15820
15821# check unique-1-a success: 	1
15822
15823# check unique-1-b success: 	1
15824DELETE FROM t1 WHERE f_charbig = 'was inserted';
15825UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15826f_int2 = CAST(f_char1 AS SIGNED INT),
15827f_charbig = CONCAT('===',f_char1,'===')
15828WHERE f_charbig = 'was updated';
15829REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15830SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15831   FROM t0_template source_tab
15832WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15833
15834# check replace success: 	1
15835DELETE FROM t1
15836WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15837DELETE FROM t1
15838WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15839f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15840UPDATE t1 SET f_int2 = f_int1,
15841f_char1 = CAST(f_int1 AS CHAR),
15842f_char2 = CAST(f_int1 AS CHAR),
15843f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15844WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15845SET AUTOCOMMIT= 0;
15846INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15847SELECT f_int1, f_int1, '', '', 'was inserted'
15848FROM t0_template source_tab
15849WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15850
15851# check transactions-1 success: 	1
15852COMMIT WORK;
15853
15854# check transactions-2 success: 	1
15855ROLLBACK WORK;
15856
15857# check transactions-3 success: 	1
15858DELETE FROM t1 WHERE f_charbig = 'was inserted';
15859COMMIT WORK;
15860ROLLBACK WORK;
15861
15862# check transactions-4 success: 	1
15863INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15864SELECT f_int1, f_int1, '', '', 'was inserted'
15865FROM t0_template source_tab
15866WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15867
15868# check transactions-5 success: 	1
15869ROLLBACK WORK;
15870
15871# check transactions-6 success: 	1
15872# INFO: Storage engine used for t1 seems to be transactional.
15873COMMIT;
15874
15875# check transactions-7 success: 	1
15876DELETE FROM t1 WHERE f_charbig = 'was inserted';
15877COMMIT WORK;
15878SET @@session.sql_mode = 'traditional';
15879SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15880INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15881SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15882'', '', 'was inserted' FROM t0_template
15883WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15884ERROR 22012: Division by 0
15885COMMIT;
15886
15887# check transactions-8 success: 	1
15888# INFO: Storage engine used for t1 seems to be able to revert
15889#       changes made by the failing statement.
15890SET @@session.sql_mode = '';
15891SET AUTOCOMMIT= 1;
15892DELETE FROM t1 WHERE f_charbig = 'was inserted';
15893COMMIT WORK;
15894UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15895
15896# check special-1 success: 	1
15897UPDATE t1 SET f_charbig = '';
15898
15899# check special-2 success: 	1
15900UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15901INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15902SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15903WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15904INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15905SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15906'just inserted' FROM t0_template
15907WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15908CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15909BEGIN
15910UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15911f_charbig = 'updated by trigger'
15912      WHERE f_int1 = new.f_int1;
15913END|
15914INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15915SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15916WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15917
15918# check trigger-1 success: 	1
15919DROP TRIGGER trg_1;
15920UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15921f_int2 = CAST(f_char1 AS SIGNED INT),
15922f_charbig = 'just inserted'
15923   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15924DELETE FROM t0_aux
15925WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15926INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15927SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15928'just inserted' FROM t0_template
15929WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15930CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15931BEGIN
15932UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15933f_charbig = 'updated by trigger'
15934      WHERE f_int1 = new.f_int1;
15935END|
15936INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15937SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15938WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15939
15940# check trigger-2 success: 	1
15941DROP TRIGGER trg_1;
15942UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15943f_int2 = CAST(f_char1 AS SIGNED INT),
15944f_charbig = 'just inserted'
15945   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15946DELETE FROM t0_aux
15947WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15948INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15949SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15950'just inserted' FROM t0_template
15951WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15952CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15953BEGIN
15954UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15955f_charbig = 'updated by trigger'
15956      WHERE f_int1 = new.f_int1;
15957END|
15958UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15959WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15960
15961# check trigger-3 success: 	1
15962DROP TRIGGER trg_1;
15963UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15964f_int2 = CAST(f_char1 AS SIGNED INT),
15965f_charbig = 'just inserted'
15966   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15967DELETE FROM t0_aux
15968WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15969INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15970SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15971'just inserted' FROM t0_template
15972WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15973CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15974BEGIN
15975UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15976f_charbig = 'updated by trigger'
15977      WHERE f_int1 = - old.f_int1;
15978END|
15979UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15980WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15981
15982# check trigger-4 success: 	1
15983DROP TRIGGER trg_1;
15984UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15985f_int2 = CAST(f_char1 AS SIGNED INT),
15986f_charbig = 'just inserted'
15987   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15988DELETE FROM t0_aux
15989WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15990INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15991SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15992'just inserted' FROM t0_template
15993WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15994CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15995BEGIN
15996UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15997f_charbig = 'updated by trigger'
15998      WHERE f_int1 = new.f_int1;
15999END|
16000UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16001WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16002
16003# check trigger-5 success: 	1
16004DROP TRIGGER trg_1;
16005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16006f_int2 = CAST(f_char1 AS SIGNED INT),
16007f_charbig = 'just inserted'
16008   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16009DELETE FROM t0_aux
16010WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16011INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16012SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16013'just inserted' FROM t0_template
16014WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16015CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16016BEGIN
16017UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16018f_charbig = 'updated by trigger'
16019      WHERE f_int1 = - old.f_int1;
16020END|
16021UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16022WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16023
16024# check trigger-6 success: 	1
16025DROP TRIGGER trg_1;
16026UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16027f_int2 = CAST(f_char1 AS SIGNED INT),
16028f_charbig = 'just inserted'
16029   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16030DELETE FROM t0_aux
16031WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16032INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16033SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16034'just inserted' FROM t0_template
16035WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16036CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16037BEGIN
16038UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16039f_charbig = 'updated by trigger'
16040      WHERE f_int1 = - old.f_int1;
16041END|
16042DELETE FROM t0_aux
16043WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16044
16045# check trigger-7 success: 	1
16046DROP TRIGGER trg_1;
16047UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16048f_int2 = CAST(f_char1 AS SIGNED INT),
16049f_charbig = 'just inserted'
16050   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16051DELETE FROM t0_aux
16052WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16053INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16054SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16055'just inserted' FROM t0_template
16056WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16057CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16058BEGIN
16059UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16060f_charbig = 'updated by trigger'
16061      WHERE f_int1 = - old.f_int1;
16062END|
16063DELETE FROM t0_aux
16064WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16065
16066# check trigger-8 success: 	1
16067DROP TRIGGER trg_1;
16068UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16069f_int2 = CAST(f_char1 AS SIGNED INT),
16070f_charbig = 'just inserted'
16071   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16072DELETE FROM t0_aux
16073WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16074DELETE FROM t1
16075WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16076CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16077BEGIN
16078SET new.f_int1 = old.f_int1 + @max_row,
16079new.f_int2 = old.f_int2 - @max_row,
16080new.f_charbig = '####updated per update trigger####';
16081END|
16082UPDATE t1
16083SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16084f_charbig = '####updated per update statement itself####';
16085
16086# check trigger-9 success: 	1
16087DROP TRIGGER trg_2;
16088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16089f_int2 = CAST(f_char1 AS SIGNED INT),
16090f_charbig = CONCAT('===',f_char1,'===');
16091CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16092BEGIN
16093SET new.f_int1 = new.f_int1 + @max_row,
16094new.f_int2 = new.f_int2 - @max_row,
16095new.f_charbig = '####updated per update trigger####';
16096END|
16097UPDATE t1
16098SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16099f_charbig = '####updated per update statement itself####';
16100
16101# check trigger-10 success: 	1
16102DROP TRIGGER trg_2;
16103UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16104f_int2 = CAST(f_char1 AS SIGNED INT),
16105f_charbig = CONCAT('===',f_char1,'===');
16106CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16107BEGIN
16108SET new.f_int1 = @my_max1 + @counter,
16109new.f_int2 = @my_min2 - @counter,
16110new.f_charbig = '####updated per insert trigger####';
16111SET @counter = @counter + 1;
16112END|
16113SET @counter = 1;
16114SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16115INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16116SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16117CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16119ORDER BY f_int1;
16120DROP TRIGGER trg_3;
16121
16122# check trigger-11 success: 	1
16123DELETE FROM t1
16124WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16125AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16126AND f_charbig = '####updated per insert trigger####';
16127CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16128BEGIN
16129SET new.f_int1 = @my_max1 + @counter,
16130new.f_int2 = @my_min2 - @counter,
16131new.f_charbig = '####updated per insert trigger####';
16132SET @counter = @counter + 1;
16133END|
16134SET @counter = 1;
16135SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16136INSERT INTO t1 (f_char1, f_char2, f_charbig)
16137SELECT CAST(f_int1 AS CHAR),
16138CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16140ORDER BY f_int1;
16141DROP TRIGGER trg_3;
16142
16143# check trigger-12 success: 	1
16144DELETE FROM t1
16145WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16146AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16147AND f_charbig = '####updated per insert trigger####';
16148ANALYZE  TABLE t1;
16149Table	Op	Msg_type	Msg_text
16150test.t1	analyze	status	OK
16151CHECK    TABLE t1 EXTENDED;
16152Table	Op	Msg_type	Msg_text
16153test.t1	check	status	OK
16154CHECKSUM TABLE t1 EXTENDED;
16155Table	Checksum
16156test.t1	<some_value>
16157OPTIMIZE TABLE t1;
16158Table	Op	Msg_type	Msg_text
16159test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16160test.t1	optimize	status	OK
16161# check layout success:    1
16162REPAIR   TABLE t1 EXTENDED;
16163Table	Op	Msg_type	Msg_text
16164test.t1	repair	status	OK
16165# check layout success:    1
16166TRUNCATE t1;
16167
16168# check TRUNCATE success: 	1
16169# check layout success:    1
16170# End usability test (inc/partition_check.inc)
16171DROP TABLE t1;
16172CREATE TABLE t1 (
16173f_int1 INTEGER DEFAULT 0,
16174f_int2 INTEGER DEFAULT 0,
16175f_char1 CHAR(20),
16176f_char2 CHAR(20),
16177f_charbig VARCHAR(1000)
16178
16179)
16180PARTITION BY LIST(ABS(MOD(f_int1,2)))
16181SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
16182(PARTITION part1 VALUES IN (0),
16183PARTITION part2 VALUES IN (1),
16184PARTITION part3 VALUES IN (NULL));
16185INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16186SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16187WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16188ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
16189INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16190SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16191WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16192# Start usability test (inc/partition_check.inc)
16193create_command
16194SHOW CREATE TABLE t1;
16195Table	Create Table
16196t1	CREATE TABLE `t1` (
16197  `f_int1` int(11) DEFAULT 0,
16198  `f_int2` int(11) DEFAULT 0,
16199  `f_char1` char(20) DEFAULT NULL,
16200  `f_char2` char(20) DEFAULT NULL,
16201  `f_charbig` varchar(1000) DEFAULT NULL,
16202  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
16203) ENGINE=InnoDB DEFAULT CHARSET=latin1
16204 PARTITION BY LIST (abs(`f_int1` MOD 2))
16205SUBPARTITION BY KEY (`f_int1`)
16206SUBPARTITIONS 3
16207(PARTITION `part1` VALUES IN (0) ENGINE = InnoDB,
16208 PARTITION `part2` VALUES IN (1) ENGINE = InnoDB,
16209 PARTITION `part3` VALUES IN (NULL) ENGINE = InnoDB)
16210
16211# check prerequisites-1 success:    1
16212# check COUNT(*) success:    1
16213# check MIN/MAX(f_int1) success:    1
16214# check MIN/MAX(f_int2) success:    1
16215INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16216SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16217CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16218WHERE f_int1 IN (2,3);
16219ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16220# check prerequisites-3 success:    1
16221# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16222INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16223SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16224CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16225WHERE f_int1 IN (2,3);
16226DELETE FROM t1 WHERE f_charbig = 'delete me';
16227INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16228SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16229CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16230WHERE f_int1 IN (2,3);
16231DELETE FROM t1 WHERE f_charbig = 'delete me';
16232# check read via f_int1 success: 1
16233# check read via f_int2 success: 1
16234
16235# check multiple-1 success: 	1
16236DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16237
16238# check multiple-2 success: 	1
16239INSERT INTO t1 SELECT * FROM t0_template
16240WHERE MOD(f_int1,3) = 0;
16241
16242# check multiple-3 success: 	1
16243UPDATE t1 SET f_int1 = f_int1 + @max_row
16244WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16245AND @max_row_div2 + @max_row_div4;
16246
16247# check multiple-4 success: 	1
16248DELETE FROM t1
16249WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16250AND @max_row_div2 + @max_row_div4 + @max_row;
16251
16252# check multiple-5 success: 	1
16253SELECT COUNT(*) INTO @try_count FROM t0_template
16254WHERE MOD(f_int1,3) = 0
16255AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16256SELECT COUNT(*) INTO @clash_count
16257FROM t1 INNER JOIN t0_template USING(f_int1)
16258WHERE MOD(f_int1,3) = 0
16259AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16260SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16261INSERT INTO t1
16262SET f_int1 = @cur_value , f_int2 = @cur_value,
16263f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16264f_charbig = '#SINGLE#';
16265
16266# check single-1 success: 	1
16267SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16268INSERT INTO t1
16269SET f_int1 = @cur_value , f_int2 = @cur_value,
16270f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16271f_charbig = '#SINGLE#';
16272
16273# check single-2 success: 	1
16274SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16275SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16276UPDATE t1 SET f_int1 = @cur_value2
16277WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16278
16279# check single-3 success: 	1
16280SET @cur_value1= -1;
16281SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16282UPDATE t1 SET f_int1 = @cur_value1
16283WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16284
16285# check single-4 success: 	1
16286SELECT MAX(f_int1) INTO @cur_value FROM t1;
16287DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16288
16289# check single-5 success: 	1
16290DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16291
16292# check single-6 success: 	1
16293INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16294
16295# check single-7 success: 	1
16296DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16297DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16298INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16299f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16300f_charbig = '#NULL#';
16301INSERT INTO t1
16302SET f_int1 = NULL , f_int2 = -@max_row,
16303f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16304f_charbig = '#NULL#';
16305# check null success:    1
16306
16307# check null-1 success: 	1
16308UPDATE t1 SET f_int1 = -@max_row
16309WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16310AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16311
16312# check null-2 success: 	1
16313UPDATE t1 SET f_int1 = NULL
16314WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16315AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16316
16317# check null-3 success: 	1
16318DELETE FROM t1
16319WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16320AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16321
16322# check null-4 success: 	1
16323DELETE FROM t1
16324WHERE f_int1 = 0 AND f_int2 = 0
16325AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16326AND f_charbig = '#NULL#';
16327INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16328SELECT f_int1, f_int1, '', '', 'was inserted'
16329   FROM t0_template source_tab
16330WHERE MOD(f_int1,3) = 0
16331AND f_int1 BETWEEN @max_row_div2 AND @max_row
16332ON DUPLICATE KEY
16333UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16334f_int2 = 2 * @max_row + source_tab.f_int1,
16335f_charbig = 'was updated';
16336
16337# check unique-1-a success: 	1
16338
16339# check unique-1-b success: 	1
16340DELETE FROM t1 WHERE f_charbig = 'was inserted';
16341UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16342f_int2 = CAST(f_char1 AS SIGNED INT),
16343f_charbig = CONCAT('===',f_char1,'===')
16344WHERE f_charbig = 'was updated';
16345REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16346SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16347   FROM t0_template source_tab
16348WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16349
16350# check replace success: 	1
16351DELETE FROM t1
16352WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16353DELETE FROM t1
16354WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16355f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16356UPDATE t1 SET f_int2 = f_int1,
16357f_char1 = CAST(f_int1 AS CHAR),
16358f_char2 = CAST(f_int1 AS CHAR),
16359f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16360WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16361SET AUTOCOMMIT= 0;
16362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16363SELECT f_int1, f_int1, '', '', 'was inserted'
16364FROM t0_template source_tab
16365WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16366
16367# check transactions-1 success: 	1
16368COMMIT WORK;
16369
16370# check transactions-2 success: 	1
16371ROLLBACK WORK;
16372
16373# check transactions-3 success: 	1
16374DELETE FROM t1 WHERE f_charbig = 'was inserted';
16375COMMIT WORK;
16376ROLLBACK WORK;
16377
16378# check transactions-4 success: 	1
16379INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16380SELECT f_int1, f_int1, '', '', 'was inserted'
16381FROM t0_template source_tab
16382WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16383
16384# check transactions-5 success: 	1
16385ROLLBACK WORK;
16386
16387# check transactions-6 success: 	1
16388# INFO: Storage engine used for t1 seems to be transactional.
16389COMMIT;
16390
16391# check transactions-7 success: 	1
16392DELETE FROM t1 WHERE f_charbig = 'was inserted';
16393COMMIT WORK;
16394SET @@session.sql_mode = 'traditional';
16395SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16396INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16397SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16398'', '', 'was inserted' FROM t0_template
16399WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16400ERROR 22012: Division by 0
16401COMMIT;
16402
16403# check transactions-8 success: 	1
16404# INFO: Storage engine used for t1 seems to be able to revert
16405#       changes made by the failing statement.
16406SET @@session.sql_mode = '';
16407SET AUTOCOMMIT= 1;
16408DELETE FROM t1 WHERE f_charbig = 'was inserted';
16409COMMIT WORK;
16410UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16411
16412# check special-1 success: 	1
16413UPDATE t1 SET f_charbig = '';
16414
16415# check special-2 success: 	1
16416UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16417INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16418SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16419WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16422'just inserted' FROM t0_template
16423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16424CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16425BEGIN
16426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16427f_charbig = 'updated by trigger'
16428      WHERE f_int1 = new.f_int1;
16429END|
16430INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16431SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16432WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16433
16434# check trigger-1 success: 	1
16435DROP TRIGGER trg_1;
16436UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16437f_int2 = CAST(f_char1 AS SIGNED INT),
16438f_charbig = 'just inserted'
16439   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16440DELETE FROM t0_aux
16441WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16442INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16443SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16444'just inserted' FROM t0_template
16445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16446CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16447BEGIN
16448UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16449f_charbig = 'updated by trigger'
16450      WHERE f_int1 = new.f_int1;
16451END|
16452INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16453SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16454WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16455
16456# check trigger-2 success: 	1
16457DROP TRIGGER trg_1;
16458UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16459f_int2 = CAST(f_char1 AS SIGNED INT),
16460f_charbig = 'just inserted'
16461   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16462DELETE FROM t0_aux
16463WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16464INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16465SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16466'just inserted' FROM t0_template
16467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16468CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16469BEGIN
16470UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16471f_charbig = 'updated by trigger'
16472      WHERE f_int1 = new.f_int1;
16473END|
16474UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16475WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16476
16477# check trigger-3 success: 	1
16478DROP TRIGGER trg_1;
16479UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16480f_int2 = CAST(f_char1 AS SIGNED INT),
16481f_charbig = 'just inserted'
16482   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16483DELETE FROM t0_aux
16484WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16485INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16486SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16487'just inserted' FROM t0_template
16488WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16489CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16490BEGIN
16491UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16492f_charbig = 'updated by trigger'
16493      WHERE f_int1 = - old.f_int1;
16494END|
16495UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16496WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16497
16498# check trigger-4 success: 	1
16499DROP TRIGGER trg_1;
16500UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16501f_int2 = CAST(f_char1 AS SIGNED INT),
16502f_charbig = 'just inserted'
16503   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16504DELETE FROM t0_aux
16505WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16506INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16507SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16508'just inserted' FROM t0_template
16509WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16510CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16511BEGIN
16512UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16513f_charbig = 'updated by trigger'
16514      WHERE f_int1 = new.f_int1;
16515END|
16516UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16517WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16518
16519# check trigger-5 success: 	1
16520DROP TRIGGER trg_1;
16521UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16522f_int2 = CAST(f_char1 AS SIGNED INT),
16523f_charbig = 'just inserted'
16524   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16525DELETE FROM t0_aux
16526WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16527INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16528SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16529'just inserted' FROM t0_template
16530WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16531CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16532BEGIN
16533UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16534f_charbig = 'updated by trigger'
16535      WHERE f_int1 = - old.f_int1;
16536END|
16537UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16538WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16539
16540# check trigger-6 success: 	1
16541DROP TRIGGER trg_1;
16542UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16543f_int2 = CAST(f_char1 AS SIGNED INT),
16544f_charbig = 'just inserted'
16545   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16546DELETE FROM t0_aux
16547WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16548INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16549SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16550'just inserted' FROM t0_template
16551WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16552CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16553BEGIN
16554UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16555f_charbig = 'updated by trigger'
16556      WHERE f_int1 = - old.f_int1;
16557END|
16558DELETE FROM t0_aux
16559WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16560
16561# check trigger-7 success: 	1
16562DROP TRIGGER trg_1;
16563UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16564f_int2 = CAST(f_char1 AS SIGNED INT),
16565f_charbig = 'just inserted'
16566   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16567DELETE FROM t0_aux
16568WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16570SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16571'just inserted' FROM t0_template
16572WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16573CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16574BEGIN
16575UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16576f_charbig = 'updated by trigger'
16577      WHERE f_int1 = - old.f_int1;
16578END|
16579DELETE FROM t0_aux
16580WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16581
16582# check trigger-8 success: 	1
16583DROP TRIGGER trg_1;
16584UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16585f_int2 = CAST(f_char1 AS SIGNED INT),
16586f_charbig = 'just inserted'
16587   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16588DELETE FROM t0_aux
16589WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16590DELETE FROM t1
16591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16592CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16593BEGIN
16594SET new.f_int1 = old.f_int1 + @max_row,
16595new.f_int2 = old.f_int2 - @max_row,
16596new.f_charbig = '####updated per update trigger####';
16597END|
16598UPDATE t1
16599SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16600f_charbig = '####updated per update statement itself####';
16601
16602# check trigger-9 success: 	1
16603DROP TRIGGER trg_2;
16604UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16605f_int2 = CAST(f_char1 AS SIGNED INT),
16606f_charbig = CONCAT('===',f_char1,'===');
16607CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16608BEGIN
16609SET new.f_int1 = new.f_int1 + @max_row,
16610new.f_int2 = new.f_int2 - @max_row,
16611new.f_charbig = '####updated per update trigger####';
16612END|
16613UPDATE t1
16614SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16615f_charbig = '####updated per update statement itself####';
16616
16617# check trigger-10 success: 	1
16618DROP TRIGGER trg_2;
16619UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16620f_int2 = CAST(f_char1 AS SIGNED INT),
16621f_charbig = CONCAT('===',f_char1,'===');
16622CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16623BEGIN
16624SET new.f_int1 = @my_max1 + @counter,
16625new.f_int2 = @my_min2 - @counter,
16626new.f_charbig = '####updated per insert trigger####';
16627SET @counter = @counter + 1;
16628END|
16629SET @counter = 1;
16630SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16631INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16632SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16633CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16635ORDER BY f_int1;
16636DROP TRIGGER trg_3;
16637
16638# check trigger-11 success: 	1
16639DELETE FROM t1
16640WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16641AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16642AND f_charbig = '####updated per insert trigger####';
16643CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16644BEGIN
16645SET new.f_int1 = @my_max1 + @counter,
16646new.f_int2 = @my_min2 - @counter,
16647new.f_charbig = '####updated per insert trigger####';
16648SET @counter = @counter + 1;
16649END|
16650SET @counter = 1;
16651SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16652INSERT INTO t1 (f_char1, f_char2, f_charbig)
16653SELECT CAST(f_int1 AS CHAR),
16654CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16656ORDER BY f_int1;
16657DROP TRIGGER trg_3;
16658
16659# check trigger-12 success: 	1
16660DELETE FROM t1
16661WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16662AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16663AND f_charbig = '####updated per insert trigger####';
16664ANALYZE  TABLE t1;
16665Table	Op	Msg_type	Msg_text
16666test.t1	analyze	status	OK
16667CHECK    TABLE t1 EXTENDED;
16668Table	Op	Msg_type	Msg_text
16669test.t1	check	status	OK
16670CHECKSUM TABLE t1 EXTENDED;
16671Table	Checksum
16672test.t1	<some_value>
16673OPTIMIZE TABLE t1;
16674Table	Op	Msg_type	Msg_text
16675test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16676test.t1	optimize	status	OK
16677# check layout success:    1
16678REPAIR   TABLE t1 EXTENDED;
16679Table	Op	Msg_type	Msg_text
16680test.t1	repair	status	OK
16681# check layout success:    1
16682TRUNCATE t1;
16683
16684# check TRUNCATE success: 	1
16685# check layout success:    1
16686# End usability test (inc/partition_check.inc)
16687DROP TABLE t1;
16688DROP VIEW  IF EXISTS v1;
16689DROP TABLE IF EXISTS t1;
16690DROP TABLE IF EXISTS t0_aux;
16691DROP TABLE IF EXISTS t0_definition;
16692DROP TABLE IF EXISTS t0_template;
16693