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,
15f_int2 INTEGER,
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,
31f_int2 INTEGER,
32f_char1 CHAR(20),
33f_char2 CHAR(20),
34f_charbig VARCHAR(1000) )
35ENGINE = MEMORY;
36SET AUTOCOMMIT= 1;
37SET @@session.sql_mode= '';
38Warnings:
39Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
40# End of basic preparations needed for all tests
41#-----------------------------------------------
42
43#========================================================================
44#  Check partitioning methods on just created tables
45#  The tables should be defined without/with PRIMARY KEY and
46#  UNIQUE INDEXes.
47#  Every test round has to check
48#        PARTITION BY HASH/KEY/LIST/RANGE
49#        PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ...
50#========================================================================
51#------------------------------------------------------------------------
52#  1   Tables without PRIMARY KEY or UNIQUE INDEXes
53#------------------------------------------------------------------------
54#  1.1 The partitioning function contains one column.
55DROP TABLE IF EXISTS t1;
56CREATE TABLE t1 (
57f_int1 INTEGER,
58f_int2 INTEGER,
59f_char1 CHAR(20),
60f_char2 CHAR(20),
61f_charbig VARCHAR(1000)
62
63)
64PARTITION BY HASH(f_int1) PARTITIONS 2;
65INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
66SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
67# Start usability test (inc/partition_check.inc)
68create_command
69SHOW CREATE TABLE t1;
70Table	Create Table
71t1	CREATE TABLE `t1` (
72  `f_int1` int(11) DEFAULT NULL,
73  `f_int2` int(11) DEFAULT NULL,
74  `f_char1` char(20) DEFAULT NULL,
75  `f_char2` char(20) DEFAULT NULL,
76  `f_charbig` varchar(1000) DEFAULT NULL
77) ENGINE=InnoDB DEFAULT CHARSET=latin1
78/*!50100 PARTITION BY HASH (f_int1)
79PARTITIONS 2 */
80
81unified filelist
82t1#P#p0.ibd
83t1#P#p1.ibd
84t1.frm
85
86# check prerequisites-1 success:    1
87# check COUNT(*) success:    1
88# check MIN/MAX(f_int1) success:    1
89# check MIN/MAX(f_int2) success:    1
90INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
91SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
92CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
93WHERE f_int1 IN (2,3);
94# check prerequisites-3 success:    1
95DELETE FROM t1 WHERE f_charbig = 'delete me';
96# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
97# check read via f_int1 success: 1
98# check read via f_int2 success: 1
99
100# check multiple-1 success: 	1
101DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
102
103# check multiple-2 success: 	1
104INSERT INTO t1 SELECT * FROM t0_template
105WHERE MOD(f_int1,3) = 0;
106
107# check multiple-3 success: 	1
108UPDATE t1 SET f_int1 = f_int1 + @max_row
109WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
110AND @max_row_div2 + @max_row_div4;
111
112# check multiple-4 success: 	1
113DELETE FROM t1
114WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
115AND @max_row_div2 + @max_row_div4 + @max_row;
116
117# check multiple-5 success: 	1
118SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
119INSERT INTO t1
120SET f_int1 = @cur_value , f_int2 = @cur_value,
121f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
122f_charbig = '#SINGLE#';
123
124# check single-1 success: 	1
125SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
126INSERT INTO t1
127SET f_int1 = @cur_value , f_int2 = @cur_value,
128f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
129f_charbig = '#SINGLE#';
130
131# check single-2 success: 	1
132SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
133SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
134UPDATE t1 SET f_int1 = @cur_value2
135WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
136
137# check single-3 success: 	1
138SET @cur_value1= -1;
139SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
140UPDATE t1 SET f_int1 = @cur_value1
141WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
142
143# check single-4 success: 	1
144SELECT MAX(f_int1) INTO @cur_value FROM t1;
145DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
146
147# check single-5 success: 	1
148DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
149
150# check single-6 success: 	1
151INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
152
153# check single-7 success: 	1
154DELETE FROM t1 WHERE f_charbig = '#2147483647##';
155DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
156INSERT t1 SET f_int1 = 0 , f_int2 = 0,
157f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
158f_charbig = '#NULL#';
159INSERT INTO t1
160SET f_int1 = NULL , f_int2 = -@max_row,
161f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
162f_charbig = '#NULL#';
163# check null success:    1
164
165# check null-1 success: 	1
166UPDATE t1 SET f_int1 = -@max_row
167WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
168AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
169
170# check null-2 success: 	1
171UPDATE t1 SET f_int1 = NULL
172WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
173AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
174
175# check null-3 success: 	1
176DELETE FROM t1
177WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
178AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
179
180# check null-4 success: 	1
181DELETE FROM t1
182WHERE f_int1 = 0 AND f_int2 = 0
183AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
184AND f_charbig = '#NULL#';
185SET AUTOCOMMIT= 0;
186INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
187SELECT f_int1, f_int1, '', '', 'was inserted'
188FROM t0_template source_tab
189WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
190
191# check transactions-1 success: 	1
192COMMIT WORK;
193
194# check transactions-2 success: 	1
195ROLLBACK WORK;
196
197# check transactions-3 success: 	1
198DELETE FROM t1 WHERE f_charbig = 'was inserted';
199COMMIT WORK;
200ROLLBACK WORK;
201
202# check transactions-4 success: 	1
203INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
204SELECT f_int1, f_int1, '', '', 'was inserted'
205FROM t0_template source_tab
206WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
207
208# check transactions-5 success: 	1
209ROLLBACK WORK;
210
211# check transactions-6 success: 	1
212# INFO: Storage engine used for t1 seems to be transactional.
213COMMIT;
214
215# check transactions-7 success: 	1
216DELETE FROM t1 WHERE f_charbig = 'was inserted';
217COMMIT WORK;
218SET @@session.sql_mode = 'traditional';
219Warnings:
220Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
221SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
222INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
223SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
224'', '', 'was inserted' FROM t0_template
225WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
226ERROR 22012: Division by 0
227COMMIT;
228
229# check transactions-8 success: 	1
230# INFO: Storage engine used for t1 seems to be able to revert
231#       changes made by the failing statement.
232SET @@session.sql_mode = '';
233Warnings:
234Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
235SET AUTOCOMMIT= 1;
236DELETE FROM t1 WHERE f_charbig = 'was inserted';
237COMMIT WORK;
238UPDATE t1 SET f_charbig = REPEAT('b', 1000);
239
240# check special-1 success: 	1
241UPDATE t1 SET f_charbig = '';
242
243# check special-2 success: 	1
244UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
245INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
246SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
247WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
248INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
249SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
250'just inserted' FROM t0_template
251WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
252CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
253BEGIN
254UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
255f_charbig = 'updated by trigger'
256      WHERE f_int1 = new.f_int1;
257END|
258INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
259SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
261
262# check trigger-1 success: 	1
263DROP TRIGGER trg_1;
264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
265f_int2 = CAST(f_char1 AS SIGNED INT),
266f_charbig = 'just inserted'
267   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
268DELETE FROM t0_aux
269WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
270INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
271SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
272'just inserted' FROM t0_template
273WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
274CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
275BEGIN
276UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
277f_charbig = 'updated by trigger'
278      WHERE f_int1 = new.f_int1;
279END|
280INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
281SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
283
284# check trigger-2 success: 	1
285DROP TRIGGER trg_1;
286UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
287f_int2 = CAST(f_char1 AS SIGNED INT),
288f_charbig = 'just inserted'
289   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
290DELETE FROM t0_aux
291WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
292INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
293SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
294'just inserted' FROM t0_template
295WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
296CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
297BEGIN
298UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
299f_charbig = 'updated by trigger'
300      WHERE f_int1 = new.f_int1;
301END|
302UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
303WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
304
305# check trigger-3 success: 	1
306DROP TRIGGER trg_1;
307UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
308f_int2 = CAST(f_char1 AS SIGNED INT),
309f_charbig = 'just inserted'
310   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
311DELETE FROM t0_aux
312WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
313INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
314SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
315'just inserted' FROM t0_template
316WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
317CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
318BEGIN
319UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
320f_charbig = 'updated by trigger'
321      WHERE f_int1 = - old.f_int1;
322END|
323UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
324WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
325
326# check trigger-4 success: 	1
327DROP TRIGGER trg_1;
328UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
329f_int2 = CAST(f_char1 AS SIGNED INT),
330f_charbig = 'just inserted'
331   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
332DELETE FROM t0_aux
333WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
334INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
335SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
336'just inserted' FROM t0_template
337WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
338CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
339BEGIN
340UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
341f_charbig = 'updated by trigger'
342      WHERE f_int1 = new.f_int1;
343END|
344UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
345WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
346
347# check trigger-5 success: 	1
348DROP TRIGGER trg_1;
349UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
350f_int2 = CAST(f_char1 AS SIGNED INT),
351f_charbig = 'just inserted'
352   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
353DELETE FROM t0_aux
354WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
355INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
356SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
357'just inserted' FROM t0_template
358WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
359CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
360BEGIN
361UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
362f_charbig = 'updated by trigger'
363      WHERE f_int1 = - old.f_int1;
364END|
365UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
366WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
367
368# check trigger-6 success: 	1
369DROP TRIGGER trg_1;
370UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
371f_int2 = CAST(f_char1 AS SIGNED INT),
372f_charbig = 'just inserted'
373   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
374DELETE FROM t0_aux
375WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
376INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
377SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
378'just inserted' FROM t0_template
379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
380CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
381BEGIN
382UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
383f_charbig = 'updated by trigger'
384      WHERE f_int1 = - old.f_int1;
385END|
386DELETE FROM t0_aux
387WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
388
389# check trigger-7 success: 	1
390DROP TRIGGER trg_1;
391UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
392f_int2 = CAST(f_char1 AS SIGNED INT),
393f_charbig = 'just inserted'
394   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
395DELETE FROM t0_aux
396WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
397INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
398SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
399'just inserted' FROM t0_template
400WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
401CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
402BEGIN
403UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
404f_charbig = 'updated by trigger'
405      WHERE f_int1 = - old.f_int1;
406END|
407DELETE FROM t0_aux
408WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
409
410# check trigger-8 success: 	1
411DROP TRIGGER trg_1;
412UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
413f_int2 = CAST(f_char1 AS SIGNED INT),
414f_charbig = 'just inserted'
415   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
416DELETE FROM t0_aux
417WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
418DELETE FROM t1
419WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
420CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
421BEGIN
422SET new.f_int1 = old.f_int1 + @max_row,
423new.f_int2 = old.f_int2 - @max_row,
424new.f_charbig = '####updated per update trigger####';
425END|
426UPDATE t1
427SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
428f_charbig = '####updated per update statement itself####';
429
430# check trigger-9 success: 	1
431DROP TRIGGER trg_2;
432UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
433f_int2 = CAST(f_char1 AS SIGNED INT),
434f_charbig = CONCAT('===',f_char1,'===');
435CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
436BEGIN
437SET new.f_int1 = new.f_int1 + @max_row,
438new.f_int2 = new.f_int2 - @max_row,
439new.f_charbig = '####updated per update trigger####';
440END|
441UPDATE t1
442SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
443f_charbig = '####updated per update statement itself####';
444
445# check trigger-10 success: 	1
446DROP TRIGGER trg_2;
447UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
448f_int2 = CAST(f_char1 AS SIGNED INT),
449f_charbig = CONCAT('===',f_char1,'===');
450CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
451BEGIN
452SET new.f_int1 = @my_max1 + @counter,
453new.f_int2 = @my_min2 - @counter,
454new.f_charbig = '####updated per insert trigger####';
455SET @counter = @counter + 1;
456END|
457SET @counter = 1;
458SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
459INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
460SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
461CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
462WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
463ORDER BY f_int1;
464DROP TRIGGER trg_3;
465
466# check trigger-11 success: 	1
467DELETE FROM t1
468WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
469AND f_int2 <> CAST(f_char1 AS SIGNED INT)
470AND f_charbig = '####updated per insert trigger####';
471CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
472BEGIN
473SET new.f_int1 = @my_max1 + @counter,
474new.f_int2 = @my_min2 - @counter,
475new.f_charbig = '####updated per insert trigger####';
476SET @counter = @counter + 1;
477END|
478SET @counter = 1;
479SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
480INSERT INTO t1 (f_char1, f_char2, f_charbig)
481SELECT CAST(f_int1 AS CHAR),
482CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
483WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
484ORDER BY f_int1;
485DROP TRIGGER trg_3;
486
487# check trigger-12 success: 	1
488DELETE FROM t1
489WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
490AND f_int2 <> CAST(f_char1 AS SIGNED INT)
491AND f_charbig = '####updated per insert trigger####';
492ANALYZE  TABLE t1;
493Table	Op	Msg_type	Msg_text
494test.t1	analyze	status	OK
495CHECK    TABLE t1 EXTENDED;
496Table	Op	Msg_type	Msg_text
497test.t1	check	status	OK
498CHECKSUM TABLE t1 EXTENDED;
499Table	Checksum
500test.t1	<some_value>
501OPTIMIZE TABLE t1;
502Table	Op	Msg_type	Msg_text
503test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
504test.t1	optimize	status	OK
505# check layout success:    1
506REPAIR   TABLE t1 EXTENDED;
507Table	Op	Msg_type	Msg_text
508test.t1	repair	status	OK
509# check layout success:    1
510TRUNCATE t1;
511
512# check TRUNCATE success: 	1
513# check layout success:    1
514# End usability test (inc/partition_check.inc)
515DROP TABLE t1;
516CREATE TABLE t1 (
517f_int1 INTEGER,
518f_int2 INTEGER,
519f_char1 CHAR(20),
520f_char2 CHAR(20),
521f_charbig VARCHAR(1000)
522
523)
524PARTITION BY KEY(f_int1) PARTITIONS 5;
525INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
526SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
527# Start usability test (inc/partition_check.inc)
528create_command
529SHOW CREATE TABLE t1;
530Table	Create Table
531t1	CREATE TABLE `t1` (
532  `f_int1` int(11) DEFAULT NULL,
533  `f_int2` int(11) DEFAULT NULL,
534  `f_char1` char(20) DEFAULT NULL,
535  `f_char2` char(20) DEFAULT NULL,
536  `f_charbig` varchar(1000) DEFAULT NULL
537) ENGINE=InnoDB DEFAULT CHARSET=latin1
538/*!50100 PARTITION BY KEY (f_int1)
539PARTITIONS 5 */
540
541unified filelist
542t1#P#p0.ibd
543t1#P#p1.ibd
544t1#P#p2.ibd
545t1#P#p3.ibd
546t1#P#p4.ibd
547t1.frm
548
549# check prerequisites-1 success:    1
550# check COUNT(*) success:    1
551# check MIN/MAX(f_int1) success:    1
552# check MIN/MAX(f_int2) success:    1
553INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
554SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
555CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
556WHERE f_int1 IN (2,3);
557# check prerequisites-3 success:    1
558DELETE FROM t1 WHERE f_charbig = 'delete me';
559# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
560# check read via f_int1 success: 1
561# check read via f_int2 success: 1
562
563# check multiple-1 success: 	1
564DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
565
566# check multiple-2 success: 	1
567INSERT INTO t1 SELECT * FROM t0_template
568WHERE MOD(f_int1,3) = 0;
569
570# check multiple-3 success: 	1
571UPDATE t1 SET f_int1 = f_int1 + @max_row
572WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
573AND @max_row_div2 + @max_row_div4;
574
575# check multiple-4 success: 	1
576DELETE FROM t1
577WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
578AND @max_row_div2 + @max_row_div4 + @max_row;
579
580# check multiple-5 success: 	1
581SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
582INSERT INTO t1
583SET f_int1 = @cur_value , f_int2 = @cur_value,
584f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
585f_charbig = '#SINGLE#';
586
587# check single-1 success: 	1
588SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
589INSERT INTO t1
590SET f_int1 = @cur_value , f_int2 = @cur_value,
591f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
592f_charbig = '#SINGLE#';
593
594# check single-2 success: 	1
595SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
596SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
597UPDATE t1 SET f_int1 = @cur_value2
598WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
599
600# check single-3 success: 	1
601SET @cur_value1= -1;
602SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
603UPDATE t1 SET f_int1 = @cur_value1
604WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
605
606# check single-4 success: 	1
607SELECT MAX(f_int1) INTO @cur_value FROM t1;
608DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
609
610# check single-5 success: 	1
611DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
612
613# check single-6 success: 	1
614INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
615
616# check single-7 success: 	1
617DELETE FROM t1 WHERE f_charbig = '#2147483647##';
618DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
619INSERT t1 SET f_int1 = 0 , f_int2 = 0,
620f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
621f_charbig = '#NULL#';
622INSERT INTO t1
623SET f_int1 = NULL , f_int2 = -@max_row,
624f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
625f_charbig = '#NULL#';
626# check null success:    1
627
628# check null-1 success: 	1
629UPDATE t1 SET f_int1 = -@max_row
630WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
631AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
632
633# check null-2 success: 	1
634UPDATE t1 SET f_int1 = NULL
635WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
636AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
637
638# check null-3 success: 	1
639DELETE FROM t1
640WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
641AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
642
643# check null-4 success: 	1
644DELETE FROM t1
645WHERE f_int1 = 0 AND f_int2 = 0
646AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
647AND f_charbig = '#NULL#';
648SET AUTOCOMMIT= 0;
649INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
650SELECT f_int1, f_int1, '', '', 'was inserted'
651FROM t0_template source_tab
652WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
653
654# check transactions-1 success: 	1
655COMMIT WORK;
656
657# check transactions-2 success: 	1
658ROLLBACK WORK;
659
660# check transactions-3 success: 	1
661DELETE FROM t1 WHERE f_charbig = 'was inserted';
662COMMIT WORK;
663ROLLBACK WORK;
664
665# check transactions-4 success: 	1
666INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
667SELECT f_int1, f_int1, '', '', 'was inserted'
668FROM t0_template source_tab
669WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
670
671# check transactions-5 success: 	1
672ROLLBACK WORK;
673
674# check transactions-6 success: 	1
675# INFO: Storage engine used for t1 seems to be transactional.
676COMMIT;
677
678# check transactions-7 success: 	1
679DELETE FROM t1 WHERE f_charbig = 'was inserted';
680COMMIT WORK;
681SET @@session.sql_mode = 'traditional';
682Warnings:
683Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
684SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
685INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
686SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
687'', '', 'was inserted' FROM t0_template
688WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
689ERROR 22012: Division by 0
690COMMIT;
691
692# check transactions-8 success: 	1
693# INFO: Storage engine used for t1 seems to be able to revert
694#       changes made by the failing statement.
695SET @@session.sql_mode = '';
696Warnings:
697Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
698SET AUTOCOMMIT= 1;
699DELETE FROM t1 WHERE f_charbig = 'was inserted';
700COMMIT WORK;
701UPDATE t1 SET f_charbig = REPEAT('b', 1000);
702
703# check special-1 success: 	1
704UPDATE t1 SET f_charbig = '';
705
706# check special-2 success: 	1
707UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
708INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
709SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
710WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
711INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
712SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
713'just inserted' FROM t0_template
714WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
715CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
716BEGIN
717UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
718f_charbig = 'updated by trigger'
719      WHERE f_int1 = new.f_int1;
720END|
721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
722SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
723WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
724
725# check trigger-1 success: 	1
726DROP TRIGGER trg_1;
727UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
728f_int2 = CAST(f_char1 AS SIGNED INT),
729f_charbig = 'just inserted'
730   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
731DELETE FROM t0_aux
732WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
733INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
734SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
735'just inserted' FROM t0_template
736WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
737CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
738BEGIN
739UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
740f_charbig = 'updated by trigger'
741      WHERE f_int1 = new.f_int1;
742END|
743INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
744SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
746
747# check trigger-2 success: 	1
748DROP TRIGGER trg_1;
749UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
750f_int2 = CAST(f_char1 AS SIGNED INT),
751f_charbig = 'just inserted'
752   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
753DELETE FROM t0_aux
754WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
755INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
756SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
757'just inserted' FROM t0_template
758WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
759CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
760BEGIN
761UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
762f_charbig = 'updated by trigger'
763      WHERE f_int1 = new.f_int1;
764END|
765UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
766WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
767
768# check trigger-3 success: 	1
769DROP TRIGGER trg_1;
770UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
771f_int2 = CAST(f_char1 AS SIGNED INT),
772f_charbig = 'just inserted'
773   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
774DELETE FROM t0_aux
775WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
776INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
777SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
778'just inserted' FROM t0_template
779WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
780CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
781BEGIN
782UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
783f_charbig = 'updated by trigger'
784      WHERE f_int1 = - old.f_int1;
785END|
786UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
787WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
788
789# check trigger-4 success: 	1
790DROP TRIGGER trg_1;
791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
792f_int2 = CAST(f_char1 AS SIGNED INT),
793f_charbig = 'just inserted'
794   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
795DELETE FROM t0_aux
796WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
797INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
798SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
799'just inserted' FROM t0_template
800WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
801CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
802BEGIN
803UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
804f_charbig = 'updated by trigger'
805      WHERE f_int1 = new.f_int1;
806END|
807UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
808WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
809
810# check trigger-5 success: 	1
811DROP TRIGGER trg_1;
812UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
813f_int2 = CAST(f_char1 AS SIGNED INT),
814f_charbig = 'just inserted'
815   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
816DELETE FROM t0_aux
817WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
818INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
819SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
820'just inserted' FROM t0_template
821WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
822CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
823BEGIN
824UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
825f_charbig = 'updated by trigger'
826      WHERE f_int1 = - old.f_int1;
827END|
828UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
829WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
830
831# check trigger-6 success: 	1
832DROP TRIGGER trg_1;
833UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
834f_int2 = CAST(f_char1 AS SIGNED INT),
835f_charbig = 'just inserted'
836   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
837DELETE FROM t0_aux
838WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
839INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
840SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
841'just inserted' FROM t0_template
842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
843CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
844BEGIN
845UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
846f_charbig = 'updated by trigger'
847      WHERE f_int1 = - old.f_int1;
848END|
849DELETE FROM t0_aux
850WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
851
852# check trigger-7 success: 	1
853DROP TRIGGER trg_1;
854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
855f_int2 = CAST(f_char1 AS SIGNED INT),
856f_charbig = 'just inserted'
857   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
858DELETE FROM t0_aux
859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
862'just inserted' FROM t0_template
863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
864CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
865BEGIN
866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
867f_charbig = 'updated by trigger'
868      WHERE f_int1 = - old.f_int1;
869END|
870DELETE FROM t0_aux
871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
872
873# check trigger-8 success: 	1
874DROP TRIGGER trg_1;
875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
876f_int2 = CAST(f_char1 AS SIGNED INT),
877f_charbig = 'just inserted'
878   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
879DELETE FROM t0_aux
880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
881DELETE FROM t1
882WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
883CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
884BEGIN
885SET new.f_int1 = old.f_int1 + @max_row,
886new.f_int2 = old.f_int2 - @max_row,
887new.f_charbig = '####updated per update trigger####';
888END|
889UPDATE t1
890SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
891f_charbig = '####updated per update statement itself####';
892
893# check trigger-9 success: 	1
894DROP TRIGGER trg_2;
895UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
896f_int2 = CAST(f_char1 AS SIGNED INT),
897f_charbig = CONCAT('===',f_char1,'===');
898CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
899BEGIN
900SET new.f_int1 = new.f_int1 + @max_row,
901new.f_int2 = new.f_int2 - @max_row,
902new.f_charbig = '####updated per update trigger####';
903END|
904UPDATE t1
905SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
906f_charbig = '####updated per update statement itself####';
907
908# check trigger-10 success: 	1
909DROP TRIGGER trg_2;
910UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
911f_int2 = CAST(f_char1 AS SIGNED INT),
912f_charbig = CONCAT('===',f_char1,'===');
913CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
914BEGIN
915SET new.f_int1 = @my_max1 + @counter,
916new.f_int2 = @my_min2 - @counter,
917new.f_charbig = '####updated per insert trigger####';
918SET @counter = @counter + 1;
919END|
920SET @counter = 1;
921SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
922INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
923SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
924CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
925WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
926ORDER BY f_int1;
927DROP TRIGGER trg_3;
928
929# check trigger-11 success: 	1
930DELETE FROM t1
931WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
932AND f_int2 <> CAST(f_char1 AS SIGNED INT)
933AND f_charbig = '####updated per insert trigger####';
934CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
935BEGIN
936SET new.f_int1 = @my_max1 + @counter,
937new.f_int2 = @my_min2 - @counter,
938new.f_charbig = '####updated per insert trigger####';
939SET @counter = @counter + 1;
940END|
941SET @counter = 1;
942SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
943INSERT INTO t1 (f_char1, f_char2, f_charbig)
944SELECT CAST(f_int1 AS CHAR),
945CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
946WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
947ORDER BY f_int1;
948DROP TRIGGER trg_3;
949
950# check trigger-12 success: 	1
951DELETE FROM t1
952WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
953AND f_int2 <> CAST(f_char1 AS SIGNED INT)
954AND f_charbig = '####updated per insert trigger####';
955ANALYZE  TABLE t1;
956Table	Op	Msg_type	Msg_text
957test.t1	analyze	status	OK
958CHECK    TABLE t1 EXTENDED;
959Table	Op	Msg_type	Msg_text
960test.t1	check	status	OK
961CHECKSUM TABLE t1 EXTENDED;
962Table	Checksum
963test.t1	<some_value>
964OPTIMIZE TABLE t1;
965Table	Op	Msg_type	Msg_text
966test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
967test.t1	optimize	status	OK
968# check layout success:    1
969REPAIR   TABLE t1 EXTENDED;
970Table	Op	Msg_type	Msg_text
971test.t1	repair	status	OK
972# check layout success:    1
973TRUNCATE t1;
974
975# check TRUNCATE success: 	1
976# check layout success:    1
977# End usability test (inc/partition_check.inc)
978DROP TABLE t1;
979CREATE TABLE t1 (
980f_int1 INTEGER,
981f_int2 INTEGER,
982f_char1 CHAR(20),
983f_char2 CHAR(20),
984f_charbig VARCHAR(1000)
985
986)
987PARTITION BY LIST(MOD(f_int1,4))
988(PARTITION part_3 VALUES IN (-3),
989PARTITION part_2 VALUES IN (-2),
990PARTITION part_1 VALUES IN (-1),
991PARTITION part_N VALUES IN (NULL),
992PARTITION part0 VALUES IN (0),
993PARTITION part1 VALUES IN (1),
994PARTITION part2 VALUES IN (2),
995PARTITION part3 VALUES IN (3));
996INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
997SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
998# Start usability test (inc/partition_check.inc)
999create_command
1000SHOW CREATE TABLE t1;
1001Table	Create Table
1002t1	CREATE TABLE `t1` (
1003  `f_int1` int(11) DEFAULT NULL,
1004  `f_int2` int(11) DEFAULT NULL,
1005  `f_char1` char(20) DEFAULT NULL,
1006  `f_char2` char(20) DEFAULT NULL,
1007  `f_charbig` varchar(1000) DEFAULT NULL
1008) ENGINE=InnoDB DEFAULT CHARSET=latin1
1009/*!50100 PARTITION BY LIST (MOD(f_int1,4))
1010(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
1011 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
1012 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
1013 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
1014 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
1015 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
1016 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
1017 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
1018
1019unified filelist
1020t1#P#part0.ibd
1021t1#P#part1.ibd
1022t1#P#part2.ibd
1023t1#P#part3.ibd
1024t1#P#part_1.ibd
1025t1#P#part_2.ibd
1026t1#P#part_3.ibd
1027t1#P#part_N.ibd
1028t1.frm
1029
1030# check prerequisites-1 success:    1
1031# check COUNT(*) success:    1
1032# check MIN/MAX(f_int1) success:    1
1033# check MIN/MAX(f_int2) success:    1
1034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1035SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1036CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1037WHERE f_int1 IN (2,3);
1038# check prerequisites-3 success:    1
1039DELETE FROM t1 WHERE f_charbig = 'delete me';
1040# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1041# check read via f_int1 success: 1
1042# check read via f_int2 success: 1
1043
1044# check multiple-1 success: 	1
1045DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1046
1047# check multiple-2 success: 	1
1048INSERT INTO t1 SELECT * FROM t0_template
1049WHERE MOD(f_int1,3) = 0;
1050
1051# check multiple-3 success: 	1
1052UPDATE t1 SET f_int1 = f_int1 + @max_row
1053WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1054AND @max_row_div2 + @max_row_div4;
1055
1056# check multiple-4 success: 	1
1057DELETE FROM t1
1058WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1059AND @max_row_div2 + @max_row_div4 + @max_row;
1060
1061# check multiple-5 success: 	1
1062SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1063INSERT INTO t1
1064SET f_int1 = @cur_value , f_int2 = @cur_value,
1065f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1066f_charbig = '#SINGLE#';
1067
1068# check single-1 success: 	1
1069SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1070INSERT INTO t1
1071SET f_int1 = @cur_value , f_int2 = @cur_value,
1072f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1073f_charbig = '#SINGLE#';
1074
1075# check single-2 success: 	1
1076SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1077SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1078UPDATE t1 SET f_int1 = @cur_value2
1079WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1080
1081# check single-3 success: 	1
1082SET @cur_value1= -1;
1083SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1084UPDATE t1 SET f_int1 = @cur_value1
1085WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1086
1087# check single-4 success: 	1
1088SELECT MAX(f_int1) INTO @cur_value FROM t1;
1089DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1090
1091# check single-5 success: 	1
1092DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1093
1094# check single-6 success: 	1
1095INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1096
1097# check single-7 success: 	1
1098DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1099DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1100INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1101f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1102f_charbig = '#NULL#';
1103INSERT INTO t1
1104SET f_int1 = NULL , f_int2 = -@max_row,
1105f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1106f_charbig = '#NULL#';
1107# check null success:    1
1108
1109# check null-1 success: 	1
1110UPDATE t1 SET f_int1 = -@max_row
1111WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1112AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1113
1114# check null-2 success: 	1
1115UPDATE t1 SET f_int1 = NULL
1116WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1117AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1118
1119# check null-3 success: 	1
1120DELETE FROM t1
1121WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1122AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1123
1124# check null-4 success: 	1
1125DELETE FROM t1
1126WHERE f_int1 = 0 AND f_int2 = 0
1127AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1128AND f_charbig = '#NULL#';
1129SET AUTOCOMMIT= 0;
1130INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1131SELECT f_int1, f_int1, '', '', 'was inserted'
1132FROM t0_template source_tab
1133WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1134
1135# check transactions-1 success: 	1
1136COMMIT WORK;
1137
1138# check transactions-2 success: 	1
1139ROLLBACK WORK;
1140
1141# check transactions-3 success: 	1
1142DELETE FROM t1 WHERE f_charbig = 'was inserted';
1143COMMIT WORK;
1144ROLLBACK WORK;
1145
1146# check transactions-4 success: 	1
1147INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1148SELECT f_int1, f_int1, '', '', 'was inserted'
1149FROM t0_template source_tab
1150WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1151
1152# check transactions-5 success: 	1
1153ROLLBACK WORK;
1154
1155# check transactions-6 success: 	1
1156# INFO: Storage engine used for t1 seems to be transactional.
1157COMMIT;
1158
1159# check transactions-7 success: 	1
1160DELETE FROM t1 WHERE f_charbig = 'was inserted';
1161COMMIT WORK;
1162SET @@session.sql_mode = 'traditional';
1163Warnings:
1164Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1165SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1166INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1167SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1168'', '', 'was inserted' FROM t0_template
1169WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1170ERROR 22012: Division by 0
1171COMMIT;
1172
1173# check transactions-8 success: 	1
1174# INFO: Storage engine used for t1 seems to be able to revert
1175#       changes made by the failing statement.
1176SET @@session.sql_mode = '';
1177Warnings:
1178Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1179SET AUTOCOMMIT= 1;
1180DELETE FROM t1 WHERE f_charbig = 'was inserted';
1181COMMIT WORK;
1182UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1183
1184# check special-1 success: 	1
1185UPDATE t1 SET f_charbig = '';
1186
1187# check special-2 success: 	1
1188UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1189INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1190SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1192INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1193SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1194'just inserted' FROM t0_template
1195WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1196CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1197BEGIN
1198UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1199f_charbig = 'updated by trigger'
1200      WHERE f_int1 = new.f_int1;
1201END|
1202INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1203SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1205
1206# check trigger-1 success: 	1
1207DROP TRIGGER trg_1;
1208UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1209f_int2 = CAST(f_char1 AS SIGNED INT),
1210f_charbig = 'just inserted'
1211   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1212DELETE FROM t0_aux
1213WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1214INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1215SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1216'just inserted' FROM t0_template
1217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1218CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1219BEGIN
1220UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1221f_charbig = 'updated by trigger'
1222      WHERE f_int1 = new.f_int1;
1223END|
1224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1225SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1226WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1227
1228# check trigger-2 success: 	1
1229DROP TRIGGER trg_1;
1230UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1231f_int2 = CAST(f_char1 AS SIGNED INT),
1232f_charbig = 'just inserted'
1233   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1234DELETE FROM t0_aux
1235WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1236INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1237SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1238'just inserted' FROM t0_template
1239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1240CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1241BEGIN
1242UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1243f_charbig = 'updated by trigger'
1244      WHERE f_int1 = new.f_int1;
1245END|
1246UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1247WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1248
1249# check trigger-3 success: 	1
1250DROP TRIGGER trg_1;
1251UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1252f_int2 = CAST(f_char1 AS SIGNED INT),
1253f_charbig = 'just inserted'
1254   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1255DELETE FROM t0_aux
1256WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1257INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1258SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1259'just inserted' FROM t0_template
1260WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1261CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1262BEGIN
1263UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1264f_charbig = 'updated by trigger'
1265      WHERE f_int1 = - old.f_int1;
1266END|
1267UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1268WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1269
1270# check trigger-4 success: 	1
1271DROP TRIGGER trg_1;
1272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1273f_int2 = CAST(f_char1 AS SIGNED INT),
1274f_charbig = 'just inserted'
1275   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1276DELETE FROM t0_aux
1277WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1278INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1279SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1280'just inserted' FROM t0_template
1281WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1282CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1283BEGIN
1284UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1285f_charbig = 'updated by trigger'
1286      WHERE f_int1 = new.f_int1;
1287END|
1288UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1289WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1290
1291# check trigger-5 success: 	1
1292DROP TRIGGER trg_1;
1293UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1294f_int2 = CAST(f_char1 AS SIGNED INT),
1295f_charbig = 'just inserted'
1296   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1297DELETE FROM t0_aux
1298WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1299INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1300SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1301'just inserted' FROM t0_template
1302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1303CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1304BEGIN
1305UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1306f_charbig = 'updated by trigger'
1307      WHERE f_int1 = - old.f_int1;
1308END|
1309UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1310WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1311
1312# check trigger-6 success: 	1
1313DROP TRIGGER trg_1;
1314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1315f_int2 = CAST(f_char1 AS SIGNED INT),
1316f_charbig = 'just inserted'
1317   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1318DELETE FROM t0_aux
1319WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1320INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1321SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1322'just inserted' FROM t0_template
1323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1324CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1325BEGIN
1326UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1327f_charbig = 'updated by trigger'
1328      WHERE f_int1 = - old.f_int1;
1329END|
1330DELETE FROM t0_aux
1331WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1332
1333# check trigger-7 success: 	1
1334DROP TRIGGER trg_1;
1335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1336f_int2 = CAST(f_char1 AS SIGNED INT),
1337f_charbig = 'just inserted'
1338   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1339DELETE FROM t0_aux
1340WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1341INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1342SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1343'just inserted' FROM t0_template
1344WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1345CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1346BEGIN
1347UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1348f_charbig = 'updated by trigger'
1349      WHERE f_int1 = - old.f_int1;
1350END|
1351DELETE FROM t0_aux
1352WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1353
1354# check trigger-8 success: 	1
1355DROP TRIGGER trg_1;
1356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1357f_int2 = CAST(f_char1 AS SIGNED INT),
1358f_charbig = 'just inserted'
1359   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1360DELETE FROM t0_aux
1361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1362DELETE FROM t1
1363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1364CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1365BEGIN
1366SET new.f_int1 = old.f_int1 + @max_row,
1367new.f_int2 = old.f_int2 - @max_row,
1368new.f_charbig = '####updated per update trigger####';
1369END|
1370UPDATE t1
1371SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1372f_charbig = '####updated per update statement itself####';
1373
1374# check trigger-9 success: 	1
1375DROP TRIGGER trg_2;
1376UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1377f_int2 = CAST(f_char1 AS SIGNED INT),
1378f_charbig = CONCAT('===',f_char1,'===');
1379CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1380BEGIN
1381SET new.f_int1 = new.f_int1 + @max_row,
1382new.f_int2 = new.f_int2 - @max_row,
1383new.f_charbig = '####updated per update trigger####';
1384END|
1385UPDATE t1
1386SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1387f_charbig = '####updated per update statement itself####';
1388
1389# check trigger-10 success: 	1
1390DROP TRIGGER trg_2;
1391UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1392f_int2 = CAST(f_char1 AS SIGNED INT),
1393f_charbig = CONCAT('===',f_char1,'===');
1394CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1395BEGIN
1396SET new.f_int1 = @my_max1 + @counter,
1397new.f_int2 = @my_min2 - @counter,
1398new.f_charbig = '####updated per insert trigger####';
1399SET @counter = @counter + 1;
1400END|
1401SET @counter = 1;
1402SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1403INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1404SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1405CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1406WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1407ORDER BY f_int1;
1408DROP TRIGGER trg_3;
1409
1410# check trigger-11 success: 	1
1411DELETE FROM t1
1412WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1413AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1414AND f_charbig = '####updated per insert trigger####';
1415CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1416BEGIN
1417SET new.f_int1 = @my_max1 + @counter,
1418new.f_int2 = @my_min2 - @counter,
1419new.f_charbig = '####updated per insert trigger####';
1420SET @counter = @counter + 1;
1421END|
1422SET @counter = 1;
1423SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1424INSERT INTO t1 (f_char1, f_char2, f_charbig)
1425SELECT CAST(f_int1 AS CHAR),
1426CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1427WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1428ORDER BY f_int1;
1429DROP TRIGGER trg_3;
1430
1431# check trigger-12 success: 	1
1432DELETE FROM t1
1433WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1434AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1435AND f_charbig = '####updated per insert trigger####';
1436ANALYZE  TABLE t1;
1437Table	Op	Msg_type	Msg_text
1438test.t1	analyze	status	OK
1439CHECK    TABLE t1 EXTENDED;
1440Table	Op	Msg_type	Msg_text
1441test.t1	check	status	OK
1442CHECKSUM TABLE t1 EXTENDED;
1443Table	Checksum
1444test.t1	<some_value>
1445OPTIMIZE TABLE t1;
1446Table	Op	Msg_type	Msg_text
1447test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1448test.t1	optimize	status	OK
1449# check layout success:    1
1450REPAIR   TABLE t1 EXTENDED;
1451Table	Op	Msg_type	Msg_text
1452test.t1	repair	status	OK
1453# check layout success:    1
1454TRUNCATE t1;
1455
1456# check TRUNCATE success: 	1
1457# check layout success:    1
1458# End usability test (inc/partition_check.inc)
1459DROP TABLE t1;
1460CREATE TABLE t1 (
1461f_int1 INTEGER,
1462f_int2 INTEGER,
1463f_char1 CHAR(20),
1464f_char2 CHAR(20),
1465f_charbig VARCHAR(1000)
1466
1467)
1468PARTITION BY RANGE(f_int1)
1469(PARTITION parta VALUES LESS THAN (0),
1470PARTITION partb VALUES LESS THAN (5),
1471PARTITION partc VALUES LESS THAN (10),
1472PARTITION partd VALUES LESS THAN (10 + 5),
1473PARTITION parte VALUES LESS THAN (20),
1474PARTITION partf VALUES LESS THAN (2147483646));
1475INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1476SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
1477# Start usability test (inc/partition_check.inc)
1478create_command
1479SHOW CREATE TABLE t1;
1480Table	Create Table
1481t1	CREATE TABLE `t1` (
1482  `f_int1` int(11) DEFAULT NULL,
1483  `f_int2` int(11) DEFAULT NULL,
1484  `f_char1` char(20) DEFAULT NULL,
1485  `f_char2` char(20) DEFAULT NULL,
1486  `f_charbig` varchar(1000) DEFAULT NULL
1487) ENGINE=InnoDB DEFAULT CHARSET=latin1
1488/*!50100 PARTITION BY RANGE (f_int1)
1489(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1490 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1491 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1492 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
1493 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
1494 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1495
1496unified filelist
1497t1#P#parta.ibd
1498t1#P#partb.ibd
1499t1#P#partc.ibd
1500t1#P#partd.ibd
1501t1#P#parte.ibd
1502t1#P#partf.ibd
1503t1.frm
1504
1505# check prerequisites-1 success:    1
1506# check COUNT(*) success:    1
1507# check MIN/MAX(f_int1) success:    1
1508# check MIN/MAX(f_int2) success:    1
1509INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1510SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1511CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1512WHERE f_int1 IN (2,3);
1513# check prerequisites-3 success:    1
1514DELETE FROM t1 WHERE f_charbig = 'delete me';
1515# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1516# check read via f_int1 success: 1
1517# check read via f_int2 success: 1
1518
1519# check multiple-1 success: 	1
1520DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1521
1522# check multiple-2 success: 	1
1523INSERT INTO t1 SELECT * FROM t0_template
1524WHERE MOD(f_int1,3) = 0;
1525
1526# check multiple-3 success: 	1
1527UPDATE t1 SET f_int1 = f_int1 + @max_row
1528WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1529AND @max_row_div2 + @max_row_div4;
1530
1531# check multiple-4 success: 	1
1532DELETE FROM t1
1533WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1534AND @max_row_div2 + @max_row_div4 + @max_row;
1535
1536# check multiple-5 success: 	1
1537SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1538INSERT INTO t1
1539SET f_int1 = @cur_value , f_int2 = @cur_value,
1540f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1541f_charbig = '#SINGLE#';
1542
1543# check single-1 success: 	1
1544SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1545INSERT INTO t1
1546SET f_int1 = @cur_value , f_int2 = @cur_value,
1547f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1548f_charbig = '#SINGLE#';
1549
1550# check single-2 success: 	1
1551SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1552SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1553UPDATE t1 SET f_int1 = @cur_value2
1554WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1555
1556# check single-3 success: 	1
1557SET @cur_value1= -1;
1558SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1559UPDATE t1 SET f_int1 = @cur_value1
1560WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1561
1562# check single-4 success: 	1
1563SELECT MAX(f_int1) INTO @cur_value FROM t1;
1564DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1565
1566# check single-5 success: 	1
1567DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1568
1569# check single-6 success: 	1
1570INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1571ERROR HY000: Table has no partition for value 2147483647
1572DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1573INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1574f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1575f_charbig = '#NULL#';
1576INSERT INTO t1
1577SET f_int1 = NULL , f_int2 = -@max_row,
1578f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1579f_charbig = '#NULL#';
1580# check null success:    1
1581
1582# check null-1 success: 	1
1583UPDATE t1 SET f_int1 = -@max_row
1584WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1585AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1586
1587# check null-2 success: 	1
1588UPDATE t1 SET f_int1 = NULL
1589WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1590AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1591
1592# check null-3 success: 	1
1593DELETE FROM t1
1594WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1595AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1596
1597# check null-4 success: 	1
1598DELETE FROM t1
1599WHERE f_int1 = 0 AND f_int2 = 0
1600AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1601AND f_charbig = '#NULL#';
1602SET AUTOCOMMIT= 0;
1603INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1604SELECT f_int1, f_int1, '', '', 'was inserted'
1605FROM t0_template source_tab
1606WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1607
1608# check transactions-1 success: 	1
1609COMMIT WORK;
1610
1611# check transactions-2 success: 	1
1612ROLLBACK WORK;
1613
1614# check transactions-3 success: 	1
1615DELETE FROM t1 WHERE f_charbig = 'was inserted';
1616COMMIT WORK;
1617ROLLBACK WORK;
1618
1619# check transactions-4 success: 	1
1620INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1621SELECT f_int1, f_int1, '', '', 'was inserted'
1622FROM t0_template source_tab
1623WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1624
1625# check transactions-5 success: 	1
1626ROLLBACK WORK;
1627
1628# check transactions-6 success: 	1
1629# INFO: Storage engine used for t1 seems to be transactional.
1630COMMIT;
1631
1632# check transactions-7 success: 	1
1633DELETE FROM t1 WHERE f_charbig = 'was inserted';
1634COMMIT WORK;
1635SET @@session.sql_mode = 'traditional';
1636Warnings:
1637Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1638SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1639INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1640SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1641'', '', 'was inserted' FROM t0_template
1642WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1643ERROR 22012: Division by 0
1644COMMIT;
1645
1646# check transactions-8 success: 	1
1647# INFO: Storage engine used for t1 seems to be able to revert
1648#       changes made by the failing statement.
1649SET @@session.sql_mode = '';
1650Warnings:
1651Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1652SET AUTOCOMMIT= 1;
1653DELETE FROM t1 WHERE f_charbig = 'was inserted';
1654COMMIT WORK;
1655UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1656
1657# check special-1 success: 	1
1658UPDATE t1 SET f_charbig = '';
1659
1660# check special-2 success: 	1
1661UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1662INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1663SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1664WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1665INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1666SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1667'just inserted' FROM t0_template
1668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1669CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1670BEGIN
1671UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1672f_charbig = 'updated by trigger'
1673      WHERE f_int1 = new.f_int1;
1674END|
1675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1676SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1677WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1678
1679# check trigger-1 success: 	1
1680DROP TRIGGER trg_1;
1681UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1682f_int2 = CAST(f_char1 AS SIGNED INT),
1683f_charbig = 'just inserted'
1684   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1685DELETE FROM t0_aux
1686WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1687INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1688SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1689'just inserted' FROM t0_template
1690WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1691CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1692BEGIN
1693UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1694f_charbig = 'updated by trigger'
1695      WHERE f_int1 = new.f_int1;
1696END|
1697INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1698SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1700
1701# check trigger-2 success: 	1
1702DROP TRIGGER trg_1;
1703UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1704f_int2 = CAST(f_char1 AS SIGNED INT),
1705f_charbig = 'just inserted'
1706   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1707DELETE FROM t0_aux
1708WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1709INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1710SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1711'just inserted' FROM t0_template
1712WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1713CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1714BEGIN
1715UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1716f_charbig = 'updated by trigger'
1717      WHERE f_int1 = new.f_int1;
1718END|
1719UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1720WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1721
1722# check trigger-3 success: 	1
1723DROP TRIGGER trg_1;
1724UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1725f_int2 = CAST(f_char1 AS SIGNED INT),
1726f_charbig = 'just inserted'
1727   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1728DELETE FROM t0_aux
1729WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1730INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1731SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1732'just inserted' FROM t0_template
1733WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1734CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1735BEGIN
1736UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1737f_charbig = 'updated by trigger'
1738      WHERE f_int1 = - old.f_int1;
1739END|
1740UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1741WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1742
1743# check trigger-4 success: 	1
1744DROP TRIGGER trg_1;
1745UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1746f_int2 = CAST(f_char1 AS SIGNED INT),
1747f_charbig = 'just inserted'
1748   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1749DELETE FROM t0_aux
1750WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1751INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1752SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1753'just inserted' FROM t0_template
1754WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1755CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1756BEGIN
1757UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1758f_charbig = 'updated by trigger'
1759      WHERE f_int1 = new.f_int1;
1760END|
1761UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1762WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1763
1764# check trigger-5 success: 	1
1765DROP TRIGGER trg_1;
1766UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1767f_int2 = CAST(f_char1 AS SIGNED INT),
1768f_charbig = 'just inserted'
1769   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1770DELETE FROM t0_aux
1771WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1772INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1773SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1774'just inserted' FROM t0_template
1775WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1776CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1777BEGIN
1778UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1779f_charbig = 'updated by trigger'
1780      WHERE f_int1 = - old.f_int1;
1781END|
1782UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1783WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1784
1785# check trigger-6 success: 	1
1786DROP TRIGGER trg_1;
1787UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1788f_int2 = CAST(f_char1 AS SIGNED INT),
1789f_charbig = 'just inserted'
1790   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1791DELETE FROM t0_aux
1792WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1793INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1794SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1795'just inserted' FROM t0_template
1796WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1797CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1798BEGIN
1799UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1800f_charbig = 'updated by trigger'
1801      WHERE f_int1 = - old.f_int1;
1802END|
1803DELETE FROM t0_aux
1804WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1805
1806# check trigger-7 success: 	1
1807DROP TRIGGER trg_1;
1808UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1809f_int2 = CAST(f_char1 AS SIGNED INT),
1810f_charbig = 'just inserted'
1811   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1812DELETE FROM t0_aux
1813WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1814INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1815SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1816'just inserted' FROM t0_template
1817WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1818CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1819BEGIN
1820UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1821f_charbig = 'updated by trigger'
1822      WHERE f_int1 = - old.f_int1;
1823END|
1824DELETE FROM t0_aux
1825WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1826
1827# check trigger-8 success: 	1
1828DROP TRIGGER trg_1;
1829UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1830f_int2 = CAST(f_char1 AS SIGNED INT),
1831f_charbig = 'just inserted'
1832   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1833DELETE FROM t0_aux
1834WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1835DELETE FROM t1
1836WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1837CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1838BEGIN
1839SET new.f_int1 = old.f_int1 + @max_row,
1840new.f_int2 = old.f_int2 - @max_row,
1841new.f_charbig = '####updated per update trigger####';
1842END|
1843UPDATE t1
1844SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1845f_charbig = '####updated per update statement itself####';
1846
1847# check trigger-9 success: 	1
1848DROP TRIGGER trg_2;
1849UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1850f_int2 = CAST(f_char1 AS SIGNED INT),
1851f_charbig = CONCAT('===',f_char1,'===');
1852CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1853BEGIN
1854SET new.f_int1 = new.f_int1 + @max_row,
1855new.f_int2 = new.f_int2 - @max_row,
1856new.f_charbig = '####updated per update trigger####';
1857END|
1858UPDATE t1
1859SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1860f_charbig = '####updated per update statement itself####';
1861
1862# check trigger-10 success: 	1
1863DROP TRIGGER trg_2;
1864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1865f_int2 = CAST(f_char1 AS SIGNED INT),
1866f_charbig = CONCAT('===',f_char1,'===');
1867CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1868BEGIN
1869SET new.f_int1 = @my_max1 + @counter,
1870new.f_int2 = @my_min2 - @counter,
1871new.f_charbig = '####updated per insert trigger####';
1872SET @counter = @counter + 1;
1873END|
1874SET @counter = 1;
1875SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1876INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1877SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1878CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1879WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1880ORDER BY f_int1;
1881DROP TRIGGER trg_3;
1882
1883# check trigger-11 success: 	1
1884DELETE FROM t1
1885WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1886AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1887AND f_charbig = '####updated per insert trigger####';
1888CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1889BEGIN
1890SET new.f_int1 = @my_max1 + @counter,
1891new.f_int2 = @my_min2 - @counter,
1892new.f_charbig = '####updated per insert trigger####';
1893SET @counter = @counter + 1;
1894END|
1895SET @counter = 1;
1896SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1897INSERT INTO t1 (f_char1, f_char2, f_charbig)
1898SELECT CAST(f_int1 AS CHAR),
1899CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1900WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1901ORDER BY f_int1;
1902DROP TRIGGER trg_3;
1903
1904# check trigger-12 success: 	1
1905DELETE FROM t1
1906WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1907AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1908AND f_charbig = '####updated per insert trigger####';
1909ANALYZE  TABLE t1;
1910Table	Op	Msg_type	Msg_text
1911test.t1	analyze	status	OK
1912CHECK    TABLE t1 EXTENDED;
1913Table	Op	Msg_type	Msg_text
1914test.t1	check	status	OK
1915CHECKSUM TABLE t1 EXTENDED;
1916Table	Checksum
1917test.t1	<some_value>
1918OPTIMIZE TABLE t1;
1919Table	Op	Msg_type	Msg_text
1920test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1921test.t1	optimize	status	OK
1922# check layout success:    1
1923REPAIR   TABLE t1 EXTENDED;
1924Table	Op	Msg_type	Msg_text
1925test.t1	repair	status	OK
1926# check layout success:    1
1927TRUNCATE t1;
1928
1929# check TRUNCATE success: 	1
1930# check layout success:    1
1931# End usability test (inc/partition_check.inc)
1932DROP TABLE t1;
1933CREATE TABLE t1 (
1934f_int1 INTEGER,
1935f_int2 INTEGER,
1936f_char1 CHAR(20),
1937f_char2 CHAR(20),
1938f_charbig VARCHAR(1000)
1939
1940)
1941PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
1942(PARTITION parta VALUES LESS THAN (0),
1943PARTITION partb VALUES LESS THAN (5),
1944PARTITION partc VALUES LESS THAN (10),
1945PARTITION partd VALUES LESS THAN (2147483646));
1946INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1947SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
1948# Start usability test (inc/partition_check.inc)
1949create_command
1950SHOW CREATE TABLE t1;
1951Table	Create Table
1952t1	CREATE TABLE `t1` (
1953  `f_int1` int(11) DEFAULT NULL,
1954  `f_int2` int(11) DEFAULT NULL,
1955  `f_char1` char(20) DEFAULT NULL,
1956  `f_char2` char(20) DEFAULT NULL,
1957  `f_charbig` varchar(1000) DEFAULT NULL
1958) ENGINE=InnoDB DEFAULT CHARSET=latin1
1959/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
1960SUBPARTITION BY HASH (f_int1)
1961SUBPARTITIONS 2
1962(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1963 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1964 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1965 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1966
1967unified filelist
1968t1#P#parta#SP#partasp0.ibd
1969t1#P#parta#SP#partasp1.ibd
1970t1#P#partb#SP#partbsp0.ibd
1971t1#P#partb#SP#partbsp1.ibd
1972t1#P#partc#SP#partcsp0.ibd
1973t1#P#partc#SP#partcsp1.ibd
1974t1#P#partd#SP#partdsp0.ibd
1975t1#P#partd#SP#partdsp1.ibd
1976t1.frm
1977
1978# check prerequisites-1 success:    1
1979# check COUNT(*) success:    1
1980# check MIN/MAX(f_int1) success:    1
1981# check MIN/MAX(f_int2) success:    1
1982INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1983SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1984CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1985WHERE f_int1 IN (2,3);
1986# check prerequisites-3 success:    1
1987DELETE FROM t1 WHERE f_charbig = 'delete me';
1988# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1989# check read via f_int1 success: 1
1990# check read via f_int2 success: 1
1991
1992# check multiple-1 success: 	1
1993DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1994
1995# check multiple-2 success: 	1
1996INSERT INTO t1 SELECT * FROM t0_template
1997WHERE MOD(f_int1,3) = 0;
1998
1999# check multiple-3 success: 	1
2000UPDATE t1 SET f_int1 = f_int1 + @max_row
2001WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2002AND @max_row_div2 + @max_row_div4;
2003
2004# check multiple-4 success: 	1
2005DELETE FROM t1
2006WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2007AND @max_row_div2 + @max_row_div4 + @max_row;
2008
2009# check multiple-5 success: 	1
2010SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2011INSERT INTO t1
2012SET f_int1 = @cur_value , f_int2 = @cur_value,
2013f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2014f_charbig = '#SINGLE#';
2015
2016# check single-1 success: 	1
2017SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2018INSERT INTO t1
2019SET f_int1 = @cur_value , f_int2 = @cur_value,
2020f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2021f_charbig = '#SINGLE#';
2022
2023# check single-2 success: 	1
2024SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2025SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2026UPDATE t1 SET f_int1 = @cur_value2
2027WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2028
2029# check single-3 success: 	1
2030SET @cur_value1= -1;
2031SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2032UPDATE t1 SET f_int1 = @cur_value1
2033WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2034
2035# check single-4 success: 	1
2036SELECT MAX(f_int1) INTO @cur_value FROM t1;
2037DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2038
2039# check single-5 success: 	1
2040DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2041
2042# check single-6 success: 	1
2043INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2044
2045# check single-7 success: 	1
2046DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2047DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2048INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2049f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2050f_charbig = '#NULL#';
2051INSERT INTO t1
2052SET f_int1 = NULL , f_int2 = -@max_row,
2053f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2054f_charbig = '#NULL#';
2055# check null success:    1
2056
2057# check null-1 success: 	1
2058UPDATE t1 SET f_int1 = -@max_row
2059WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2060AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2061
2062# check null-2 success: 	1
2063UPDATE t1 SET f_int1 = NULL
2064WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2065AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2066
2067# check null-3 success: 	1
2068DELETE FROM t1
2069WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2070AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2071
2072# check null-4 success: 	1
2073DELETE FROM t1
2074WHERE f_int1 = 0 AND f_int2 = 0
2075AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2076AND f_charbig = '#NULL#';
2077SET AUTOCOMMIT= 0;
2078INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2079SELECT f_int1, f_int1, '', '', 'was inserted'
2080FROM t0_template source_tab
2081WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2082
2083# check transactions-1 success: 	1
2084COMMIT WORK;
2085
2086# check transactions-2 success: 	1
2087ROLLBACK WORK;
2088
2089# check transactions-3 success: 	1
2090DELETE FROM t1 WHERE f_charbig = 'was inserted';
2091COMMIT WORK;
2092ROLLBACK WORK;
2093
2094# check transactions-4 success: 	1
2095INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2096SELECT f_int1, f_int1, '', '', 'was inserted'
2097FROM t0_template source_tab
2098WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2099
2100# check transactions-5 success: 	1
2101ROLLBACK WORK;
2102
2103# check transactions-6 success: 	1
2104# INFO: Storage engine used for t1 seems to be transactional.
2105COMMIT;
2106
2107# check transactions-7 success: 	1
2108DELETE FROM t1 WHERE f_charbig = 'was inserted';
2109COMMIT WORK;
2110SET @@session.sql_mode = 'traditional';
2111Warnings:
2112Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2113SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2114INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2115SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2116'', '', 'was inserted' FROM t0_template
2117WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2118ERROR 22012: Division by 0
2119COMMIT;
2120
2121# check transactions-8 success: 	1
2122# INFO: Storage engine used for t1 seems to be able to revert
2123#       changes made by the failing statement.
2124SET @@session.sql_mode = '';
2125Warnings:
2126Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2127SET AUTOCOMMIT= 1;
2128DELETE FROM t1 WHERE f_charbig = 'was inserted';
2129COMMIT WORK;
2130UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2131
2132# check special-1 success: 	1
2133UPDATE t1 SET f_charbig = '';
2134
2135# check special-2 success: 	1
2136UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2137INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2138SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2142'just inserted' FROM t0_template
2143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2144CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2145BEGIN
2146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2147f_charbig = 'updated by trigger'
2148      WHERE f_int1 = new.f_int1;
2149END|
2150INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2151SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2153
2154# check trigger-1 success: 	1
2155DROP TRIGGER trg_1;
2156UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2157f_int2 = CAST(f_char1 AS SIGNED INT),
2158f_charbig = 'just inserted'
2159   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2160DELETE FROM t0_aux
2161WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2162INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2163SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2164'just inserted' FROM t0_template
2165WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2166CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2167BEGIN
2168UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2169f_charbig = 'updated by trigger'
2170      WHERE f_int1 = new.f_int1;
2171END|
2172INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2173SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2175
2176# check trigger-2 success: 	1
2177DROP TRIGGER trg_1;
2178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2179f_int2 = CAST(f_char1 AS SIGNED INT),
2180f_charbig = 'just inserted'
2181   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2182DELETE FROM t0_aux
2183WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2184INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2185SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2186'just inserted' FROM t0_template
2187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2188CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2189BEGIN
2190UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2191f_charbig = 'updated by trigger'
2192      WHERE f_int1 = new.f_int1;
2193END|
2194UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2195WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2196
2197# check trigger-3 success: 	1
2198DROP TRIGGER trg_1;
2199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2200f_int2 = CAST(f_char1 AS SIGNED INT),
2201f_charbig = 'just inserted'
2202   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2203DELETE FROM t0_aux
2204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2207'just inserted' FROM t0_template
2208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2209CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2210BEGIN
2211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2212f_charbig = 'updated by trigger'
2213      WHERE f_int1 = - old.f_int1;
2214END|
2215UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2216WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2217
2218# check trigger-4 success: 	1
2219DROP TRIGGER trg_1;
2220UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2221f_int2 = CAST(f_char1 AS SIGNED INT),
2222f_charbig = 'just inserted'
2223   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2224DELETE FROM t0_aux
2225WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2226INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2227SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2228'just inserted' FROM t0_template
2229WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2230CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2231BEGIN
2232UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2233f_charbig = 'updated by trigger'
2234      WHERE f_int1 = new.f_int1;
2235END|
2236UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2237WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2238
2239# check trigger-5 success: 	1
2240DROP TRIGGER trg_1;
2241UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2242f_int2 = CAST(f_char1 AS SIGNED INT),
2243f_charbig = 'just inserted'
2244   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2245DELETE FROM t0_aux
2246WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2247INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2248SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2249'just inserted' FROM t0_template
2250WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2251CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2252BEGIN
2253UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2254f_charbig = 'updated by trigger'
2255      WHERE f_int1 = - old.f_int1;
2256END|
2257UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2258WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2259
2260# check trigger-6 success: 	1
2261DROP TRIGGER trg_1;
2262UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2263f_int2 = CAST(f_char1 AS SIGNED INT),
2264f_charbig = 'just inserted'
2265   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2266DELETE FROM t0_aux
2267WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2268INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2269SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2270'just inserted' FROM t0_template
2271WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2272CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2273BEGIN
2274UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2275f_charbig = 'updated by trigger'
2276      WHERE f_int1 = - old.f_int1;
2277END|
2278DELETE FROM t0_aux
2279WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2280
2281# check trigger-7 success: 	1
2282DROP TRIGGER trg_1;
2283UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2284f_int2 = CAST(f_char1 AS SIGNED INT),
2285f_charbig = 'just inserted'
2286   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2287DELETE FROM t0_aux
2288WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2289INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2290SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2291'just inserted' FROM t0_template
2292WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2293CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2294BEGIN
2295UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2296f_charbig = 'updated by trigger'
2297      WHERE f_int1 = - old.f_int1;
2298END|
2299DELETE FROM t0_aux
2300WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2301
2302# check trigger-8 success: 	1
2303DROP TRIGGER trg_1;
2304UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2305f_int2 = CAST(f_char1 AS SIGNED INT),
2306f_charbig = 'just inserted'
2307   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2308DELETE FROM t0_aux
2309WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2310DELETE FROM t1
2311WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2312CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2313BEGIN
2314SET new.f_int1 = old.f_int1 + @max_row,
2315new.f_int2 = old.f_int2 - @max_row,
2316new.f_charbig = '####updated per update trigger####';
2317END|
2318UPDATE t1
2319SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2320f_charbig = '####updated per update statement itself####';
2321
2322# check trigger-9 success: 	1
2323DROP TRIGGER trg_2;
2324UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2325f_int2 = CAST(f_char1 AS SIGNED INT),
2326f_charbig = CONCAT('===',f_char1,'===');
2327CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2328BEGIN
2329SET new.f_int1 = new.f_int1 + @max_row,
2330new.f_int2 = new.f_int2 - @max_row,
2331new.f_charbig = '####updated per update trigger####';
2332END|
2333UPDATE t1
2334SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2335f_charbig = '####updated per update statement itself####';
2336
2337# check trigger-10 success: 	1
2338DROP TRIGGER trg_2;
2339UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2340f_int2 = CAST(f_char1 AS SIGNED INT),
2341f_charbig = CONCAT('===',f_char1,'===');
2342CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2343BEGIN
2344SET new.f_int1 = @my_max1 + @counter,
2345new.f_int2 = @my_min2 - @counter,
2346new.f_charbig = '####updated per insert trigger####';
2347SET @counter = @counter + 1;
2348END|
2349SET @counter = 1;
2350SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2351INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2352SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2353CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2355ORDER BY f_int1;
2356DROP TRIGGER trg_3;
2357
2358# check trigger-11 success: 	1
2359DELETE FROM t1
2360WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2361AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2362AND f_charbig = '####updated per insert trigger####';
2363CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2364BEGIN
2365SET new.f_int1 = @my_max1 + @counter,
2366new.f_int2 = @my_min2 - @counter,
2367new.f_charbig = '####updated per insert trigger####';
2368SET @counter = @counter + 1;
2369END|
2370SET @counter = 1;
2371SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2372INSERT INTO t1 (f_char1, f_char2, f_charbig)
2373SELECT CAST(f_int1 AS CHAR),
2374CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2376ORDER BY f_int1;
2377DROP TRIGGER trg_3;
2378
2379# check trigger-12 success: 	1
2380DELETE FROM t1
2381WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2382AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2383AND f_charbig = '####updated per insert trigger####';
2384ANALYZE  TABLE t1;
2385Table	Op	Msg_type	Msg_text
2386test.t1	analyze	status	OK
2387CHECK    TABLE t1 EXTENDED;
2388Table	Op	Msg_type	Msg_text
2389test.t1	check	status	OK
2390CHECKSUM TABLE t1 EXTENDED;
2391Table	Checksum
2392test.t1	<some_value>
2393OPTIMIZE TABLE t1;
2394Table	Op	Msg_type	Msg_text
2395test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2396test.t1	optimize	status	OK
2397# check layout success:    1
2398REPAIR   TABLE t1 EXTENDED;
2399Table	Op	Msg_type	Msg_text
2400test.t1	repair	status	OK
2401# check layout success:    1
2402TRUNCATE t1;
2403
2404# check TRUNCATE success: 	1
2405# check layout success:    1
2406# End usability test (inc/partition_check.inc)
2407DROP TABLE t1;
2408CREATE TABLE t1 (
2409f_int1 INTEGER,
2410f_int2 INTEGER,
2411f_char1 CHAR(20),
2412f_char2 CHAR(20),
2413f_charbig VARCHAR(1000)
2414
2415)
2416PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
2417(PARTITION part1 VALUES LESS THAN (0)
2418(SUBPARTITION subpart11, SUBPARTITION subpart12),
2419PARTITION part2 VALUES LESS THAN (5)
2420(SUBPARTITION subpart21, SUBPARTITION subpart22),
2421PARTITION part3 VALUES LESS THAN (10)
2422(SUBPARTITION subpart31, SUBPARTITION subpart32),
2423PARTITION part4 VALUES LESS THAN (2147483646)
2424(SUBPARTITION subpart41, SUBPARTITION subpart42));
2425INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2426SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
2427# Start usability test (inc/partition_check.inc)
2428create_command
2429SHOW CREATE TABLE t1;
2430Table	Create Table
2431t1	CREATE TABLE `t1` (
2432  `f_int1` int(11) DEFAULT NULL,
2433  `f_int2` int(11) DEFAULT NULL,
2434  `f_char1` char(20) DEFAULT NULL,
2435  `f_char2` char(20) DEFAULT NULL,
2436  `f_charbig` varchar(1000) DEFAULT NULL
2437) ENGINE=InnoDB DEFAULT CHARSET=latin1
2438/*!50100 PARTITION BY RANGE (f_int1)
2439SUBPARTITION BY KEY (f_int1)
2440(PARTITION part1 VALUES LESS THAN (0)
2441 (SUBPARTITION subpart11 ENGINE = InnoDB,
2442  SUBPARTITION subpart12 ENGINE = InnoDB),
2443 PARTITION part2 VALUES LESS THAN (5)
2444 (SUBPARTITION subpart21 ENGINE = InnoDB,
2445  SUBPARTITION subpart22 ENGINE = InnoDB),
2446 PARTITION part3 VALUES LESS THAN (10)
2447 (SUBPARTITION subpart31 ENGINE = InnoDB,
2448  SUBPARTITION subpart32 ENGINE = InnoDB),
2449 PARTITION part4 VALUES LESS THAN (2147483646)
2450 (SUBPARTITION subpart41 ENGINE = InnoDB,
2451  SUBPARTITION subpart42 ENGINE = InnoDB)) */
2452
2453unified filelist
2454t1#P#part1#SP#subpart11.ibd
2455t1#P#part1#SP#subpart12.ibd
2456t1#P#part2#SP#subpart21.ibd
2457t1#P#part2#SP#subpart22.ibd
2458t1#P#part3#SP#subpart31.ibd
2459t1#P#part3#SP#subpart32.ibd
2460t1#P#part4#SP#subpart41.ibd
2461t1#P#part4#SP#subpart42.ibd
2462t1.frm
2463
2464# check prerequisites-1 success:    1
2465# check COUNT(*) success:    1
2466# check MIN/MAX(f_int1) success:    1
2467# check MIN/MAX(f_int2) success:    1
2468INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2469SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2470CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2471WHERE f_int1 IN (2,3);
2472# check prerequisites-3 success:    1
2473DELETE FROM t1 WHERE f_charbig = 'delete me';
2474# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2475# check read via f_int1 success: 1
2476# check read via f_int2 success: 1
2477
2478# check multiple-1 success: 	1
2479DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2480
2481# check multiple-2 success: 	1
2482INSERT INTO t1 SELECT * FROM t0_template
2483WHERE MOD(f_int1,3) = 0;
2484
2485# check multiple-3 success: 	1
2486UPDATE t1 SET f_int1 = f_int1 + @max_row
2487WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2488AND @max_row_div2 + @max_row_div4;
2489
2490# check multiple-4 success: 	1
2491DELETE FROM t1
2492WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2493AND @max_row_div2 + @max_row_div4 + @max_row;
2494
2495# check multiple-5 success: 	1
2496SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2497INSERT INTO t1
2498SET f_int1 = @cur_value , f_int2 = @cur_value,
2499f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2500f_charbig = '#SINGLE#';
2501
2502# check single-1 success: 	1
2503SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2504INSERT INTO t1
2505SET f_int1 = @cur_value , f_int2 = @cur_value,
2506f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2507f_charbig = '#SINGLE#';
2508
2509# check single-2 success: 	1
2510SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2511SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2512UPDATE t1 SET f_int1 = @cur_value2
2513WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2514
2515# check single-3 success: 	1
2516SET @cur_value1= -1;
2517SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2518UPDATE t1 SET f_int1 = @cur_value1
2519WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2520
2521# check single-4 success: 	1
2522SELECT MAX(f_int1) INTO @cur_value FROM t1;
2523DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2524
2525# check single-5 success: 	1
2526DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2527
2528# check single-6 success: 	1
2529INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2530ERROR HY000: Table has no partition for value 2147483647
2531DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2532INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2533f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2534f_charbig = '#NULL#';
2535INSERT INTO t1
2536SET f_int1 = NULL , f_int2 = -@max_row,
2537f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2538f_charbig = '#NULL#';
2539# check null success:    1
2540
2541# check null-1 success: 	1
2542UPDATE t1 SET f_int1 = -@max_row
2543WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2544AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2545
2546# check null-2 success: 	1
2547UPDATE t1 SET f_int1 = NULL
2548WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2549AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2550
2551# check null-3 success: 	1
2552DELETE FROM t1
2553WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2554AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2555
2556# check null-4 success: 	1
2557DELETE FROM t1
2558WHERE f_int1 = 0 AND f_int2 = 0
2559AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2560AND f_charbig = '#NULL#';
2561SET AUTOCOMMIT= 0;
2562INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2563SELECT f_int1, f_int1, '', '', 'was inserted'
2564FROM t0_template source_tab
2565WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2566
2567# check transactions-1 success: 	1
2568COMMIT WORK;
2569
2570# check transactions-2 success: 	1
2571ROLLBACK WORK;
2572
2573# check transactions-3 success: 	1
2574DELETE FROM t1 WHERE f_charbig = 'was inserted';
2575COMMIT WORK;
2576ROLLBACK WORK;
2577
2578# check transactions-4 success: 	1
2579INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2580SELECT f_int1, f_int1, '', '', 'was inserted'
2581FROM t0_template source_tab
2582WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2583
2584# check transactions-5 success: 	1
2585ROLLBACK WORK;
2586
2587# check transactions-6 success: 	1
2588# INFO: Storage engine used for t1 seems to be transactional.
2589COMMIT;
2590
2591# check transactions-7 success: 	1
2592DELETE FROM t1 WHERE f_charbig = 'was inserted';
2593COMMIT WORK;
2594SET @@session.sql_mode = 'traditional';
2595Warnings:
2596Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2597SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2598INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2599SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2600'', '', 'was inserted' FROM t0_template
2601WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2602ERROR 22012: Division by 0
2603COMMIT;
2604
2605# check transactions-8 success: 	1
2606# INFO: Storage engine used for t1 seems to be able to revert
2607#       changes made by the failing statement.
2608SET @@session.sql_mode = '';
2609Warnings:
2610Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2611SET AUTOCOMMIT= 1;
2612DELETE FROM t1 WHERE f_charbig = 'was inserted';
2613COMMIT WORK;
2614UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2615
2616# check special-1 success: 	1
2617UPDATE t1 SET f_charbig = '';
2618
2619# check special-2 success: 	1
2620UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2621INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2622SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2623WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2624INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2625SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2626'just inserted' FROM t0_template
2627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2628CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2629BEGIN
2630UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2631f_charbig = 'updated by trigger'
2632      WHERE f_int1 = new.f_int1;
2633END|
2634INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2635SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2637
2638# check trigger-1 success: 	1
2639DROP TRIGGER trg_1;
2640UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2641f_int2 = CAST(f_char1 AS SIGNED INT),
2642f_charbig = 'just inserted'
2643   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2644DELETE FROM t0_aux
2645WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2646INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2647SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2648'just inserted' FROM t0_template
2649WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2650CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2651BEGIN
2652UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2653f_charbig = 'updated by trigger'
2654      WHERE f_int1 = new.f_int1;
2655END|
2656INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2657SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2658WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2659
2660# check trigger-2 success: 	1
2661DROP TRIGGER trg_1;
2662UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2663f_int2 = CAST(f_char1 AS SIGNED INT),
2664f_charbig = 'just inserted'
2665   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2666DELETE FROM t0_aux
2667WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2668INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2669SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2670'just inserted' FROM t0_template
2671WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2672CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2673BEGIN
2674UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2675f_charbig = 'updated by trigger'
2676      WHERE f_int1 = new.f_int1;
2677END|
2678UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2679WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2680
2681# check trigger-3 success: 	1
2682DROP TRIGGER trg_1;
2683UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2684f_int2 = CAST(f_char1 AS SIGNED INT),
2685f_charbig = 'just inserted'
2686   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2687DELETE FROM t0_aux
2688WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2689INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2690SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2691'just inserted' FROM t0_template
2692WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2693CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2694BEGIN
2695UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2696f_charbig = 'updated by trigger'
2697      WHERE f_int1 = - old.f_int1;
2698END|
2699UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2700WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2701
2702# check trigger-4 success: 	1
2703DROP TRIGGER trg_1;
2704UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2705f_int2 = CAST(f_char1 AS SIGNED INT),
2706f_charbig = 'just inserted'
2707   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2708DELETE FROM t0_aux
2709WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2710INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2711SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2712'just inserted' FROM t0_template
2713WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2714CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2715BEGIN
2716UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2717f_charbig = 'updated by trigger'
2718      WHERE f_int1 = new.f_int1;
2719END|
2720UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2721WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2722
2723# check trigger-5 success: 	1
2724DROP TRIGGER trg_1;
2725UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2726f_int2 = CAST(f_char1 AS SIGNED INT),
2727f_charbig = 'just inserted'
2728   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2729DELETE FROM t0_aux
2730WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2731INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2732SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2733'just inserted' FROM t0_template
2734WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2735CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2736BEGIN
2737UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2738f_charbig = 'updated by trigger'
2739      WHERE f_int1 = - old.f_int1;
2740END|
2741UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2742WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2743
2744# check trigger-6 success: 	1
2745DROP TRIGGER trg_1;
2746UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2747f_int2 = CAST(f_char1 AS SIGNED INT),
2748f_charbig = 'just inserted'
2749   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2750DELETE FROM t0_aux
2751WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2752INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2753SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2754'just inserted' FROM t0_template
2755WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2756CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2757BEGIN
2758UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2759f_charbig = 'updated by trigger'
2760      WHERE f_int1 = - old.f_int1;
2761END|
2762DELETE FROM t0_aux
2763WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2764
2765# check trigger-7 success: 	1
2766DROP TRIGGER trg_1;
2767UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2768f_int2 = CAST(f_char1 AS SIGNED INT),
2769f_charbig = 'just inserted'
2770   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2771DELETE FROM t0_aux
2772WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2773INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2774SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2775'just inserted' FROM t0_template
2776WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2777CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2778BEGIN
2779UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2780f_charbig = 'updated by trigger'
2781      WHERE f_int1 = - old.f_int1;
2782END|
2783DELETE FROM t0_aux
2784WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2785
2786# check trigger-8 success: 	1
2787DROP TRIGGER trg_1;
2788UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2789f_int2 = CAST(f_char1 AS SIGNED INT),
2790f_charbig = 'just inserted'
2791   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2792DELETE FROM t0_aux
2793WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2794DELETE FROM t1
2795WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2796CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2797BEGIN
2798SET new.f_int1 = old.f_int1 + @max_row,
2799new.f_int2 = old.f_int2 - @max_row,
2800new.f_charbig = '####updated per update trigger####';
2801END|
2802UPDATE t1
2803SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2804f_charbig = '####updated per update statement itself####';
2805
2806# check trigger-9 success: 	1
2807DROP TRIGGER trg_2;
2808UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2809f_int2 = CAST(f_char1 AS SIGNED INT),
2810f_charbig = CONCAT('===',f_char1,'===');
2811CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2812BEGIN
2813SET new.f_int1 = new.f_int1 + @max_row,
2814new.f_int2 = new.f_int2 - @max_row,
2815new.f_charbig = '####updated per update trigger####';
2816END|
2817UPDATE t1
2818SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2819f_charbig = '####updated per update statement itself####';
2820
2821# check trigger-10 success: 	1
2822DROP TRIGGER trg_2;
2823UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2824f_int2 = CAST(f_char1 AS SIGNED INT),
2825f_charbig = CONCAT('===',f_char1,'===');
2826CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2827BEGIN
2828SET new.f_int1 = @my_max1 + @counter,
2829new.f_int2 = @my_min2 - @counter,
2830new.f_charbig = '####updated per insert trigger####';
2831SET @counter = @counter + 1;
2832END|
2833SET @counter = 1;
2834SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2835INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2836SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2837CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2838WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2839ORDER BY f_int1;
2840DROP TRIGGER trg_3;
2841
2842# check trigger-11 success: 	1
2843DELETE FROM t1
2844WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2845AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2846AND f_charbig = '####updated per insert trigger####';
2847CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2848BEGIN
2849SET new.f_int1 = @my_max1 + @counter,
2850new.f_int2 = @my_min2 - @counter,
2851new.f_charbig = '####updated per insert trigger####';
2852SET @counter = @counter + 1;
2853END|
2854SET @counter = 1;
2855SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2856INSERT INTO t1 (f_char1, f_char2, f_charbig)
2857SELECT CAST(f_int1 AS CHAR),
2858CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2859WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2860ORDER BY f_int1;
2861DROP TRIGGER trg_3;
2862
2863# check trigger-12 success: 	1
2864DELETE FROM t1
2865WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2866AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2867AND f_charbig = '####updated per insert trigger####';
2868ANALYZE  TABLE t1;
2869Table	Op	Msg_type	Msg_text
2870test.t1	analyze	status	OK
2871CHECK    TABLE t1 EXTENDED;
2872Table	Op	Msg_type	Msg_text
2873test.t1	check	status	OK
2874CHECKSUM TABLE t1 EXTENDED;
2875Table	Checksum
2876test.t1	<some_value>
2877OPTIMIZE TABLE t1;
2878Table	Op	Msg_type	Msg_text
2879test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2880test.t1	optimize	status	OK
2881# check layout success:    1
2882REPAIR   TABLE t1 EXTENDED;
2883Table	Op	Msg_type	Msg_text
2884test.t1	repair	status	OK
2885# check layout success:    1
2886TRUNCATE t1;
2887
2888# check TRUNCATE success: 	1
2889# check layout success:    1
2890# End usability test (inc/partition_check.inc)
2891DROP TABLE t1;
2892CREATE TABLE t1 (
2893f_int1 INTEGER,
2894f_int2 INTEGER,
2895f_char1 CHAR(20),
2896f_char2 CHAR(20),
2897f_charbig VARCHAR(1000)
2898
2899)
2900PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
2901(PARTITION part1 VALUES IN (0)
2902(SUBPARTITION sp11,
2903SUBPARTITION sp12),
2904PARTITION part2 VALUES IN (1)
2905(SUBPARTITION sp21,
2906SUBPARTITION sp22),
2907PARTITION part3 VALUES IN (2)
2908(SUBPARTITION sp31,
2909SUBPARTITION sp32),
2910PARTITION part4 VALUES IN (NULL)
2911(SUBPARTITION sp41,
2912SUBPARTITION sp42));
2913INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2914SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
2915# Start usability test (inc/partition_check.inc)
2916create_command
2917SHOW CREATE TABLE t1;
2918Table	Create Table
2919t1	CREATE TABLE `t1` (
2920  `f_int1` int(11) DEFAULT NULL,
2921  `f_int2` int(11) DEFAULT NULL,
2922  `f_char1` char(20) DEFAULT NULL,
2923  `f_char2` char(20) DEFAULT NULL,
2924  `f_charbig` varchar(1000) DEFAULT NULL
2925) ENGINE=InnoDB DEFAULT CHARSET=latin1
2926/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
2927SUBPARTITION BY HASH (f_int1 + 1)
2928(PARTITION part1 VALUES IN (0)
2929 (SUBPARTITION sp11 ENGINE = InnoDB,
2930  SUBPARTITION sp12 ENGINE = InnoDB),
2931 PARTITION part2 VALUES IN (1)
2932 (SUBPARTITION sp21 ENGINE = InnoDB,
2933  SUBPARTITION sp22 ENGINE = InnoDB),
2934 PARTITION part3 VALUES IN (2)
2935 (SUBPARTITION sp31 ENGINE = InnoDB,
2936  SUBPARTITION sp32 ENGINE = InnoDB),
2937 PARTITION part4 VALUES IN (NULL)
2938 (SUBPARTITION sp41 ENGINE = InnoDB,
2939  SUBPARTITION sp42 ENGINE = InnoDB)) */
2940
2941unified filelist
2942t1#P#part1#SP#sp11.ibd
2943t1#P#part1#SP#sp12.ibd
2944t1#P#part2#SP#sp21.ibd
2945t1#P#part2#SP#sp22.ibd
2946t1#P#part3#SP#sp31.ibd
2947t1#P#part3#SP#sp32.ibd
2948t1#P#part4#SP#sp41.ibd
2949t1#P#part4#SP#sp42.ibd
2950t1.frm
2951
2952# check prerequisites-1 success:    1
2953# check COUNT(*) success:    1
2954# check MIN/MAX(f_int1) success:    1
2955# check MIN/MAX(f_int2) success:    1
2956INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2957SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2958CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2959WHERE f_int1 IN (2,3);
2960# check prerequisites-3 success:    1
2961DELETE FROM t1 WHERE f_charbig = 'delete me';
2962# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2963# check read via f_int1 success: 1
2964# check read via f_int2 success: 1
2965
2966# check multiple-1 success: 	1
2967DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2968
2969# check multiple-2 success: 	1
2970INSERT INTO t1 SELECT * FROM t0_template
2971WHERE MOD(f_int1,3) = 0;
2972
2973# check multiple-3 success: 	1
2974UPDATE t1 SET f_int1 = f_int1 + @max_row
2975WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2976AND @max_row_div2 + @max_row_div4;
2977
2978# check multiple-4 success: 	1
2979DELETE FROM t1
2980WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2981AND @max_row_div2 + @max_row_div4 + @max_row;
2982
2983# check multiple-5 success: 	1
2984SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2985INSERT INTO t1
2986SET f_int1 = @cur_value , f_int2 = @cur_value,
2987f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2988f_charbig = '#SINGLE#';
2989
2990# check single-1 success: 	1
2991SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2992INSERT INTO t1
2993SET f_int1 = @cur_value , f_int2 = @cur_value,
2994f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2995f_charbig = '#SINGLE#';
2996
2997# check single-2 success: 	1
2998SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2999SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3000UPDATE t1 SET f_int1 = @cur_value2
3001WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3002
3003# check single-3 success: 	1
3004SET @cur_value1= -1;
3005SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3006UPDATE t1 SET f_int1 = @cur_value1
3007WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3008
3009# check single-4 success: 	1
3010SELECT MAX(f_int1) INTO @cur_value FROM t1;
3011DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3012
3013# check single-5 success: 	1
3014DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3015
3016# check single-6 success: 	1
3017INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3018
3019# check single-7 success: 	1
3020DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3021DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3022INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3023f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3024f_charbig = '#NULL#';
3025INSERT INTO t1
3026SET f_int1 = NULL , f_int2 = -@max_row,
3027f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3028f_charbig = '#NULL#';
3029# check null success:    1
3030
3031# check null-1 success: 	1
3032UPDATE t1 SET f_int1 = -@max_row
3033WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3034AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3035
3036# check null-2 success: 	1
3037UPDATE t1 SET f_int1 = NULL
3038WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3039AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3040
3041# check null-3 success: 	1
3042DELETE FROM t1
3043WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3044AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3045
3046# check null-4 success: 	1
3047DELETE FROM t1
3048WHERE f_int1 = 0 AND f_int2 = 0
3049AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3050AND f_charbig = '#NULL#';
3051SET AUTOCOMMIT= 0;
3052INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3053SELECT f_int1, f_int1, '', '', 'was inserted'
3054FROM t0_template source_tab
3055WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3056
3057# check transactions-1 success: 	1
3058COMMIT WORK;
3059
3060# check transactions-2 success: 	1
3061ROLLBACK WORK;
3062
3063# check transactions-3 success: 	1
3064DELETE FROM t1 WHERE f_charbig = 'was inserted';
3065COMMIT WORK;
3066ROLLBACK WORK;
3067
3068# check transactions-4 success: 	1
3069INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3070SELECT f_int1, f_int1, '', '', 'was inserted'
3071FROM t0_template source_tab
3072WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3073
3074# check transactions-5 success: 	1
3075ROLLBACK WORK;
3076
3077# check transactions-6 success: 	1
3078# INFO: Storage engine used for t1 seems to be transactional.
3079COMMIT;
3080
3081# check transactions-7 success: 	1
3082DELETE FROM t1 WHERE f_charbig = 'was inserted';
3083COMMIT WORK;
3084SET @@session.sql_mode = 'traditional';
3085Warnings:
3086Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3087SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3089SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3090'', '', 'was inserted' FROM t0_template
3091WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3092ERROR 22012: Division by 0
3093COMMIT;
3094
3095# check transactions-8 success: 	1
3096# INFO: Storage engine used for t1 seems to be able to revert
3097#       changes made by the failing statement.
3098SET @@session.sql_mode = '';
3099Warnings:
3100Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3101SET AUTOCOMMIT= 1;
3102DELETE FROM t1 WHERE f_charbig = 'was inserted';
3103COMMIT WORK;
3104UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3105
3106# check special-1 success: 	1
3107UPDATE t1 SET f_charbig = '';
3108
3109# check special-2 success: 	1
3110UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3111INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3112SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3114INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3115SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3116'just inserted' FROM t0_template
3117WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3118CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3119BEGIN
3120UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3121f_charbig = 'updated by trigger'
3122      WHERE f_int1 = new.f_int1;
3123END|
3124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3125SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3127
3128# check trigger-1 success: 	1
3129DROP TRIGGER trg_1;
3130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3131f_int2 = CAST(f_char1 AS SIGNED INT),
3132f_charbig = 'just inserted'
3133   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3134DELETE FROM t0_aux
3135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3138'just inserted' FROM t0_template
3139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3140CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3141BEGIN
3142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3143f_charbig = 'updated by trigger'
3144      WHERE f_int1 = new.f_int1;
3145END|
3146INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3147SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3149
3150# check trigger-2 success: 	1
3151DROP TRIGGER trg_1;
3152UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3153f_int2 = CAST(f_char1 AS SIGNED INT),
3154f_charbig = 'just inserted'
3155   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3156DELETE FROM t0_aux
3157WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3158INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3159SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3160'just inserted' FROM t0_template
3161WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3162CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3163BEGIN
3164UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3165f_charbig = 'updated by trigger'
3166      WHERE f_int1 = new.f_int1;
3167END|
3168UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3169WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3170
3171# check trigger-3 success: 	1
3172DROP TRIGGER trg_1;
3173UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3174f_int2 = CAST(f_char1 AS SIGNED INT),
3175f_charbig = 'just inserted'
3176   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3177DELETE FROM t0_aux
3178WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3179INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3180SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3181'just inserted' FROM t0_template
3182WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3183CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3184BEGIN
3185UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3186f_charbig = 'updated by trigger'
3187      WHERE f_int1 = - old.f_int1;
3188END|
3189UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3190WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3191
3192# check trigger-4 success: 	1
3193DROP TRIGGER trg_1;
3194UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3195f_int2 = CAST(f_char1 AS SIGNED INT),
3196f_charbig = 'just inserted'
3197   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3198DELETE FROM t0_aux
3199WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3200INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3201SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3202'just inserted' FROM t0_template
3203WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3204CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3205BEGIN
3206UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3207f_charbig = 'updated by trigger'
3208      WHERE f_int1 = new.f_int1;
3209END|
3210UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3211WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3212
3213# check trigger-5 success: 	1
3214DROP TRIGGER trg_1;
3215UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3216f_int2 = CAST(f_char1 AS SIGNED INT),
3217f_charbig = 'just inserted'
3218   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3219DELETE FROM t0_aux
3220WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3221INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3222SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3223'just inserted' FROM t0_template
3224WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3225CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3226BEGIN
3227UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3228f_charbig = 'updated by trigger'
3229      WHERE f_int1 = - old.f_int1;
3230END|
3231UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3232WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3233
3234# check trigger-6 success: 	1
3235DROP TRIGGER trg_1;
3236UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3237f_int2 = CAST(f_char1 AS SIGNED INT),
3238f_charbig = 'just inserted'
3239   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3240DELETE FROM t0_aux
3241WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3242INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3243SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3244'just inserted' FROM t0_template
3245WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3246CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3247BEGIN
3248UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3249f_charbig = 'updated by trigger'
3250      WHERE f_int1 = - old.f_int1;
3251END|
3252DELETE FROM t0_aux
3253WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3254
3255# check trigger-7 success: 	1
3256DROP TRIGGER trg_1;
3257UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3258f_int2 = CAST(f_char1 AS SIGNED INT),
3259f_charbig = 'just inserted'
3260   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3261DELETE FROM t0_aux
3262WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3263INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3264SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3265'just inserted' FROM t0_template
3266WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3267CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3268BEGIN
3269UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3270f_charbig = 'updated by trigger'
3271      WHERE f_int1 = - old.f_int1;
3272END|
3273DELETE FROM t0_aux
3274WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3275
3276# check trigger-8 success: 	1
3277DROP TRIGGER trg_1;
3278UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3279f_int2 = CAST(f_char1 AS SIGNED INT),
3280f_charbig = 'just inserted'
3281   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3282DELETE FROM t0_aux
3283WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3284DELETE FROM t1
3285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3286CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3287BEGIN
3288SET new.f_int1 = old.f_int1 + @max_row,
3289new.f_int2 = old.f_int2 - @max_row,
3290new.f_charbig = '####updated per update trigger####';
3291END|
3292UPDATE t1
3293SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3294f_charbig = '####updated per update statement itself####';
3295
3296# check trigger-9 success: 	1
3297DROP TRIGGER trg_2;
3298UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3299f_int2 = CAST(f_char1 AS SIGNED INT),
3300f_charbig = CONCAT('===',f_char1,'===');
3301CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3302BEGIN
3303SET new.f_int1 = new.f_int1 + @max_row,
3304new.f_int2 = new.f_int2 - @max_row,
3305new.f_charbig = '####updated per update trigger####';
3306END|
3307UPDATE t1
3308SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3309f_charbig = '####updated per update statement itself####';
3310
3311# check trigger-10 success: 	1
3312DROP TRIGGER trg_2;
3313UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3314f_int2 = CAST(f_char1 AS SIGNED INT),
3315f_charbig = CONCAT('===',f_char1,'===');
3316CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3317BEGIN
3318SET new.f_int1 = @my_max1 + @counter,
3319new.f_int2 = @my_min2 - @counter,
3320new.f_charbig = '####updated per insert trigger####';
3321SET @counter = @counter + 1;
3322END|
3323SET @counter = 1;
3324SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3325INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3326SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3327CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3328WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3329ORDER BY f_int1;
3330DROP TRIGGER trg_3;
3331
3332# check trigger-11 success: 	1
3333DELETE FROM t1
3334WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3335AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3336AND f_charbig = '####updated per insert trigger####';
3337CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3338BEGIN
3339SET new.f_int1 = @my_max1 + @counter,
3340new.f_int2 = @my_min2 - @counter,
3341new.f_charbig = '####updated per insert trigger####';
3342SET @counter = @counter + 1;
3343END|
3344SET @counter = 1;
3345SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3346INSERT INTO t1 (f_char1, f_char2, f_charbig)
3347SELECT CAST(f_int1 AS CHAR),
3348CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3349WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3350ORDER BY f_int1;
3351DROP TRIGGER trg_3;
3352
3353# check trigger-12 success: 	1
3354DELETE FROM t1
3355WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3356AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3357AND f_charbig = '####updated per insert trigger####';
3358ANALYZE  TABLE t1;
3359Table	Op	Msg_type	Msg_text
3360test.t1	analyze	status	OK
3361CHECK    TABLE t1 EXTENDED;
3362Table	Op	Msg_type	Msg_text
3363test.t1	check	status	OK
3364CHECKSUM TABLE t1 EXTENDED;
3365Table	Checksum
3366test.t1	<some_value>
3367OPTIMIZE TABLE t1;
3368Table	Op	Msg_type	Msg_text
3369test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3370test.t1	optimize	status	OK
3371# check layout success:    1
3372REPAIR   TABLE t1 EXTENDED;
3373Table	Op	Msg_type	Msg_text
3374test.t1	repair	status	OK
3375# check layout success:    1
3376TRUNCATE t1;
3377
3378# check TRUNCATE success: 	1
3379# check layout success:    1
3380# End usability test (inc/partition_check.inc)
3381DROP TABLE t1;
3382CREATE TABLE t1 (
3383f_int1 INTEGER,
3384f_int2 INTEGER,
3385f_char1 CHAR(20),
3386f_char2 CHAR(20),
3387f_charbig VARCHAR(1000)
3388
3389)
3390PARTITION BY LIST(ABS(MOD(f_int1,2)))
3391SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
3392(PARTITION part1 VALUES IN (0),
3393PARTITION part2 VALUES IN (1),
3394PARTITION part3 VALUES IN (NULL));
3395INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3396SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
3397# Start usability test (inc/partition_check.inc)
3398create_command
3399SHOW CREATE TABLE t1;
3400Table	Create Table
3401t1	CREATE TABLE `t1` (
3402  `f_int1` int(11) DEFAULT NULL,
3403  `f_int2` int(11) DEFAULT NULL,
3404  `f_char1` char(20) DEFAULT NULL,
3405  `f_char2` char(20) DEFAULT NULL,
3406  `f_charbig` varchar(1000) DEFAULT NULL
3407) ENGINE=InnoDB DEFAULT CHARSET=latin1
3408/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3409SUBPARTITION BY KEY (f_int1)
3410SUBPARTITIONS 3
3411(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
3412 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
3413 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
3414
3415unified filelist
3416t1#P#part1#SP#part1sp0.ibd
3417t1#P#part1#SP#part1sp1.ibd
3418t1#P#part1#SP#part1sp2.ibd
3419t1#P#part2#SP#part2sp0.ibd
3420t1#P#part2#SP#part2sp1.ibd
3421t1#P#part2#SP#part2sp2.ibd
3422t1#P#part3#SP#part3sp0.ibd
3423t1#P#part3#SP#part3sp1.ibd
3424t1#P#part3#SP#part3sp2.ibd
3425t1.frm
3426
3427# check prerequisites-1 success:    1
3428# check COUNT(*) success:    1
3429# check MIN/MAX(f_int1) success:    1
3430# check MIN/MAX(f_int2) success:    1
3431INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3432SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3433CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3434WHERE f_int1 IN (2,3);
3435# check prerequisites-3 success:    1
3436DELETE FROM t1 WHERE f_charbig = 'delete me';
3437# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
3438# check read via f_int1 success: 1
3439# check read via f_int2 success: 1
3440
3441# check multiple-1 success: 	1
3442DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3443
3444# check multiple-2 success: 	1
3445INSERT INTO t1 SELECT * FROM t0_template
3446WHERE MOD(f_int1,3) = 0;
3447
3448# check multiple-3 success: 	1
3449UPDATE t1 SET f_int1 = f_int1 + @max_row
3450WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3451AND @max_row_div2 + @max_row_div4;
3452
3453# check multiple-4 success: 	1
3454DELETE FROM t1
3455WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3456AND @max_row_div2 + @max_row_div4 + @max_row;
3457
3458# check multiple-5 success: 	1
3459SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3460INSERT INTO t1
3461SET f_int1 = @cur_value , f_int2 = @cur_value,
3462f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3463f_charbig = '#SINGLE#';
3464
3465# check single-1 success: 	1
3466SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3467INSERT INTO t1
3468SET f_int1 = @cur_value , f_int2 = @cur_value,
3469f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3470f_charbig = '#SINGLE#';
3471
3472# check single-2 success: 	1
3473SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3474SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3475UPDATE t1 SET f_int1 = @cur_value2
3476WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3477
3478# check single-3 success: 	1
3479SET @cur_value1= -1;
3480SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3481UPDATE t1 SET f_int1 = @cur_value1
3482WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3483
3484# check single-4 success: 	1
3485SELECT MAX(f_int1) INTO @cur_value FROM t1;
3486DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3487
3488# check single-5 success: 	1
3489DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3490
3491# check single-6 success: 	1
3492INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3493
3494# check single-7 success: 	1
3495DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3496DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3497INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3498f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3499f_charbig = '#NULL#';
3500INSERT INTO t1
3501SET f_int1 = NULL , f_int2 = -@max_row,
3502f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3503f_charbig = '#NULL#';
3504# check null success:    1
3505
3506# check null-1 success: 	1
3507UPDATE t1 SET f_int1 = -@max_row
3508WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3509AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3510
3511# check null-2 success: 	1
3512UPDATE t1 SET f_int1 = NULL
3513WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3514AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3515
3516# check null-3 success: 	1
3517DELETE FROM t1
3518WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3519AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3520
3521# check null-4 success: 	1
3522DELETE FROM t1
3523WHERE f_int1 = 0 AND f_int2 = 0
3524AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3525AND f_charbig = '#NULL#';
3526SET AUTOCOMMIT= 0;
3527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3528SELECT f_int1, f_int1, '', '', 'was inserted'
3529FROM t0_template source_tab
3530WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3531
3532# check transactions-1 success: 	1
3533COMMIT WORK;
3534
3535# check transactions-2 success: 	1
3536ROLLBACK WORK;
3537
3538# check transactions-3 success: 	1
3539DELETE FROM t1 WHERE f_charbig = 'was inserted';
3540COMMIT WORK;
3541ROLLBACK WORK;
3542
3543# check transactions-4 success: 	1
3544INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3545SELECT f_int1, f_int1, '', '', 'was inserted'
3546FROM t0_template source_tab
3547WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3548
3549# check transactions-5 success: 	1
3550ROLLBACK WORK;
3551
3552# check transactions-6 success: 	1
3553# INFO: Storage engine used for t1 seems to be transactional.
3554COMMIT;
3555
3556# check transactions-7 success: 	1
3557DELETE FROM t1 WHERE f_charbig = 'was inserted';
3558COMMIT WORK;
3559SET @@session.sql_mode = 'traditional';
3560Warnings:
3561Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3562SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3563INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3564SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3565'', '', 'was inserted' FROM t0_template
3566WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3567ERROR 22012: Division by 0
3568COMMIT;
3569
3570# check transactions-8 success: 	1
3571# INFO: Storage engine used for t1 seems to be able to revert
3572#       changes made by the failing statement.
3573SET @@session.sql_mode = '';
3574Warnings:
3575Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3576SET AUTOCOMMIT= 1;
3577DELETE FROM t1 WHERE f_charbig = 'was inserted';
3578COMMIT WORK;
3579UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3580
3581# check special-1 success: 	1
3582UPDATE t1 SET f_charbig = '';
3583
3584# check special-2 success: 	1
3585UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3586INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3587SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3588WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3589INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3590SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3591'just inserted' FROM t0_template
3592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3593CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3594BEGIN
3595UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3596f_charbig = 'updated by trigger'
3597      WHERE f_int1 = new.f_int1;
3598END|
3599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3600SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3601WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3602
3603# check trigger-1 success: 	1
3604DROP TRIGGER trg_1;
3605UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3606f_int2 = CAST(f_char1 AS SIGNED INT),
3607f_charbig = 'just inserted'
3608   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3609DELETE FROM t0_aux
3610WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3611INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3612SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3613'just inserted' FROM t0_template
3614WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3615CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3616BEGIN
3617UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3618f_charbig = 'updated by trigger'
3619      WHERE f_int1 = new.f_int1;
3620END|
3621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3622SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3623WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3624
3625# check trigger-2 success: 	1
3626DROP TRIGGER trg_1;
3627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3628f_int2 = CAST(f_char1 AS SIGNED INT),
3629f_charbig = 'just inserted'
3630   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3631DELETE FROM t0_aux
3632WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3634SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3635'just inserted' FROM t0_template
3636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3637CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3638BEGIN
3639UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3640f_charbig = 'updated by trigger'
3641      WHERE f_int1 = new.f_int1;
3642END|
3643UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3644WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3645
3646# check trigger-3 success: 	1
3647DROP TRIGGER trg_1;
3648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3649f_int2 = CAST(f_char1 AS SIGNED INT),
3650f_charbig = 'just inserted'
3651   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3652DELETE FROM t0_aux
3653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3656'just inserted' FROM t0_template
3657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3658CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3659BEGIN
3660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3661f_charbig = 'updated by trigger'
3662      WHERE f_int1 = - old.f_int1;
3663END|
3664UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3666
3667# check trigger-4 success: 	1
3668DROP TRIGGER trg_1;
3669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3670f_int2 = CAST(f_char1 AS SIGNED INT),
3671f_charbig = 'just inserted'
3672   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3673DELETE FROM t0_aux
3674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3677'just inserted' FROM t0_template
3678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3679CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3680BEGIN
3681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3682f_charbig = 'updated by trigger'
3683      WHERE f_int1 = new.f_int1;
3684END|
3685UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3687
3688# check trigger-5 success: 	1
3689DROP TRIGGER trg_1;
3690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3691f_int2 = CAST(f_char1 AS SIGNED INT),
3692f_charbig = 'just inserted'
3693   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3694DELETE FROM t0_aux
3695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3698'just inserted' FROM t0_template
3699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3700CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3701BEGIN
3702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3703f_charbig = 'updated by trigger'
3704      WHERE f_int1 = - old.f_int1;
3705END|
3706UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3708
3709# check trigger-6 success: 	1
3710DROP TRIGGER trg_1;
3711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3712f_int2 = CAST(f_char1 AS SIGNED INT),
3713f_charbig = 'just inserted'
3714   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3715DELETE FROM t0_aux
3716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3719'just inserted' FROM t0_template
3720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3721CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3722BEGIN
3723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3724f_charbig = 'updated by trigger'
3725      WHERE f_int1 = - old.f_int1;
3726END|
3727DELETE FROM t0_aux
3728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3729
3730# check trigger-7 success: 	1
3731DROP TRIGGER trg_1;
3732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3733f_int2 = CAST(f_char1 AS SIGNED INT),
3734f_charbig = 'just inserted'
3735   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3736DELETE FROM t0_aux
3737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3740'just inserted' FROM t0_template
3741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3742CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3743BEGIN
3744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3745f_charbig = 'updated by trigger'
3746      WHERE f_int1 = - old.f_int1;
3747END|
3748DELETE FROM t0_aux
3749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3750
3751# check trigger-8 success: 	1
3752DROP TRIGGER trg_1;
3753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3754f_int2 = CAST(f_char1 AS SIGNED INT),
3755f_charbig = 'just inserted'
3756   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3757DELETE FROM t0_aux
3758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3759DELETE FROM t1
3760WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3761CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3762BEGIN
3763SET new.f_int1 = old.f_int1 + @max_row,
3764new.f_int2 = old.f_int2 - @max_row,
3765new.f_charbig = '####updated per update trigger####';
3766END|
3767UPDATE t1
3768SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3769f_charbig = '####updated per update statement itself####';
3770
3771# check trigger-9 success: 	1
3772DROP TRIGGER trg_2;
3773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3774f_int2 = CAST(f_char1 AS SIGNED INT),
3775f_charbig = CONCAT('===',f_char1,'===');
3776CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3777BEGIN
3778SET new.f_int1 = new.f_int1 + @max_row,
3779new.f_int2 = new.f_int2 - @max_row,
3780new.f_charbig = '####updated per update trigger####';
3781END|
3782UPDATE t1
3783SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3784f_charbig = '####updated per update statement itself####';
3785
3786# check trigger-10 success: 	1
3787DROP TRIGGER trg_2;
3788UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3789f_int2 = CAST(f_char1 AS SIGNED INT),
3790f_charbig = CONCAT('===',f_char1,'===');
3791CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3792BEGIN
3793SET new.f_int1 = @my_max1 + @counter,
3794new.f_int2 = @my_min2 - @counter,
3795new.f_charbig = '####updated per insert trigger####';
3796SET @counter = @counter + 1;
3797END|
3798SET @counter = 1;
3799SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3800INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3801SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3802CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3804ORDER BY f_int1;
3805DROP TRIGGER trg_3;
3806
3807# check trigger-11 success: 	1
3808DELETE FROM t1
3809WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3810AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3811AND f_charbig = '####updated per insert trigger####';
3812CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3813BEGIN
3814SET new.f_int1 = @my_max1 + @counter,
3815new.f_int2 = @my_min2 - @counter,
3816new.f_charbig = '####updated per insert trigger####';
3817SET @counter = @counter + 1;
3818END|
3819SET @counter = 1;
3820SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3821INSERT INTO t1 (f_char1, f_char2, f_charbig)
3822SELECT CAST(f_int1 AS CHAR),
3823CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3825ORDER BY f_int1;
3826DROP TRIGGER trg_3;
3827
3828# check trigger-12 success: 	1
3829DELETE FROM t1
3830WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3831AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3832AND f_charbig = '####updated per insert trigger####';
3833ANALYZE  TABLE t1;
3834Table	Op	Msg_type	Msg_text
3835test.t1	analyze	status	OK
3836CHECK    TABLE t1 EXTENDED;
3837Table	Op	Msg_type	Msg_text
3838test.t1	check	status	OK
3839CHECKSUM TABLE t1 EXTENDED;
3840Table	Checksum
3841test.t1	<some_value>
3842OPTIMIZE TABLE t1;
3843Table	Op	Msg_type	Msg_text
3844test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3845test.t1	optimize	status	OK
3846# check layout success:    1
3847REPAIR   TABLE t1 EXTENDED;
3848Table	Op	Msg_type	Msg_text
3849test.t1	repair	status	OK
3850# check layout success:    1
3851TRUNCATE t1;
3852
3853# check TRUNCATE success: 	1
3854# check layout success:    1
3855# End usability test (inc/partition_check.inc)
3856DROP TABLE t1;
3857#  1.2 The partitioning function contains two columns.
3858DROP TABLE IF EXISTS t1;
3859CREATE TABLE t1 (
3860f_int1 INTEGER,
3861f_int2 INTEGER,
3862f_char1 CHAR(20),
3863f_char2 CHAR(20),
3864f_charbig VARCHAR(1000)
3865
3866)
3867PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
3868INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3869SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
3870# Start usability test (inc/partition_check.inc)
3871create_command
3872SHOW CREATE TABLE t1;
3873Table	Create Table
3874t1	CREATE TABLE `t1` (
3875  `f_int1` int(11) DEFAULT NULL,
3876  `f_int2` int(11) DEFAULT NULL,
3877  `f_char1` char(20) DEFAULT NULL,
3878  `f_char2` char(20) DEFAULT NULL,
3879  `f_charbig` varchar(1000) DEFAULT NULL
3880) ENGINE=InnoDB DEFAULT CHARSET=latin1
3881/*!50100 PARTITION BY HASH (f_int1 + f_int2)
3882PARTITIONS 2 */
3883
3884unified filelist
3885t1#P#p0.ibd
3886t1#P#p1.ibd
3887t1.frm
3888
3889# check prerequisites-1 success:    1
3890# check COUNT(*) success:    1
3891# check MIN/MAX(f_int1) success:    1
3892# check MIN/MAX(f_int2) success:    1
3893INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3894SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3895CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3896WHERE f_int1 IN (2,3);
3897# check prerequisites-3 success:    1
3898DELETE FROM t1 WHERE f_charbig = 'delete me';
3899# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
3900# check read via f_int1 success: 1
3901# check read via f_int2 success: 1
3902
3903# check multiple-1 success: 	1
3904DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3905
3906# check multiple-2 success: 	1
3907INSERT INTO t1 SELECT * FROM t0_template
3908WHERE MOD(f_int1,3) = 0;
3909
3910# check multiple-3 success: 	1
3911UPDATE t1 SET f_int1 = f_int1 + @max_row
3912WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3913AND @max_row_div2 + @max_row_div4;
3914
3915# check multiple-4 success: 	1
3916DELETE FROM t1
3917WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3918AND @max_row_div2 + @max_row_div4 + @max_row;
3919
3920# check multiple-5 success: 	1
3921SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3922INSERT INTO t1
3923SET f_int1 = @cur_value , f_int2 = @cur_value,
3924f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3925f_charbig = '#SINGLE#';
3926
3927# check single-1 success: 	1
3928SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3929INSERT INTO t1
3930SET f_int1 = @cur_value , f_int2 = @cur_value,
3931f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3932f_charbig = '#SINGLE#';
3933
3934# check single-2 success: 	1
3935SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3936SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3937UPDATE t1 SET f_int1 = @cur_value2
3938WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3939
3940# check single-3 success: 	1
3941SET @cur_value1= -1;
3942SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3943UPDATE t1 SET f_int1 = @cur_value1
3944WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3945
3946# check single-4 success: 	1
3947SELECT MAX(f_int1) INTO @cur_value FROM t1;
3948DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3949
3950# check single-5 success: 	1
3951DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3952
3953# check single-6 success: 	1
3954INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3955
3956# check single-7 success: 	1
3957DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3958DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3959INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3960f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3961f_charbig = '#NULL#';
3962INSERT INTO t1
3963SET f_int1 = NULL , f_int2 = -@max_row,
3964f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3965f_charbig = '#NULL#';
3966# check null success:    1
3967
3968# check null-1 success: 	1
3969UPDATE t1 SET f_int1 = -@max_row
3970WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3971AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3972
3973# check null-2 success: 	1
3974UPDATE t1 SET f_int1 = NULL
3975WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3976AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3977
3978# check null-3 success: 	1
3979DELETE FROM t1
3980WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3981AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3982
3983# check null-4 success: 	1
3984DELETE FROM t1
3985WHERE f_int1 = 0 AND f_int2 = 0
3986AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3987AND f_charbig = '#NULL#';
3988SET AUTOCOMMIT= 0;
3989INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3990SELECT f_int1, f_int1, '', '', 'was inserted'
3991FROM t0_template source_tab
3992WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3993
3994# check transactions-1 success: 	1
3995COMMIT WORK;
3996
3997# check transactions-2 success: 	1
3998ROLLBACK WORK;
3999
4000# check transactions-3 success: 	1
4001DELETE FROM t1 WHERE f_charbig = 'was inserted';
4002COMMIT WORK;
4003ROLLBACK WORK;
4004
4005# check transactions-4 success: 	1
4006INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4007SELECT f_int1, f_int1, '', '', 'was inserted'
4008FROM t0_template source_tab
4009WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4010
4011# check transactions-5 success: 	1
4012ROLLBACK WORK;
4013
4014# check transactions-6 success: 	1
4015# INFO: Storage engine used for t1 seems to be transactional.
4016COMMIT;
4017
4018# check transactions-7 success: 	1
4019DELETE FROM t1 WHERE f_charbig = 'was inserted';
4020COMMIT WORK;
4021SET @@session.sql_mode = 'traditional';
4022Warnings:
4023Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4024SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4025INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4026SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4027'', '', 'was inserted' FROM t0_template
4028WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4029ERROR 22012: Division by 0
4030COMMIT;
4031
4032# check transactions-8 success: 	1
4033# INFO: Storage engine used for t1 seems to be able to revert
4034#       changes made by the failing statement.
4035SET @@session.sql_mode = '';
4036Warnings:
4037Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4038SET AUTOCOMMIT= 1;
4039DELETE FROM t1 WHERE f_charbig = 'was inserted';
4040COMMIT WORK;
4041UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4042
4043# check special-1 success: 	1
4044UPDATE t1 SET f_charbig = '';
4045
4046# check special-2 success: 	1
4047UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4048INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4049SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4050WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4051INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4052SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4053'just inserted' FROM t0_template
4054WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4055CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4056BEGIN
4057UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4058f_charbig = 'updated by trigger'
4059      WHERE f_int1 = new.f_int1;
4060END|
4061INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4062SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4063WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4064
4065# check trigger-1 success: 	1
4066DROP TRIGGER trg_1;
4067UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4068f_int2 = CAST(f_char1 AS SIGNED INT),
4069f_charbig = 'just inserted'
4070   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4071DELETE FROM t0_aux
4072WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4073INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4074SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4075'just inserted' FROM t0_template
4076WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4077CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4078BEGIN
4079UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4080f_charbig = 'updated by trigger'
4081      WHERE f_int1 = new.f_int1;
4082END|
4083INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4084SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4085WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4086
4087# check trigger-2 success: 	1
4088DROP TRIGGER trg_1;
4089UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4090f_int2 = CAST(f_char1 AS SIGNED INT),
4091f_charbig = 'just inserted'
4092   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4093DELETE FROM t0_aux
4094WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4095INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4096SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4097'just inserted' FROM t0_template
4098WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4099CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4100BEGIN
4101UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4102f_charbig = 'updated by trigger'
4103      WHERE f_int1 = new.f_int1;
4104END|
4105UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4106WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4107
4108# check trigger-3 success: 	1
4109DROP TRIGGER trg_1;
4110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4111f_int2 = CAST(f_char1 AS SIGNED INT),
4112f_charbig = 'just inserted'
4113   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4114DELETE FROM t0_aux
4115WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4116INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4117SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4118'just inserted' FROM t0_template
4119WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4120CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4121BEGIN
4122UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4123f_charbig = 'updated by trigger'
4124      WHERE f_int1 = - old.f_int1;
4125END|
4126UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4127WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4128
4129# check trigger-4 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 UPDATE 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|
4147UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4148WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4149
4150# check trigger-5 success: 	1
4151DROP TRIGGER trg_1;
4152UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4153f_int2 = CAST(f_char1 AS SIGNED INT),
4154f_charbig = 'just inserted'
4155   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4156DELETE FROM t0_aux
4157WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4158INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4159SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4160'just inserted' FROM t0_template
4161WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4162CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4163BEGIN
4164UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4165f_charbig = 'updated by trigger'
4166      WHERE f_int1 = - old.f_int1;
4167END|
4168UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4169WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4170
4171# check trigger-6 success: 	1
4172DROP TRIGGER trg_1;
4173UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4174f_int2 = CAST(f_char1 AS SIGNED INT),
4175f_charbig = 'just inserted'
4176   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4177DELETE FROM t0_aux
4178WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4179INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4180SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4181'just inserted' FROM t0_template
4182WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4183CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4184BEGIN
4185UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4186f_charbig = 'updated by trigger'
4187      WHERE f_int1 = - old.f_int1;
4188END|
4189DELETE FROM t0_aux
4190WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4191
4192# check trigger-7 success: 	1
4193DROP TRIGGER trg_1;
4194UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4195f_int2 = CAST(f_char1 AS SIGNED INT),
4196f_charbig = 'just inserted'
4197   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4198DELETE FROM t0_aux
4199WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4200INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4201SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4202'just inserted' FROM t0_template
4203WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4204CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4205BEGIN
4206UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4207f_charbig = 'updated by trigger'
4208      WHERE f_int1 = - old.f_int1;
4209END|
4210DELETE FROM t0_aux
4211WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4212
4213# check trigger-8 success: 	1
4214DROP TRIGGER trg_1;
4215UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4216f_int2 = CAST(f_char1 AS SIGNED INT),
4217f_charbig = 'just inserted'
4218   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4219DELETE FROM t0_aux
4220WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4221DELETE FROM t1
4222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4223CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4224BEGIN
4225SET new.f_int1 = old.f_int1 + @max_row,
4226new.f_int2 = old.f_int2 - @max_row,
4227new.f_charbig = '####updated per update trigger####';
4228END|
4229UPDATE t1
4230SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4231f_charbig = '####updated per update statement itself####';
4232
4233# check trigger-9 success: 	1
4234DROP TRIGGER trg_2;
4235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4236f_int2 = CAST(f_char1 AS SIGNED INT),
4237f_charbig = CONCAT('===',f_char1,'===');
4238CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4239BEGIN
4240SET new.f_int1 = new.f_int1 + @max_row,
4241new.f_int2 = new.f_int2 - @max_row,
4242new.f_charbig = '####updated per update trigger####';
4243END|
4244UPDATE t1
4245SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4246f_charbig = '####updated per update statement itself####';
4247
4248# check trigger-10 success: 	1
4249DROP TRIGGER trg_2;
4250UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4251f_int2 = CAST(f_char1 AS SIGNED INT),
4252f_charbig = CONCAT('===',f_char1,'===');
4253CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4254BEGIN
4255SET new.f_int1 = @my_max1 + @counter,
4256new.f_int2 = @my_min2 - @counter,
4257new.f_charbig = '####updated per insert trigger####';
4258SET @counter = @counter + 1;
4259END|
4260SET @counter = 1;
4261SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4262INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4263SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4264CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4265WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4266ORDER BY f_int1;
4267DROP TRIGGER trg_3;
4268
4269# check trigger-11 success: 	1
4270DELETE FROM t1
4271WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4272AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4273AND f_charbig = '####updated per insert trigger####';
4274CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4275BEGIN
4276SET new.f_int1 = @my_max1 + @counter,
4277new.f_int2 = @my_min2 - @counter,
4278new.f_charbig = '####updated per insert trigger####';
4279SET @counter = @counter + 1;
4280END|
4281SET @counter = 1;
4282SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4283INSERT INTO t1 (f_char1, f_char2, f_charbig)
4284SELECT CAST(f_int1 AS CHAR),
4285CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4286WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4287ORDER BY f_int1;
4288DROP TRIGGER trg_3;
4289
4290# check trigger-12 success: 	1
4291DELETE FROM t1
4292WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4293AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4294AND f_charbig = '####updated per insert trigger####';
4295ANALYZE  TABLE t1;
4296Table	Op	Msg_type	Msg_text
4297test.t1	analyze	status	OK
4298CHECK    TABLE t1 EXTENDED;
4299Table	Op	Msg_type	Msg_text
4300test.t1	check	status	OK
4301CHECKSUM TABLE t1 EXTENDED;
4302Table	Checksum
4303test.t1	<some_value>
4304OPTIMIZE TABLE t1;
4305Table	Op	Msg_type	Msg_text
4306test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4307test.t1	optimize	status	OK
4308# check layout success:    1
4309REPAIR   TABLE t1 EXTENDED;
4310Table	Op	Msg_type	Msg_text
4311test.t1	repair	status	OK
4312# check layout success:    1
4313TRUNCATE t1;
4314
4315# check TRUNCATE success: 	1
4316# check layout success:    1
4317# End usability test (inc/partition_check.inc)
4318DROP TABLE t1;
4319CREATE TABLE t1 (
4320f_int1 INTEGER,
4321f_int2 INTEGER,
4322f_char1 CHAR(20),
4323f_char2 CHAR(20),
4324f_charbig VARCHAR(1000)
4325
4326)
4327PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
4328INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4329SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
4330# Start usability test (inc/partition_check.inc)
4331create_command
4332SHOW CREATE TABLE t1;
4333Table	Create Table
4334t1	CREATE TABLE `t1` (
4335  `f_int1` int(11) DEFAULT NULL,
4336  `f_int2` int(11) DEFAULT NULL,
4337  `f_char1` char(20) DEFAULT NULL,
4338  `f_char2` char(20) DEFAULT NULL,
4339  `f_charbig` varchar(1000) DEFAULT NULL
4340) ENGINE=InnoDB DEFAULT CHARSET=latin1
4341/*!50100 PARTITION BY KEY (f_int1,f_int2)
4342PARTITIONS 5 */
4343
4344unified filelist
4345t1#P#p0.ibd
4346t1#P#p1.ibd
4347t1#P#p2.ibd
4348t1#P#p3.ibd
4349t1#P#p4.ibd
4350t1.frm
4351
4352# check prerequisites-1 success:    1
4353# check COUNT(*) success:    1
4354# check MIN/MAX(f_int1) success:    1
4355# check MIN/MAX(f_int2) success:    1
4356INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4357SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4358CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4359WHERE f_int1 IN (2,3);
4360# check prerequisites-3 success:    1
4361DELETE FROM t1 WHERE f_charbig = 'delete me';
4362# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
4363# check read via f_int1 success: 1
4364# check read via f_int2 success: 1
4365
4366# check multiple-1 success: 	1
4367DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4368
4369# check multiple-2 success: 	1
4370INSERT INTO t1 SELECT * FROM t0_template
4371WHERE MOD(f_int1,3) = 0;
4372
4373# check multiple-3 success: 	1
4374UPDATE t1 SET f_int1 = f_int1 + @max_row
4375WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4376AND @max_row_div2 + @max_row_div4;
4377
4378# check multiple-4 success: 	1
4379DELETE FROM t1
4380WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4381AND @max_row_div2 + @max_row_div4 + @max_row;
4382
4383# check multiple-5 success: 	1
4384SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4385INSERT INTO t1
4386SET f_int1 = @cur_value , f_int2 = @cur_value,
4387f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4388f_charbig = '#SINGLE#';
4389
4390# check single-1 success: 	1
4391SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4392INSERT INTO t1
4393SET f_int1 = @cur_value , f_int2 = @cur_value,
4394f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4395f_charbig = '#SINGLE#';
4396
4397# check single-2 success: 	1
4398SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4399SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4400UPDATE t1 SET f_int1 = @cur_value2
4401WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4402
4403# check single-3 success: 	1
4404SET @cur_value1= -1;
4405SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4406UPDATE t1 SET f_int1 = @cur_value1
4407WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4408
4409# check single-4 success: 	1
4410SELECT MAX(f_int1) INTO @cur_value FROM t1;
4411DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4412
4413# check single-5 success: 	1
4414DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4415
4416# check single-6 success: 	1
4417INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4418
4419# check single-7 success: 	1
4420DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4421DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4422INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4423f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4424f_charbig = '#NULL#';
4425INSERT INTO t1
4426SET f_int1 = NULL , f_int2 = -@max_row,
4427f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4428f_charbig = '#NULL#';
4429# check null success:    1
4430
4431# check null-1 success: 	1
4432UPDATE t1 SET f_int1 = -@max_row
4433WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4434AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4435
4436# check null-2 success: 	1
4437UPDATE t1 SET f_int1 = NULL
4438WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4439AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4440
4441# check null-3 success: 	1
4442DELETE FROM t1
4443WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4444AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4445
4446# check null-4 success: 	1
4447DELETE FROM t1
4448WHERE f_int1 = 0 AND f_int2 = 0
4449AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4450AND f_charbig = '#NULL#';
4451SET AUTOCOMMIT= 0;
4452INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4453SELECT f_int1, f_int1, '', '', 'was inserted'
4454FROM t0_template source_tab
4455WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4456
4457# check transactions-1 success: 	1
4458COMMIT WORK;
4459
4460# check transactions-2 success: 	1
4461ROLLBACK WORK;
4462
4463# check transactions-3 success: 	1
4464DELETE FROM t1 WHERE f_charbig = 'was inserted';
4465COMMIT WORK;
4466ROLLBACK WORK;
4467
4468# check transactions-4 success: 	1
4469INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4470SELECT f_int1, f_int1, '', '', 'was inserted'
4471FROM t0_template source_tab
4472WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4473
4474# check transactions-5 success: 	1
4475ROLLBACK WORK;
4476
4477# check transactions-6 success: 	1
4478# INFO: Storage engine used for t1 seems to be transactional.
4479COMMIT;
4480
4481# check transactions-7 success: 	1
4482DELETE FROM t1 WHERE f_charbig = 'was inserted';
4483COMMIT WORK;
4484SET @@session.sql_mode = 'traditional';
4485Warnings:
4486Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4487SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4488INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4489SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4490'', '', 'was inserted' FROM t0_template
4491WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4492ERROR 22012: Division by 0
4493COMMIT;
4494
4495# check transactions-8 success: 	1
4496# INFO: Storage engine used for t1 seems to be able to revert
4497#       changes made by the failing statement.
4498SET @@session.sql_mode = '';
4499Warnings:
4500Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4501SET AUTOCOMMIT= 1;
4502DELETE FROM t1 WHERE f_charbig = 'was inserted';
4503COMMIT WORK;
4504UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4505
4506# check special-1 success: 	1
4507UPDATE t1 SET f_charbig = '';
4508
4509# check special-2 success: 	1
4510UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4511INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4512SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4513WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4514INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4515SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4516'just inserted' FROM t0_template
4517WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4518CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4519BEGIN
4520UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4521f_charbig = 'updated by trigger'
4522      WHERE f_int1 = new.f_int1;
4523END|
4524INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4525SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4526WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4527
4528# check trigger-1 success: 	1
4529DROP TRIGGER trg_1;
4530UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4531f_int2 = CAST(f_char1 AS SIGNED INT),
4532f_charbig = 'just inserted'
4533   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4534DELETE FROM t0_aux
4535WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4536INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4537SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4538'just inserted' FROM t0_template
4539WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4540CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4541BEGIN
4542UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4543f_charbig = 'updated by trigger'
4544      WHERE f_int1 = new.f_int1;
4545END|
4546INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4547SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4548WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4549
4550# check trigger-2 success: 	1
4551DROP TRIGGER trg_1;
4552UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4553f_int2 = CAST(f_char1 AS SIGNED INT),
4554f_charbig = 'just inserted'
4555   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4556DELETE FROM t0_aux
4557WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4558INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4559SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4560'just inserted' FROM t0_template
4561WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4562CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4563BEGIN
4564UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4565f_charbig = 'updated by trigger'
4566      WHERE f_int1 = new.f_int1;
4567END|
4568UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4569WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4570
4571# check trigger-3 success: 	1
4572DROP TRIGGER trg_1;
4573UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4574f_int2 = CAST(f_char1 AS SIGNED INT),
4575f_charbig = 'just inserted'
4576   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4577DELETE FROM t0_aux
4578WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4579INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4580SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4581'just inserted' FROM t0_template
4582WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4583CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4584BEGIN
4585UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4586f_charbig = 'updated by trigger'
4587      WHERE f_int1 = - old.f_int1;
4588END|
4589UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4590WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4591
4592# check trigger-4 success: 	1
4593DROP TRIGGER trg_1;
4594UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4595f_int2 = CAST(f_char1 AS SIGNED INT),
4596f_charbig = 'just inserted'
4597   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4598DELETE FROM t0_aux
4599WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4600INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4601SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4602'just inserted' FROM t0_template
4603WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4604CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4605BEGIN
4606UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4607f_charbig = 'updated by trigger'
4608      WHERE f_int1 = new.f_int1;
4609END|
4610UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4611WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4612
4613# check trigger-5 success: 	1
4614DROP TRIGGER trg_1;
4615UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4616f_int2 = CAST(f_char1 AS SIGNED INT),
4617f_charbig = 'just inserted'
4618   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4619DELETE FROM t0_aux
4620WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4622SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4623'just inserted' FROM t0_template
4624WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4625CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4626BEGIN
4627UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4628f_charbig = 'updated by trigger'
4629      WHERE f_int1 = - old.f_int1;
4630END|
4631UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4632WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4633
4634# check trigger-6 success: 	1
4635DROP TRIGGER trg_1;
4636UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4637f_int2 = CAST(f_char1 AS SIGNED INT),
4638f_charbig = 'just inserted'
4639   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4640DELETE FROM t0_aux
4641WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4643SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4644'just inserted' FROM t0_template
4645WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4646CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4647BEGIN
4648UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4649f_charbig = 'updated by trigger'
4650      WHERE f_int1 = - old.f_int1;
4651END|
4652DELETE FROM t0_aux
4653WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4654
4655# check trigger-7 success: 	1
4656DROP TRIGGER trg_1;
4657UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4658f_int2 = CAST(f_char1 AS SIGNED INT),
4659f_charbig = 'just inserted'
4660   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4661DELETE FROM t0_aux
4662WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4664SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4665'just inserted' FROM t0_template
4666WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4667CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4668BEGIN
4669UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4670f_charbig = 'updated by trigger'
4671      WHERE f_int1 = - old.f_int1;
4672END|
4673DELETE FROM t0_aux
4674WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4675
4676# check trigger-8 success: 	1
4677DROP TRIGGER trg_1;
4678UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4679f_int2 = CAST(f_char1 AS SIGNED INT),
4680f_charbig = 'just inserted'
4681   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4682DELETE FROM t0_aux
4683WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4684DELETE FROM t1
4685WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4686CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4687BEGIN
4688SET new.f_int1 = old.f_int1 + @max_row,
4689new.f_int2 = old.f_int2 - @max_row,
4690new.f_charbig = '####updated per update trigger####';
4691END|
4692UPDATE t1
4693SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4694f_charbig = '####updated per update statement itself####';
4695
4696# check trigger-9 success: 	1
4697DROP TRIGGER trg_2;
4698UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4699f_int2 = CAST(f_char1 AS SIGNED INT),
4700f_charbig = CONCAT('===',f_char1,'===');
4701CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4702BEGIN
4703SET new.f_int1 = new.f_int1 + @max_row,
4704new.f_int2 = new.f_int2 - @max_row,
4705new.f_charbig = '####updated per update trigger####';
4706END|
4707UPDATE t1
4708SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4709f_charbig = '####updated per update statement itself####';
4710
4711# check trigger-10 success: 	1
4712DROP TRIGGER trg_2;
4713UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4714f_int2 = CAST(f_char1 AS SIGNED INT),
4715f_charbig = CONCAT('===',f_char1,'===');
4716CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4717BEGIN
4718SET new.f_int1 = @my_max1 + @counter,
4719new.f_int2 = @my_min2 - @counter,
4720new.f_charbig = '####updated per insert trigger####';
4721SET @counter = @counter + 1;
4722END|
4723SET @counter = 1;
4724SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4725INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4726SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4727CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4728WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4729ORDER BY f_int1;
4730DROP TRIGGER trg_3;
4731
4732# check trigger-11 success: 	1
4733DELETE FROM t1
4734WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4735AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4736AND f_charbig = '####updated per insert trigger####';
4737CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4738BEGIN
4739SET new.f_int1 = @my_max1 + @counter,
4740new.f_int2 = @my_min2 - @counter,
4741new.f_charbig = '####updated per insert trigger####';
4742SET @counter = @counter + 1;
4743END|
4744SET @counter = 1;
4745SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4746INSERT INTO t1 (f_char1, f_char2, f_charbig)
4747SELECT CAST(f_int1 AS CHAR),
4748CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4749WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4750ORDER BY f_int1;
4751DROP TRIGGER trg_3;
4752
4753# check trigger-12 success: 	1
4754DELETE FROM t1
4755WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4756AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4757AND f_charbig = '####updated per insert trigger####';
4758ANALYZE  TABLE t1;
4759Table	Op	Msg_type	Msg_text
4760test.t1	analyze	status	OK
4761CHECK    TABLE t1 EXTENDED;
4762Table	Op	Msg_type	Msg_text
4763test.t1	check	status	OK
4764CHECKSUM TABLE t1 EXTENDED;
4765Table	Checksum
4766test.t1	<some_value>
4767OPTIMIZE TABLE t1;
4768Table	Op	Msg_type	Msg_text
4769test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4770test.t1	optimize	status	OK
4771# check layout success:    1
4772REPAIR   TABLE t1 EXTENDED;
4773Table	Op	Msg_type	Msg_text
4774test.t1	repair	status	OK
4775# check layout success:    1
4776TRUNCATE t1;
4777
4778# check TRUNCATE success: 	1
4779# check layout success:    1
4780# End usability test (inc/partition_check.inc)
4781DROP TABLE t1;
4782CREATE TABLE t1 (
4783f_int1 INTEGER,
4784f_int2 INTEGER,
4785f_char1 CHAR(20),
4786f_char2 CHAR(20),
4787f_charbig VARCHAR(1000)
4788
4789)
4790PARTITION BY LIST(MOD(f_int1 + f_int2,4))
4791(PARTITION part_3 VALUES IN (-3),
4792PARTITION part_2 VALUES IN (-2),
4793PARTITION part_1 VALUES IN (-1),
4794PARTITION part_N VALUES IN (NULL),
4795PARTITION part0 VALUES IN (0),
4796PARTITION part1 VALUES IN (1),
4797PARTITION part2 VALUES IN (2),
4798PARTITION part3 VALUES IN (3));
4799INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4800SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
4801# Start usability test (inc/partition_check.inc)
4802create_command
4803SHOW CREATE TABLE t1;
4804Table	Create Table
4805t1	CREATE TABLE `t1` (
4806  `f_int1` int(11) DEFAULT NULL,
4807  `f_int2` int(11) DEFAULT NULL,
4808  `f_char1` char(20) DEFAULT NULL,
4809  `f_char2` char(20) DEFAULT NULL,
4810  `f_charbig` varchar(1000) DEFAULT NULL
4811) ENGINE=InnoDB DEFAULT CHARSET=latin1
4812/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
4813(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
4814 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
4815 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
4816 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
4817 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
4818 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
4819 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
4820 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
4821
4822unified filelist
4823t1#P#part0.ibd
4824t1#P#part1.ibd
4825t1#P#part2.ibd
4826t1#P#part3.ibd
4827t1#P#part_1.ibd
4828t1#P#part_2.ibd
4829t1#P#part_3.ibd
4830t1#P#part_N.ibd
4831t1.frm
4832
4833# check prerequisites-1 success:    1
4834# check COUNT(*) success:    1
4835# check MIN/MAX(f_int1) success:    1
4836# check MIN/MAX(f_int2) success:    1
4837INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4838SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4839CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4840WHERE f_int1 IN (2,3);
4841# check prerequisites-3 success:    1
4842DELETE FROM t1 WHERE f_charbig = 'delete me';
4843# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
4844# check read via f_int1 success: 1
4845# check read via f_int2 success: 1
4846
4847# check multiple-1 success: 	1
4848DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4849
4850# check multiple-2 success: 	1
4851INSERT INTO t1 SELECT * FROM t0_template
4852WHERE MOD(f_int1,3) = 0;
4853
4854# check multiple-3 success: 	1
4855UPDATE t1 SET f_int1 = f_int1 + @max_row
4856WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4857AND @max_row_div2 + @max_row_div4;
4858
4859# check multiple-4 success: 	1
4860DELETE FROM t1
4861WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4862AND @max_row_div2 + @max_row_div4 + @max_row;
4863
4864# check multiple-5 success: 	1
4865SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4866INSERT INTO t1
4867SET f_int1 = @cur_value , f_int2 = @cur_value,
4868f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4869f_charbig = '#SINGLE#';
4870
4871# check single-1 success: 	1
4872SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4873INSERT INTO t1
4874SET f_int1 = @cur_value , f_int2 = @cur_value,
4875f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4876f_charbig = '#SINGLE#';
4877
4878# check single-2 success: 	1
4879SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4880SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4881UPDATE t1 SET f_int1 = @cur_value2
4882WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4883
4884# check single-3 success: 	1
4885SET @cur_value1= -1;
4886SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4887UPDATE t1 SET f_int1 = @cur_value1
4888WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4889
4890# check single-4 success: 	1
4891SELECT MAX(f_int1) INTO @cur_value FROM t1;
4892DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4893
4894# check single-5 success: 	1
4895DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4896
4897# check single-6 success: 	1
4898INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4899
4900# check single-7 success: 	1
4901DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4902DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4903INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4904f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4905f_charbig = '#NULL#';
4906INSERT INTO t1
4907SET f_int1 = NULL , f_int2 = -@max_row,
4908f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4909f_charbig = '#NULL#';
4910# check null success:    1
4911
4912# check null-1 success: 	1
4913UPDATE t1 SET f_int1 = -@max_row
4914WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4915AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4916
4917# check null-2 success: 	1
4918UPDATE t1 SET f_int1 = NULL
4919WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4920AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4921
4922# check null-3 success: 	1
4923DELETE FROM t1
4924WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
4925AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
4926
4927# check null-4 success: 	1
4928DELETE FROM t1
4929WHERE f_int1 = 0 AND f_int2 = 0
4930AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4931AND f_charbig = '#NULL#';
4932SET AUTOCOMMIT= 0;
4933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4934SELECT f_int1, f_int1, '', '', 'was inserted'
4935FROM t0_template source_tab
4936WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4937
4938# check transactions-1 success: 	1
4939COMMIT WORK;
4940
4941# check transactions-2 success: 	1
4942ROLLBACK WORK;
4943
4944# check transactions-3 success: 	1
4945DELETE FROM t1 WHERE f_charbig = 'was inserted';
4946COMMIT WORK;
4947ROLLBACK WORK;
4948
4949# check transactions-4 success: 	1
4950INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4951SELECT f_int1, f_int1, '', '', 'was inserted'
4952FROM t0_template source_tab
4953WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4954
4955# check transactions-5 success: 	1
4956ROLLBACK WORK;
4957
4958# check transactions-6 success: 	1
4959# INFO: Storage engine used for t1 seems to be transactional.
4960COMMIT;
4961
4962# check transactions-7 success: 	1
4963DELETE FROM t1 WHERE f_charbig = 'was inserted';
4964COMMIT WORK;
4965SET @@session.sql_mode = 'traditional';
4966Warnings:
4967Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4968SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4969INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4970SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4971'', '', 'was inserted' FROM t0_template
4972WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4973ERROR 22012: Division by 0
4974COMMIT;
4975
4976# check transactions-8 success: 	1
4977# INFO: Storage engine used for t1 seems to be able to revert
4978#       changes made by the failing statement.
4979SET @@session.sql_mode = '';
4980Warnings:
4981Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4982SET AUTOCOMMIT= 1;
4983DELETE FROM t1 WHERE f_charbig = 'was inserted';
4984COMMIT WORK;
4985UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4986
4987# check special-1 success: 	1
4988UPDATE t1 SET f_charbig = '';
4989
4990# check special-2 success: 	1
4991UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4992INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4993SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4994WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4995INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4996SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4997'just inserted' FROM t0_template
4998WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4999CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5000BEGIN
5001UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5002f_charbig = 'updated by trigger'
5003      WHERE f_int1 = new.f_int1;
5004END|
5005INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5006SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5007WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5008
5009# check trigger-1 success: 	1
5010DROP TRIGGER trg_1;
5011UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5012f_int2 = CAST(f_char1 AS SIGNED INT),
5013f_charbig = 'just inserted'
5014   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5015DELETE FROM t0_aux
5016WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5017INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5018SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5019'just inserted' FROM t0_template
5020WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5021CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5022BEGIN
5023UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5024f_charbig = 'updated by trigger'
5025      WHERE f_int1 = new.f_int1;
5026END|
5027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5028SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5029WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5030
5031# check trigger-2 success: 	1
5032DROP TRIGGER trg_1;
5033UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5034f_int2 = CAST(f_char1 AS SIGNED INT),
5035f_charbig = 'just inserted'
5036   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5037DELETE FROM t0_aux
5038WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5039INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5040SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5041'just inserted' FROM t0_template
5042WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5043CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5044BEGIN
5045UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5046f_charbig = 'updated by trigger'
5047      WHERE f_int1 = new.f_int1;
5048END|
5049UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5050WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5051
5052# check trigger-3 success: 	1
5053DROP TRIGGER trg_1;
5054UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5055f_int2 = CAST(f_char1 AS SIGNED INT),
5056f_charbig = 'just inserted'
5057   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5058DELETE FROM t0_aux
5059WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5060INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5061SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5062'just inserted' FROM t0_template
5063WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5064CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5065BEGIN
5066UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5067f_charbig = 'updated by trigger'
5068      WHERE f_int1 = - old.f_int1;
5069END|
5070UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5071WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5072
5073# check trigger-4 success: 	1
5074DROP TRIGGER trg_1;
5075UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5076f_int2 = CAST(f_char1 AS SIGNED INT),
5077f_charbig = 'just inserted'
5078   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5079DELETE FROM t0_aux
5080WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5081INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5082SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5083'just inserted' FROM t0_template
5084WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5085CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5086BEGIN
5087UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5088f_charbig = 'updated by trigger'
5089      WHERE f_int1 = new.f_int1;
5090END|
5091UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5092WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5093
5094# check trigger-5 success: 	1
5095DROP TRIGGER trg_1;
5096UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5097f_int2 = CAST(f_char1 AS SIGNED INT),
5098f_charbig = 'just inserted'
5099   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5100DELETE FROM t0_aux
5101WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5103SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5104'just inserted' FROM t0_template
5105WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5106CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5107BEGIN
5108UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5109f_charbig = 'updated by trigger'
5110      WHERE f_int1 = - old.f_int1;
5111END|
5112UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5113WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5114
5115# check trigger-6 success: 	1
5116DROP TRIGGER trg_1;
5117UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5118f_int2 = CAST(f_char1 AS SIGNED INT),
5119f_charbig = 'just inserted'
5120   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5121DELETE FROM t0_aux
5122WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5123INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5124SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5125'just inserted' FROM t0_template
5126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5127CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5128BEGIN
5129UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5130f_charbig = 'updated by trigger'
5131      WHERE f_int1 = - old.f_int1;
5132END|
5133DELETE FROM t0_aux
5134WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5135
5136# check trigger-7 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 AFTER DELETE 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 = - old.f_int1;
5153END|
5154DELETE FROM t0_aux
5155WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5156
5157# check trigger-8 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;
5165DELETE FROM t1
5166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5167CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5168BEGIN
5169SET new.f_int1 = old.f_int1 + @max_row,
5170new.f_int2 = old.f_int2 - @max_row,
5171new.f_charbig = '####updated per update trigger####';
5172END|
5173UPDATE t1
5174SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5175f_charbig = '####updated per update statement itself####';
5176
5177# check trigger-9 success: 	1
5178DROP TRIGGER trg_2;
5179UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5180f_int2 = CAST(f_char1 AS SIGNED INT),
5181f_charbig = CONCAT('===',f_char1,'===');
5182CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5183BEGIN
5184SET new.f_int1 = new.f_int1 + @max_row,
5185new.f_int2 = new.f_int2 - @max_row,
5186new.f_charbig = '####updated per update trigger####';
5187END|
5188UPDATE t1
5189SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5190f_charbig = '####updated per update statement itself####';
5191
5192# check trigger-10 success: 	1
5193DROP TRIGGER trg_2;
5194UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5195f_int2 = CAST(f_char1 AS SIGNED INT),
5196f_charbig = CONCAT('===',f_char1,'===');
5197CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5198BEGIN
5199SET new.f_int1 = @my_max1 + @counter,
5200new.f_int2 = @my_min2 - @counter,
5201new.f_charbig = '####updated per insert trigger####';
5202SET @counter = @counter + 1;
5203END|
5204SET @counter = 1;
5205SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5206INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5207SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5208CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5209WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5210ORDER BY f_int1;
5211DROP TRIGGER trg_3;
5212
5213# check trigger-11 success: 	1
5214DELETE FROM t1
5215WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5216AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5217AND f_charbig = '####updated per insert trigger####';
5218CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5219BEGIN
5220SET new.f_int1 = @my_max1 + @counter,
5221new.f_int2 = @my_min2 - @counter,
5222new.f_charbig = '####updated per insert trigger####';
5223SET @counter = @counter + 1;
5224END|
5225SET @counter = 1;
5226SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5227INSERT INTO t1 (f_char1, f_char2, f_charbig)
5228SELECT CAST(f_int1 AS CHAR),
5229CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5230WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5231ORDER BY f_int1;
5232DROP TRIGGER trg_3;
5233
5234# check trigger-12 success: 	1
5235DELETE FROM t1
5236WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5237AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5238AND f_charbig = '####updated per insert trigger####';
5239ANALYZE  TABLE t1;
5240Table	Op	Msg_type	Msg_text
5241test.t1	analyze	status	OK
5242CHECK    TABLE t1 EXTENDED;
5243Table	Op	Msg_type	Msg_text
5244test.t1	check	status	OK
5245CHECKSUM TABLE t1 EXTENDED;
5246Table	Checksum
5247test.t1	<some_value>
5248OPTIMIZE TABLE t1;
5249Table	Op	Msg_type	Msg_text
5250test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5251test.t1	optimize	status	OK
5252# check layout success:    1
5253REPAIR   TABLE t1 EXTENDED;
5254Table	Op	Msg_type	Msg_text
5255test.t1	repair	status	OK
5256# check layout success:    1
5257TRUNCATE t1;
5258
5259# check TRUNCATE success: 	1
5260# check layout success:    1
5261# End usability test (inc/partition_check.inc)
5262DROP TABLE t1;
5263CREATE TABLE t1 (
5264f_int1 INTEGER,
5265f_int2 INTEGER,
5266f_char1 CHAR(20),
5267f_char2 CHAR(20),
5268f_charbig VARCHAR(1000)
5269
5270)
5271PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
5272(PARTITION parta VALUES LESS THAN (0),
5273PARTITION partb VALUES LESS THAN (5),
5274PARTITION partc VALUES LESS THAN (10),
5275PARTITION partd VALUES LESS THAN (10 + 5),
5276PARTITION parte VALUES LESS THAN (20),
5277PARTITION partf VALUES LESS THAN (2147483646));
5278INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5279SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
5280# Start usability test (inc/partition_check.inc)
5281create_command
5282SHOW CREATE TABLE t1;
5283Table	Create Table
5284t1	CREATE TABLE `t1` (
5285  `f_int1` int(11) DEFAULT NULL,
5286  `f_int2` int(11) DEFAULT NULL,
5287  `f_char1` char(20) DEFAULT NULL,
5288  `f_char2` char(20) DEFAULT NULL,
5289  `f_charbig` varchar(1000) DEFAULT NULL
5290) ENGINE=InnoDB DEFAULT CHARSET=latin1
5291/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
5292(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5293 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5294 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5295 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
5296 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
5297 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5298
5299unified filelist
5300t1#P#parta.ibd
5301t1#P#partb.ibd
5302t1#P#partc.ibd
5303t1#P#partd.ibd
5304t1#P#parte.ibd
5305t1#P#partf.ibd
5306t1.frm
5307
5308# check prerequisites-1 success:    1
5309# check COUNT(*) success:    1
5310# check MIN/MAX(f_int1) success:    1
5311# check MIN/MAX(f_int2) success:    1
5312INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5313SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5314CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5315WHERE f_int1 IN (2,3);
5316# check prerequisites-3 success:    1
5317DELETE FROM t1 WHERE f_charbig = 'delete me';
5318# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
5319# check read via f_int1 success: 1
5320# check read via f_int2 success: 1
5321
5322# check multiple-1 success: 	1
5323DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5324
5325# check multiple-2 success: 	1
5326INSERT INTO t1 SELECT * FROM t0_template
5327WHERE MOD(f_int1,3) = 0;
5328
5329# check multiple-3 success: 	1
5330UPDATE t1 SET f_int1 = f_int1 + @max_row
5331WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5332AND @max_row_div2 + @max_row_div4;
5333
5334# check multiple-4 success: 	1
5335DELETE FROM t1
5336WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5337AND @max_row_div2 + @max_row_div4 + @max_row;
5338
5339# check multiple-5 success: 	1
5340SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5341INSERT INTO t1
5342SET f_int1 = @cur_value , f_int2 = @cur_value,
5343f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5344f_charbig = '#SINGLE#';
5345
5346# check single-1 success: 	1
5347SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5348INSERT INTO t1
5349SET f_int1 = @cur_value , f_int2 = @cur_value,
5350f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5351f_charbig = '#SINGLE#';
5352
5353# check single-2 success: 	1
5354SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5355SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5356UPDATE t1 SET f_int1 = @cur_value2
5357WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5358
5359# check single-3 success: 	1
5360SET @cur_value1= -1;
5361SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5362UPDATE t1 SET f_int1 = @cur_value1
5363WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5364
5365# check single-4 success: 	1
5366SELECT MAX(f_int1) INTO @cur_value FROM t1;
5367DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5368
5369# check single-5 success: 	1
5370DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5371
5372# check single-6 success: 	1
5373INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5374ERROR HY000: Table has no partition for value 2147483647
5375DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5376INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5377f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5378f_charbig = '#NULL#';
5379INSERT INTO t1
5380SET f_int1 = NULL , f_int2 = -@max_row,
5381f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5382f_charbig = '#NULL#';
5383# check null success:    1
5384
5385# check null-1 success: 	1
5386UPDATE t1 SET f_int1 = -@max_row
5387WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5388AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5389
5390# check null-2 success: 	1
5391UPDATE t1 SET f_int1 = NULL
5392WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5393AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5394
5395# check null-3 success: 	1
5396DELETE FROM t1
5397WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5398AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5399
5400# check null-4 success: 	1
5401DELETE FROM t1
5402WHERE f_int1 = 0 AND f_int2 = 0
5403AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5404AND f_charbig = '#NULL#';
5405SET AUTOCOMMIT= 0;
5406INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5407SELECT f_int1, f_int1, '', '', 'was inserted'
5408FROM t0_template source_tab
5409WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5410
5411# check transactions-1 success: 	1
5412COMMIT WORK;
5413
5414# check transactions-2 success: 	1
5415ROLLBACK WORK;
5416
5417# check transactions-3 success: 	1
5418DELETE FROM t1 WHERE f_charbig = 'was inserted';
5419COMMIT WORK;
5420ROLLBACK WORK;
5421
5422# check transactions-4 success: 	1
5423INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5424SELECT f_int1, f_int1, '', '', 'was inserted'
5425FROM t0_template source_tab
5426WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5427
5428# check transactions-5 success: 	1
5429ROLLBACK WORK;
5430
5431# check transactions-6 success: 	1
5432# INFO: Storage engine used for t1 seems to be transactional.
5433COMMIT;
5434
5435# check transactions-7 success: 	1
5436DELETE FROM t1 WHERE f_charbig = 'was inserted';
5437COMMIT WORK;
5438SET @@session.sql_mode = 'traditional';
5439Warnings:
5440Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5441SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5442INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5443SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5444'', '', 'was inserted' FROM t0_template
5445WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5446ERROR 22012: Division by 0
5447COMMIT;
5448
5449# check transactions-8 success: 	1
5450# INFO: Storage engine used for t1 seems to be able to revert
5451#       changes made by the failing statement.
5452SET @@session.sql_mode = '';
5453Warnings:
5454Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5455SET AUTOCOMMIT= 1;
5456DELETE FROM t1 WHERE f_charbig = 'was inserted';
5457COMMIT WORK;
5458UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5459
5460# check special-1 success: 	1
5461UPDATE t1 SET f_charbig = '';
5462
5463# check special-2 success: 	1
5464UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5465INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5466SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5468INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5469SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5470'just inserted' FROM t0_template
5471WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5472CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5473BEGIN
5474UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5475f_charbig = 'updated by trigger'
5476      WHERE f_int1 = new.f_int1;
5477END|
5478INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5479SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5480WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5481
5482# check trigger-1 success: 	1
5483DROP TRIGGER trg_1;
5484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5485f_int2 = CAST(f_char1 AS SIGNED INT),
5486f_charbig = 'just inserted'
5487   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5488DELETE FROM t0_aux
5489WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5490INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5491SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5492'just inserted' FROM t0_template
5493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5494CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5495BEGIN
5496UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5497f_charbig = 'updated by trigger'
5498      WHERE f_int1 = new.f_int1;
5499END|
5500INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5501SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5502WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5503
5504# check trigger-2 success: 	1
5505DROP TRIGGER trg_1;
5506UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5507f_int2 = CAST(f_char1 AS SIGNED INT),
5508f_charbig = 'just inserted'
5509   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5510DELETE FROM t0_aux
5511WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5512INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5513SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5514'just inserted' FROM t0_template
5515WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5516CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5517BEGIN
5518UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5519f_charbig = 'updated by trigger'
5520      WHERE f_int1 = new.f_int1;
5521END|
5522UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5523WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5524
5525# check trigger-3 success: 	1
5526DROP TRIGGER trg_1;
5527UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5528f_int2 = CAST(f_char1 AS SIGNED INT),
5529f_charbig = 'just inserted'
5530   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5531DELETE FROM t0_aux
5532WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5533INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5534SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5535'just inserted' FROM t0_template
5536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5537CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5538BEGIN
5539UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5540f_charbig = 'updated by trigger'
5541      WHERE f_int1 = - old.f_int1;
5542END|
5543UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5544WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5545
5546# check trigger-4 success: 	1
5547DROP TRIGGER trg_1;
5548UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5549f_int2 = CAST(f_char1 AS SIGNED INT),
5550f_charbig = 'just inserted'
5551   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5552DELETE FROM t0_aux
5553WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5554INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5555SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5556'just inserted' FROM t0_template
5557WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5558CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5559BEGIN
5560UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5561f_charbig = 'updated by trigger'
5562      WHERE f_int1 = new.f_int1;
5563END|
5564UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5565WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5566
5567# check trigger-5 success: 	1
5568DROP TRIGGER trg_1;
5569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5570f_int2 = CAST(f_char1 AS SIGNED INT),
5571f_charbig = 'just inserted'
5572   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5573DELETE FROM t0_aux
5574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5577'just inserted' FROM t0_template
5578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5579CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5580BEGIN
5581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5582f_charbig = 'updated by trigger'
5583      WHERE f_int1 = - old.f_int1;
5584END|
5585UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5586WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5587
5588# check trigger-6 success: 	1
5589DROP TRIGGER trg_1;
5590UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5591f_int2 = CAST(f_char1 AS SIGNED INT),
5592f_charbig = 'just inserted'
5593   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5594DELETE FROM t0_aux
5595WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5597SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5598'just inserted' FROM t0_template
5599WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5600CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5601BEGIN
5602UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5603f_charbig = 'updated by trigger'
5604      WHERE f_int1 = - old.f_int1;
5605END|
5606DELETE FROM t0_aux
5607WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5608
5609# check trigger-7 success: 	1
5610DROP TRIGGER trg_1;
5611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5612f_int2 = CAST(f_char1 AS SIGNED INT),
5613f_charbig = 'just inserted'
5614   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5615DELETE FROM t0_aux
5616WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5619'just inserted' FROM t0_template
5620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5621CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5622BEGIN
5623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5624f_charbig = 'updated by trigger'
5625      WHERE f_int1 = - old.f_int1;
5626END|
5627DELETE FROM t0_aux
5628WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5629
5630# check trigger-8 success: 	1
5631DROP TRIGGER trg_1;
5632UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5633f_int2 = CAST(f_char1 AS SIGNED INT),
5634f_charbig = 'just inserted'
5635   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5636DELETE FROM t0_aux
5637WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5638DELETE FROM t1
5639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5640CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5641BEGIN
5642SET new.f_int1 = old.f_int1 + @max_row,
5643new.f_int2 = old.f_int2 - @max_row,
5644new.f_charbig = '####updated per update trigger####';
5645END|
5646UPDATE t1
5647SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5648f_charbig = '####updated per update statement itself####';
5649
5650# check trigger-9 success: 	1
5651DROP TRIGGER trg_2;
5652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5653f_int2 = CAST(f_char1 AS SIGNED INT),
5654f_charbig = CONCAT('===',f_char1,'===');
5655CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5656BEGIN
5657SET new.f_int1 = new.f_int1 + @max_row,
5658new.f_int2 = new.f_int2 - @max_row,
5659new.f_charbig = '####updated per update trigger####';
5660END|
5661UPDATE t1
5662SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5663f_charbig = '####updated per update statement itself####';
5664
5665# check trigger-10 success: 	1
5666DROP TRIGGER trg_2;
5667UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5668f_int2 = CAST(f_char1 AS SIGNED INT),
5669f_charbig = CONCAT('===',f_char1,'===');
5670CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5671BEGIN
5672SET new.f_int1 = @my_max1 + @counter,
5673new.f_int2 = @my_min2 - @counter,
5674new.f_charbig = '####updated per insert trigger####';
5675SET @counter = @counter + 1;
5676END|
5677SET @counter = 1;
5678SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5679INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5680SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5681CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5683ORDER BY f_int1;
5684DROP TRIGGER trg_3;
5685
5686# check trigger-11 success: 	1
5687DELETE FROM t1
5688WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5689AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5690AND f_charbig = '####updated per insert trigger####';
5691CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5692BEGIN
5693SET new.f_int1 = @my_max1 + @counter,
5694new.f_int2 = @my_min2 - @counter,
5695new.f_charbig = '####updated per insert trigger####';
5696SET @counter = @counter + 1;
5697END|
5698SET @counter = 1;
5699SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5700INSERT INTO t1 (f_char1, f_char2, f_charbig)
5701SELECT CAST(f_int1 AS CHAR),
5702CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5704ORDER BY f_int1;
5705DROP TRIGGER trg_3;
5706
5707# check trigger-12 success: 	1
5708DELETE FROM t1
5709WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5710AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5711AND f_charbig = '####updated per insert trigger####';
5712ANALYZE  TABLE t1;
5713Table	Op	Msg_type	Msg_text
5714test.t1	analyze	status	OK
5715CHECK    TABLE t1 EXTENDED;
5716Table	Op	Msg_type	Msg_text
5717test.t1	check	status	OK
5718CHECKSUM TABLE t1 EXTENDED;
5719Table	Checksum
5720test.t1	<some_value>
5721OPTIMIZE TABLE t1;
5722Table	Op	Msg_type	Msg_text
5723test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5724test.t1	optimize	status	OK
5725# check layout success:    1
5726REPAIR   TABLE t1 EXTENDED;
5727Table	Op	Msg_type	Msg_text
5728test.t1	repair	status	OK
5729# check layout success:    1
5730TRUNCATE t1;
5731
5732# check TRUNCATE success: 	1
5733# check layout success:    1
5734# End usability test (inc/partition_check.inc)
5735DROP TABLE t1;
5736CREATE TABLE t1 (
5737f_int1 INTEGER,
5738f_int2 INTEGER,
5739f_char1 CHAR(20),
5740f_char2 CHAR(20),
5741f_charbig VARCHAR(1000)
5742
5743)
5744PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
5745(PARTITION parta VALUES LESS THAN (0),
5746PARTITION partb VALUES LESS THAN (5),
5747PARTITION partc VALUES LESS THAN (10),
5748PARTITION partd VALUES LESS THAN (2147483646));
5749INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5750SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
5751# Start usability test (inc/partition_check.inc)
5752create_command
5753SHOW CREATE TABLE t1;
5754Table	Create Table
5755t1	CREATE TABLE `t1` (
5756  `f_int1` int(11) DEFAULT NULL,
5757  `f_int2` int(11) DEFAULT NULL,
5758  `f_char1` char(20) DEFAULT NULL,
5759  `f_char2` char(20) DEFAULT NULL,
5760  `f_charbig` varchar(1000) DEFAULT NULL
5761) ENGINE=InnoDB DEFAULT CHARSET=latin1
5762/*!50100 PARTITION BY RANGE (f_int1)
5763SUBPARTITION BY HASH (f_int2)
5764SUBPARTITIONS 2
5765(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5766 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5767 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5768 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5769
5770unified filelist
5771t1#P#parta#SP#partasp0.ibd
5772t1#P#parta#SP#partasp1.ibd
5773t1#P#partb#SP#partbsp0.ibd
5774t1#P#partb#SP#partbsp1.ibd
5775t1#P#partc#SP#partcsp0.ibd
5776t1#P#partc#SP#partcsp1.ibd
5777t1#P#partd#SP#partdsp0.ibd
5778t1#P#partd#SP#partdsp1.ibd
5779t1.frm
5780
5781# check prerequisites-1 success:    1
5782# check COUNT(*) success:    1
5783# check MIN/MAX(f_int1) success:    1
5784# check MIN/MAX(f_int2) success:    1
5785INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5786SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5787CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5788WHERE f_int1 IN (2,3);
5789# check prerequisites-3 success:    1
5790DELETE FROM t1 WHERE f_charbig = 'delete me';
5791# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
5792# check read via f_int1 success: 1
5793# check read via f_int2 success: 1
5794
5795# check multiple-1 success: 	1
5796DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5797
5798# check multiple-2 success: 	1
5799INSERT INTO t1 SELECT * FROM t0_template
5800WHERE MOD(f_int1,3) = 0;
5801
5802# check multiple-3 success: 	1
5803UPDATE t1 SET f_int1 = f_int1 + @max_row
5804WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5805AND @max_row_div2 + @max_row_div4;
5806
5807# check multiple-4 success: 	1
5808DELETE FROM t1
5809WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5810AND @max_row_div2 + @max_row_div4 + @max_row;
5811
5812# check multiple-5 success: 	1
5813SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5814INSERT INTO t1
5815SET f_int1 = @cur_value , f_int2 = @cur_value,
5816f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5817f_charbig = '#SINGLE#';
5818
5819# check single-1 success: 	1
5820SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5821INSERT INTO t1
5822SET f_int1 = @cur_value , f_int2 = @cur_value,
5823f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5824f_charbig = '#SINGLE#';
5825
5826# check single-2 success: 	1
5827SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5828SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5829UPDATE t1 SET f_int1 = @cur_value2
5830WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5831
5832# check single-3 success: 	1
5833SET @cur_value1= -1;
5834SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5835UPDATE t1 SET f_int1 = @cur_value1
5836WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5837
5838# check single-4 success: 	1
5839SELECT MAX(f_int1) INTO @cur_value FROM t1;
5840DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5841
5842# check single-5 success: 	1
5843DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5844
5845# check single-6 success: 	1
5846INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5847ERROR HY000: Table has no partition for value 2147483647
5848DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5849INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5850f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5851f_charbig = '#NULL#';
5852INSERT INTO t1
5853SET f_int1 = NULL , f_int2 = -@max_row,
5854f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5855f_charbig = '#NULL#';
5856# check null success:    1
5857
5858# check null-1 success: 	1
5859UPDATE t1 SET f_int1 = -@max_row
5860WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5861AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5862
5863# check null-2 success: 	1
5864UPDATE t1 SET f_int1 = NULL
5865WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5866AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5867
5868# check null-3 success: 	1
5869DELETE FROM t1
5870WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
5871AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
5872
5873# check null-4 success: 	1
5874DELETE FROM t1
5875WHERE f_int1 = 0 AND f_int2 = 0
5876AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5877AND f_charbig = '#NULL#';
5878SET AUTOCOMMIT= 0;
5879INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5880SELECT f_int1, f_int1, '', '', 'was inserted'
5881FROM t0_template source_tab
5882WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5883
5884# check transactions-1 success: 	1
5885COMMIT WORK;
5886
5887# check transactions-2 success: 	1
5888ROLLBACK WORK;
5889
5890# check transactions-3 success: 	1
5891DELETE FROM t1 WHERE f_charbig = 'was inserted';
5892COMMIT WORK;
5893ROLLBACK WORK;
5894
5895# check transactions-4 success: 	1
5896INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5897SELECT f_int1, f_int1, '', '', 'was inserted'
5898FROM t0_template source_tab
5899WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5900
5901# check transactions-5 success: 	1
5902ROLLBACK WORK;
5903
5904# check transactions-6 success: 	1
5905# INFO: Storage engine used for t1 seems to be transactional.
5906COMMIT;
5907
5908# check transactions-7 success: 	1
5909DELETE FROM t1 WHERE f_charbig = 'was inserted';
5910COMMIT WORK;
5911SET @@session.sql_mode = 'traditional';
5912Warnings:
5913Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5914SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5916SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5917'', '', 'was inserted' FROM t0_template
5918WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5919ERROR 22012: Division by 0
5920COMMIT;
5921
5922# check transactions-8 success: 	1
5923# INFO: Storage engine used for t1 seems to be able to revert
5924#       changes made by the failing statement.
5925SET @@session.sql_mode = '';
5926Warnings:
5927Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5928SET AUTOCOMMIT= 1;
5929DELETE FROM t1 WHERE f_charbig = 'was inserted';
5930COMMIT WORK;
5931UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5932
5933# check special-1 success: 	1
5934UPDATE t1 SET f_charbig = '';
5935
5936# check special-2 success: 	1
5937UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5938INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5939SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5940WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5941INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5942SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5943'just inserted' FROM t0_template
5944WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5945CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5946BEGIN
5947UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5948f_charbig = 'updated by trigger'
5949      WHERE f_int1 = new.f_int1;
5950END|
5951INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5952SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5953WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5954
5955# check trigger-1 success: 	1
5956DROP TRIGGER trg_1;
5957UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5958f_int2 = CAST(f_char1 AS SIGNED INT),
5959f_charbig = 'just inserted'
5960   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5961DELETE FROM t0_aux
5962WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5963INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5964SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5965'just inserted' FROM t0_template
5966WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5967CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5968BEGIN
5969UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5970f_charbig = 'updated by trigger'
5971      WHERE f_int1 = new.f_int1;
5972END|
5973INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5974SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5975WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5976
5977# check trigger-2 success: 	1
5978DROP TRIGGER trg_1;
5979UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5980f_int2 = CAST(f_char1 AS SIGNED INT),
5981f_charbig = 'just inserted'
5982   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5983DELETE FROM t0_aux
5984WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5985INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5986SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5987'just inserted' FROM t0_template
5988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5989CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5990BEGIN
5991UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5992f_charbig = 'updated by trigger'
5993      WHERE f_int1 = new.f_int1;
5994END|
5995UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5996WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5997
5998# check trigger-3 success: 	1
5999DROP TRIGGER trg_1;
6000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6001f_int2 = CAST(f_char1 AS SIGNED INT),
6002f_charbig = 'just inserted'
6003   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6004DELETE FROM t0_aux
6005WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6006INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6007SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6008'just inserted' FROM t0_template
6009WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6010CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6011BEGIN
6012UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6013f_charbig = 'updated by trigger'
6014      WHERE f_int1 = - old.f_int1;
6015END|
6016UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6017WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6018
6019# check trigger-4 success: 	1
6020DROP TRIGGER trg_1;
6021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6022f_int2 = CAST(f_char1 AS SIGNED INT),
6023f_charbig = 'just inserted'
6024   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6025DELETE FROM t0_aux
6026WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6029'just inserted' FROM t0_template
6030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6031CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6032BEGIN
6033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6034f_charbig = 'updated by trigger'
6035      WHERE f_int1 = new.f_int1;
6036END|
6037UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6038WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6039
6040# check trigger-5 success: 	1
6041DROP TRIGGER trg_1;
6042UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6043f_int2 = CAST(f_char1 AS SIGNED INT),
6044f_charbig = 'just inserted'
6045   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6046DELETE FROM t0_aux
6047WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6048INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6049SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6050'just inserted' FROM t0_template
6051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6052CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6053BEGIN
6054UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6055f_charbig = 'updated by trigger'
6056      WHERE f_int1 = - old.f_int1;
6057END|
6058UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6059WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6060
6061# check trigger-6 success: 	1
6062DROP TRIGGER trg_1;
6063UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6064f_int2 = CAST(f_char1 AS SIGNED INT),
6065f_charbig = 'just inserted'
6066   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6067DELETE FROM t0_aux
6068WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6069INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6070SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6071'just inserted' FROM t0_template
6072WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6073CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6074BEGIN
6075UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6076f_charbig = 'updated by trigger'
6077      WHERE f_int1 = - old.f_int1;
6078END|
6079DELETE FROM t0_aux
6080WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6081
6082# check trigger-7 success: 	1
6083DROP TRIGGER trg_1;
6084UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6085f_int2 = CAST(f_char1 AS SIGNED INT),
6086f_charbig = 'just inserted'
6087   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6088DELETE FROM t0_aux
6089WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6090INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6091SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6092'just inserted' FROM t0_template
6093WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6094CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6095BEGIN
6096UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6097f_charbig = 'updated by trigger'
6098      WHERE f_int1 = - old.f_int1;
6099END|
6100DELETE FROM t0_aux
6101WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6102
6103# check trigger-8 success: 	1
6104DROP TRIGGER trg_1;
6105UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6106f_int2 = CAST(f_char1 AS SIGNED INT),
6107f_charbig = 'just inserted'
6108   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6109DELETE FROM t0_aux
6110WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6111DELETE FROM t1
6112WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6113CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6114BEGIN
6115SET new.f_int1 = old.f_int1 + @max_row,
6116new.f_int2 = old.f_int2 - @max_row,
6117new.f_charbig = '####updated per update trigger####';
6118END|
6119UPDATE t1
6120SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6121f_charbig = '####updated per update statement itself####';
6122
6123# check trigger-9 success: 	1
6124DROP TRIGGER trg_2;
6125UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6126f_int2 = CAST(f_char1 AS SIGNED INT),
6127f_charbig = CONCAT('===',f_char1,'===');
6128CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6129BEGIN
6130SET new.f_int1 = new.f_int1 + @max_row,
6131new.f_int2 = new.f_int2 - @max_row,
6132new.f_charbig = '####updated per update trigger####';
6133END|
6134UPDATE t1
6135SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6136f_charbig = '####updated per update statement itself####';
6137
6138# check trigger-10 success: 	1
6139DROP TRIGGER trg_2;
6140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6141f_int2 = CAST(f_char1 AS SIGNED INT),
6142f_charbig = CONCAT('===',f_char1,'===');
6143CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6144BEGIN
6145SET new.f_int1 = @my_max1 + @counter,
6146new.f_int2 = @my_min2 - @counter,
6147new.f_charbig = '####updated per insert trigger####';
6148SET @counter = @counter + 1;
6149END|
6150SET @counter = 1;
6151SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6152INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6153SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6154CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6155WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6156ORDER BY f_int1;
6157DROP TRIGGER trg_3;
6158
6159# check trigger-11 success: 	1
6160DELETE FROM t1
6161WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6162AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6163AND f_charbig = '####updated per insert trigger####';
6164CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6165BEGIN
6166SET new.f_int1 = @my_max1 + @counter,
6167new.f_int2 = @my_min2 - @counter,
6168new.f_charbig = '####updated per insert trigger####';
6169SET @counter = @counter + 1;
6170END|
6171SET @counter = 1;
6172SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6173INSERT INTO t1 (f_char1, f_char2, f_charbig)
6174SELECT CAST(f_int1 AS CHAR),
6175CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6177ORDER BY f_int1;
6178DROP TRIGGER trg_3;
6179
6180# check trigger-12 success: 	1
6181DELETE FROM t1
6182WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6183AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6184AND f_charbig = '####updated per insert trigger####';
6185ANALYZE  TABLE t1;
6186Table	Op	Msg_type	Msg_text
6187test.t1	analyze	status	OK
6188CHECK    TABLE t1 EXTENDED;
6189Table	Op	Msg_type	Msg_text
6190test.t1	check	status	OK
6191CHECKSUM TABLE t1 EXTENDED;
6192Table	Checksum
6193test.t1	<some_value>
6194OPTIMIZE TABLE t1;
6195Table	Op	Msg_type	Msg_text
6196test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6197test.t1	optimize	status	OK
6198# check layout success:    1
6199REPAIR   TABLE t1 EXTENDED;
6200Table	Op	Msg_type	Msg_text
6201test.t1	repair	status	OK
6202# check layout success:    1
6203TRUNCATE t1;
6204
6205# check TRUNCATE success: 	1
6206# check layout success:    1
6207# End usability test (inc/partition_check.inc)
6208DROP TABLE t1;
6209CREATE TABLE t1 (
6210f_int1 INTEGER,
6211f_int2 INTEGER,
6212f_char1 CHAR(20),
6213f_char2 CHAR(20),
6214f_charbig VARCHAR(1000)
6215
6216)
6217PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
6218(PARTITION part1 VALUES LESS THAN (0)
6219(SUBPARTITION subpart11, SUBPARTITION subpart12),
6220PARTITION part2 VALUES LESS THAN (5)
6221(SUBPARTITION subpart21, SUBPARTITION subpart22),
6222PARTITION part3 VALUES LESS THAN (10)
6223(SUBPARTITION subpart31, SUBPARTITION subpart32),
6224PARTITION part4 VALUES LESS THAN (2147483646)
6225(SUBPARTITION subpart41, SUBPARTITION subpart42));
6226INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6227SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
6228# Start usability test (inc/partition_check.inc)
6229create_command
6230SHOW CREATE TABLE t1;
6231Table	Create Table
6232t1	CREATE TABLE `t1` (
6233  `f_int1` int(11) DEFAULT NULL,
6234  `f_int2` int(11) DEFAULT NULL,
6235  `f_char1` char(20) DEFAULT NULL,
6236  `f_char2` char(20) DEFAULT NULL,
6237  `f_charbig` varchar(1000) DEFAULT NULL
6238) ENGINE=InnoDB DEFAULT CHARSET=latin1
6239/*!50100 PARTITION BY RANGE (f_int1)
6240SUBPARTITION BY KEY (f_int2)
6241(PARTITION part1 VALUES LESS THAN (0)
6242 (SUBPARTITION subpart11 ENGINE = InnoDB,
6243  SUBPARTITION subpart12 ENGINE = InnoDB),
6244 PARTITION part2 VALUES LESS THAN (5)
6245 (SUBPARTITION subpart21 ENGINE = InnoDB,
6246  SUBPARTITION subpart22 ENGINE = InnoDB),
6247 PARTITION part3 VALUES LESS THAN (10)
6248 (SUBPARTITION subpart31 ENGINE = InnoDB,
6249  SUBPARTITION subpart32 ENGINE = InnoDB),
6250 PARTITION part4 VALUES LESS THAN (2147483646)
6251 (SUBPARTITION subpart41 ENGINE = InnoDB,
6252  SUBPARTITION subpart42 ENGINE = InnoDB)) */
6253
6254unified filelist
6255t1#P#part1#SP#subpart11.ibd
6256t1#P#part1#SP#subpart12.ibd
6257t1#P#part2#SP#subpart21.ibd
6258t1#P#part2#SP#subpart22.ibd
6259t1#P#part3#SP#subpart31.ibd
6260t1#P#part3#SP#subpart32.ibd
6261t1#P#part4#SP#subpart41.ibd
6262t1#P#part4#SP#subpart42.ibd
6263t1.frm
6264
6265# check prerequisites-1 success:    1
6266# check COUNT(*) success:    1
6267# check MIN/MAX(f_int1) success:    1
6268# check MIN/MAX(f_int2) success:    1
6269INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6270SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6271CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6272WHERE f_int1 IN (2,3);
6273# check prerequisites-3 success:    1
6274DELETE FROM t1 WHERE f_charbig = 'delete me';
6275# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
6276# check read via f_int1 success: 1
6277# check read via f_int2 success: 1
6278
6279# check multiple-1 success: 	1
6280DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6281
6282# check multiple-2 success: 	1
6283INSERT INTO t1 SELECT * FROM t0_template
6284WHERE MOD(f_int1,3) = 0;
6285
6286# check multiple-3 success: 	1
6287UPDATE t1 SET f_int1 = f_int1 + @max_row
6288WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6289AND @max_row_div2 + @max_row_div4;
6290
6291# check multiple-4 success: 	1
6292DELETE FROM t1
6293WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6294AND @max_row_div2 + @max_row_div4 + @max_row;
6295
6296# check multiple-5 success: 	1
6297SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6298INSERT INTO t1
6299SET f_int1 = @cur_value , f_int2 = @cur_value,
6300f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6301f_charbig = '#SINGLE#';
6302
6303# check single-1 success: 	1
6304SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6305INSERT INTO t1
6306SET f_int1 = @cur_value , f_int2 = @cur_value,
6307f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6308f_charbig = '#SINGLE#';
6309
6310# check single-2 success: 	1
6311SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6312SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6313UPDATE t1 SET f_int1 = @cur_value2
6314WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6315
6316# check single-3 success: 	1
6317SET @cur_value1= -1;
6318SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6319UPDATE t1 SET f_int1 = @cur_value1
6320WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6321
6322# check single-4 success: 	1
6323SELECT MAX(f_int1) INTO @cur_value FROM t1;
6324DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6325
6326# check single-5 success: 	1
6327DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6328
6329# check single-6 success: 	1
6330INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6331ERROR HY000: Table has no partition for value 2147483647
6332DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6333INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6334f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6335f_charbig = '#NULL#';
6336INSERT INTO t1
6337SET f_int1 = NULL , f_int2 = -@max_row,
6338f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6339f_charbig = '#NULL#';
6340# check null success:    1
6341
6342# check null-1 success: 	1
6343UPDATE t1 SET f_int1 = -@max_row
6344WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6345AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6346
6347# check null-2 success: 	1
6348UPDATE t1 SET f_int1 = NULL
6349WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6350AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6351
6352# check null-3 success: 	1
6353DELETE FROM t1
6354WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6355AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6356
6357# check null-4 success: 	1
6358DELETE FROM t1
6359WHERE f_int1 = 0 AND f_int2 = 0
6360AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6361AND f_charbig = '#NULL#';
6362SET AUTOCOMMIT= 0;
6363INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6364SELECT f_int1, f_int1, '', '', 'was inserted'
6365FROM t0_template source_tab
6366WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6367
6368# check transactions-1 success: 	1
6369COMMIT WORK;
6370
6371# check transactions-2 success: 	1
6372ROLLBACK WORK;
6373
6374# check transactions-3 success: 	1
6375DELETE FROM t1 WHERE f_charbig = 'was inserted';
6376COMMIT WORK;
6377ROLLBACK WORK;
6378
6379# check transactions-4 success: 	1
6380INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6381SELECT f_int1, f_int1, '', '', 'was inserted'
6382FROM t0_template source_tab
6383WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6384
6385# check transactions-5 success: 	1
6386ROLLBACK WORK;
6387
6388# check transactions-6 success: 	1
6389# INFO: Storage engine used for t1 seems to be transactional.
6390COMMIT;
6391
6392# check transactions-7 success: 	1
6393DELETE FROM t1 WHERE f_charbig = 'was inserted';
6394COMMIT WORK;
6395SET @@session.sql_mode = 'traditional';
6396Warnings:
6397Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6398SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6399INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6400SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6401'', '', 'was inserted' FROM t0_template
6402WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6403ERROR 22012: Division by 0
6404COMMIT;
6405
6406# check transactions-8 success: 	1
6407# INFO: Storage engine used for t1 seems to be able to revert
6408#       changes made by the failing statement.
6409SET @@session.sql_mode = '';
6410Warnings:
6411Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6412SET AUTOCOMMIT= 1;
6413DELETE FROM t1 WHERE f_charbig = 'was inserted';
6414COMMIT WORK;
6415UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6416
6417# check special-1 success: 	1
6418UPDATE t1 SET f_charbig = '';
6419
6420# check special-2 success: 	1
6421UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6422INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6423SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6424WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6427'just inserted' FROM t0_template
6428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6429CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6430BEGIN
6431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6432f_charbig = 'updated by trigger'
6433      WHERE f_int1 = new.f_int1;
6434END|
6435INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6436SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6438
6439# check trigger-1 success: 	1
6440DROP TRIGGER trg_1;
6441UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6442f_int2 = CAST(f_char1 AS SIGNED INT),
6443f_charbig = 'just inserted'
6444   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6445DELETE FROM t0_aux
6446WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6447INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6448SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6449'just inserted' FROM t0_template
6450WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6451CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6452BEGIN
6453UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6454f_charbig = 'updated by trigger'
6455      WHERE f_int1 = new.f_int1;
6456END|
6457INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6458SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6459WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6460
6461# check trigger-2 success: 	1
6462DROP TRIGGER trg_1;
6463UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6464f_int2 = CAST(f_char1 AS SIGNED INT),
6465f_charbig = 'just inserted'
6466   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6467DELETE FROM t0_aux
6468WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6469INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6470SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6471'just inserted' FROM t0_template
6472WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6473CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6474BEGIN
6475UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6476f_charbig = 'updated by trigger'
6477      WHERE f_int1 = new.f_int1;
6478END|
6479UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6480WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6481
6482# check trigger-3 success: 	1
6483DROP TRIGGER trg_1;
6484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6485f_int2 = CAST(f_char1 AS SIGNED INT),
6486f_charbig = 'just inserted'
6487   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6488DELETE FROM t0_aux
6489WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6490INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6491SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6492'just inserted' FROM t0_template
6493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6494CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6495BEGIN
6496UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6497f_charbig = 'updated by trigger'
6498      WHERE f_int1 = - old.f_int1;
6499END|
6500UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6501WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6502
6503# check trigger-4 success: 	1
6504DROP TRIGGER trg_1;
6505UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6506f_int2 = CAST(f_char1 AS SIGNED INT),
6507f_charbig = 'just inserted'
6508   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6509DELETE FROM t0_aux
6510WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6511INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6512SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6513'just inserted' FROM t0_template
6514WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6515CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6516BEGIN
6517UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6518f_charbig = 'updated by trigger'
6519      WHERE f_int1 = new.f_int1;
6520END|
6521UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6522WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6523
6524# check trigger-5 success: 	1
6525DROP TRIGGER trg_1;
6526UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6527f_int2 = CAST(f_char1 AS SIGNED INT),
6528f_charbig = 'just inserted'
6529   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6530DELETE FROM t0_aux
6531WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6532INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6533SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6534'just inserted' FROM t0_template
6535WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6536CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6537BEGIN
6538UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6539f_charbig = 'updated by trigger'
6540      WHERE f_int1 = - old.f_int1;
6541END|
6542UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6543WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6544
6545# check trigger-6 success: 	1
6546DROP TRIGGER trg_1;
6547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6548f_int2 = CAST(f_char1 AS SIGNED INT),
6549f_charbig = 'just inserted'
6550   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6551DELETE FROM t0_aux
6552WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6554SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6555'just inserted' FROM t0_template
6556WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6557CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6558BEGIN
6559UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6560f_charbig = 'updated by trigger'
6561      WHERE f_int1 = - old.f_int1;
6562END|
6563DELETE FROM t0_aux
6564WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6565
6566# check trigger-7 success: 	1
6567DROP TRIGGER trg_1;
6568UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6569f_int2 = CAST(f_char1 AS SIGNED INT),
6570f_charbig = 'just inserted'
6571   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6572DELETE FROM t0_aux
6573WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6574INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6575SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6576'just inserted' FROM t0_template
6577WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6578CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6579BEGIN
6580UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6581f_charbig = 'updated by trigger'
6582      WHERE f_int1 = - old.f_int1;
6583END|
6584DELETE FROM t0_aux
6585WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6586
6587# check trigger-8 success: 	1
6588DROP TRIGGER trg_1;
6589UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6590f_int2 = CAST(f_char1 AS SIGNED INT),
6591f_charbig = 'just inserted'
6592   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6593DELETE FROM t0_aux
6594WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6595DELETE FROM t1
6596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6597CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6598BEGIN
6599SET new.f_int1 = old.f_int1 + @max_row,
6600new.f_int2 = old.f_int2 - @max_row,
6601new.f_charbig = '####updated per update trigger####';
6602END|
6603UPDATE t1
6604SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6605f_charbig = '####updated per update statement itself####';
6606
6607# check trigger-9 success: 	1
6608DROP TRIGGER trg_2;
6609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6610f_int2 = CAST(f_char1 AS SIGNED INT),
6611f_charbig = CONCAT('===',f_char1,'===');
6612CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6613BEGIN
6614SET new.f_int1 = new.f_int1 + @max_row,
6615new.f_int2 = new.f_int2 - @max_row,
6616new.f_charbig = '####updated per update trigger####';
6617END|
6618UPDATE t1
6619SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6620f_charbig = '####updated per update statement itself####';
6621
6622# check trigger-10 success: 	1
6623DROP TRIGGER trg_2;
6624UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6625f_int2 = CAST(f_char1 AS SIGNED INT),
6626f_charbig = CONCAT('===',f_char1,'===');
6627CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6628BEGIN
6629SET new.f_int1 = @my_max1 + @counter,
6630new.f_int2 = @my_min2 - @counter,
6631new.f_charbig = '####updated per insert trigger####';
6632SET @counter = @counter + 1;
6633END|
6634SET @counter = 1;
6635SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6636INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6637SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6638CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6640ORDER BY f_int1;
6641DROP TRIGGER trg_3;
6642
6643# check trigger-11 success: 	1
6644DELETE FROM t1
6645WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6646AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6647AND f_charbig = '####updated per insert trigger####';
6648CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6649BEGIN
6650SET new.f_int1 = @my_max1 + @counter,
6651new.f_int2 = @my_min2 - @counter,
6652new.f_charbig = '####updated per insert trigger####';
6653SET @counter = @counter + 1;
6654END|
6655SET @counter = 1;
6656SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6657INSERT INTO t1 (f_char1, f_char2, f_charbig)
6658SELECT CAST(f_int1 AS CHAR),
6659CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6661ORDER BY f_int1;
6662DROP TRIGGER trg_3;
6663
6664# check trigger-12 success: 	1
6665DELETE FROM t1
6666WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6667AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6668AND f_charbig = '####updated per insert trigger####';
6669ANALYZE  TABLE t1;
6670Table	Op	Msg_type	Msg_text
6671test.t1	analyze	status	OK
6672CHECK    TABLE t1 EXTENDED;
6673Table	Op	Msg_type	Msg_text
6674test.t1	check	status	OK
6675CHECKSUM TABLE t1 EXTENDED;
6676Table	Checksum
6677test.t1	<some_value>
6678OPTIMIZE TABLE t1;
6679Table	Op	Msg_type	Msg_text
6680test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6681test.t1	optimize	status	OK
6682# check layout success:    1
6683REPAIR   TABLE t1 EXTENDED;
6684Table	Op	Msg_type	Msg_text
6685test.t1	repair	status	OK
6686# check layout success:    1
6687TRUNCATE t1;
6688
6689# check TRUNCATE success: 	1
6690# check layout success:    1
6691# End usability test (inc/partition_check.inc)
6692DROP TABLE t1;
6693CREATE TABLE t1 (
6694f_int1 INTEGER,
6695f_int2 INTEGER,
6696f_char1 CHAR(20),
6697f_char2 CHAR(20),
6698f_charbig VARCHAR(1000)
6699
6700)
6701PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
6702(PARTITION part1 VALUES IN (0)
6703(SUBPARTITION sp11, SUBPARTITION sp12),
6704PARTITION part2 VALUES IN (1)
6705(SUBPARTITION sp21, SUBPARTITION sp22),
6706PARTITION part3 VALUES IN (2)
6707(SUBPARTITION sp31, SUBPARTITION sp32),
6708PARTITION part4 VALUES IN (NULL)
6709(SUBPARTITION sp41, SUBPARTITION sp42));
6710INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6711SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
6712# Start usability test (inc/partition_check.inc)
6713create_command
6714SHOW CREATE TABLE t1;
6715Table	Create Table
6716t1	CREATE TABLE `t1` (
6717  `f_int1` int(11) DEFAULT NULL,
6718  `f_int2` int(11) DEFAULT NULL,
6719  `f_char1` char(20) DEFAULT NULL,
6720  `f_char2` char(20) DEFAULT NULL,
6721  `f_charbig` varchar(1000) DEFAULT NULL
6722) ENGINE=InnoDB DEFAULT CHARSET=latin1
6723/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
6724SUBPARTITION BY HASH (f_int2 + 1)
6725(PARTITION part1 VALUES IN (0)
6726 (SUBPARTITION sp11 ENGINE = InnoDB,
6727  SUBPARTITION sp12 ENGINE = InnoDB),
6728 PARTITION part2 VALUES IN (1)
6729 (SUBPARTITION sp21 ENGINE = InnoDB,
6730  SUBPARTITION sp22 ENGINE = InnoDB),
6731 PARTITION part3 VALUES IN (2)
6732 (SUBPARTITION sp31 ENGINE = InnoDB,
6733  SUBPARTITION sp32 ENGINE = InnoDB),
6734 PARTITION part4 VALUES IN (NULL)
6735 (SUBPARTITION sp41 ENGINE = InnoDB,
6736  SUBPARTITION sp42 ENGINE = InnoDB)) */
6737
6738unified filelist
6739t1#P#part1#SP#sp11.ibd
6740t1#P#part1#SP#sp12.ibd
6741t1#P#part2#SP#sp21.ibd
6742t1#P#part2#SP#sp22.ibd
6743t1#P#part3#SP#sp31.ibd
6744t1#P#part3#SP#sp32.ibd
6745t1#P#part4#SP#sp41.ibd
6746t1#P#part4#SP#sp42.ibd
6747t1.frm
6748
6749# check prerequisites-1 success:    1
6750# check COUNT(*) success:    1
6751# check MIN/MAX(f_int1) success:    1
6752# check MIN/MAX(f_int2) success:    1
6753INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6754SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6755CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6756WHERE f_int1 IN (2,3);
6757# check prerequisites-3 success:    1
6758DELETE FROM t1 WHERE f_charbig = 'delete me';
6759# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
6760# check read via f_int1 success: 1
6761# check read via f_int2 success: 1
6762
6763# check multiple-1 success: 	1
6764DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6765
6766# check multiple-2 success: 	1
6767INSERT INTO t1 SELECT * FROM t0_template
6768WHERE MOD(f_int1,3) = 0;
6769
6770# check multiple-3 success: 	1
6771UPDATE t1 SET f_int1 = f_int1 + @max_row
6772WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6773AND @max_row_div2 + @max_row_div4;
6774
6775# check multiple-4 success: 	1
6776DELETE FROM t1
6777WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6778AND @max_row_div2 + @max_row_div4 + @max_row;
6779
6780# check multiple-5 success: 	1
6781SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6782INSERT INTO t1
6783SET f_int1 = @cur_value , f_int2 = @cur_value,
6784f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6785f_charbig = '#SINGLE#';
6786
6787# check single-1 success: 	1
6788SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6789INSERT INTO t1
6790SET f_int1 = @cur_value , f_int2 = @cur_value,
6791f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6792f_charbig = '#SINGLE#';
6793
6794# check single-2 success: 	1
6795SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6796SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6797UPDATE t1 SET f_int1 = @cur_value2
6798WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6799
6800# check single-3 success: 	1
6801SET @cur_value1= -1;
6802SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6803UPDATE t1 SET f_int1 = @cur_value1
6804WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6805
6806# check single-4 success: 	1
6807SELECT MAX(f_int1) INTO @cur_value FROM t1;
6808DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6809
6810# check single-5 success: 	1
6811DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6812
6813# check single-6 success: 	1
6814INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6815
6816# check single-7 success: 	1
6817DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6818DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6819INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6820f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6821f_charbig = '#NULL#';
6822INSERT INTO t1
6823SET f_int1 = NULL , f_int2 = -@max_row,
6824f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6825f_charbig = '#NULL#';
6826# check null success:    1
6827
6828# check null-1 success: 	1
6829UPDATE t1 SET f_int1 = -@max_row
6830WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6831AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6832
6833# check null-2 success: 	1
6834UPDATE t1 SET f_int1 = NULL
6835WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6836AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6837
6838# check null-3 success: 	1
6839DELETE FROM t1
6840WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
6841AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
6842
6843# check null-4 success: 	1
6844DELETE FROM t1
6845WHERE f_int1 = 0 AND f_int2 = 0
6846AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6847AND f_charbig = '#NULL#';
6848SET AUTOCOMMIT= 0;
6849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6850SELECT f_int1, f_int1, '', '', 'was inserted'
6851FROM t0_template source_tab
6852WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6853
6854# check transactions-1 success: 	1
6855COMMIT WORK;
6856
6857# check transactions-2 success: 	1
6858ROLLBACK WORK;
6859
6860# check transactions-3 success: 	1
6861DELETE FROM t1 WHERE f_charbig = 'was inserted';
6862COMMIT WORK;
6863ROLLBACK WORK;
6864
6865# check transactions-4 success: 	1
6866INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6867SELECT f_int1, f_int1, '', '', 'was inserted'
6868FROM t0_template source_tab
6869WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6870
6871# check transactions-5 success: 	1
6872ROLLBACK WORK;
6873
6874# check transactions-6 success: 	1
6875# INFO: Storage engine used for t1 seems to be transactional.
6876COMMIT;
6877
6878# check transactions-7 success: 	1
6879DELETE FROM t1 WHERE f_charbig = 'was inserted';
6880COMMIT WORK;
6881SET @@session.sql_mode = 'traditional';
6882Warnings:
6883Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6884SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6885INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6886SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6887'', '', 'was inserted' FROM t0_template
6888WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6889ERROR 22012: Division by 0
6890COMMIT;
6891
6892# check transactions-8 success: 	1
6893# INFO: Storage engine used for t1 seems to be able to revert
6894#       changes made by the failing statement.
6895SET @@session.sql_mode = '';
6896Warnings:
6897Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6898SET AUTOCOMMIT= 1;
6899DELETE FROM t1 WHERE f_charbig = 'was inserted';
6900COMMIT WORK;
6901UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6902
6903# check special-1 success: 	1
6904UPDATE t1 SET f_charbig = '';
6905
6906# check special-2 success: 	1
6907UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6908INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6909SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6910WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6911INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6912SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6913'just inserted' FROM t0_template
6914WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6915CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6916BEGIN
6917UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6918f_charbig = 'updated by trigger'
6919      WHERE f_int1 = new.f_int1;
6920END|
6921INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6922SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6923WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6924
6925# check trigger-1 success: 	1
6926DROP TRIGGER trg_1;
6927UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6928f_int2 = CAST(f_char1 AS SIGNED INT),
6929f_charbig = 'just inserted'
6930   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6931DELETE FROM t0_aux
6932WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6933INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6934SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6935'just inserted' FROM t0_template
6936WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6937CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6938BEGIN
6939UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6940f_charbig = 'updated by trigger'
6941      WHERE f_int1 = new.f_int1;
6942END|
6943INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6944SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6945WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6946
6947# check trigger-2 success: 	1
6948DROP TRIGGER trg_1;
6949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6950f_int2 = CAST(f_char1 AS SIGNED INT),
6951f_charbig = 'just inserted'
6952   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6953DELETE FROM t0_aux
6954WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6955INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6956SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6957'just inserted' FROM t0_template
6958WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6959CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6960BEGIN
6961UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6962f_charbig = 'updated by trigger'
6963      WHERE f_int1 = new.f_int1;
6964END|
6965UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6966WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6967
6968# check trigger-3 success: 	1
6969DROP TRIGGER trg_1;
6970UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6971f_int2 = CAST(f_char1 AS SIGNED INT),
6972f_charbig = 'just inserted'
6973   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6974DELETE FROM t0_aux
6975WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6976INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6977SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6978'just inserted' FROM t0_template
6979WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6980CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6981BEGIN
6982UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6983f_charbig = 'updated by trigger'
6984      WHERE f_int1 = - old.f_int1;
6985END|
6986UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6987WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6988
6989# check trigger-4 success: 	1
6990DROP TRIGGER trg_1;
6991UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6992f_int2 = CAST(f_char1 AS SIGNED INT),
6993f_charbig = 'just inserted'
6994   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6995DELETE FROM t0_aux
6996WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6997INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6998SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6999'just inserted' FROM t0_template
7000WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7001CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7002BEGIN
7003UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7004f_charbig = 'updated by trigger'
7005      WHERE f_int1 = new.f_int1;
7006END|
7007UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7008WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7009
7010# check trigger-5 success: 	1
7011DROP TRIGGER trg_1;
7012UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7013f_int2 = CAST(f_char1 AS SIGNED INT),
7014f_charbig = 'just inserted'
7015   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7016DELETE FROM t0_aux
7017WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7018INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7019SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7020'just inserted' FROM t0_template
7021WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7022CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7023BEGIN
7024UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7025f_charbig = 'updated by trigger'
7026      WHERE f_int1 = - old.f_int1;
7027END|
7028UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7029WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7030
7031# check trigger-6 success: 	1
7032DROP TRIGGER trg_1;
7033UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7034f_int2 = CAST(f_char1 AS SIGNED INT),
7035f_charbig = 'just inserted'
7036   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7037DELETE FROM t0_aux
7038WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7039INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7040SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7041'just inserted' FROM t0_template
7042WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7043CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7044BEGIN
7045UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7046f_charbig = 'updated by trigger'
7047      WHERE f_int1 = - old.f_int1;
7048END|
7049DELETE FROM t0_aux
7050WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7051
7052# check trigger-7 success: 	1
7053DROP TRIGGER trg_1;
7054UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7055f_int2 = CAST(f_char1 AS SIGNED INT),
7056f_charbig = 'just inserted'
7057   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7058DELETE FROM t0_aux
7059WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7060INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7061SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7062'just inserted' FROM t0_template
7063WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7064CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7065BEGIN
7066UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7067f_charbig = 'updated by trigger'
7068      WHERE f_int1 = - old.f_int1;
7069END|
7070DELETE FROM t0_aux
7071WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7072
7073# check trigger-8 success: 	1
7074DROP TRIGGER trg_1;
7075UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7076f_int2 = CAST(f_char1 AS SIGNED INT),
7077f_charbig = 'just inserted'
7078   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7079DELETE FROM t0_aux
7080WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7081DELETE FROM t1
7082WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7083CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7084BEGIN
7085SET new.f_int1 = old.f_int1 + @max_row,
7086new.f_int2 = old.f_int2 - @max_row,
7087new.f_charbig = '####updated per update trigger####';
7088END|
7089UPDATE t1
7090SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7091f_charbig = '####updated per update statement itself####';
7092
7093# check trigger-9 success: 	1
7094DROP TRIGGER trg_2;
7095UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7096f_int2 = CAST(f_char1 AS SIGNED INT),
7097f_charbig = CONCAT('===',f_char1,'===');
7098CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7099BEGIN
7100SET new.f_int1 = new.f_int1 + @max_row,
7101new.f_int2 = new.f_int2 - @max_row,
7102new.f_charbig = '####updated per update trigger####';
7103END|
7104UPDATE t1
7105SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7106f_charbig = '####updated per update statement itself####';
7107
7108# check trigger-10 success: 	1
7109DROP TRIGGER trg_2;
7110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7111f_int2 = CAST(f_char1 AS SIGNED INT),
7112f_charbig = CONCAT('===',f_char1,'===');
7113CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7114BEGIN
7115SET new.f_int1 = @my_max1 + @counter,
7116new.f_int2 = @my_min2 - @counter,
7117new.f_charbig = '####updated per insert trigger####';
7118SET @counter = @counter + 1;
7119END|
7120SET @counter = 1;
7121SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7122INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7123SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7124CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7125WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7126ORDER BY f_int1;
7127DROP TRIGGER trg_3;
7128
7129# check trigger-11 success: 	1
7130DELETE FROM t1
7131WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7132AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7133AND f_charbig = '####updated per insert trigger####';
7134CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7135BEGIN
7136SET new.f_int1 = @my_max1 + @counter,
7137new.f_int2 = @my_min2 - @counter,
7138new.f_charbig = '####updated per insert trigger####';
7139SET @counter = @counter + 1;
7140END|
7141SET @counter = 1;
7142SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7143INSERT INTO t1 (f_char1, f_char2, f_charbig)
7144SELECT CAST(f_int1 AS CHAR),
7145CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7146WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7147ORDER BY f_int1;
7148DROP TRIGGER trg_3;
7149
7150# check trigger-12 success: 	1
7151DELETE FROM t1
7152WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7153AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7154AND f_charbig = '####updated per insert trigger####';
7155ANALYZE  TABLE t1;
7156Table	Op	Msg_type	Msg_text
7157test.t1	analyze	status	OK
7158CHECK    TABLE t1 EXTENDED;
7159Table	Op	Msg_type	Msg_text
7160test.t1	check	status	OK
7161CHECKSUM TABLE t1 EXTENDED;
7162Table	Checksum
7163test.t1	<some_value>
7164OPTIMIZE TABLE t1;
7165Table	Op	Msg_type	Msg_text
7166test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7167test.t1	optimize	status	OK
7168# check layout success:    1
7169REPAIR   TABLE t1 EXTENDED;
7170Table	Op	Msg_type	Msg_text
7171test.t1	repair	status	OK
7172# check layout success:    1
7173TRUNCATE t1;
7174
7175# check TRUNCATE success: 	1
7176# check layout success:    1
7177# End usability test (inc/partition_check.inc)
7178DROP TABLE t1;
7179CREATE TABLE t1 (
7180f_int1 INTEGER,
7181f_int2 INTEGER,
7182f_char1 CHAR(20),
7183f_char2 CHAR(20),
7184f_charbig VARCHAR(1000)
7185
7186)
7187PARTITION BY LIST(ABS(MOD(f_int1,2)))
7188SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
7189(PARTITION part1 VALUES IN (0),
7190PARTITION part2 VALUES IN (1),
7191PARTITION part3 VALUES IN (NULL));
7192INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7193SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
7194# Start usability test (inc/partition_check.inc)
7195create_command
7196SHOW CREATE TABLE t1;
7197Table	Create Table
7198t1	CREATE TABLE `t1` (
7199  `f_int1` int(11) DEFAULT NULL,
7200  `f_int2` int(11) DEFAULT NULL,
7201  `f_char1` char(20) DEFAULT NULL,
7202  `f_char2` char(20) DEFAULT NULL,
7203  `f_charbig` varchar(1000) DEFAULT NULL
7204) ENGINE=InnoDB DEFAULT CHARSET=latin1
7205/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
7206SUBPARTITION BY KEY (f_int2)
7207SUBPARTITIONS 3
7208(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
7209 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
7210 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
7211
7212unified filelist
7213t1#P#part1#SP#part1sp0.ibd
7214t1#P#part1#SP#part1sp1.ibd
7215t1#P#part1#SP#part1sp2.ibd
7216t1#P#part2#SP#part2sp0.ibd
7217t1#P#part2#SP#part2sp1.ibd
7218t1#P#part2#SP#part2sp2.ibd
7219t1#P#part3#SP#part3sp0.ibd
7220t1#P#part3#SP#part3sp1.ibd
7221t1#P#part3#SP#part3sp2.ibd
7222t1.frm
7223
7224# check prerequisites-1 success:    1
7225# check COUNT(*) success:    1
7226# check MIN/MAX(f_int1) success:    1
7227# check MIN/MAX(f_int2) success:    1
7228INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7229SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7230CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7231WHERE f_int1 IN (2,3);
7232# check prerequisites-3 success:    1
7233DELETE FROM t1 WHERE f_charbig = 'delete me';
7234# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
7235# check read via f_int1 success: 1
7236# check read via f_int2 success: 1
7237
7238# check multiple-1 success: 	1
7239DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7240
7241# check multiple-2 success: 	1
7242INSERT INTO t1 SELECT * FROM t0_template
7243WHERE MOD(f_int1,3) = 0;
7244
7245# check multiple-3 success: 	1
7246UPDATE t1 SET f_int1 = f_int1 + @max_row
7247WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7248AND @max_row_div2 + @max_row_div4;
7249
7250# check multiple-4 success: 	1
7251DELETE FROM t1
7252WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7253AND @max_row_div2 + @max_row_div4 + @max_row;
7254
7255# check multiple-5 success: 	1
7256SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7257INSERT INTO t1
7258SET f_int1 = @cur_value , f_int2 = @cur_value,
7259f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7260f_charbig = '#SINGLE#';
7261
7262# check single-1 success: 	1
7263SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7264INSERT INTO t1
7265SET f_int1 = @cur_value , f_int2 = @cur_value,
7266f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7267f_charbig = '#SINGLE#';
7268
7269# check single-2 success: 	1
7270SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7271SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7272UPDATE t1 SET f_int1 = @cur_value2
7273WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7274
7275# check single-3 success: 	1
7276SET @cur_value1= -1;
7277SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7278UPDATE t1 SET f_int1 = @cur_value1
7279WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7280
7281# check single-4 success: 	1
7282SELECT MAX(f_int1) INTO @cur_value FROM t1;
7283DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7284
7285# check single-5 success: 	1
7286DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7287
7288# check single-6 success: 	1
7289INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7290
7291# check single-7 success: 	1
7292DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7293DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7294INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7295f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7296f_charbig = '#NULL#';
7297INSERT INTO t1
7298SET f_int1 = NULL , f_int2 = -@max_row,
7299f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7300f_charbig = '#NULL#';
7301# check null success:    1
7302
7303# check null-1 success: 	1
7304UPDATE t1 SET f_int1 = -@max_row
7305WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7306AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7307
7308# check null-2 success: 	1
7309UPDATE t1 SET f_int1 = NULL
7310WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7311AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7312
7313# check null-3 success: 	1
7314DELETE FROM t1
7315WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
7316AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
7317
7318# check null-4 success: 	1
7319DELETE FROM t1
7320WHERE f_int1 = 0 AND f_int2 = 0
7321AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7322AND f_charbig = '#NULL#';
7323SET AUTOCOMMIT= 0;
7324INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7325SELECT f_int1, f_int1, '', '', 'was inserted'
7326FROM t0_template source_tab
7327WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7328
7329# check transactions-1 success: 	1
7330COMMIT WORK;
7331
7332# check transactions-2 success: 	1
7333ROLLBACK WORK;
7334
7335# check transactions-3 success: 	1
7336DELETE FROM t1 WHERE f_charbig = 'was inserted';
7337COMMIT WORK;
7338ROLLBACK WORK;
7339
7340# check transactions-4 success: 	1
7341INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7342SELECT f_int1, f_int1, '', '', 'was inserted'
7343FROM t0_template source_tab
7344WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7345
7346# check transactions-5 success: 	1
7347ROLLBACK WORK;
7348
7349# check transactions-6 success: 	1
7350# INFO: Storage engine used for t1 seems to be transactional.
7351COMMIT;
7352
7353# check transactions-7 success: 	1
7354DELETE FROM t1 WHERE f_charbig = 'was inserted';
7355COMMIT WORK;
7356SET @@session.sql_mode = 'traditional';
7357Warnings:
7358Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7359SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7360INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7361SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7362'', '', 'was inserted' FROM t0_template
7363WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7364ERROR 22012: Division by 0
7365COMMIT;
7366
7367# check transactions-8 success: 	1
7368# INFO: Storage engine used for t1 seems to be able to revert
7369#       changes made by the failing statement.
7370SET @@session.sql_mode = '';
7371Warnings:
7372Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7373SET AUTOCOMMIT= 1;
7374DELETE FROM t1 WHERE f_charbig = 'was inserted';
7375COMMIT WORK;
7376UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7377
7378# check special-1 success: 	1
7379UPDATE t1 SET f_charbig = '';
7380
7381# check special-2 success: 	1
7382UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7383INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7384SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7385WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7386INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7387SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7388'just inserted' FROM t0_template
7389WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7390CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7391BEGIN
7392UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7393f_charbig = 'updated by trigger'
7394      WHERE f_int1 = new.f_int1;
7395END|
7396INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7397SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7398WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7399
7400# check trigger-1 success: 	1
7401DROP TRIGGER trg_1;
7402UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7403f_int2 = CAST(f_char1 AS SIGNED INT),
7404f_charbig = 'just inserted'
7405   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7406DELETE FROM t0_aux
7407WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7408INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7409SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7410'just inserted' FROM t0_template
7411WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7412CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7413BEGIN
7414UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7415f_charbig = 'updated by trigger'
7416      WHERE f_int1 = new.f_int1;
7417END|
7418INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7419SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7420WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7421
7422# check trigger-2 success: 	1
7423DROP TRIGGER trg_1;
7424UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7425f_int2 = CAST(f_char1 AS SIGNED INT),
7426f_charbig = 'just inserted'
7427   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7428DELETE FROM t0_aux
7429WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7430INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7431SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7432'just inserted' FROM t0_template
7433WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7434CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7435BEGIN
7436UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7437f_charbig = 'updated by trigger'
7438      WHERE f_int1 = new.f_int1;
7439END|
7440UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7441WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7442
7443# check trigger-3 success: 	1
7444DROP TRIGGER trg_1;
7445UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7446f_int2 = CAST(f_char1 AS SIGNED INT),
7447f_charbig = 'just inserted'
7448   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7449DELETE FROM t0_aux
7450WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7451INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7452SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7453'just inserted' FROM t0_template
7454WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7455CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7456BEGIN
7457UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7458f_charbig = 'updated by trigger'
7459      WHERE f_int1 = - old.f_int1;
7460END|
7461UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7462WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7463
7464# check trigger-4 success: 	1
7465DROP TRIGGER trg_1;
7466UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7467f_int2 = CAST(f_char1 AS SIGNED INT),
7468f_charbig = 'just inserted'
7469   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7470DELETE FROM t0_aux
7471WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7472INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7473SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7474'just inserted' FROM t0_template
7475WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7476CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7477BEGIN
7478UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7479f_charbig = 'updated by trigger'
7480      WHERE f_int1 = new.f_int1;
7481END|
7482UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7483WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7484
7485# check trigger-5 success: 	1
7486DROP TRIGGER trg_1;
7487UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7488f_int2 = CAST(f_char1 AS SIGNED INT),
7489f_charbig = 'just inserted'
7490   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7491DELETE FROM t0_aux
7492WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7493INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7494SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7495'just inserted' FROM t0_template
7496WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7497CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7498BEGIN
7499UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7500f_charbig = 'updated by trigger'
7501      WHERE f_int1 = - old.f_int1;
7502END|
7503UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7504WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7505
7506# check trigger-6 success: 	1
7507DROP TRIGGER trg_1;
7508UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7509f_int2 = CAST(f_char1 AS SIGNED INT),
7510f_charbig = 'just inserted'
7511   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7512DELETE FROM t0_aux
7513WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7514INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7515SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7516'just inserted' FROM t0_template
7517WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7518CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7519BEGIN
7520UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7521f_charbig = 'updated by trigger'
7522      WHERE f_int1 = - old.f_int1;
7523END|
7524DELETE FROM t0_aux
7525WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7526
7527# check trigger-7 success: 	1
7528DROP TRIGGER trg_1;
7529UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7530f_int2 = CAST(f_char1 AS SIGNED INT),
7531f_charbig = 'just inserted'
7532   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7533DELETE FROM t0_aux
7534WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7535INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7536SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7537'just inserted' FROM t0_template
7538WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7539CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7540BEGIN
7541UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7542f_charbig = 'updated by trigger'
7543      WHERE f_int1 = - old.f_int1;
7544END|
7545DELETE FROM t0_aux
7546WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7547
7548# check trigger-8 success: 	1
7549DROP TRIGGER trg_1;
7550UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7551f_int2 = CAST(f_char1 AS SIGNED INT),
7552f_charbig = 'just inserted'
7553   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7554DELETE FROM t0_aux
7555WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7556DELETE FROM t1
7557WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7558CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7559BEGIN
7560SET new.f_int1 = old.f_int1 + @max_row,
7561new.f_int2 = old.f_int2 - @max_row,
7562new.f_charbig = '####updated per update trigger####';
7563END|
7564UPDATE t1
7565SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7566f_charbig = '####updated per update statement itself####';
7567
7568# check trigger-9 success: 	1
7569DROP TRIGGER trg_2;
7570UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7571f_int2 = CAST(f_char1 AS SIGNED INT),
7572f_charbig = CONCAT('===',f_char1,'===');
7573CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7574BEGIN
7575SET new.f_int1 = new.f_int1 + @max_row,
7576new.f_int2 = new.f_int2 - @max_row,
7577new.f_charbig = '####updated per update trigger####';
7578END|
7579UPDATE t1
7580SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7581f_charbig = '####updated per update statement itself####';
7582
7583# check trigger-10 success: 	1
7584DROP TRIGGER trg_2;
7585UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7586f_int2 = CAST(f_char1 AS SIGNED INT),
7587f_charbig = CONCAT('===',f_char1,'===');
7588CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7589BEGIN
7590SET new.f_int1 = @my_max1 + @counter,
7591new.f_int2 = @my_min2 - @counter,
7592new.f_charbig = '####updated per insert trigger####';
7593SET @counter = @counter + 1;
7594END|
7595SET @counter = 1;
7596SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7597INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7598SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7599CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7600WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7601ORDER BY f_int1;
7602DROP TRIGGER trg_3;
7603
7604# check trigger-11 success: 	1
7605DELETE FROM t1
7606WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7607AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7608AND f_charbig = '####updated per insert trigger####';
7609CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7610BEGIN
7611SET new.f_int1 = @my_max1 + @counter,
7612new.f_int2 = @my_min2 - @counter,
7613new.f_charbig = '####updated per insert trigger####';
7614SET @counter = @counter + 1;
7615END|
7616SET @counter = 1;
7617SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7618INSERT INTO t1 (f_char1, f_char2, f_charbig)
7619SELECT CAST(f_int1 AS CHAR),
7620CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7622ORDER BY f_int1;
7623DROP TRIGGER trg_3;
7624
7625# check trigger-12 success: 	1
7626DELETE FROM t1
7627WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7628AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7629AND f_charbig = '####updated per insert trigger####';
7630ANALYZE  TABLE t1;
7631Table	Op	Msg_type	Msg_text
7632test.t1	analyze	status	OK
7633CHECK    TABLE t1 EXTENDED;
7634Table	Op	Msg_type	Msg_text
7635test.t1	check	status	OK
7636CHECKSUM TABLE t1 EXTENDED;
7637Table	Checksum
7638test.t1	<some_value>
7639OPTIMIZE TABLE t1;
7640Table	Op	Msg_type	Msg_text
7641test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7642test.t1	optimize	status	OK
7643# check layout success:    1
7644REPAIR   TABLE t1 EXTENDED;
7645Table	Op	Msg_type	Msg_text
7646test.t1	repair	status	OK
7647# check layout success:    1
7648TRUNCATE t1;
7649
7650# check TRUNCATE success: 	1
7651# check layout success:    1
7652# End usability test (inc/partition_check.inc)
7653DROP TABLE t1;
7654#------------------------------------------------------------------------
7655#  2   Tables with PRIMARY KEY and/or UNIQUE INDEXes
7656#        The partitioning function contains one column.
7657#------------------------------------------------------------------------
7658#  2.5 PRIMARY KEY + UNIQUE INDEX consisting of two columns
7659DROP TABLE IF EXISTS t1;
7660CREATE TABLE t1 (
7661f_int1 INTEGER,
7662f_int2 INTEGER,
7663f_char1 CHAR(20),
7664f_char2 CHAR(20),
7665f_charbig VARCHAR(1000)
7666, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
7667)
7668PARTITION BY HASH(f_int1) PARTITIONS 2;
7669INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7670SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
7671# Start usability test (inc/partition_check.inc)
7672create_command
7673SHOW CREATE TABLE t1;
7674Table	Create Table
7675t1	CREATE TABLE `t1` (
7676  `f_int1` int(11) NOT NULL,
7677  `f_int2` int(11) NOT NULL,
7678  `f_char1` char(20) DEFAULT NULL,
7679  `f_char2` char(20) DEFAULT NULL,
7680  `f_charbig` varchar(1000) DEFAULT NULL,
7681  PRIMARY KEY (`f_int2`,`f_int1`),
7682  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
7683) ENGINE=InnoDB DEFAULT CHARSET=latin1
7684/*!50100 PARTITION BY HASH (f_int1)
7685PARTITIONS 2 */
7686
7687unified filelist
7688t1#P#p0.ibd
7689t1#P#p1.ibd
7690t1.frm
7691
7692# check prerequisites-1 success:    1
7693# check COUNT(*) success:    1
7694# check MIN/MAX(f_int1) success:    1
7695# check MIN/MAX(f_int2) success:    1
7696INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7697SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7698CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7699WHERE f_int1 IN (2,3);
7700ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7701# check prerequisites-3 success:    1
7702# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7703INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7704SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7705CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7706WHERE f_int1 IN (2,3);
7707DELETE FROM t1 WHERE f_charbig = 'delete me';
7708INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7709SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7710CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7711WHERE f_int1 IN (2,3);
7712DELETE FROM t1 WHERE f_charbig = 'delete me';
7713# check read via f_int1 success: 1
7714# check read via f_int2 success: 1
7715
7716# check multiple-1 success: 	1
7717DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7718
7719# check multiple-2 success: 	1
7720INSERT INTO t1 SELECT * FROM t0_template
7721WHERE MOD(f_int1,3) = 0;
7722
7723# check multiple-3 success: 	1
7724UPDATE t1 SET f_int1 = f_int1 + @max_row
7725WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7726AND @max_row_div2 + @max_row_div4;
7727
7728# check multiple-4 success: 	1
7729DELETE FROM t1
7730WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7731AND @max_row_div2 + @max_row_div4 + @max_row;
7732
7733# check multiple-5 success: 	1
7734SELECT COUNT(*) INTO @try_count FROM t0_template
7735WHERE MOD(f_int1,3) = 0
7736AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7737SELECT COUNT(*) INTO @clash_count
7738FROM t1 INNER JOIN t0_template USING(f_int1)
7739WHERE MOD(f_int1,3) = 0
7740AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7741SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7742INSERT INTO t1
7743SET f_int1 = @cur_value , f_int2 = @cur_value,
7744f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7745f_charbig = '#SINGLE#';
7746
7747# check single-1 success: 	1
7748SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7749INSERT INTO t1
7750SET f_int1 = @cur_value , f_int2 = @cur_value,
7751f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7752f_charbig = '#SINGLE#';
7753
7754# check single-2 success: 	1
7755SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7756SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7757UPDATE t1 SET f_int1 = @cur_value2
7758WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7759
7760# check single-3 success: 	1
7761SET @cur_value1= -1;
7762SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7763UPDATE t1 SET f_int1 = @cur_value1
7764WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7765
7766# check single-4 success: 	1
7767SELECT MAX(f_int1) INTO @cur_value FROM t1;
7768DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7769
7770# check single-5 success: 	1
7771DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7772
7773# check single-6 success: 	1
7774INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7775
7776# check single-7 success: 	1
7777DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7778DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7779INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7780f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7781f_charbig = '#NULL#';
7782INSERT INTO t1
7783SET f_int1 = NULL , f_int2 = -@max_row,
7784f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7785f_charbig = '#NULL#';
7786ERROR 23000: Column 'f_int1' cannot be null
7787# check null success:    1
7788DELETE FROM t1
7789WHERE f_int1 = 0 AND f_int2 = 0
7790AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7791AND f_charbig = '#NULL#';
7792INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7793SELECT f_int1, f_int1, '', '', 'was inserted'
7794   FROM t0_template source_tab
7795WHERE MOD(f_int1,3) = 0
7796AND f_int1 BETWEEN @max_row_div2 AND @max_row
7797ON DUPLICATE KEY
7798UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7799f_int2 = 2 * @max_row + source_tab.f_int1,
7800f_charbig = 'was updated';
7801
7802# check unique-1-a success: 	1
7803
7804# check unique-1-b success: 	1
7805DELETE FROM t1 WHERE f_charbig = 'was inserted';
7806UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7807f_int2 = CAST(f_char1 AS SIGNED INT),
7808f_charbig = CONCAT('===',f_char1,'===')
7809WHERE f_charbig = 'was updated';
7810REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7811SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7812   FROM t0_template source_tab
7813WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7814
7815# check replace success: 	1
7816DELETE FROM t1
7817WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7818DELETE FROM t1
7819WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7820f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7821UPDATE t1 SET f_int2 = f_int1,
7822f_char1 = CAST(f_int1 AS CHAR),
7823f_char2 = CAST(f_int1 AS CHAR),
7824f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7825WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7826SET AUTOCOMMIT= 0;
7827INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7828SELECT f_int1, f_int1, '', '', 'was inserted'
7829FROM t0_template source_tab
7830WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7831
7832# check transactions-1 success: 	1
7833COMMIT WORK;
7834
7835# check transactions-2 success: 	1
7836ROLLBACK WORK;
7837
7838# check transactions-3 success: 	1
7839DELETE FROM t1 WHERE f_charbig = 'was inserted';
7840COMMIT WORK;
7841ROLLBACK WORK;
7842
7843# check transactions-4 success: 	1
7844INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7845SELECT f_int1, f_int1, '', '', 'was inserted'
7846FROM t0_template source_tab
7847WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7848
7849# check transactions-5 success: 	1
7850ROLLBACK WORK;
7851
7852# check transactions-6 success: 	1
7853# INFO: Storage engine used for t1 seems to be transactional.
7854COMMIT;
7855
7856# check transactions-7 success: 	1
7857DELETE FROM t1 WHERE f_charbig = 'was inserted';
7858COMMIT WORK;
7859SET @@session.sql_mode = 'traditional';
7860Warnings:
7861Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7862SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7863INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7864SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7865'', '', 'was inserted' FROM t0_template
7866WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7867ERROR 22012: Division by 0
7868COMMIT;
7869
7870# check transactions-8 success: 	1
7871# INFO: Storage engine used for t1 seems to be able to revert
7872#       changes made by the failing statement.
7873SET @@session.sql_mode = '';
7874Warnings:
7875Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7876SET AUTOCOMMIT= 1;
7877DELETE FROM t1 WHERE f_charbig = 'was inserted';
7878COMMIT WORK;
7879UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7880
7881# check special-1 success: 	1
7882UPDATE t1 SET f_charbig = '';
7883
7884# check special-2 success: 	1
7885UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7886INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7887SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7888WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7889INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7890SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7891'just inserted' FROM t0_template
7892WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7893CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7894BEGIN
7895UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7896f_charbig = 'updated by trigger'
7897      WHERE f_int1 = new.f_int1;
7898END|
7899INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7900SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7901WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7902
7903# check trigger-1 success: 	1
7904DROP TRIGGER trg_1;
7905UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7906f_int2 = CAST(f_char1 AS SIGNED INT),
7907f_charbig = 'just inserted'
7908   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7909DELETE FROM t0_aux
7910WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7911INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7912SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7913'just inserted' FROM t0_template
7914WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7915CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7916BEGIN
7917UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7918f_charbig = 'updated by trigger'
7919      WHERE f_int1 = new.f_int1;
7920END|
7921INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7922SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7923WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7924
7925# check trigger-2 success: 	1
7926DROP TRIGGER trg_1;
7927UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7928f_int2 = CAST(f_char1 AS SIGNED INT),
7929f_charbig = 'just inserted'
7930   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7931DELETE FROM t0_aux
7932WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7933INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7934SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7935'just inserted' FROM t0_template
7936WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7937CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7938BEGIN
7939UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7940f_charbig = 'updated by trigger'
7941      WHERE f_int1 = new.f_int1;
7942END|
7943UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7944WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7945
7946# check trigger-3 success: 	1
7947DROP TRIGGER trg_1;
7948UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7949f_int2 = CAST(f_char1 AS SIGNED INT),
7950f_charbig = 'just inserted'
7951   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7952DELETE FROM t0_aux
7953WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7954INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7955SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7956'just inserted' FROM t0_template
7957WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7958CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7959BEGIN
7960UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7961f_charbig = 'updated by trigger'
7962      WHERE f_int1 = - old.f_int1;
7963END|
7964UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7965WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7966
7967# check trigger-4 success: 	1
7968DROP TRIGGER trg_1;
7969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7970f_int2 = CAST(f_char1 AS SIGNED INT),
7971f_charbig = 'just inserted'
7972   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7973DELETE FROM t0_aux
7974WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7975INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7976SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7977'just inserted' FROM t0_template
7978WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7979CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7980BEGIN
7981UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7982f_charbig = 'updated by trigger'
7983      WHERE f_int1 = new.f_int1;
7984END|
7985UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7986WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7987
7988# check trigger-5 success: 	1
7989DROP TRIGGER trg_1;
7990UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7991f_int2 = CAST(f_char1 AS SIGNED INT),
7992f_charbig = 'just inserted'
7993   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7994DELETE FROM t0_aux
7995WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7996INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7997SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7998'just inserted' FROM t0_template
7999WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8000CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8001BEGIN
8002UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8003f_charbig = 'updated by trigger'
8004      WHERE f_int1 = - old.f_int1;
8005END|
8006UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8007WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8008
8009# check trigger-6 success: 	1
8010DROP TRIGGER trg_1;
8011UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8012f_int2 = CAST(f_char1 AS SIGNED INT),
8013f_charbig = 'just inserted'
8014   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8015DELETE FROM t0_aux
8016WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8017INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8018SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8019'just inserted' FROM t0_template
8020WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8021CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8022BEGIN
8023UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8024f_charbig = 'updated by trigger'
8025      WHERE f_int1 = - old.f_int1;
8026END|
8027DELETE FROM t0_aux
8028WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8029
8030# check trigger-7 success: 	1
8031DROP TRIGGER trg_1;
8032UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8033f_int2 = CAST(f_char1 AS SIGNED INT),
8034f_charbig = 'just inserted'
8035   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8036DELETE FROM t0_aux
8037WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8038INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8039SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8040'just inserted' FROM t0_template
8041WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8042CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8043BEGIN
8044UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8045f_charbig = 'updated by trigger'
8046      WHERE f_int1 = - old.f_int1;
8047END|
8048DELETE FROM t0_aux
8049WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8050
8051# check trigger-8 success: 	1
8052DROP TRIGGER trg_1;
8053UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8054f_int2 = CAST(f_char1 AS SIGNED INT),
8055f_charbig = 'just inserted'
8056   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8057DELETE FROM t0_aux
8058WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8059DELETE FROM t1
8060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8061CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8062BEGIN
8063SET new.f_int1 = old.f_int1 + @max_row,
8064new.f_int2 = old.f_int2 - @max_row,
8065new.f_charbig = '####updated per update trigger####';
8066END|
8067UPDATE t1
8068SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8069f_charbig = '####updated per update statement itself####';
8070
8071# check trigger-9 success: 	1
8072DROP TRIGGER trg_2;
8073UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8074f_int2 = CAST(f_char1 AS SIGNED INT),
8075f_charbig = CONCAT('===',f_char1,'===');
8076CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8077BEGIN
8078SET new.f_int1 = new.f_int1 + @max_row,
8079new.f_int2 = new.f_int2 - @max_row,
8080new.f_charbig = '####updated per update trigger####';
8081END|
8082UPDATE t1
8083SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8084f_charbig = '####updated per update statement itself####';
8085
8086# check trigger-10 success: 	1
8087DROP TRIGGER trg_2;
8088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8089f_int2 = CAST(f_char1 AS SIGNED INT),
8090f_charbig = CONCAT('===',f_char1,'===');
8091CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8092BEGIN
8093SET new.f_int1 = @my_max1 + @counter,
8094new.f_int2 = @my_min2 - @counter,
8095new.f_charbig = '####updated per insert trigger####';
8096SET @counter = @counter + 1;
8097END|
8098SET @counter = 1;
8099SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8101SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8102CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8104ORDER BY f_int1;
8105DROP TRIGGER trg_3;
8106
8107# check trigger-11 success: 	1
8108DELETE FROM t1
8109WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8110AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8111AND f_charbig = '####updated per insert trigger####';
8112CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8113BEGIN
8114SET new.f_int1 = @my_max1 + @counter,
8115new.f_int2 = @my_min2 - @counter,
8116new.f_charbig = '####updated per insert trigger####';
8117SET @counter = @counter + 1;
8118END|
8119SET @counter = 1;
8120SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8121INSERT INTO t1 (f_char1, f_char2, f_charbig)
8122SELECT CAST(f_int1 AS CHAR),
8123CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8124WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8125ORDER BY f_int1;
8126DROP TRIGGER trg_3;
8127
8128# check trigger-12 success: 	1
8129DELETE FROM t1
8130WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8131AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8132AND f_charbig = '####updated per insert trigger####';
8133ANALYZE  TABLE t1;
8134Table	Op	Msg_type	Msg_text
8135test.t1	analyze	status	OK
8136CHECK    TABLE t1 EXTENDED;
8137Table	Op	Msg_type	Msg_text
8138test.t1	check	status	OK
8139CHECKSUM TABLE t1 EXTENDED;
8140Table	Checksum
8141test.t1	<some_value>
8142OPTIMIZE TABLE t1;
8143Table	Op	Msg_type	Msg_text
8144test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8145test.t1	optimize	status	OK
8146# check layout success:    1
8147REPAIR   TABLE t1 EXTENDED;
8148Table	Op	Msg_type	Msg_text
8149test.t1	repair	status	OK
8150# check layout success:    1
8151TRUNCATE t1;
8152
8153# check TRUNCATE success: 	1
8154# check layout success:    1
8155# End usability test (inc/partition_check.inc)
8156DROP TABLE t1;
8157CREATE TABLE t1 (
8158f_int1 INTEGER,
8159f_int2 INTEGER,
8160f_char1 CHAR(20),
8161f_char2 CHAR(20),
8162f_charbig VARCHAR(1000)
8163, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
8164)
8165PARTITION BY KEY(f_int1) PARTITIONS 5;
8166INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8167SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
8168# Start usability test (inc/partition_check.inc)
8169create_command
8170SHOW CREATE TABLE t1;
8171Table	Create Table
8172t1	CREATE TABLE `t1` (
8173  `f_int1` int(11) NOT NULL,
8174  `f_int2` int(11) NOT NULL,
8175  `f_char1` char(20) DEFAULT NULL,
8176  `f_char2` char(20) DEFAULT NULL,
8177  `f_charbig` varchar(1000) DEFAULT NULL,
8178  PRIMARY KEY (`f_int2`,`f_int1`),
8179  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8180) ENGINE=InnoDB DEFAULT CHARSET=latin1
8181/*!50100 PARTITION BY KEY (f_int1)
8182PARTITIONS 5 */
8183
8184unified filelist
8185t1#P#p0.ibd
8186t1#P#p1.ibd
8187t1#P#p2.ibd
8188t1#P#p3.ibd
8189t1#P#p4.ibd
8190t1.frm
8191
8192# check prerequisites-1 success:    1
8193# check COUNT(*) success:    1
8194# check MIN/MAX(f_int1) success:    1
8195# check MIN/MAX(f_int2) success:    1
8196INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8197SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8198CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8199WHERE f_int1 IN (2,3);
8200ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8201# check prerequisites-3 success:    1
8202# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8203INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8204SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8205CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8206WHERE f_int1 IN (2,3);
8207DELETE FROM t1 WHERE f_charbig = 'delete me';
8208INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8209SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8210CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8211WHERE f_int1 IN (2,3);
8212DELETE FROM t1 WHERE f_charbig = 'delete me';
8213# check read via f_int1 success: 1
8214# check read via f_int2 success: 1
8215
8216# check multiple-1 success: 	1
8217DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8218
8219# check multiple-2 success: 	1
8220INSERT INTO t1 SELECT * FROM t0_template
8221WHERE MOD(f_int1,3) = 0;
8222
8223# check multiple-3 success: 	1
8224UPDATE t1 SET f_int1 = f_int1 + @max_row
8225WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8226AND @max_row_div2 + @max_row_div4;
8227
8228# check multiple-4 success: 	1
8229DELETE FROM t1
8230WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8231AND @max_row_div2 + @max_row_div4 + @max_row;
8232
8233# check multiple-5 success: 	1
8234SELECT COUNT(*) INTO @try_count FROM t0_template
8235WHERE MOD(f_int1,3) = 0
8236AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8237SELECT COUNT(*) INTO @clash_count
8238FROM t1 INNER JOIN t0_template USING(f_int1)
8239WHERE MOD(f_int1,3) = 0
8240AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8241SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8242INSERT INTO t1
8243SET f_int1 = @cur_value , f_int2 = @cur_value,
8244f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8245f_charbig = '#SINGLE#';
8246
8247# check single-1 success: 	1
8248SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8249INSERT INTO t1
8250SET f_int1 = @cur_value , f_int2 = @cur_value,
8251f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8252f_charbig = '#SINGLE#';
8253
8254# check single-2 success: 	1
8255SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8256SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8257UPDATE t1 SET f_int1 = @cur_value2
8258WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8259
8260# check single-3 success: 	1
8261SET @cur_value1= -1;
8262SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8263UPDATE t1 SET f_int1 = @cur_value1
8264WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8265
8266# check single-4 success: 	1
8267SELECT MAX(f_int1) INTO @cur_value FROM t1;
8268DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8269
8270# check single-5 success: 	1
8271DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8272
8273# check single-6 success: 	1
8274INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8275
8276# check single-7 success: 	1
8277DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8278DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8279INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8280f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8281f_charbig = '#NULL#';
8282INSERT INTO t1
8283SET f_int1 = NULL , f_int2 = -@max_row,
8284f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8285f_charbig = '#NULL#';
8286ERROR 23000: Column 'f_int1' cannot be null
8287# check null success:    1
8288DELETE FROM t1
8289WHERE f_int1 = 0 AND f_int2 = 0
8290AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8291AND f_charbig = '#NULL#';
8292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8293SELECT f_int1, f_int1, '', '', 'was inserted'
8294   FROM t0_template source_tab
8295WHERE MOD(f_int1,3) = 0
8296AND f_int1 BETWEEN @max_row_div2 AND @max_row
8297ON DUPLICATE KEY
8298UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8299f_int2 = 2 * @max_row + source_tab.f_int1,
8300f_charbig = 'was updated';
8301
8302# check unique-1-a success: 	1
8303
8304# check unique-1-b success: 	1
8305DELETE FROM t1 WHERE f_charbig = 'was inserted';
8306UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8307f_int2 = CAST(f_char1 AS SIGNED INT),
8308f_charbig = CONCAT('===',f_char1,'===')
8309WHERE f_charbig = 'was updated';
8310REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8311SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8312   FROM t0_template source_tab
8313WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8314
8315# check replace success: 	1
8316DELETE FROM t1
8317WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8318DELETE FROM t1
8319WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8320f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8321UPDATE t1 SET f_int2 = f_int1,
8322f_char1 = CAST(f_int1 AS CHAR),
8323f_char2 = CAST(f_int1 AS CHAR),
8324f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8325WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8326SET AUTOCOMMIT= 0;
8327INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8328SELECT f_int1, f_int1, '', '', 'was inserted'
8329FROM t0_template source_tab
8330WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8331
8332# check transactions-1 success: 	1
8333COMMIT WORK;
8334
8335# check transactions-2 success: 	1
8336ROLLBACK WORK;
8337
8338# check transactions-3 success: 	1
8339DELETE FROM t1 WHERE f_charbig = 'was inserted';
8340COMMIT WORK;
8341ROLLBACK WORK;
8342
8343# check transactions-4 success: 	1
8344INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8345SELECT f_int1, f_int1, '', '', 'was inserted'
8346FROM t0_template source_tab
8347WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8348
8349# check transactions-5 success: 	1
8350ROLLBACK WORK;
8351
8352# check transactions-6 success: 	1
8353# INFO: Storage engine used for t1 seems to be transactional.
8354COMMIT;
8355
8356# check transactions-7 success: 	1
8357DELETE FROM t1 WHERE f_charbig = 'was inserted';
8358COMMIT WORK;
8359SET @@session.sql_mode = 'traditional';
8360Warnings:
8361Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8362SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8363INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8364SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8365'', '', 'was inserted' FROM t0_template
8366WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8367ERROR 22012: Division by 0
8368COMMIT;
8369
8370# check transactions-8 success: 	1
8371# INFO: Storage engine used for t1 seems to be able to revert
8372#       changes made by the failing statement.
8373SET @@session.sql_mode = '';
8374Warnings:
8375Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8376SET AUTOCOMMIT= 1;
8377DELETE FROM t1 WHERE f_charbig = 'was inserted';
8378COMMIT WORK;
8379UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8380
8381# check special-1 success: 	1
8382UPDATE t1 SET f_charbig = '';
8383
8384# check special-2 success: 	1
8385UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8386INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8387SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8388WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8389INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8390SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8391'just inserted' FROM t0_template
8392WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8393CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8394BEGIN
8395UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8396f_charbig = 'updated by trigger'
8397      WHERE f_int1 = new.f_int1;
8398END|
8399INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8400SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8402
8403# check trigger-1 success: 	1
8404DROP TRIGGER trg_1;
8405UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8406f_int2 = CAST(f_char1 AS SIGNED INT),
8407f_charbig = 'just inserted'
8408   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8409DELETE FROM t0_aux
8410WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8411INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8412SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8413'just inserted' FROM t0_template
8414WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8415CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8416BEGIN
8417UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8418f_charbig = 'updated by trigger'
8419      WHERE f_int1 = new.f_int1;
8420END|
8421INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8422SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8424
8425# check trigger-2 success: 	1
8426DROP TRIGGER trg_1;
8427UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8428f_int2 = CAST(f_char1 AS SIGNED INT),
8429f_charbig = 'just inserted'
8430   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8431DELETE FROM t0_aux
8432WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8433INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8434SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8435'just inserted' FROM t0_template
8436WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8437CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8438BEGIN
8439UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8440f_charbig = 'updated by trigger'
8441      WHERE f_int1 = new.f_int1;
8442END|
8443UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8444WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8445
8446# check trigger-3 success: 	1
8447DROP TRIGGER trg_1;
8448UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8449f_int2 = CAST(f_char1 AS SIGNED INT),
8450f_charbig = 'just inserted'
8451   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8452DELETE FROM t0_aux
8453WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8454INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8455SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8456'just inserted' FROM t0_template
8457WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8458CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8459BEGIN
8460UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8461f_charbig = 'updated by trigger'
8462      WHERE f_int1 = - old.f_int1;
8463END|
8464UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8465WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8466
8467# check trigger-4 success: 	1
8468DROP TRIGGER trg_1;
8469UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8470f_int2 = CAST(f_char1 AS SIGNED INT),
8471f_charbig = 'just inserted'
8472   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8473DELETE FROM t0_aux
8474WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8475INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8476SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8477'just inserted' FROM t0_template
8478WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8479CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8480BEGIN
8481UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8482f_charbig = 'updated by trigger'
8483      WHERE f_int1 = new.f_int1;
8484END|
8485UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8486WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8487
8488# check trigger-5 success: 	1
8489DROP TRIGGER trg_1;
8490UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8491f_int2 = CAST(f_char1 AS SIGNED INT),
8492f_charbig = 'just inserted'
8493   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8494DELETE FROM t0_aux
8495WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8496INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8497SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8498'just inserted' FROM t0_template
8499WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8500CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8501BEGIN
8502UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8503f_charbig = 'updated by trigger'
8504      WHERE f_int1 = - old.f_int1;
8505END|
8506UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8507WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8508
8509# check trigger-6 success: 	1
8510DROP TRIGGER trg_1;
8511UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8512f_int2 = CAST(f_char1 AS SIGNED INT),
8513f_charbig = 'just inserted'
8514   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8515DELETE FROM t0_aux
8516WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8517INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8518SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8519'just inserted' FROM t0_template
8520WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8521CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8522BEGIN
8523UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8524f_charbig = 'updated by trigger'
8525      WHERE f_int1 = - old.f_int1;
8526END|
8527DELETE FROM t0_aux
8528WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8529
8530# check trigger-7 success: 	1
8531DROP TRIGGER trg_1;
8532UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8533f_int2 = CAST(f_char1 AS SIGNED INT),
8534f_charbig = 'just inserted'
8535   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8536DELETE FROM t0_aux
8537WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8538INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8539SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8540'just inserted' FROM t0_template
8541WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8542CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8543BEGIN
8544UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8545f_charbig = 'updated by trigger'
8546      WHERE f_int1 = - old.f_int1;
8547END|
8548DELETE FROM t0_aux
8549WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8550
8551# check trigger-8 success: 	1
8552DROP TRIGGER trg_1;
8553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8554f_int2 = CAST(f_char1 AS SIGNED INT),
8555f_charbig = 'just inserted'
8556   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8557DELETE FROM t0_aux
8558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8559DELETE FROM t1
8560WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8561CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8562BEGIN
8563SET new.f_int1 = old.f_int1 + @max_row,
8564new.f_int2 = old.f_int2 - @max_row,
8565new.f_charbig = '####updated per update trigger####';
8566END|
8567UPDATE t1
8568SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8569f_charbig = '####updated per update statement itself####';
8570
8571# check trigger-9 success: 	1
8572DROP TRIGGER trg_2;
8573UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8574f_int2 = CAST(f_char1 AS SIGNED INT),
8575f_charbig = CONCAT('===',f_char1,'===');
8576CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8577BEGIN
8578SET new.f_int1 = new.f_int1 + @max_row,
8579new.f_int2 = new.f_int2 - @max_row,
8580new.f_charbig = '####updated per update trigger####';
8581END|
8582UPDATE t1
8583SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8584f_charbig = '####updated per update statement itself####';
8585
8586# check trigger-10 success: 	1
8587DROP TRIGGER trg_2;
8588UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8589f_int2 = CAST(f_char1 AS SIGNED INT),
8590f_charbig = CONCAT('===',f_char1,'===');
8591CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8592BEGIN
8593SET new.f_int1 = @my_max1 + @counter,
8594new.f_int2 = @my_min2 - @counter,
8595new.f_charbig = '####updated per insert trigger####';
8596SET @counter = @counter + 1;
8597END|
8598SET @counter = 1;
8599SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8600INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8601SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8602CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8603WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8604ORDER BY f_int1;
8605DROP TRIGGER trg_3;
8606
8607# check trigger-11 success: 	1
8608DELETE FROM t1
8609WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8610AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8611AND f_charbig = '####updated per insert trigger####';
8612CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8613BEGIN
8614SET new.f_int1 = @my_max1 + @counter,
8615new.f_int2 = @my_min2 - @counter,
8616new.f_charbig = '####updated per insert trigger####';
8617SET @counter = @counter + 1;
8618END|
8619SET @counter = 1;
8620SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8621INSERT INTO t1 (f_char1, f_char2, f_charbig)
8622SELECT CAST(f_int1 AS CHAR),
8623CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8624WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8625ORDER BY f_int1;
8626DROP TRIGGER trg_3;
8627
8628# check trigger-12 success: 	1
8629DELETE FROM t1
8630WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8631AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8632AND f_charbig = '####updated per insert trigger####';
8633ANALYZE  TABLE t1;
8634Table	Op	Msg_type	Msg_text
8635test.t1	analyze	status	OK
8636CHECK    TABLE t1 EXTENDED;
8637Table	Op	Msg_type	Msg_text
8638test.t1	check	status	OK
8639CHECKSUM TABLE t1 EXTENDED;
8640Table	Checksum
8641test.t1	<some_value>
8642OPTIMIZE TABLE t1;
8643Table	Op	Msg_type	Msg_text
8644test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8645test.t1	optimize	status	OK
8646# check layout success:    1
8647REPAIR   TABLE t1 EXTENDED;
8648Table	Op	Msg_type	Msg_text
8649test.t1	repair	status	OK
8650# check layout success:    1
8651TRUNCATE t1;
8652
8653# check TRUNCATE success: 	1
8654# check layout success:    1
8655# End usability test (inc/partition_check.inc)
8656DROP TABLE t1;
8657CREATE TABLE t1 (
8658f_int1 INTEGER,
8659f_int2 INTEGER,
8660f_char1 CHAR(20),
8661f_char2 CHAR(20),
8662f_charbig VARCHAR(1000)
8663, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
8664)
8665PARTITION BY LIST(MOD(f_int1,4))
8666(PARTITION part_3 VALUES IN (-3),
8667PARTITION part_2 VALUES IN (-2),
8668PARTITION part_1 VALUES IN (-1),
8669PARTITION part_N VALUES IN (NULL),
8670PARTITION part0 VALUES IN (0),
8671PARTITION part1 VALUES IN (1),
8672PARTITION part2 VALUES IN (2),
8673PARTITION part3 VALUES IN (3));
8674INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8675SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
8676# Start usability test (inc/partition_check.inc)
8677create_command
8678SHOW CREATE TABLE t1;
8679Table	Create Table
8680t1	CREATE TABLE `t1` (
8681  `f_int1` int(11) NOT NULL,
8682  `f_int2` int(11) NOT NULL,
8683  `f_char1` char(20) DEFAULT NULL,
8684  `f_char2` char(20) DEFAULT NULL,
8685  `f_charbig` varchar(1000) DEFAULT NULL,
8686  PRIMARY KEY (`f_int2`,`f_int1`),
8687  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
8688) ENGINE=InnoDB DEFAULT CHARSET=latin1
8689/*!50100 PARTITION BY LIST (MOD(f_int1,4))
8690(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
8691 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
8692 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
8693 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
8694 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
8695 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
8696 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
8697 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
8698
8699unified filelist
8700t1#P#part0.ibd
8701t1#P#part1.ibd
8702t1#P#part2.ibd
8703t1#P#part3.ibd
8704t1#P#part_1.ibd
8705t1#P#part_2.ibd
8706t1#P#part_3.ibd
8707t1#P#part_N.ibd
8708t1.frm
8709
8710# check prerequisites-1 success:    1
8711# check COUNT(*) success:    1
8712# check MIN/MAX(f_int1) success:    1
8713# check MIN/MAX(f_int2) success:    1
8714INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8715SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8716CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8717WHERE f_int1 IN (2,3);
8718ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8719# check prerequisites-3 success:    1
8720# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8721INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8722SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8723CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8724WHERE f_int1 IN (2,3);
8725DELETE FROM t1 WHERE f_charbig = 'delete me';
8726INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8727SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8728CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8729WHERE f_int1 IN (2,3);
8730DELETE FROM t1 WHERE f_charbig = 'delete me';
8731# check read via f_int1 success: 1
8732# check read via f_int2 success: 1
8733
8734# check multiple-1 success: 	1
8735DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8736
8737# check multiple-2 success: 	1
8738INSERT INTO t1 SELECT * FROM t0_template
8739WHERE MOD(f_int1,3) = 0;
8740
8741# check multiple-3 success: 	1
8742UPDATE t1 SET f_int1 = f_int1 + @max_row
8743WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8744AND @max_row_div2 + @max_row_div4;
8745
8746# check multiple-4 success: 	1
8747DELETE FROM t1
8748WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8749AND @max_row_div2 + @max_row_div4 + @max_row;
8750
8751# check multiple-5 success: 	1
8752SELECT COUNT(*) INTO @try_count FROM t0_template
8753WHERE MOD(f_int1,3) = 0
8754AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8755SELECT COUNT(*) INTO @clash_count
8756FROM t1 INNER JOIN t0_template USING(f_int1)
8757WHERE MOD(f_int1,3) = 0
8758AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8759SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8760INSERT INTO t1
8761SET f_int1 = @cur_value , f_int2 = @cur_value,
8762f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8763f_charbig = '#SINGLE#';
8764
8765# check single-1 success: 	1
8766SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8767INSERT INTO t1
8768SET f_int1 = @cur_value , f_int2 = @cur_value,
8769f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8770f_charbig = '#SINGLE#';
8771
8772# check single-2 success: 	1
8773SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8774SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8775UPDATE t1 SET f_int1 = @cur_value2
8776WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8777
8778# check single-3 success: 	1
8779SET @cur_value1= -1;
8780SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8781UPDATE t1 SET f_int1 = @cur_value1
8782WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8783
8784# check single-4 success: 	1
8785SELECT MAX(f_int1) INTO @cur_value FROM t1;
8786DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8787
8788# check single-5 success: 	1
8789DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8790
8791# check single-6 success: 	1
8792INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8793
8794# check single-7 success: 	1
8795DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8796DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8797INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8798f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8799f_charbig = '#NULL#';
8800INSERT INTO t1
8801SET f_int1 = NULL , f_int2 = -@max_row,
8802f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8803f_charbig = '#NULL#';
8804ERROR 23000: Column 'f_int1' cannot be null
8805# check null success:    1
8806DELETE FROM t1
8807WHERE f_int1 = 0 AND f_int2 = 0
8808AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8809AND f_charbig = '#NULL#';
8810INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8811SELECT f_int1, f_int1, '', '', 'was inserted'
8812   FROM t0_template source_tab
8813WHERE MOD(f_int1,3) = 0
8814AND f_int1 BETWEEN @max_row_div2 AND @max_row
8815ON DUPLICATE KEY
8816UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8817f_int2 = 2 * @max_row + source_tab.f_int1,
8818f_charbig = 'was updated';
8819
8820# check unique-1-a success: 	1
8821
8822# check unique-1-b success: 	1
8823DELETE FROM t1 WHERE f_charbig = 'was inserted';
8824UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8825f_int2 = CAST(f_char1 AS SIGNED INT),
8826f_charbig = CONCAT('===',f_char1,'===')
8827WHERE f_charbig = 'was updated';
8828REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8829SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8830   FROM t0_template source_tab
8831WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8832
8833# check replace success: 	1
8834DELETE FROM t1
8835WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8836DELETE FROM t1
8837WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8838f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8839UPDATE t1 SET f_int2 = f_int1,
8840f_char1 = CAST(f_int1 AS CHAR),
8841f_char2 = CAST(f_int1 AS CHAR),
8842f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8843WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8844SET AUTOCOMMIT= 0;
8845INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8846SELECT f_int1, f_int1, '', '', 'was inserted'
8847FROM t0_template source_tab
8848WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8849
8850# check transactions-1 success: 	1
8851COMMIT WORK;
8852
8853# check transactions-2 success: 	1
8854ROLLBACK WORK;
8855
8856# check transactions-3 success: 	1
8857DELETE FROM t1 WHERE f_charbig = 'was inserted';
8858COMMIT WORK;
8859ROLLBACK WORK;
8860
8861# check transactions-4 success: 	1
8862INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8863SELECT f_int1, f_int1, '', '', 'was inserted'
8864FROM t0_template source_tab
8865WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8866
8867# check transactions-5 success: 	1
8868ROLLBACK WORK;
8869
8870# check transactions-6 success: 	1
8871# INFO: Storage engine used for t1 seems to be transactional.
8872COMMIT;
8873
8874# check transactions-7 success: 	1
8875DELETE FROM t1 WHERE f_charbig = 'was inserted';
8876COMMIT WORK;
8877SET @@session.sql_mode = 'traditional';
8878Warnings:
8879Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8880SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8881INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8882SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8883'', '', 'was inserted' FROM t0_template
8884WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8885ERROR 22012: Division by 0
8886COMMIT;
8887
8888# check transactions-8 success: 	1
8889# INFO: Storage engine used for t1 seems to be able to revert
8890#       changes made by the failing statement.
8891SET @@session.sql_mode = '';
8892Warnings:
8893Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8894SET AUTOCOMMIT= 1;
8895DELETE FROM t1 WHERE f_charbig = 'was inserted';
8896COMMIT WORK;
8897UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8898
8899# check special-1 success: 	1
8900UPDATE t1 SET f_charbig = '';
8901
8902# check special-2 success: 	1
8903UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8904INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8905SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8906WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8907INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8908SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8909'just inserted' FROM t0_template
8910WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8911CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8912BEGIN
8913UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8914f_charbig = 'updated by trigger'
8915      WHERE f_int1 = new.f_int1;
8916END|
8917INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8918SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8919WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8920
8921# check trigger-1 success: 	1
8922DROP TRIGGER trg_1;
8923UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8924f_int2 = CAST(f_char1 AS SIGNED INT),
8925f_charbig = 'just inserted'
8926   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8927DELETE FROM t0_aux
8928WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8929INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8930SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8931'just inserted' FROM t0_template
8932WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8933CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8934BEGIN
8935UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8936f_charbig = 'updated by trigger'
8937      WHERE f_int1 = new.f_int1;
8938END|
8939INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8940SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8941WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8942
8943# check trigger-2 success: 	1
8944DROP TRIGGER trg_1;
8945UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8946f_int2 = CAST(f_char1 AS SIGNED INT),
8947f_charbig = 'just inserted'
8948   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8949DELETE FROM t0_aux
8950WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8951INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8952SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8953'just inserted' FROM t0_template
8954WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8955CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8956BEGIN
8957UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8958f_charbig = 'updated by trigger'
8959      WHERE f_int1 = new.f_int1;
8960END|
8961UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8962WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8963
8964# check trigger-3 success: 	1
8965DROP TRIGGER trg_1;
8966UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8967f_int2 = CAST(f_char1 AS SIGNED INT),
8968f_charbig = 'just inserted'
8969   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8970DELETE FROM t0_aux
8971WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8972INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8973SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8974'just inserted' FROM t0_template
8975WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8976CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8977BEGIN
8978UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8979f_charbig = 'updated by trigger'
8980      WHERE f_int1 = - old.f_int1;
8981END|
8982UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8983WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8984
8985# check trigger-4 success: 	1
8986DROP TRIGGER trg_1;
8987UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8988f_int2 = CAST(f_char1 AS SIGNED INT),
8989f_charbig = 'just inserted'
8990   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8991DELETE FROM t0_aux
8992WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8993INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8994SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8995'just inserted' FROM t0_template
8996WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8997CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8998BEGIN
8999UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9000f_charbig = 'updated by trigger'
9001      WHERE f_int1 = new.f_int1;
9002END|
9003UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9004WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9005
9006# check trigger-5 success: 	1
9007DROP TRIGGER trg_1;
9008UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9009f_int2 = CAST(f_char1 AS SIGNED INT),
9010f_charbig = 'just inserted'
9011   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9012DELETE FROM t0_aux
9013WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9014INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9015SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9016'just inserted' FROM t0_template
9017WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9018CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9019BEGIN
9020UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9021f_charbig = 'updated by trigger'
9022      WHERE f_int1 = - old.f_int1;
9023END|
9024UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9025WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9026
9027# check trigger-6 success: 	1
9028DROP TRIGGER trg_1;
9029UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9030f_int2 = CAST(f_char1 AS SIGNED INT),
9031f_charbig = 'just inserted'
9032   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9033DELETE FROM t0_aux
9034WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9035INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9036SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9037'just inserted' FROM t0_template
9038WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9039CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9040BEGIN
9041UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9042f_charbig = 'updated by trigger'
9043      WHERE f_int1 = - old.f_int1;
9044END|
9045DELETE FROM t0_aux
9046WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9047
9048# check trigger-7 success: 	1
9049DROP TRIGGER trg_1;
9050UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9051f_int2 = CAST(f_char1 AS SIGNED INT),
9052f_charbig = 'just inserted'
9053   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9054DELETE FROM t0_aux
9055WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9056INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9057SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9058'just inserted' FROM t0_template
9059WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9060CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9061BEGIN
9062UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9063f_charbig = 'updated by trigger'
9064      WHERE f_int1 = - old.f_int1;
9065END|
9066DELETE FROM t0_aux
9067WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9068
9069# check trigger-8 success: 	1
9070DROP TRIGGER trg_1;
9071UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9072f_int2 = CAST(f_char1 AS SIGNED INT),
9073f_charbig = 'just inserted'
9074   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9075DELETE FROM t0_aux
9076WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9077DELETE FROM t1
9078WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9079CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9080BEGIN
9081SET new.f_int1 = old.f_int1 + @max_row,
9082new.f_int2 = old.f_int2 - @max_row,
9083new.f_charbig = '####updated per update trigger####';
9084END|
9085UPDATE t1
9086SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9087f_charbig = '####updated per update statement itself####';
9088
9089# check trigger-9 success: 	1
9090DROP TRIGGER trg_2;
9091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9092f_int2 = CAST(f_char1 AS SIGNED INT),
9093f_charbig = CONCAT('===',f_char1,'===');
9094CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9095BEGIN
9096SET new.f_int1 = new.f_int1 + @max_row,
9097new.f_int2 = new.f_int2 - @max_row,
9098new.f_charbig = '####updated per update trigger####';
9099END|
9100UPDATE t1
9101SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9102f_charbig = '####updated per update statement itself####';
9103
9104# check trigger-10 success: 	1
9105DROP TRIGGER trg_2;
9106UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9107f_int2 = CAST(f_char1 AS SIGNED INT),
9108f_charbig = CONCAT('===',f_char1,'===');
9109CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9110BEGIN
9111SET new.f_int1 = @my_max1 + @counter,
9112new.f_int2 = @my_min2 - @counter,
9113new.f_charbig = '####updated per insert trigger####';
9114SET @counter = @counter + 1;
9115END|
9116SET @counter = 1;
9117SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9118INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9119SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9120CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9121WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9122ORDER BY f_int1;
9123DROP TRIGGER trg_3;
9124
9125# check trigger-11 success: 	1
9126DELETE FROM t1
9127WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9128AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9129AND f_charbig = '####updated per insert trigger####';
9130CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9131BEGIN
9132SET new.f_int1 = @my_max1 + @counter,
9133new.f_int2 = @my_min2 - @counter,
9134new.f_charbig = '####updated per insert trigger####';
9135SET @counter = @counter + 1;
9136END|
9137SET @counter = 1;
9138SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9139INSERT INTO t1 (f_char1, f_char2, f_charbig)
9140SELECT CAST(f_int1 AS CHAR),
9141CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9142WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9143ORDER BY f_int1;
9144DROP TRIGGER trg_3;
9145
9146# check trigger-12 success: 	1
9147DELETE FROM t1
9148WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9149AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9150AND f_charbig = '####updated per insert trigger####';
9151ANALYZE  TABLE t1;
9152Table	Op	Msg_type	Msg_text
9153test.t1	analyze	status	OK
9154CHECK    TABLE t1 EXTENDED;
9155Table	Op	Msg_type	Msg_text
9156test.t1	check	status	OK
9157CHECKSUM TABLE t1 EXTENDED;
9158Table	Checksum
9159test.t1	<some_value>
9160OPTIMIZE TABLE t1;
9161Table	Op	Msg_type	Msg_text
9162test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9163test.t1	optimize	status	OK
9164# check layout success:    1
9165REPAIR   TABLE t1 EXTENDED;
9166Table	Op	Msg_type	Msg_text
9167test.t1	repair	status	OK
9168# check layout success:    1
9169TRUNCATE t1;
9170
9171# check TRUNCATE success: 	1
9172# check layout success:    1
9173# End usability test (inc/partition_check.inc)
9174DROP TABLE t1;
9175CREATE TABLE t1 (
9176f_int1 INTEGER,
9177f_int2 INTEGER,
9178f_char1 CHAR(20),
9179f_char2 CHAR(20),
9180f_charbig VARCHAR(1000)
9181, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
9182)
9183PARTITION BY RANGE(f_int1)
9184(PARTITION parta VALUES LESS THAN (0),
9185PARTITION partb VALUES LESS THAN (5),
9186PARTITION partc VALUES LESS THAN (10),
9187PARTITION partd VALUES LESS THAN (10 + 5),
9188PARTITION parte VALUES LESS THAN (20),
9189PARTITION partf VALUES LESS THAN (2147483646));
9190INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9191SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
9192# Start usability test (inc/partition_check.inc)
9193create_command
9194SHOW CREATE TABLE t1;
9195Table	Create Table
9196t1	CREATE TABLE `t1` (
9197  `f_int1` int(11) NOT NULL,
9198  `f_int2` int(11) NOT NULL,
9199  `f_char1` char(20) DEFAULT NULL,
9200  `f_char2` char(20) DEFAULT NULL,
9201  `f_charbig` varchar(1000) DEFAULT NULL,
9202  PRIMARY KEY (`f_int2`,`f_int1`),
9203  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9204) ENGINE=InnoDB DEFAULT CHARSET=latin1
9205/*!50100 PARTITION BY RANGE (f_int1)
9206(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9207 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9208 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9209 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
9210 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
9211 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9212
9213unified filelist
9214t1#P#parta.ibd
9215t1#P#partb.ibd
9216t1#P#partc.ibd
9217t1#P#partd.ibd
9218t1#P#parte.ibd
9219t1#P#partf.ibd
9220t1.frm
9221
9222# check prerequisites-1 success:    1
9223# check COUNT(*) success:    1
9224# check MIN/MAX(f_int1) success:    1
9225# check MIN/MAX(f_int2) success:    1
9226INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9227SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9228CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9229WHERE f_int1 IN (2,3);
9230ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9231# check prerequisites-3 success:    1
9232# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9233INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9234SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9235CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9236WHERE f_int1 IN (2,3);
9237DELETE FROM t1 WHERE f_charbig = 'delete me';
9238INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9239SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9240CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9241WHERE f_int1 IN (2,3);
9242DELETE FROM t1 WHERE f_charbig = 'delete me';
9243# check read via f_int1 success: 1
9244# check read via f_int2 success: 1
9245
9246# check multiple-1 success: 	1
9247DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9248
9249# check multiple-2 success: 	1
9250INSERT INTO t1 SELECT * FROM t0_template
9251WHERE MOD(f_int1,3) = 0;
9252
9253# check multiple-3 success: 	1
9254UPDATE t1 SET f_int1 = f_int1 + @max_row
9255WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9256AND @max_row_div2 + @max_row_div4;
9257
9258# check multiple-4 success: 	1
9259DELETE FROM t1
9260WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9261AND @max_row_div2 + @max_row_div4 + @max_row;
9262
9263# check multiple-5 success: 	1
9264SELECT COUNT(*) INTO @try_count FROM t0_template
9265WHERE MOD(f_int1,3) = 0
9266AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9267SELECT COUNT(*) INTO @clash_count
9268FROM t1 INNER JOIN t0_template USING(f_int1)
9269WHERE MOD(f_int1,3) = 0
9270AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9271SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9272INSERT INTO t1
9273SET f_int1 = @cur_value , f_int2 = @cur_value,
9274f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9275f_charbig = '#SINGLE#';
9276
9277# check single-1 success: 	1
9278SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9279INSERT INTO t1
9280SET f_int1 = @cur_value , f_int2 = @cur_value,
9281f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9282f_charbig = '#SINGLE#';
9283
9284# check single-2 success: 	1
9285SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9286SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9287UPDATE t1 SET f_int1 = @cur_value2
9288WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9289
9290# check single-3 success: 	1
9291SET @cur_value1= -1;
9292SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9293UPDATE t1 SET f_int1 = @cur_value1
9294WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9295
9296# check single-4 success: 	1
9297SELECT MAX(f_int1) INTO @cur_value FROM t1;
9298DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9299
9300# check single-5 success: 	1
9301DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9302
9303# check single-6 success: 	1
9304INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9305ERROR HY000: Table has no partition for value 2147483647
9306DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9307INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9308f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9309f_charbig = '#NULL#';
9310INSERT INTO t1
9311SET f_int1 = NULL , f_int2 = -@max_row,
9312f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9313f_charbig = '#NULL#';
9314ERROR 23000: Column 'f_int1' cannot be null
9315# check null success:    1
9316DELETE FROM t1
9317WHERE f_int1 = 0 AND f_int2 = 0
9318AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9319AND f_charbig = '#NULL#';
9320INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9321SELECT f_int1, f_int1, '', '', 'was inserted'
9322   FROM t0_template source_tab
9323WHERE MOD(f_int1,3) = 0
9324AND f_int1 BETWEEN @max_row_div2 AND @max_row
9325ON DUPLICATE KEY
9326UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9327f_int2 = 2 * @max_row + source_tab.f_int1,
9328f_charbig = 'was updated';
9329
9330# check unique-1-a success: 	1
9331
9332# check unique-1-b success: 	1
9333DELETE FROM t1 WHERE f_charbig = 'was inserted';
9334UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9335f_int2 = CAST(f_char1 AS SIGNED INT),
9336f_charbig = CONCAT('===',f_char1,'===')
9337WHERE f_charbig = 'was updated';
9338REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9339SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9340   FROM t0_template source_tab
9341WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9342
9343# check replace success: 	1
9344DELETE FROM t1
9345WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9346DELETE FROM t1
9347WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9348f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9349UPDATE t1 SET f_int2 = f_int1,
9350f_char1 = CAST(f_int1 AS CHAR),
9351f_char2 = CAST(f_int1 AS CHAR),
9352f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9353WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9354SET AUTOCOMMIT= 0;
9355INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9356SELECT f_int1, f_int1, '', '', 'was inserted'
9357FROM t0_template source_tab
9358WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9359
9360# check transactions-1 success: 	1
9361COMMIT WORK;
9362
9363# check transactions-2 success: 	1
9364ROLLBACK WORK;
9365
9366# check transactions-3 success: 	1
9367DELETE FROM t1 WHERE f_charbig = 'was inserted';
9368COMMIT WORK;
9369ROLLBACK WORK;
9370
9371# check transactions-4 success: 	1
9372INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9373SELECT f_int1, f_int1, '', '', 'was inserted'
9374FROM t0_template source_tab
9375WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9376
9377# check transactions-5 success: 	1
9378ROLLBACK WORK;
9379
9380# check transactions-6 success: 	1
9381# INFO: Storage engine used for t1 seems to be transactional.
9382COMMIT;
9383
9384# check transactions-7 success: 	1
9385DELETE FROM t1 WHERE f_charbig = 'was inserted';
9386COMMIT WORK;
9387SET @@session.sql_mode = 'traditional';
9388Warnings:
9389Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9390SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9391INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9392SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9393'', '', 'was inserted' FROM t0_template
9394WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9395ERROR 22012: Division by 0
9396COMMIT;
9397
9398# check transactions-8 success: 	1
9399# INFO: Storage engine used for t1 seems to be able to revert
9400#       changes made by the failing statement.
9401SET @@session.sql_mode = '';
9402Warnings:
9403Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9404SET AUTOCOMMIT= 1;
9405DELETE FROM t1 WHERE f_charbig = 'was inserted';
9406COMMIT WORK;
9407UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9408
9409# check special-1 success: 	1
9410UPDATE t1 SET f_charbig = '';
9411
9412# check special-2 success: 	1
9413UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9414INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9415SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9416WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9417INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9418SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9419'just inserted' FROM t0_template
9420WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9421CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9422BEGIN
9423UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9424f_charbig = 'updated by trigger'
9425      WHERE f_int1 = new.f_int1;
9426END|
9427INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9428SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9429WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9430
9431# check trigger-1 success: 	1
9432DROP TRIGGER trg_1;
9433UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9434f_int2 = CAST(f_char1 AS SIGNED INT),
9435f_charbig = 'just inserted'
9436   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9437DELETE FROM t0_aux
9438WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9439INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9440SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9441'just inserted' FROM t0_template
9442WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9443CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9444BEGIN
9445UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9446f_charbig = 'updated by trigger'
9447      WHERE f_int1 = new.f_int1;
9448END|
9449INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9450SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9451WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9452
9453# check trigger-2 success: 	1
9454DROP TRIGGER trg_1;
9455UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9456f_int2 = CAST(f_char1 AS SIGNED INT),
9457f_charbig = 'just inserted'
9458   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9459DELETE FROM t0_aux
9460WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9461INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9462SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9463'just inserted' FROM t0_template
9464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9465CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9466BEGIN
9467UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9468f_charbig = 'updated by trigger'
9469      WHERE f_int1 = new.f_int1;
9470END|
9471UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9472WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9473
9474# check trigger-3 success: 	1
9475DROP TRIGGER trg_1;
9476UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9477f_int2 = CAST(f_char1 AS SIGNED INT),
9478f_charbig = 'just inserted'
9479   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9480DELETE FROM t0_aux
9481WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9482INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9483SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9484'just inserted' FROM t0_template
9485WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9486CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9487BEGIN
9488UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9489f_charbig = 'updated by trigger'
9490      WHERE f_int1 = - old.f_int1;
9491END|
9492UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9493WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9494
9495# check trigger-4 success: 	1
9496DROP TRIGGER trg_1;
9497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9498f_int2 = CAST(f_char1 AS SIGNED INT),
9499f_charbig = 'just inserted'
9500   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9501DELETE FROM t0_aux
9502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9503INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9504SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9505'just inserted' FROM t0_template
9506WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9507CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9508BEGIN
9509UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9510f_charbig = 'updated by trigger'
9511      WHERE f_int1 = new.f_int1;
9512END|
9513UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9514WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9515
9516# check trigger-5 success: 	1
9517DROP TRIGGER trg_1;
9518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9519f_int2 = CAST(f_char1 AS SIGNED INT),
9520f_charbig = 'just inserted'
9521   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9522DELETE FROM t0_aux
9523WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9524INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9525SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9526'just inserted' FROM t0_template
9527WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9528CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9529BEGIN
9530UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9531f_charbig = 'updated by trigger'
9532      WHERE f_int1 = - old.f_int1;
9533END|
9534UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9535WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9536
9537# check trigger-6 success: 	1
9538DROP TRIGGER trg_1;
9539UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9540f_int2 = CAST(f_char1 AS SIGNED INT),
9541f_charbig = 'just inserted'
9542   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9543DELETE FROM t0_aux
9544WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9545INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9546SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9547'just inserted' FROM t0_template
9548WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9549CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9550BEGIN
9551UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9552f_charbig = 'updated by trigger'
9553      WHERE f_int1 = - old.f_int1;
9554END|
9555DELETE FROM t0_aux
9556WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9557
9558# check trigger-7 success: 	1
9559DROP TRIGGER trg_1;
9560UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9561f_int2 = CAST(f_char1 AS SIGNED INT),
9562f_charbig = 'just inserted'
9563   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9564DELETE FROM t0_aux
9565WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9566INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9567SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9568'just inserted' FROM t0_template
9569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9570CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9571BEGIN
9572UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9573f_charbig = 'updated by trigger'
9574      WHERE f_int1 = - old.f_int1;
9575END|
9576DELETE FROM t0_aux
9577WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9578
9579# check trigger-8 success: 	1
9580DROP TRIGGER trg_1;
9581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9582f_int2 = CAST(f_char1 AS SIGNED INT),
9583f_charbig = 'just inserted'
9584   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9585DELETE FROM t0_aux
9586WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9587DELETE FROM t1
9588WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9589CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9590BEGIN
9591SET new.f_int1 = old.f_int1 + @max_row,
9592new.f_int2 = old.f_int2 - @max_row,
9593new.f_charbig = '####updated per update trigger####';
9594END|
9595UPDATE t1
9596SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9597f_charbig = '####updated per update statement itself####';
9598
9599# check trigger-9 success: 	1
9600DROP TRIGGER trg_2;
9601UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9602f_int2 = CAST(f_char1 AS SIGNED INT),
9603f_charbig = CONCAT('===',f_char1,'===');
9604CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9605BEGIN
9606SET new.f_int1 = new.f_int1 + @max_row,
9607new.f_int2 = new.f_int2 - @max_row,
9608new.f_charbig = '####updated per update trigger####';
9609END|
9610UPDATE t1
9611SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9612f_charbig = '####updated per update statement itself####';
9613
9614# check trigger-10 success: 	1
9615DROP TRIGGER trg_2;
9616UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9617f_int2 = CAST(f_char1 AS SIGNED INT),
9618f_charbig = CONCAT('===',f_char1,'===');
9619CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9620BEGIN
9621SET new.f_int1 = @my_max1 + @counter,
9622new.f_int2 = @my_min2 - @counter,
9623new.f_charbig = '####updated per insert trigger####';
9624SET @counter = @counter + 1;
9625END|
9626SET @counter = 1;
9627SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9628INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9629SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9630CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9631WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9632ORDER BY f_int1;
9633DROP TRIGGER trg_3;
9634
9635# check trigger-11 success: 	1
9636DELETE FROM t1
9637WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9638AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9639AND f_charbig = '####updated per insert trigger####';
9640CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9641BEGIN
9642SET new.f_int1 = @my_max1 + @counter,
9643new.f_int2 = @my_min2 - @counter,
9644new.f_charbig = '####updated per insert trigger####';
9645SET @counter = @counter + 1;
9646END|
9647SET @counter = 1;
9648SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9649INSERT INTO t1 (f_char1, f_char2, f_charbig)
9650SELECT CAST(f_int1 AS CHAR),
9651CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9652WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9653ORDER BY f_int1;
9654DROP TRIGGER trg_3;
9655
9656# check trigger-12 success: 	1
9657DELETE FROM t1
9658WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9659AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9660AND f_charbig = '####updated per insert trigger####';
9661ANALYZE  TABLE t1;
9662Table	Op	Msg_type	Msg_text
9663test.t1	analyze	status	OK
9664CHECK    TABLE t1 EXTENDED;
9665Table	Op	Msg_type	Msg_text
9666test.t1	check	status	OK
9667CHECKSUM TABLE t1 EXTENDED;
9668Table	Checksum
9669test.t1	<some_value>
9670OPTIMIZE TABLE t1;
9671Table	Op	Msg_type	Msg_text
9672test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9673test.t1	optimize	status	OK
9674# check layout success:    1
9675REPAIR   TABLE t1 EXTENDED;
9676Table	Op	Msg_type	Msg_text
9677test.t1	repair	status	OK
9678# check layout success:    1
9679TRUNCATE t1;
9680
9681# check TRUNCATE success: 	1
9682# check layout success:    1
9683# End usability test (inc/partition_check.inc)
9684DROP TABLE t1;
9685CREATE TABLE t1 (
9686f_int1 INTEGER,
9687f_int2 INTEGER,
9688f_char1 CHAR(20),
9689f_char2 CHAR(20),
9690f_charbig VARCHAR(1000)
9691, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
9692)
9693PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
9694(PARTITION parta VALUES LESS THAN (0),
9695PARTITION partb VALUES LESS THAN (5),
9696PARTITION partc VALUES LESS THAN (10),
9697PARTITION partd VALUES LESS THAN (2147483646));
9698INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9699SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
9700# Start usability test (inc/partition_check.inc)
9701create_command
9702SHOW CREATE TABLE t1;
9703Table	Create Table
9704t1	CREATE TABLE `t1` (
9705  `f_int1` int(11) NOT NULL,
9706  `f_int2` int(11) NOT NULL,
9707  `f_char1` char(20) DEFAULT NULL,
9708  `f_char2` char(20) DEFAULT NULL,
9709  `f_charbig` varchar(1000) DEFAULT NULL,
9710  PRIMARY KEY (`f_int2`,`f_int1`),
9711  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
9712) ENGINE=InnoDB DEFAULT CHARSET=latin1
9713/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
9714SUBPARTITION BY HASH (f_int1)
9715SUBPARTITIONS 2
9716(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9717 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9718 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9719 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9720
9721unified filelist
9722t1#P#parta#SP#partasp0.ibd
9723t1#P#parta#SP#partasp1.ibd
9724t1#P#partb#SP#partbsp0.ibd
9725t1#P#partb#SP#partbsp1.ibd
9726t1#P#partc#SP#partcsp0.ibd
9727t1#P#partc#SP#partcsp1.ibd
9728t1#P#partd#SP#partdsp0.ibd
9729t1#P#partd#SP#partdsp1.ibd
9730t1.frm
9731
9732# check prerequisites-1 success:    1
9733# check COUNT(*) success:    1
9734# check MIN/MAX(f_int1) success:    1
9735# check MIN/MAX(f_int2) success:    1
9736INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9737SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9738CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9739WHERE f_int1 IN (2,3);
9740ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9741# check prerequisites-3 success:    1
9742# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9743INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9744SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9745CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9746WHERE f_int1 IN (2,3);
9747DELETE FROM t1 WHERE f_charbig = 'delete me';
9748INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9749SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9750CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9751WHERE f_int1 IN (2,3);
9752DELETE FROM t1 WHERE f_charbig = 'delete me';
9753# check read via f_int1 success: 1
9754# check read via f_int2 success: 1
9755
9756# check multiple-1 success: 	1
9757DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9758
9759# check multiple-2 success: 	1
9760INSERT INTO t1 SELECT * FROM t0_template
9761WHERE MOD(f_int1,3) = 0;
9762
9763# check multiple-3 success: 	1
9764UPDATE t1 SET f_int1 = f_int1 + @max_row
9765WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9766AND @max_row_div2 + @max_row_div4;
9767
9768# check multiple-4 success: 	1
9769DELETE FROM t1
9770WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9771AND @max_row_div2 + @max_row_div4 + @max_row;
9772
9773# check multiple-5 success: 	1
9774SELECT COUNT(*) INTO @try_count FROM t0_template
9775WHERE MOD(f_int1,3) = 0
9776AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9777SELECT COUNT(*) INTO @clash_count
9778FROM t1 INNER JOIN t0_template USING(f_int1)
9779WHERE MOD(f_int1,3) = 0
9780AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9781SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9782INSERT INTO t1
9783SET f_int1 = @cur_value , f_int2 = @cur_value,
9784f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9785f_charbig = '#SINGLE#';
9786
9787# check single-1 success: 	1
9788SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9789INSERT INTO t1
9790SET f_int1 = @cur_value , f_int2 = @cur_value,
9791f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9792f_charbig = '#SINGLE#';
9793
9794# check single-2 success: 	1
9795SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9796SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9797UPDATE t1 SET f_int1 = @cur_value2
9798WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9799
9800# check single-3 success: 	1
9801SET @cur_value1= -1;
9802SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9803UPDATE t1 SET f_int1 = @cur_value1
9804WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9805
9806# check single-4 success: 	1
9807SELECT MAX(f_int1) INTO @cur_value FROM t1;
9808DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9809
9810# check single-5 success: 	1
9811DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9812
9813# check single-6 success: 	1
9814INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9815
9816# check single-7 success: 	1
9817DELETE FROM t1 WHERE f_charbig = '#2147483647##';
9818DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9819INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9820f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9821f_charbig = '#NULL#';
9822INSERT INTO t1
9823SET f_int1 = NULL , f_int2 = -@max_row,
9824f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9825f_charbig = '#NULL#';
9826ERROR 23000: Column 'f_int1' cannot be null
9827# check null success:    1
9828DELETE FROM t1
9829WHERE f_int1 = 0 AND f_int2 = 0
9830AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9831AND f_charbig = '#NULL#';
9832INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9833SELECT f_int1, f_int1, '', '', 'was inserted'
9834   FROM t0_template source_tab
9835WHERE MOD(f_int1,3) = 0
9836AND f_int1 BETWEEN @max_row_div2 AND @max_row
9837ON DUPLICATE KEY
9838UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9839f_int2 = 2 * @max_row + source_tab.f_int1,
9840f_charbig = 'was updated';
9841
9842# check unique-1-a success: 	1
9843
9844# check unique-1-b success: 	1
9845DELETE FROM t1 WHERE f_charbig = 'was inserted';
9846UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9847f_int2 = CAST(f_char1 AS SIGNED INT),
9848f_charbig = CONCAT('===',f_char1,'===')
9849WHERE f_charbig = 'was updated';
9850REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9851SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9852   FROM t0_template source_tab
9853WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9854
9855# check replace success: 	1
9856DELETE FROM t1
9857WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9858DELETE FROM t1
9859WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9860f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9861UPDATE t1 SET f_int2 = f_int1,
9862f_char1 = CAST(f_int1 AS CHAR),
9863f_char2 = CAST(f_int1 AS CHAR),
9864f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9865WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9866SET AUTOCOMMIT= 0;
9867INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9868SELECT f_int1, f_int1, '', '', 'was inserted'
9869FROM t0_template source_tab
9870WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9871
9872# check transactions-1 success: 	1
9873COMMIT WORK;
9874
9875# check transactions-2 success: 	1
9876ROLLBACK WORK;
9877
9878# check transactions-3 success: 	1
9879DELETE FROM t1 WHERE f_charbig = 'was inserted';
9880COMMIT WORK;
9881ROLLBACK WORK;
9882
9883# check transactions-4 success: 	1
9884INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9885SELECT f_int1, f_int1, '', '', 'was inserted'
9886FROM t0_template source_tab
9887WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9888
9889# check transactions-5 success: 	1
9890ROLLBACK WORK;
9891
9892# check transactions-6 success: 	1
9893# INFO: Storage engine used for t1 seems to be transactional.
9894COMMIT;
9895
9896# check transactions-7 success: 	1
9897DELETE FROM t1 WHERE f_charbig = 'was inserted';
9898COMMIT WORK;
9899SET @@session.sql_mode = 'traditional';
9900Warnings:
9901Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9902SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9903INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9904SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9905'', '', 'was inserted' FROM t0_template
9906WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9907ERROR 22012: Division by 0
9908COMMIT;
9909
9910# check transactions-8 success: 	1
9911# INFO: Storage engine used for t1 seems to be able to revert
9912#       changes made by the failing statement.
9913SET @@session.sql_mode = '';
9914Warnings:
9915Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9916SET AUTOCOMMIT= 1;
9917DELETE FROM t1 WHERE f_charbig = 'was inserted';
9918COMMIT WORK;
9919UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9920
9921# check special-1 success: 	1
9922UPDATE t1 SET f_charbig = '';
9923
9924# check special-2 success: 	1
9925UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9926INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9927SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9928WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9929INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9930SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9931'just inserted' FROM t0_template
9932WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9933CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9934BEGIN
9935UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9936f_charbig = 'updated by trigger'
9937      WHERE f_int1 = new.f_int1;
9938END|
9939INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9940SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9941WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9942
9943# check trigger-1 success: 	1
9944DROP TRIGGER trg_1;
9945UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9946f_int2 = CAST(f_char1 AS SIGNED INT),
9947f_charbig = 'just inserted'
9948   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9949DELETE FROM t0_aux
9950WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9951INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9952SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9953'just inserted' FROM t0_template
9954WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9955CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9956BEGIN
9957UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9958f_charbig = 'updated by trigger'
9959      WHERE f_int1 = new.f_int1;
9960END|
9961INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9962SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9963WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9964
9965# check trigger-2 success: 	1
9966DROP TRIGGER trg_1;
9967UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9968f_int2 = CAST(f_char1 AS SIGNED INT),
9969f_charbig = 'just inserted'
9970   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9971DELETE FROM t0_aux
9972WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9973INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9974SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9975'just inserted' FROM t0_template
9976WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9977CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9978BEGIN
9979UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9980f_charbig = 'updated by trigger'
9981      WHERE f_int1 = new.f_int1;
9982END|
9983UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9984WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9985
9986# check trigger-3 success: 	1
9987DROP TRIGGER trg_1;
9988UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9989f_int2 = CAST(f_char1 AS SIGNED INT),
9990f_charbig = 'just inserted'
9991   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9992DELETE FROM t0_aux
9993WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9994INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9995SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9996'just inserted' FROM t0_template
9997WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9998CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9999BEGIN
10000UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10001f_charbig = 'updated by trigger'
10002      WHERE f_int1 = - old.f_int1;
10003END|
10004UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10005WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10006
10007# check trigger-4 success: 	1
10008DROP TRIGGER trg_1;
10009UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10010f_int2 = CAST(f_char1 AS SIGNED INT),
10011f_charbig = 'just inserted'
10012   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10013DELETE FROM t0_aux
10014WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10015INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10016SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10017'just inserted' FROM t0_template
10018WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10019CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10020BEGIN
10021UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10022f_charbig = 'updated by trigger'
10023      WHERE f_int1 = new.f_int1;
10024END|
10025UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10026WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10027
10028# check trigger-5 success: 	1
10029DROP TRIGGER trg_1;
10030UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10031f_int2 = CAST(f_char1 AS SIGNED INT),
10032f_charbig = 'just inserted'
10033   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10034DELETE FROM t0_aux
10035WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10036INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10037SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10038'just inserted' FROM t0_template
10039WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10040CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10041BEGIN
10042UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10043f_charbig = 'updated by trigger'
10044      WHERE f_int1 = - old.f_int1;
10045END|
10046UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10047WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10048
10049# check trigger-6 success: 	1
10050DROP TRIGGER trg_1;
10051UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10052f_int2 = CAST(f_char1 AS SIGNED INT),
10053f_charbig = 'just inserted'
10054   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10055DELETE FROM t0_aux
10056WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10057INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10058SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10059'just inserted' FROM t0_template
10060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10061CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10062BEGIN
10063UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10064f_charbig = 'updated by trigger'
10065      WHERE f_int1 = - old.f_int1;
10066END|
10067DELETE FROM t0_aux
10068WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10069
10070# check trigger-7 success: 	1
10071DROP TRIGGER trg_1;
10072UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10073f_int2 = CAST(f_char1 AS SIGNED INT),
10074f_charbig = 'just inserted'
10075   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10076DELETE FROM t0_aux
10077WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10078INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10079SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10080'just inserted' FROM t0_template
10081WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10082CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10083BEGIN
10084UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10085f_charbig = 'updated by trigger'
10086      WHERE f_int1 = - old.f_int1;
10087END|
10088DELETE FROM t0_aux
10089WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10090
10091# check trigger-8 success: 	1
10092DROP TRIGGER trg_1;
10093UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10094f_int2 = CAST(f_char1 AS SIGNED INT),
10095f_charbig = 'just inserted'
10096   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10097DELETE FROM t0_aux
10098WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10099DELETE FROM t1
10100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10101CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10102BEGIN
10103SET new.f_int1 = old.f_int1 + @max_row,
10104new.f_int2 = old.f_int2 - @max_row,
10105new.f_charbig = '####updated per update trigger####';
10106END|
10107UPDATE t1
10108SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10109f_charbig = '####updated per update statement itself####';
10110
10111# check trigger-9 success: 	1
10112DROP TRIGGER trg_2;
10113UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10114f_int2 = CAST(f_char1 AS SIGNED INT),
10115f_charbig = CONCAT('===',f_char1,'===');
10116CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10117BEGIN
10118SET new.f_int1 = new.f_int1 + @max_row,
10119new.f_int2 = new.f_int2 - @max_row,
10120new.f_charbig = '####updated per update trigger####';
10121END|
10122UPDATE t1
10123SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10124f_charbig = '####updated per update statement itself####';
10125
10126# check trigger-10 success: 	1
10127DROP TRIGGER trg_2;
10128UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10129f_int2 = CAST(f_char1 AS SIGNED INT),
10130f_charbig = CONCAT('===',f_char1,'===');
10131CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10132BEGIN
10133SET new.f_int1 = @my_max1 + @counter,
10134new.f_int2 = @my_min2 - @counter,
10135new.f_charbig = '####updated per insert trigger####';
10136SET @counter = @counter + 1;
10137END|
10138SET @counter = 1;
10139SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10140INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10141SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10142CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10144ORDER BY f_int1;
10145DROP TRIGGER trg_3;
10146
10147# check trigger-11 success: 	1
10148DELETE FROM t1
10149WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10150AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10151AND f_charbig = '####updated per insert trigger####';
10152CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10153BEGIN
10154SET new.f_int1 = @my_max1 + @counter,
10155new.f_int2 = @my_min2 - @counter,
10156new.f_charbig = '####updated per insert trigger####';
10157SET @counter = @counter + 1;
10158END|
10159SET @counter = 1;
10160SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10161INSERT INTO t1 (f_char1, f_char2, f_charbig)
10162SELECT CAST(f_int1 AS CHAR),
10163CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10165ORDER BY f_int1;
10166DROP TRIGGER trg_3;
10167
10168# check trigger-12 success: 	1
10169DELETE FROM t1
10170WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10171AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10172AND f_charbig = '####updated per insert trigger####';
10173ANALYZE  TABLE t1;
10174Table	Op	Msg_type	Msg_text
10175test.t1	analyze	status	OK
10176CHECK    TABLE t1 EXTENDED;
10177Table	Op	Msg_type	Msg_text
10178test.t1	check	status	OK
10179CHECKSUM TABLE t1 EXTENDED;
10180Table	Checksum
10181test.t1	<some_value>
10182OPTIMIZE TABLE t1;
10183Table	Op	Msg_type	Msg_text
10184test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10185test.t1	optimize	status	OK
10186# check layout success:    1
10187REPAIR   TABLE t1 EXTENDED;
10188Table	Op	Msg_type	Msg_text
10189test.t1	repair	status	OK
10190# check layout success:    1
10191TRUNCATE t1;
10192
10193# check TRUNCATE success: 	1
10194# check layout success:    1
10195# End usability test (inc/partition_check.inc)
10196DROP TABLE t1;
10197CREATE TABLE t1 (
10198f_int1 INTEGER,
10199f_int2 INTEGER,
10200f_char1 CHAR(20),
10201f_char2 CHAR(20),
10202f_charbig VARCHAR(1000)
10203, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
10204)
10205PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
10206(PARTITION part1 VALUES LESS THAN (0)
10207(SUBPARTITION subpart11, SUBPARTITION subpart12),
10208PARTITION part2 VALUES LESS THAN (5)
10209(SUBPARTITION subpart21, SUBPARTITION subpart22),
10210PARTITION part3 VALUES LESS THAN (10)
10211(SUBPARTITION subpart31, SUBPARTITION subpart32),
10212PARTITION part4 VALUES LESS THAN (2147483646)
10213(SUBPARTITION subpart41, SUBPARTITION subpart42));
10214INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10215SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
10216# Start usability test (inc/partition_check.inc)
10217create_command
10218SHOW CREATE TABLE t1;
10219Table	Create Table
10220t1	CREATE TABLE `t1` (
10221  `f_int1` int(11) NOT NULL,
10222  `f_int2` int(11) NOT NULL,
10223  `f_char1` char(20) DEFAULT NULL,
10224  `f_char2` char(20) DEFAULT NULL,
10225  `f_charbig` varchar(1000) DEFAULT NULL,
10226  PRIMARY KEY (`f_int2`,`f_int1`),
10227  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10228) ENGINE=InnoDB DEFAULT CHARSET=latin1
10229/*!50100 PARTITION BY RANGE (f_int1)
10230SUBPARTITION BY KEY (f_int1)
10231(PARTITION part1 VALUES LESS THAN (0)
10232 (SUBPARTITION subpart11 ENGINE = InnoDB,
10233  SUBPARTITION subpart12 ENGINE = InnoDB),
10234 PARTITION part2 VALUES LESS THAN (5)
10235 (SUBPARTITION subpart21 ENGINE = InnoDB,
10236  SUBPARTITION subpart22 ENGINE = InnoDB),
10237 PARTITION part3 VALUES LESS THAN (10)
10238 (SUBPARTITION subpart31 ENGINE = InnoDB,
10239  SUBPARTITION subpart32 ENGINE = InnoDB),
10240 PARTITION part4 VALUES LESS THAN (2147483646)
10241 (SUBPARTITION subpart41 ENGINE = InnoDB,
10242  SUBPARTITION subpart42 ENGINE = InnoDB)) */
10243
10244unified filelist
10245t1#P#part1#SP#subpart11.ibd
10246t1#P#part1#SP#subpart12.ibd
10247t1#P#part2#SP#subpart21.ibd
10248t1#P#part2#SP#subpart22.ibd
10249t1#P#part3#SP#subpart31.ibd
10250t1#P#part3#SP#subpart32.ibd
10251t1#P#part4#SP#subpart41.ibd
10252t1#P#part4#SP#subpart42.ibd
10253t1.frm
10254
10255# check prerequisites-1 success:    1
10256# check COUNT(*) success:    1
10257# check MIN/MAX(f_int1) success:    1
10258# check MIN/MAX(f_int2) success:    1
10259INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10260SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10261CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10262WHERE f_int1 IN (2,3);
10263ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10264# check prerequisites-3 success:    1
10265# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10266INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10267SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10268CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10269WHERE f_int1 IN (2,3);
10270DELETE FROM t1 WHERE f_charbig = 'delete me';
10271INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10272SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10273CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10274WHERE f_int1 IN (2,3);
10275DELETE FROM t1 WHERE f_charbig = 'delete me';
10276# check read via f_int1 success: 1
10277# check read via f_int2 success: 1
10278
10279# check multiple-1 success: 	1
10280DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10281
10282# check multiple-2 success: 	1
10283INSERT INTO t1 SELECT * FROM t0_template
10284WHERE MOD(f_int1,3) = 0;
10285
10286# check multiple-3 success: 	1
10287UPDATE t1 SET f_int1 = f_int1 + @max_row
10288WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10289AND @max_row_div2 + @max_row_div4;
10290
10291# check multiple-4 success: 	1
10292DELETE FROM t1
10293WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10294AND @max_row_div2 + @max_row_div4 + @max_row;
10295
10296# check multiple-5 success: 	1
10297SELECT COUNT(*) INTO @try_count FROM t0_template
10298WHERE MOD(f_int1,3) = 0
10299AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10300SELECT COUNT(*) INTO @clash_count
10301FROM t1 INNER JOIN t0_template USING(f_int1)
10302WHERE MOD(f_int1,3) = 0
10303AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10304SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10305INSERT INTO t1
10306SET f_int1 = @cur_value , f_int2 = @cur_value,
10307f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10308f_charbig = '#SINGLE#';
10309
10310# check single-1 success: 	1
10311SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10312INSERT INTO t1
10313SET f_int1 = @cur_value , f_int2 = @cur_value,
10314f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10315f_charbig = '#SINGLE#';
10316
10317# check single-2 success: 	1
10318SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10319SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10320UPDATE t1 SET f_int1 = @cur_value2
10321WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10322
10323# check single-3 success: 	1
10324SET @cur_value1= -1;
10325SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10326UPDATE t1 SET f_int1 = @cur_value1
10327WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10328
10329# check single-4 success: 	1
10330SELECT MAX(f_int1) INTO @cur_value FROM t1;
10331DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10332
10333# check single-5 success: 	1
10334DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10335
10336# check single-6 success: 	1
10337INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10338ERROR HY000: Table has no partition for value 2147483647
10339DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10340INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10341f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10342f_charbig = '#NULL#';
10343INSERT INTO t1
10344SET f_int1 = NULL , f_int2 = -@max_row,
10345f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10346f_charbig = '#NULL#';
10347ERROR 23000: Column 'f_int1' cannot be null
10348# check null success:    1
10349DELETE FROM t1
10350WHERE f_int1 = 0 AND f_int2 = 0
10351AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10352AND f_charbig = '#NULL#';
10353INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10354SELECT f_int1, f_int1, '', '', 'was inserted'
10355   FROM t0_template source_tab
10356WHERE MOD(f_int1,3) = 0
10357AND f_int1 BETWEEN @max_row_div2 AND @max_row
10358ON DUPLICATE KEY
10359UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10360f_int2 = 2 * @max_row + source_tab.f_int1,
10361f_charbig = 'was updated';
10362
10363# check unique-1-a success: 	1
10364
10365# check unique-1-b success: 	1
10366DELETE FROM t1 WHERE f_charbig = 'was inserted';
10367UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10368f_int2 = CAST(f_char1 AS SIGNED INT),
10369f_charbig = CONCAT('===',f_char1,'===')
10370WHERE f_charbig = 'was updated';
10371REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10372SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10373   FROM t0_template source_tab
10374WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10375
10376# check replace success: 	1
10377DELETE FROM t1
10378WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10379DELETE FROM t1
10380WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10381f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10382UPDATE t1 SET f_int2 = f_int1,
10383f_char1 = CAST(f_int1 AS CHAR),
10384f_char2 = CAST(f_int1 AS CHAR),
10385f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10386WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10387SET AUTOCOMMIT= 0;
10388INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10389SELECT f_int1, f_int1, '', '', 'was inserted'
10390FROM t0_template source_tab
10391WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10392
10393# check transactions-1 success: 	1
10394COMMIT WORK;
10395
10396# check transactions-2 success: 	1
10397ROLLBACK WORK;
10398
10399# check transactions-3 success: 	1
10400DELETE FROM t1 WHERE f_charbig = 'was inserted';
10401COMMIT WORK;
10402ROLLBACK WORK;
10403
10404# check transactions-4 success: 	1
10405INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10406SELECT f_int1, f_int1, '', '', 'was inserted'
10407FROM t0_template source_tab
10408WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10409
10410# check transactions-5 success: 	1
10411ROLLBACK WORK;
10412
10413# check transactions-6 success: 	1
10414# INFO: Storage engine used for t1 seems to be transactional.
10415COMMIT;
10416
10417# check transactions-7 success: 	1
10418DELETE FROM t1 WHERE f_charbig = 'was inserted';
10419COMMIT WORK;
10420SET @@session.sql_mode = 'traditional';
10421Warnings:
10422Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10423SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10424INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10425SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10426'', '', 'was inserted' FROM t0_template
10427WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10428ERROR 22012: Division by 0
10429COMMIT;
10430
10431# check transactions-8 success: 	1
10432# INFO: Storage engine used for t1 seems to be able to revert
10433#       changes made by the failing statement.
10434SET @@session.sql_mode = '';
10435Warnings:
10436Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10437SET AUTOCOMMIT= 1;
10438DELETE FROM t1 WHERE f_charbig = 'was inserted';
10439COMMIT WORK;
10440UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10441
10442# check special-1 success: 	1
10443UPDATE t1 SET f_charbig = '';
10444
10445# check special-2 success: 	1
10446UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10447INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10448SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10450INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10451SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10452'just inserted' FROM t0_template
10453WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10454CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10455BEGIN
10456UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10457f_charbig = 'updated by trigger'
10458      WHERE f_int1 = new.f_int1;
10459END|
10460INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10461SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10462WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10463
10464# check trigger-1 success: 	1
10465DROP TRIGGER trg_1;
10466UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10467f_int2 = CAST(f_char1 AS SIGNED INT),
10468f_charbig = 'just inserted'
10469   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10470DELETE FROM t0_aux
10471WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10472INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10473SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10474'just inserted' FROM t0_template
10475WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10476CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10477BEGIN
10478UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10479f_charbig = 'updated by trigger'
10480      WHERE f_int1 = new.f_int1;
10481END|
10482INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10483SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10484WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10485
10486# check trigger-2 success: 	1
10487DROP TRIGGER trg_1;
10488UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10489f_int2 = CAST(f_char1 AS SIGNED INT),
10490f_charbig = 'just inserted'
10491   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10492DELETE FROM t0_aux
10493WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10494INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10495SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10496'just inserted' FROM t0_template
10497WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10498CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10499BEGIN
10500UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10501f_charbig = 'updated by trigger'
10502      WHERE f_int1 = new.f_int1;
10503END|
10504UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10505WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10506
10507# check trigger-3 success: 	1
10508DROP TRIGGER trg_1;
10509UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10510f_int2 = CAST(f_char1 AS SIGNED INT),
10511f_charbig = 'just inserted'
10512   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10513DELETE FROM t0_aux
10514WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10515INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10516SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10517'just inserted' FROM t0_template
10518WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10519CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10520BEGIN
10521UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10522f_charbig = 'updated by trigger'
10523      WHERE f_int1 = - old.f_int1;
10524END|
10525UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10526WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10527
10528# check trigger-4 success: 	1
10529DROP TRIGGER trg_1;
10530UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10531f_int2 = CAST(f_char1 AS SIGNED INT),
10532f_charbig = 'just inserted'
10533   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10534DELETE FROM t0_aux
10535WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10536INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10537SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10538'just inserted' FROM t0_template
10539WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10540CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10541BEGIN
10542UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10543f_charbig = 'updated by trigger'
10544      WHERE f_int1 = new.f_int1;
10545END|
10546UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10547WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10548
10549# check trigger-5 success: 	1
10550DROP TRIGGER trg_1;
10551UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10552f_int2 = CAST(f_char1 AS SIGNED INT),
10553f_charbig = 'just inserted'
10554   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10555DELETE FROM t0_aux
10556WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10557INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10558SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10559'just inserted' FROM t0_template
10560WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10561CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10562BEGIN
10563UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10564f_charbig = 'updated by trigger'
10565      WHERE f_int1 = - old.f_int1;
10566END|
10567UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10568WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10569
10570# check trigger-6 success: 	1
10571DROP TRIGGER trg_1;
10572UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10573f_int2 = CAST(f_char1 AS SIGNED INT),
10574f_charbig = 'just inserted'
10575   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10576DELETE FROM t0_aux
10577WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10578INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10579SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10580'just inserted' FROM t0_template
10581WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10582CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10583BEGIN
10584UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10585f_charbig = 'updated by trigger'
10586      WHERE f_int1 = - old.f_int1;
10587END|
10588DELETE FROM t0_aux
10589WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10590
10591# check trigger-7 success: 	1
10592DROP TRIGGER trg_1;
10593UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10594f_int2 = CAST(f_char1 AS SIGNED INT),
10595f_charbig = 'just inserted'
10596   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10597DELETE FROM t0_aux
10598WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10600SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10601'just inserted' FROM t0_template
10602WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10603CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10604BEGIN
10605UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10606f_charbig = 'updated by trigger'
10607      WHERE f_int1 = - old.f_int1;
10608END|
10609DELETE FROM t0_aux
10610WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10611
10612# check trigger-8 success: 	1
10613DROP TRIGGER trg_1;
10614UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10615f_int2 = CAST(f_char1 AS SIGNED INT),
10616f_charbig = 'just inserted'
10617   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10618DELETE FROM t0_aux
10619WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10620DELETE FROM t1
10621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10622CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10623BEGIN
10624SET new.f_int1 = old.f_int1 + @max_row,
10625new.f_int2 = old.f_int2 - @max_row,
10626new.f_charbig = '####updated per update trigger####';
10627END|
10628UPDATE t1
10629SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10630f_charbig = '####updated per update statement itself####';
10631
10632# check trigger-9 success: 	1
10633DROP TRIGGER trg_2;
10634UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10635f_int2 = CAST(f_char1 AS SIGNED INT),
10636f_charbig = CONCAT('===',f_char1,'===');
10637CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10638BEGIN
10639SET new.f_int1 = new.f_int1 + @max_row,
10640new.f_int2 = new.f_int2 - @max_row,
10641new.f_charbig = '####updated per update trigger####';
10642END|
10643UPDATE t1
10644SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10645f_charbig = '####updated per update statement itself####';
10646
10647# check trigger-10 success: 	1
10648DROP TRIGGER trg_2;
10649UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10650f_int2 = CAST(f_char1 AS SIGNED INT),
10651f_charbig = CONCAT('===',f_char1,'===');
10652CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10653BEGIN
10654SET new.f_int1 = @my_max1 + @counter,
10655new.f_int2 = @my_min2 - @counter,
10656new.f_charbig = '####updated per insert trigger####';
10657SET @counter = @counter + 1;
10658END|
10659SET @counter = 1;
10660SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10661INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10662SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10663CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10664WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10665ORDER BY f_int1;
10666DROP TRIGGER trg_3;
10667
10668# check trigger-11 success: 	1
10669DELETE FROM t1
10670WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10671AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10672AND f_charbig = '####updated per insert trigger####';
10673CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10674BEGIN
10675SET new.f_int1 = @my_max1 + @counter,
10676new.f_int2 = @my_min2 - @counter,
10677new.f_charbig = '####updated per insert trigger####';
10678SET @counter = @counter + 1;
10679END|
10680SET @counter = 1;
10681SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10682INSERT INTO t1 (f_char1, f_char2, f_charbig)
10683SELECT CAST(f_int1 AS CHAR),
10684CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10685WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10686ORDER BY f_int1;
10687DROP TRIGGER trg_3;
10688
10689# check trigger-12 success: 	1
10690DELETE FROM t1
10691WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10692AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10693AND f_charbig = '####updated per insert trigger####';
10694ANALYZE  TABLE t1;
10695Table	Op	Msg_type	Msg_text
10696test.t1	analyze	status	OK
10697CHECK    TABLE t1 EXTENDED;
10698Table	Op	Msg_type	Msg_text
10699test.t1	check	status	OK
10700CHECKSUM TABLE t1 EXTENDED;
10701Table	Checksum
10702test.t1	<some_value>
10703OPTIMIZE TABLE t1;
10704Table	Op	Msg_type	Msg_text
10705test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10706test.t1	optimize	status	OK
10707# check layout success:    1
10708REPAIR   TABLE t1 EXTENDED;
10709Table	Op	Msg_type	Msg_text
10710test.t1	repair	status	OK
10711# check layout success:    1
10712TRUNCATE t1;
10713
10714# check TRUNCATE success: 	1
10715# check layout success:    1
10716# End usability test (inc/partition_check.inc)
10717DROP TABLE t1;
10718CREATE TABLE t1 (
10719f_int1 INTEGER,
10720f_int2 INTEGER,
10721f_char1 CHAR(20),
10722f_char2 CHAR(20),
10723f_charbig VARCHAR(1000)
10724, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
10725)
10726PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
10727(PARTITION part1 VALUES IN (0)
10728(SUBPARTITION sp11,
10729SUBPARTITION sp12),
10730PARTITION part2 VALUES IN (1)
10731(SUBPARTITION sp21,
10732SUBPARTITION sp22),
10733PARTITION part3 VALUES IN (2)
10734(SUBPARTITION sp31,
10735SUBPARTITION sp32),
10736PARTITION part4 VALUES IN (NULL)
10737(SUBPARTITION sp41,
10738SUBPARTITION sp42));
10739INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10740SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
10741# Start usability test (inc/partition_check.inc)
10742create_command
10743SHOW CREATE TABLE t1;
10744Table	Create Table
10745t1	CREATE TABLE `t1` (
10746  `f_int1` int(11) NOT NULL,
10747  `f_int2` int(11) NOT NULL,
10748  `f_char1` char(20) DEFAULT NULL,
10749  `f_char2` char(20) DEFAULT NULL,
10750  `f_charbig` varchar(1000) DEFAULT NULL,
10751  PRIMARY KEY (`f_int2`,`f_int1`),
10752  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
10753) ENGINE=InnoDB DEFAULT CHARSET=latin1
10754/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
10755SUBPARTITION BY HASH (f_int1 + 1)
10756(PARTITION part1 VALUES IN (0)
10757 (SUBPARTITION sp11 ENGINE = InnoDB,
10758  SUBPARTITION sp12 ENGINE = InnoDB),
10759 PARTITION part2 VALUES IN (1)
10760 (SUBPARTITION sp21 ENGINE = InnoDB,
10761  SUBPARTITION sp22 ENGINE = InnoDB),
10762 PARTITION part3 VALUES IN (2)
10763 (SUBPARTITION sp31 ENGINE = InnoDB,
10764  SUBPARTITION sp32 ENGINE = InnoDB),
10765 PARTITION part4 VALUES IN (NULL)
10766 (SUBPARTITION sp41 ENGINE = InnoDB,
10767  SUBPARTITION sp42 ENGINE = InnoDB)) */
10768
10769unified filelist
10770t1#P#part1#SP#sp11.ibd
10771t1#P#part1#SP#sp12.ibd
10772t1#P#part2#SP#sp21.ibd
10773t1#P#part2#SP#sp22.ibd
10774t1#P#part3#SP#sp31.ibd
10775t1#P#part3#SP#sp32.ibd
10776t1#P#part4#SP#sp41.ibd
10777t1#P#part4#SP#sp42.ibd
10778t1.frm
10779
10780# check prerequisites-1 success:    1
10781# check COUNT(*) success:    1
10782# check MIN/MAX(f_int1) success:    1
10783# check MIN/MAX(f_int2) success:    1
10784INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10785SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10786CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10787WHERE f_int1 IN (2,3);
10788ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10789# check prerequisites-3 success:    1
10790# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10791INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10792SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10793CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10794WHERE f_int1 IN (2,3);
10795DELETE FROM t1 WHERE f_charbig = 'delete me';
10796INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10797SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10798CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10799WHERE f_int1 IN (2,3);
10800DELETE FROM t1 WHERE f_charbig = 'delete me';
10801# check read via f_int1 success: 1
10802# check read via f_int2 success: 1
10803
10804# check multiple-1 success: 	1
10805DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10806
10807# check multiple-2 success: 	1
10808INSERT INTO t1 SELECT * FROM t0_template
10809WHERE MOD(f_int1,3) = 0;
10810
10811# check multiple-3 success: 	1
10812UPDATE t1 SET f_int1 = f_int1 + @max_row
10813WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10814AND @max_row_div2 + @max_row_div4;
10815
10816# check multiple-4 success: 	1
10817DELETE FROM t1
10818WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10819AND @max_row_div2 + @max_row_div4 + @max_row;
10820
10821# check multiple-5 success: 	1
10822SELECT COUNT(*) INTO @try_count FROM t0_template
10823WHERE MOD(f_int1,3) = 0
10824AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10825SELECT COUNT(*) INTO @clash_count
10826FROM t1 INNER JOIN t0_template USING(f_int1)
10827WHERE MOD(f_int1,3) = 0
10828AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10829SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10830INSERT INTO t1
10831SET f_int1 = @cur_value , f_int2 = @cur_value,
10832f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10833f_charbig = '#SINGLE#';
10834
10835# check single-1 success: 	1
10836SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10837INSERT INTO t1
10838SET f_int1 = @cur_value , f_int2 = @cur_value,
10839f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10840f_charbig = '#SINGLE#';
10841
10842# check single-2 success: 	1
10843SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10844SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10845UPDATE t1 SET f_int1 = @cur_value2
10846WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10847
10848# check single-3 success: 	1
10849SET @cur_value1= -1;
10850SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10851UPDATE t1 SET f_int1 = @cur_value1
10852WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10853
10854# check single-4 success: 	1
10855SELECT MAX(f_int1) INTO @cur_value FROM t1;
10856DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10857
10858# check single-5 success: 	1
10859DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10860
10861# check single-6 success: 	1
10862INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10863
10864# check single-7 success: 	1
10865DELETE FROM t1 WHERE f_charbig = '#2147483647##';
10866DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10867INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10868f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10869f_charbig = '#NULL#';
10870INSERT INTO t1
10871SET f_int1 = NULL , f_int2 = -@max_row,
10872f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10873f_charbig = '#NULL#';
10874ERROR 23000: Column 'f_int1' cannot be null
10875# check null success:    1
10876DELETE FROM t1
10877WHERE f_int1 = 0 AND f_int2 = 0
10878AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10879AND f_charbig = '#NULL#';
10880INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10881SELECT f_int1, f_int1, '', '', 'was inserted'
10882   FROM t0_template source_tab
10883WHERE MOD(f_int1,3) = 0
10884AND f_int1 BETWEEN @max_row_div2 AND @max_row
10885ON DUPLICATE KEY
10886UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10887f_int2 = 2 * @max_row + source_tab.f_int1,
10888f_charbig = 'was updated';
10889
10890# check unique-1-a success: 	1
10891
10892# check unique-1-b success: 	1
10893DELETE FROM t1 WHERE f_charbig = 'was inserted';
10894UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10895f_int2 = CAST(f_char1 AS SIGNED INT),
10896f_charbig = CONCAT('===',f_char1,'===')
10897WHERE f_charbig = 'was updated';
10898REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10899SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10900   FROM t0_template source_tab
10901WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10902
10903# check replace success: 	1
10904DELETE FROM t1
10905WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10906DELETE FROM t1
10907WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10908f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10909UPDATE t1 SET f_int2 = f_int1,
10910f_char1 = CAST(f_int1 AS CHAR),
10911f_char2 = CAST(f_int1 AS CHAR),
10912f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10913WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10914SET AUTOCOMMIT= 0;
10915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10916SELECT f_int1, f_int1, '', '', 'was inserted'
10917FROM t0_template source_tab
10918WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10919
10920# check transactions-1 success: 	1
10921COMMIT WORK;
10922
10923# check transactions-2 success: 	1
10924ROLLBACK WORK;
10925
10926# check transactions-3 success: 	1
10927DELETE FROM t1 WHERE f_charbig = 'was inserted';
10928COMMIT WORK;
10929ROLLBACK WORK;
10930
10931# check transactions-4 success: 	1
10932INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10933SELECT f_int1, f_int1, '', '', 'was inserted'
10934FROM t0_template source_tab
10935WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10936
10937# check transactions-5 success: 	1
10938ROLLBACK WORK;
10939
10940# check transactions-6 success: 	1
10941# INFO: Storage engine used for t1 seems to be transactional.
10942COMMIT;
10943
10944# check transactions-7 success: 	1
10945DELETE FROM t1 WHERE f_charbig = 'was inserted';
10946COMMIT WORK;
10947SET @@session.sql_mode = 'traditional';
10948Warnings:
10949Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10950SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10951INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10952SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10953'', '', 'was inserted' FROM t0_template
10954WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10955ERROR 22012: Division by 0
10956COMMIT;
10957
10958# check transactions-8 success: 	1
10959# INFO: Storage engine used for t1 seems to be able to revert
10960#       changes made by the failing statement.
10961SET @@session.sql_mode = '';
10962Warnings:
10963Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10964SET AUTOCOMMIT= 1;
10965DELETE FROM t1 WHERE f_charbig = 'was inserted';
10966COMMIT WORK;
10967UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10968
10969# check special-1 success: 	1
10970UPDATE t1 SET f_charbig = '';
10971
10972# check special-2 success: 	1
10973UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10974INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10975SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10976WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10977INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10978SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10979'just inserted' FROM t0_template
10980WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10981CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10982BEGIN
10983UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10984f_charbig = 'updated by trigger'
10985      WHERE f_int1 = new.f_int1;
10986END|
10987INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10988SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10989WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10990
10991# check trigger-1 success: 	1
10992DROP TRIGGER trg_1;
10993UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10994f_int2 = CAST(f_char1 AS SIGNED INT),
10995f_charbig = 'just inserted'
10996   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10997DELETE FROM t0_aux
10998WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10999INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11000SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11001'just inserted' FROM t0_template
11002WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11003CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11004BEGIN
11005UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11006f_charbig = 'updated by trigger'
11007      WHERE f_int1 = new.f_int1;
11008END|
11009INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11010SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11011WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11012
11013# check trigger-2 success: 	1
11014DROP TRIGGER trg_1;
11015UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11016f_int2 = CAST(f_char1 AS SIGNED INT),
11017f_charbig = 'just inserted'
11018   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11019DELETE FROM t0_aux
11020WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11021INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11022SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11023'just inserted' FROM t0_template
11024WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11025CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11026BEGIN
11027UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11028f_charbig = 'updated by trigger'
11029      WHERE f_int1 = new.f_int1;
11030END|
11031UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11032WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11033
11034# check trigger-3 success: 	1
11035DROP TRIGGER trg_1;
11036UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11037f_int2 = CAST(f_char1 AS SIGNED INT),
11038f_charbig = 'just inserted'
11039   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11040DELETE FROM t0_aux
11041WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11042INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11043SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11044'just inserted' FROM t0_template
11045WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11046CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11047BEGIN
11048UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11049f_charbig = 'updated by trigger'
11050      WHERE f_int1 = - old.f_int1;
11051END|
11052UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11053WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11054
11055# check trigger-4 success: 	1
11056DROP TRIGGER trg_1;
11057UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11058f_int2 = CAST(f_char1 AS SIGNED INT),
11059f_charbig = 'just inserted'
11060   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11061DELETE FROM t0_aux
11062WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11063INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11064SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11065'just inserted' FROM t0_template
11066WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11067CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11068BEGIN
11069UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11070f_charbig = 'updated by trigger'
11071      WHERE f_int1 = new.f_int1;
11072END|
11073UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11074WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11075
11076# check trigger-5 success: 	1
11077DROP TRIGGER trg_1;
11078UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11079f_int2 = CAST(f_char1 AS SIGNED INT),
11080f_charbig = 'just inserted'
11081   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11082DELETE FROM t0_aux
11083WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11084INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11085SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11086'just inserted' FROM t0_template
11087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11088CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11089BEGIN
11090UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11091f_charbig = 'updated by trigger'
11092      WHERE f_int1 = - old.f_int1;
11093END|
11094UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11095WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11096
11097# check trigger-6 success: 	1
11098DROP TRIGGER trg_1;
11099UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11100f_int2 = CAST(f_char1 AS SIGNED INT),
11101f_charbig = 'just inserted'
11102   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11103DELETE FROM t0_aux
11104WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11105INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11106SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11107'just inserted' FROM t0_template
11108WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11109CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11110BEGIN
11111UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11112f_charbig = 'updated by trigger'
11113      WHERE f_int1 = - old.f_int1;
11114END|
11115DELETE FROM t0_aux
11116WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11117
11118# check trigger-7 success: 	1
11119DROP TRIGGER trg_1;
11120UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11121f_int2 = CAST(f_char1 AS SIGNED INT),
11122f_charbig = 'just inserted'
11123   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11124DELETE FROM t0_aux
11125WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11126INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11127SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11128'just inserted' FROM t0_template
11129WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11130CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11131BEGIN
11132UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11133f_charbig = 'updated by trigger'
11134      WHERE f_int1 = - old.f_int1;
11135END|
11136DELETE FROM t0_aux
11137WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11138
11139# check trigger-8 success: 	1
11140DROP TRIGGER trg_1;
11141UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11142f_int2 = CAST(f_char1 AS SIGNED INT),
11143f_charbig = 'just inserted'
11144   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11145DELETE FROM t0_aux
11146WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11147DELETE FROM t1
11148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11149CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11150BEGIN
11151SET new.f_int1 = old.f_int1 + @max_row,
11152new.f_int2 = old.f_int2 - @max_row,
11153new.f_charbig = '####updated per update trigger####';
11154END|
11155UPDATE t1
11156SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11157f_charbig = '####updated per update statement itself####';
11158
11159# check trigger-9 success: 	1
11160DROP TRIGGER trg_2;
11161UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11162f_int2 = CAST(f_char1 AS SIGNED INT),
11163f_charbig = CONCAT('===',f_char1,'===');
11164CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11165BEGIN
11166SET new.f_int1 = new.f_int1 + @max_row,
11167new.f_int2 = new.f_int2 - @max_row,
11168new.f_charbig = '####updated per update trigger####';
11169END|
11170UPDATE t1
11171SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11172f_charbig = '####updated per update statement itself####';
11173
11174# check trigger-10 success: 	1
11175DROP TRIGGER trg_2;
11176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11177f_int2 = CAST(f_char1 AS SIGNED INT),
11178f_charbig = CONCAT('===',f_char1,'===');
11179CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11180BEGIN
11181SET new.f_int1 = @my_max1 + @counter,
11182new.f_int2 = @my_min2 - @counter,
11183new.f_charbig = '####updated per insert trigger####';
11184SET @counter = @counter + 1;
11185END|
11186SET @counter = 1;
11187SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11188INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11189SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11190CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11192ORDER BY f_int1;
11193DROP TRIGGER trg_3;
11194
11195# check trigger-11 success: 	1
11196DELETE FROM t1
11197WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11198AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11199AND f_charbig = '####updated per insert trigger####';
11200CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11201BEGIN
11202SET new.f_int1 = @my_max1 + @counter,
11203new.f_int2 = @my_min2 - @counter,
11204new.f_charbig = '####updated per insert trigger####';
11205SET @counter = @counter + 1;
11206END|
11207SET @counter = 1;
11208SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11209INSERT INTO t1 (f_char1, f_char2, f_charbig)
11210SELECT CAST(f_int1 AS CHAR),
11211CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11213ORDER BY f_int1;
11214DROP TRIGGER trg_3;
11215
11216# check trigger-12 success: 	1
11217DELETE FROM t1
11218WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11219AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11220AND f_charbig = '####updated per insert trigger####';
11221ANALYZE  TABLE t1;
11222Table	Op	Msg_type	Msg_text
11223test.t1	analyze	status	OK
11224CHECK    TABLE t1 EXTENDED;
11225Table	Op	Msg_type	Msg_text
11226test.t1	check	status	OK
11227CHECKSUM TABLE t1 EXTENDED;
11228Table	Checksum
11229test.t1	<some_value>
11230OPTIMIZE TABLE t1;
11231Table	Op	Msg_type	Msg_text
11232test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11233test.t1	optimize	status	OK
11234# check layout success:    1
11235REPAIR   TABLE t1 EXTENDED;
11236Table	Op	Msg_type	Msg_text
11237test.t1	repair	status	OK
11238# check layout success:    1
11239TRUNCATE t1;
11240
11241# check TRUNCATE success: 	1
11242# check layout success:    1
11243# End usability test (inc/partition_check.inc)
11244DROP TABLE t1;
11245CREATE TABLE t1 (
11246f_int1 INTEGER,
11247f_int2 INTEGER,
11248f_char1 CHAR(20),
11249f_char2 CHAR(20),
11250f_charbig VARCHAR(1000)
11251, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
11252)
11253PARTITION BY LIST(ABS(MOD(f_int1,2)))
11254SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
11255(PARTITION part1 VALUES IN (0),
11256PARTITION part2 VALUES IN (1),
11257PARTITION part3 VALUES IN (NULL));
11258INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11259SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
11260# Start usability test (inc/partition_check.inc)
11261create_command
11262SHOW CREATE TABLE t1;
11263Table	Create Table
11264t1	CREATE TABLE `t1` (
11265  `f_int1` int(11) NOT NULL,
11266  `f_int2` int(11) NOT NULL,
11267  `f_char1` char(20) DEFAULT NULL,
11268  `f_char2` char(20) DEFAULT NULL,
11269  `f_charbig` varchar(1000) DEFAULT NULL,
11270  PRIMARY KEY (`f_int2`,`f_int1`),
11271  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
11272) ENGINE=InnoDB DEFAULT CHARSET=latin1
11273/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
11274SUBPARTITION BY KEY (f_int1)
11275SUBPARTITIONS 3
11276(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
11277 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
11278 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
11279
11280unified filelist
11281t1#P#part1#SP#part1sp0.ibd
11282t1#P#part1#SP#part1sp1.ibd
11283t1#P#part1#SP#part1sp2.ibd
11284t1#P#part2#SP#part2sp0.ibd
11285t1#P#part2#SP#part2sp1.ibd
11286t1#P#part2#SP#part2sp2.ibd
11287t1#P#part3#SP#part3sp0.ibd
11288t1#P#part3#SP#part3sp1.ibd
11289t1#P#part3#SP#part3sp2.ibd
11290t1.frm
11291
11292# check prerequisites-1 success:    1
11293# check COUNT(*) success:    1
11294# check MIN/MAX(f_int1) success:    1
11295# check MIN/MAX(f_int2) success:    1
11296INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11297SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11298CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11299WHERE f_int1 IN (2,3);
11300ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
11301# check prerequisites-3 success:    1
11302# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11303INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11304SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11305CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11306WHERE f_int1 IN (2,3);
11307DELETE FROM t1 WHERE f_charbig = 'delete me';
11308INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11309SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11310CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11311WHERE f_int1 IN (2,3);
11312DELETE FROM t1 WHERE f_charbig = 'delete me';
11313# check read via f_int1 success: 1
11314# check read via f_int2 success: 1
11315
11316# check multiple-1 success: 	1
11317DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11318
11319# check multiple-2 success: 	1
11320INSERT INTO t1 SELECT * FROM t0_template
11321WHERE MOD(f_int1,3) = 0;
11322
11323# check multiple-3 success: 	1
11324UPDATE t1 SET f_int1 = f_int1 + @max_row
11325WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11326AND @max_row_div2 + @max_row_div4;
11327
11328# check multiple-4 success: 	1
11329DELETE FROM t1
11330WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11331AND @max_row_div2 + @max_row_div4 + @max_row;
11332
11333# check multiple-5 success: 	1
11334SELECT COUNT(*) INTO @try_count FROM t0_template
11335WHERE MOD(f_int1,3) = 0
11336AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11337SELECT COUNT(*) INTO @clash_count
11338FROM t1 INNER JOIN t0_template USING(f_int1)
11339WHERE MOD(f_int1,3) = 0
11340AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11341SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11342INSERT INTO t1
11343SET f_int1 = @cur_value , f_int2 = @cur_value,
11344f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11345f_charbig = '#SINGLE#';
11346
11347# check single-1 success: 	1
11348SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11349INSERT INTO t1
11350SET f_int1 = @cur_value , f_int2 = @cur_value,
11351f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11352f_charbig = '#SINGLE#';
11353
11354# check single-2 success: 	1
11355SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11356SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11357UPDATE t1 SET f_int1 = @cur_value2
11358WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11359
11360# check single-3 success: 	1
11361SET @cur_value1= -1;
11362SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11363UPDATE t1 SET f_int1 = @cur_value1
11364WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11365
11366# check single-4 success: 	1
11367SELECT MAX(f_int1) INTO @cur_value FROM t1;
11368DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11369
11370# check single-5 success: 	1
11371DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11372
11373# check single-6 success: 	1
11374INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11375
11376# check single-7 success: 	1
11377DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11378DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11379INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11380f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11381f_charbig = '#NULL#';
11382INSERT INTO t1
11383SET f_int1 = NULL , f_int2 = -@max_row,
11384f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11385f_charbig = '#NULL#';
11386ERROR 23000: Column 'f_int1' cannot be null
11387# check null success:    1
11388DELETE FROM t1
11389WHERE f_int1 = 0 AND f_int2 = 0
11390AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11391AND f_charbig = '#NULL#';
11392INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11393SELECT f_int1, f_int1, '', '', 'was inserted'
11394   FROM t0_template source_tab
11395WHERE MOD(f_int1,3) = 0
11396AND f_int1 BETWEEN @max_row_div2 AND @max_row
11397ON DUPLICATE KEY
11398UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11399f_int2 = 2 * @max_row + source_tab.f_int1,
11400f_charbig = 'was updated';
11401
11402# check unique-1-a success: 	1
11403
11404# check unique-1-b success: 	1
11405DELETE FROM t1 WHERE f_charbig = 'was inserted';
11406UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11407f_int2 = CAST(f_char1 AS SIGNED INT),
11408f_charbig = CONCAT('===',f_char1,'===')
11409WHERE f_charbig = 'was updated';
11410REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11411SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11412   FROM t0_template source_tab
11413WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11414
11415# check replace success: 	1
11416DELETE FROM t1
11417WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11418DELETE FROM t1
11419WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11420f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11421UPDATE t1 SET f_int2 = f_int1,
11422f_char1 = CAST(f_int1 AS CHAR),
11423f_char2 = CAST(f_int1 AS CHAR),
11424f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11425WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11426SET AUTOCOMMIT= 0;
11427INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11428SELECT f_int1, f_int1, '', '', 'was inserted'
11429FROM t0_template source_tab
11430WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11431
11432# check transactions-1 success: 	1
11433COMMIT WORK;
11434
11435# check transactions-2 success: 	1
11436ROLLBACK WORK;
11437
11438# check transactions-3 success: 	1
11439DELETE FROM t1 WHERE f_charbig = 'was inserted';
11440COMMIT WORK;
11441ROLLBACK WORK;
11442
11443# check transactions-4 success: 	1
11444INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11445SELECT f_int1, f_int1, '', '', 'was inserted'
11446FROM t0_template source_tab
11447WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11448
11449# check transactions-5 success: 	1
11450ROLLBACK WORK;
11451
11452# check transactions-6 success: 	1
11453# INFO: Storage engine used for t1 seems to be transactional.
11454COMMIT;
11455
11456# check transactions-7 success: 	1
11457DELETE FROM t1 WHERE f_charbig = 'was inserted';
11458COMMIT WORK;
11459SET @@session.sql_mode = 'traditional';
11460Warnings:
11461Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11462SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11463INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11464SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11465'', '', 'was inserted' FROM t0_template
11466WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11467ERROR 22012: Division by 0
11468COMMIT;
11469
11470# check transactions-8 success: 	1
11471# INFO: Storage engine used for t1 seems to be able to revert
11472#       changes made by the failing statement.
11473SET @@session.sql_mode = '';
11474Warnings:
11475Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11476SET AUTOCOMMIT= 1;
11477DELETE FROM t1 WHERE f_charbig = 'was inserted';
11478COMMIT WORK;
11479UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11480
11481# check special-1 success: 	1
11482UPDATE t1 SET f_charbig = '';
11483
11484# check special-2 success: 	1
11485UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11486INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11487SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11488WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11489INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11490SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11491'just inserted' FROM t0_template
11492WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11493CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11494BEGIN
11495UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11496f_charbig = 'updated by trigger'
11497      WHERE f_int1 = new.f_int1;
11498END|
11499INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11500SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11501WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11502
11503# check trigger-1 success: 	1
11504DROP TRIGGER trg_1;
11505UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11506f_int2 = CAST(f_char1 AS SIGNED INT),
11507f_charbig = 'just inserted'
11508   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11509DELETE FROM t0_aux
11510WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11511INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11512SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11513'just inserted' FROM t0_template
11514WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11515CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11516BEGIN
11517UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11518f_charbig = 'updated by trigger'
11519      WHERE f_int1 = new.f_int1;
11520END|
11521INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11522SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11523WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11524
11525# check trigger-2 success: 	1
11526DROP TRIGGER trg_1;
11527UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11528f_int2 = CAST(f_char1 AS SIGNED INT),
11529f_charbig = 'just inserted'
11530   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11531DELETE FROM t0_aux
11532WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11533INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11534SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11535'just inserted' FROM t0_template
11536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11537CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11538BEGIN
11539UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11540f_charbig = 'updated by trigger'
11541      WHERE f_int1 = new.f_int1;
11542END|
11543UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11544WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11545
11546# check trigger-3 success: 	1
11547DROP TRIGGER trg_1;
11548UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11549f_int2 = CAST(f_char1 AS SIGNED INT),
11550f_charbig = 'just inserted'
11551   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11552DELETE FROM t0_aux
11553WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11554INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11555SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11556'just inserted' FROM t0_template
11557WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11558CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11559BEGIN
11560UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11561f_charbig = 'updated by trigger'
11562      WHERE f_int1 = - old.f_int1;
11563END|
11564UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11565WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11566
11567# check trigger-4 success: 	1
11568DROP TRIGGER trg_1;
11569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11570f_int2 = CAST(f_char1 AS SIGNED INT),
11571f_charbig = 'just inserted'
11572   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11573DELETE FROM t0_aux
11574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11577'just inserted' FROM t0_template
11578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11579CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11580BEGIN
11581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11582f_charbig = 'updated by trigger'
11583      WHERE f_int1 = new.f_int1;
11584END|
11585UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11586WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11587
11588# check trigger-5 success: 	1
11589DROP TRIGGER trg_1;
11590UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11591f_int2 = CAST(f_char1 AS SIGNED INT),
11592f_charbig = 'just inserted'
11593   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11594DELETE FROM t0_aux
11595WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11597SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11598'just inserted' FROM t0_template
11599WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11600CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11601BEGIN
11602UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11603f_charbig = 'updated by trigger'
11604      WHERE f_int1 = - old.f_int1;
11605END|
11606UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11607WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11608
11609# check trigger-6 success: 	1
11610DROP TRIGGER trg_1;
11611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11612f_int2 = CAST(f_char1 AS SIGNED INT),
11613f_charbig = 'just inserted'
11614   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11615DELETE FROM t0_aux
11616WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11619'just inserted' FROM t0_template
11620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11621CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11622BEGIN
11623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11624f_charbig = 'updated by trigger'
11625      WHERE f_int1 = - old.f_int1;
11626END|
11627DELETE FROM t0_aux
11628WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11629
11630# check trigger-7 success: 	1
11631DROP TRIGGER trg_1;
11632UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11633f_int2 = CAST(f_char1 AS SIGNED INT),
11634f_charbig = 'just inserted'
11635   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11636DELETE FROM t0_aux
11637WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11638INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11639SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11640'just inserted' FROM t0_template
11641WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11642CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11643BEGIN
11644UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11645f_charbig = 'updated by trigger'
11646      WHERE f_int1 = - old.f_int1;
11647END|
11648DELETE FROM t0_aux
11649WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11650
11651# check trigger-8 success: 	1
11652DROP TRIGGER trg_1;
11653UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11654f_int2 = CAST(f_char1 AS SIGNED INT),
11655f_charbig = 'just inserted'
11656   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11657DELETE FROM t0_aux
11658WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11659DELETE FROM t1
11660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11661CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11662BEGIN
11663SET new.f_int1 = old.f_int1 + @max_row,
11664new.f_int2 = old.f_int2 - @max_row,
11665new.f_charbig = '####updated per update trigger####';
11666END|
11667UPDATE t1
11668SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11669f_charbig = '####updated per update statement itself####';
11670
11671# check trigger-9 success: 	1
11672DROP TRIGGER trg_2;
11673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11674f_int2 = CAST(f_char1 AS SIGNED INT),
11675f_charbig = CONCAT('===',f_char1,'===');
11676CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11677BEGIN
11678SET new.f_int1 = new.f_int1 + @max_row,
11679new.f_int2 = new.f_int2 - @max_row,
11680new.f_charbig = '####updated per update trigger####';
11681END|
11682UPDATE t1
11683SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11684f_charbig = '####updated per update statement itself####';
11685
11686# check trigger-10 success: 	1
11687DROP TRIGGER trg_2;
11688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11689f_int2 = CAST(f_char1 AS SIGNED INT),
11690f_charbig = CONCAT('===',f_char1,'===');
11691CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11692BEGIN
11693SET new.f_int1 = @my_max1 + @counter,
11694new.f_int2 = @my_min2 - @counter,
11695new.f_charbig = '####updated per insert trigger####';
11696SET @counter = @counter + 1;
11697END|
11698SET @counter = 1;
11699SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11700INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11701SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11702CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11704ORDER BY f_int1;
11705DROP TRIGGER trg_3;
11706
11707# check trigger-11 success: 	1
11708DELETE FROM t1
11709WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11710AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11711AND f_charbig = '####updated per insert trigger####';
11712CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11713BEGIN
11714SET new.f_int1 = @my_max1 + @counter,
11715new.f_int2 = @my_min2 - @counter,
11716new.f_charbig = '####updated per insert trigger####';
11717SET @counter = @counter + 1;
11718END|
11719SET @counter = 1;
11720SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11721INSERT INTO t1 (f_char1, f_char2, f_charbig)
11722SELECT CAST(f_int1 AS CHAR),
11723CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11725ORDER BY f_int1;
11726DROP TRIGGER trg_3;
11727
11728# check trigger-12 success: 	1
11729DELETE FROM t1
11730WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11731AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11732AND f_charbig = '####updated per insert trigger####';
11733ANALYZE  TABLE t1;
11734Table	Op	Msg_type	Msg_text
11735test.t1	analyze	status	OK
11736CHECK    TABLE t1 EXTENDED;
11737Table	Op	Msg_type	Msg_text
11738test.t1	check	status	OK
11739CHECKSUM TABLE t1 EXTENDED;
11740Table	Checksum
11741test.t1	<some_value>
11742OPTIMIZE TABLE t1;
11743Table	Op	Msg_type	Msg_text
11744test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11745test.t1	optimize	status	OK
11746# check layout success:    1
11747REPAIR   TABLE t1 EXTENDED;
11748Table	Op	Msg_type	Msg_text
11749test.t1	repair	status	OK
11750# check layout success:    1
11751TRUNCATE t1;
11752
11753# check TRUNCATE success: 	1
11754# check layout success:    1
11755# End usability test (inc/partition_check.inc)
11756DROP TABLE t1;
11757DROP TABLE IF EXISTS t1;
11758CREATE TABLE t1 (
11759f_int1 INTEGER,
11760f_int2 INTEGER,
11761f_char1 CHAR(20),
11762f_char2 CHAR(20),
11763f_charbig VARCHAR(1000)
11764, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
11765)
11766PARTITION BY HASH(f_int1) PARTITIONS 2;
11767INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11768SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
11769# Start usability test (inc/partition_check.inc)
11770create_command
11771SHOW CREATE TABLE t1;
11772Table	Create Table
11773t1	CREATE TABLE `t1` (
11774  `f_int1` int(11) NOT NULL,
11775  `f_int2` int(11) NOT NULL,
11776  `f_char1` char(20) DEFAULT NULL,
11777  `f_char2` char(20) DEFAULT NULL,
11778  `f_charbig` varchar(1000) DEFAULT NULL,
11779  PRIMARY KEY (`f_int1`,`f_int2`),
11780  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
11781) ENGINE=InnoDB DEFAULT CHARSET=latin1
11782/*!50100 PARTITION BY HASH (f_int1)
11783PARTITIONS 2 */
11784
11785unified filelist
11786t1#P#p0.ibd
11787t1#P#p1.ibd
11788t1.frm
11789
11790# check prerequisites-1 success:    1
11791# check COUNT(*) success:    1
11792# check MIN/MAX(f_int1) success:    1
11793# check MIN/MAX(f_int2) success:    1
11794INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11795SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11796CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11797WHERE f_int1 IN (2,3);
11798ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
11799# check prerequisites-3 success:    1
11800# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11801INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11802SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11803CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11804WHERE f_int1 IN (2,3);
11805DELETE FROM t1 WHERE f_charbig = 'delete me';
11806INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11807SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11808CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11809WHERE f_int1 IN (2,3);
11810DELETE FROM t1 WHERE f_charbig = 'delete me';
11811# check read via f_int1 success: 1
11812# check read via f_int2 success: 1
11813
11814# check multiple-1 success: 	1
11815DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11816
11817# check multiple-2 success: 	1
11818INSERT INTO t1 SELECT * FROM t0_template
11819WHERE MOD(f_int1,3) = 0;
11820
11821# check multiple-3 success: 	1
11822UPDATE t1 SET f_int1 = f_int1 + @max_row
11823WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11824AND @max_row_div2 + @max_row_div4;
11825
11826# check multiple-4 success: 	1
11827DELETE FROM t1
11828WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11829AND @max_row_div2 + @max_row_div4 + @max_row;
11830
11831# check multiple-5 success: 	1
11832SELECT COUNT(*) INTO @try_count FROM t0_template
11833WHERE MOD(f_int1,3) = 0
11834AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11835SELECT COUNT(*) INTO @clash_count
11836FROM t1 INNER JOIN t0_template USING(f_int1)
11837WHERE MOD(f_int1,3) = 0
11838AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11839SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11840INSERT INTO t1
11841SET f_int1 = @cur_value , f_int2 = @cur_value,
11842f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11843f_charbig = '#SINGLE#';
11844
11845# check single-1 success: 	1
11846SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11847INSERT INTO t1
11848SET f_int1 = @cur_value , f_int2 = @cur_value,
11849f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11850f_charbig = '#SINGLE#';
11851
11852# check single-2 success: 	1
11853SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11854SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11855UPDATE t1 SET f_int1 = @cur_value2
11856WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11857
11858# check single-3 success: 	1
11859SET @cur_value1= -1;
11860SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11861UPDATE t1 SET f_int1 = @cur_value1
11862WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11863
11864# check single-4 success: 	1
11865SELECT MAX(f_int1) INTO @cur_value FROM t1;
11866DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11867
11868# check single-5 success: 	1
11869DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11870
11871# check single-6 success: 	1
11872INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11873
11874# check single-7 success: 	1
11875DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11876DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11877INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11878f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11879f_charbig = '#NULL#';
11880INSERT INTO t1
11881SET f_int1 = NULL , f_int2 = -@max_row,
11882f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11883f_charbig = '#NULL#';
11884ERROR 23000: Column 'f_int1' cannot be null
11885# check null success:    1
11886DELETE FROM t1
11887WHERE f_int1 = 0 AND f_int2 = 0
11888AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11889AND f_charbig = '#NULL#';
11890INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11891SELECT f_int1, f_int1, '', '', 'was inserted'
11892   FROM t0_template source_tab
11893WHERE MOD(f_int1,3) = 0
11894AND f_int1 BETWEEN @max_row_div2 AND @max_row
11895ON DUPLICATE KEY
11896UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11897f_int2 = 2 * @max_row + source_tab.f_int1,
11898f_charbig = 'was updated';
11899
11900# check unique-1-a success: 	1
11901
11902# check unique-1-b success: 	1
11903DELETE FROM t1 WHERE f_charbig = 'was inserted';
11904UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11905f_int2 = CAST(f_char1 AS SIGNED INT),
11906f_charbig = CONCAT('===',f_char1,'===')
11907WHERE f_charbig = 'was updated';
11908REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11909SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11910   FROM t0_template source_tab
11911WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11912
11913# check replace success: 	1
11914DELETE FROM t1
11915WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11916DELETE FROM t1
11917WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11918f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11919UPDATE t1 SET f_int2 = f_int1,
11920f_char1 = CAST(f_int1 AS CHAR),
11921f_char2 = CAST(f_int1 AS CHAR),
11922f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11923WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11924SET AUTOCOMMIT= 0;
11925INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11926SELECT f_int1, f_int1, '', '', 'was inserted'
11927FROM t0_template source_tab
11928WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11929
11930# check transactions-1 success: 	1
11931COMMIT WORK;
11932
11933# check transactions-2 success: 	1
11934ROLLBACK WORK;
11935
11936# check transactions-3 success: 	1
11937DELETE FROM t1 WHERE f_charbig = 'was inserted';
11938COMMIT WORK;
11939ROLLBACK WORK;
11940
11941# check transactions-4 success: 	1
11942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11943SELECT f_int1, f_int1, '', '', 'was inserted'
11944FROM t0_template source_tab
11945WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11946
11947# check transactions-5 success: 	1
11948ROLLBACK WORK;
11949
11950# check transactions-6 success: 	1
11951# INFO: Storage engine used for t1 seems to be transactional.
11952COMMIT;
11953
11954# check transactions-7 success: 	1
11955DELETE FROM t1 WHERE f_charbig = 'was inserted';
11956COMMIT WORK;
11957SET @@session.sql_mode = 'traditional';
11958Warnings:
11959Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11960SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11961INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11962SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11963'', '', 'was inserted' FROM t0_template
11964WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11965ERROR 22012: Division by 0
11966COMMIT;
11967
11968# check transactions-8 success: 	1
11969# INFO: Storage engine used for t1 seems to be able to revert
11970#       changes made by the failing statement.
11971SET @@session.sql_mode = '';
11972Warnings:
11973Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11974SET AUTOCOMMIT= 1;
11975DELETE FROM t1 WHERE f_charbig = 'was inserted';
11976COMMIT WORK;
11977UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11978
11979# check special-1 success: 	1
11980UPDATE t1 SET f_charbig = '';
11981
11982# check special-2 success: 	1
11983UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11984INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11985SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11986WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11987INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11988SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11989'just inserted' FROM t0_template
11990WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11991CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11992BEGIN
11993UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11994f_charbig = 'updated by trigger'
11995      WHERE f_int1 = new.f_int1;
11996END|
11997INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11998SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11999WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12000
12001# check trigger-1 success: 	1
12002DROP TRIGGER trg_1;
12003UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12004f_int2 = CAST(f_char1 AS SIGNED INT),
12005f_charbig = 'just inserted'
12006   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12007DELETE FROM t0_aux
12008WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12009INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12010SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12011'just inserted' FROM t0_template
12012WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12013CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12014BEGIN
12015UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12016f_charbig = 'updated by trigger'
12017      WHERE f_int1 = new.f_int1;
12018END|
12019INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12020SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12021WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12022
12023# check trigger-2 success: 	1
12024DROP TRIGGER trg_1;
12025UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12026f_int2 = CAST(f_char1 AS SIGNED INT),
12027f_charbig = 'just inserted'
12028   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12029DELETE FROM t0_aux
12030WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12031INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12032SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12033'just inserted' FROM t0_template
12034WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12035CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12036BEGIN
12037UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12038f_charbig = 'updated by trigger'
12039      WHERE f_int1 = new.f_int1;
12040END|
12041UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12042WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12043
12044# check trigger-3 success: 	1
12045DROP TRIGGER trg_1;
12046UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12047f_int2 = CAST(f_char1 AS SIGNED INT),
12048f_charbig = 'just inserted'
12049   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12050DELETE FROM t0_aux
12051WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12052INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12053SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12054'just inserted' FROM t0_template
12055WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12056CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12057BEGIN
12058UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12059f_charbig = 'updated by trigger'
12060      WHERE f_int1 = - old.f_int1;
12061END|
12062UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12063WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12064
12065# check trigger-4 success: 	1
12066DROP TRIGGER trg_1;
12067UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12068f_int2 = CAST(f_char1 AS SIGNED INT),
12069f_charbig = 'just inserted'
12070   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12071DELETE FROM t0_aux
12072WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12073INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12074SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12075'just inserted' FROM t0_template
12076WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12077CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12078BEGIN
12079UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12080f_charbig = 'updated by trigger'
12081      WHERE f_int1 = new.f_int1;
12082END|
12083UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12084WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12085
12086# check trigger-5 success: 	1
12087DROP TRIGGER trg_1;
12088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12089f_int2 = CAST(f_char1 AS SIGNED INT),
12090f_charbig = 'just inserted'
12091   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12092DELETE FROM t0_aux
12093WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12094INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12095SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12096'just inserted' FROM t0_template
12097WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12098CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12099BEGIN
12100UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12101f_charbig = 'updated by trigger'
12102      WHERE f_int1 = - old.f_int1;
12103END|
12104UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12105WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12106
12107# check trigger-6 success: 	1
12108DROP TRIGGER trg_1;
12109UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12110f_int2 = CAST(f_char1 AS SIGNED INT),
12111f_charbig = 'just inserted'
12112   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12113DELETE FROM t0_aux
12114WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12115INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12116SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12117'just inserted' FROM t0_template
12118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12119CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12120BEGIN
12121UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12122f_charbig = 'updated by trigger'
12123      WHERE f_int1 = - old.f_int1;
12124END|
12125DELETE FROM t0_aux
12126WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12127
12128# check trigger-7 success: 	1
12129DROP TRIGGER trg_1;
12130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12131f_int2 = CAST(f_char1 AS SIGNED INT),
12132f_charbig = 'just inserted'
12133   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12134DELETE FROM t0_aux
12135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12138'just inserted' FROM t0_template
12139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12140CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12141BEGIN
12142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12143f_charbig = 'updated by trigger'
12144      WHERE f_int1 = - old.f_int1;
12145END|
12146DELETE FROM t0_aux
12147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12148
12149# check trigger-8 success: 	1
12150DROP TRIGGER trg_1;
12151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12152f_int2 = CAST(f_char1 AS SIGNED INT),
12153f_charbig = 'just inserted'
12154   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12155DELETE FROM t0_aux
12156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12157DELETE FROM t1
12158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12159CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12160BEGIN
12161SET new.f_int1 = old.f_int1 + @max_row,
12162new.f_int2 = old.f_int2 - @max_row,
12163new.f_charbig = '####updated per update trigger####';
12164END|
12165UPDATE t1
12166SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12167f_charbig = '####updated per update statement itself####';
12168
12169# check trigger-9 success: 	1
12170DROP TRIGGER trg_2;
12171UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12172f_int2 = CAST(f_char1 AS SIGNED INT),
12173f_charbig = CONCAT('===',f_char1,'===');
12174CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12175BEGIN
12176SET new.f_int1 = new.f_int1 + @max_row,
12177new.f_int2 = new.f_int2 - @max_row,
12178new.f_charbig = '####updated per update trigger####';
12179END|
12180UPDATE t1
12181SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12182f_charbig = '####updated per update statement itself####';
12183
12184# check trigger-10 success: 	1
12185DROP TRIGGER trg_2;
12186UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12187f_int2 = CAST(f_char1 AS SIGNED INT),
12188f_charbig = CONCAT('===',f_char1,'===');
12189CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12190BEGIN
12191SET new.f_int1 = @my_max1 + @counter,
12192new.f_int2 = @my_min2 - @counter,
12193new.f_charbig = '####updated per insert trigger####';
12194SET @counter = @counter + 1;
12195END|
12196SET @counter = 1;
12197SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12198INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12199SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12200CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12201WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12202ORDER BY f_int1;
12203DROP TRIGGER trg_3;
12204
12205# check trigger-11 success: 	1
12206DELETE FROM t1
12207WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12208AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12209AND f_charbig = '####updated per insert trigger####';
12210CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12211BEGIN
12212SET new.f_int1 = @my_max1 + @counter,
12213new.f_int2 = @my_min2 - @counter,
12214new.f_charbig = '####updated per insert trigger####';
12215SET @counter = @counter + 1;
12216END|
12217SET @counter = 1;
12218SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12219INSERT INTO t1 (f_char1, f_char2, f_charbig)
12220SELECT CAST(f_int1 AS CHAR),
12221CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12223ORDER BY f_int1;
12224DROP TRIGGER trg_3;
12225
12226# check trigger-12 success: 	1
12227DELETE FROM t1
12228WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12229AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12230AND f_charbig = '####updated per insert trigger####';
12231ANALYZE  TABLE t1;
12232Table	Op	Msg_type	Msg_text
12233test.t1	analyze	status	OK
12234CHECK    TABLE t1 EXTENDED;
12235Table	Op	Msg_type	Msg_text
12236test.t1	check	status	OK
12237CHECKSUM TABLE t1 EXTENDED;
12238Table	Checksum
12239test.t1	<some_value>
12240OPTIMIZE TABLE t1;
12241Table	Op	Msg_type	Msg_text
12242test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12243test.t1	optimize	status	OK
12244# check layout success:    1
12245REPAIR   TABLE t1 EXTENDED;
12246Table	Op	Msg_type	Msg_text
12247test.t1	repair	status	OK
12248# check layout success:    1
12249TRUNCATE t1;
12250
12251# check TRUNCATE success: 	1
12252# check layout success:    1
12253# End usability test (inc/partition_check.inc)
12254DROP TABLE t1;
12255CREATE TABLE t1 (
12256f_int1 INTEGER,
12257f_int2 INTEGER,
12258f_char1 CHAR(20),
12259f_char2 CHAR(20),
12260f_charbig VARCHAR(1000)
12261, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
12262)
12263PARTITION BY KEY(f_int1) PARTITIONS 5;
12264INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12265SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
12266# Start usability test (inc/partition_check.inc)
12267create_command
12268SHOW CREATE TABLE t1;
12269Table	Create Table
12270t1	CREATE TABLE `t1` (
12271  `f_int1` int(11) NOT NULL,
12272  `f_int2` int(11) NOT NULL,
12273  `f_char1` char(20) DEFAULT NULL,
12274  `f_char2` char(20) DEFAULT NULL,
12275  `f_charbig` varchar(1000) DEFAULT NULL,
12276  PRIMARY KEY (`f_int1`,`f_int2`),
12277  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12278) ENGINE=InnoDB DEFAULT CHARSET=latin1
12279/*!50100 PARTITION BY KEY (f_int1)
12280PARTITIONS 5 */
12281
12282unified filelist
12283t1#P#p0.ibd
12284t1#P#p1.ibd
12285t1#P#p2.ibd
12286t1#P#p3.ibd
12287t1#P#p4.ibd
12288t1.frm
12289
12290# check prerequisites-1 success:    1
12291# check COUNT(*) success:    1
12292# check MIN/MAX(f_int1) success:    1
12293# check MIN/MAX(f_int2) success:    1
12294INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12295SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12296CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12297WHERE f_int1 IN (2,3);
12298ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
12299# check prerequisites-3 success:    1
12300# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12301INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12302SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12303CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12304WHERE f_int1 IN (2,3);
12305DELETE FROM t1 WHERE f_charbig = 'delete me';
12306INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12307SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12308CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12309WHERE f_int1 IN (2,3);
12310DELETE FROM t1 WHERE f_charbig = 'delete me';
12311# check read via f_int1 success: 1
12312# check read via f_int2 success: 1
12313
12314# check multiple-1 success: 	1
12315DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12316
12317# check multiple-2 success: 	1
12318INSERT INTO t1 SELECT * FROM t0_template
12319WHERE MOD(f_int1,3) = 0;
12320
12321# check multiple-3 success: 	1
12322UPDATE t1 SET f_int1 = f_int1 + @max_row
12323WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12324AND @max_row_div2 + @max_row_div4;
12325
12326# check multiple-4 success: 	1
12327DELETE FROM t1
12328WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12329AND @max_row_div2 + @max_row_div4 + @max_row;
12330
12331# check multiple-5 success: 	1
12332SELECT COUNT(*) INTO @try_count FROM t0_template
12333WHERE MOD(f_int1,3) = 0
12334AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12335SELECT COUNT(*) INTO @clash_count
12336FROM t1 INNER JOIN t0_template USING(f_int1)
12337WHERE MOD(f_int1,3) = 0
12338AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12339SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12340INSERT INTO t1
12341SET f_int1 = @cur_value , f_int2 = @cur_value,
12342f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12343f_charbig = '#SINGLE#';
12344
12345# check single-1 success: 	1
12346SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12347INSERT INTO t1
12348SET f_int1 = @cur_value , f_int2 = @cur_value,
12349f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12350f_charbig = '#SINGLE#';
12351
12352# check single-2 success: 	1
12353SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12354SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12355UPDATE t1 SET f_int1 = @cur_value2
12356WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12357
12358# check single-3 success: 	1
12359SET @cur_value1= -1;
12360SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12361UPDATE t1 SET f_int1 = @cur_value1
12362WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12363
12364# check single-4 success: 	1
12365SELECT MAX(f_int1) INTO @cur_value FROM t1;
12366DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12367
12368# check single-5 success: 	1
12369DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12370
12371# check single-6 success: 	1
12372INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12373
12374# check single-7 success: 	1
12375DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12376DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12377INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12378f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12379f_charbig = '#NULL#';
12380INSERT INTO t1
12381SET f_int1 = NULL , f_int2 = -@max_row,
12382f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12383f_charbig = '#NULL#';
12384ERROR 23000: Column 'f_int1' cannot be null
12385# check null success:    1
12386DELETE FROM t1
12387WHERE f_int1 = 0 AND f_int2 = 0
12388AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12389AND f_charbig = '#NULL#';
12390INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12391SELECT f_int1, f_int1, '', '', 'was inserted'
12392   FROM t0_template source_tab
12393WHERE MOD(f_int1,3) = 0
12394AND f_int1 BETWEEN @max_row_div2 AND @max_row
12395ON DUPLICATE KEY
12396UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12397f_int2 = 2 * @max_row + source_tab.f_int1,
12398f_charbig = 'was updated';
12399
12400# check unique-1-a success: 	1
12401
12402# check unique-1-b success: 	1
12403DELETE FROM t1 WHERE f_charbig = 'was inserted';
12404UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12405f_int2 = CAST(f_char1 AS SIGNED INT),
12406f_charbig = CONCAT('===',f_char1,'===')
12407WHERE f_charbig = 'was updated';
12408REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12409SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12410   FROM t0_template source_tab
12411WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12412
12413# check replace success: 	1
12414DELETE FROM t1
12415WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12416DELETE FROM t1
12417WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12418f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12419UPDATE t1 SET f_int2 = f_int1,
12420f_char1 = CAST(f_int1 AS CHAR),
12421f_char2 = CAST(f_int1 AS CHAR),
12422f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12423WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12424SET AUTOCOMMIT= 0;
12425INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12426SELECT f_int1, f_int1, '', '', 'was inserted'
12427FROM t0_template source_tab
12428WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12429
12430# check transactions-1 success: 	1
12431COMMIT WORK;
12432
12433# check transactions-2 success: 	1
12434ROLLBACK WORK;
12435
12436# check transactions-3 success: 	1
12437DELETE FROM t1 WHERE f_charbig = 'was inserted';
12438COMMIT WORK;
12439ROLLBACK WORK;
12440
12441# check transactions-4 success: 	1
12442INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12443SELECT f_int1, f_int1, '', '', 'was inserted'
12444FROM t0_template source_tab
12445WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12446
12447# check transactions-5 success: 	1
12448ROLLBACK WORK;
12449
12450# check transactions-6 success: 	1
12451# INFO: Storage engine used for t1 seems to be transactional.
12452COMMIT;
12453
12454# check transactions-7 success: 	1
12455DELETE FROM t1 WHERE f_charbig = 'was inserted';
12456COMMIT WORK;
12457SET @@session.sql_mode = 'traditional';
12458Warnings:
12459Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12460SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12461INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12462SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12463'', '', 'was inserted' FROM t0_template
12464WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12465ERROR 22012: Division by 0
12466COMMIT;
12467
12468# check transactions-8 success: 	1
12469# INFO: Storage engine used for t1 seems to be able to revert
12470#       changes made by the failing statement.
12471SET @@session.sql_mode = '';
12472Warnings:
12473Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12474SET AUTOCOMMIT= 1;
12475DELETE FROM t1 WHERE f_charbig = 'was inserted';
12476COMMIT WORK;
12477UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12478
12479# check special-1 success: 	1
12480UPDATE t1 SET f_charbig = '';
12481
12482# check special-2 success: 	1
12483UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12484INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12485SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12487INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12488SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12489'just inserted' FROM t0_template
12490WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12491CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12492BEGIN
12493UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12494f_charbig = 'updated by trigger'
12495      WHERE f_int1 = new.f_int1;
12496END|
12497INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12498SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12499WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12500
12501# check trigger-1 success: 	1
12502DROP TRIGGER trg_1;
12503UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12504f_int2 = CAST(f_char1 AS SIGNED INT),
12505f_charbig = 'just inserted'
12506   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12507DELETE FROM t0_aux
12508WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12509INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12510SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12511'just inserted' FROM t0_template
12512WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12513CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12514BEGIN
12515UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12516f_charbig = 'updated by trigger'
12517      WHERE f_int1 = new.f_int1;
12518END|
12519INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12520SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12521WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12522
12523# check trigger-2 success: 	1
12524DROP TRIGGER trg_1;
12525UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12526f_int2 = CAST(f_char1 AS SIGNED INT),
12527f_charbig = 'just inserted'
12528   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12529DELETE FROM t0_aux
12530WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12531INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12532SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12533'just inserted' FROM t0_template
12534WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12535CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12536BEGIN
12537UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12538f_charbig = 'updated by trigger'
12539      WHERE f_int1 = new.f_int1;
12540END|
12541UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12542WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12543
12544# check trigger-3 success: 	1
12545DROP TRIGGER trg_1;
12546UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12547f_int2 = CAST(f_char1 AS SIGNED INT),
12548f_charbig = 'just inserted'
12549   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12550DELETE FROM t0_aux
12551WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12552INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12553SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12554'just inserted' FROM t0_template
12555WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12556CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12557BEGIN
12558UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12559f_charbig = 'updated by trigger'
12560      WHERE f_int1 = - old.f_int1;
12561END|
12562UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12563WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12564
12565# check trigger-4 success: 	1
12566DROP TRIGGER trg_1;
12567UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12568f_int2 = CAST(f_char1 AS SIGNED INT),
12569f_charbig = 'just inserted'
12570   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12571DELETE FROM t0_aux
12572WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12573INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12574SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12575'just inserted' FROM t0_template
12576WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12577CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12578BEGIN
12579UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12580f_charbig = 'updated by trigger'
12581      WHERE f_int1 = new.f_int1;
12582END|
12583UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12584WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12585
12586# check trigger-5 success: 	1
12587DROP TRIGGER trg_1;
12588UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12589f_int2 = CAST(f_char1 AS SIGNED INT),
12590f_charbig = 'just inserted'
12591   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12592DELETE FROM t0_aux
12593WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12594INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12595SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12596'just inserted' FROM t0_template
12597WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12598CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12599BEGIN
12600UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12601f_charbig = 'updated by trigger'
12602      WHERE f_int1 = - old.f_int1;
12603END|
12604UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12605WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12606
12607# check trigger-6 success: 	1
12608DROP TRIGGER trg_1;
12609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12610f_int2 = CAST(f_char1 AS SIGNED INT),
12611f_charbig = 'just inserted'
12612   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12613DELETE FROM t0_aux
12614WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12617'just inserted' FROM t0_template
12618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12619CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12620BEGIN
12621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12622f_charbig = 'updated by trigger'
12623      WHERE f_int1 = - old.f_int1;
12624END|
12625DELETE FROM t0_aux
12626WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12627
12628# check trigger-7 success: 	1
12629DROP TRIGGER trg_1;
12630UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12631f_int2 = CAST(f_char1 AS SIGNED INT),
12632f_charbig = 'just inserted'
12633   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12634DELETE FROM t0_aux
12635WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12636INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12637SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12638'just inserted' FROM t0_template
12639WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12640CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12641BEGIN
12642UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12643f_charbig = 'updated by trigger'
12644      WHERE f_int1 = - old.f_int1;
12645END|
12646DELETE FROM t0_aux
12647WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12648
12649# check trigger-8 success: 	1
12650DROP TRIGGER trg_1;
12651UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12652f_int2 = CAST(f_char1 AS SIGNED INT),
12653f_charbig = 'just inserted'
12654   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12655DELETE FROM t0_aux
12656WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12657DELETE FROM t1
12658WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12659CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12660BEGIN
12661SET new.f_int1 = old.f_int1 + @max_row,
12662new.f_int2 = old.f_int2 - @max_row,
12663new.f_charbig = '####updated per update trigger####';
12664END|
12665UPDATE t1
12666SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12667f_charbig = '####updated per update statement itself####';
12668
12669# check trigger-9 success: 	1
12670DROP TRIGGER trg_2;
12671UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12672f_int2 = CAST(f_char1 AS SIGNED INT),
12673f_charbig = CONCAT('===',f_char1,'===');
12674CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12675BEGIN
12676SET new.f_int1 = new.f_int1 + @max_row,
12677new.f_int2 = new.f_int2 - @max_row,
12678new.f_charbig = '####updated per update trigger####';
12679END|
12680UPDATE t1
12681SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12682f_charbig = '####updated per update statement itself####';
12683
12684# check trigger-10 success: 	1
12685DROP TRIGGER trg_2;
12686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12687f_int2 = CAST(f_char1 AS SIGNED INT),
12688f_charbig = CONCAT('===',f_char1,'===');
12689CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12690BEGIN
12691SET new.f_int1 = @my_max1 + @counter,
12692new.f_int2 = @my_min2 - @counter,
12693new.f_charbig = '####updated per insert trigger####';
12694SET @counter = @counter + 1;
12695END|
12696SET @counter = 1;
12697SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12698INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12699SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12700CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12701WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12702ORDER BY f_int1;
12703DROP TRIGGER trg_3;
12704
12705# check trigger-11 success: 	1
12706DELETE FROM t1
12707WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12708AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12709AND f_charbig = '####updated per insert trigger####';
12710CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12711BEGIN
12712SET new.f_int1 = @my_max1 + @counter,
12713new.f_int2 = @my_min2 - @counter,
12714new.f_charbig = '####updated per insert trigger####';
12715SET @counter = @counter + 1;
12716END|
12717SET @counter = 1;
12718SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12719INSERT INTO t1 (f_char1, f_char2, f_charbig)
12720SELECT CAST(f_int1 AS CHAR),
12721CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12722WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12723ORDER BY f_int1;
12724DROP TRIGGER trg_3;
12725
12726# check trigger-12 success: 	1
12727DELETE FROM t1
12728WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12729AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12730AND f_charbig = '####updated per insert trigger####';
12731ANALYZE  TABLE t1;
12732Table	Op	Msg_type	Msg_text
12733test.t1	analyze	status	OK
12734CHECK    TABLE t1 EXTENDED;
12735Table	Op	Msg_type	Msg_text
12736test.t1	check	status	OK
12737CHECKSUM TABLE t1 EXTENDED;
12738Table	Checksum
12739test.t1	<some_value>
12740OPTIMIZE TABLE t1;
12741Table	Op	Msg_type	Msg_text
12742test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12743test.t1	optimize	status	OK
12744# check layout success:    1
12745REPAIR   TABLE t1 EXTENDED;
12746Table	Op	Msg_type	Msg_text
12747test.t1	repair	status	OK
12748# check layout success:    1
12749TRUNCATE t1;
12750
12751# check TRUNCATE success: 	1
12752# check layout success:    1
12753# End usability test (inc/partition_check.inc)
12754DROP TABLE t1;
12755CREATE TABLE t1 (
12756f_int1 INTEGER,
12757f_int2 INTEGER,
12758f_char1 CHAR(20),
12759f_char2 CHAR(20),
12760f_charbig VARCHAR(1000)
12761, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
12762)
12763PARTITION BY LIST(MOD(f_int1,4))
12764(PARTITION part_3 VALUES IN (-3),
12765PARTITION part_2 VALUES IN (-2),
12766PARTITION part_1 VALUES IN (-1),
12767PARTITION part_N VALUES IN (NULL),
12768PARTITION part0 VALUES IN (0),
12769PARTITION part1 VALUES IN (1),
12770PARTITION part2 VALUES IN (2),
12771PARTITION part3 VALUES IN (3));
12772INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12773SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
12774# Start usability test (inc/partition_check.inc)
12775create_command
12776SHOW CREATE TABLE t1;
12777Table	Create Table
12778t1	CREATE TABLE `t1` (
12779  `f_int1` int(11) NOT NULL,
12780  `f_int2` int(11) NOT NULL,
12781  `f_char1` char(20) DEFAULT NULL,
12782  `f_char2` char(20) DEFAULT NULL,
12783  `f_charbig` varchar(1000) DEFAULT NULL,
12784  PRIMARY KEY (`f_int1`,`f_int2`),
12785  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
12786) ENGINE=InnoDB DEFAULT CHARSET=latin1
12787/*!50100 PARTITION BY LIST (MOD(f_int1,4))
12788(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
12789 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
12790 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
12791 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
12792 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
12793 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
12794 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
12795 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
12796
12797unified filelist
12798t1#P#part0.ibd
12799t1#P#part1.ibd
12800t1#P#part2.ibd
12801t1#P#part3.ibd
12802t1#P#part_1.ibd
12803t1#P#part_2.ibd
12804t1#P#part_3.ibd
12805t1#P#part_N.ibd
12806t1.frm
12807
12808# check prerequisites-1 success:    1
12809# check COUNT(*) success:    1
12810# check MIN/MAX(f_int1) success:    1
12811# check MIN/MAX(f_int2) success:    1
12812INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12813SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12814CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12815WHERE f_int1 IN (2,3);
12816ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
12817# check prerequisites-3 success:    1
12818# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12819INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12820SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12821CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12822WHERE f_int1 IN (2,3);
12823DELETE FROM t1 WHERE f_charbig = 'delete me';
12824INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12825SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12826CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12827WHERE f_int1 IN (2,3);
12828DELETE FROM t1 WHERE f_charbig = 'delete me';
12829# check read via f_int1 success: 1
12830# check read via f_int2 success: 1
12831
12832# check multiple-1 success: 	1
12833DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12834
12835# check multiple-2 success: 	1
12836INSERT INTO t1 SELECT * FROM t0_template
12837WHERE MOD(f_int1,3) = 0;
12838
12839# check multiple-3 success: 	1
12840UPDATE t1 SET f_int1 = f_int1 + @max_row
12841WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12842AND @max_row_div2 + @max_row_div4;
12843
12844# check multiple-4 success: 	1
12845DELETE FROM t1
12846WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12847AND @max_row_div2 + @max_row_div4 + @max_row;
12848
12849# check multiple-5 success: 	1
12850SELECT COUNT(*) INTO @try_count FROM t0_template
12851WHERE MOD(f_int1,3) = 0
12852AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12853SELECT COUNT(*) INTO @clash_count
12854FROM t1 INNER JOIN t0_template USING(f_int1)
12855WHERE MOD(f_int1,3) = 0
12856AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12857SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12858INSERT INTO t1
12859SET f_int1 = @cur_value , f_int2 = @cur_value,
12860f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12861f_charbig = '#SINGLE#';
12862
12863# check single-1 success: 	1
12864SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12865INSERT INTO t1
12866SET f_int1 = @cur_value , f_int2 = @cur_value,
12867f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12868f_charbig = '#SINGLE#';
12869
12870# check single-2 success: 	1
12871SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12872SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12873UPDATE t1 SET f_int1 = @cur_value2
12874WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12875
12876# check single-3 success: 	1
12877SET @cur_value1= -1;
12878SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12879UPDATE t1 SET f_int1 = @cur_value1
12880WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12881
12882# check single-4 success: 	1
12883SELECT MAX(f_int1) INTO @cur_value FROM t1;
12884DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12885
12886# check single-5 success: 	1
12887DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12888
12889# check single-6 success: 	1
12890INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12891
12892# check single-7 success: 	1
12893DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12894DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12895INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12896f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12897f_charbig = '#NULL#';
12898INSERT INTO t1
12899SET f_int1 = NULL , f_int2 = -@max_row,
12900f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12901f_charbig = '#NULL#';
12902ERROR 23000: Column 'f_int1' cannot be null
12903# check null success:    1
12904DELETE FROM t1
12905WHERE f_int1 = 0 AND f_int2 = 0
12906AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12907AND f_charbig = '#NULL#';
12908INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12909SELECT f_int1, f_int1, '', '', 'was inserted'
12910   FROM t0_template source_tab
12911WHERE MOD(f_int1,3) = 0
12912AND f_int1 BETWEEN @max_row_div2 AND @max_row
12913ON DUPLICATE KEY
12914UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12915f_int2 = 2 * @max_row + source_tab.f_int1,
12916f_charbig = 'was updated';
12917
12918# check unique-1-a success: 	1
12919
12920# check unique-1-b success: 	1
12921DELETE FROM t1 WHERE f_charbig = 'was inserted';
12922UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12923f_int2 = CAST(f_char1 AS SIGNED INT),
12924f_charbig = CONCAT('===',f_char1,'===')
12925WHERE f_charbig = 'was updated';
12926REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12927SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12928   FROM t0_template source_tab
12929WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12930
12931# check replace success: 	1
12932DELETE FROM t1
12933WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12934DELETE FROM t1
12935WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12936f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12937UPDATE t1 SET f_int2 = f_int1,
12938f_char1 = CAST(f_int1 AS CHAR),
12939f_char2 = CAST(f_int1 AS CHAR),
12940f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12941WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12942SET AUTOCOMMIT= 0;
12943INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12944SELECT f_int1, f_int1, '', '', 'was inserted'
12945FROM t0_template source_tab
12946WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12947
12948# check transactions-1 success: 	1
12949COMMIT WORK;
12950
12951# check transactions-2 success: 	1
12952ROLLBACK WORK;
12953
12954# check transactions-3 success: 	1
12955DELETE FROM t1 WHERE f_charbig = 'was inserted';
12956COMMIT WORK;
12957ROLLBACK WORK;
12958
12959# check transactions-4 success: 	1
12960INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12961SELECT f_int1, f_int1, '', '', 'was inserted'
12962FROM t0_template source_tab
12963WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12964
12965# check transactions-5 success: 	1
12966ROLLBACK WORK;
12967
12968# check transactions-6 success: 	1
12969# INFO: Storage engine used for t1 seems to be transactional.
12970COMMIT;
12971
12972# check transactions-7 success: 	1
12973DELETE FROM t1 WHERE f_charbig = 'was inserted';
12974COMMIT WORK;
12975SET @@session.sql_mode = 'traditional';
12976Warnings:
12977Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12978SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12979INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12980SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12981'', '', 'was inserted' FROM t0_template
12982WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12983ERROR 22012: Division by 0
12984COMMIT;
12985
12986# check transactions-8 success: 	1
12987# INFO: Storage engine used for t1 seems to be able to revert
12988#       changes made by the failing statement.
12989SET @@session.sql_mode = '';
12990Warnings:
12991Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12992SET AUTOCOMMIT= 1;
12993DELETE FROM t1 WHERE f_charbig = 'was inserted';
12994COMMIT WORK;
12995UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12996
12997# check special-1 success: 	1
12998UPDATE t1 SET f_charbig = '';
12999
13000# check special-2 success: 	1
13001UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13002INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13003SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13004WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13005INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13006SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13007'just inserted' FROM t0_template
13008WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13009CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13010BEGIN
13011UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13012f_charbig = 'updated by trigger'
13013      WHERE f_int1 = new.f_int1;
13014END|
13015INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13016SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13017WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13018
13019# check trigger-1 success: 	1
13020DROP TRIGGER trg_1;
13021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13022f_int2 = CAST(f_char1 AS SIGNED INT),
13023f_charbig = 'just inserted'
13024   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13025DELETE FROM t0_aux
13026WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13029'just inserted' FROM t0_template
13030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13031CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13032BEGIN
13033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13034f_charbig = 'updated by trigger'
13035      WHERE f_int1 = new.f_int1;
13036END|
13037INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13038SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13039WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13040
13041# check trigger-2 success: 	1
13042DROP TRIGGER trg_1;
13043UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13044f_int2 = CAST(f_char1 AS SIGNED INT),
13045f_charbig = 'just inserted'
13046   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13047DELETE FROM t0_aux
13048WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13049INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13050SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13051'just inserted' FROM t0_template
13052WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13053CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13054BEGIN
13055UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13056f_charbig = 'updated by trigger'
13057      WHERE f_int1 = new.f_int1;
13058END|
13059UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13060WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13061
13062# check trigger-3 success: 	1
13063DROP TRIGGER trg_1;
13064UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13065f_int2 = CAST(f_char1 AS SIGNED INT),
13066f_charbig = 'just inserted'
13067   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13068DELETE FROM t0_aux
13069WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13070INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13071SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13072'just inserted' FROM t0_template
13073WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13074CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13075BEGIN
13076UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13077f_charbig = 'updated by trigger'
13078      WHERE f_int1 = - old.f_int1;
13079END|
13080UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13081WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13082
13083# check trigger-4 success: 	1
13084DROP TRIGGER trg_1;
13085UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13086f_int2 = CAST(f_char1 AS SIGNED INT),
13087f_charbig = 'just inserted'
13088   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13089DELETE FROM t0_aux
13090WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13091INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13092SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13093'just inserted' FROM t0_template
13094WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13095CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13096BEGIN
13097UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13098f_charbig = 'updated by trigger'
13099      WHERE f_int1 = new.f_int1;
13100END|
13101UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13102WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13103
13104# check trigger-5 success: 	1
13105DROP TRIGGER trg_1;
13106UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13107f_int2 = CAST(f_char1 AS SIGNED INT),
13108f_charbig = 'just inserted'
13109   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13110DELETE FROM t0_aux
13111WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13112INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13113SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13114'just inserted' FROM t0_template
13115WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13116CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13117BEGIN
13118UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13119f_charbig = 'updated by trigger'
13120      WHERE f_int1 = - old.f_int1;
13121END|
13122UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13123WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13124
13125# check trigger-6 success: 	1
13126DROP TRIGGER trg_1;
13127UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13128f_int2 = CAST(f_char1 AS SIGNED INT),
13129f_charbig = 'just inserted'
13130   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13131DELETE FROM t0_aux
13132WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13133INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13134SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13135'just inserted' FROM t0_template
13136WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13137CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13138BEGIN
13139UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13140f_charbig = 'updated by trigger'
13141      WHERE f_int1 = - old.f_int1;
13142END|
13143DELETE FROM t0_aux
13144WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13145
13146# check trigger-7 success: 	1
13147DROP TRIGGER trg_1;
13148UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13149f_int2 = CAST(f_char1 AS SIGNED INT),
13150f_charbig = 'just inserted'
13151   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13152DELETE FROM t0_aux
13153WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13154INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13155SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13156'just inserted' FROM t0_template
13157WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13158CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13159BEGIN
13160UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13161f_charbig = 'updated by trigger'
13162      WHERE f_int1 = - old.f_int1;
13163END|
13164DELETE FROM t0_aux
13165WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13166
13167# check trigger-8 success: 	1
13168DROP TRIGGER trg_1;
13169UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13170f_int2 = CAST(f_char1 AS SIGNED INT),
13171f_charbig = 'just inserted'
13172   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13173DELETE FROM t0_aux
13174WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13175DELETE FROM t1
13176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13177CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13178BEGIN
13179SET new.f_int1 = old.f_int1 + @max_row,
13180new.f_int2 = old.f_int2 - @max_row,
13181new.f_charbig = '####updated per update trigger####';
13182END|
13183UPDATE t1
13184SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13185f_charbig = '####updated per update statement itself####';
13186
13187# check trigger-9 success: 	1
13188DROP TRIGGER trg_2;
13189UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13190f_int2 = CAST(f_char1 AS SIGNED INT),
13191f_charbig = CONCAT('===',f_char1,'===');
13192CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13193BEGIN
13194SET new.f_int1 = new.f_int1 + @max_row,
13195new.f_int2 = new.f_int2 - @max_row,
13196new.f_charbig = '####updated per update trigger####';
13197END|
13198UPDATE t1
13199SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13200f_charbig = '####updated per update statement itself####';
13201
13202# check trigger-10 success: 	1
13203DROP TRIGGER trg_2;
13204UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13205f_int2 = CAST(f_char1 AS SIGNED INT),
13206f_charbig = CONCAT('===',f_char1,'===');
13207CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13208BEGIN
13209SET new.f_int1 = @my_max1 + @counter,
13210new.f_int2 = @my_min2 - @counter,
13211new.f_charbig = '####updated per insert trigger####';
13212SET @counter = @counter + 1;
13213END|
13214SET @counter = 1;
13215SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13216INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13217SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13218CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13220ORDER BY f_int1;
13221DROP TRIGGER trg_3;
13222
13223# check trigger-11 success: 	1
13224DELETE FROM t1
13225WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13226AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13227AND f_charbig = '####updated per insert trigger####';
13228CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13229BEGIN
13230SET new.f_int1 = @my_max1 + @counter,
13231new.f_int2 = @my_min2 - @counter,
13232new.f_charbig = '####updated per insert trigger####';
13233SET @counter = @counter + 1;
13234END|
13235SET @counter = 1;
13236SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13237INSERT INTO t1 (f_char1, f_char2, f_charbig)
13238SELECT CAST(f_int1 AS CHAR),
13239CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13241ORDER BY f_int1;
13242DROP TRIGGER trg_3;
13243
13244# check trigger-12 success: 	1
13245DELETE FROM t1
13246WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13247AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13248AND f_charbig = '####updated per insert trigger####';
13249ANALYZE  TABLE t1;
13250Table	Op	Msg_type	Msg_text
13251test.t1	analyze	status	OK
13252CHECK    TABLE t1 EXTENDED;
13253Table	Op	Msg_type	Msg_text
13254test.t1	check	status	OK
13255CHECKSUM TABLE t1 EXTENDED;
13256Table	Checksum
13257test.t1	<some_value>
13258OPTIMIZE TABLE t1;
13259Table	Op	Msg_type	Msg_text
13260test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13261test.t1	optimize	status	OK
13262# check layout success:    1
13263REPAIR   TABLE t1 EXTENDED;
13264Table	Op	Msg_type	Msg_text
13265test.t1	repair	status	OK
13266# check layout success:    1
13267TRUNCATE t1;
13268
13269# check TRUNCATE success: 	1
13270# check layout success:    1
13271# End usability test (inc/partition_check.inc)
13272DROP TABLE t1;
13273CREATE TABLE t1 (
13274f_int1 INTEGER,
13275f_int2 INTEGER,
13276f_char1 CHAR(20),
13277f_char2 CHAR(20),
13278f_charbig VARCHAR(1000)
13279, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
13280)
13281PARTITION BY RANGE(f_int1)
13282(PARTITION parta VALUES LESS THAN (0),
13283PARTITION partb VALUES LESS THAN (5),
13284PARTITION partc VALUES LESS THAN (10),
13285PARTITION partd VALUES LESS THAN (10 + 5),
13286PARTITION parte VALUES LESS THAN (20),
13287PARTITION partf VALUES LESS THAN (2147483646));
13288INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13289SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
13290# Start usability test (inc/partition_check.inc)
13291create_command
13292SHOW CREATE TABLE t1;
13293Table	Create Table
13294t1	CREATE TABLE `t1` (
13295  `f_int1` int(11) NOT NULL,
13296  `f_int2` int(11) NOT NULL,
13297  `f_char1` char(20) DEFAULT NULL,
13298  `f_char2` char(20) DEFAULT NULL,
13299  `f_charbig` varchar(1000) DEFAULT NULL,
13300  PRIMARY KEY (`f_int1`,`f_int2`),
13301  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13302) ENGINE=InnoDB DEFAULT CHARSET=latin1
13303/*!50100 PARTITION BY RANGE (f_int1)
13304(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
13305 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
13306 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
13307 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
13308 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
13309 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13310
13311unified filelist
13312t1#P#parta.ibd
13313t1#P#partb.ibd
13314t1#P#partc.ibd
13315t1#P#partd.ibd
13316t1#P#parte.ibd
13317t1#P#partf.ibd
13318t1.frm
13319
13320# check prerequisites-1 success:    1
13321# check COUNT(*) success:    1
13322# check MIN/MAX(f_int1) success:    1
13323# check MIN/MAX(f_int2) success:    1
13324INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13325SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13326CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13327WHERE f_int1 IN (2,3);
13328ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
13329# check prerequisites-3 success:    1
13330# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13331INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13332SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13333CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13334WHERE f_int1 IN (2,3);
13335DELETE FROM t1 WHERE f_charbig = 'delete me';
13336INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13337SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13338CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13339WHERE f_int1 IN (2,3);
13340DELETE FROM t1 WHERE f_charbig = 'delete me';
13341# check read via f_int1 success: 1
13342# check read via f_int2 success: 1
13343
13344# check multiple-1 success: 	1
13345DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13346
13347# check multiple-2 success: 	1
13348INSERT INTO t1 SELECT * FROM t0_template
13349WHERE MOD(f_int1,3) = 0;
13350
13351# check multiple-3 success: 	1
13352UPDATE t1 SET f_int1 = f_int1 + @max_row
13353WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13354AND @max_row_div2 + @max_row_div4;
13355
13356# check multiple-4 success: 	1
13357DELETE FROM t1
13358WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13359AND @max_row_div2 + @max_row_div4 + @max_row;
13360
13361# check multiple-5 success: 	1
13362SELECT COUNT(*) INTO @try_count FROM t0_template
13363WHERE MOD(f_int1,3) = 0
13364AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13365SELECT COUNT(*) INTO @clash_count
13366FROM t1 INNER JOIN t0_template USING(f_int1)
13367WHERE MOD(f_int1,3) = 0
13368AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13369SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13370INSERT INTO t1
13371SET f_int1 = @cur_value , f_int2 = @cur_value,
13372f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13373f_charbig = '#SINGLE#';
13374
13375# check single-1 success: 	1
13376SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13377INSERT INTO t1
13378SET f_int1 = @cur_value , f_int2 = @cur_value,
13379f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13380f_charbig = '#SINGLE#';
13381
13382# check single-2 success: 	1
13383SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13384SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13385UPDATE t1 SET f_int1 = @cur_value2
13386WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13387
13388# check single-3 success: 	1
13389SET @cur_value1= -1;
13390SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13391UPDATE t1 SET f_int1 = @cur_value1
13392WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13393
13394# check single-4 success: 	1
13395SELECT MAX(f_int1) INTO @cur_value FROM t1;
13396DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13397
13398# check single-5 success: 	1
13399DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13400
13401# check single-6 success: 	1
13402INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13403ERROR HY000: Table has no partition for value 2147483647
13404DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13405INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13406f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13407f_charbig = '#NULL#';
13408INSERT INTO t1
13409SET f_int1 = NULL , f_int2 = -@max_row,
13410f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13411f_charbig = '#NULL#';
13412ERROR 23000: Column 'f_int1' cannot be null
13413# check null success:    1
13414DELETE FROM t1
13415WHERE f_int1 = 0 AND f_int2 = 0
13416AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13417AND f_charbig = '#NULL#';
13418INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13419SELECT f_int1, f_int1, '', '', 'was inserted'
13420   FROM t0_template source_tab
13421WHERE MOD(f_int1,3) = 0
13422AND f_int1 BETWEEN @max_row_div2 AND @max_row
13423ON DUPLICATE KEY
13424UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13425f_int2 = 2 * @max_row + source_tab.f_int1,
13426f_charbig = 'was updated';
13427
13428# check unique-1-a success: 	1
13429
13430# check unique-1-b success: 	1
13431DELETE FROM t1 WHERE f_charbig = 'was inserted';
13432UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13433f_int2 = CAST(f_char1 AS SIGNED INT),
13434f_charbig = CONCAT('===',f_char1,'===')
13435WHERE f_charbig = 'was updated';
13436REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13437SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13438   FROM t0_template source_tab
13439WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13440
13441# check replace success: 	1
13442DELETE FROM t1
13443WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13444DELETE FROM t1
13445WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13446f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13447UPDATE t1 SET f_int2 = f_int1,
13448f_char1 = CAST(f_int1 AS CHAR),
13449f_char2 = CAST(f_int1 AS CHAR),
13450f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13451WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13452SET AUTOCOMMIT= 0;
13453INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13454SELECT f_int1, f_int1, '', '', 'was inserted'
13455FROM t0_template source_tab
13456WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13457
13458# check transactions-1 success: 	1
13459COMMIT WORK;
13460
13461# check transactions-2 success: 	1
13462ROLLBACK WORK;
13463
13464# check transactions-3 success: 	1
13465DELETE FROM t1 WHERE f_charbig = 'was inserted';
13466COMMIT WORK;
13467ROLLBACK WORK;
13468
13469# check transactions-4 success: 	1
13470INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13471SELECT f_int1, f_int1, '', '', 'was inserted'
13472FROM t0_template source_tab
13473WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13474
13475# check transactions-5 success: 	1
13476ROLLBACK WORK;
13477
13478# check transactions-6 success: 	1
13479# INFO: Storage engine used for t1 seems to be transactional.
13480COMMIT;
13481
13482# check transactions-7 success: 	1
13483DELETE FROM t1 WHERE f_charbig = 'was inserted';
13484COMMIT WORK;
13485SET @@session.sql_mode = 'traditional';
13486Warnings:
13487Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13488SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13489INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13490SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13491'', '', 'was inserted' FROM t0_template
13492WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13493ERROR 22012: Division by 0
13494COMMIT;
13495
13496# check transactions-8 success: 	1
13497# INFO: Storage engine used for t1 seems to be able to revert
13498#       changes made by the failing statement.
13499SET @@session.sql_mode = '';
13500Warnings:
13501Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13502SET AUTOCOMMIT= 1;
13503DELETE FROM t1 WHERE f_charbig = 'was inserted';
13504COMMIT WORK;
13505UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13506
13507# check special-1 success: 	1
13508UPDATE t1 SET f_charbig = '';
13509
13510# check special-2 success: 	1
13511UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13512INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13513SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13514WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13515INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13516SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13517'just inserted' FROM t0_template
13518WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13519CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13520BEGIN
13521UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13522f_charbig = 'updated by trigger'
13523      WHERE f_int1 = new.f_int1;
13524END|
13525INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13526SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13527WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13528
13529# check trigger-1 success: 	1
13530DROP TRIGGER trg_1;
13531UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13532f_int2 = CAST(f_char1 AS SIGNED INT),
13533f_charbig = 'just inserted'
13534   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13535DELETE FROM t0_aux
13536WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13537INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13538SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13539'just inserted' FROM t0_template
13540WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13541CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13542BEGIN
13543UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13544f_charbig = 'updated by trigger'
13545      WHERE f_int1 = new.f_int1;
13546END|
13547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13548SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13550
13551# check trigger-2 success: 	1
13552DROP TRIGGER trg_1;
13553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13554f_int2 = CAST(f_char1 AS SIGNED INT),
13555f_charbig = 'just inserted'
13556   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13557DELETE FROM t0_aux
13558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13559INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13560SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13561'just inserted' FROM t0_template
13562WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13563CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13564BEGIN
13565UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13566f_charbig = 'updated by trigger'
13567      WHERE f_int1 = new.f_int1;
13568END|
13569UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13570WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13571
13572# check trigger-3 success: 	1
13573DROP TRIGGER trg_1;
13574UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13575f_int2 = CAST(f_char1 AS SIGNED INT),
13576f_charbig = 'just inserted'
13577   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13578DELETE FROM t0_aux
13579WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13580INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13581SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13582'just inserted' FROM t0_template
13583WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13584CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13585BEGIN
13586UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13587f_charbig = 'updated by trigger'
13588      WHERE f_int1 = - old.f_int1;
13589END|
13590UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13591WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13592
13593# check trigger-4 success: 	1
13594DROP TRIGGER trg_1;
13595UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13596f_int2 = CAST(f_char1 AS SIGNED INT),
13597f_charbig = 'just inserted'
13598   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13599DELETE FROM t0_aux
13600WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13601INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13602SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13603'just inserted' FROM t0_template
13604WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13605CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13606BEGIN
13607UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13608f_charbig = 'updated by trigger'
13609      WHERE f_int1 = new.f_int1;
13610END|
13611UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13612WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13613
13614# check trigger-5 success: 	1
13615DROP TRIGGER trg_1;
13616UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13617f_int2 = CAST(f_char1 AS SIGNED INT),
13618f_charbig = 'just inserted'
13619   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13620DELETE FROM t0_aux
13621WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13622INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13623SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13624'just inserted' FROM t0_template
13625WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13626CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13627BEGIN
13628UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13629f_charbig = 'updated by trigger'
13630      WHERE f_int1 = - old.f_int1;
13631END|
13632UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13633WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13634
13635# check trigger-6 success: 	1
13636DROP TRIGGER trg_1;
13637UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13638f_int2 = CAST(f_char1 AS SIGNED INT),
13639f_charbig = 'just inserted'
13640   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13641DELETE FROM t0_aux
13642WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13643INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13644SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13645'just inserted' FROM t0_template
13646WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13647CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13648BEGIN
13649UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13650f_charbig = 'updated by trigger'
13651      WHERE f_int1 = - old.f_int1;
13652END|
13653DELETE FROM t0_aux
13654WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13655
13656# check trigger-7 success: 	1
13657DROP TRIGGER trg_1;
13658UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13659f_int2 = CAST(f_char1 AS SIGNED INT),
13660f_charbig = 'just inserted'
13661   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13662DELETE FROM t0_aux
13663WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13664INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13665SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13666'just inserted' FROM t0_template
13667WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13668CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13669BEGIN
13670UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13671f_charbig = 'updated by trigger'
13672      WHERE f_int1 = - old.f_int1;
13673END|
13674DELETE FROM t0_aux
13675WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13676
13677# check trigger-8 success: 	1
13678DROP TRIGGER trg_1;
13679UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13680f_int2 = CAST(f_char1 AS SIGNED INT),
13681f_charbig = 'just inserted'
13682   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13683DELETE FROM t0_aux
13684WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13685DELETE FROM t1
13686WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13687CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13688BEGIN
13689SET new.f_int1 = old.f_int1 + @max_row,
13690new.f_int2 = old.f_int2 - @max_row,
13691new.f_charbig = '####updated per update trigger####';
13692END|
13693UPDATE t1
13694SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13695f_charbig = '####updated per update statement itself####';
13696
13697# check trigger-9 success: 	1
13698DROP TRIGGER trg_2;
13699UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13700f_int2 = CAST(f_char1 AS SIGNED INT),
13701f_charbig = CONCAT('===',f_char1,'===');
13702CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13703BEGIN
13704SET new.f_int1 = new.f_int1 + @max_row,
13705new.f_int2 = new.f_int2 - @max_row,
13706new.f_charbig = '####updated per update trigger####';
13707END|
13708UPDATE t1
13709SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13710f_charbig = '####updated per update statement itself####';
13711
13712# check trigger-10 success: 	1
13713DROP TRIGGER trg_2;
13714UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13715f_int2 = CAST(f_char1 AS SIGNED INT),
13716f_charbig = CONCAT('===',f_char1,'===');
13717CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13718BEGIN
13719SET new.f_int1 = @my_max1 + @counter,
13720new.f_int2 = @my_min2 - @counter,
13721new.f_charbig = '####updated per insert trigger####';
13722SET @counter = @counter + 1;
13723END|
13724SET @counter = 1;
13725SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13726INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13727SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13728CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13730ORDER BY f_int1;
13731DROP TRIGGER trg_3;
13732
13733# check trigger-11 success: 	1
13734DELETE FROM t1
13735WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13736AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13737AND f_charbig = '####updated per insert trigger####';
13738CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13739BEGIN
13740SET new.f_int1 = @my_max1 + @counter,
13741new.f_int2 = @my_min2 - @counter,
13742new.f_charbig = '####updated per insert trigger####';
13743SET @counter = @counter + 1;
13744END|
13745SET @counter = 1;
13746SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13747INSERT INTO t1 (f_char1, f_char2, f_charbig)
13748SELECT CAST(f_int1 AS CHAR),
13749CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13750WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13751ORDER BY f_int1;
13752DROP TRIGGER trg_3;
13753
13754# check trigger-12 success: 	1
13755DELETE FROM t1
13756WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13757AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13758AND f_charbig = '####updated per insert trigger####';
13759ANALYZE  TABLE t1;
13760Table	Op	Msg_type	Msg_text
13761test.t1	analyze	status	OK
13762CHECK    TABLE t1 EXTENDED;
13763Table	Op	Msg_type	Msg_text
13764test.t1	check	status	OK
13765CHECKSUM TABLE t1 EXTENDED;
13766Table	Checksum
13767test.t1	<some_value>
13768OPTIMIZE TABLE t1;
13769Table	Op	Msg_type	Msg_text
13770test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13771test.t1	optimize	status	OK
13772# check layout success:    1
13773REPAIR   TABLE t1 EXTENDED;
13774Table	Op	Msg_type	Msg_text
13775test.t1	repair	status	OK
13776# check layout success:    1
13777TRUNCATE t1;
13778
13779# check TRUNCATE success: 	1
13780# check layout success:    1
13781# End usability test (inc/partition_check.inc)
13782DROP TABLE t1;
13783CREATE TABLE t1 (
13784f_int1 INTEGER,
13785f_int2 INTEGER,
13786f_char1 CHAR(20),
13787f_char2 CHAR(20),
13788f_charbig VARCHAR(1000)
13789, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
13790)
13791PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
13792(PARTITION parta VALUES LESS THAN (0),
13793PARTITION partb VALUES LESS THAN (5),
13794PARTITION partc VALUES LESS THAN (10),
13795PARTITION partd VALUES LESS THAN (2147483646));
13796INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13797SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
13798# Start usability test (inc/partition_check.inc)
13799create_command
13800SHOW CREATE TABLE t1;
13801Table	Create Table
13802t1	CREATE TABLE `t1` (
13803  `f_int1` int(11) NOT NULL,
13804  `f_int2` int(11) NOT NULL,
13805  `f_char1` char(20) DEFAULT NULL,
13806  `f_char2` char(20) DEFAULT NULL,
13807  `f_charbig` varchar(1000) DEFAULT NULL,
13808  PRIMARY KEY (`f_int1`,`f_int2`),
13809  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
13810) ENGINE=InnoDB DEFAULT CHARSET=latin1
13811/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
13812SUBPARTITION BY HASH (f_int1)
13813SUBPARTITIONS 2
13814(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
13815 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
13816 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
13817 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13818
13819unified filelist
13820t1#P#parta#SP#partasp0.ibd
13821t1#P#parta#SP#partasp1.ibd
13822t1#P#partb#SP#partbsp0.ibd
13823t1#P#partb#SP#partbsp1.ibd
13824t1#P#partc#SP#partcsp0.ibd
13825t1#P#partc#SP#partcsp1.ibd
13826t1#P#partd#SP#partdsp0.ibd
13827t1#P#partd#SP#partdsp1.ibd
13828t1.frm
13829
13830# check prerequisites-1 success:    1
13831# check COUNT(*) success:    1
13832# check MIN/MAX(f_int1) success:    1
13833# check MIN/MAX(f_int2) success:    1
13834INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13835SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13836CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13837WHERE f_int1 IN (2,3);
13838ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
13839# check prerequisites-3 success:    1
13840# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13841INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13842SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13843CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13844WHERE f_int1 IN (2,3);
13845DELETE FROM t1 WHERE f_charbig = 'delete me';
13846INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13847SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13848CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13849WHERE f_int1 IN (2,3);
13850DELETE FROM t1 WHERE f_charbig = 'delete me';
13851# check read via f_int1 success: 1
13852# check read via f_int2 success: 1
13853
13854# check multiple-1 success: 	1
13855DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13856
13857# check multiple-2 success: 	1
13858INSERT INTO t1 SELECT * FROM t0_template
13859WHERE MOD(f_int1,3) = 0;
13860
13861# check multiple-3 success: 	1
13862UPDATE t1 SET f_int1 = f_int1 + @max_row
13863WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13864AND @max_row_div2 + @max_row_div4;
13865
13866# check multiple-4 success: 	1
13867DELETE FROM t1
13868WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13869AND @max_row_div2 + @max_row_div4 + @max_row;
13870
13871# check multiple-5 success: 	1
13872SELECT COUNT(*) INTO @try_count FROM t0_template
13873WHERE MOD(f_int1,3) = 0
13874AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13875SELECT COUNT(*) INTO @clash_count
13876FROM t1 INNER JOIN t0_template USING(f_int1)
13877WHERE MOD(f_int1,3) = 0
13878AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13879SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13880INSERT INTO t1
13881SET f_int1 = @cur_value , f_int2 = @cur_value,
13882f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13883f_charbig = '#SINGLE#';
13884
13885# check single-1 success: 	1
13886SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13887INSERT INTO t1
13888SET f_int1 = @cur_value , f_int2 = @cur_value,
13889f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13890f_charbig = '#SINGLE#';
13891
13892# check single-2 success: 	1
13893SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13894SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13895UPDATE t1 SET f_int1 = @cur_value2
13896WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13897
13898# check single-3 success: 	1
13899SET @cur_value1= -1;
13900SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13901UPDATE t1 SET f_int1 = @cur_value1
13902WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13903
13904# check single-4 success: 	1
13905SELECT MAX(f_int1) INTO @cur_value FROM t1;
13906DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13907
13908# check single-5 success: 	1
13909DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13910
13911# check single-6 success: 	1
13912INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13913
13914# check single-7 success: 	1
13915DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13916DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13917INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13918f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13919f_charbig = '#NULL#';
13920INSERT INTO t1
13921SET f_int1 = NULL , f_int2 = -@max_row,
13922f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13923f_charbig = '#NULL#';
13924ERROR 23000: Column 'f_int1' cannot be null
13925# check null success:    1
13926DELETE FROM t1
13927WHERE f_int1 = 0 AND f_int2 = 0
13928AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13929AND f_charbig = '#NULL#';
13930INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13931SELECT f_int1, f_int1, '', '', 'was inserted'
13932   FROM t0_template source_tab
13933WHERE MOD(f_int1,3) = 0
13934AND f_int1 BETWEEN @max_row_div2 AND @max_row
13935ON DUPLICATE KEY
13936UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13937f_int2 = 2 * @max_row + source_tab.f_int1,
13938f_charbig = 'was updated';
13939
13940# check unique-1-a success: 	1
13941
13942# check unique-1-b success: 	1
13943DELETE FROM t1 WHERE f_charbig = 'was inserted';
13944UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13945f_int2 = CAST(f_char1 AS SIGNED INT),
13946f_charbig = CONCAT('===',f_char1,'===')
13947WHERE f_charbig = 'was updated';
13948REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13949SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13950   FROM t0_template source_tab
13951WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13952
13953# check replace success: 	1
13954DELETE FROM t1
13955WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13956DELETE FROM t1
13957WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13958f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13959UPDATE t1 SET f_int2 = f_int1,
13960f_char1 = CAST(f_int1 AS CHAR),
13961f_char2 = CAST(f_int1 AS CHAR),
13962f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13963WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13964SET AUTOCOMMIT= 0;
13965INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13966SELECT f_int1, f_int1, '', '', 'was inserted'
13967FROM t0_template source_tab
13968WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13969
13970# check transactions-1 success: 	1
13971COMMIT WORK;
13972
13973# check transactions-2 success: 	1
13974ROLLBACK WORK;
13975
13976# check transactions-3 success: 	1
13977DELETE FROM t1 WHERE f_charbig = 'was inserted';
13978COMMIT WORK;
13979ROLLBACK WORK;
13980
13981# check transactions-4 success: 	1
13982INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13983SELECT f_int1, f_int1, '', '', 'was inserted'
13984FROM t0_template source_tab
13985WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13986
13987# check transactions-5 success: 	1
13988ROLLBACK WORK;
13989
13990# check transactions-6 success: 	1
13991# INFO: Storage engine used for t1 seems to be transactional.
13992COMMIT;
13993
13994# check transactions-7 success: 	1
13995DELETE FROM t1 WHERE f_charbig = 'was inserted';
13996COMMIT WORK;
13997SET @@session.sql_mode = 'traditional';
13998Warnings:
13999Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14000SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14001INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14002SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14003'', '', 'was inserted' FROM t0_template
14004WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14005ERROR 22012: Division by 0
14006COMMIT;
14007
14008# check transactions-8 success: 	1
14009# INFO: Storage engine used for t1 seems to be able to revert
14010#       changes made by the failing statement.
14011SET @@session.sql_mode = '';
14012Warnings:
14013Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14014SET AUTOCOMMIT= 1;
14015DELETE FROM t1 WHERE f_charbig = 'was inserted';
14016COMMIT WORK;
14017UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14018
14019# check special-1 success: 	1
14020UPDATE t1 SET f_charbig = '';
14021
14022# check special-2 success: 	1
14023UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14024INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14025SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14026WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14029'just inserted' FROM t0_template
14030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14031CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14032BEGIN
14033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14034f_charbig = 'updated by trigger'
14035      WHERE f_int1 = new.f_int1;
14036END|
14037INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14038SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14039WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14040
14041# check trigger-1 success: 	1
14042DROP TRIGGER trg_1;
14043UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14044f_int2 = CAST(f_char1 AS SIGNED INT),
14045f_charbig = 'just inserted'
14046   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14047DELETE FROM t0_aux
14048WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14049INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14050SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14051'just inserted' FROM t0_template
14052WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14053CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14054BEGIN
14055UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14056f_charbig = 'updated by trigger'
14057      WHERE f_int1 = new.f_int1;
14058END|
14059INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14060SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14061WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14062
14063# check trigger-2 success: 	1
14064DROP TRIGGER trg_1;
14065UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14066f_int2 = CAST(f_char1 AS SIGNED INT),
14067f_charbig = 'just inserted'
14068   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14069DELETE FROM t0_aux
14070WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14071INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14072SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14073'just inserted' FROM t0_template
14074WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14075CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14076BEGIN
14077UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14078f_charbig = 'updated by trigger'
14079      WHERE f_int1 = new.f_int1;
14080END|
14081UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14082WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14083
14084# check trigger-3 success: 	1
14085DROP TRIGGER trg_1;
14086UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14087f_int2 = CAST(f_char1 AS SIGNED INT),
14088f_charbig = 'just inserted'
14089   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14090DELETE FROM t0_aux
14091WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14092INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14093SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14094'just inserted' FROM t0_template
14095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14096CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14097BEGIN
14098UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14099f_charbig = 'updated by trigger'
14100      WHERE f_int1 = - old.f_int1;
14101END|
14102UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14103WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14104
14105# check trigger-4 success: 	1
14106DROP TRIGGER trg_1;
14107UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14108f_int2 = CAST(f_char1 AS SIGNED INT),
14109f_charbig = 'just inserted'
14110   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14111DELETE FROM t0_aux
14112WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14114SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14115'just inserted' FROM t0_template
14116WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14117CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14118BEGIN
14119UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14120f_charbig = 'updated by trigger'
14121      WHERE f_int1 = new.f_int1;
14122END|
14123UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14124WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14125
14126# check trigger-5 success: 	1
14127DROP TRIGGER trg_1;
14128UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14129f_int2 = CAST(f_char1 AS SIGNED INT),
14130f_charbig = 'just inserted'
14131   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14132DELETE FROM t0_aux
14133WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14134INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14135SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14136'just inserted' FROM t0_template
14137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14138CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14139BEGIN
14140UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14141f_charbig = 'updated by trigger'
14142      WHERE f_int1 = - old.f_int1;
14143END|
14144UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14145WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14146
14147# check trigger-6 success: 	1
14148DROP TRIGGER trg_1;
14149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14150f_int2 = CAST(f_char1 AS SIGNED INT),
14151f_charbig = 'just inserted'
14152   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14153DELETE FROM t0_aux
14154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14157'just inserted' FROM t0_template
14158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14159CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14160BEGIN
14161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14162f_charbig = 'updated by trigger'
14163      WHERE f_int1 = - old.f_int1;
14164END|
14165DELETE FROM t0_aux
14166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14167
14168# check trigger-7 success: 	1
14169DROP TRIGGER trg_1;
14170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14171f_int2 = CAST(f_char1 AS SIGNED INT),
14172f_charbig = 'just inserted'
14173   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14174DELETE FROM t0_aux
14175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14178'just inserted' FROM t0_template
14179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14180CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14181BEGIN
14182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14183f_charbig = 'updated by trigger'
14184      WHERE f_int1 = - old.f_int1;
14185END|
14186DELETE FROM t0_aux
14187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14188
14189# check trigger-8 success: 	1
14190DROP TRIGGER trg_1;
14191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14192f_int2 = CAST(f_char1 AS SIGNED INT),
14193f_charbig = 'just inserted'
14194   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14195DELETE FROM t0_aux
14196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14197DELETE FROM t1
14198WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14199CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14200BEGIN
14201SET new.f_int1 = old.f_int1 + @max_row,
14202new.f_int2 = old.f_int2 - @max_row,
14203new.f_charbig = '####updated per update trigger####';
14204END|
14205UPDATE t1
14206SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14207f_charbig = '####updated per update statement itself####';
14208
14209# check trigger-9 success: 	1
14210DROP TRIGGER trg_2;
14211UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14212f_int2 = CAST(f_char1 AS SIGNED INT),
14213f_charbig = CONCAT('===',f_char1,'===');
14214CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14215BEGIN
14216SET new.f_int1 = new.f_int1 + @max_row,
14217new.f_int2 = new.f_int2 - @max_row,
14218new.f_charbig = '####updated per update trigger####';
14219END|
14220UPDATE t1
14221SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14222f_charbig = '####updated per update statement itself####';
14223
14224# check trigger-10 success: 	1
14225DROP TRIGGER trg_2;
14226UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14227f_int2 = CAST(f_char1 AS SIGNED INT),
14228f_charbig = CONCAT('===',f_char1,'===');
14229CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14230BEGIN
14231SET new.f_int1 = @my_max1 + @counter,
14232new.f_int2 = @my_min2 - @counter,
14233new.f_charbig = '####updated per insert trigger####';
14234SET @counter = @counter + 1;
14235END|
14236SET @counter = 1;
14237SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14238INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14239SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14240CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14241WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14242ORDER BY f_int1;
14243DROP TRIGGER trg_3;
14244
14245# check trigger-11 success: 	1
14246DELETE FROM t1
14247WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14248AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14249AND f_charbig = '####updated per insert trigger####';
14250CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14251BEGIN
14252SET new.f_int1 = @my_max1 + @counter,
14253new.f_int2 = @my_min2 - @counter,
14254new.f_charbig = '####updated per insert trigger####';
14255SET @counter = @counter + 1;
14256END|
14257SET @counter = 1;
14258SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14259INSERT INTO t1 (f_char1, f_char2, f_charbig)
14260SELECT CAST(f_int1 AS CHAR),
14261CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14262WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14263ORDER BY f_int1;
14264DROP TRIGGER trg_3;
14265
14266# check trigger-12 success: 	1
14267DELETE FROM t1
14268WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14269AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14270AND f_charbig = '####updated per insert trigger####';
14271ANALYZE  TABLE t1;
14272Table	Op	Msg_type	Msg_text
14273test.t1	analyze	status	OK
14274CHECK    TABLE t1 EXTENDED;
14275Table	Op	Msg_type	Msg_text
14276test.t1	check	status	OK
14277CHECKSUM TABLE t1 EXTENDED;
14278Table	Checksum
14279test.t1	<some_value>
14280OPTIMIZE TABLE t1;
14281Table	Op	Msg_type	Msg_text
14282test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14283test.t1	optimize	status	OK
14284# check layout success:    1
14285REPAIR   TABLE t1 EXTENDED;
14286Table	Op	Msg_type	Msg_text
14287test.t1	repair	status	OK
14288# check layout success:    1
14289TRUNCATE t1;
14290
14291# check TRUNCATE success: 	1
14292# check layout success:    1
14293# End usability test (inc/partition_check.inc)
14294DROP TABLE t1;
14295CREATE TABLE t1 (
14296f_int1 INTEGER,
14297f_int2 INTEGER,
14298f_char1 CHAR(20),
14299f_char2 CHAR(20),
14300f_charbig VARCHAR(1000)
14301, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
14302)
14303PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
14304(PARTITION part1 VALUES LESS THAN (0)
14305(SUBPARTITION subpart11, SUBPARTITION subpart12),
14306PARTITION part2 VALUES LESS THAN (5)
14307(SUBPARTITION subpart21, SUBPARTITION subpart22),
14308PARTITION part3 VALUES LESS THAN (10)
14309(SUBPARTITION subpart31, SUBPARTITION subpart32),
14310PARTITION part4 VALUES LESS THAN (2147483646)
14311(SUBPARTITION subpart41, SUBPARTITION subpart42));
14312INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14313SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
14314# Start usability test (inc/partition_check.inc)
14315create_command
14316SHOW CREATE TABLE t1;
14317Table	Create Table
14318t1	CREATE TABLE `t1` (
14319  `f_int1` int(11) NOT NULL,
14320  `f_int2` int(11) NOT NULL,
14321  `f_char1` char(20) DEFAULT NULL,
14322  `f_char2` char(20) DEFAULT NULL,
14323  `f_charbig` varchar(1000) DEFAULT NULL,
14324  PRIMARY KEY (`f_int1`,`f_int2`),
14325  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14326) ENGINE=InnoDB DEFAULT CHARSET=latin1
14327/*!50100 PARTITION BY RANGE (f_int1)
14328SUBPARTITION BY KEY (f_int1)
14329(PARTITION part1 VALUES LESS THAN (0)
14330 (SUBPARTITION subpart11 ENGINE = InnoDB,
14331  SUBPARTITION subpart12 ENGINE = InnoDB),
14332 PARTITION part2 VALUES LESS THAN (5)
14333 (SUBPARTITION subpart21 ENGINE = InnoDB,
14334  SUBPARTITION subpart22 ENGINE = InnoDB),
14335 PARTITION part3 VALUES LESS THAN (10)
14336 (SUBPARTITION subpart31 ENGINE = InnoDB,
14337  SUBPARTITION subpart32 ENGINE = InnoDB),
14338 PARTITION part4 VALUES LESS THAN (2147483646)
14339 (SUBPARTITION subpart41 ENGINE = InnoDB,
14340  SUBPARTITION subpart42 ENGINE = InnoDB)) */
14341
14342unified filelist
14343t1#P#part1#SP#subpart11.ibd
14344t1#P#part1#SP#subpart12.ibd
14345t1#P#part2#SP#subpart21.ibd
14346t1#P#part2#SP#subpart22.ibd
14347t1#P#part3#SP#subpart31.ibd
14348t1#P#part3#SP#subpart32.ibd
14349t1#P#part4#SP#subpart41.ibd
14350t1#P#part4#SP#subpart42.ibd
14351t1.frm
14352
14353# check prerequisites-1 success:    1
14354# check COUNT(*) success:    1
14355# check MIN/MAX(f_int1) success:    1
14356# check MIN/MAX(f_int2) success:    1
14357INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14358SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14359CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14360WHERE f_int1 IN (2,3);
14361ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
14362# check prerequisites-3 success:    1
14363# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14364INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14365SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14366CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14367WHERE f_int1 IN (2,3);
14368DELETE FROM t1 WHERE f_charbig = 'delete me';
14369INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14370SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14371CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14372WHERE f_int1 IN (2,3);
14373DELETE FROM t1 WHERE f_charbig = 'delete me';
14374# check read via f_int1 success: 1
14375# check read via f_int2 success: 1
14376
14377# check multiple-1 success: 	1
14378DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14379
14380# check multiple-2 success: 	1
14381INSERT INTO t1 SELECT * FROM t0_template
14382WHERE MOD(f_int1,3) = 0;
14383
14384# check multiple-3 success: 	1
14385UPDATE t1 SET f_int1 = f_int1 + @max_row
14386WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14387AND @max_row_div2 + @max_row_div4;
14388
14389# check multiple-4 success: 	1
14390DELETE FROM t1
14391WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14392AND @max_row_div2 + @max_row_div4 + @max_row;
14393
14394# check multiple-5 success: 	1
14395SELECT COUNT(*) INTO @try_count FROM t0_template
14396WHERE MOD(f_int1,3) = 0
14397AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14398SELECT COUNT(*) INTO @clash_count
14399FROM t1 INNER JOIN t0_template USING(f_int1)
14400WHERE MOD(f_int1,3) = 0
14401AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14402SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14403INSERT INTO t1
14404SET f_int1 = @cur_value , f_int2 = @cur_value,
14405f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14406f_charbig = '#SINGLE#';
14407
14408# check single-1 success: 	1
14409SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14410INSERT INTO t1
14411SET f_int1 = @cur_value , f_int2 = @cur_value,
14412f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14413f_charbig = '#SINGLE#';
14414
14415# check single-2 success: 	1
14416SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14417SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14418UPDATE t1 SET f_int1 = @cur_value2
14419WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14420
14421# check single-3 success: 	1
14422SET @cur_value1= -1;
14423SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14424UPDATE t1 SET f_int1 = @cur_value1
14425WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14426
14427# check single-4 success: 	1
14428SELECT MAX(f_int1) INTO @cur_value FROM t1;
14429DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14430
14431# check single-5 success: 	1
14432DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14433
14434# check single-6 success: 	1
14435INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14436ERROR HY000: Table has no partition for value 2147483647
14437DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14438INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14439f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14440f_charbig = '#NULL#';
14441INSERT INTO t1
14442SET f_int1 = NULL , f_int2 = -@max_row,
14443f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14444f_charbig = '#NULL#';
14445ERROR 23000: Column 'f_int1' cannot be null
14446# check null success:    1
14447DELETE FROM t1
14448WHERE f_int1 = 0 AND f_int2 = 0
14449AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14450AND f_charbig = '#NULL#';
14451INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14452SELECT f_int1, f_int1, '', '', 'was inserted'
14453   FROM t0_template source_tab
14454WHERE MOD(f_int1,3) = 0
14455AND f_int1 BETWEEN @max_row_div2 AND @max_row
14456ON DUPLICATE KEY
14457UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14458f_int2 = 2 * @max_row + source_tab.f_int1,
14459f_charbig = 'was updated';
14460
14461# check unique-1-a success: 	1
14462
14463# check unique-1-b success: 	1
14464DELETE FROM t1 WHERE f_charbig = 'was inserted';
14465UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14466f_int2 = CAST(f_char1 AS SIGNED INT),
14467f_charbig = CONCAT('===',f_char1,'===')
14468WHERE f_charbig = 'was updated';
14469REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14470SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14471   FROM t0_template source_tab
14472WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14473
14474# check replace success: 	1
14475DELETE FROM t1
14476WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14477DELETE FROM t1
14478WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14479f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14480UPDATE t1 SET f_int2 = f_int1,
14481f_char1 = CAST(f_int1 AS CHAR),
14482f_char2 = CAST(f_int1 AS CHAR),
14483f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14484WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14485SET AUTOCOMMIT= 0;
14486INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14487SELECT f_int1, f_int1, '', '', 'was inserted'
14488FROM t0_template source_tab
14489WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14490
14491# check transactions-1 success: 	1
14492COMMIT WORK;
14493
14494# check transactions-2 success: 	1
14495ROLLBACK WORK;
14496
14497# check transactions-3 success: 	1
14498DELETE FROM t1 WHERE f_charbig = 'was inserted';
14499COMMIT WORK;
14500ROLLBACK WORK;
14501
14502# check transactions-4 success: 	1
14503INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14504SELECT f_int1, f_int1, '', '', 'was inserted'
14505FROM t0_template source_tab
14506WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14507
14508# check transactions-5 success: 	1
14509ROLLBACK WORK;
14510
14511# check transactions-6 success: 	1
14512# INFO: Storage engine used for t1 seems to be transactional.
14513COMMIT;
14514
14515# check transactions-7 success: 	1
14516DELETE FROM t1 WHERE f_charbig = 'was inserted';
14517COMMIT WORK;
14518SET @@session.sql_mode = 'traditional';
14519Warnings:
14520Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14521SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14522INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14523SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14524'', '', 'was inserted' FROM t0_template
14525WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14526ERROR 22012: Division by 0
14527COMMIT;
14528
14529# check transactions-8 success: 	1
14530# INFO: Storage engine used for t1 seems to be able to revert
14531#       changes made by the failing statement.
14532SET @@session.sql_mode = '';
14533Warnings:
14534Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14535SET AUTOCOMMIT= 1;
14536DELETE FROM t1 WHERE f_charbig = 'was inserted';
14537COMMIT WORK;
14538UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14539
14540# check special-1 success: 	1
14541UPDATE t1 SET f_charbig = '';
14542
14543# check special-2 success: 	1
14544UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14545INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14546SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14547WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14548INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14549SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14550'just inserted' FROM t0_template
14551WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14552CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14553BEGIN
14554UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14555f_charbig = 'updated by trigger'
14556      WHERE f_int1 = new.f_int1;
14557END|
14558INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14559SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14560WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14561
14562# check trigger-1 success: 	1
14563DROP TRIGGER trg_1;
14564UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14565f_int2 = CAST(f_char1 AS SIGNED INT),
14566f_charbig = 'just inserted'
14567   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14568DELETE FROM t0_aux
14569WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14570INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14571SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14572'just inserted' FROM t0_template
14573WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14574CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14575BEGIN
14576UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14577f_charbig = 'updated by trigger'
14578      WHERE f_int1 = new.f_int1;
14579END|
14580INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14581SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14582WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14583
14584# check trigger-2 success: 	1
14585DROP TRIGGER trg_1;
14586UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14587f_int2 = CAST(f_char1 AS SIGNED INT),
14588f_charbig = 'just inserted'
14589   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14590DELETE FROM t0_aux
14591WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14592INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14593SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14594'just inserted' FROM t0_template
14595WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14596CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14597BEGIN
14598UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14599f_charbig = 'updated by trigger'
14600      WHERE f_int1 = new.f_int1;
14601END|
14602UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14603WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14604
14605# check trigger-3 success: 	1
14606DROP TRIGGER trg_1;
14607UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14608f_int2 = CAST(f_char1 AS SIGNED INT),
14609f_charbig = 'just inserted'
14610   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14611DELETE FROM t0_aux
14612WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14613INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14614SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14615'just inserted' FROM t0_template
14616WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14617CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14618BEGIN
14619UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14620f_charbig = 'updated by trigger'
14621      WHERE f_int1 = - old.f_int1;
14622END|
14623UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14624WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14625
14626# check trigger-4 success: 	1
14627DROP TRIGGER trg_1;
14628UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14629f_int2 = CAST(f_char1 AS SIGNED INT),
14630f_charbig = 'just inserted'
14631   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14632DELETE FROM t0_aux
14633WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14634INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14635SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14636'just inserted' FROM t0_template
14637WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14638CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14639BEGIN
14640UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14641f_charbig = 'updated by trigger'
14642      WHERE f_int1 = new.f_int1;
14643END|
14644UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14645WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14646
14647# check trigger-5 success: 	1
14648DROP TRIGGER trg_1;
14649UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14650f_int2 = CAST(f_char1 AS SIGNED INT),
14651f_charbig = 'just inserted'
14652   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14653DELETE FROM t0_aux
14654WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14655INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14656SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14657'just inserted' FROM t0_template
14658WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14659CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14660BEGIN
14661UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14662f_charbig = 'updated by trigger'
14663      WHERE f_int1 = - old.f_int1;
14664END|
14665UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14666WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14667
14668# check trigger-6 success: 	1
14669DROP TRIGGER trg_1;
14670UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14671f_int2 = CAST(f_char1 AS SIGNED INT),
14672f_charbig = 'just inserted'
14673   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14674DELETE FROM t0_aux
14675WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14676INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14677SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14678'just inserted' FROM t0_template
14679WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14680CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14681BEGIN
14682UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14683f_charbig = 'updated by trigger'
14684      WHERE f_int1 = - old.f_int1;
14685END|
14686DELETE FROM t0_aux
14687WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14688
14689# check trigger-7 success: 	1
14690DROP TRIGGER trg_1;
14691UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14692f_int2 = CAST(f_char1 AS SIGNED INT),
14693f_charbig = 'just inserted'
14694   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14695DELETE FROM t0_aux
14696WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14697INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14698SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14699'just inserted' FROM t0_template
14700WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14701CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14702BEGIN
14703UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14704f_charbig = 'updated by trigger'
14705      WHERE f_int1 = - old.f_int1;
14706END|
14707DELETE FROM t0_aux
14708WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14709
14710# check trigger-8 success: 	1
14711DROP TRIGGER trg_1;
14712UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14713f_int2 = CAST(f_char1 AS SIGNED INT),
14714f_charbig = 'just inserted'
14715   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14716DELETE FROM t0_aux
14717WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14718DELETE FROM t1
14719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14720CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14721BEGIN
14722SET new.f_int1 = old.f_int1 + @max_row,
14723new.f_int2 = old.f_int2 - @max_row,
14724new.f_charbig = '####updated per update trigger####';
14725END|
14726UPDATE t1
14727SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14728f_charbig = '####updated per update statement itself####';
14729
14730# check trigger-9 success: 	1
14731DROP TRIGGER trg_2;
14732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14733f_int2 = CAST(f_char1 AS SIGNED INT),
14734f_charbig = CONCAT('===',f_char1,'===');
14735CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14736BEGIN
14737SET new.f_int1 = new.f_int1 + @max_row,
14738new.f_int2 = new.f_int2 - @max_row,
14739new.f_charbig = '####updated per update trigger####';
14740END|
14741UPDATE t1
14742SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14743f_charbig = '####updated per update statement itself####';
14744
14745# check trigger-10 success: 	1
14746DROP TRIGGER trg_2;
14747UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14748f_int2 = CAST(f_char1 AS SIGNED INT),
14749f_charbig = CONCAT('===',f_char1,'===');
14750CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14751BEGIN
14752SET new.f_int1 = @my_max1 + @counter,
14753new.f_int2 = @my_min2 - @counter,
14754new.f_charbig = '####updated per insert trigger####';
14755SET @counter = @counter + 1;
14756END|
14757SET @counter = 1;
14758SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14759INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14760SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14761CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14763ORDER BY f_int1;
14764DROP TRIGGER trg_3;
14765
14766# check trigger-11 success: 	1
14767DELETE FROM t1
14768WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14769AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14770AND f_charbig = '####updated per insert trigger####';
14771CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14772BEGIN
14773SET new.f_int1 = @my_max1 + @counter,
14774new.f_int2 = @my_min2 - @counter,
14775new.f_charbig = '####updated per insert trigger####';
14776SET @counter = @counter + 1;
14777END|
14778SET @counter = 1;
14779SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14780INSERT INTO t1 (f_char1, f_char2, f_charbig)
14781SELECT CAST(f_int1 AS CHAR),
14782CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14783WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14784ORDER BY f_int1;
14785DROP TRIGGER trg_3;
14786
14787# check trigger-12 success: 	1
14788DELETE FROM t1
14789WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14790AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14791AND f_charbig = '####updated per insert trigger####';
14792ANALYZE  TABLE t1;
14793Table	Op	Msg_type	Msg_text
14794test.t1	analyze	status	OK
14795CHECK    TABLE t1 EXTENDED;
14796Table	Op	Msg_type	Msg_text
14797test.t1	check	status	OK
14798CHECKSUM TABLE t1 EXTENDED;
14799Table	Checksum
14800test.t1	<some_value>
14801OPTIMIZE TABLE t1;
14802Table	Op	Msg_type	Msg_text
14803test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14804test.t1	optimize	status	OK
14805# check layout success:    1
14806REPAIR   TABLE t1 EXTENDED;
14807Table	Op	Msg_type	Msg_text
14808test.t1	repair	status	OK
14809# check layout success:    1
14810TRUNCATE t1;
14811
14812# check TRUNCATE success: 	1
14813# check layout success:    1
14814# End usability test (inc/partition_check.inc)
14815DROP TABLE t1;
14816CREATE TABLE t1 (
14817f_int1 INTEGER,
14818f_int2 INTEGER,
14819f_char1 CHAR(20),
14820f_char2 CHAR(20),
14821f_charbig VARCHAR(1000)
14822, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
14823)
14824PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
14825(PARTITION part1 VALUES IN (0)
14826(SUBPARTITION sp11,
14827SUBPARTITION sp12),
14828PARTITION part2 VALUES IN (1)
14829(SUBPARTITION sp21,
14830SUBPARTITION sp22),
14831PARTITION part3 VALUES IN (2)
14832(SUBPARTITION sp31,
14833SUBPARTITION sp32),
14834PARTITION part4 VALUES IN (NULL)
14835(SUBPARTITION sp41,
14836SUBPARTITION sp42));
14837INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14838SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
14839# Start usability test (inc/partition_check.inc)
14840create_command
14841SHOW CREATE TABLE t1;
14842Table	Create Table
14843t1	CREATE TABLE `t1` (
14844  `f_int1` int(11) NOT NULL,
14845  `f_int2` int(11) NOT NULL,
14846  `f_char1` char(20) DEFAULT NULL,
14847  `f_char2` char(20) DEFAULT NULL,
14848  `f_charbig` varchar(1000) DEFAULT NULL,
14849  PRIMARY KEY (`f_int1`,`f_int2`),
14850  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
14851) ENGINE=InnoDB DEFAULT CHARSET=latin1
14852/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
14853SUBPARTITION BY HASH (f_int1 + 1)
14854(PARTITION part1 VALUES IN (0)
14855 (SUBPARTITION sp11 ENGINE = InnoDB,
14856  SUBPARTITION sp12 ENGINE = InnoDB),
14857 PARTITION part2 VALUES IN (1)
14858 (SUBPARTITION sp21 ENGINE = InnoDB,
14859  SUBPARTITION sp22 ENGINE = InnoDB),
14860 PARTITION part3 VALUES IN (2)
14861 (SUBPARTITION sp31 ENGINE = InnoDB,
14862  SUBPARTITION sp32 ENGINE = InnoDB),
14863 PARTITION part4 VALUES IN (NULL)
14864 (SUBPARTITION sp41 ENGINE = InnoDB,
14865  SUBPARTITION sp42 ENGINE = InnoDB)) */
14866
14867unified filelist
14868t1#P#part1#SP#sp11.ibd
14869t1#P#part1#SP#sp12.ibd
14870t1#P#part2#SP#sp21.ibd
14871t1#P#part2#SP#sp22.ibd
14872t1#P#part3#SP#sp31.ibd
14873t1#P#part3#SP#sp32.ibd
14874t1#P#part4#SP#sp41.ibd
14875t1#P#part4#SP#sp42.ibd
14876t1.frm
14877
14878# check prerequisites-1 success:    1
14879# check COUNT(*) success:    1
14880# check MIN/MAX(f_int1) success:    1
14881# check MIN/MAX(f_int2) success:    1
14882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14883SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14884CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14885WHERE f_int1 IN (2,3);
14886ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
14887# check prerequisites-3 success:    1
14888# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14889INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14890SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14891CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14892WHERE f_int1 IN (2,3);
14893DELETE FROM t1 WHERE f_charbig = 'delete me';
14894INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14895SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14896CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14897WHERE f_int1 IN (2,3);
14898DELETE FROM t1 WHERE f_charbig = 'delete me';
14899# check read via f_int1 success: 1
14900# check read via f_int2 success: 1
14901
14902# check multiple-1 success: 	1
14903DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14904
14905# check multiple-2 success: 	1
14906INSERT INTO t1 SELECT * FROM t0_template
14907WHERE MOD(f_int1,3) = 0;
14908
14909# check multiple-3 success: 	1
14910UPDATE t1 SET f_int1 = f_int1 + @max_row
14911WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14912AND @max_row_div2 + @max_row_div4;
14913
14914# check multiple-4 success: 	1
14915DELETE FROM t1
14916WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14917AND @max_row_div2 + @max_row_div4 + @max_row;
14918
14919# check multiple-5 success: 	1
14920SELECT COUNT(*) INTO @try_count FROM t0_template
14921WHERE MOD(f_int1,3) = 0
14922AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14923SELECT COUNT(*) INTO @clash_count
14924FROM t1 INNER JOIN t0_template USING(f_int1)
14925WHERE MOD(f_int1,3) = 0
14926AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14927SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14928INSERT INTO t1
14929SET f_int1 = @cur_value , f_int2 = @cur_value,
14930f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14931f_charbig = '#SINGLE#';
14932
14933# check single-1 success: 	1
14934SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14935INSERT INTO t1
14936SET f_int1 = @cur_value , f_int2 = @cur_value,
14937f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14938f_charbig = '#SINGLE#';
14939
14940# check single-2 success: 	1
14941SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14942SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14943UPDATE t1 SET f_int1 = @cur_value2
14944WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14945
14946# check single-3 success: 	1
14947SET @cur_value1= -1;
14948SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14949UPDATE t1 SET f_int1 = @cur_value1
14950WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14951
14952# check single-4 success: 	1
14953SELECT MAX(f_int1) INTO @cur_value FROM t1;
14954DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14955
14956# check single-5 success: 	1
14957DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14958
14959# check single-6 success: 	1
14960INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14961
14962# check single-7 success: 	1
14963DELETE FROM t1 WHERE f_charbig = '#2147483647##';
14964DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14965INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14966f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14967f_charbig = '#NULL#';
14968INSERT INTO t1
14969SET f_int1 = NULL , f_int2 = -@max_row,
14970f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14971f_charbig = '#NULL#';
14972ERROR 23000: Column 'f_int1' cannot be null
14973# check null success:    1
14974DELETE FROM t1
14975WHERE f_int1 = 0 AND f_int2 = 0
14976AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14977AND f_charbig = '#NULL#';
14978INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14979SELECT f_int1, f_int1, '', '', 'was inserted'
14980   FROM t0_template source_tab
14981WHERE MOD(f_int1,3) = 0
14982AND f_int1 BETWEEN @max_row_div2 AND @max_row
14983ON DUPLICATE KEY
14984UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14985f_int2 = 2 * @max_row + source_tab.f_int1,
14986f_charbig = 'was updated';
14987
14988# check unique-1-a success: 	1
14989
14990# check unique-1-b success: 	1
14991DELETE FROM t1 WHERE f_charbig = 'was inserted';
14992UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14993f_int2 = CAST(f_char1 AS SIGNED INT),
14994f_charbig = CONCAT('===',f_char1,'===')
14995WHERE f_charbig = 'was updated';
14996REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14997SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14998   FROM t0_template source_tab
14999WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15000
15001# check replace success: 	1
15002DELETE FROM t1
15003WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15004DELETE FROM t1
15005WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15006f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15007UPDATE t1 SET f_int2 = f_int1,
15008f_char1 = CAST(f_int1 AS CHAR),
15009f_char2 = CAST(f_int1 AS CHAR),
15010f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15011WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15012SET AUTOCOMMIT= 0;
15013INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15014SELECT f_int1, f_int1, '', '', 'was inserted'
15015FROM t0_template source_tab
15016WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15017
15018# check transactions-1 success: 	1
15019COMMIT WORK;
15020
15021# check transactions-2 success: 	1
15022ROLLBACK WORK;
15023
15024# check transactions-3 success: 	1
15025DELETE FROM t1 WHERE f_charbig = 'was inserted';
15026COMMIT WORK;
15027ROLLBACK WORK;
15028
15029# check transactions-4 success: 	1
15030INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15031SELECT f_int1, f_int1, '', '', 'was inserted'
15032FROM t0_template source_tab
15033WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15034
15035# check transactions-5 success: 	1
15036ROLLBACK WORK;
15037
15038# check transactions-6 success: 	1
15039# INFO: Storage engine used for t1 seems to be transactional.
15040COMMIT;
15041
15042# check transactions-7 success: 	1
15043DELETE FROM t1 WHERE f_charbig = 'was inserted';
15044COMMIT WORK;
15045SET @@session.sql_mode = 'traditional';
15046Warnings:
15047Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15048SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15049INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15050SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15051'', '', 'was inserted' FROM t0_template
15052WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15053ERROR 22012: Division by 0
15054COMMIT;
15055
15056# check transactions-8 success: 	1
15057# INFO: Storage engine used for t1 seems to be able to revert
15058#       changes made by the failing statement.
15059SET @@session.sql_mode = '';
15060Warnings:
15061Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15062SET AUTOCOMMIT= 1;
15063DELETE FROM t1 WHERE f_charbig = 'was inserted';
15064COMMIT WORK;
15065UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15066
15067# check special-1 success: 	1
15068UPDATE t1 SET f_charbig = '';
15069
15070# check special-2 success: 	1
15071UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15072INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15073SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15074WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15075INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15076SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15077'just inserted' FROM t0_template
15078WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15079CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15080BEGIN
15081UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15082f_charbig = 'updated by trigger'
15083      WHERE f_int1 = new.f_int1;
15084END|
15085INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15086SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15088
15089# check trigger-1 success: 	1
15090DROP TRIGGER trg_1;
15091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15092f_int2 = CAST(f_char1 AS SIGNED INT),
15093f_charbig = 'just inserted'
15094   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15095DELETE FROM t0_aux
15096WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15097INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15098SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15099'just inserted' FROM t0_template
15100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15101CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15102BEGIN
15103UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15104f_charbig = 'updated by trigger'
15105      WHERE f_int1 = new.f_int1;
15106END|
15107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15108SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15109WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15110
15111# check trigger-2 success: 	1
15112DROP TRIGGER trg_1;
15113UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15114f_int2 = CAST(f_char1 AS SIGNED INT),
15115f_charbig = 'just inserted'
15116   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15117DELETE FROM t0_aux
15118WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15119INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15120SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15121'just inserted' FROM t0_template
15122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15123CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15124BEGIN
15125UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15126f_charbig = 'updated by trigger'
15127      WHERE f_int1 = new.f_int1;
15128END|
15129UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15130WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15131
15132# check trigger-3 success: 	1
15133DROP TRIGGER trg_1;
15134UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15135f_int2 = CAST(f_char1 AS SIGNED INT),
15136f_charbig = 'just inserted'
15137   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15138DELETE FROM t0_aux
15139WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15142'just inserted' FROM t0_template
15143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15144CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15145BEGIN
15146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15147f_charbig = 'updated by trigger'
15148      WHERE f_int1 = - old.f_int1;
15149END|
15150UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15151WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15152
15153# check trigger-4 success: 	1
15154DROP TRIGGER trg_1;
15155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15156f_int2 = CAST(f_char1 AS SIGNED INT),
15157f_charbig = 'just inserted'
15158   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15159DELETE FROM t0_aux
15160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15163'just inserted' FROM t0_template
15164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15165CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15166BEGIN
15167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15168f_charbig = 'updated by trigger'
15169      WHERE f_int1 = new.f_int1;
15170END|
15171UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15173
15174# check trigger-5 success: 	1
15175DROP TRIGGER trg_1;
15176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15177f_int2 = CAST(f_char1 AS SIGNED INT),
15178f_charbig = 'just inserted'
15179   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15180DELETE FROM t0_aux
15181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15184'just inserted' FROM t0_template
15185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15186CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15187BEGIN
15188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15189f_charbig = 'updated by trigger'
15190      WHERE f_int1 = - old.f_int1;
15191END|
15192UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15194
15195# check trigger-6 success: 	1
15196DROP TRIGGER trg_1;
15197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15198f_int2 = CAST(f_char1 AS SIGNED INT),
15199f_charbig = 'just inserted'
15200   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15201DELETE FROM t0_aux
15202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15205'just inserted' FROM t0_template
15206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15207CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15208BEGIN
15209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15210f_charbig = 'updated by trigger'
15211      WHERE f_int1 = - old.f_int1;
15212END|
15213DELETE FROM t0_aux
15214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15215
15216# check trigger-7 success: 	1
15217DROP TRIGGER trg_1;
15218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15219f_int2 = CAST(f_char1 AS SIGNED INT),
15220f_charbig = 'just inserted'
15221   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15222DELETE FROM t0_aux
15223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15226'just inserted' FROM t0_template
15227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15228CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15229BEGIN
15230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15231f_charbig = 'updated by trigger'
15232      WHERE f_int1 = - old.f_int1;
15233END|
15234DELETE FROM t0_aux
15235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15236
15237# check trigger-8 success: 	1
15238DROP TRIGGER trg_1;
15239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15240f_int2 = CAST(f_char1 AS SIGNED INT),
15241f_charbig = 'just inserted'
15242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15243DELETE FROM t0_aux
15244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15245DELETE FROM t1
15246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15247CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15248BEGIN
15249SET new.f_int1 = old.f_int1 + @max_row,
15250new.f_int2 = old.f_int2 - @max_row,
15251new.f_charbig = '####updated per update trigger####';
15252END|
15253UPDATE t1
15254SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15255f_charbig = '####updated per update statement itself####';
15256
15257# check trigger-9 success: 	1
15258DROP TRIGGER trg_2;
15259UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15260f_int2 = CAST(f_char1 AS SIGNED INT),
15261f_charbig = CONCAT('===',f_char1,'===');
15262CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15263BEGIN
15264SET new.f_int1 = new.f_int1 + @max_row,
15265new.f_int2 = new.f_int2 - @max_row,
15266new.f_charbig = '####updated per update trigger####';
15267END|
15268UPDATE t1
15269SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15270f_charbig = '####updated per update statement itself####';
15271
15272# check trigger-10 success: 	1
15273DROP TRIGGER trg_2;
15274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15275f_int2 = CAST(f_char1 AS SIGNED INT),
15276f_charbig = CONCAT('===',f_char1,'===');
15277CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15278BEGIN
15279SET new.f_int1 = @my_max1 + @counter,
15280new.f_int2 = @my_min2 - @counter,
15281new.f_charbig = '####updated per insert trigger####';
15282SET @counter = @counter + 1;
15283END|
15284SET @counter = 1;
15285SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15286INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15287SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15288CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15289WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15290ORDER BY f_int1;
15291DROP TRIGGER trg_3;
15292
15293# check trigger-11 success: 	1
15294DELETE FROM t1
15295WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15296AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15297AND f_charbig = '####updated per insert trigger####';
15298CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15299BEGIN
15300SET new.f_int1 = @my_max1 + @counter,
15301new.f_int2 = @my_min2 - @counter,
15302new.f_charbig = '####updated per insert trigger####';
15303SET @counter = @counter + 1;
15304END|
15305SET @counter = 1;
15306SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15307INSERT INTO t1 (f_char1, f_char2, f_charbig)
15308SELECT CAST(f_int1 AS CHAR),
15309CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15311ORDER BY f_int1;
15312DROP TRIGGER trg_3;
15313
15314# check trigger-12 success: 	1
15315DELETE FROM t1
15316WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15317AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15318AND f_charbig = '####updated per insert trigger####';
15319ANALYZE  TABLE t1;
15320Table	Op	Msg_type	Msg_text
15321test.t1	analyze	status	OK
15322CHECK    TABLE t1 EXTENDED;
15323Table	Op	Msg_type	Msg_text
15324test.t1	check	status	OK
15325CHECKSUM TABLE t1 EXTENDED;
15326Table	Checksum
15327test.t1	<some_value>
15328OPTIMIZE TABLE t1;
15329Table	Op	Msg_type	Msg_text
15330test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15331test.t1	optimize	status	OK
15332# check layout success:    1
15333REPAIR   TABLE t1 EXTENDED;
15334Table	Op	Msg_type	Msg_text
15335test.t1	repair	status	OK
15336# check layout success:    1
15337TRUNCATE t1;
15338
15339# check TRUNCATE success: 	1
15340# check layout success:    1
15341# End usability test (inc/partition_check.inc)
15342DROP TABLE t1;
15343CREATE TABLE t1 (
15344f_int1 INTEGER,
15345f_int2 INTEGER,
15346f_char1 CHAR(20),
15347f_char2 CHAR(20),
15348f_charbig VARCHAR(1000)
15349, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
15350)
15351PARTITION BY LIST(ABS(MOD(f_int1,2)))
15352SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
15353(PARTITION part1 VALUES IN (0),
15354PARTITION part2 VALUES IN (1),
15355PARTITION part3 VALUES IN (NULL));
15356INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15357SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
15358# Start usability test (inc/partition_check.inc)
15359create_command
15360SHOW CREATE TABLE t1;
15361Table	Create Table
15362t1	CREATE TABLE `t1` (
15363  `f_int1` int(11) NOT NULL,
15364  `f_int2` int(11) NOT NULL,
15365  `f_char1` char(20) DEFAULT NULL,
15366  `f_char2` char(20) DEFAULT NULL,
15367  `f_charbig` varchar(1000) DEFAULT NULL,
15368  PRIMARY KEY (`f_int1`,`f_int2`),
15369  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
15370) ENGINE=InnoDB DEFAULT CHARSET=latin1
15371/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
15372SUBPARTITION BY KEY (f_int1)
15373SUBPARTITIONS 3
15374(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
15375 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
15376 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
15377
15378unified filelist
15379t1#P#part1#SP#part1sp0.ibd
15380t1#P#part1#SP#part1sp1.ibd
15381t1#P#part1#SP#part1sp2.ibd
15382t1#P#part2#SP#part2sp0.ibd
15383t1#P#part2#SP#part2sp1.ibd
15384t1#P#part2#SP#part2sp2.ibd
15385t1#P#part3#SP#part3sp0.ibd
15386t1#P#part3#SP#part3sp1.ibd
15387t1#P#part3#SP#part3sp2.ibd
15388t1.frm
15389
15390# check prerequisites-1 success:    1
15391# check COUNT(*) success:    1
15392# check MIN/MAX(f_int1) success:    1
15393# check MIN/MAX(f_int2) success:    1
15394INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15395SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15396CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15397WHERE f_int1 IN (2,3);
15398ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
15399# check prerequisites-3 success:    1
15400# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15401INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15402SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15403CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15404WHERE f_int1 IN (2,3);
15405DELETE FROM t1 WHERE f_charbig = 'delete me';
15406INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15407SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15408CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15409WHERE f_int1 IN (2,3);
15410DELETE FROM t1 WHERE f_charbig = 'delete me';
15411# check read via f_int1 success: 1
15412# check read via f_int2 success: 1
15413
15414# check multiple-1 success: 	1
15415DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15416
15417# check multiple-2 success: 	1
15418INSERT INTO t1 SELECT * FROM t0_template
15419WHERE MOD(f_int1,3) = 0;
15420
15421# check multiple-3 success: 	1
15422UPDATE t1 SET f_int1 = f_int1 + @max_row
15423WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15424AND @max_row_div2 + @max_row_div4;
15425
15426# check multiple-4 success: 	1
15427DELETE FROM t1
15428WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15429AND @max_row_div2 + @max_row_div4 + @max_row;
15430
15431# check multiple-5 success: 	1
15432SELECT COUNT(*) INTO @try_count FROM t0_template
15433WHERE MOD(f_int1,3) = 0
15434AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15435SELECT COUNT(*) INTO @clash_count
15436FROM t1 INNER JOIN t0_template USING(f_int1)
15437WHERE MOD(f_int1,3) = 0
15438AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15439SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15440INSERT INTO t1
15441SET f_int1 = @cur_value , f_int2 = @cur_value,
15442f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15443f_charbig = '#SINGLE#';
15444
15445# check single-1 success: 	1
15446SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15447INSERT INTO t1
15448SET f_int1 = @cur_value , f_int2 = @cur_value,
15449f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15450f_charbig = '#SINGLE#';
15451
15452# check single-2 success: 	1
15453SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15454SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15455UPDATE t1 SET f_int1 = @cur_value2
15456WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15457
15458# check single-3 success: 	1
15459SET @cur_value1= -1;
15460SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15461UPDATE t1 SET f_int1 = @cur_value1
15462WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15463
15464# check single-4 success: 	1
15465SELECT MAX(f_int1) INTO @cur_value FROM t1;
15466DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15467
15468# check single-5 success: 	1
15469DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15470
15471# check single-6 success: 	1
15472INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15473
15474# check single-7 success: 	1
15475DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15476DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15477INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15478f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15479f_charbig = '#NULL#';
15480INSERT INTO t1
15481SET f_int1 = NULL , f_int2 = -@max_row,
15482f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15483f_charbig = '#NULL#';
15484ERROR 23000: Column 'f_int1' cannot be null
15485# check null success:    1
15486DELETE FROM t1
15487WHERE f_int1 = 0 AND f_int2 = 0
15488AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15489AND f_charbig = '#NULL#';
15490INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15491SELECT f_int1, f_int1, '', '', 'was inserted'
15492   FROM t0_template source_tab
15493WHERE MOD(f_int1,3) = 0
15494AND f_int1 BETWEEN @max_row_div2 AND @max_row
15495ON DUPLICATE KEY
15496UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15497f_int2 = 2 * @max_row + source_tab.f_int1,
15498f_charbig = 'was updated';
15499
15500# check unique-1-a success: 	1
15501
15502# check unique-1-b success: 	1
15503DELETE FROM t1 WHERE f_charbig = 'was inserted';
15504UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15505f_int2 = CAST(f_char1 AS SIGNED INT),
15506f_charbig = CONCAT('===',f_char1,'===')
15507WHERE f_charbig = 'was updated';
15508REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15509SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15510   FROM t0_template source_tab
15511WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15512
15513# check replace success: 	1
15514DELETE FROM t1
15515WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15516DELETE FROM t1
15517WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15518f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15519UPDATE t1 SET f_int2 = f_int1,
15520f_char1 = CAST(f_int1 AS CHAR),
15521f_char2 = CAST(f_int1 AS CHAR),
15522f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15523WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15524SET AUTOCOMMIT= 0;
15525INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15526SELECT f_int1, f_int1, '', '', 'was inserted'
15527FROM t0_template source_tab
15528WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15529
15530# check transactions-1 success: 	1
15531COMMIT WORK;
15532
15533# check transactions-2 success: 	1
15534ROLLBACK WORK;
15535
15536# check transactions-3 success: 	1
15537DELETE FROM t1 WHERE f_charbig = 'was inserted';
15538COMMIT WORK;
15539ROLLBACK WORK;
15540
15541# check transactions-4 success: 	1
15542INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15543SELECT f_int1, f_int1, '', '', 'was inserted'
15544FROM t0_template source_tab
15545WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15546
15547# check transactions-5 success: 	1
15548ROLLBACK WORK;
15549
15550# check transactions-6 success: 	1
15551# INFO: Storage engine used for t1 seems to be transactional.
15552COMMIT;
15553
15554# check transactions-7 success: 	1
15555DELETE FROM t1 WHERE f_charbig = 'was inserted';
15556COMMIT WORK;
15557SET @@session.sql_mode = 'traditional';
15558Warnings:
15559Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15560SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15561INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15562SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15563'', '', 'was inserted' FROM t0_template
15564WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15565ERROR 22012: Division by 0
15566COMMIT;
15567
15568# check transactions-8 success: 	1
15569# INFO: Storage engine used for t1 seems to be able to revert
15570#       changes made by the failing statement.
15571SET @@session.sql_mode = '';
15572Warnings:
15573Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15574SET AUTOCOMMIT= 1;
15575DELETE FROM t1 WHERE f_charbig = 'was inserted';
15576COMMIT WORK;
15577UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15578
15579# check special-1 success: 	1
15580UPDATE t1 SET f_charbig = '';
15581
15582# check special-2 success: 	1
15583UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15584INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15585SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15586WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15588SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15589'just inserted' FROM t0_template
15590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15591CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15592BEGIN
15593UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15594f_charbig = 'updated by trigger'
15595      WHERE f_int1 = new.f_int1;
15596END|
15597INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15598SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15599WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15600
15601# check trigger-1 success: 	1
15602DROP TRIGGER trg_1;
15603UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15604f_int2 = CAST(f_char1 AS SIGNED INT),
15605f_charbig = 'just inserted'
15606   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15607DELETE FROM t0_aux
15608WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15609INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15610SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15611'just inserted' FROM t0_template
15612WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15613CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15614BEGIN
15615UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15616f_charbig = 'updated by trigger'
15617      WHERE f_int1 = new.f_int1;
15618END|
15619INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15620SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15622
15623# check trigger-2 success: 	1
15624DROP TRIGGER trg_1;
15625UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15626f_int2 = CAST(f_char1 AS SIGNED INT),
15627f_charbig = 'just inserted'
15628   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15629DELETE FROM t0_aux
15630WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15633'just inserted' FROM t0_template
15634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15635CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15636BEGIN
15637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15638f_charbig = 'updated by trigger'
15639      WHERE f_int1 = new.f_int1;
15640END|
15641UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15642WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15643
15644# check trigger-3 success: 	1
15645DROP TRIGGER trg_1;
15646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15647f_int2 = CAST(f_char1 AS SIGNED INT),
15648f_charbig = 'just inserted'
15649   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15650DELETE FROM t0_aux
15651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15654'just inserted' FROM t0_template
15655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15656CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15657BEGIN
15658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15659f_charbig = 'updated by trigger'
15660      WHERE f_int1 = - old.f_int1;
15661END|
15662UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15663WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15664
15665# check trigger-4 success: 	1
15666DROP TRIGGER trg_1;
15667UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15668f_int2 = CAST(f_char1 AS SIGNED INT),
15669f_charbig = 'just inserted'
15670   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15671DELETE FROM t0_aux
15672WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15674SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15675'just inserted' FROM t0_template
15676WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15677CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15678BEGIN
15679UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15680f_charbig = 'updated by trigger'
15681      WHERE f_int1 = new.f_int1;
15682END|
15683UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15684WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15685
15686# check trigger-5 success: 	1
15687DROP TRIGGER trg_1;
15688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15689f_int2 = CAST(f_char1 AS SIGNED INT),
15690f_charbig = 'just inserted'
15691   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15692DELETE FROM t0_aux
15693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15696'just inserted' FROM t0_template
15697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15698CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15699BEGIN
15700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15701f_charbig = 'updated by trigger'
15702      WHERE f_int1 = - old.f_int1;
15703END|
15704UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15705WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15706
15707# check trigger-6 success: 	1
15708DROP TRIGGER trg_1;
15709UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15710f_int2 = CAST(f_char1 AS SIGNED INT),
15711f_charbig = 'just inserted'
15712   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15713DELETE FROM t0_aux
15714WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15715INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15716SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15717'just inserted' FROM t0_template
15718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15719CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15720BEGIN
15721UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15722f_charbig = 'updated by trigger'
15723      WHERE f_int1 = - old.f_int1;
15724END|
15725DELETE FROM t0_aux
15726WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15727
15728# check trigger-7 success: 	1
15729DROP TRIGGER trg_1;
15730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15731f_int2 = CAST(f_char1 AS SIGNED INT),
15732f_charbig = 'just inserted'
15733   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15734DELETE FROM t0_aux
15735WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15737SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15738'just inserted' FROM t0_template
15739WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15740CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15741BEGIN
15742UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15743f_charbig = 'updated by trigger'
15744      WHERE f_int1 = - old.f_int1;
15745END|
15746DELETE FROM t0_aux
15747WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15748
15749# check trigger-8 success: 	1
15750DROP TRIGGER trg_1;
15751UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15752f_int2 = CAST(f_char1 AS SIGNED INT),
15753f_charbig = 'just inserted'
15754   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15755DELETE FROM t0_aux
15756WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15757DELETE FROM t1
15758WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15759CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15760BEGIN
15761SET new.f_int1 = old.f_int1 + @max_row,
15762new.f_int2 = old.f_int2 - @max_row,
15763new.f_charbig = '####updated per update trigger####';
15764END|
15765UPDATE t1
15766SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15767f_charbig = '####updated per update statement itself####';
15768
15769# check trigger-9 success: 	1
15770DROP TRIGGER trg_2;
15771UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15772f_int2 = CAST(f_char1 AS SIGNED INT),
15773f_charbig = CONCAT('===',f_char1,'===');
15774CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15775BEGIN
15776SET new.f_int1 = new.f_int1 + @max_row,
15777new.f_int2 = new.f_int2 - @max_row,
15778new.f_charbig = '####updated per update trigger####';
15779END|
15780UPDATE t1
15781SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15782f_charbig = '####updated per update statement itself####';
15783
15784# check trigger-10 success: 	1
15785DROP TRIGGER trg_2;
15786UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15787f_int2 = CAST(f_char1 AS SIGNED INT),
15788f_charbig = CONCAT('===',f_char1,'===');
15789CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15790BEGIN
15791SET new.f_int1 = @my_max1 + @counter,
15792new.f_int2 = @my_min2 - @counter,
15793new.f_charbig = '####updated per insert trigger####';
15794SET @counter = @counter + 1;
15795END|
15796SET @counter = 1;
15797SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15798INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15799SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15800CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15801WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15802ORDER BY f_int1;
15803DROP TRIGGER trg_3;
15804
15805# check trigger-11 success: 	1
15806DELETE FROM t1
15807WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15808AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15809AND f_charbig = '####updated per insert trigger####';
15810CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15811BEGIN
15812SET new.f_int1 = @my_max1 + @counter,
15813new.f_int2 = @my_min2 - @counter,
15814new.f_charbig = '####updated per insert trigger####';
15815SET @counter = @counter + 1;
15816END|
15817SET @counter = 1;
15818SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15819INSERT INTO t1 (f_char1, f_char2, f_charbig)
15820SELECT CAST(f_int1 AS CHAR),
15821CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15822WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15823ORDER BY f_int1;
15824DROP TRIGGER trg_3;
15825
15826# check trigger-12 success: 	1
15827DELETE FROM t1
15828WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15829AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15830AND f_charbig = '####updated per insert trigger####';
15831ANALYZE  TABLE t1;
15832Table	Op	Msg_type	Msg_text
15833test.t1	analyze	status	OK
15834CHECK    TABLE t1 EXTENDED;
15835Table	Op	Msg_type	Msg_text
15836test.t1	check	status	OK
15837CHECKSUM TABLE t1 EXTENDED;
15838Table	Checksum
15839test.t1	<some_value>
15840OPTIMIZE TABLE t1;
15841Table	Op	Msg_type	Msg_text
15842test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15843test.t1	optimize	status	OK
15844# check layout success:    1
15845REPAIR   TABLE t1 EXTENDED;
15846Table	Op	Msg_type	Msg_text
15847test.t1	repair	status	OK
15848# check layout success:    1
15849TRUNCATE t1;
15850
15851# check TRUNCATE success: 	1
15852# check layout success:    1
15853# End usability test (inc/partition_check.inc)
15854DROP TABLE t1;
15855DROP TABLE IF EXISTS t1;
15856CREATE TABLE t1 (
15857f_int1 INTEGER,
15858f_int2 INTEGER,
15859f_char1 CHAR(20),
15860f_char2 CHAR(20),
15861f_charbig VARCHAR(1000)
15862, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
15863)
15864PARTITION BY HASH(f_int1) PARTITIONS 2;
15865INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15866SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
15867# Start usability test (inc/partition_check.inc)
15868create_command
15869SHOW CREATE TABLE t1;
15870Table	Create Table
15871t1	CREATE TABLE `t1` (
15872  `f_int1` int(11) DEFAULT NULL,
15873  `f_int2` int(11) DEFAULT NULL,
15874  `f_char1` char(20) DEFAULT NULL,
15875  `f_char2` char(20) DEFAULT NULL,
15876  `f_charbig` varchar(1000) DEFAULT NULL,
15877  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
15878  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
15879) ENGINE=InnoDB DEFAULT CHARSET=latin1
15880/*!50100 PARTITION BY HASH (f_int1)
15881PARTITIONS 2 */
15882
15883unified filelist
15884t1#P#p0.ibd
15885t1#P#p1.ibd
15886t1.frm
15887
15888# check prerequisites-1 success:    1
15889# check COUNT(*) success:    1
15890# check MIN/MAX(f_int1) success:    1
15891# check MIN/MAX(f_int2) success:    1
15892INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15893SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15894CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15895WHERE f_int1 IN (2,3);
15896ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
15897# check prerequisites-3 success:    1
15898# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15899INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15900SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15901CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15902WHERE f_int1 IN (2,3);
15903DELETE FROM t1 WHERE f_charbig = 'delete me';
15904INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15905SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15906CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15907WHERE f_int1 IN (2,3);
15908DELETE FROM t1 WHERE f_charbig = 'delete me';
15909# check read via f_int1 success: 1
15910# check read via f_int2 success: 1
15911
15912# check multiple-1 success: 	1
15913DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15914
15915# check multiple-2 success: 	1
15916INSERT INTO t1 SELECT * FROM t0_template
15917WHERE MOD(f_int1,3) = 0;
15918
15919# check multiple-3 success: 	1
15920UPDATE t1 SET f_int1 = f_int1 + @max_row
15921WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15922AND @max_row_div2 + @max_row_div4;
15923
15924# check multiple-4 success: 	1
15925DELETE FROM t1
15926WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15927AND @max_row_div2 + @max_row_div4 + @max_row;
15928
15929# check multiple-5 success: 	1
15930SELECT COUNT(*) INTO @try_count FROM t0_template
15931WHERE MOD(f_int1,3) = 0
15932AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15933SELECT COUNT(*) INTO @clash_count
15934FROM t1 INNER JOIN t0_template USING(f_int1)
15935WHERE MOD(f_int1,3) = 0
15936AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15937SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15938INSERT INTO t1
15939SET f_int1 = @cur_value , f_int2 = @cur_value,
15940f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15941f_charbig = '#SINGLE#';
15942
15943# check single-1 success: 	1
15944SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15945INSERT INTO t1
15946SET f_int1 = @cur_value , f_int2 = @cur_value,
15947f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15948f_charbig = '#SINGLE#';
15949
15950# check single-2 success: 	1
15951SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15952SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15953UPDATE t1 SET f_int1 = @cur_value2
15954WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15955
15956# check single-3 success: 	1
15957SET @cur_value1= -1;
15958SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15959UPDATE t1 SET f_int1 = @cur_value1
15960WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15961
15962# check single-4 success: 	1
15963SELECT MAX(f_int1) INTO @cur_value FROM t1;
15964DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15965
15966# check single-5 success: 	1
15967DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15968
15969# check single-6 success: 	1
15970INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15971
15972# check single-7 success: 	1
15973DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15974DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15975INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15976f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15977f_charbig = '#NULL#';
15978INSERT INTO t1
15979SET f_int1 = NULL , f_int2 = -@max_row,
15980f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15981f_charbig = '#NULL#';
15982# check null success:    1
15983
15984# check null-1 success: 	1
15985UPDATE t1 SET f_int1 = -@max_row
15986WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15987AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15988
15989# check null-2 success: 	1
15990UPDATE t1 SET f_int1 = NULL
15991WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15992AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15993
15994# check null-3 success: 	1
15995DELETE FROM t1
15996WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15997AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15998
15999# check null-4 success: 	1
16000DELETE FROM t1
16001WHERE f_int1 = 0 AND f_int2 = 0
16002AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16003AND f_charbig = '#NULL#';
16004INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16005SELECT f_int1, f_int1, '', '', 'was inserted'
16006   FROM t0_template source_tab
16007WHERE MOD(f_int1,3) = 0
16008AND f_int1 BETWEEN @max_row_div2 AND @max_row
16009ON DUPLICATE KEY
16010UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16011f_int2 = 2 * @max_row + source_tab.f_int1,
16012f_charbig = 'was updated';
16013
16014# check unique-1-a success: 	1
16015
16016# check unique-1-b success: 	1
16017DELETE FROM t1 WHERE f_charbig = 'was inserted';
16018UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16019f_int2 = CAST(f_char1 AS SIGNED INT),
16020f_charbig = CONCAT('===',f_char1,'===')
16021WHERE f_charbig = 'was updated';
16022REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16023SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16024   FROM t0_template source_tab
16025WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16026
16027# check replace success: 	1
16028DELETE FROM t1
16029WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16030DELETE FROM t1
16031WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16032f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16033UPDATE t1 SET f_int2 = f_int1,
16034f_char1 = CAST(f_int1 AS CHAR),
16035f_char2 = CAST(f_int1 AS CHAR),
16036f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16037WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16038SET AUTOCOMMIT= 0;
16039INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16040SELECT f_int1, f_int1, '', '', 'was inserted'
16041FROM t0_template source_tab
16042WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16043
16044# check transactions-1 success: 	1
16045COMMIT WORK;
16046
16047# check transactions-2 success: 	1
16048ROLLBACK WORK;
16049
16050# check transactions-3 success: 	1
16051DELETE FROM t1 WHERE f_charbig = 'was inserted';
16052COMMIT WORK;
16053ROLLBACK WORK;
16054
16055# check transactions-4 success: 	1
16056INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16057SELECT f_int1, f_int1, '', '', 'was inserted'
16058FROM t0_template source_tab
16059WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16060
16061# check transactions-5 success: 	1
16062ROLLBACK WORK;
16063
16064# check transactions-6 success: 	1
16065# INFO: Storage engine used for t1 seems to be transactional.
16066COMMIT;
16067
16068# check transactions-7 success: 	1
16069DELETE FROM t1 WHERE f_charbig = 'was inserted';
16070COMMIT WORK;
16071SET @@session.sql_mode = 'traditional';
16072Warnings:
16073Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16074SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16075INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16076SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16077'', '', 'was inserted' FROM t0_template
16078WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16079ERROR 22012: Division by 0
16080COMMIT;
16081
16082# check transactions-8 success: 	1
16083# INFO: Storage engine used for t1 seems to be able to revert
16084#       changes made by the failing statement.
16085SET @@session.sql_mode = '';
16086Warnings:
16087Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16088SET AUTOCOMMIT= 1;
16089DELETE FROM t1 WHERE f_charbig = 'was inserted';
16090COMMIT WORK;
16091UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16092
16093# check special-1 success: 	1
16094UPDATE t1 SET f_charbig = '';
16095
16096# check special-2 success: 	1
16097UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16098INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16099SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16101INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16102SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16103'just inserted' FROM t0_template
16104WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16105CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16106BEGIN
16107UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16108f_charbig = 'updated by trigger'
16109      WHERE f_int1 = new.f_int1;
16110END|
16111INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16112SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16114
16115# check trigger-1 success: 	1
16116DROP TRIGGER trg_1;
16117UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16118f_int2 = CAST(f_char1 AS SIGNED INT),
16119f_charbig = 'just inserted'
16120   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16121DELETE FROM t0_aux
16122WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16123INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16124SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16125'just inserted' FROM t0_template
16126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16127CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16128BEGIN
16129UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16130f_charbig = 'updated by trigger'
16131      WHERE f_int1 = new.f_int1;
16132END|
16133INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16134SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16135WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16136
16137# check trigger-2 success: 	1
16138DROP TRIGGER trg_1;
16139UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16140f_int2 = CAST(f_char1 AS SIGNED INT),
16141f_charbig = 'just inserted'
16142   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16143DELETE FROM t0_aux
16144WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16145INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16146SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16147'just inserted' FROM t0_template
16148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16149CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16150BEGIN
16151UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16152f_charbig = 'updated by trigger'
16153      WHERE f_int1 = new.f_int1;
16154END|
16155UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16156WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16157
16158# check trigger-3 success: 	1
16159DROP TRIGGER trg_1;
16160UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16161f_int2 = CAST(f_char1 AS SIGNED INT),
16162f_charbig = 'just inserted'
16163   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16164DELETE FROM t0_aux
16165WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16166INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16167SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16168'just inserted' FROM t0_template
16169WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16170CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16171BEGIN
16172UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16173f_charbig = 'updated by trigger'
16174      WHERE f_int1 = - old.f_int1;
16175END|
16176UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16177WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16178
16179# check trigger-4 success: 	1
16180DROP TRIGGER trg_1;
16181UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16182f_int2 = CAST(f_char1 AS SIGNED INT),
16183f_charbig = 'just inserted'
16184   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16185DELETE FROM t0_aux
16186WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16187INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16188SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16189'just inserted' FROM t0_template
16190WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16191CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16192BEGIN
16193UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16194f_charbig = 'updated by trigger'
16195      WHERE f_int1 = new.f_int1;
16196END|
16197UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16198WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16199
16200# check trigger-5 success: 	1
16201DROP TRIGGER trg_1;
16202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16203f_int2 = CAST(f_char1 AS SIGNED INT),
16204f_charbig = 'just inserted'
16205   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16206DELETE FROM t0_aux
16207WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16208INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16209SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16210'just inserted' FROM t0_template
16211WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16212CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16213BEGIN
16214UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16215f_charbig = 'updated by trigger'
16216      WHERE f_int1 = - old.f_int1;
16217END|
16218UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16219WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16220
16221# check trigger-6 success: 	1
16222DROP TRIGGER trg_1;
16223UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16224f_int2 = CAST(f_char1 AS SIGNED INT),
16225f_charbig = 'just inserted'
16226   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16227DELETE FROM t0_aux
16228WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16229INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16230SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16231'just inserted' FROM t0_template
16232WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16233CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16234BEGIN
16235UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16236f_charbig = 'updated by trigger'
16237      WHERE f_int1 = - old.f_int1;
16238END|
16239DELETE FROM t0_aux
16240WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16241
16242# check trigger-7 success: 	1
16243DROP TRIGGER trg_1;
16244UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16245f_int2 = CAST(f_char1 AS SIGNED INT),
16246f_charbig = 'just inserted'
16247   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16248DELETE FROM t0_aux
16249WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16250INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16251SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16252'just inserted' FROM t0_template
16253WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16254CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16255BEGIN
16256UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16257f_charbig = 'updated by trigger'
16258      WHERE f_int1 = - old.f_int1;
16259END|
16260DELETE FROM t0_aux
16261WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16262
16263# check trigger-8 success: 	1
16264DROP TRIGGER trg_1;
16265UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16266f_int2 = CAST(f_char1 AS SIGNED INT),
16267f_charbig = 'just inserted'
16268   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16269DELETE FROM t0_aux
16270WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16271DELETE FROM t1
16272WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16273CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16274BEGIN
16275SET new.f_int1 = old.f_int1 + @max_row,
16276new.f_int2 = old.f_int2 - @max_row,
16277new.f_charbig = '####updated per update trigger####';
16278END|
16279UPDATE t1
16280SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16281f_charbig = '####updated per update statement itself####';
16282
16283# check trigger-9 success: 	1
16284DROP TRIGGER trg_2;
16285UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16286f_int2 = CAST(f_char1 AS SIGNED INT),
16287f_charbig = CONCAT('===',f_char1,'===');
16288CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16289BEGIN
16290SET new.f_int1 = new.f_int1 + @max_row,
16291new.f_int2 = new.f_int2 - @max_row,
16292new.f_charbig = '####updated per update trigger####';
16293END|
16294UPDATE t1
16295SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16296f_charbig = '####updated per update statement itself####';
16297
16298# check trigger-10 success: 	1
16299DROP TRIGGER trg_2;
16300UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16301f_int2 = CAST(f_char1 AS SIGNED INT),
16302f_charbig = CONCAT('===',f_char1,'===');
16303CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16304BEGIN
16305SET new.f_int1 = @my_max1 + @counter,
16306new.f_int2 = @my_min2 - @counter,
16307new.f_charbig = '####updated per insert trigger####';
16308SET @counter = @counter + 1;
16309END|
16310SET @counter = 1;
16311SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16312INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16313SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16314CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16316ORDER BY f_int1;
16317DROP TRIGGER trg_3;
16318
16319# check trigger-11 success: 	1
16320DELETE FROM t1
16321WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16322AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16323AND f_charbig = '####updated per insert trigger####';
16324CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16325BEGIN
16326SET new.f_int1 = @my_max1 + @counter,
16327new.f_int2 = @my_min2 - @counter,
16328new.f_charbig = '####updated per insert trigger####';
16329SET @counter = @counter + 1;
16330END|
16331SET @counter = 1;
16332SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16333INSERT INTO t1 (f_char1, f_char2, f_charbig)
16334SELECT CAST(f_int1 AS CHAR),
16335CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16336WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16337ORDER BY f_int1;
16338DROP TRIGGER trg_3;
16339
16340# check trigger-12 success: 	1
16341DELETE FROM t1
16342WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16343AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16344AND f_charbig = '####updated per insert trigger####';
16345ANALYZE  TABLE t1;
16346Table	Op	Msg_type	Msg_text
16347test.t1	analyze	status	OK
16348CHECK    TABLE t1 EXTENDED;
16349Table	Op	Msg_type	Msg_text
16350test.t1	check	status	OK
16351CHECKSUM TABLE t1 EXTENDED;
16352Table	Checksum
16353test.t1	<some_value>
16354OPTIMIZE TABLE t1;
16355Table	Op	Msg_type	Msg_text
16356test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16357test.t1	optimize	status	OK
16358# check layout success:    1
16359REPAIR   TABLE t1 EXTENDED;
16360Table	Op	Msg_type	Msg_text
16361test.t1	repair	status	OK
16362# check layout success:    1
16363TRUNCATE t1;
16364
16365# check TRUNCATE success: 	1
16366# check layout success:    1
16367# End usability test (inc/partition_check.inc)
16368DROP TABLE t1;
16369CREATE TABLE t1 (
16370f_int1 INTEGER,
16371f_int2 INTEGER,
16372f_char1 CHAR(20),
16373f_char2 CHAR(20),
16374f_charbig VARCHAR(1000)
16375, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
16376)
16377PARTITION BY KEY(f_int1) PARTITIONS 5;
16378INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16379SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
16380# Start usability test (inc/partition_check.inc)
16381create_command
16382SHOW CREATE TABLE t1;
16383Table	Create Table
16384t1	CREATE TABLE `t1` (
16385  `f_int1` int(11) DEFAULT NULL,
16386  `f_int2` int(11) DEFAULT NULL,
16387  `f_char1` char(20) DEFAULT NULL,
16388  `f_char2` char(20) DEFAULT NULL,
16389  `f_charbig` varchar(1000) DEFAULT NULL,
16390  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
16391  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
16392) ENGINE=InnoDB DEFAULT CHARSET=latin1
16393/*!50100 PARTITION BY KEY (f_int1)
16394PARTITIONS 5 */
16395
16396unified filelist
16397t1#P#p0.ibd
16398t1#P#p1.ibd
16399t1#P#p2.ibd
16400t1#P#p3.ibd
16401t1#P#p4.ibd
16402t1.frm
16403
16404# check prerequisites-1 success:    1
16405# check COUNT(*) success:    1
16406# check MIN/MAX(f_int1) success:    1
16407# check MIN/MAX(f_int2) success:    1
16408INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16409SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16410CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16411WHERE f_int1 IN (2,3);
16412ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16413# check prerequisites-3 success:    1
16414# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16415INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16416SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16417CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16418WHERE f_int1 IN (2,3);
16419DELETE FROM t1 WHERE f_charbig = 'delete me';
16420INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16421SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16422CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16423WHERE f_int1 IN (2,3);
16424DELETE FROM t1 WHERE f_charbig = 'delete me';
16425# check read via f_int1 success: 1
16426# check read via f_int2 success: 1
16427
16428# check multiple-1 success: 	1
16429DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16430
16431# check multiple-2 success: 	1
16432INSERT INTO t1 SELECT * FROM t0_template
16433WHERE MOD(f_int1,3) = 0;
16434
16435# check multiple-3 success: 	1
16436UPDATE t1 SET f_int1 = f_int1 + @max_row
16437WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16438AND @max_row_div2 + @max_row_div4;
16439
16440# check multiple-4 success: 	1
16441DELETE FROM t1
16442WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16443AND @max_row_div2 + @max_row_div4 + @max_row;
16444
16445# check multiple-5 success: 	1
16446SELECT COUNT(*) INTO @try_count FROM t0_template
16447WHERE MOD(f_int1,3) = 0
16448AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16449SELECT COUNT(*) INTO @clash_count
16450FROM t1 INNER JOIN t0_template USING(f_int1)
16451WHERE MOD(f_int1,3) = 0
16452AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16453SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16454INSERT INTO t1
16455SET f_int1 = @cur_value , f_int2 = @cur_value,
16456f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16457f_charbig = '#SINGLE#';
16458
16459# check single-1 success: 	1
16460SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16461INSERT INTO t1
16462SET f_int1 = @cur_value , f_int2 = @cur_value,
16463f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16464f_charbig = '#SINGLE#';
16465
16466# check single-2 success: 	1
16467SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16468SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16469UPDATE t1 SET f_int1 = @cur_value2
16470WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16471
16472# check single-3 success: 	1
16473SET @cur_value1= -1;
16474SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16475UPDATE t1 SET f_int1 = @cur_value1
16476WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16477
16478# check single-4 success: 	1
16479SELECT MAX(f_int1) INTO @cur_value FROM t1;
16480DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16481
16482# check single-5 success: 	1
16483DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16484
16485# check single-6 success: 	1
16486INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16487
16488# check single-7 success: 	1
16489DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16490DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16491INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16492f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16493f_charbig = '#NULL#';
16494INSERT INTO t1
16495SET f_int1 = NULL , f_int2 = -@max_row,
16496f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16497f_charbig = '#NULL#';
16498# check null success:    1
16499
16500# check null-1 success: 	1
16501UPDATE t1 SET f_int1 = -@max_row
16502WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16503AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16504
16505# check null-2 success: 	1
16506UPDATE t1 SET f_int1 = NULL
16507WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16508AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16509
16510# check null-3 success: 	1
16511DELETE FROM t1
16512WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16513AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16514
16515# check null-4 success: 	1
16516DELETE FROM t1
16517WHERE f_int1 = 0 AND f_int2 = 0
16518AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16519AND f_charbig = '#NULL#';
16520INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16521SELECT f_int1, f_int1, '', '', 'was inserted'
16522   FROM t0_template source_tab
16523WHERE MOD(f_int1,3) = 0
16524AND f_int1 BETWEEN @max_row_div2 AND @max_row
16525ON DUPLICATE KEY
16526UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16527f_int2 = 2 * @max_row + source_tab.f_int1,
16528f_charbig = 'was updated';
16529
16530# check unique-1-a success: 	1
16531
16532# check unique-1-b success: 	1
16533DELETE FROM t1 WHERE f_charbig = 'was inserted';
16534UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16535f_int2 = CAST(f_char1 AS SIGNED INT),
16536f_charbig = CONCAT('===',f_char1,'===')
16537WHERE f_charbig = 'was updated';
16538REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16539SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16540   FROM t0_template source_tab
16541WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16542
16543# check replace success: 	1
16544DELETE FROM t1
16545WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16546DELETE FROM t1
16547WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16548f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16549UPDATE t1 SET f_int2 = f_int1,
16550f_char1 = CAST(f_int1 AS CHAR),
16551f_char2 = CAST(f_int1 AS CHAR),
16552f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16553WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16554SET AUTOCOMMIT= 0;
16555INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16556SELECT f_int1, f_int1, '', '', 'was inserted'
16557FROM t0_template source_tab
16558WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16559
16560# check transactions-1 success: 	1
16561COMMIT WORK;
16562
16563# check transactions-2 success: 	1
16564ROLLBACK WORK;
16565
16566# check transactions-3 success: 	1
16567DELETE FROM t1 WHERE f_charbig = 'was inserted';
16568COMMIT WORK;
16569ROLLBACK WORK;
16570
16571# check transactions-4 success: 	1
16572INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16573SELECT f_int1, f_int1, '', '', 'was inserted'
16574FROM t0_template source_tab
16575WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16576
16577# check transactions-5 success: 	1
16578ROLLBACK WORK;
16579
16580# check transactions-6 success: 	1
16581# INFO: Storage engine used for t1 seems to be transactional.
16582COMMIT;
16583
16584# check transactions-7 success: 	1
16585DELETE FROM t1 WHERE f_charbig = 'was inserted';
16586COMMIT WORK;
16587SET @@session.sql_mode = 'traditional';
16588Warnings:
16589Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16590SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16591INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16592SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16593'', '', 'was inserted' FROM t0_template
16594WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16595ERROR 22012: Division by 0
16596COMMIT;
16597
16598# check transactions-8 success: 	1
16599# INFO: Storage engine used for t1 seems to be able to revert
16600#       changes made by the failing statement.
16601SET @@session.sql_mode = '';
16602Warnings:
16603Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16604SET AUTOCOMMIT= 1;
16605DELETE FROM t1 WHERE f_charbig = 'was inserted';
16606COMMIT WORK;
16607UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16608
16609# check special-1 success: 	1
16610UPDATE t1 SET f_charbig = '';
16611
16612# check special-2 success: 	1
16613UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16614INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16615SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16616WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16619'just inserted' FROM t0_template
16620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16621CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16622BEGIN
16623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16624f_charbig = 'updated by trigger'
16625      WHERE f_int1 = new.f_int1;
16626END|
16627INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16628SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16629WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16630
16631# check trigger-1 success: 	1
16632DROP TRIGGER trg_1;
16633UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16634f_int2 = CAST(f_char1 AS SIGNED INT),
16635f_charbig = 'just inserted'
16636   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16637DELETE FROM t0_aux
16638WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16640SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16641'just inserted' FROM t0_template
16642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16643CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16644BEGIN
16645UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16646f_charbig = 'updated by trigger'
16647      WHERE f_int1 = new.f_int1;
16648END|
16649INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16650SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16651WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16652
16653# check trigger-2 success: 	1
16654DROP TRIGGER trg_1;
16655UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16656f_int2 = CAST(f_char1 AS SIGNED INT),
16657f_charbig = 'just inserted'
16658   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16659DELETE FROM t0_aux
16660WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16661INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16662SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16663'just inserted' FROM t0_template
16664WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16665CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16666BEGIN
16667UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16668f_charbig = 'updated by trigger'
16669      WHERE f_int1 = new.f_int1;
16670END|
16671UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16672WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16673
16674# check trigger-3 success: 	1
16675DROP TRIGGER trg_1;
16676UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16677f_int2 = CAST(f_char1 AS SIGNED INT),
16678f_charbig = 'just inserted'
16679   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16680DELETE FROM t0_aux
16681WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16682INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16683SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16684'just inserted' FROM t0_template
16685WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16686CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16687BEGIN
16688UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16689f_charbig = 'updated by trigger'
16690      WHERE f_int1 = - old.f_int1;
16691END|
16692UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16693WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16694
16695# check trigger-4 success: 	1
16696DROP TRIGGER trg_1;
16697UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16698f_int2 = CAST(f_char1 AS SIGNED INT),
16699f_charbig = 'just inserted'
16700   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16701DELETE FROM t0_aux
16702WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16703INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16704SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16705'just inserted' FROM t0_template
16706WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16707CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16708BEGIN
16709UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16710f_charbig = 'updated by trigger'
16711      WHERE f_int1 = new.f_int1;
16712END|
16713UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16714WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16715
16716# check trigger-5 success: 	1
16717DROP TRIGGER trg_1;
16718UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16719f_int2 = CAST(f_char1 AS SIGNED INT),
16720f_charbig = 'just inserted'
16721   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16722DELETE FROM t0_aux
16723WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16724INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16725SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16726'just inserted' FROM t0_template
16727WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16728CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16729BEGIN
16730UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16731f_charbig = 'updated by trigger'
16732      WHERE f_int1 = - old.f_int1;
16733END|
16734UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16735WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16736
16737# check trigger-6 success: 	1
16738DROP TRIGGER trg_1;
16739UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16740f_int2 = CAST(f_char1 AS SIGNED INT),
16741f_charbig = 'just inserted'
16742   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16743DELETE FROM t0_aux
16744WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16745INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16746SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16747'just inserted' FROM t0_template
16748WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16749CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16750BEGIN
16751UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16752f_charbig = 'updated by trigger'
16753      WHERE f_int1 = - old.f_int1;
16754END|
16755DELETE FROM t0_aux
16756WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16757
16758# check trigger-7 success: 	1
16759DROP TRIGGER trg_1;
16760UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16761f_int2 = CAST(f_char1 AS SIGNED INT),
16762f_charbig = 'just inserted'
16763   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16764DELETE FROM t0_aux
16765WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16766INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16767SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16768'just inserted' FROM t0_template
16769WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16770CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16771BEGIN
16772UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16773f_charbig = 'updated by trigger'
16774      WHERE f_int1 = - old.f_int1;
16775END|
16776DELETE FROM t0_aux
16777WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16778
16779# check trigger-8 success: 	1
16780DROP TRIGGER trg_1;
16781UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16782f_int2 = CAST(f_char1 AS SIGNED INT),
16783f_charbig = 'just inserted'
16784   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16785DELETE FROM t0_aux
16786WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16787DELETE FROM t1
16788WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16789CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16790BEGIN
16791SET new.f_int1 = old.f_int1 + @max_row,
16792new.f_int2 = old.f_int2 - @max_row,
16793new.f_charbig = '####updated per update trigger####';
16794END|
16795UPDATE t1
16796SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16797f_charbig = '####updated per update statement itself####';
16798
16799# check trigger-9 success: 	1
16800DROP TRIGGER trg_2;
16801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16802f_int2 = CAST(f_char1 AS SIGNED INT),
16803f_charbig = CONCAT('===',f_char1,'===');
16804CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16805BEGIN
16806SET new.f_int1 = new.f_int1 + @max_row,
16807new.f_int2 = new.f_int2 - @max_row,
16808new.f_charbig = '####updated per update trigger####';
16809END|
16810UPDATE t1
16811SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16812f_charbig = '####updated per update statement itself####';
16813
16814# check trigger-10 success: 	1
16815DROP TRIGGER trg_2;
16816UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16817f_int2 = CAST(f_char1 AS SIGNED INT),
16818f_charbig = CONCAT('===',f_char1,'===');
16819CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16820BEGIN
16821SET new.f_int1 = @my_max1 + @counter,
16822new.f_int2 = @my_min2 - @counter,
16823new.f_charbig = '####updated per insert trigger####';
16824SET @counter = @counter + 1;
16825END|
16826SET @counter = 1;
16827SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16828INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16829SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16830CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16831WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16832ORDER BY f_int1;
16833DROP TRIGGER trg_3;
16834
16835# check trigger-11 success: 	1
16836DELETE FROM t1
16837WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16838AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16839AND f_charbig = '####updated per insert trigger####';
16840CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16841BEGIN
16842SET new.f_int1 = @my_max1 + @counter,
16843new.f_int2 = @my_min2 - @counter,
16844new.f_charbig = '####updated per insert trigger####';
16845SET @counter = @counter + 1;
16846END|
16847SET @counter = 1;
16848SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16849INSERT INTO t1 (f_char1, f_char2, f_charbig)
16850SELECT CAST(f_int1 AS CHAR),
16851CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16853ORDER BY f_int1;
16854DROP TRIGGER trg_3;
16855
16856# check trigger-12 success: 	1
16857DELETE FROM t1
16858WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16859AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16860AND f_charbig = '####updated per insert trigger####';
16861ANALYZE  TABLE t1;
16862Table	Op	Msg_type	Msg_text
16863test.t1	analyze	status	OK
16864CHECK    TABLE t1 EXTENDED;
16865Table	Op	Msg_type	Msg_text
16866test.t1	check	status	OK
16867CHECKSUM TABLE t1 EXTENDED;
16868Table	Checksum
16869test.t1	<some_value>
16870OPTIMIZE TABLE t1;
16871Table	Op	Msg_type	Msg_text
16872test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16873test.t1	optimize	status	OK
16874# check layout success:    1
16875REPAIR   TABLE t1 EXTENDED;
16876Table	Op	Msg_type	Msg_text
16877test.t1	repair	status	OK
16878# check layout success:    1
16879TRUNCATE t1;
16880
16881# check TRUNCATE success: 	1
16882# check layout success:    1
16883# End usability test (inc/partition_check.inc)
16884DROP TABLE t1;
16885CREATE TABLE t1 (
16886f_int1 INTEGER,
16887f_int2 INTEGER,
16888f_char1 CHAR(20),
16889f_char2 CHAR(20),
16890f_charbig VARCHAR(1000)
16891, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
16892)
16893PARTITION BY LIST(MOD(f_int1,4))
16894(PARTITION part_3 VALUES IN (-3),
16895PARTITION part_2 VALUES IN (-2),
16896PARTITION part_1 VALUES IN (-1),
16897PARTITION part_N VALUES IN (NULL),
16898PARTITION part0 VALUES IN (0),
16899PARTITION part1 VALUES IN (1),
16900PARTITION part2 VALUES IN (2),
16901PARTITION part3 VALUES IN (3));
16902INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16903SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
16904# Start usability test (inc/partition_check.inc)
16905create_command
16906SHOW CREATE TABLE t1;
16907Table	Create Table
16908t1	CREATE TABLE `t1` (
16909  `f_int1` int(11) DEFAULT NULL,
16910  `f_int2` int(11) DEFAULT NULL,
16911  `f_char1` char(20) DEFAULT NULL,
16912  `f_char2` char(20) DEFAULT NULL,
16913  `f_charbig` varchar(1000) DEFAULT NULL,
16914  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
16915  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
16916) ENGINE=InnoDB DEFAULT CHARSET=latin1
16917/*!50100 PARTITION BY LIST (MOD(f_int1,4))
16918(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
16919 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
16920 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
16921 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
16922 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
16923 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
16924 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
16925 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
16926
16927unified filelist
16928t1#P#part0.ibd
16929t1#P#part1.ibd
16930t1#P#part2.ibd
16931t1#P#part3.ibd
16932t1#P#part_1.ibd
16933t1#P#part_2.ibd
16934t1#P#part_3.ibd
16935t1#P#part_N.ibd
16936t1.frm
16937
16938# check prerequisites-1 success:    1
16939# check COUNT(*) success:    1
16940# check MIN/MAX(f_int1) success:    1
16941# check MIN/MAX(f_int2) success:    1
16942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16943SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16944CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16945WHERE f_int1 IN (2,3);
16946ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
16947# check prerequisites-3 success:    1
16948# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16949INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16950SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16951CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16952WHERE f_int1 IN (2,3);
16953DELETE FROM t1 WHERE f_charbig = 'delete me';
16954INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16955SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16956CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16957WHERE f_int1 IN (2,3);
16958DELETE FROM t1 WHERE f_charbig = 'delete me';
16959# check read via f_int1 success: 1
16960# check read via f_int2 success: 1
16961
16962# check multiple-1 success: 	1
16963DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16964
16965# check multiple-2 success: 	1
16966INSERT INTO t1 SELECT * FROM t0_template
16967WHERE MOD(f_int1,3) = 0;
16968
16969# check multiple-3 success: 	1
16970UPDATE t1 SET f_int1 = f_int1 + @max_row
16971WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16972AND @max_row_div2 + @max_row_div4;
16973
16974# check multiple-4 success: 	1
16975DELETE FROM t1
16976WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16977AND @max_row_div2 + @max_row_div4 + @max_row;
16978
16979# check multiple-5 success: 	1
16980SELECT COUNT(*) INTO @try_count FROM t0_template
16981WHERE MOD(f_int1,3) = 0
16982AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16983SELECT COUNT(*) INTO @clash_count
16984FROM t1 INNER JOIN t0_template USING(f_int1)
16985WHERE MOD(f_int1,3) = 0
16986AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16987SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16988INSERT INTO t1
16989SET f_int1 = @cur_value , f_int2 = @cur_value,
16990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16991f_charbig = '#SINGLE#';
16992
16993# check single-1 success: 	1
16994SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16995INSERT INTO t1
16996SET f_int1 = @cur_value , f_int2 = @cur_value,
16997f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16998f_charbig = '#SINGLE#';
16999
17000# check single-2 success: 	1
17001SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17002SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17003UPDATE t1 SET f_int1 = @cur_value2
17004WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17005
17006# check single-3 success: 	1
17007SET @cur_value1= -1;
17008SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17009UPDATE t1 SET f_int1 = @cur_value1
17010WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17011
17012# check single-4 success: 	1
17013SELECT MAX(f_int1) INTO @cur_value FROM t1;
17014DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17015
17016# check single-5 success: 	1
17017DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17018
17019# check single-6 success: 	1
17020INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17021
17022# check single-7 success: 	1
17023DELETE FROM t1 WHERE f_charbig = '#2147483647##';
17024DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17025INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17026f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17027f_charbig = '#NULL#';
17028INSERT INTO t1
17029SET f_int1 = NULL , f_int2 = -@max_row,
17030f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17031f_charbig = '#NULL#';
17032# check null success:    1
17033
17034# check null-1 success: 	1
17035UPDATE t1 SET f_int1 = -@max_row
17036WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17037AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17038
17039# check null-2 success: 	1
17040UPDATE t1 SET f_int1 = NULL
17041WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17042AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17043
17044# check null-3 success: 	1
17045DELETE FROM t1
17046WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17047AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17048
17049# check null-4 success: 	1
17050DELETE FROM t1
17051WHERE f_int1 = 0 AND f_int2 = 0
17052AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17053AND f_charbig = '#NULL#';
17054INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17055SELECT f_int1, f_int1, '', '', 'was inserted'
17056   FROM t0_template source_tab
17057WHERE MOD(f_int1,3) = 0
17058AND f_int1 BETWEEN @max_row_div2 AND @max_row
17059ON DUPLICATE KEY
17060UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17061f_int2 = 2 * @max_row + source_tab.f_int1,
17062f_charbig = 'was updated';
17063
17064# check unique-1-a success: 	1
17065
17066# check unique-1-b success: 	1
17067DELETE FROM t1 WHERE f_charbig = 'was inserted';
17068UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17069f_int2 = CAST(f_char1 AS SIGNED INT),
17070f_charbig = CONCAT('===',f_char1,'===')
17071WHERE f_charbig = 'was updated';
17072REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17073SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17074   FROM t0_template source_tab
17075WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17076
17077# check replace success: 	1
17078DELETE FROM t1
17079WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17080DELETE FROM t1
17081WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17082f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17083UPDATE t1 SET f_int2 = f_int1,
17084f_char1 = CAST(f_int1 AS CHAR),
17085f_char2 = CAST(f_int1 AS CHAR),
17086f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17087WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17088SET AUTOCOMMIT= 0;
17089INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17090SELECT f_int1, f_int1, '', '', 'was inserted'
17091FROM t0_template source_tab
17092WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17093
17094# check transactions-1 success: 	1
17095COMMIT WORK;
17096
17097# check transactions-2 success: 	1
17098ROLLBACK WORK;
17099
17100# check transactions-3 success: 	1
17101DELETE FROM t1 WHERE f_charbig = 'was inserted';
17102COMMIT WORK;
17103ROLLBACK WORK;
17104
17105# check transactions-4 success: 	1
17106INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17107SELECT f_int1, f_int1, '', '', 'was inserted'
17108FROM t0_template source_tab
17109WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17110
17111# check transactions-5 success: 	1
17112ROLLBACK WORK;
17113
17114# check transactions-6 success: 	1
17115# INFO: Storage engine used for t1 seems to be transactional.
17116COMMIT;
17117
17118# check transactions-7 success: 	1
17119DELETE FROM t1 WHERE f_charbig = 'was inserted';
17120COMMIT WORK;
17121SET @@session.sql_mode = 'traditional';
17122Warnings:
17123Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17124SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17125INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17126SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17127'', '', 'was inserted' FROM t0_template
17128WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17129ERROR 22012: Division by 0
17130COMMIT;
17131
17132# check transactions-8 success: 	1
17133# INFO: Storage engine used for t1 seems to be able to revert
17134#       changes made by the failing statement.
17135SET @@session.sql_mode = '';
17136Warnings:
17137Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17138SET AUTOCOMMIT= 1;
17139DELETE FROM t1 WHERE f_charbig = 'was inserted';
17140COMMIT WORK;
17141UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17142
17143# check special-1 success: 	1
17144UPDATE t1 SET f_charbig = '';
17145
17146# check special-2 success: 	1
17147UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17148INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17149SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17151INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17152SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17153'just inserted' FROM t0_template
17154WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17155CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17156BEGIN
17157UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17158f_charbig = 'updated by trigger'
17159      WHERE f_int1 = new.f_int1;
17160END|
17161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17162SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17163WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17164
17165# check trigger-1 success: 	1
17166DROP TRIGGER trg_1;
17167UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17168f_int2 = CAST(f_char1 AS SIGNED INT),
17169f_charbig = 'just inserted'
17170   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17171DELETE FROM t0_aux
17172WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17173INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17174SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17175'just inserted' FROM t0_template
17176WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17177CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17178BEGIN
17179UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17180f_charbig = 'updated by trigger'
17181      WHERE f_int1 = new.f_int1;
17182END|
17183INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17184SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17186
17187# check trigger-2 success: 	1
17188DROP TRIGGER trg_1;
17189UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17190f_int2 = CAST(f_char1 AS SIGNED INT),
17191f_charbig = 'just inserted'
17192   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17193DELETE FROM t0_aux
17194WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17195INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17196SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17197'just inserted' FROM t0_template
17198WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17199CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17200BEGIN
17201UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17202f_charbig = 'updated by trigger'
17203      WHERE f_int1 = new.f_int1;
17204END|
17205UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17206WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17207
17208# check trigger-3 success: 	1
17209DROP TRIGGER trg_1;
17210UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17211f_int2 = CAST(f_char1 AS SIGNED INT),
17212f_charbig = 'just inserted'
17213   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17214DELETE FROM t0_aux
17215WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17216INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17217SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17218'just inserted' FROM t0_template
17219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17220CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17221BEGIN
17222UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17223f_charbig = 'updated by trigger'
17224      WHERE f_int1 = - old.f_int1;
17225END|
17226UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17227WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17228
17229# check trigger-4 success: 	1
17230DROP TRIGGER trg_1;
17231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17232f_int2 = CAST(f_char1 AS SIGNED INT),
17233f_charbig = 'just inserted'
17234   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17235DELETE FROM t0_aux
17236WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17238SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17239'just inserted' FROM t0_template
17240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17241CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17242BEGIN
17243UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17244f_charbig = 'updated by trigger'
17245      WHERE f_int1 = new.f_int1;
17246END|
17247UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17248WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17249
17250# check trigger-5 success: 	1
17251DROP TRIGGER trg_1;
17252UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17253f_int2 = CAST(f_char1 AS SIGNED INT),
17254f_charbig = 'just inserted'
17255   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17256DELETE FROM t0_aux
17257WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17258INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17259SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17260'just inserted' FROM t0_template
17261WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17262CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17263BEGIN
17264UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17265f_charbig = 'updated by trigger'
17266      WHERE f_int1 = - old.f_int1;
17267END|
17268UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17269WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17270
17271# check trigger-6 success: 	1
17272DROP TRIGGER trg_1;
17273UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17274f_int2 = CAST(f_char1 AS SIGNED INT),
17275f_charbig = 'just inserted'
17276   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17277DELETE FROM t0_aux
17278WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17279INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17280SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17281'just inserted' FROM t0_template
17282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17283CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17284BEGIN
17285UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17286f_charbig = 'updated by trigger'
17287      WHERE f_int1 = - old.f_int1;
17288END|
17289DELETE FROM t0_aux
17290WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17291
17292# check trigger-7 success: 	1
17293DROP TRIGGER trg_1;
17294UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17295f_int2 = CAST(f_char1 AS SIGNED INT),
17296f_charbig = 'just inserted'
17297   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17298DELETE FROM t0_aux
17299WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17300INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17301SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17302'just inserted' FROM t0_template
17303WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17304CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17305BEGIN
17306UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17307f_charbig = 'updated by trigger'
17308      WHERE f_int1 = - old.f_int1;
17309END|
17310DELETE FROM t0_aux
17311WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17312
17313# check trigger-8 success: 	1
17314DROP TRIGGER trg_1;
17315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17316f_int2 = CAST(f_char1 AS SIGNED INT),
17317f_charbig = 'just inserted'
17318   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17319DELETE FROM t0_aux
17320WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17321DELETE FROM t1
17322WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17323CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17324BEGIN
17325SET new.f_int1 = old.f_int1 + @max_row,
17326new.f_int2 = old.f_int2 - @max_row,
17327new.f_charbig = '####updated per update trigger####';
17328END|
17329UPDATE t1
17330SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17331f_charbig = '####updated per update statement itself####';
17332
17333# check trigger-9 success: 	1
17334DROP TRIGGER trg_2;
17335UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17336f_int2 = CAST(f_char1 AS SIGNED INT),
17337f_charbig = CONCAT('===',f_char1,'===');
17338CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17339BEGIN
17340SET new.f_int1 = new.f_int1 + @max_row,
17341new.f_int2 = new.f_int2 - @max_row,
17342new.f_charbig = '####updated per update trigger####';
17343END|
17344UPDATE t1
17345SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17346f_charbig = '####updated per update statement itself####';
17347
17348# check trigger-10 success: 	1
17349DROP TRIGGER trg_2;
17350UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17351f_int2 = CAST(f_char1 AS SIGNED INT),
17352f_charbig = CONCAT('===',f_char1,'===');
17353CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17354BEGIN
17355SET new.f_int1 = @my_max1 + @counter,
17356new.f_int2 = @my_min2 - @counter,
17357new.f_charbig = '####updated per insert trigger####';
17358SET @counter = @counter + 1;
17359END|
17360SET @counter = 1;
17361SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17363SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17364CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17366ORDER BY f_int1;
17367DROP TRIGGER trg_3;
17368
17369# check trigger-11 success: 	1
17370DELETE FROM t1
17371WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17372AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17373AND f_charbig = '####updated per insert trigger####';
17374CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17375BEGIN
17376SET new.f_int1 = @my_max1 + @counter,
17377new.f_int2 = @my_min2 - @counter,
17378new.f_charbig = '####updated per insert trigger####';
17379SET @counter = @counter + 1;
17380END|
17381SET @counter = 1;
17382SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17383INSERT INTO t1 (f_char1, f_char2, f_charbig)
17384SELECT CAST(f_int1 AS CHAR),
17385CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17387ORDER BY f_int1;
17388DROP TRIGGER trg_3;
17389
17390# check trigger-12 success: 	1
17391DELETE FROM t1
17392WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17393AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17394AND f_charbig = '####updated per insert trigger####';
17395ANALYZE  TABLE t1;
17396Table	Op	Msg_type	Msg_text
17397test.t1	analyze	status	OK
17398CHECK    TABLE t1 EXTENDED;
17399Table	Op	Msg_type	Msg_text
17400test.t1	check	status	OK
17401CHECKSUM TABLE t1 EXTENDED;
17402Table	Checksum
17403test.t1	<some_value>
17404OPTIMIZE TABLE t1;
17405Table	Op	Msg_type	Msg_text
17406test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17407test.t1	optimize	status	OK
17408# check layout success:    1
17409REPAIR   TABLE t1 EXTENDED;
17410Table	Op	Msg_type	Msg_text
17411test.t1	repair	status	OK
17412# check layout success:    1
17413TRUNCATE t1;
17414
17415# check TRUNCATE success: 	1
17416# check layout success:    1
17417# End usability test (inc/partition_check.inc)
17418DROP TABLE t1;
17419CREATE TABLE t1 (
17420f_int1 INTEGER,
17421f_int2 INTEGER,
17422f_char1 CHAR(20),
17423f_char2 CHAR(20),
17424f_charbig VARCHAR(1000)
17425, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
17426)
17427PARTITION BY RANGE(f_int1)
17428(PARTITION parta VALUES LESS THAN (0),
17429PARTITION partb VALUES LESS THAN (5),
17430PARTITION partc VALUES LESS THAN (10),
17431PARTITION partd VALUES LESS THAN (10 + 5),
17432PARTITION parte VALUES LESS THAN (20),
17433PARTITION partf VALUES LESS THAN (2147483646));
17434INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17435SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
17436# Start usability test (inc/partition_check.inc)
17437create_command
17438SHOW CREATE TABLE t1;
17439Table	Create Table
17440t1	CREATE TABLE `t1` (
17441  `f_int1` int(11) DEFAULT NULL,
17442  `f_int2` int(11) DEFAULT NULL,
17443  `f_char1` char(20) DEFAULT NULL,
17444  `f_char2` char(20) DEFAULT NULL,
17445  `f_charbig` varchar(1000) DEFAULT NULL,
17446  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
17447  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
17448) ENGINE=InnoDB DEFAULT CHARSET=latin1
17449/*!50100 PARTITION BY RANGE (f_int1)
17450(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
17451 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
17452 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
17453 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
17454 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
17455 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
17456
17457unified filelist
17458t1#P#parta.ibd
17459t1#P#partb.ibd
17460t1#P#partc.ibd
17461t1#P#partd.ibd
17462t1#P#parte.ibd
17463t1#P#partf.ibd
17464t1.frm
17465
17466# check prerequisites-1 success:    1
17467# check COUNT(*) success:    1
17468# check MIN/MAX(f_int1) success:    1
17469# check MIN/MAX(f_int2) success:    1
17470INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17471SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17472CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17473WHERE f_int1 IN (2,3);
17474ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
17475# check prerequisites-3 success:    1
17476# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17477INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17478SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17479CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17480WHERE f_int1 IN (2,3);
17481DELETE FROM t1 WHERE f_charbig = 'delete me';
17482INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17483SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17484CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17485WHERE f_int1 IN (2,3);
17486DELETE FROM t1 WHERE f_charbig = 'delete me';
17487# check read via f_int1 success: 1
17488# check read via f_int2 success: 1
17489
17490# check multiple-1 success: 	1
17491DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17492
17493# check multiple-2 success: 	1
17494INSERT INTO t1 SELECT * FROM t0_template
17495WHERE MOD(f_int1,3) = 0;
17496
17497# check multiple-3 success: 	1
17498UPDATE t1 SET f_int1 = f_int1 + @max_row
17499WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17500AND @max_row_div2 + @max_row_div4;
17501
17502# check multiple-4 success: 	1
17503DELETE FROM t1
17504WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17505AND @max_row_div2 + @max_row_div4 + @max_row;
17506
17507# check multiple-5 success: 	1
17508SELECT COUNT(*) INTO @try_count FROM t0_template
17509WHERE MOD(f_int1,3) = 0
17510AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17511SELECT COUNT(*) INTO @clash_count
17512FROM t1 INNER JOIN t0_template USING(f_int1)
17513WHERE MOD(f_int1,3) = 0
17514AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17515SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17516INSERT INTO t1
17517SET f_int1 = @cur_value , f_int2 = @cur_value,
17518f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17519f_charbig = '#SINGLE#';
17520
17521# check single-1 success: 	1
17522SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17523INSERT INTO t1
17524SET f_int1 = @cur_value , f_int2 = @cur_value,
17525f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17526f_charbig = '#SINGLE#';
17527
17528# check single-2 success: 	1
17529SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17530SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17531UPDATE t1 SET f_int1 = @cur_value2
17532WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17533
17534# check single-3 success: 	1
17535SET @cur_value1= -1;
17536SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17537UPDATE t1 SET f_int1 = @cur_value1
17538WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17539
17540# check single-4 success: 	1
17541SELECT MAX(f_int1) INTO @cur_value FROM t1;
17542DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17543
17544# check single-5 success: 	1
17545DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17546
17547# check single-6 success: 	1
17548INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17549ERROR HY000: Table has no partition for value 2147483647
17550DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17551INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17552f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17553f_charbig = '#NULL#';
17554INSERT INTO t1
17555SET f_int1 = NULL , f_int2 = -@max_row,
17556f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17557f_charbig = '#NULL#';
17558# check null success:    1
17559
17560# check null-1 success: 	1
17561UPDATE t1 SET f_int1 = -@max_row
17562WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17563AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17564
17565# check null-2 success: 	1
17566UPDATE t1 SET f_int1 = NULL
17567WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17568AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17569
17570# check null-3 success: 	1
17571DELETE FROM t1
17572WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17573AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17574
17575# check null-4 success: 	1
17576DELETE FROM t1
17577WHERE f_int1 = 0 AND f_int2 = 0
17578AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17579AND f_charbig = '#NULL#';
17580INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17581SELECT f_int1, f_int1, '', '', 'was inserted'
17582   FROM t0_template source_tab
17583WHERE MOD(f_int1,3) = 0
17584AND f_int1 BETWEEN @max_row_div2 AND @max_row
17585ON DUPLICATE KEY
17586UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17587f_int2 = 2 * @max_row + source_tab.f_int1,
17588f_charbig = 'was updated';
17589
17590# check unique-1-a success: 	1
17591
17592# check unique-1-b success: 	1
17593DELETE FROM t1 WHERE f_charbig = 'was inserted';
17594UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17595f_int2 = CAST(f_char1 AS SIGNED INT),
17596f_charbig = CONCAT('===',f_char1,'===')
17597WHERE f_charbig = 'was updated';
17598REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17599SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17600   FROM t0_template source_tab
17601WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17602
17603# check replace success: 	1
17604DELETE FROM t1
17605WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17606DELETE FROM t1
17607WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17608f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17609UPDATE t1 SET f_int2 = f_int1,
17610f_char1 = CAST(f_int1 AS CHAR),
17611f_char2 = CAST(f_int1 AS CHAR),
17612f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17613WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17614SET AUTOCOMMIT= 0;
17615INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17616SELECT f_int1, f_int1, '', '', 'was inserted'
17617FROM t0_template source_tab
17618WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17619
17620# check transactions-1 success: 	1
17621COMMIT WORK;
17622
17623# check transactions-2 success: 	1
17624ROLLBACK WORK;
17625
17626# check transactions-3 success: 	1
17627DELETE FROM t1 WHERE f_charbig = 'was inserted';
17628COMMIT WORK;
17629ROLLBACK WORK;
17630
17631# check transactions-4 success: 	1
17632INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17633SELECT f_int1, f_int1, '', '', 'was inserted'
17634FROM t0_template source_tab
17635WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17636
17637# check transactions-5 success: 	1
17638ROLLBACK WORK;
17639
17640# check transactions-6 success: 	1
17641# INFO: Storage engine used for t1 seems to be transactional.
17642COMMIT;
17643
17644# check transactions-7 success: 	1
17645DELETE FROM t1 WHERE f_charbig = 'was inserted';
17646COMMIT WORK;
17647SET @@session.sql_mode = 'traditional';
17648Warnings:
17649Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17650SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17651INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17652SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17653'', '', 'was inserted' FROM t0_template
17654WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17655ERROR 22012: Division by 0
17656COMMIT;
17657
17658# check transactions-8 success: 	1
17659# INFO: Storage engine used for t1 seems to be able to revert
17660#       changes made by the failing statement.
17661SET @@session.sql_mode = '';
17662Warnings:
17663Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17664SET AUTOCOMMIT= 1;
17665DELETE FROM t1 WHERE f_charbig = 'was inserted';
17666COMMIT WORK;
17667UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17668
17669# check special-1 success: 	1
17670UPDATE t1 SET f_charbig = '';
17671
17672# check special-2 success: 	1
17673UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17674INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17675SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17676WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17677INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17678SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17679'just inserted' FROM t0_template
17680WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17681CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17682BEGIN
17683UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17684f_charbig = 'updated by trigger'
17685      WHERE f_int1 = new.f_int1;
17686END|
17687INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17688SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17689WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17690
17691# check trigger-1 success: 	1
17692DROP TRIGGER trg_1;
17693UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17694f_int2 = CAST(f_char1 AS SIGNED INT),
17695f_charbig = 'just inserted'
17696   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17697DELETE FROM t0_aux
17698WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17699INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17700SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17701'just inserted' FROM t0_template
17702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17703CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17704BEGIN
17705UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17706f_charbig = 'updated by trigger'
17707      WHERE f_int1 = new.f_int1;
17708END|
17709INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17710SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17711WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17712
17713# check trigger-2 success: 	1
17714DROP TRIGGER trg_1;
17715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17716f_int2 = CAST(f_char1 AS SIGNED INT),
17717f_charbig = 'just inserted'
17718   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17719DELETE FROM t0_aux
17720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17723'just inserted' FROM t0_template
17724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17725CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17726BEGIN
17727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17728f_charbig = 'updated by trigger'
17729      WHERE f_int1 = new.f_int1;
17730END|
17731UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17733
17734# check trigger-3 success: 	1
17735DROP TRIGGER trg_1;
17736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17737f_int2 = CAST(f_char1 AS SIGNED INT),
17738f_charbig = 'just inserted'
17739   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17740DELETE FROM t0_aux
17741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17744'just inserted' FROM t0_template
17745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17746CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17747BEGIN
17748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17749f_charbig = 'updated by trigger'
17750      WHERE f_int1 = - old.f_int1;
17751END|
17752UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17754
17755# check trigger-4 success: 	1
17756DROP TRIGGER trg_1;
17757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17758f_int2 = CAST(f_char1 AS SIGNED INT),
17759f_charbig = 'just inserted'
17760   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17761DELETE FROM t0_aux
17762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17763INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17764SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17765'just inserted' FROM t0_template
17766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17767CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17768BEGIN
17769UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17770f_charbig = 'updated by trigger'
17771      WHERE f_int1 = new.f_int1;
17772END|
17773UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17774WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17775
17776# check trigger-5 success: 	1
17777DROP TRIGGER trg_1;
17778UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17779f_int2 = CAST(f_char1 AS SIGNED INT),
17780f_charbig = 'just inserted'
17781   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17782DELETE FROM t0_aux
17783WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17784INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17785SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17786'just inserted' FROM t0_template
17787WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17788CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17789BEGIN
17790UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17791f_charbig = 'updated by trigger'
17792      WHERE f_int1 = - old.f_int1;
17793END|
17794UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17795WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17796
17797# check trigger-6 success: 	1
17798DROP TRIGGER trg_1;
17799UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17800f_int2 = CAST(f_char1 AS SIGNED INT),
17801f_charbig = 'just inserted'
17802   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17803DELETE FROM t0_aux
17804WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17805INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17806SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17807'just inserted' FROM t0_template
17808WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17809CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17810BEGIN
17811UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17812f_charbig = 'updated by trigger'
17813      WHERE f_int1 = - old.f_int1;
17814END|
17815DELETE FROM t0_aux
17816WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17817
17818# check trigger-7 success: 	1
17819DROP TRIGGER trg_1;
17820UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17821f_int2 = CAST(f_char1 AS SIGNED INT),
17822f_charbig = 'just inserted'
17823   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17824DELETE FROM t0_aux
17825WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17826INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17827SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17828'just inserted' FROM t0_template
17829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17830CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17831BEGIN
17832UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17833f_charbig = 'updated by trigger'
17834      WHERE f_int1 = - old.f_int1;
17835END|
17836DELETE FROM t0_aux
17837WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17838
17839# check trigger-8 success: 	1
17840DROP TRIGGER trg_1;
17841UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17842f_int2 = CAST(f_char1 AS SIGNED INT),
17843f_charbig = 'just inserted'
17844   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17845DELETE FROM t0_aux
17846WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17847DELETE FROM t1
17848WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17849CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17850BEGIN
17851SET new.f_int1 = old.f_int1 + @max_row,
17852new.f_int2 = old.f_int2 - @max_row,
17853new.f_charbig = '####updated per update trigger####';
17854END|
17855UPDATE t1
17856SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17857f_charbig = '####updated per update statement itself####';
17858
17859# check trigger-9 success: 	1
17860DROP TRIGGER trg_2;
17861UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17862f_int2 = CAST(f_char1 AS SIGNED INT),
17863f_charbig = CONCAT('===',f_char1,'===');
17864CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17865BEGIN
17866SET new.f_int1 = new.f_int1 + @max_row,
17867new.f_int2 = new.f_int2 - @max_row,
17868new.f_charbig = '####updated per update trigger####';
17869END|
17870UPDATE t1
17871SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17872f_charbig = '####updated per update statement itself####';
17873
17874# check trigger-10 success: 	1
17875DROP TRIGGER trg_2;
17876UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17877f_int2 = CAST(f_char1 AS SIGNED INT),
17878f_charbig = CONCAT('===',f_char1,'===');
17879CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17880BEGIN
17881SET new.f_int1 = @my_max1 + @counter,
17882new.f_int2 = @my_min2 - @counter,
17883new.f_charbig = '####updated per insert trigger####';
17884SET @counter = @counter + 1;
17885END|
17886SET @counter = 1;
17887SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17888INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17889SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17890CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17892ORDER BY f_int1;
17893DROP TRIGGER trg_3;
17894
17895# check trigger-11 success: 	1
17896DELETE FROM t1
17897WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17898AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17899AND f_charbig = '####updated per insert trigger####';
17900CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17901BEGIN
17902SET new.f_int1 = @my_max1 + @counter,
17903new.f_int2 = @my_min2 - @counter,
17904new.f_charbig = '####updated per insert trigger####';
17905SET @counter = @counter + 1;
17906END|
17907SET @counter = 1;
17908SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17909INSERT INTO t1 (f_char1, f_char2, f_charbig)
17910SELECT CAST(f_int1 AS CHAR),
17911CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17913ORDER BY f_int1;
17914DROP TRIGGER trg_3;
17915
17916# check trigger-12 success: 	1
17917DELETE FROM t1
17918WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17919AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17920AND f_charbig = '####updated per insert trigger####';
17921ANALYZE  TABLE t1;
17922Table	Op	Msg_type	Msg_text
17923test.t1	analyze	status	OK
17924CHECK    TABLE t1 EXTENDED;
17925Table	Op	Msg_type	Msg_text
17926test.t1	check	status	OK
17927CHECKSUM TABLE t1 EXTENDED;
17928Table	Checksum
17929test.t1	<some_value>
17930OPTIMIZE TABLE t1;
17931Table	Op	Msg_type	Msg_text
17932test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17933test.t1	optimize	status	OK
17934# check layout success:    1
17935REPAIR   TABLE t1 EXTENDED;
17936Table	Op	Msg_type	Msg_text
17937test.t1	repair	status	OK
17938# check layout success:    1
17939TRUNCATE t1;
17940
17941# check TRUNCATE success: 	1
17942# check layout success:    1
17943# End usability test (inc/partition_check.inc)
17944DROP TABLE t1;
17945CREATE TABLE t1 (
17946f_int1 INTEGER,
17947f_int2 INTEGER,
17948f_char1 CHAR(20),
17949f_char2 CHAR(20),
17950f_charbig VARCHAR(1000)
17951, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
17952)
17953PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
17954(PARTITION parta VALUES LESS THAN (0),
17955PARTITION partb VALUES LESS THAN (5),
17956PARTITION partc VALUES LESS THAN (10),
17957PARTITION partd VALUES LESS THAN (2147483646));
17958INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17959SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
17960# Start usability test (inc/partition_check.inc)
17961create_command
17962SHOW CREATE TABLE t1;
17963Table	Create Table
17964t1	CREATE TABLE `t1` (
17965  `f_int1` int(11) DEFAULT NULL,
17966  `f_int2` int(11) DEFAULT NULL,
17967  `f_char1` char(20) DEFAULT NULL,
17968  `f_char2` char(20) DEFAULT NULL,
17969  `f_charbig` varchar(1000) DEFAULT NULL,
17970  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
17971  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
17972) ENGINE=InnoDB DEFAULT CHARSET=latin1
17973/*!50100 PARTITION BY RANGE (f_int1 DIV 2)
17974SUBPARTITION BY HASH (f_int1)
17975SUBPARTITIONS 2
17976(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
17977 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
17978 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
17979 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
17980
17981unified filelist
17982t1#P#parta#SP#partasp0.ibd
17983t1#P#parta#SP#partasp1.ibd
17984t1#P#partb#SP#partbsp0.ibd
17985t1#P#partb#SP#partbsp1.ibd
17986t1#P#partc#SP#partcsp0.ibd
17987t1#P#partc#SP#partcsp1.ibd
17988t1#P#partd#SP#partdsp0.ibd
17989t1#P#partd#SP#partdsp1.ibd
17990t1.frm
17991
17992# check prerequisites-1 success:    1
17993# check COUNT(*) success:    1
17994# check MIN/MAX(f_int1) success:    1
17995# check MIN/MAX(f_int2) success:    1
17996INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17997SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17998CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17999WHERE f_int1 IN (2,3);
18000ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18001# check prerequisites-3 success:    1
18002# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18003INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18004SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18005CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18006WHERE f_int1 IN (2,3);
18007DELETE FROM t1 WHERE f_charbig = 'delete me';
18008INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18009SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18010CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18011WHERE f_int1 IN (2,3);
18012DELETE FROM t1 WHERE f_charbig = 'delete me';
18013# check read via f_int1 success: 1
18014# check read via f_int2 success: 1
18015
18016# check multiple-1 success: 	1
18017DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18018
18019# check multiple-2 success: 	1
18020INSERT INTO t1 SELECT * FROM t0_template
18021WHERE MOD(f_int1,3) = 0;
18022
18023# check multiple-3 success: 	1
18024UPDATE t1 SET f_int1 = f_int1 + @max_row
18025WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18026AND @max_row_div2 + @max_row_div4;
18027
18028# check multiple-4 success: 	1
18029DELETE FROM t1
18030WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18031AND @max_row_div2 + @max_row_div4 + @max_row;
18032
18033# check multiple-5 success: 	1
18034SELECT COUNT(*) INTO @try_count FROM t0_template
18035WHERE MOD(f_int1,3) = 0
18036AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18037SELECT COUNT(*) INTO @clash_count
18038FROM t1 INNER JOIN t0_template USING(f_int1)
18039WHERE MOD(f_int1,3) = 0
18040AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18041SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18042INSERT INTO t1
18043SET f_int1 = @cur_value , f_int2 = @cur_value,
18044f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18045f_charbig = '#SINGLE#';
18046
18047# check single-1 success: 	1
18048SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18049INSERT INTO t1
18050SET f_int1 = @cur_value , f_int2 = @cur_value,
18051f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18052f_charbig = '#SINGLE#';
18053
18054# check single-2 success: 	1
18055SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18056SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18057UPDATE t1 SET f_int1 = @cur_value2
18058WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18059
18060# check single-3 success: 	1
18061SET @cur_value1= -1;
18062SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18063UPDATE t1 SET f_int1 = @cur_value1
18064WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18065
18066# check single-4 success: 	1
18067SELECT MAX(f_int1) INTO @cur_value FROM t1;
18068DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18069
18070# check single-5 success: 	1
18071DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18072
18073# check single-6 success: 	1
18074INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18075
18076# check single-7 success: 	1
18077DELETE FROM t1 WHERE f_charbig = '#2147483647##';
18078DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18079INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18080f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18081f_charbig = '#NULL#';
18082INSERT INTO t1
18083SET f_int1 = NULL , f_int2 = -@max_row,
18084f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18085f_charbig = '#NULL#';
18086# check null success:    1
18087
18088# check null-1 success: 	1
18089UPDATE t1 SET f_int1 = -@max_row
18090WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18091AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18092
18093# check null-2 success: 	1
18094UPDATE t1 SET f_int1 = NULL
18095WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18096AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18097
18098# check null-3 success: 	1
18099DELETE FROM t1
18100WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18101AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18102
18103# check null-4 success: 	1
18104DELETE FROM t1
18105WHERE f_int1 = 0 AND f_int2 = 0
18106AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18107AND f_charbig = '#NULL#';
18108INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18109SELECT f_int1, f_int1, '', '', 'was inserted'
18110   FROM t0_template source_tab
18111WHERE MOD(f_int1,3) = 0
18112AND f_int1 BETWEEN @max_row_div2 AND @max_row
18113ON DUPLICATE KEY
18114UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18115f_int2 = 2 * @max_row + source_tab.f_int1,
18116f_charbig = 'was updated';
18117
18118# check unique-1-a success: 	1
18119
18120# check unique-1-b success: 	1
18121DELETE FROM t1 WHERE f_charbig = 'was inserted';
18122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18123f_int2 = CAST(f_char1 AS SIGNED INT),
18124f_charbig = CONCAT('===',f_char1,'===')
18125WHERE f_charbig = 'was updated';
18126REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18127SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18128   FROM t0_template source_tab
18129WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18130
18131# check replace success: 	1
18132DELETE FROM t1
18133WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18134DELETE FROM t1
18135WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18136f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18137UPDATE t1 SET f_int2 = f_int1,
18138f_char1 = CAST(f_int1 AS CHAR),
18139f_char2 = CAST(f_int1 AS CHAR),
18140f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18141WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18142SET AUTOCOMMIT= 0;
18143INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18144SELECT f_int1, f_int1, '', '', 'was inserted'
18145FROM t0_template source_tab
18146WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18147
18148# check transactions-1 success: 	1
18149COMMIT WORK;
18150
18151# check transactions-2 success: 	1
18152ROLLBACK WORK;
18153
18154# check transactions-3 success: 	1
18155DELETE FROM t1 WHERE f_charbig = 'was inserted';
18156COMMIT WORK;
18157ROLLBACK WORK;
18158
18159# check transactions-4 success: 	1
18160INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18161SELECT f_int1, f_int1, '', '', 'was inserted'
18162FROM t0_template source_tab
18163WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18164
18165# check transactions-5 success: 	1
18166ROLLBACK WORK;
18167
18168# check transactions-6 success: 	1
18169# INFO: Storage engine used for t1 seems to be transactional.
18170COMMIT;
18171
18172# check transactions-7 success: 	1
18173DELETE FROM t1 WHERE f_charbig = 'was inserted';
18174COMMIT WORK;
18175SET @@session.sql_mode = 'traditional';
18176Warnings:
18177Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18178SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18179INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18180SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18181'', '', 'was inserted' FROM t0_template
18182WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18183ERROR 22012: Division by 0
18184COMMIT;
18185
18186# check transactions-8 success: 	1
18187# INFO: Storage engine used for t1 seems to be able to revert
18188#       changes made by the failing statement.
18189SET @@session.sql_mode = '';
18190Warnings:
18191Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18192SET AUTOCOMMIT= 1;
18193DELETE FROM t1 WHERE f_charbig = 'was inserted';
18194COMMIT WORK;
18195UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18196
18197# check special-1 success: 	1
18198UPDATE t1 SET f_charbig = '';
18199
18200# check special-2 success: 	1
18201UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18202INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18203SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18204WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18207'just inserted' FROM t0_template
18208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18209CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18210BEGIN
18211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18212f_charbig = 'updated by trigger'
18213      WHERE f_int1 = new.f_int1;
18214END|
18215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18216SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18218
18219# check trigger-1 success: 	1
18220DROP TRIGGER trg_1;
18221UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18222f_int2 = CAST(f_char1 AS SIGNED INT),
18223f_charbig = 'just inserted'
18224   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18225DELETE FROM t0_aux
18226WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18227INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18228SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18229'just inserted' FROM t0_template
18230WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18231CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18232BEGIN
18233UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18234f_charbig = 'updated by trigger'
18235      WHERE f_int1 = new.f_int1;
18236END|
18237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18238SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18240
18241# check trigger-2 success: 	1
18242DROP TRIGGER trg_1;
18243UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18244f_int2 = CAST(f_char1 AS SIGNED INT),
18245f_charbig = 'just inserted'
18246   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18247DELETE FROM t0_aux
18248WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18249INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18250SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18251'just inserted' FROM t0_template
18252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18253CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18254BEGIN
18255UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18256f_charbig = 'updated by trigger'
18257      WHERE f_int1 = new.f_int1;
18258END|
18259UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18260WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18261
18262# check trigger-3 success: 	1
18263DROP TRIGGER trg_1;
18264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18265f_int2 = CAST(f_char1 AS SIGNED INT),
18266f_charbig = 'just inserted'
18267   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18268DELETE FROM t0_aux
18269WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18270INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18271SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18272'just inserted' FROM t0_template
18273WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18274CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18275BEGIN
18276UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18277f_charbig = 'updated by trigger'
18278      WHERE f_int1 = - old.f_int1;
18279END|
18280UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18281WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18282
18283# check trigger-4 success: 	1
18284DROP TRIGGER trg_1;
18285UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18286f_int2 = CAST(f_char1 AS SIGNED INT),
18287f_charbig = 'just inserted'
18288   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18289DELETE FROM t0_aux
18290WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18291INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18292SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18293'just inserted' FROM t0_template
18294WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18295CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18296BEGIN
18297UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18298f_charbig = 'updated by trigger'
18299      WHERE f_int1 = new.f_int1;
18300END|
18301UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18302WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18303
18304# check trigger-5 success: 	1
18305DROP TRIGGER trg_1;
18306UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18307f_int2 = CAST(f_char1 AS SIGNED INT),
18308f_charbig = 'just inserted'
18309   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18310DELETE FROM t0_aux
18311WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18312INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18313SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18314'just inserted' FROM t0_template
18315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18316CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18317BEGIN
18318UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18319f_charbig = 'updated by trigger'
18320      WHERE f_int1 = - old.f_int1;
18321END|
18322UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18323WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18324
18325# check trigger-6 success: 	1
18326DROP TRIGGER trg_1;
18327UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18328f_int2 = CAST(f_char1 AS SIGNED INT),
18329f_charbig = 'just inserted'
18330   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18331DELETE FROM t0_aux
18332WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18333INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18334SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18335'just inserted' FROM t0_template
18336WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18337CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18338BEGIN
18339UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18340f_charbig = 'updated by trigger'
18341      WHERE f_int1 = - old.f_int1;
18342END|
18343DELETE FROM t0_aux
18344WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18345
18346# check trigger-7 success: 	1
18347DROP TRIGGER trg_1;
18348UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18349f_int2 = CAST(f_char1 AS SIGNED INT),
18350f_charbig = 'just inserted'
18351   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18352DELETE FROM t0_aux
18353WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18354INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18355SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18356'just inserted' FROM t0_template
18357WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18358CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18359BEGIN
18360UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18361f_charbig = 'updated by trigger'
18362      WHERE f_int1 = - old.f_int1;
18363END|
18364DELETE FROM t0_aux
18365WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18366
18367# check trigger-8 success: 	1
18368DROP TRIGGER trg_1;
18369UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18370f_int2 = CAST(f_char1 AS SIGNED INT),
18371f_charbig = 'just inserted'
18372   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18373DELETE FROM t0_aux
18374WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18375DELETE FROM t1
18376WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18377CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18378BEGIN
18379SET new.f_int1 = old.f_int1 + @max_row,
18380new.f_int2 = old.f_int2 - @max_row,
18381new.f_charbig = '####updated per update trigger####';
18382END|
18383UPDATE t1
18384SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18385f_charbig = '####updated per update statement itself####';
18386
18387# check trigger-9 success: 	1
18388DROP TRIGGER trg_2;
18389UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18390f_int2 = CAST(f_char1 AS SIGNED INT),
18391f_charbig = CONCAT('===',f_char1,'===');
18392CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18393BEGIN
18394SET new.f_int1 = new.f_int1 + @max_row,
18395new.f_int2 = new.f_int2 - @max_row,
18396new.f_charbig = '####updated per update trigger####';
18397END|
18398UPDATE t1
18399SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18400f_charbig = '####updated per update statement itself####';
18401
18402# check trigger-10 success: 	1
18403DROP TRIGGER trg_2;
18404UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18405f_int2 = CAST(f_char1 AS SIGNED INT),
18406f_charbig = CONCAT('===',f_char1,'===');
18407CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18408BEGIN
18409SET new.f_int1 = @my_max1 + @counter,
18410new.f_int2 = @my_min2 - @counter,
18411new.f_charbig = '####updated per insert trigger####';
18412SET @counter = @counter + 1;
18413END|
18414SET @counter = 1;
18415SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18416INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18417SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18418CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18419WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18420ORDER BY f_int1;
18421DROP TRIGGER trg_3;
18422
18423# check trigger-11 success: 	1
18424DELETE FROM t1
18425WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18426AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18427AND f_charbig = '####updated per insert trigger####';
18428CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18429BEGIN
18430SET new.f_int1 = @my_max1 + @counter,
18431new.f_int2 = @my_min2 - @counter,
18432new.f_charbig = '####updated per insert trigger####';
18433SET @counter = @counter + 1;
18434END|
18435SET @counter = 1;
18436SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18437INSERT INTO t1 (f_char1, f_char2, f_charbig)
18438SELECT CAST(f_int1 AS CHAR),
18439CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18440WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18441ORDER BY f_int1;
18442DROP TRIGGER trg_3;
18443
18444# check trigger-12 success: 	1
18445DELETE FROM t1
18446WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18447AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18448AND f_charbig = '####updated per insert trigger####';
18449ANALYZE  TABLE t1;
18450Table	Op	Msg_type	Msg_text
18451test.t1	analyze	status	OK
18452CHECK    TABLE t1 EXTENDED;
18453Table	Op	Msg_type	Msg_text
18454test.t1	check	status	OK
18455CHECKSUM TABLE t1 EXTENDED;
18456Table	Checksum
18457test.t1	<some_value>
18458OPTIMIZE TABLE t1;
18459Table	Op	Msg_type	Msg_text
18460test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18461test.t1	optimize	status	OK
18462# check layout success:    1
18463REPAIR   TABLE t1 EXTENDED;
18464Table	Op	Msg_type	Msg_text
18465test.t1	repair	status	OK
18466# check layout success:    1
18467TRUNCATE t1;
18468
18469# check TRUNCATE success: 	1
18470# check layout success:    1
18471# End usability test (inc/partition_check.inc)
18472DROP TABLE t1;
18473CREATE TABLE t1 (
18474f_int1 INTEGER,
18475f_int2 INTEGER,
18476f_char1 CHAR(20),
18477f_char2 CHAR(20),
18478f_charbig VARCHAR(1000)
18479, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
18480)
18481PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
18482(PARTITION part1 VALUES LESS THAN (0)
18483(SUBPARTITION subpart11, SUBPARTITION subpart12),
18484PARTITION part2 VALUES LESS THAN (5)
18485(SUBPARTITION subpart21, SUBPARTITION subpart22),
18486PARTITION part3 VALUES LESS THAN (10)
18487(SUBPARTITION subpart31, SUBPARTITION subpart32),
18488PARTITION part4 VALUES LESS THAN (2147483646)
18489(SUBPARTITION subpart41, SUBPARTITION subpart42));
18490INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18491SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
18492# Start usability test (inc/partition_check.inc)
18493create_command
18494SHOW CREATE TABLE t1;
18495Table	Create Table
18496t1	CREATE TABLE `t1` (
18497  `f_int1` int(11) DEFAULT NULL,
18498  `f_int2` int(11) DEFAULT NULL,
18499  `f_char1` char(20) DEFAULT NULL,
18500  `f_char2` char(20) DEFAULT NULL,
18501  `f_charbig` varchar(1000) DEFAULT NULL,
18502  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
18503  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
18504) ENGINE=InnoDB DEFAULT CHARSET=latin1
18505/*!50100 PARTITION BY RANGE (f_int1)
18506SUBPARTITION BY KEY (f_int1)
18507(PARTITION part1 VALUES LESS THAN (0)
18508 (SUBPARTITION subpart11 ENGINE = InnoDB,
18509  SUBPARTITION subpart12 ENGINE = InnoDB),
18510 PARTITION part2 VALUES LESS THAN (5)
18511 (SUBPARTITION subpart21 ENGINE = InnoDB,
18512  SUBPARTITION subpart22 ENGINE = InnoDB),
18513 PARTITION part3 VALUES LESS THAN (10)
18514 (SUBPARTITION subpart31 ENGINE = InnoDB,
18515  SUBPARTITION subpart32 ENGINE = InnoDB),
18516 PARTITION part4 VALUES LESS THAN (2147483646)
18517 (SUBPARTITION subpart41 ENGINE = InnoDB,
18518  SUBPARTITION subpart42 ENGINE = InnoDB)) */
18519
18520unified filelist
18521t1#P#part1#SP#subpart11.ibd
18522t1#P#part1#SP#subpart12.ibd
18523t1#P#part2#SP#subpart21.ibd
18524t1#P#part2#SP#subpart22.ibd
18525t1#P#part3#SP#subpart31.ibd
18526t1#P#part3#SP#subpart32.ibd
18527t1#P#part4#SP#subpart41.ibd
18528t1#P#part4#SP#subpart42.ibd
18529t1.frm
18530
18531# check prerequisites-1 success:    1
18532# check COUNT(*) success:    1
18533# check MIN/MAX(f_int1) success:    1
18534# check MIN/MAX(f_int2) success:    1
18535INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18536SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18537CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18538WHERE f_int1 IN (2,3);
18539ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
18540# check prerequisites-3 success:    1
18541# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18542INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18543SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18544CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18545WHERE f_int1 IN (2,3);
18546DELETE FROM t1 WHERE f_charbig = 'delete me';
18547INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18548SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18549CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18550WHERE f_int1 IN (2,3);
18551DELETE FROM t1 WHERE f_charbig = 'delete me';
18552# check read via f_int1 success: 1
18553# check read via f_int2 success: 1
18554
18555# check multiple-1 success: 	1
18556DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18557
18558# check multiple-2 success: 	1
18559INSERT INTO t1 SELECT * FROM t0_template
18560WHERE MOD(f_int1,3) = 0;
18561
18562# check multiple-3 success: 	1
18563UPDATE t1 SET f_int1 = f_int1 + @max_row
18564WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18565AND @max_row_div2 + @max_row_div4;
18566
18567# check multiple-4 success: 	1
18568DELETE FROM t1
18569WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18570AND @max_row_div2 + @max_row_div4 + @max_row;
18571
18572# check multiple-5 success: 	1
18573SELECT COUNT(*) INTO @try_count FROM t0_template
18574WHERE MOD(f_int1,3) = 0
18575AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18576SELECT COUNT(*) INTO @clash_count
18577FROM t1 INNER JOIN t0_template USING(f_int1)
18578WHERE MOD(f_int1,3) = 0
18579AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18580SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18581INSERT INTO t1
18582SET f_int1 = @cur_value , f_int2 = @cur_value,
18583f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18584f_charbig = '#SINGLE#';
18585
18586# check single-1 success: 	1
18587SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18588INSERT INTO t1
18589SET f_int1 = @cur_value , f_int2 = @cur_value,
18590f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18591f_charbig = '#SINGLE#';
18592
18593# check single-2 success: 	1
18594SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18595SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18596UPDATE t1 SET f_int1 = @cur_value2
18597WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18598
18599# check single-3 success: 	1
18600SET @cur_value1= -1;
18601SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18602UPDATE t1 SET f_int1 = @cur_value1
18603WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18604
18605# check single-4 success: 	1
18606SELECT MAX(f_int1) INTO @cur_value FROM t1;
18607DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18608
18609# check single-5 success: 	1
18610DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18611
18612# check single-6 success: 	1
18613INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18614ERROR HY000: Table has no partition for value 2147483647
18615DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18616INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18617f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18618f_charbig = '#NULL#';
18619INSERT INTO t1
18620SET f_int1 = NULL , f_int2 = -@max_row,
18621f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18622f_charbig = '#NULL#';
18623# check null success:    1
18624
18625# check null-1 success: 	1
18626UPDATE t1 SET f_int1 = -@max_row
18627WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18628AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18629
18630# check null-2 success: 	1
18631UPDATE t1 SET f_int1 = NULL
18632WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18633AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18634
18635# check null-3 success: 	1
18636DELETE FROM t1
18637WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18638AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18639
18640# check null-4 success: 	1
18641DELETE FROM t1
18642WHERE f_int1 = 0 AND f_int2 = 0
18643AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18644AND f_charbig = '#NULL#';
18645INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18646SELECT f_int1, f_int1, '', '', 'was inserted'
18647   FROM t0_template source_tab
18648WHERE MOD(f_int1,3) = 0
18649AND f_int1 BETWEEN @max_row_div2 AND @max_row
18650ON DUPLICATE KEY
18651UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18652f_int2 = 2 * @max_row + source_tab.f_int1,
18653f_charbig = 'was updated';
18654
18655# check unique-1-a success: 	1
18656
18657# check unique-1-b success: 	1
18658DELETE FROM t1 WHERE f_charbig = 'was inserted';
18659UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18660f_int2 = CAST(f_char1 AS SIGNED INT),
18661f_charbig = CONCAT('===',f_char1,'===')
18662WHERE f_charbig = 'was updated';
18663REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18664SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18665   FROM t0_template source_tab
18666WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18667
18668# check replace success: 	1
18669DELETE FROM t1
18670WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18671DELETE FROM t1
18672WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18673f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18674UPDATE t1 SET f_int2 = f_int1,
18675f_char1 = CAST(f_int1 AS CHAR),
18676f_char2 = CAST(f_int1 AS CHAR),
18677f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18678WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18679SET AUTOCOMMIT= 0;
18680INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18681SELECT f_int1, f_int1, '', '', 'was inserted'
18682FROM t0_template source_tab
18683WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18684
18685# check transactions-1 success: 	1
18686COMMIT WORK;
18687
18688# check transactions-2 success: 	1
18689ROLLBACK WORK;
18690
18691# check transactions-3 success: 	1
18692DELETE FROM t1 WHERE f_charbig = 'was inserted';
18693COMMIT WORK;
18694ROLLBACK WORK;
18695
18696# check transactions-4 success: 	1
18697INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18698SELECT f_int1, f_int1, '', '', 'was inserted'
18699FROM t0_template source_tab
18700WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18701
18702# check transactions-5 success: 	1
18703ROLLBACK WORK;
18704
18705# check transactions-6 success: 	1
18706# INFO: Storage engine used for t1 seems to be transactional.
18707COMMIT;
18708
18709# check transactions-7 success: 	1
18710DELETE FROM t1 WHERE f_charbig = 'was inserted';
18711COMMIT WORK;
18712SET @@session.sql_mode = 'traditional';
18713Warnings:
18714Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18715SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18716INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18717SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18718'', '', 'was inserted' FROM t0_template
18719WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18720ERROR 22012: Division by 0
18721COMMIT;
18722
18723# check transactions-8 success: 	1
18724# INFO: Storage engine used for t1 seems to be able to revert
18725#       changes made by the failing statement.
18726SET @@session.sql_mode = '';
18727Warnings:
18728Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18729SET AUTOCOMMIT= 1;
18730DELETE FROM t1 WHERE f_charbig = 'was inserted';
18731COMMIT WORK;
18732UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18733
18734# check special-1 success: 	1
18735UPDATE t1 SET f_charbig = '';
18736
18737# check special-2 success: 	1
18738UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18739INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18740SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18744'just inserted' FROM t0_template
18745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18746CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18747BEGIN
18748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18749f_charbig = 'updated by trigger'
18750      WHERE f_int1 = new.f_int1;
18751END|
18752INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18753SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18754WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18755
18756# check trigger-1 success: 	1
18757DROP TRIGGER trg_1;
18758UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18759f_int2 = CAST(f_char1 AS SIGNED INT),
18760f_charbig = 'just inserted'
18761   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18762DELETE FROM t0_aux
18763WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18764INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18765SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18766'just inserted' FROM t0_template
18767WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18768CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18769BEGIN
18770UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18771f_charbig = 'updated by trigger'
18772      WHERE f_int1 = new.f_int1;
18773END|
18774INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18775SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18776WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18777
18778# check trigger-2 success: 	1
18779DROP TRIGGER trg_1;
18780UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18781f_int2 = CAST(f_char1 AS SIGNED INT),
18782f_charbig = 'just inserted'
18783   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18784DELETE FROM t0_aux
18785WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18786INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18787SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18788'just inserted' FROM t0_template
18789WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18790CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18791BEGIN
18792UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18793f_charbig = 'updated by trigger'
18794      WHERE f_int1 = new.f_int1;
18795END|
18796UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18797WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18798
18799# check trigger-3 success: 	1
18800DROP TRIGGER trg_1;
18801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18802f_int2 = CAST(f_char1 AS SIGNED INT),
18803f_charbig = 'just inserted'
18804   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18805DELETE FROM t0_aux
18806WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18807INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18808SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18809'just inserted' FROM t0_template
18810WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18811CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18812BEGIN
18813UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18814f_charbig = 'updated by trigger'
18815      WHERE f_int1 = - old.f_int1;
18816END|
18817UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18818WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18819
18820# check trigger-4 success: 	1
18821DROP TRIGGER trg_1;
18822UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18823f_int2 = CAST(f_char1 AS SIGNED INT),
18824f_charbig = 'just inserted'
18825   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18826DELETE FROM t0_aux
18827WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18828INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18829SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18830'just inserted' FROM t0_template
18831WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18832CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18833BEGIN
18834UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18835f_charbig = 'updated by trigger'
18836      WHERE f_int1 = new.f_int1;
18837END|
18838UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18839WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18840
18841# check trigger-5 success: 	1
18842DROP TRIGGER trg_1;
18843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18844f_int2 = CAST(f_char1 AS SIGNED INT),
18845f_charbig = 'just inserted'
18846   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18847DELETE FROM t0_aux
18848WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18850SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18851'just inserted' FROM t0_template
18852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18853CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18854BEGIN
18855UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18856f_charbig = 'updated by trigger'
18857      WHERE f_int1 = - old.f_int1;
18858END|
18859UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18860WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18861
18862# check trigger-6 success: 	1
18863DROP TRIGGER trg_1;
18864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18865f_int2 = CAST(f_char1 AS SIGNED INT),
18866f_charbig = 'just inserted'
18867   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18868DELETE FROM t0_aux
18869WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18870INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18871SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18872'just inserted' FROM t0_template
18873WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18874CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18875BEGIN
18876UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18877f_charbig = 'updated by trigger'
18878      WHERE f_int1 = - old.f_int1;
18879END|
18880DELETE FROM t0_aux
18881WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18882
18883# check trigger-7 success: 	1
18884DROP TRIGGER trg_1;
18885UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18886f_int2 = CAST(f_char1 AS SIGNED INT),
18887f_charbig = 'just inserted'
18888   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18889DELETE FROM t0_aux
18890WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18891INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18892SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18893'just inserted' FROM t0_template
18894WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18895CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18896BEGIN
18897UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18898f_charbig = 'updated by trigger'
18899      WHERE f_int1 = - old.f_int1;
18900END|
18901DELETE FROM t0_aux
18902WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18903
18904# check trigger-8 success: 	1
18905DROP TRIGGER trg_1;
18906UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18907f_int2 = CAST(f_char1 AS SIGNED INT),
18908f_charbig = 'just inserted'
18909   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18910DELETE FROM t0_aux
18911WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18912DELETE FROM t1
18913WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18914CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18915BEGIN
18916SET new.f_int1 = old.f_int1 + @max_row,
18917new.f_int2 = old.f_int2 - @max_row,
18918new.f_charbig = '####updated per update trigger####';
18919END|
18920UPDATE t1
18921SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18922f_charbig = '####updated per update statement itself####';
18923
18924# check trigger-9 success: 	1
18925DROP TRIGGER trg_2;
18926UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18927f_int2 = CAST(f_char1 AS SIGNED INT),
18928f_charbig = CONCAT('===',f_char1,'===');
18929CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18930BEGIN
18931SET new.f_int1 = new.f_int1 + @max_row,
18932new.f_int2 = new.f_int2 - @max_row,
18933new.f_charbig = '####updated per update trigger####';
18934END|
18935UPDATE t1
18936SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18937f_charbig = '####updated per update statement itself####';
18938
18939# check trigger-10 success: 	1
18940DROP TRIGGER trg_2;
18941UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18942f_int2 = CAST(f_char1 AS SIGNED INT),
18943f_charbig = CONCAT('===',f_char1,'===');
18944CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18945BEGIN
18946SET new.f_int1 = @my_max1 + @counter,
18947new.f_int2 = @my_min2 - @counter,
18948new.f_charbig = '####updated per insert trigger####';
18949SET @counter = @counter + 1;
18950END|
18951SET @counter = 1;
18952SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18953INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18954SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18955CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18956WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18957ORDER BY f_int1;
18958DROP TRIGGER trg_3;
18959
18960# check trigger-11 success: 	1
18961DELETE FROM t1
18962WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18963AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18964AND f_charbig = '####updated per insert trigger####';
18965CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18966BEGIN
18967SET new.f_int1 = @my_max1 + @counter,
18968new.f_int2 = @my_min2 - @counter,
18969new.f_charbig = '####updated per insert trigger####';
18970SET @counter = @counter + 1;
18971END|
18972SET @counter = 1;
18973SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18974INSERT INTO t1 (f_char1, f_char2, f_charbig)
18975SELECT CAST(f_int1 AS CHAR),
18976CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18977WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18978ORDER BY f_int1;
18979DROP TRIGGER trg_3;
18980
18981# check trigger-12 success: 	1
18982DELETE FROM t1
18983WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18984AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18985AND f_charbig = '####updated per insert trigger####';
18986ANALYZE  TABLE t1;
18987Table	Op	Msg_type	Msg_text
18988test.t1	analyze	status	OK
18989CHECK    TABLE t1 EXTENDED;
18990Table	Op	Msg_type	Msg_text
18991test.t1	check	status	OK
18992CHECKSUM TABLE t1 EXTENDED;
18993Table	Checksum
18994test.t1	<some_value>
18995OPTIMIZE TABLE t1;
18996Table	Op	Msg_type	Msg_text
18997test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18998test.t1	optimize	status	OK
18999# check layout success:    1
19000REPAIR   TABLE t1 EXTENDED;
19001Table	Op	Msg_type	Msg_text
19002test.t1	repair	status	OK
19003# check layout success:    1
19004TRUNCATE t1;
19005
19006# check TRUNCATE success: 	1
19007# check layout success:    1
19008# End usability test (inc/partition_check.inc)
19009DROP TABLE t1;
19010CREATE TABLE t1 (
19011f_int1 INTEGER,
19012f_int2 INTEGER,
19013f_char1 CHAR(20),
19014f_char2 CHAR(20),
19015f_charbig VARCHAR(1000)
19016, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
19017)
19018PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
19019(PARTITION part1 VALUES IN (0)
19020(SUBPARTITION sp11,
19021SUBPARTITION sp12),
19022PARTITION part2 VALUES IN (1)
19023(SUBPARTITION sp21,
19024SUBPARTITION sp22),
19025PARTITION part3 VALUES IN (2)
19026(SUBPARTITION sp31,
19027SUBPARTITION sp32),
19028PARTITION part4 VALUES IN (NULL)
19029(SUBPARTITION sp41,
19030SUBPARTITION sp42));
19031INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19032SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
19033# Start usability test (inc/partition_check.inc)
19034create_command
19035SHOW CREATE TABLE t1;
19036Table	Create Table
19037t1	CREATE TABLE `t1` (
19038  `f_int1` int(11) DEFAULT NULL,
19039  `f_int2` int(11) DEFAULT NULL,
19040  `f_char1` char(20) DEFAULT NULL,
19041  `f_char2` char(20) DEFAULT NULL,
19042  `f_charbig` varchar(1000) DEFAULT NULL,
19043  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
19044  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
19045) ENGINE=InnoDB DEFAULT CHARSET=latin1
19046/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
19047SUBPARTITION BY HASH (f_int1 + 1)
19048(PARTITION part1 VALUES IN (0)
19049 (SUBPARTITION sp11 ENGINE = InnoDB,
19050  SUBPARTITION sp12 ENGINE = InnoDB),
19051 PARTITION part2 VALUES IN (1)
19052 (SUBPARTITION sp21 ENGINE = InnoDB,
19053  SUBPARTITION sp22 ENGINE = InnoDB),
19054 PARTITION part3 VALUES IN (2)
19055 (SUBPARTITION sp31 ENGINE = InnoDB,
19056  SUBPARTITION sp32 ENGINE = InnoDB),
19057 PARTITION part4 VALUES IN (NULL)
19058 (SUBPARTITION sp41 ENGINE = InnoDB,
19059  SUBPARTITION sp42 ENGINE = InnoDB)) */
19060
19061unified filelist
19062t1#P#part1#SP#sp11.ibd
19063t1#P#part1#SP#sp12.ibd
19064t1#P#part2#SP#sp21.ibd
19065t1#P#part2#SP#sp22.ibd
19066t1#P#part3#SP#sp31.ibd
19067t1#P#part3#SP#sp32.ibd
19068t1#P#part4#SP#sp41.ibd
19069t1#P#part4#SP#sp42.ibd
19070t1.frm
19071
19072# check prerequisites-1 success:    1
19073# check COUNT(*) success:    1
19074# check MIN/MAX(f_int1) success:    1
19075# check MIN/MAX(f_int2) success:    1
19076INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19077SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19078CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19079WHERE f_int1 IN (2,3);
19080ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19081# check prerequisites-3 success:    1
19082# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19083INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19084SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19085CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19086WHERE f_int1 IN (2,3);
19087DELETE FROM t1 WHERE f_charbig = 'delete me';
19088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19089SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19090CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19091WHERE f_int1 IN (2,3);
19092DELETE FROM t1 WHERE f_charbig = 'delete me';
19093# check read via f_int1 success: 1
19094# check read via f_int2 success: 1
19095
19096# check multiple-1 success: 	1
19097DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19098
19099# check multiple-2 success: 	1
19100INSERT INTO t1 SELECT * FROM t0_template
19101WHERE MOD(f_int1,3) = 0;
19102
19103# check multiple-3 success: 	1
19104UPDATE t1 SET f_int1 = f_int1 + @max_row
19105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19106AND @max_row_div2 + @max_row_div4;
19107
19108# check multiple-4 success: 	1
19109DELETE FROM t1
19110WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19111AND @max_row_div2 + @max_row_div4 + @max_row;
19112
19113# check multiple-5 success: 	1
19114SELECT COUNT(*) INTO @try_count FROM t0_template
19115WHERE MOD(f_int1,3) = 0
19116AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19117SELECT COUNT(*) INTO @clash_count
19118FROM t1 INNER JOIN t0_template USING(f_int1)
19119WHERE MOD(f_int1,3) = 0
19120AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19121SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19122INSERT INTO t1
19123SET f_int1 = @cur_value , f_int2 = @cur_value,
19124f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19125f_charbig = '#SINGLE#';
19126
19127# check single-1 success: 	1
19128SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19129INSERT INTO t1
19130SET f_int1 = @cur_value , f_int2 = @cur_value,
19131f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19132f_charbig = '#SINGLE#';
19133
19134# check single-2 success: 	1
19135SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19136SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19137UPDATE t1 SET f_int1 = @cur_value2
19138WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19139
19140# check single-3 success: 	1
19141SET @cur_value1= -1;
19142SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19143UPDATE t1 SET f_int1 = @cur_value1
19144WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19145
19146# check single-4 success: 	1
19147SELECT MAX(f_int1) INTO @cur_value FROM t1;
19148DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19149
19150# check single-5 success: 	1
19151DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19152
19153# check single-6 success: 	1
19154INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19155
19156# check single-7 success: 	1
19157DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19158DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19159INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19160f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19161f_charbig = '#NULL#';
19162INSERT INTO t1
19163SET f_int1 = NULL , f_int2 = -@max_row,
19164f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19165f_charbig = '#NULL#';
19166# check null success:    1
19167
19168# check null-1 success: 	1
19169UPDATE t1 SET f_int1 = -@max_row
19170WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19171AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19172
19173# check null-2 success: 	1
19174UPDATE t1 SET f_int1 = NULL
19175WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19176AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19177
19178# check null-3 success: 	1
19179DELETE FROM t1
19180WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19181AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19182
19183# check null-4 success: 	1
19184DELETE FROM t1
19185WHERE f_int1 = 0 AND f_int2 = 0
19186AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19187AND f_charbig = '#NULL#';
19188INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19189SELECT f_int1, f_int1, '', '', 'was inserted'
19190   FROM t0_template source_tab
19191WHERE MOD(f_int1,3) = 0
19192AND f_int1 BETWEEN @max_row_div2 AND @max_row
19193ON DUPLICATE KEY
19194UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19195f_int2 = 2 * @max_row + source_tab.f_int1,
19196f_charbig = 'was updated';
19197
19198# check unique-1-a success: 	1
19199
19200# check unique-1-b success: 	1
19201DELETE FROM t1 WHERE f_charbig = 'was inserted';
19202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19203f_int2 = CAST(f_char1 AS SIGNED INT),
19204f_charbig = CONCAT('===',f_char1,'===')
19205WHERE f_charbig = 'was updated';
19206REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19207SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19208   FROM t0_template source_tab
19209WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19210
19211# check replace success: 	1
19212DELETE FROM t1
19213WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19214DELETE FROM t1
19215WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19216f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19217UPDATE t1 SET f_int2 = f_int1,
19218f_char1 = CAST(f_int1 AS CHAR),
19219f_char2 = CAST(f_int1 AS CHAR),
19220f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19221WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19222SET AUTOCOMMIT= 0;
19223INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19224SELECT f_int1, f_int1, '', '', 'was inserted'
19225FROM t0_template source_tab
19226WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19227
19228# check transactions-1 success: 	1
19229COMMIT WORK;
19230
19231# check transactions-2 success: 	1
19232ROLLBACK WORK;
19233
19234# check transactions-3 success: 	1
19235DELETE FROM t1 WHERE f_charbig = 'was inserted';
19236COMMIT WORK;
19237ROLLBACK WORK;
19238
19239# check transactions-4 success: 	1
19240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19241SELECT f_int1, f_int1, '', '', 'was inserted'
19242FROM t0_template source_tab
19243WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19244
19245# check transactions-5 success: 	1
19246ROLLBACK WORK;
19247
19248# check transactions-6 success: 	1
19249# INFO: Storage engine used for t1 seems to be transactional.
19250COMMIT;
19251
19252# check transactions-7 success: 	1
19253DELETE FROM t1 WHERE f_charbig = 'was inserted';
19254COMMIT WORK;
19255SET @@session.sql_mode = 'traditional';
19256Warnings:
19257Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19258SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19259INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19260SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19261'', '', 'was inserted' FROM t0_template
19262WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19263ERROR 22012: Division by 0
19264COMMIT;
19265
19266# check transactions-8 success: 	1
19267# INFO: Storage engine used for t1 seems to be able to revert
19268#       changes made by the failing statement.
19269SET @@session.sql_mode = '';
19270Warnings:
19271Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19272SET AUTOCOMMIT= 1;
19273DELETE FROM t1 WHERE f_charbig = 'was inserted';
19274COMMIT WORK;
19275UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19276
19277# check special-1 success: 	1
19278UPDATE t1 SET f_charbig = '';
19279
19280# check special-2 success: 	1
19281UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19282INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19283SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19284WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19285INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19286SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19287'just inserted' FROM t0_template
19288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19289CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19290BEGIN
19291UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19292f_charbig = 'updated by trigger'
19293      WHERE f_int1 = new.f_int1;
19294END|
19295INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19296SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19297WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19298
19299# check trigger-1 success: 	1
19300DROP TRIGGER trg_1;
19301UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19302f_int2 = CAST(f_char1 AS SIGNED INT),
19303f_charbig = 'just inserted'
19304   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19305DELETE FROM t0_aux
19306WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19307INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19308SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19309'just inserted' FROM t0_template
19310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19311CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19312BEGIN
19313UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19314f_charbig = 'updated by trigger'
19315      WHERE f_int1 = new.f_int1;
19316END|
19317INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19318SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19320
19321# check trigger-2 success: 	1
19322DROP TRIGGER trg_1;
19323UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19324f_int2 = CAST(f_char1 AS SIGNED INT),
19325f_charbig = 'just inserted'
19326   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19327DELETE FROM t0_aux
19328WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19329INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19330SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19331'just inserted' FROM t0_template
19332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19333CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19334BEGIN
19335UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19336f_charbig = 'updated by trigger'
19337      WHERE f_int1 = new.f_int1;
19338END|
19339UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19340WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19341
19342# check trigger-3 success: 	1
19343DROP TRIGGER trg_1;
19344UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19345f_int2 = CAST(f_char1 AS SIGNED INT),
19346f_charbig = 'just inserted'
19347   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19348DELETE FROM t0_aux
19349WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19351SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19352'just inserted' FROM t0_template
19353WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19354CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19355BEGIN
19356UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19357f_charbig = 'updated by trigger'
19358      WHERE f_int1 = - old.f_int1;
19359END|
19360UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19361WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19362
19363# check trigger-4 success: 	1
19364DROP TRIGGER trg_1;
19365UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19366f_int2 = CAST(f_char1 AS SIGNED INT),
19367f_charbig = 'just inserted'
19368   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19369DELETE FROM t0_aux
19370WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19371INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19372SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19373'just inserted' FROM t0_template
19374WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19375CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19376BEGIN
19377UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19378f_charbig = 'updated by trigger'
19379      WHERE f_int1 = new.f_int1;
19380END|
19381UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19382WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19383
19384# check trigger-5 success: 	1
19385DROP TRIGGER trg_1;
19386UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19387f_int2 = CAST(f_char1 AS SIGNED INT),
19388f_charbig = 'just inserted'
19389   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19390DELETE FROM t0_aux
19391WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19392INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19393SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19394'just inserted' FROM t0_template
19395WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19396CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19397BEGIN
19398UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19399f_charbig = 'updated by trigger'
19400      WHERE f_int1 = - old.f_int1;
19401END|
19402UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19403WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19404
19405# check trigger-6 success: 	1
19406DROP TRIGGER trg_1;
19407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19408f_int2 = CAST(f_char1 AS SIGNED INT),
19409f_charbig = 'just inserted'
19410   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19411DELETE FROM t0_aux
19412WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19413INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19414SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19415'just inserted' FROM t0_template
19416WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19417CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19418BEGIN
19419UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19420f_charbig = 'updated by trigger'
19421      WHERE f_int1 = - old.f_int1;
19422END|
19423DELETE FROM t0_aux
19424WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19425
19426# check trigger-7 success: 	1
19427DROP TRIGGER trg_1;
19428UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19429f_int2 = CAST(f_char1 AS SIGNED INT),
19430f_charbig = 'just inserted'
19431   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19432DELETE FROM t0_aux
19433WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19434INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19435SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19436'just inserted' FROM t0_template
19437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19438CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19439BEGIN
19440UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19441f_charbig = 'updated by trigger'
19442      WHERE f_int1 = - old.f_int1;
19443END|
19444DELETE FROM t0_aux
19445WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19446
19447# check trigger-8 success: 	1
19448DROP TRIGGER trg_1;
19449UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19450f_int2 = CAST(f_char1 AS SIGNED INT),
19451f_charbig = 'just inserted'
19452   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19453DELETE FROM t0_aux
19454WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19455DELETE FROM t1
19456WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19457CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19458BEGIN
19459SET new.f_int1 = old.f_int1 + @max_row,
19460new.f_int2 = old.f_int2 - @max_row,
19461new.f_charbig = '####updated per update trigger####';
19462END|
19463UPDATE t1
19464SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19465f_charbig = '####updated per update statement itself####';
19466
19467# check trigger-9 success: 	1
19468DROP TRIGGER trg_2;
19469UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19470f_int2 = CAST(f_char1 AS SIGNED INT),
19471f_charbig = CONCAT('===',f_char1,'===');
19472CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19473BEGIN
19474SET new.f_int1 = new.f_int1 + @max_row,
19475new.f_int2 = new.f_int2 - @max_row,
19476new.f_charbig = '####updated per update trigger####';
19477END|
19478UPDATE t1
19479SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19480f_charbig = '####updated per update statement itself####';
19481
19482# check trigger-10 success: 	1
19483DROP TRIGGER trg_2;
19484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19485f_int2 = CAST(f_char1 AS SIGNED INT),
19486f_charbig = CONCAT('===',f_char1,'===');
19487CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19488BEGIN
19489SET new.f_int1 = @my_max1 + @counter,
19490new.f_int2 = @my_min2 - @counter,
19491new.f_charbig = '####updated per insert trigger####';
19492SET @counter = @counter + 1;
19493END|
19494SET @counter = 1;
19495SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19496INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19497SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19498CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19499WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19500ORDER BY f_int1;
19501DROP TRIGGER trg_3;
19502
19503# check trigger-11 success: 	1
19504DELETE FROM t1
19505WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19506AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19507AND f_charbig = '####updated per insert trigger####';
19508CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19509BEGIN
19510SET new.f_int1 = @my_max1 + @counter,
19511new.f_int2 = @my_min2 - @counter,
19512new.f_charbig = '####updated per insert trigger####';
19513SET @counter = @counter + 1;
19514END|
19515SET @counter = 1;
19516SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19517INSERT INTO t1 (f_char1, f_char2, f_charbig)
19518SELECT CAST(f_int1 AS CHAR),
19519CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19520WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19521ORDER BY f_int1;
19522DROP TRIGGER trg_3;
19523
19524# check trigger-12 success: 	1
19525DELETE FROM t1
19526WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19527AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19528AND f_charbig = '####updated per insert trigger####';
19529ANALYZE  TABLE t1;
19530Table	Op	Msg_type	Msg_text
19531test.t1	analyze	status	OK
19532CHECK    TABLE t1 EXTENDED;
19533Table	Op	Msg_type	Msg_text
19534test.t1	check	status	OK
19535CHECKSUM TABLE t1 EXTENDED;
19536Table	Checksum
19537test.t1	<some_value>
19538OPTIMIZE TABLE t1;
19539Table	Op	Msg_type	Msg_text
19540test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
19541test.t1	optimize	status	OK
19542# check layout success:    1
19543REPAIR   TABLE t1 EXTENDED;
19544Table	Op	Msg_type	Msg_text
19545test.t1	repair	status	OK
19546# check layout success:    1
19547TRUNCATE t1;
19548
19549# check TRUNCATE success: 	1
19550# check layout success:    1
19551# End usability test (inc/partition_check.inc)
19552DROP TABLE t1;
19553CREATE TABLE t1 (
19554f_int1 INTEGER,
19555f_int2 INTEGER,
19556f_char1 CHAR(20),
19557f_char2 CHAR(20),
19558f_charbig VARCHAR(1000)
19559, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
19560)
19561PARTITION BY LIST(ABS(MOD(f_int1,2)))
19562SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
19563(PARTITION part1 VALUES IN (0),
19564PARTITION part2 VALUES IN (1),
19565PARTITION part3 VALUES IN (NULL));
19566INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19567SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
19568# Start usability test (inc/partition_check.inc)
19569create_command
19570SHOW CREATE TABLE t1;
19571Table	Create Table
19572t1	CREATE TABLE `t1` (
19573  `f_int1` int(11) DEFAULT NULL,
19574  `f_int2` int(11) DEFAULT NULL,
19575  `f_char1` char(20) DEFAULT NULL,
19576  `f_char2` char(20) DEFAULT NULL,
19577  `f_charbig` varchar(1000) DEFAULT NULL,
19578  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
19579  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
19580) ENGINE=InnoDB DEFAULT CHARSET=latin1
19581/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
19582SUBPARTITION BY KEY (f_int1)
19583SUBPARTITIONS 3
19584(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
19585 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
19586 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
19587
19588unified filelist
19589t1#P#part1#SP#part1sp0.ibd
19590t1#P#part1#SP#part1sp1.ibd
19591t1#P#part1#SP#part1sp2.ibd
19592t1#P#part2#SP#part2sp0.ibd
19593t1#P#part2#SP#part2sp1.ibd
19594t1#P#part2#SP#part2sp2.ibd
19595t1#P#part3#SP#part3sp0.ibd
19596t1#P#part3#SP#part3sp1.ibd
19597t1#P#part3#SP#part3sp2.ibd
19598t1.frm
19599
19600# check prerequisites-1 success:    1
19601# check COUNT(*) success:    1
19602# check MIN/MAX(f_int1) success:    1
19603# check MIN/MAX(f_int2) success:    1
19604INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19605SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19606CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19607WHERE f_int1 IN (2,3);
19608ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
19609# check prerequisites-3 success:    1
19610# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19611INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19612SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19613CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19614WHERE f_int1 IN (2,3);
19615DELETE FROM t1 WHERE f_charbig = 'delete me';
19616INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19617SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19618CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19619WHERE f_int1 IN (2,3);
19620DELETE FROM t1 WHERE f_charbig = 'delete me';
19621# check read via f_int1 success: 1
19622# check read via f_int2 success: 1
19623
19624# check multiple-1 success: 	1
19625DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19626
19627# check multiple-2 success: 	1
19628INSERT INTO t1 SELECT * FROM t0_template
19629WHERE MOD(f_int1,3) = 0;
19630
19631# check multiple-3 success: 	1
19632UPDATE t1 SET f_int1 = f_int1 + @max_row
19633WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19634AND @max_row_div2 + @max_row_div4;
19635
19636# check multiple-4 success: 	1
19637DELETE FROM t1
19638WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19639AND @max_row_div2 + @max_row_div4 + @max_row;
19640
19641# check multiple-5 success: 	1
19642SELECT COUNT(*) INTO @try_count FROM t0_template
19643WHERE MOD(f_int1,3) = 0
19644AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19645SELECT COUNT(*) INTO @clash_count
19646FROM t1 INNER JOIN t0_template USING(f_int1)
19647WHERE MOD(f_int1,3) = 0
19648AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19649SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19650INSERT INTO t1
19651SET f_int1 = @cur_value , f_int2 = @cur_value,
19652f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19653f_charbig = '#SINGLE#';
19654
19655# check single-1 success: 	1
19656SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19657INSERT INTO t1
19658SET f_int1 = @cur_value , f_int2 = @cur_value,
19659f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19660f_charbig = '#SINGLE#';
19661
19662# check single-2 success: 	1
19663SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19664SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19665UPDATE t1 SET f_int1 = @cur_value2
19666WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19667
19668# check single-3 success: 	1
19669SET @cur_value1= -1;
19670SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19671UPDATE t1 SET f_int1 = @cur_value1
19672WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19673
19674# check single-4 success: 	1
19675SELECT MAX(f_int1) INTO @cur_value FROM t1;
19676DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19677
19678# check single-5 success: 	1
19679DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19680
19681# check single-6 success: 	1
19682INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19683
19684# check single-7 success: 	1
19685DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19686DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19687INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19688f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19689f_charbig = '#NULL#';
19690INSERT INTO t1
19691SET f_int1 = NULL , f_int2 = -@max_row,
19692f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19693f_charbig = '#NULL#';
19694# check null success:    1
19695
19696# check null-1 success: 	1
19697UPDATE t1 SET f_int1 = -@max_row
19698WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19699AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19700
19701# check null-2 success: 	1
19702UPDATE t1 SET f_int1 = NULL
19703WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19704AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19705
19706# check null-3 success: 	1
19707DELETE FROM t1
19708WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19709AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19710
19711# check null-4 success: 	1
19712DELETE FROM t1
19713WHERE f_int1 = 0 AND f_int2 = 0
19714AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19715AND f_charbig = '#NULL#';
19716INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19717SELECT f_int1, f_int1, '', '', 'was inserted'
19718   FROM t0_template source_tab
19719WHERE MOD(f_int1,3) = 0
19720AND f_int1 BETWEEN @max_row_div2 AND @max_row
19721ON DUPLICATE KEY
19722UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19723f_int2 = 2 * @max_row + source_tab.f_int1,
19724f_charbig = 'was updated';
19725
19726# check unique-1-a success: 	1
19727
19728# check unique-1-b success: 	1
19729DELETE FROM t1 WHERE f_charbig = 'was inserted';
19730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19731f_int2 = CAST(f_char1 AS SIGNED INT),
19732f_charbig = CONCAT('===',f_char1,'===')
19733WHERE f_charbig = 'was updated';
19734REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19735SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19736   FROM t0_template source_tab
19737WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19738
19739# check replace success: 	1
19740DELETE FROM t1
19741WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19742DELETE FROM t1
19743WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19744f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19745UPDATE t1 SET f_int2 = f_int1,
19746f_char1 = CAST(f_int1 AS CHAR),
19747f_char2 = CAST(f_int1 AS CHAR),
19748f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19749WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19750SET AUTOCOMMIT= 0;
19751INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19752SELECT f_int1, f_int1, '', '', 'was inserted'
19753FROM t0_template source_tab
19754WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19755
19756# check transactions-1 success: 	1
19757COMMIT WORK;
19758
19759# check transactions-2 success: 	1
19760ROLLBACK WORK;
19761
19762# check transactions-3 success: 	1
19763DELETE FROM t1 WHERE f_charbig = 'was inserted';
19764COMMIT WORK;
19765ROLLBACK WORK;
19766
19767# check transactions-4 success: 	1
19768INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19769SELECT f_int1, f_int1, '', '', 'was inserted'
19770FROM t0_template source_tab
19771WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19772
19773# check transactions-5 success: 	1
19774ROLLBACK WORK;
19775
19776# check transactions-6 success: 	1
19777# INFO: Storage engine used for t1 seems to be transactional.
19778COMMIT;
19779
19780# check transactions-7 success: 	1
19781DELETE FROM t1 WHERE f_charbig = 'was inserted';
19782COMMIT WORK;
19783SET @@session.sql_mode = 'traditional';
19784Warnings:
19785Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19786SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19787INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19788SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19789'', '', 'was inserted' FROM t0_template
19790WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19791ERROR 22012: Division by 0
19792COMMIT;
19793
19794# check transactions-8 success: 	1
19795# INFO: Storage engine used for t1 seems to be able to revert
19796#       changes made by the failing statement.
19797SET @@session.sql_mode = '';
19798Warnings:
19799Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19800SET AUTOCOMMIT= 1;
19801DELETE FROM t1 WHERE f_charbig = 'was inserted';
19802COMMIT WORK;
19803UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19804
19805# check special-1 success: 	1
19806UPDATE t1 SET f_charbig = '';
19807
19808# check special-2 success: 	1
19809UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19810INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19811SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19813INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19814SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19815'just inserted' FROM t0_template
19816WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19817CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19818BEGIN
19819UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19820f_charbig = 'updated by trigger'
19821      WHERE f_int1 = new.f_int1;
19822END|
19823INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19824SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19825WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19826
19827# check trigger-1 success: 	1
19828DROP TRIGGER trg_1;
19829UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19830f_int2 = CAST(f_char1 AS SIGNED INT),
19831f_charbig = 'just inserted'
19832   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19833DELETE FROM t0_aux
19834WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19835INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19836SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19837'just inserted' FROM t0_template
19838WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19839CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19840BEGIN
19841UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19842f_charbig = 'updated by trigger'
19843      WHERE f_int1 = new.f_int1;
19844END|
19845INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19846SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19847WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19848
19849# check trigger-2 success: 	1
19850DROP TRIGGER trg_1;
19851UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19852f_int2 = CAST(f_char1 AS SIGNED INT),
19853f_charbig = 'just inserted'
19854   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19855DELETE FROM t0_aux
19856WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19857INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19858SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19859'just inserted' FROM t0_template
19860WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19861CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19862BEGIN
19863UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19864f_charbig = 'updated by trigger'
19865      WHERE f_int1 = new.f_int1;
19866END|
19867UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19868WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19869
19870# check trigger-3 success: 	1
19871DROP TRIGGER trg_1;
19872UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19873f_int2 = CAST(f_char1 AS SIGNED INT),
19874f_charbig = 'just inserted'
19875   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19876DELETE FROM t0_aux
19877WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19878INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19879SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19880'just inserted' FROM t0_template
19881WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19882CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19883BEGIN
19884UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19885f_charbig = 'updated by trigger'
19886      WHERE f_int1 = - old.f_int1;
19887END|
19888UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19889WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19890
19891# check trigger-4 success: 	1
19892DROP TRIGGER trg_1;
19893UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19894f_int2 = CAST(f_char1 AS SIGNED INT),
19895f_charbig = 'just inserted'
19896   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19897DELETE FROM t0_aux
19898WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19899INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19900SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19901'just inserted' FROM t0_template
19902WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19903CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19904BEGIN
19905UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19906f_charbig = 'updated by trigger'
19907      WHERE f_int1 = new.f_int1;
19908END|
19909UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19910WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19911
19912# check trigger-5 success: 	1
19913DROP TRIGGER trg_1;
19914UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19915f_int2 = CAST(f_char1 AS SIGNED INT),
19916f_charbig = 'just inserted'
19917   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19918DELETE FROM t0_aux
19919WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19920INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19921SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19922'just inserted' FROM t0_template
19923WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19924CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19925BEGIN
19926UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19927f_charbig = 'updated by trigger'
19928      WHERE f_int1 = - old.f_int1;
19929END|
19930UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19931WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19932
19933# check trigger-6 success: 	1
19934DROP TRIGGER trg_1;
19935UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19936f_int2 = CAST(f_char1 AS SIGNED INT),
19937f_charbig = 'just inserted'
19938   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19939DELETE FROM t0_aux
19940WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19941INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19942SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19943'just inserted' FROM t0_template
19944WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19945CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19946BEGIN
19947UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19948f_charbig = 'updated by trigger'
19949      WHERE f_int1 = - old.f_int1;
19950END|
19951DELETE FROM t0_aux
19952WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19953
19954# check trigger-7 success: 	1
19955DROP TRIGGER trg_1;
19956UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19957f_int2 = CAST(f_char1 AS SIGNED INT),
19958f_charbig = 'just inserted'
19959   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19960DELETE FROM t0_aux
19961WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19962INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19963SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19964'just inserted' FROM t0_template
19965WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19966CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19967BEGIN
19968UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19969f_charbig = 'updated by trigger'
19970      WHERE f_int1 = - old.f_int1;
19971END|
19972DELETE FROM t0_aux
19973WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19974
19975# check trigger-8 success: 	1
19976DROP TRIGGER trg_1;
19977UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19978f_int2 = CAST(f_char1 AS SIGNED INT),
19979f_charbig = 'just inserted'
19980   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19981DELETE FROM t0_aux
19982WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19983DELETE FROM t1
19984WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19985CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19986BEGIN
19987SET new.f_int1 = old.f_int1 + @max_row,
19988new.f_int2 = old.f_int2 - @max_row,
19989new.f_charbig = '####updated per update trigger####';
19990END|
19991UPDATE t1
19992SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19993f_charbig = '####updated per update statement itself####';
19994
19995# check trigger-9 success: 	1
19996DROP TRIGGER trg_2;
19997UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19998f_int2 = CAST(f_char1 AS SIGNED INT),
19999f_charbig = CONCAT('===',f_char1,'===');
20000CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20001BEGIN
20002SET new.f_int1 = new.f_int1 + @max_row,
20003new.f_int2 = new.f_int2 - @max_row,
20004new.f_charbig = '####updated per update trigger####';
20005END|
20006UPDATE t1
20007SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20008f_charbig = '####updated per update statement itself####';
20009
20010# check trigger-10 success: 	1
20011DROP TRIGGER trg_2;
20012UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20013f_int2 = CAST(f_char1 AS SIGNED INT),
20014f_charbig = CONCAT('===',f_char1,'===');
20015CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20016BEGIN
20017SET new.f_int1 = @my_max1 + @counter,
20018new.f_int2 = @my_min2 - @counter,
20019new.f_charbig = '####updated per insert trigger####';
20020SET @counter = @counter + 1;
20021END|
20022SET @counter = 1;
20023SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20024INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20025SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20026CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20027WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20028ORDER BY f_int1;
20029DROP TRIGGER trg_3;
20030
20031# check trigger-11 success: 	1
20032DELETE FROM t1
20033WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20034AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20035AND f_charbig = '####updated per insert trigger####';
20036CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20037BEGIN
20038SET new.f_int1 = @my_max1 + @counter,
20039new.f_int2 = @my_min2 - @counter,
20040new.f_charbig = '####updated per insert trigger####';
20041SET @counter = @counter + 1;
20042END|
20043SET @counter = 1;
20044SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20045INSERT INTO t1 (f_char1, f_char2, f_charbig)
20046SELECT CAST(f_int1 AS CHAR),
20047CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20048WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20049ORDER BY f_int1;
20050DROP TRIGGER trg_3;
20051
20052# check trigger-12 success: 	1
20053DELETE FROM t1
20054WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20055AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20056AND f_charbig = '####updated per insert trigger####';
20057ANALYZE  TABLE t1;
20058Table	Op	Msg_type	Msg_text
20059test.t1	analyze	status	OK
20060CHECK    TABLE t1 EXTENDED;
20061Table	Op	Msg_type	Msg_text
20062test.t1	check	status	OK
20063CHECKSUM TABLE t1 EXTENDED;
20064Table	Checksum
20065test.t1	<some_value>
20066OPTIMIZE TABLE t1;
20067Table	Op	Msg_type	Msg_text
20068test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
20069test.t1	optimize	status	OK
20070# check layout success:    1
20071REPAIR   TABLE t1 EXTENDED;
20072Table	Op	Msg_type	Msg_text
20073test.t1	repair	status	OK
20074# check layout success:    1
20075TRUNCATE t1;
20076
20077# check TRUNCATE success: 	1
20078# check layout success:    1
20079# End usability test (inc/partition_check.inc)
20080DROP TABLE t1;
20081#------------------------------------------------------------------------
20082#  3   Tables with PRIMARY KEY and/or UNIQUE INDEXes
20083#        The partitioning function contains two columns.
20084#------------------------------------------------------------------------
20085#  3.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
20086DROP TABLE IF EXISTS t1;
20087CREATE TABLE t1 (
20088f_int1 INTEGER,
20089f_int2 INTEGER,
20090f_char1 CHAR(20),
20091f_char2 CHAR(20),
20092f_charbig VARCHAR(1000)
20093, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
20094)
20095PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
20096INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20097SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
20098# Start usability test (inc/partition_check.inc)
20099create_command
20100SHOW CREATE TABLE t1;
20101Table	Create Table
20102t1	CREATE TABLE `t1` (
20103  `f_int1` int(11) NOT NULL,
20104  `f_int2` int(11) NOT NULL,
20105  `f_char1` char(20) DEFAULT NULL,
20106  `f_char2` char(20) DEFAULT NULL,
20107  `f_charbig` varchar(1000) DEFAULT NULL,
20108  PRIMARY KEY (`f_int2`,`f_int1`),
20109  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
20110) ENGINE=InnoDB DEFAULT CHARSET=latin1
20111/*!50100 PARTITION BY HASH (f_int1 + f_int2)
20112PARTITIONS 2 */
20113
20114unified filelist
20115t1#P#p0.ibd
20116t1#P#p1.ibd
20117t1.frm
20118
20119# check prerequisites-1 success:    1
20120# check COUNT(*) success:    1
20121# check MIN/MAX(f_int1) success:    1
20122# check MIN/MAX(f_int2) success:    1
20123INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20124SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20125CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20126WHERE f_int1 IN (2,3);
20127ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
20128# check prerequisites-3 success:    1
20129# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
20130INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20131SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20132CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20133WHERE f_int1 IN (2,3);
20134DELETE FROM t1 WHERE f_charbig = 'delete me';
20135INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20136SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20137CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20138WHERE f_int1 IN (2,3);
20139DELETE FROM t1 WHERE f_charbig = 'delete me';
20140# check read via f_int1 success: 1
20141# check read via f_int2 success: 1
20142
20143# check multiple-1 success: 	1
20144DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20145
20146# check multiple-2 success: 	1
20147INSERT INTO t1 SELECT * FROM t0_template
20148WHERE MOD(f_int1,3) = 0;
20149
20150# check multiple-3 success: 	1
20151UPDATE t1 SET f_int1 = f_int1 + @max_row
20152WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20153AND @max_row_div2 + @max_row_div4;
20154
20155# check multiple-4 success: 	1
20156DELETE FROM t1
20157WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20158AND @max_row_div2 + @max_row_div4 + @max_row;
20159
20160# check multiple-5 success: 	1
20161SELECT COUNT(*) INTO @try_count FROM t0_template
20162WHERE MOD(f_int1,3) = 0
20163AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20164SELECT COUNT(*) INTO @clash_count
20165FROM t1 INNER JOIN t0_template USING(f_int1)
20166WHERE MOD(f_int1,3) = 0
20167AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20168SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20169INSERT INTO t1
20170SET f_int1 = @cur_value , f_int2 = @cur_value,
20171f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20172f_charbig = '#SINGLE#';
20173
20174# check single-1 success: 	1
20175SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20176INSERT INTO t1
20177SET f_int1 = @cur_value , f_int2 = @cur_value,
20178f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20179f_charbig = '#SINGLE#';
20180
20181# check single-2 success: 	1
20182SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20183SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20184UPDATE t1 SET f_int1 = @cur_value2
20185WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20186
20187# check single-3 success: 	1
20188SET @cur_value1= -1;
20189SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20190UPDATE t1 SET f_int1 = @cur_value1
20191WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20192
20193# check single-4 success: 	1
20194SELECT MAX(f_int1) INTO @cur_value FROM t1;
20195DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20196
20197# check single-5 success: 	1
20198DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20199
20200# check single-6 success: 	1
20201INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20202
20203# check single-7 success: 	1
20204DELETE FROM t1 WHERE f_charbig = '#2147483647##';
20205DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20206INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20207f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20208f_charbig = '#NULL#';
20209INSERT INTO t1
20210SET f_int1 = NULL , f_int2 = -@max_row,
20211f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20212f_charbig = '#NULL#';
20213ERROR 23000: Column 'f_int1' cannot be null
20214# check null success:    1
20215DELETE FROM t1
20216WHERE f_int1 = 0 AND f_int2 = 0
20217AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20218AND f_charbig = '#NULL#';
20219INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20220SELECT f_int1, f_int1, '', '', 'was inserted'
20221   FROM t0_template source_tab
20222WHERE MOD(f_int1,3) = 0
20223AND f_int1 BETWEEN @max_row_div2 AND @max_row
20224ON DUPLICATE KEY
20225UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
20226f_int2 = 2 * @max_row + source_tab.f_int1,
20227f_charbig = 'was updated';
20228
20229# check unique-1-a success: 	1
20230
20231# check unique-1-b success: 	1
20232DELETE FROM t1 WHERE f_charbig = 'was inserted';
20233UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20234f_int2 = CAST(f_char1 AS SIGNED INT),
20235f_charbig = CONCAT('===',f_char1,'===')
20236WHERE f_charbig = 'was updated';
20237REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20238SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
20239   FROM t0_template source_tab
20240WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20241
20242# check replace success: 	1
20243DELETE FROM t1
20244WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
20245DELETE FROM t1
20246WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
20247f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
20248UPDATE t1 SET f_int2 = f_int1,
20249f_char1 = CAST(f_int1 AS CHAR),
20250f_char2 = CAST(f_int1 AS CHAR),
20251f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
20252WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
20253SET AUTOCOMMIT= 0;
20254INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20255SELECT f_int1, f_int1, '', '', 'was inserted'
20256FROM t0_template source_tab
20257WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20258
20259# check transactions-1 success: 	1
20260COMMIT WORK;
20261
20262# check transactions-2 success: 	1
20263ROLLBACK WORK;
20264
20265# check transactions-3 success: 	1
20266DELETE FROM t1 WHERE f_charbig = 'was inserted';
20267COMMIT WORK;
20268ROLLBACK WORK;
20269
20270# check transactions-4 success: 	1
20271INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20272SELECT f_int1, f_int1, '', '', 'was inserted'
20273FROM t0_template source_tab
20274WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20275
20276# check transactions-5 success: 	1
20277ROLLBACK WORK;
20278
20279# check transactions-6 success: 	1
20280# INFO: Storage engine used for t1 seems to be transactional.
20281COMMIT;
20282
20283# check transactions-7 success: 	1
20284DELETE FROM t1 WHERE f_charbig = 'was inserted';
20285COMMIT WORK;
20286SET @@session.sql_mode = 'traditional';
20287Warnings:
20288Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
20289SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20290INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20291SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20292'', '', 'was inserted' FROM t0_template
20293WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20294ERROR 22012: Division by 0
20295COMMIT;
20296
20297# check transactions-8 success: 	1
20298# INFO: Storage engine used for t1 seems to be able to revert
20299#       changes made by the failing statement.
20300SET @@session.sql_mode = '';
20301Warnings:
20302Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
20303SET AUTOCOMMIT= 1;
20304DELETE FROM t1 WHERE f_charbig = 'was inserted';
20305COMMIT WORK;
20306UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20307
20308# check special-1 success: 	1
20309UPDATE t1 SET f_charbig = '';
20310
20311# check special-2 success: 	1
20312UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20313INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20314SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20316INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20317SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20318'just inserted' FROM t0_template
20319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20320CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20321BEGIN
20322UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20323f_charbig = 'updated by trigger'
20324      WHERE f_int1 = new.f_int1;
20325END|
20326INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20327SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20328WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20329
20330# check trigger-1 success: 	1
20331DROP TRIGGER trg_1;
20332UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20333f_int2 = CAST(f_char1 AS SIGNED INT),
20334f_charbig = 'just inserted'
20335   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20336DELETE FROM t0_aux
20337WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20338INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20339SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20340'just inserted' FROM t0_template
20341WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20342CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20343BEGIN
20344UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20345f_charbig = 'updated by trigger'
20346      WHERE f_int1 = new.f_int1;
20347END|
20348INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20349SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20351
20352# check trigger-2 success: 	1
20353DROP TRIGGER trg_1;
20354UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20355f_int2 = CAST(f_char1 AS SIGNED INT),
20356f_charbig = 'just inserted'
20357   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20358DELETE FROM t0_aux
20359WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20360INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20361SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20362'just inserted' FROM t0_template
20363WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20364CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20365BEGIN
20366UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20367f_charbig = 'updated by trigger'
20368      WHERE f_int1 = new.f_int1;
20369END|
20370UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20371WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20372
20373# check trigger-3 success: 	1
20374DROP TRIGGER trg_1;
20375UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20376f_int2 = CAST(f_char1 AS SIGNED INT),
20377f_charbig = 'just inserted'
20378   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20379DELETE FROM t0_aux
20380WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20381INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20382SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20383'just inserted' FROM t0_template
20384WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20385CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20386BEGIN
20387UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20388f_charbig = 'updated by trigger'
20389      WHERE f_int1 = - old.f_int1;
20390END|
20391UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20392WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20393
20394# check trigger-4 success: 	1
20395DROP TRIGGER trg_1;
20396UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20397f_int2 = CAST(f_char1 AS SIGNED INT),
20398f_charbig = 'just inserted'
20399   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20400DELETE FROM t0_aux
20401WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20402INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20403SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20404'just inserted' FROM t0_template
20405WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20406CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20407BEGIN
20408UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20409f_charbig = 'updated by trigger'
20410      WHERE f_int1 = new.f_int1;
20411END|
20412UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20413WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20414
20415# check trigger-5 success: 	1
20416DROP TRIGGER trg_1;
20417UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20418f_int2 = CAST(f_char1 AS SIGNED INT),
20419f_charbig = 'just inserted'
20420   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20421DELETE FROM t0_aux
20422WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20423INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20424SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20425'just inserted' FROM t0_template
20426WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20427CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20428BEGIN
20429UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20430f_charbig = 'updated by trigger'
20431      WHERE f_int1 = - old.f_int1;
20432END|
20433UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20434WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20435
20436# check trigger-6 success: 	1
20437DROP TRIGGER trg_1;
20438UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20439f_int2 = CAST(f_char1 AS SIGNED INT),
20440f_charbig = 'just inserted'
20441   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20442DELETE FROM t0_aux
20443WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20444INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20445SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20446'just inserted' FROM t0_template
20447WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20448CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20449BEGIN
20450UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20451f_charbig = 'updated by trigger'
20452      WHERE f_int1 = - old.f_int1;
20453END|
20454DELETE FROM t0_aux
20455WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20456
20457# check trigger-7 success: 	1
20458DROP TRIGGER trg_1;
20459UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20460f_int2 = CAST(f_char1 AS SIGNED INT),
20461f_charbig = 'just inserted'
20462   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20463DELETE FROM t0_aux
20464WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20465INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20466SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20467'just inserted' FROM t0_template
20468WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20469CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20470BEGIN
20471UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20472f_charbig = 'updated by trigger'
20473      WHERE f_int1 = - old.f_int1;
20474END|
20475DELETE FROM t0_aux
20476WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20477
20478# check trigger-8 success: 	1
20479DROP TRIGGER trg_1;
20480UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20481f_int2 = CAST(f_char1 AS SIGNED INT),
20482f_charbig = 'just inserted'
20483   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20484DELETE FROM t0_aux
20485WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20486DELETE FROM t1
20487WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20488CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20489BEGIN
20490SET new.f_int1 = old.f_int1 + @max_row,
20491new.f_int2 = old.f_int2 - @max_row,
20492new.f_charbig = '####updated per update trigger####';
20493END|
20494UPDATE t1
20495SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20496f_charbig = '####updated per update statement itself####';
20497
20498# check trigger-9 success: 	1
20499DROP TRIGGER trg_2;
20500UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20501f_int2 = CAST(f_char1 AS SIGNED INT),
20502f_charbig = CONCAT('===',f_char1,'===');
20503CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20504BEGIN
20505SET new.f_int1 = new.f_int1 + @max_row,
20506new.f_int2 = new.f_int2 - @max_row,
20507new.f_charbig = '####updated per update trigger####';
20508END|
20509UPDATE t1
20510SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20511f_charbig = '####updated per update statement itself####';
20512
20513# check trigger-10 success: 	1
20514DROP TRIGGER trg_2;
20515UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20516f_int2 = CAST(f_char1 AS SIGNED INT),
20517f_charbig = CONCAT('===',f_char1,'===');
20518CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20519BEGIN
20520SET new.f_int1 = @my_max1 + @counter,
20521new.f_int2 = @my_min2 - @counter,
20522new.f_charbig = '####updated per insert trigger####';
20523SET @counter = @counter + 1;
20524END|
20525SET @counter = 1;
20526SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20528SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20529CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20530WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20531ORDER BY f_int1;
20532DROP TRIGGER trg_3;
20533
20534# check trigger-11 success: 	1
20535DELETE FROM t1
20536WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20537AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20538AND f_charbig = '####updated per insert trigger####';
20539CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20540BEGIN
20541SET new.f_int1 = @my_max1 + @counter,
20542new.f_int2 = @my_min2 - @counter,
20543new.f_charbig = '####updated per insert trigger####';
20544SET @counter = @counter + 1;
20545END|
20546SET @counter = 1;
20547SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20548INSERT INTO t1 (f_char1, f_char2, f_charbig)
20549SELECT CAST(f_int1 AS CHAR),
20550CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20551WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20552ORDER BY f_int1;
20553DROP TRIGGER trg_3;
20554
20555# check trigger-12 success: 	1
20556DELETE FROM t1
20557WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20558AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20559AND f_charbig = '####updated per insert trigger####';
20560ANALYZE  TABLE t1;
20561Table	Op	Msg_type	Msg_text
20562test.t1	analyze	status	OK
20563CHECK    TABLE t1 EXTENDED;
20564Table	Op	Msg_type	Msg_text
20565test.t1	check	status	OK
20566CHECKSUM TABLE t1 EXTENDED;
20567Table	Checksum
20568test.t1	<some_value>
20569OPTIMIZE TABLE t1;
20570Table	Op	Msg_type	Msg_text
20571test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
20572test.t1	optimize	status	OK
20573# check layout success:    1
20574REPAIR   TABLE t1 EXTENDED;
20575Table	Op	Msg_type	Msg_text
20576test.t1	repair	status	OK
20577# check layout success:    1
20578TRUNCATE t1;
20579
20580# check TRUNCATE success: 	1
20581# check layout success:    1
20582# End usability test (inc/partition_check.inc)
20583DROP TABLE t1;
20584CREATE TABLE t1 (
20585f_int1 INTEGER,
20586f_int2 INTEGER,
20587f_char1 CHAR(20),
20588f_char2 CHAR(20),
20589f_charbig VARCHAR(1000)
20590, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
20591)
20592PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
20593INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20594SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
20595# Start usability test (inc/partition_check.inc)
20596create_command
20597SHOW CREATE TABLE t1;
20598Table	Create Table
20599t1	CREATE TABLE `t1` (
20600  `f_int1` int(11) NOT NULL,
20601  `f_int2` int(11) NOT NULL,
20602  `f_char1` char(20) DEFAULT NULL,
20603  `f_char2` char(20) DEFAULT NULL,
20604  `f_charbig` varchar(1000) DEFAULT NULL,
20605  PRIMARY KEY (`f_int2`,`f_int1`),
20606  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
20607) ENGINE=InnoDB DEFAULT CHARSET=latin1
20608/*!50100 PARTITION BY KEY (f_int1,f_int2)
20609PARTITIONS 5 */
20610
20611unified filelist
20612t1#P#p0.ibd
20613t1#P#p1.ibd
20614t1#P#p2.ibd
20615t1#P#p3.ibd
20616t1#P#p4.ibd
20617t1.frm
20618
20619# check prerequisites-1 success:    1
20620# check COUNT(*) success:    1
20621# check MIN/MAX(f_int1) success:    1
20622# check MIN/MAX(f_int2) success:    1
20623INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20624SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20625CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
20626WHERE f_int1 IN (2,3);
20627ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
20628# check prerequisites-3 success:    1
20629# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
20630INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20631SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20632CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20633WHERE f_int1 IN (2,3);
20634DELETE FROM t1 WHERE f_charbig = 'delete me';
20635INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20636SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
20637CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
20638WHERE f_int1 IN (2,3);
20639DELETE FROM t1 WHERE f_charbig = 'delete me';
20640# check read via f_int1 success: 1
20641# check read via f_int2 success: 1
20642
20643# check multiple-1 success: 	1
20644DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
20645
20646# check multiple-2 success: 	1
20647INSERT INTO t1 SELECT * FROM t0_template
20648WHERE MOD(f_int1,3) = 0;
20649
20650# check multiple-3 success: 	1
20651UPDATE t1 SET f_int1 = f_int1 + @max_row
20652WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
20653AND @max_row_div2 + @max_row_div4;
20654
20655# check multiple-4 success: 	1
20656DELETE FROM t1
20657WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
20658AND @max_row_div2 + @max_row_div4 + @max_row;
20659
20660# check multiple-5 success: 	1
20661SELECT COUNT(*) INTO @try_count FROM t0_template
20662WHERE MOD(f_int1,3) = 0
20663AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20664SELECT COUNT(*) INTO @clash_count
20665FROM t1 INNER JOIN t0_template USING(f_int1)
20666WHERE MOD(f_int1,3) = 0
20667AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20668SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
20669INSERT INTO t1
20670SET f_int1 = @cur_value , f_int2 = @cur_value,
20671f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20672f_charbig = '#SINGLE#';
20673
20674# check single-1 success: 	1
20675SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
20676INSERT INTO t1
20677SET f_int1 = @cur_value , f_int2 = @cur_value,
20678f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
20679f_charbig = '#SINGLE#';
20680
20681# check single-2 success: 	1
20682SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
20683SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
20684UPDATE t1 SET f_int1 = @cur_value2
20685WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
20686
20687# check single-3 success: 	1
20688SET @cur_value1= -1;
20689SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
20690UPDATE t1 SET f_int1 = @cur_value1
20691WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
20692
20693# check single-4 success: 	1
20694SELECT MAX(f_int1) INTO @cur_value FROM t1;
20695DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
20696
20697# check single-5 success: 	1
20698DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
20699
20700# check single-6 success: 	1
20701INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
20702
20703# check single-7 success: 	1
20704DELETE FROM t1 WHERE f_charbig = '#2147483647##';
20705DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
20706INSERT t1 SET f_int1 = 0 , f_int2 = 0,
20707f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
20708f_charbig = '#NULL#';
20709INSERT INTO t1
20710SET f_int1 = NULL , f_int2 = -@max_row,
20711f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
20712f_charbig = '#NULL#';
20713ERROR 23000: Column 'f_int1' cannot be null
20714# check null success:    1
20715DELETE FROM t1
20716WHERE f_int1 = 0 AND f_int2 = 0
20717AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
20718AND f_charbig = '#NULL#';
20719INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20720SELECT f_int1, f_int1, '', '', 'was inserted'
20721   FROM t0_template source_tab
20722WHERE MOD(f_int1,3) = 0
20723AND f_int1 BETWEEN @max_row_div2 AND @max_row
20724ON DUPLICATE KEY
20725UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
20726f_int2 = 2 * @max_row + source_tab.f_int1,
20727f_charbig = 'was updated';
20728
20729# check unique-1-a success: 	1
20730
20731# check unique-1-b success: 	1
20732DELETE FROM t1 WHERE f_charbig = 'was inserted';
20733UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20734f_int2 = CAST(f_char1 AS SIGNED INT),
20735f_charbig = CONCAT('===',f_char1,'===')
20736WHERE f_charbig = 'was updated';
20737REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20738SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
20739   FROM t0_template source_tab
20740WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
20741
20742# check replace success: 	1
20743DELETE FROM t1
20744WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
20745DELETE FROM t1
20746WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
20747f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
20748UPDATE t1 SET f_int2 = f_int1,
20749f_char1 = CAST(f_int1 AS CHAR),
20750f_char2 = CAST(f_int1 AS CHAR),
20751f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
20752WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
20753SET AUTOCOMMIT= 0;
20754INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20755SELECT f_int1, f_int1, '', '', 'was inserted'
20756FROM t0_template source_tab
20757WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20758
20759# check transactions-1 success: 	1
20760COMMIT WORK;
20761
20762# check transactions-2 success: 	1
20763ROLLBACK WORK;
20764
20765# check transactions-3 success: 	1
20766DELETE FROM t1 WHERE f_charbig = 'was inserted';
20767COMMIT WORK;
20768ROLLBACK WORK;
20769
20770# check transactions-4 success: 	1
20771INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20772SELECT f_int1, f_int1, '', '', 'was inserted'
20773FROM t0_template source_tab
20774WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20775
20776# check transactions-5 success: 	1
20777ROLLBACK WORK;
20778
20779# check transactions-6 success: 	1
20780# INFO: Storage engine used for t1 seems to be transactional.
20781COMMIT;
20782
20783# check transactions-7 success: 	1
20784DELETE FROM t1 WHERE f_charbig = 'was inserted';
20785COMMIT WORK;
20786SET @@session.sql_mode = 'traditional';
20787Warnings:
20788Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
20789SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
20790INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20791SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
20792'', '', 'was inserted' FROM t0_template
20793WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
20794ERROR 22012: Division by 0
20795COMMIT;
20796
20797# check transactions-8 success: 	1
20798# INFO: Storage engine used for t1 seems to be able to revert
20799#       changes made by the failing statement.
20800SET @@session.sql_mode = '';
20801Warnings:
20802Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
20803SET AUTOCOMMIT= 1;
20804DELETE FROM t1 WHERE f_charbig = 'was inserted';
20805COMMIT WORK;
20806UPDATE t1 SET f_charbig = REPEAT('b', 1000);
20807
20808# check special-1 success: 	1
20809UPDATE t1 SET f_charbig = '';
20810
20811# check special-2 success: 	1
20812UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
20813INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
20814SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
20815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20816INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20817SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20818'just inserted' FROM t0_template
20819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20820CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
20821BEGIN
20822UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20823f_charbig = 'updated by trigger'
20824      WHERE f_int1 = new.f_int1;
20825END|
20826INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20827SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20829
20830# check trigger-1 success: 	1
20831DROP TRIGGER trg_1;
20832UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20833f_int2 = CAST(f_char1 AS SIGNED INT),
20834f_charbig = 'just inserted'
20835   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20836DELETE FROM t0_aux
20837WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20838INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20839SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20840'just inserted' FROM t0_template
20841WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20842CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20843BEGIN
20844UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20845f_charbig = 'updated by trigger'
20846      WHERE f_int1 = new.f_int1;
20847END|
20848INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20849SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20850WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20851
20852# check trigger-2 success: 	1
20853DROP TRIGGER trg_1;
20854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20855f_int2 = CAST(f_char1 AS SIGNED INT),
20856f_charbig = 'just inserted'
20857   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20858DELETE FROM t0_aux
20859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20862'just inserted' FROM t0_template
20863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20864CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20865BEGIN
20866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20867f_charbig = 'updated by trigger'
20868      WHERE f_int1 = new.f_int1;
20869END|
20870UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20872
20873# check trigger-3 success: 	1
20874DROP TRIGGER trg_1;
20875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20876f_int2 = CAST(f_char1 AS SIGNED INT),
20877f_charbig = 'just inserted'
20878   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20879DELETE FROM t0_aux
20880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20881INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20882SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20883'just inserted' FROM t0_template
20884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20885CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20886BEGIN
20887UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20888f_charbig = 'updated by trigger'
20889      WHERE f_int1 = - old.f_int1;
20890END|
20891UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20892WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20893
20894# check trigger-4 success: 	1
20895DROP TRIGGER trg_1;
20896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20897f_int2 = CAST(f_char1 AS SIGNED INT),
20898f_charbig = 'just inserted'
20899   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20900DELETE FROM t0_aux
20901WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20902INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20903SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20904'just inserted' FROM t0_template
20905WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20906CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20907BEGIN
20908UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20909f_charbig = 'updated by trigger'
20910      WHERE f_int1 = new.f_int1;
20911END|
20912UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20913WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20914
20915# check trigger-5 success: 	1
20916DROP TRIGGER trg_1;
20917UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20918f_int2 = CAST(f_char1 AS SIGNED INT),
20919f_charbig = 'just inserted'
20920   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20921DELETE FROM t0_aux
20922WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20923INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20924SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20925'just inserted' FROM t0_template
20926WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20927CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20928BEGIN
20929UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20930f_charbig = 'updated by trigger'
20931      WHERE f_int1 = - old.f_int1;
20932END|
20933UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20934WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20935
20936# check trigger-6 success: 	1
20937DROP TRIGGER trg_1;
20938UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20939f_int2 = CAST(f_char1 AS SIGNED INT),
20940f_charbig = 'just inserted'
20941   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20942DELETE FROM t0_aux
20943WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20944INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20945SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20946'just inserted' FROM t0_template
20947WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20948CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20949BEGIN
20950UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20951f_charbig = 'updated by trigger'
20952      WHERE f_int1 = - old.f_int1;
20953END|
20954DELETE FROM t0_aux
20955WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20956
20957# check trigger-7 success: 	1
20958DROP TRIGGER trg_1;
20959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20960f_int2 = CAST(f_char1 AS SIGNED INT),
20961f_charbig = 'just inserted'
20962   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20963DELETE FROM t0_aux
20964WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20965INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20966SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20967'just inserted' FROM t0_template
20968WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20969CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20970BEGIN
20971UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20972f_charbig = 'updated by trigger'
20973      WHERE f_int1 = - old.f_int1;
20974END|
20975DELETE FROM t0_aux
20976WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20977
20978# check trigger-8 success: 	1
20979DROP TRIGGER trg_1;
20980UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20981f_int2 = CAST(f_char1 AS SIGNED INT),
20982f_charbig = 'just inserted'
20983   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20984DELETE FROM t0_aux
20985WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20986DELETE FROM t1
20987WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20988CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20989BEGIN
20990SET new.f_int1 = old.f_int1 + @max_row,
20991new.f_int2 = old.f_int2 - @max_row,
20992new.f_charbig = '####updated per update trigger####';
20993END|
20994UPDATE t1
20995SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20996f_charbig = '####updated per update statement itself####';
20997
20998# check trigger-9 success: 	1
20999DROP TRIGGER trg_2;
21000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21001f_int2 = CAST(f_char1 AS SIGNED INT),
21002f_charbig = CONCAT('===',f_char1,'===');
21003CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21004BEGIN
21005SET new.f_int1 = new.f_int1 + @max_row,
21006new.f_int2 = new.f_int2 - @max_row,
21007new.f_charbig = '####updated per update trigger####';
21008END|
21009UPDATE t1
21010SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21011f_charbig = '####updated per update statement itself####';
21012
21013# check trigger-10 success: 	1
21014DROP TRIGGER trg_2;
21015UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21016f_int2 = CAST(f_char1 AS SIGNED INT),
21017f_charbig = CONCAT('===',f_char1,'===');
21018CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21019BEGIN
21020SET new.f_int1 = @my_max1 + @counter,
21021new.f_int2 = @my_min2 - @counter,
21022new.f_charbig = '####updated per insert trigger####';
21023SET @counter = @counter + 1;
21024END|
21025SET @counter = 1;
21026SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21027INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21028SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21029CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21031ORDER BY f_int1;
21032DROP TRIGGER trg_3;
21033
21034# check trigger-11 success: 	1
21035DELETE FROM t1
21036WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21037AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21038AND f_charbig = '####updated per insert trigger####';
21039CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21040BEGIN
21041SET new.f_int1 = @my_max1 + @counter,
21042new.f_int2 = @my_min2 - @counter,
21043new.f_charbig = '####updated per insert trigger####';
21044SET @counter = @counter + 1;
21045END|
21046SET @counter = 1;
21047SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21048INSERT INTO t1 (f_char1, f_char2, f_charbig)
21049SELECT CAST(f_int1 AS CHAR),
21050CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21051WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21052ORDER BY f_int1;
21053DROP TRIGGER trg_3;
21054
21055# check trigger-12 success: 	1
21056DELETE FROM t1
21057WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21058AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21059AND f_charbig = '####updated per insert trigger####';
21060ANALYZE  TABLE t1;
21061Table	Op	Msg_type	Msg_text
21062test.t1	analyze	status	OK
21063CHECK    TABLE t1 EXTENDED;
21064Table	Op	Msg_type	Msg_text
21065test.t1	check	status	OK
21066CHECKSUM TABLE t1 EXTENDED;
21067Table	Checksum
21068test.t1	<some_value>
21069OPTIMIZE TABLE t1;
21070Table	Op	Msg_type	Msg_text
21071test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
21072test.t1	optimize	status	OK
21073# check layout success:    1
21074REPAIR   TABLE t1 EXTENDED;
21075Table	Op	Msg_type	Msg_text
21076test.t1	repair	status	OK
21077# check layout success:    1
21078TRUNCATE t1;
21079
21080# check TRUNCATE success: 	1
21081# check layout success:    1
21082# End usability test (inc/partition_check.inc)
21083DROP TABLE t1;
21084CREATE TABLE t1 (
21085f_int1 INTEGER,
21086f_int2 INTEGER,
21087f_char1 CHAR(20),
21088f_char2 CHAR(20),
21089f_charbig VARCHAR(1000)
21090, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
21091)
21092PARTITION BY LIST(MOD(f_int1 + f_int2,4))
21093(PARTITION part_3 VALUES IN (-3),
21094PARTITION part_2 VALUES IN (-2),
21095PARTITION part_1 VALUES IN (-1),
21096PARTITION part_N VALUES IN (NULL),
21097PARTITION part0 VALUES IN (0),
21098PARTITION part1 VALUES IN (1),
21099PARTITION part2 VALUES IN (2),
21100PARTITION part3 VALUES IN (3));
21101INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21102SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
21103# Start usability test (inc/partition_check.inc)
21104create_command
21105SHOW CREATE TABLE t1;
21106Table	Create Table
21107t1	CREATE TABLE `t1` (
21108  `f_int1` int(11) NOT NULL,
21109  `f_int2` int(11) NOT NULL,
21110  `f_char1` char(20) DEFAULT NULL,
21111  `f_char2` char(20) DEFAULT NULL,
21112  `f_charbig` varchar(1000) DEFAULT NULL,
21113  PRIMARY KEY (`f_int2`,`f_int1`),
21114  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
21115) ENGINE=InnoDB DEFAULT CHARSET=latin1
21116/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
21117(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
21118 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
21119 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
21120 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
21121 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
21122 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
21123 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
21124 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
21125
21126unified filelist
21127t1#P#part0.ibd
21128t1#P#part1.ibd
21129t1#P#part2.ibd
21130t1#P#part3.ibd
21131t1#P#part_1.ibd
21132t1#P#part_2.ibd
21133t1#P#part_3.ibd
21134t1#P#part_N.ibd
21135t1.frm
21136
21137# check prerequisites-1 success:    1
21138# check COUNT(*) success:    1
21139# check MIN/MAX(f_int1) success:    1
21140# check MIN/MAX(f_int2) success:    1
21141INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21142SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21143CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21144WHERE f_int1 IN (2,3);
21145ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
21146# check prerequisites-3 success:    1
21147# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
21148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21149SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21150CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21151WHERE f_int1 IN (2,3);
21152DELETE FROM t1 WHERE f_charbig = 'delete me';
21153INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21154SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21155CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21156WHERE f_int1 IN (2,3);
21157DELETE FROM t1 WHERE f_charbig = 'delete me';
21158# check read via f_int1 success: 1
21159# check read via f_int2 success: 1
21160
21161# check multiple-1 success: 	1
21162DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21163
21164# check multiple-2 success: 	1
21165INSERT INTO t1 SELECT * FROM t0_template
21166WHERE MOD(f_int1,3) = 0;
21167
21168# check multiple-3 success: 	1
21169UPDATE t1 SET f_int1 = f_int1 + @max_row
21170WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21171AND @max_row_div2 + @max_row_div4;
21172
21173# check multiple-4 success: 	1
21174DELETE FROM t1
21175WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21176AND @max_row_div2 + @max_row_div4 + @max_row;
21177
21178# check multiple-5 success: 	1
21179SELECT COUNT(*) INTO @try_count FROM t0_template
21180WHERE MOD(f_int1,3) = 0
21181AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21182SELECT COUNT(*) INTO @clash_count
21183FROM t1 INNER JOIN t0_template USING(f_int1)
21184WHERE MOD(f_int1,3) = 0
21185AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21186SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21187INSERT INTO t1
21188SET f_int1 = @cur_value , f_int2 = @cur_value,
21189f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21190f_charbig = '#SINGLE#';
21191
21192# check single-1 success: 	1
21193SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21194INSERT INTO t1
21195SET f_int1 = @cur_value , f_int2 = @cur_value,
21196f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21197f_charbig = '#SINGLE#';
21198
21199# check single-2 success: 	1
21200SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21201SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21202UPDATE t1 SET f_int1 = @cur_value2
21203WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21204
21205# check single-3 success: 	1
21206SET @cur_value1= -1;
21207SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21208UPDATE t1 SET f_int1 = @cur_value1
21209WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21210
21211# check single-4 success: 	1
21212SELECT MAX(f_int1) INTO @cur_value FROM t1;
21213DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21214
21215# check single-5 success: 	1
21216DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21217
21218# check single-6 success: 	1
21219INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21220
21221# check single-7 success: 	1
21222DELETE FROM t1 WHERE f_charbig = '#2147483647##';
21223DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21224INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21225f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21226f_charbig = '#NULL#';
21227INSERT INTO t1
21228SET f_int1 = NULL , f_int2 = -@max_row,
21229f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21230f_charbig = '#NULL#';
21231ERROR 23000: Column 'f_int1' cannot be null
21232# check null success:    1
21233DELETE FROM t1
21234WHERE f_int1 = 0 AND f_int2 = 0
21235AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21236AND f_charbig = '#NULL#';
21237INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21238SELECT f_int1, f_int1, '', '', 'was inserted'
21239   FROM t0_template source_tab
21240WHERE MOD(f_int1,3) = 0
21241AND f_int1 BETWEEN @max_row_div2 AND @max_row
21242ON DUPLICATE KEY
21243UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
21244f_int2 = 2 * @max_row + source_tab.f_int1,
21245f_charbig = 'was updated';
21246
21247# check unique-1-a success: 	1
21248
21249# check unique-1-b success: 	1
21250DELETE FROM t1 WHERE f_charbig = 'was inserted';
21251UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21252f_int2 = CAST(f_char1 AS SIGNED INT),
21253f_charbig = CONCAT('===',f_char1,'===')
21254WHERE f_charbig = 'was updated';
21255REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21256SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
21257   FROM t0_template source_tab
21258WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21259
21260# check replace success: 	1
21261DELETE FROM t1
21262WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
21263DELETE FROM t1
21264WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
21265f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
21266UPDATE t1 SET f_int2 = f_int1,
21267f_char1 = CAST(f_int1 AS CHAR),
21268f_char2 = CAST(f_int1 AS CHAR),
21269f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
21270WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
21271SET AUTOCOMMIT= 0;
21272INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21273SELECT f_int1, f_int1, '', '', 'was inserted'
21274FROM t0_template source_tab
21275WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21276
21277# check transactions-1 success: 	1
21278COMMIT WORK;
21279
21280# check transactions-2 success: 	1
21281ROLLBACK WORK;
21282
21283# check transactions-3 success: 	1
21284DELETE FROM t1 WHERE f_charbig = 'was inserted';
21285COMMIT WORK;
21286ROLLBACK WORK;
21287
21288# check transactions-4 success: 	1
21289INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21290SELECT f_int1, f_int1, '', '', 'was inserted'
21291FROM t0_template source_tab
21292WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21293
21294# check transactions-5 success: 	1
21295ROLLBACK WORK;
21296
21297# check transactions-6 success: 	1
21298# INFO: Storage engine used for t1 seems to be transactional.
21299COMMIT;
21300
21301# check transactions-7 success: 	1
21302DELETE FROM t1 WHERE f_charbig = 'was inserted';
21303COMMIT WORK;
21304SET @@session.sql_mode = 'traditional';
21305Warnings:
21306Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
21307SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21308INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21309SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21310'', '', 'was inserted' FROM t0_template
21311WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21312ERROR 22012: Division by 0
21313COMMIT;
21314
21315# check transactions-8 success: 	1
21316# INFO: Storage engine used for t1 seems to be able to revert
21317#       changes made by the failing statement.
21318SET @@session.sql_mode = '';
21319Warnings:
21320Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
21321SET AUTOCOMMIT= 1;
21322DELETE FROM t1 WHERE f_charbig = 'was inserted';
21323COMMIT WORK;
21324UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21325
21326# check special-1 success: 	1
21327UPDATE t1 SET f_charbig = '';
21328
21329# check special-2 success: 	1
21330UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21331INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21332SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21334INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21335SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21336'just inserted' FROM t0_template
21337WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21338CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21339BEGIN
21340UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21341f_charbig = 'updated by trigger'
21342      WHERE f_int1 = new.f_int1;
21343END|
21344INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21345SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21346WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21347
21348# check trigger-1 success: 	1
21349DROP TRIGGER trg_1;
21350UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21351f_int2 = CAST(f_char1 AS SIGNED INT),
21352f_charbig = 'just inserted'
21353   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21354DELETE FROM t0_aux
21355WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21356INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21357SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21358'just inserted' FROM t0_template
21359WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21360CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21361BEGIN
21362UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21363f_charbig = 'updated by trigger'
21364      WHERE f_int1 = new.f_int1;
21365END|
21366INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21367SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21368WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21369
21370# check trigger-2 success: 	1
21371DROP TRIGGER trg_1;
21372UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21373f_int2 = CAST(f_char1 AS SIGNED INT),
21374f_charbig = 'just inserted'
21375   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21376DELETE FROM t0_aux
21377WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21378INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21379SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21380'just inserted' FROM t0_template
21381WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21382CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21383BEGIN
21384UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21385f_charbig = 'updated by trigger'
21386      WHERE f_int1 = new.f_int1;
21387END|
21388UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21389WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21390
21391# check trigger-3 success: 	1
21392DROP TRIGGER trg_1;
21393UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21394f_int2 = CAST(f_char1 AS SIGNED INT),
21395f_charbig = 'just inserted'
21396   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21397DELETE FROM t0_aux
21398WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21399INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21400SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21401'just inserted' FROM t0_template
21402WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21403CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21404BEGIN
21405UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21406f_charbig = 'updated by trigger'
21407      WHERE f_int1 = - old.f_int1;
21408END|
21409UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21410WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21411
21412# check trigger-4 success: 	1
21413DROP TRIGGER trg_1;
21414UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21415f_int2 = CAST(f_char1 AS SIGNED INT),
21416f_charbig = 'just inserted'
21417   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21418DELETE FROM t0_aux
21419WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21422'just inserted' FROM t0_template
21423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21424CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21425BEGIN
21426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21427f_charbig = 'updated by trigger'
21428      WHERE f_int1 = new.f_int1;
21429END|
21430UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21431WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21432
21433# check trigger-5 success: 	1
21434DROP TRIGGER trg_1;
21435UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21436f_int2 = CAST(f_char1 AS SIGNED INT),
21437f_charbig = 'just inserted'
21438   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21439DELETE FROM t0_aux
21440WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21441INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21442SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21443'just inserted' FROM t0_template
21444WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21445CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21446BEGIN
21447UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21448f_charbig = 'updated by trigger'
21449      WHERE f_int1 = - old.f_int1;
21450END|
21451UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21452WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21453
21454# check trigger-6 success: 	1
21455DROP TRIGGER trg_1;
21456UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21457f_int2 = CAST(f_char1 AS SIGNED INT),
21458f_charbig = 'just inserted'
21459   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21460DELETE FROM t0_aux
21461WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21462INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21463SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21464'just inserted' FROM t0_template
21465WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21466CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21467BEGIN
21468UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21469f_charbig = 'updated by trigger'
21470      WHERE f_int1 = - old.f_int1;
21471END|
21472DELETE FROM t0_aux
21473WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21474
21475# check trigger-7 success: 	1
21476DROP TRIGGER trg_1;
21477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21478f_int2 = CAST(f_char1 AS SIGNED INT),
21479f_charbig = 'just inserted'
21480   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21481DELETE FROM t0_aux
21482WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21484SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21485'just inserted' FROM t0_template
21486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21487CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21488BEGIN
21489UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21490f_charbig = 'updated by trigger'
21491      WHERE f_int1 = - old.f_int1;
21492END|
21493DELETE FROM t0_aux
21494WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21495
21496# check trigger-8 success: 	1
21497DROP TRIGGER trg_1;
21498UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21499f_int2 = CAST(f_char1 AS SIGNED INT),
21500f_charbig = 'just inserted'
21501   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21502DELETE FROM t0_aux
21503WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21504DELETE FROM t1
21505WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21506CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21507BEGIN
21508SET new.f_int1 = old.f_int1 + @max_row,
21509new.f_int2 = old.f_int2 - @max_row,
21510new.f_charbig = '####updated per update trigger####';
21511END|
21512UPDATE t1
21513SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21514f_charbig = '####updated per update statement itself####';
21515
21516# check trigger-9 success: 	1
21517DROP TRIGGER trg_2;
21518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21519f_int2 = CAST(f_char1 AS SIGNED INT),
21520f_charbig = CONCAT('===',f_char1,'===');
21521CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
21522BEGIN
21523SET new.f_int1 = new.f_int1 + @max_row,
21524new.f_int2 = new.f_int2 - @max_row,
21525new.f_charbig = '####updated per update trigger####';
21526END|
21527UPDATE t1
21528SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
21529f_charbig = '####updated per update statement itself####';
21530
21531# check trigger-10 success: 	1
21532DROP TRIGGER trg_2;
21533UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21534f_int2 = CAST(f_char1 AS SIGNED INT),
21535f_charbig = CONCAT('===',f_char1,'===');
21536CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21537BEGIN
21538SET new.f_int1 = @my_max1 + @counter,
21539new.f_int2 = @my_min2 - @counter,
21540new.f_charbig = '####updated per insert trigger####';
21541SET @counter = @counter + 1;
21542END|
21543SET @counter = 1;
21544SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21545INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21546SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21547CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21548WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21549ORDER BY f_int1;
21550DROP TRIGGER trg_3;
21551
21552# check trigger-11 success: 	1
21553DELETE FROM t1
21554WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21555AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21556AND f_charbig = '####updated per insert trigger####';
21557CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
21558BEGIN
21559SET new.f_int1 = @my_max1 + @counter,
21560new.f_int2 = @my_min2 - @counter,
21561new.f_charbig = '####updated per insert trigger####';
21562SET @counter = @counter + 1;
21563END|
21564SET @counter = 1;
21565SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
21566INSERT INTO t1 (f_char1, f_char2, f_charbig)
21567SELECT CAST(f_int1 AS CHAR),
21568CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
21569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
21570ORDER BY f_int1;
21571DROP TRIGGER trg_3;
21572
21573# check trigger-12 success: 	1
21574DELETE FROM t1
21575WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
21576AND f_int2 <> CAST(f_char1 AS SIGNED INT)
21577AND f_charbig = '####updated per insert trigger####';
21578ANALYZE  TABLE t1;
21579Table	Op	Msg_type	Msg_text
21580test.t1	analyze	status	OK
21581CHECK    TABLE t1 EXTENDED;
21582Table	Op	Msg_type	Msg_text
21583test.t1	check	status	OK
21584CHECKSUM TABLE t1 EXTENDED;
21585Table	Checksum
21586test.t1	<some_value>
21587OPTIMIZE TABLE t1;
21588Table	Op	Msg_type	Msg_text
21589test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
21590test.t1	optimize	status	OK
21591# check layout success:    1
21592REPAIR   TABLE t1 EXTENDED;
21593Table	Op	Msg_type	Msg_text
21594test.t1	repair	status	OK
21595# check layout success:    1
21596TRUNCATE t1;
21597
21598# check TRUNCATE success: 	1
21599# check layout success:    1
21600# End usability test (inc/partition_check.inc)
21601DROP TABLE t1;
21602CREATE TABLE t1 (
21603f_int1 INTEGER,
21604f_int2 INTEGER,
21605f_char1 CHAR(20),
21606f_char2 CHAR(20),
21607f_charbig VARCHAR(1000)
21608, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
21609)
21610PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
21611(PARTITION parta VALUES LESS THAN (0),
21612PARTITION partb VALUES LESS THAN (5),
21613PARTITION partc VALUES LESS THAN (10),
21614PARTITION partd VALUES LESS THAN (10 + 5),
21615PARTITION parte VALUES LESS THAN (20),
21616PARTITION partf VALUES LESS THAN (2147483646));
21617INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21618SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
21619# Start usability test (inc/partition_check.inc)
21620create_command
21621SHOW CREATE TABLE t1;
21622Table	Create Table
21623t1	CREATE TABLE `t1` (
21624  `f_int1` int(11) NOT NULL,
21625  `f_int2` int(11) NOT NULL,
21626  `f_char1` char(20) DEFAULT NULL,
21627  `f_char2` char(20) DEFAULT NULL,
21628  `f_charbig` varchar(1000) DEFAULT NULL,
21629  PRIMARY KEY (`f_int2`,`f_int1`),
21630  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
21631) ENGINE=InnoDB DEFAULT CHARSET=latin1
21632/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
21633(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
21634 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
21635 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
21636 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
21637 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
21638 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
21639
21640unified filelist
21641t1#P#parta.ibd
21642t1#P#partb.ibd
21643t1#P#partc.ibd
21644t1#P#partd.ibd
21645t1#P#parte.ibd
21646t1#P#partf.ibd
21647t1.frm
21648
21649# check prerequisites-1 success:    1
21650# check COUNT(*) success:    1
21651# check MIN/MAX(f_int1) success:    1
21652# check MIN/MAX(f_int2) success:    1
21653INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21654SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
21655CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
21656WHERE f_int1 IN (2,3);
21657ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
21658# check prerequisites-3 success:    1
21659# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
21660INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21661SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21662CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21663WHERE f_int1 IN (2,3);
21664DELETE FROM t1 WHERE f_charbig = 'delete me';
21665INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21666SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
21667CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
21668WHERE f_int1 IN (2,3);
21669DELETE FROM t1 WHERE f_charbig = 'delete me';
21670# check read via f_int1 success: 1
21671# check read via f_int2 success: 1
21672
21673# check multiple-1 success: 	1
21674DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
21675
21676# check multiple-2 success: 	1
21677INSERT INTO t1 SELECT * FROM t0_template
21678WHERE MOD(f_int1,3) = 0;
21679
21680# check multiple-3 success: 	1
21681UPDATE t1 SET f_int1 = f_int1 + @max_row
21682WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
21683AND @max_row_div2 + @max_row_div4;
21684
21685# check multiple-4 success: 	1
21686DELETE FROM t1
21687WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
21688AND @max_row_div2 + @max_row_div4 + @max_row;
21689
21690# check multiple-5 success: 	1
21691SELECT COUNT(*) INTO @try_count FROM t0_template
21692WHERE MOD(f_int1,3) = 0
21693AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21694SELECT COUNT(*) INTO @clash_count
21695FROM t1 INNER JOIN t0_template USING(f_int1)
21696WHERE MOD(f_int1,3) = 0
21697AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21698SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
21699INSERT INTO t1
21700SET f_int1 = @cur_value , f_int2 = @cur_value,
21701f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21702f_charbig = '#SINGLE#';
21703
21704# check single-1 success: 	1
21705SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
21706INSERT INTO t1
21707SET f_int1 = @cur_value , f_int2 = @cur_value,
21708f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
21709f_charbig = '#SINGLE#';
21710
21711# check single-2 success: 	1
21712SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
21713SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
21714UPDATE t1 SET f_int1 = @cur_value2
21715WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
21716
21717# check single-3 success: 	1
21718SET @cur_value1= -1;
21719SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
21720UPDATE t1 SET f_int1 = @cur_value1
21721WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
21722
21723# check single-4 success: 	1
21724SELECT MAX(f_int1) INTO @cur_value FROM t1;
21725DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
21726
21727# check single-5 success: 	1
21728DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
21729
21730# check single-6 success: 	1
21731INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
21732ERROR HY000: Table has no partition for value 2147483647
21733DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
21734INSERT t1 SET f_int1 = 0 , f_int2 = 0,
21735f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
21736f_charbig = '#NULL#';
21737INSERT INTO t1
21738SET f_int1 = NULL , f_int2 = -@max_row,
21739f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
21740f_charbig = '#NULL#';
21741ERROR 23000: Column 'f_int1' cannot be null
21742# check null success:    1
21743DELETE FROM t1
21744WHERE f_int1 = 0 AND f_int2 = 0
21745AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
21746AND f_charbig = '#NULL#';
21747INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21748SELECT f_int1, f_int1, '', '', 'was inserted'
21749   FROM t0_template source_tab
21750WHERE MOD(f_int1,3) = 0
21751AND f_int1 BETWEEN @max_row_div2 AND @max_row
21752ON DUPLICATE KEY
21753UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
21754f_int2 = 2 * @max_row + source_tab.f_int1,
21755f_charbig = 'was updated';
21756
21757# check unique-1-a success: 	1
21758
21759# check unique-1-b success: 	1
21760DELETE FROM t1 WHERE f_charbig = 'was inserted';
21761UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21762f_int2 = CAST(f_char1 AS SIGNED INT),
21763f_charbig = CONCAT('===',f_char1,'===')
21764WHERE f_charbig = 'was updated';
21765REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21766SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
21767   FROM t0_template source_tab
21768WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
21769
21770# check replace success: 	1
21771DELETE FROM t1
21772WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
21773DELETE FROM t1
21774WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
21775f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
21776UPDATE t1 SET f_int2 = f_int1,
21777f_char1 = CAST(f_int1 AS CHAR),
21778f_char2 = CAST(f_int1 AS CHAR),
21779f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
21780WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
21781SET AUTOCOMMIT= 0;
21782INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21783SELECT f_int1, f_int1, '', '', 'was inserted'
21784FROM t0_template source_tab
21785WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21786
21787# check transactions-1 success: 	1
21788COMMIT WORK;
21789
21790# check transactions-2 success: 	1
21791ROLLBACK WORK;
21792
21793# check transactions-3 success: 	1
21794DELETE FROM t1 WHERE f_charbig = 'was inserted';
21795COMMIT WORK;
21796ROLLBACK WORK;
21797
21798# check transactions-4 success: 	1
21799INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21800SELECT f_int1, f_int1, '', '', 'was inserted'
21801FROM t0_template source_tab
21802WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21803
21804# check transactions-5 success: 	1
21805ROLLBACK WORK;
21806
21807# check transactions-6 success: 	1
21808# INFO: Storage engine used for t1 seems to be transactional.
21809COMMIT;
21810
21811# check transactions-7 success: 	1
21812DELETE FROM t1 WHERE f_charbig = 'was inserted';
21813COMMIT WORK;
21814SET @@session.sql_mode = 'traditional';
21815Warnings:
21816Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
21817SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
21818INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
21819SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
21820'', '', 'was inserted' FROM t0_template
21821WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
21822ERROR 22012: Division by 0
21823COMMIT;
21824
21825# check transactions-8 success: 	1
21826# INFO: Storage engine used for t1 seems to be able to revert
21827#       changes made by the failing statement.
21828SET @@session.sql_mode = '';
21829Warnings:
21830Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
21831SET AUTOCOMMIT= 1;
21832DELETE FROM t1 WHERE f_charbig = 'was inserted';
21833COMMIT WORK;
21834UPDATE t1 SET f_charbig = REPEAT('b', 1000);
21835
21836# check special-1 success: 	1
21837UPDATE t1 SET f_charbig = '';
21838
21839# check special-2 success: 	1
21840UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
21841INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
21842SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
21843WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21844INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21845SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21846'just inserted' FROM t0_template
21847WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21848CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
21849BEGIN
21850UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21851f_charbig = 'updated by trigger'
21852      WHERE f_int1 = new.f_int1;
21853END|
21854INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21855SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21856WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21857
21858# check trigger-1 success: 	1
21859DROP TRIGGER trg_1;
21860UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21861f_int2 = CAST(f_char1 AS SIGNED INT),
21862f_charbig = 'just inserted'
21863   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21864DELETE FROM t0_aux
21865WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21866INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21867SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21868'just inserted' FROM t0_template
21869WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21870CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
21871BEGIN
21872UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21873f_charbig = 'updated by trigger'
21874      WHERE f_int1 = new.f_int1;
21875END|
21876INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21877SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
21878WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21879
21880# check trigger-2 success: 	1
21881DROP TRIGGER trg_1;
21882UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21883f_int2 = CAST(f_char1 AS SIGNED INT),
21884f_charbig = 'just inserted'
21885   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21886DELETE FROM t0_aux
21887WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21888INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21889SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21890'just inserted' FROM t0_template
21891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21892CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21893BEGIN
21894UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21895f_charbig = 'updated by trigger'
21896      WHERE f_int1 = new.f_int1;
21897END|
21898UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21899WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21900
21901# check trigger-3 success: 	1
21902DROP TRIGGER trg_1;
21903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21904f_int2 = CAST(f_char1 AS SIGNED INT),
21905f_charbig = 'just inserted'
21906   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21907DELETE FROM t0_aux
21908WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21909INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21910SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21911'just inserted' FROM t0_template
21912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21913CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
21914BEGIN
21915UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21916f_charbig = 'updated by trigger'
21917      WHERE f_int1 = - old.f_int1;
21918END|
21919UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21920WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21921
21922# check trigger-4 success: 	1
21923DROP TRIGGER trg_1;
21924UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21925f_int2 = CAST(f_char1 AS SIGNED INT),
21926f_charbig = 'just inserted'
21927   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21928DELETE FROM t0_aux
21929WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21930INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21931SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21932'just inserted' FROM t0_template
21933WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21934CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21935BEGIN
21936UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21937f_charbig = 'updated by trigger'
21938      WHERE f_int1 = new.f_int1;
21939END|
21940UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21941WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21942
21943# check trigger-5 success: 	1
21944DROP TRIGGER trg_1;
21945UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21946f_int2 = CAST(f_char1 AS SIGNED INT),
21947f_charbig = 'just inserted'
21948   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21949DELETE FROM t0_aux
21950WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21951INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21952SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21953'just inserted' FROM t0_template
21954WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21955CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
21956BEGIN
21957UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21958f_charbig = 'updated by trigger'
21959      WHERE f_int1 = - old.f_int1;
21960END|
21961UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
21962WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21963
21964# check trigger-6 success: 	1
21965DROP TRIGGER trg_1;
21966UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21967f_int2 = CAST(f_char1 AS SIGNED INT),
21968f_charbig = 'just inserted'
21969   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21970DELETE FROM t0_aux
21971WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21972INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21973SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21974'just inserted' FROM t0_template
21975WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21976CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
21977BEGIN
21978UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
21979f_charbig = 'updated by trigger'
21980      WHERE f_int1 = - old.f_int1;
21981END|
21982DELETE FROM t0_aux
21983WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
21984
21985# check trigger-7 success: 	1
21986DROP TRIGGER trg_1;
21987UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
21988f_int2 = CAST(f_char1 AS SIGNED INT),
21989f_charbig = 'just inserted'
21990   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
21991DELETE FROM t0_aux
21992WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21993INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
21994SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
21995'just inserted' FROM t0_template
21996WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
21997CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
21998BEGIN
21999UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22000f_charbig = 'updated by trigger'
22001      WHERE f_int1 = - old.f_int1;
22002END|
22003DELETE FROM t0_aux
22004WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22005
22006# check trigger-8 success: 	1
22007DROP TRIGGER trg_1;
22008UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22009f_int2 = CAST(f_char1 AS SIGNED INT),
22010f_charbig = 'just inserted'
22011   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22012DELETE FROM t0_aux
22013WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22014DELETE FROM t1
22015WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22016CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22017BEGIN
22018SET new.f_int1 = old.f_int1 + @max_row,
22019new.f_int2 = old.f_int2 - @max_row,
22020new.f_charbig = '####updated per update trigger####';
22021END|
22022UPDATE t1
22023SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22024f_charbig = '####updated per update statement itself####';
22025
22026# check trigger-9 success: 	1
22027DROP TRIGGER trg_2;
22028UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22029f_int2 = CAST(f_char1 AS SIGNED INT),
22030f_charbig = CONCAT('===',f_char1,'===');
22031CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22032BEGIN
22033SET new.f_int1 = new.f_int1 + @max_row,
22034new.f_int2 = new.f_int2 - @max_row,
22035new.f_charbig = '####updated per update trigger####';
22036END|
22037UPDATE t1
22038SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22039f_charbig = '####updated per update statement itself####';
22040
22041# check trigger-10 success: 	1
22042DROP TRIGGER trg_2;
22043UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22044f_int2 = CAST(f_char1 AS SIGNED INT),
22045f_charbig = CONCAT('===',f_char1,'===');
22046CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22047BEGIN
22048SET new.f_int1 = @my_max1 + @counter,
22049new.f_int2 = @my_min2 - @counter,
22050new.f_charbig = '####updated per insert trigger####';
22051SET @counter = @counter + 1;
22052END|
22053SET @counter = 1;
22054SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22055INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22056SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22057CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22058WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22059ORDER BY f_int1;
22060DROP TRIGGER trg_3;
22061
22062# check trigger-11 success: 	1
22063DELETE FROM t1
22064WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22065AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22066AND f_charbig = '####updated per insert trigger####';
22067CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22068BEGIN
22069SET new.f_int1 = @my_max1 + @counter,
22070new.f_int2 = @my_min2 - @counter,
22071new.f_charbig = '####updated per insert trigger####';
22072SET @counter = @counter + 1;
22073END|
22074SET @counter = 1;
22075SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22076INSERT INTO t1 (f_char1, f_char2, f_charbig)
22077SELECT CAST(f_int1 AS CHAR),
22078CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22080ORDER BY f_int1;
22081DROP TRIGGER trg_3;
22082
22083# check trigger-12 success: 	1
22084DELETE FROM t1
22085WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22086AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22087AND f_charbig = '####updated per insert trigger####';
22088ANALYZE  TABLE t1;
22089Table	Op	Msg_type	Msg_text
22090test.t1	analyze	status	OK
22091CHECK    TABLE t1 EXTENDED;
22092Table	Op	Msg_type	Msg_text
22093test.t1	check	status	OK
22094CHECKSUM TABLE t1 EXTENDED;
22095Table	Checksum
22096test.t1	<some_value>
22097OPTIMIZE TABLE t1;
22098Table	Op	Msg_type	Msg_text
22099test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
22100test.t1	optimize	status	OK
22101# check layout success:    1
22102REPAIR   TABLE t1 EXTENDED;
22103Table	Op	Msg_type	Msg_text
22104test.t1	repair	status	OK
22105# check layout success:    1
22106TRUNCATE t1;
22107
22108# check TRUNCATE success: 	1
22109# check layout success:    1
22110# End usability test (inc/partition_check.inc)
22111DROP TABLE t1;
22112CREATE TABLE t1 (
22113f_int1 INTEGER,
22114f_int2 INTEGER,
22115f_char1 CHAR(20),
22116f_char2 CHAR(20),
22117f_charbig VARCHAR(1000)
22118, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
22119)
22120PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
22121(PARTITION parta VALUES LESS THAN (0),
22122PARTITION partb VALUES LESS THAN (5),
22123PARTITION partc VALUES LESS THAN (10),
22124PARTITION partd VALUES LESS THAN (2147483646));
22125INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22126SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
22127# Start usability test (inc/partition_check.inc)
22128create_command
22129SHOW CREATE TABLE t1;
22130Table	Create Table
22131t1	CREATE TABLE `t1` (
22132  `f_int1` int(11) NOT NULL,
22133  `f_int2` int(11) NOT NULL,
22134  `f_char1` char(20) DEFAULT NULL,
22135  `f_char2` char(20) DEFAULT NULL,
22136  `f_charbig` varchar(1000) DEFAULT NULL,
22137  PRIMARY KEY (`f_int2`,`f_int1`),
22138  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
22139) ENGINE=InnoDB DEFAULT CHARSET=latin1
22140/*!50100 PARTITION BY RANGE (f_int1)
22141SUBPARTITION BY HASH (f_int2)
22142SUBPARTITIONS 2
22143(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
22144 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
22145 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
22146 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
22147
22148unified filelist
22149t1#P#parta#SP#partasp0.ibd
22150t1#P#parta#SP#partasp1.ibd
22151t1#P#partb#SP#partbsp0.ibd
22152t1#P#partb#SP#partbsp1.ibd
22153t1#P#partc#SP#partcsp0.ibd
22154t1#P#partc#SP#partcsp1.ibd
22155t1#P#partd#SP#partdsp0.ibd
22156t1#P#partd#SP#partdsp1.ibd
22157t1.frm
22158
22159# check prerequisites-1 success:    1
22160# check COUNT(*) success:    1
22161# check MIN/MAX(f_int1) success:    1
22162# check MIN/MAX(f_int2) success:    1
22163INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22164SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22165CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22166WHERE f_int1 IN (2,3);
22167ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
22168# check prerequisites-3 success:    1
22169# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
22170INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22171SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22172CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22173WHERE f_int1 IN (2,3);
22174DELETE FROM t1 WHERE f_charbig = 'delete me';
22175INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22176SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22177CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22178WHERE f_int1 IN (2,3);
22179DELETE FROM t1 WHERE f_charbig = 'delete me';
22180# check read via f_int1 success: 1
22181# check read via f_int2 success: 1
22182
22183# check multiple-1 success: 	1
22184DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22185
22186# check multiple-2 success: 	1
22187INSERT INTO t1 SELECT * FROM t0_template
22188WHERE MOD(f_int1,3) = 0;
22189
22190# check multiple-3 success: 	1
22191UPDATE t1 SET f_int1 = f_int1 + @max_row
22192WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22193AND @max_row_div2 + @max_row_div4;
22194
22195# check multiple-4 success: 	1
22196DELETE FROM t1
22197WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22198AND @max_row_div2 + @max_row_div4 + @max_row;
22199
22200# check multiple-5 success: 	1
22201SELECT COUNT(*) INTO @try_count FROM t0_template
22202WHERE MOD(f_int1,3) = 0
22203AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22204SELECT COUNT(*) INTO @clash_count
22205FROM t1 INNER JOIN t0_template USING(f_int1)
22206WHERE MOD(f_int1,3) = 0
22207AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22208SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22209INSERT INTO t1
22210SET f_int1 = @cur_value , f_int2 = @cur_value,
22211f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22212f_charbig = '#SINGLE#';
22213
22214# check single-1 success: 	1
22215SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22216INSERT INTO t1
22217SET f_int1 = @cur_value , f_int2 = @cur_value,
22218f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22219f_charbig = '#SINGLE#';
22220
22221# check single-2 success: 	1
22222SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22223SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22224UPDATE t1 SET f_int1 = @cur_value2
22225WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22226
22227# check single-3 success: 	1
22228SET @cur_value1= -1;
22229SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22230UPDATE t1 SET f_int1 = @cur_value1
22231WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22232
22233# check single-4 success: 	1
22234SELECT MAX(f_int1) INTO @cur_value FROM t1;
22235DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22236
22237# check single-5 success: 	1
22238DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22239
22240# check single-6 success: 	1
22241INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22242ERROR HY000: Table has no partition for value 2147483647
22243DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22244INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22245f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22246f_charbig = '#NULL#';
22247INSERT INTO t1
22248SET f_int1 = NULL , f_int2 = -@max_row,
22249f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22250f_charbig = '#NULL#';
22251ERROR 23000: Column 'f_int1' cannot be null
22252# check null success:    1
22253DELETE FROM t1
22254WHERE f_int1 = 0 AND f_int2 = 0
22255AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22256AND f_charbig = '#NULL#';
22257INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22258SELECT f_int1, f_int1, '', '', 'was inserted'
22259   FROM t0_template source_tab
22260WHERE MOD(f_int1,3) = 0
22261AND f_int1 BETWEEN @max_row_div2 AND @max_row
22262ON DUPLICATE KEY
22263UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
22264f_int2 = 2 * @max_row + source_tab.f_int1,
22265f_charbig = 'was updated';
22266
22267# check unique-1-a success: 	1
22268
22269# check unique-1-b success: 	1
22270DELETE FROM t1 WHERE f_charbig = 'was inserted';
22271UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22272f_int2 = CAST(f_char1 AS SIGNED INT),
22273f_charbig = CONCAT('===',f_char1,'===')
22274WHERE f_charbig = 'was updated';
22275REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22276SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
22277   FROM t0_template source_tab
22278WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22279
22280# check replace success: 	1
22281DELETE FROM t1
22282WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
22283DELETE FROM t1
22284WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
22285f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
22286UPDATE t1 SET f_int2 = f_int1,
22287f_char1 = CAST(f_int1 AS CHAR),
22288f_char2 = CAST(f_int1 AS CHAR),
22289f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
22290WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
22291SET AUTOCOMMIT= 0;
22292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22293SELECT f_int1, f_int1, '', '', 'was inserted'
22294FROM t0_template source_tab
22295WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22296
22297# check transactions-1 success: 	1
22298COMMIT WORK;
22299
22300# check transactions-2 success: 	1
22301ROLLBACK WORK;
22302
22303# check transactions-3 success: 	1
22304DELETE FROM t1 WHERE f_charbig = 'was inserted';
22305COMMIT WORK;
22306ROLLBACK WORK;
22307
22308# check transactions-4 success: 	1
22309INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22310SELECT f_int1, f_int1, '', '', 'was inserted'
22311FROM t0_template source_tab
22312WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22313
22314# check transactions-5 success: 	1
22315ROLLBACK WORK;
22316
22317# check transactions-6 success: 	1
22318# INFO: Storage engine used for t1 seems to be transactional.
22319COMMIT;
22320
22321# check transactions-7 success: 	1
22322DELETE FROM t1 WHERE f_charbig = 'was inserted';
22323COMMIT WORK;
22324SET @@session.sql_mode = 'traditional';
22325Warnings:
22326Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
22327SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22328INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22329SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22330'', '', 'was inserted' FROM t0_template
22331WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22332ERROR 22012: Division by 0
22333COMMIT;
22334
22335# check transactions-8 success: 	1
22336# INFO: Storage engine used for t1 seems to be able to revert
22337#       changes made by the failing statement.
22338SET @@session.sql_mode = '';
22339Warnings:
22340Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
22341SET AUTOCOMMIT= 1;
22342DELETE FROM t1 WHERE f_charbig = 'was inserted';
22343COMMIT WORK;
22344UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22345
22346# check special-1 success: 	1
22347UPDATE t1 SET f_charbig = '';
22348
22349# check special-2 success: 	1
22350UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22351INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22352SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22353WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22354INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22355SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22356'just inserted' FROM t0_template
22357WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22358CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22359BEGIN
22360UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22361f_charbig = 'updated by trigger'
22362      WHERE f_int1 = new.f_int1;
22363END|
22364INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22365SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22366WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22367
22368# check trigger-1 success: 	1
22369DROP TRIGGER trg_1;
22370UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22371f_int2 = CAST(f_char1 AS SIGNED INT),
22372f_charbig = 'just inserted'
22373   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22374DELETE FROM t0_aux
22375WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22376INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22377SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22378'just inserted' FROM t0_template
22379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22380CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22381BEGIN
22382UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22383f_charbig = 'updated by trigger'
22384      WHERE f_int1 = new.f_int1;
22385END|
22386INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22387SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22388WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22389
22390# check trigger-2 success: 	1
22391DROP TRIGGER trg_1;
22392UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22393f_int2 = CAST(f_char1 AS SIGNED INT),
22394f_charbig = 'just inserted'
22395   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22396DELETE FROM t0_aux
22397WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22400'just inserted' FROM t0_template
22401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22402CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22403BEGIN
22404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22405f_charbig = 'updated by trigger'
22406      WHERE f_int1 = new.f_int1;
22407END|
22408UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22409WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22410
22411# check trigger-3 success: 	1
22412DROP TRIGGER trg_1;
22413UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22414f_int2 = CAST(f_char1 AS SIGNED INT),
22415f_charbig = 'just inserted'
22416   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22417DELETE FROM t0_aux
22418WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22419INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22420SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22421'just inserted' FROM t0_template
22422WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22423CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22424BEGIN
22425UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22426f_charbig = 'updated by trigger'
22427      WHERE f_int1 = - old.f_int1;
22428END|
22429UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22430WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22431
22432# check trigger-4 success: 	1
22433DROP TRIGGER trg_1;
22434UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22435f_int2 = CAST(f_char1 AS SIGNED INT),
22436f_charbig = 'just inserted'
22437   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22438DELETE FROM t0_aux
22439WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22440INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22441SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22442'just inserted' FROM t0_template
22443WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22444CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22445BEGIN
22446UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22447f_charbig = 'updated by trigger'
22448      WHERE f_int1 = new.f_int1;
22449END|
22450UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22451WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22452
22453# check trigger-5 success: 	1
22454DROP TRIGGER trg_1;
22455UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22456f_int2 = CAST(f_char1 AS SIGNED INT),
22457f_charbig = 'just inserted'
22458   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22459DELETE FROM t0_aux
22460WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22461INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22462SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22463'just inserted' FROM t0_template
22464WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22465CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22466BEGIN
22467UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22468f_charbig = 'updated by trigger'
22469      WHERE f_int1 = - old.f_int1;
22470END|
22471UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22472WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22473
22474# check trigger-6 success: 	1
22475DROP TRIGGER trg_1;
22476UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22477f_int2 = CAST(f_char1 AS SIGNED INT),
22478f_charbig = 'just inserted'
22479   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22480DELETE FROM t0_aux
22481WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22482INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22483SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22484'just inserted' FROM t0_template
22485WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22486CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
22487BEGIN
22488UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22489f_charbig = 'updated by trigger'
22490      WHERE f_int1 = - old.f_int1;
22491END|
22492DELETE FROM t0_aux
22493WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22494
22495# check trigger-7 success: 	1
22496DROP TRIGGER trg_1;
22497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22498f_int2 = CAST(f_char1 AS SIGNED INT),
22499f_charbig = 'just inserted'
22500   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22501DELETE FROM t0_aux
22502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22503INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22504SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22505'just inserted' FROM t0_template
22506WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22507CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
22508BEGIN
22509UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22510f_charbig = 'updated by trigger'
22511      WHERE f_int1 = - old.f_int1;
22512END|
22513DELETE FROM t0_aux
22514WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22515
22516# check trigger-8 success: 	1
22517DROP TRIGGER trg_1;
22518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22519f_int2 = CAST(f_char1 AS SIGNED INT),
22520f_charbig = 'just inserted'
22521   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22522DELETE FROM t0_aux
22523WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22524DELETE FROM t1
22525WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22526CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22527BEGIN
22528SET new.f_int1 = old.f_int1 + @max_row,
22529new.f_int2 = old.f_int2 - @max_row,
22530new.f_charbig = '####updated per update trigger####';
22531END|
22532UPDATE t1
22533SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22534f_charbig = '####updated per update statement itself####';
22535
22536# check trigger-9 success: 	1
22537DROP TRIGGER trg_2;
22538UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22539f_int2 = CAST(f_char1 AS SIGNED INT),
22540f_charbig = CONCAT('===',f_char1,'===');
22541CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
22542BEGIN
22543SET new.f_int1 = new.f_int1 + @max_row,
22544new.f_int2 = new.f_int2 - @max_row,
22545new.f_charbig = '####updated per update trigger####';
22546END|
22547UPDATE t1
22548SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
22549f_charbig = '####updated per update statement itself####';
22550
22551# check trigger-10 success: 	1
22552DROP TRIGGER trg_2;
22553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22554f_int2 = CAST(f_char1 AS SIGNED INT),
22555f_charbig = CONCAT('===',f_char1,'===');
22556CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22557BEGIN
22558SET new.f_int1 = @my_max1 + @counter,
22559new.f_int2 = @my_min2 - @counter,
22560new.f_charbig = '####updated per insert trigger####';
22561SET @counter = @counter + 1;
22562END|
22563SET @counter = 1;
22564SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22565INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22566SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22567CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22569ORDER BY f_int1;
22570DROP TRIGGER trg_3;
22571
22572# check trigger-11 success: 	1
22573DELETE FROM t1
22574WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22575AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22576AND f_charbig = '####updated per insert trigger####';
22577CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
22578BEGIN
22579SET new.f_int1 = @my_max1 + @counter,
22580new.f_int2 = @my_min2 - @counter,
22581new.f_charbig = '####updated per insert trigger####';
22582SET @counter = @counter + 1;
22583END|
22584SET @counter = 1;
22585SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
22586INSERT INTO t1 (f_char1, f_char2, f_charbig)
22587SELECT CAST(f_int1 AS CHAR),
22588CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
22589WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
22590ORDER BY f_int1;
22591DROP TRIGGER trg_3;
22592
22593# check trigger-12 success: 	1
22594DELETE FROM t1
22595WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
22596AND f_int2 <> CAST(f_char1 AS SIGNED INT)
22597AND f_charbig = '####updated per insert trigger####';
22598ANALYZE  TABLE t1;
22599Table	Op	Msg_type	Msg_text
22600test.t1	analyze	status	OK
22601CHECK    TABLE t1 EXTENDED;
22602Table	Op	Msg_type	Msg_text
22603test.t1	check	status	OK
22604CHECKSUM TABLE t1 EXTENDED;
22605Table	Checksum
22606test.t1	<some_value>
22607OPTIMIZE TABLE t1;
22608Table	Op	Msg_type	Msg_text
22609test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
22610test.t1	optimize	status	OK
22611# check layout success:    1
22612REPAIR   TABLE t1 EXTENDED;
22613Table	Op	Msg_type	Msg_text
22614test.t1	repair	status	OK
22615# check layout success:    1
22616TRUNCATE t1;
22617
22618# check TRUNCATE success: 	1
22619# check layout success:    1
22620# End usability test (inc/partition_check.inc)
22621DROP TABLE t1;
22622CREATE TABLE t1 (
22623f_int1 INTEGER,
22624f_int2 INTEGER,
22625f_char1 CHAR(20),
22626f_char2 CHAR(20),
22627f_charbig VARCHAR(1000)
22628, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
22629)
22630PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
22631(PARTITION part1 VALUES LESS THAN (0)
22632(SUBPARTITION subpart11, SUBPARTITION subpart12),
22633PARTITION part2 VALUES LESS THAN (5)
22634(SUBPARTITION subpart21, SUBPARTITION subpart22),
22635PARTITION part3 VALUES LESS THAN (10)
22636(SUBPARTITION subpart31, SUBPARTITION subpart32),
22637PARTITION part4 VALUES LESS THAN (2147483646)
22638(SUBPARTITION subpart41, SUBPARTITION subpart42));
22639INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22640SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
22641# Start usability test (inc/partition_check.inc)
22642create_command
22643SHOW CREATE TABLE t1;
22644Table	Create Table
22645t1	CREATE TABLE `t1` (
22646  `f_int1` int(11) NOT NULL,
22647  `f_int2` int(11) NOT NULL,
22648  `f_char1` char(20) DEFAULT NULL,
22649  `f_char2` char(20) DEFAULT NULL,
22650  `f_charbig` varchar(1000) DEFAULT NULL,
22651  PRIMARY KEY (`f_int2`,`f_int1`),
22652  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
22653) ENGINE=InnoDB DEFAULT CHARSET=latin1
22654/*!50100 PARTITION BY RANGE (f_int1)
22655SUBPARTITION BY KEY (f_int2)
22656(PARTITION part1 VALUES LESS THAN (0)
22657 (SUBPARTITION subpart11 ENGINE = InnoDB,
22658  SUBPARTITION subpart12 ENGINE = InnoDB),
22659 PARTITION part2 VALUES LESS THAN (5)
22660 (SUBPARTITION subpart21 ENGINE = InnoDB,
22661  SUBPARTITION subpart22 ENGINE = InnoDB),
22662 PARTITION part3 VALUES LESS THAN (10)
22663 (SUBPARTITION subpart31 ENGINE = InnoDB,
22664  SUBPARTITION subpart32 ENGINE = InnoDB),
22665 PARTITION part4 VALUES LESS THAN (2147483646)
22666 (SUBPARTITION subpart41 ENGINE = InnoDB,
22667  SUBPARTITION subpart42 ENGINE = InnoDB)) */
22668
22669unified filelist
22670t1#P#part1#SP#subpart11.ibd
22671t1#P#part1#SP#subpart12.ibd
22672t1#P#part2#SP#subpart21.ibd
22673t1#P#part2#SP#subpart22.ibd
22674t1#P#part3#SP#subpart31.ibd
22675t1#P#part3#SP#subpart32.ibd
22676t1#P#part4#SP#subpart41.ibd
22677t1#P#part4#SP#subpart42.ibd
22678t1.frm
22679
22680# check prerequisites-1 success:    1
22681# check COUNT(*) success:    1
22682# check MIN/MAX(f_int1) success:    1
22683# check MIN/MAX(f_int2) success:    1
22684INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22685SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
22686CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
22687WHERE f_int1 IN (2,3);
22688ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
22689# check prerequisites-3 success:    1
22690# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
22691INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22692SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22693CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22694WHERE f_int1 IN (2,3);
22695DELETE FROM t1 WHERE f_charbig = 'delete me';
22696INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22697SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
22698CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
22699WHERE f_int1 IN (2,3);
22700DELETE FROM t1 WHERE f_charbig = 'delete me';
22701# check read via f_int1 success: 1
22702# check read via f_int2 success: 1
22703
22704# check multiple-1 success: 	1
22705DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
22706
22707# check multiple-2 success: 	1
22708INSERT INTO t1 SELECT * FROM t0_template
22709WHERE MOD(f_int1,3) = 0;
22710
22711# check multiple-3 success: 	1
22712UPDATE t1 SET f_int1 = f_int1 + @max_row
22713WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
22714AND @max_row_div2 + @max_row_div4;
22715
22716# check multiple-4 success: 	1
22717DELETE FROM t1
22718WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
22719AND @max_row_div2 + @max_row_div4 + @max_row;
22720
22721# check multiple-5 success: 	1
22722SELECT COUNT(*) INTO @try_count FROM t0_template
22723WHERE MOD(f_int1,3) = 0
22724AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22725SELECT COUNT(*) INTO @clash_count
22726FROM t1 INNER JOIN t0_template USING(f_int1)
22727WHERE MOD(f_int1,3) = 0
22728AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22729SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
22730INSERT INTO t1
22731SET f_int1 = @cur_value , f_int2 = @cur_value,
22732f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22733f_charbig = '#SINGLE#';
22734
22735# check single-1 success: 	1
22736SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
22737INSERT INTO t1
22738SET f_int1 = @cur_value , f_int2 = @cur_value,
22739f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
22740f_charbig = '#SINGLE#';
22741
22742# check single-2 success: 	1
22743SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
22744SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
22745UPDATE t1 SET f_int1 = @cur_value2
22746WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
22747
22748# check single-3 success: 	1
22749SET @cur_value1= -1;
22750SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
22751UPDATE t1 SET f_int1 = @cur_value1
22752WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
22753
22754# check single-4 success: 	1
22755SELECT MAX(f_int1) INTO @cur_value FROM t1;
22756DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
22757
22758# check single-5 success: 	1
22759DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
22760
22761# check single-6 success: 	1
22762INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
22763ERROR HY000: Table has no partition for value 2147483647
22764DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
22765INSERT t1 SET f_int1 = 0 , f_int2 = 0,
22766f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
22767f_charbig = '#NULL#';
22768INSERT INTO t1
22769SET f_int1 = NULL , f_int2 = -@max_row,
22770f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
22771f_charbig = '#NULL#';
22772ERROR 23000: Column 'f_int1' cannot be null
22773# check null success:    1
22774DELETE FROM t1
22775WHERE f_int1 = 0 AND f_int2 = 0
22776AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
22777AND f_charbig = '#NULL#';
22778INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22779SELECT f_int1, f_int1, '', '', 'was inserted'
22780   FROM t0_template source_tab
22781WHERE MOD(f_int1,3) = 0
22782AND f_int1 BETWEEN @max_row_div2 AND @max_row
22783ON DUPLICATE KEY
22784UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
22785f_int2 = 2 * @max_row + source_tab.f_int1,
22786f_charbig = 'was updated';
22787
22788# check unique-1-a success: 	1
22789
22790# check unique-1-b success: 	1
22791DELETE FROM t1 WHERE f_charbig = 'was inserted';
22792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22793f_int2 = CAST(f_char1 AS SIGNED INT),
22794f_charbig = CONCAT('===',f_char1,'===')
22795WHERE f_charbig = 'was updated';
22796REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22797SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
22798   FROM t0_template source_tab
22799WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
22800
22801# check replace success: 	1
22802DELETE FROM t1
22803WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
22804DELETE FROM t1
22805WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
22806f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
22807UPDATE t1 SET f_int2 = f_int1,
22808f_char1 = CAST(f_int1 AS CHAR),
22809f_char2 = CAST(f_int1 AS CHAR),
22810f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
22811WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
22812SET AUTOCOMMIT= 0;
22813INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22814SELECT f_int1, f_int1, '', '', 'was inserted'
22815FROM t0_template source_tab
22816WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22817
22818# check transactions-1 success: 	1
22819COMMIT WORK;
22820
22821# check transactions-2 success: 	1
22822ROLLBACK WORK;
22823
22824# check transactions-3 success: 	1
22825DELETE FROM t1 WHERE f_charbig = 'was inserted';
22826COMMIT WORK;
22827ROLLBACK WORK;
22828
22829# check transactions-4 success: 	1
22830INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22831SELECT f_int1, f_int1, '', '', 'was inserted'
22832FROM t0_template source_tab
22833WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22834
22835# check transactions-5 success: 	1
22836ROLLBACK WORK;
22837
22838# check transactions-6 success: 	1
22839# INFO: Storage engine used for t1 seems to be transactional.
22840COMMIT;
22841
22842# check transactions-7 success: 	1
22843DELETE FROM t1 WHERE f_charbig = 'was inserted';
22844COMMIT WORK;
22845SET @@session.sql_mode = 'traditional';
22846Warnings:
22847Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
22848SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
22849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
22850SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
22851'', '', 'was inserted' FROM t0_template
22852WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
22853ERROR 22012: Division by 0
22854COMMIT;
22855
22856# check transactions-8 success: 	1
22857# INFO: Storage engine used for t1 seems to be able to revert
22858#       changes made by the failing statement.
22859SET @@session.sql_mode = '';
22860Warnings:
22861Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
22862SET AUTOCOMMIT= 1;
22863DELETE FROM t1 WHERE f_charbig = 'was inserted';
22864COMMIT WORK;
22865UPDATE t1 SET f_charbig = REPEAT('b', 1000);
22866
22867# check special-1 success: 	1
22868UPDATE t1 SET f_charbig = '';
22869
22870# check special-2 success: 	1
22871UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
22872INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
22873SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
22874WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22875INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22876SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22877'just inserted' FROM t0_template
22878WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22879CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
22880BEGIN
22881UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22882f_charbig = 'updated by trigger'
22883      WHERE f_int1 = new.f_int1;
22884END|
22885INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22886SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22887WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22888
22889# check trigger-1 success: 	1
22890DROP TRIGGER trg_1;
22891UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22892f_int2 = CAST(f_char1 AS SIGNED INT),
22893f_charbig = 'just inserted'
22894   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22895DELETE FROM t0_aux
22896WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22897INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22898SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22899'just inserted' FROM t0_template
22900WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22901CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
22902BEGIN
22903UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22904f_charbig = 'updated by trigger'
22905      WHERE f_int1 = new.f_int1;
22906END|
22907INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22908SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
22909WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22910
22911# check trigger-2 success: 	1
22912DROP TRIGGER trg_1;
22913UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22914f_int2 = CAST(f_char1 AS SIGNED INT),
22915f_charbig = 'just inserted'
22916   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22917DELETE FROM t0_aux
22918WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22919INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22920SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22921'just inserted' FROM t0_template
22922WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22923CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22924BEGIN
22925UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22926f_charbig = 'updated by trigger'
22927      WHERE f_int1 = new.f_int1;
22928END|
22929UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22930WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22931
22932# check trigger-3 success: 	1
22933DROP TRIGGER trg_1;
22934UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22935f_int2 = CAST(f_char1 AS SIGNED INT),
22936f_charbig = 'just inserted'
22937   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22938DELETE FROM t0_aux
22939WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22940INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22941SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22942'just inserted' FROM t0_template
22943WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22944CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
22945BEGIN
22946UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22947f_charbig = 'updated by trigger'
22948      WHERE f_int1 = - old.f_int1;
22949END|
22950UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22951WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22952
22953# check trigger-4 success: 	1
22954DROP TRIGGER trg_1;
22955UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22956f_int2 = CAST(f_char1 AS SIGNED INT),
22957f_charbig = 'just inserted'
22958   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22959DELETE FROM t0_aux
22960WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22961INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22962SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22963'just inserted' FROM t0_template
22964WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22965CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22966BEGIN
22967UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22968f_charbig = 'updated by trigger'
22969      WHERE f_int1 = new.f_int1;
22970END|
22971UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22972WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22973
22974# check trigger-5 success: 	1
22975DROP TRIGGER trg_1;
22976UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22977f_int2 = CAST(f_char1 AS SIGNED INT),
22978f_charbig = 'just inserted'
22979   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
22980DELETE FROM t0_aux
22981WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22982INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
22983SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
22984'just inserted' FROM t0_template
22985WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
22986CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
22987BEGIN
22988UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
22989f_charbig = 'updated by trigger'
22990      WHERE f_int1 = - old.f_int1;
22991END|
22992UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
22993WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
22994
22995# check trigger-6 success: 	1
22996DROP TRIGGER trg_1;
22997UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
22998f_int2 = CAST(f_char1 AS SIGNED INT),
22999f_charbig = 'just inserted'
23000   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23001DELETE FROM t0_aux
23002WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23003INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23004SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23005'just inserted' FROM t0_template
23006WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23007CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23008BEGIN
23009UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23010f_charbig = 'updated by trigger'
23011      WHERE f_int1 = - old.f_int1;
23012END|
23013DELETE FROM t0_aux
23014WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23015
23016# check trigger-7 success: 	1
23017DROP TRIGGER trg_1;
23018UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23019f_int2 = CAST(f_char1 AS SIGNED INT),
23020f_charbig = 'just inserted'
23021   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23022DELETE FROM t0_aux
23023WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23024INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23025SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23026'just inserted' FROM t0_template
23027WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23028CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23029BEGIN
23030UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23031f_charbig = 'updated by trigger'
23032      WHERE f_int1 = - old.f_int1;
23033END|
23034DELETE FROM t0_aux
23035WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23036
23037# check trigger-8 success: 	1
23038DROP TRIGGER trg_1;
23039UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23040f_int2 = CAST(f_char1 AS SIGNED INT),
23041f_charbig = 'just inserted'
23042   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23043DELETE FROM t0_aux
23044WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23045DELETE FROM t1
23046WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23047CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23048BEGIN
23049SET new.f_int1 = old.f_int1 + @max_row,
23050new.f_int2 = old.f_int2 - @max_row,
23051new.f_charbig = '####updated per update trigger####';
23052END|
23053UPDATE t1
23054SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23055f_charbig = '####updated per update statement itself####';
23056
23057# check trigger-9 success: 	1
23058DROP TRIGGER trg_2;
23059UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23060f_int2 = CAST(f_char1 AS SIGNED INT),
23061f_charbig = CONCAT('===',f_char1,'===');
23062CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23063BEGIN
23064SET new.f_int1 = new.f_int1 + @max_row,
23065new.f_int2 = new.f_int2 - @max_row,
23066new.f_charbig = '####updated per update trigger####';
23067END|
23068UPDATE t1
23069SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23070f_charbig = '####updated per update statement itself####';
23071
23072# check trigger-10 success: 	1
23073DROP TRIGGER trg_2;
23074UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23075f_int2 = CAST(f_char1 AS SIGNED INT),
23076f_charbig = CONCAT('===',f_char1,'===');
23077CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23078BEGIN
23079SET new.f_int1 = @my_max1 + @counter,
23080new.f_int2 = @my_min2 - @counter,
23081new.f_charbig = '####updated per insert trigger####';
23082SET @counter = @counter + 1;
23083END|
23084SET @counter = 1;
23085SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23086INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23087SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23088CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23089WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23090ORDER BY f_int1;
23091DROP TRIGGER trg_3;
23092
23093# check trigger-11 success: 	1
23094DELETE FROM t1
23095WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23096AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23097AND f_charbig = '####updated per insert trigger####';
23098CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23099BEGIN
23100SET new.f_int1 = @my_max1 + @counter,
23101new.f_int2 = @my_min2 - @counter,
23102new.f_charbig = '####updated per insert trigger####';
23103SET @counter = @counter + 1;
23104END|
23105SET @counter = 1;
23106SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23107INSERT INTO t1 (f_char1, f_char2, f_charbig)
23108SELECT CAST(f_int1 AS CHAR),
23109CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23111ORDER BY f_int1;
23112DROP TRIGGER trg_3;
23113
23114# check trigger-12 success: 	1
23115DELETE FROM t1
23116WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23117AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23118AND f_charbig = '####updated per insert trigger####';
23119ANALYZE  TABLE t1;
23120Table	Op	Msg_type	Msg_text
23121test.t1	analyze	status	OK
23122CHECK    TABLE t1 EXTENDED;
23123Table	Op	Msg_type	Msg_text
23124test.t1	check	status	OK
23125CHECKSUM TABLE t1 EXTENDED;
23126Table	Checksum
23127test.t1	<some_value>
23128OPTIMIZE TABLE t1;
23129Table	Op	Msg_type	Msg_text
23130test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
23131test.t1	optimize	status	OK
23132# check layout success:    1
23133REPAIR   TABLE t1 EXTENDED;
23134Table	Op	Msg_type	Msg_text
23135test.t1	repair	status	OK
23136# check layout success:    1
23137TRUNCATE t1;
23138
23139# check TRUNCATE success: 	1
23140# check layout success:    1
23141# End usability test (inc/partition_check.inc)
23142DROP TABLE t1;
23143CREATE TABLE t1 (
23144f_int1 INTEGER,
23145f_int2 INTEGER,
23146f_char1 CHAR(20),
23147f_char2 CHAR(20),
23148f_charbig VARCHAR(1000)
23149, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
23150)
23151PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
23152(PARTITION part1 VALUES IN (0)
23153(SUBPARTITION sp11, SUBPARTITION sp12),
23154PARTITION part2 VALUES IN (1)
23155(SUBPARTITION sp21, SUBPARTITION sp22),
23156PARTITION part3 VALUES IN (2)
23157(SUBPARTITION sp31, SUBPARTITION sp32),
23158PARTITION part4 VALUES IN (NULL)
23159(SUBPARTITION sp41, SUBPARTITION sp42));
23160INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23161SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
23162# Start usability test (inc/partition_check.inc)
23163create_command
23164SHOW CREATE TABLE t1;
23165Table	Create Table
23166t1	CREATE TABLE `t1` (
23167  `f_int1` int(11) NOT NULL,
23168  `f_int2` int(11) NOT NULL,
23169  `f_char1` char(20) DEFAULT NULL,
23170  `f_char2` char(20) DEFAULT NULL,
23171  `f_charbig` varchar(1000) DEFAULT NULL,
23172  PRIMARY KEY (`f_int2`,`f_int1`),
23173  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
23174) ENGINE=InnoDB DEFAULT CHARSET=latin1
23175/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
23176SUBPARTITION BY HASH (f_int2 + 1)
23177(PARTITION part1 VALUES IN (0)
23178 (SUBPARTITION sp11 ENGINE = InnoDB,
23179  SUBPARTITION sp12 ENGINE = InnoDB),
23180 PARTITION part2 VALUES IN (1)
23181 (SUBPARTITION sp21 ENGINE = InnoDB,
23182  SUBPARTITION sp22 ENGINE = InnoDB),
23183 PARTITION part3 VALUES IN (2)
23184 (SUBPARTITION sp31 ENGINE = InnoDB,
23185  SUBPARTITION sp32 ENGINE = InnoDB),
23186 PARTITION part4 VALUES IN (NULL)
23187 (SUBPARTITION sp41 ENGINE = InnoDB,
23188  SUBPARTITION sp42 ENGINE = InnoDB)) */
23189
23190unified filelist
23191t1#P#part1#SP#sp11.ibd
23192t1#P#part1#SP#sp12.ibd
23193t1#P#part2#SP#sp21.ibd
23194t1#P#part2#SP#sp22.ibd
23195t1#P#part3#SP#sp31.ibd
23196t1#P#part3#SP#sp32.ibd
23197t1#P#part4#SP#sp41.ibd
23198t1#P#part4#SP#sp42.ibd
23199t1.frm
23200
23201# check prerequisites-1 success:    1
23202# check COUNT(*) success:    1
23203# check MIN/MAX(f_int1) success:    1
23204# check MIN/MAX(f_int2) success:    1
23205INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23206SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23207CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23208WHERE f_int1 IN (2,3);
23209ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
23210# check prerequisites-3 success:    1
23211# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
23212INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23213SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23214CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23215WHERE f_int1 IN (2,3);
23216DELETE FROM t1 WHERE f_charbig = 'delete me';
23217INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23218SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23219CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23220WHERE f_int1 IN (2,3);
23221DELETE FROM t1 WHERE f_charbig = 'delete me';
23222# check read via f_int1 success: 1
23223# check read via f_int2 success: 1
23224
23225# check multiple-1 success: 	1
23226DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23227
23228# check multiple-2 success: 	1
23229INSERT INTO t1 SELECT * FROM t0_template
23230WHERE MOD(f_int1,3) = 0;
23231
23232# check multiple-3 success: 	1
23233UPDATE t1 SET f_int1 = f_int1 + @max_row
23234WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23235AND @max_row_div2 + @max_row_div4;
23236
23237# check multiple-4 success: 	1
23238DELETE FROM t1
23239WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23240AND @max_row_div2 + @max_row_div4 + @max_row;
23241
23242# check multiple-5 success: 	1
23243SELECT COUNT(*) INTO @try_count FROM t0_template
23244WHERE MOD(f_int1,3) = 0
23245AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23246SELECT COUNT(*) INTO @clash_count
23247FROM t1 INNER JOIN t0_template USING(f_int1)
23248WHERE MOD(f_int1,3) = 0
23249AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23250SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23251INSERT INTO t1
23252SET f_int1 = @cur_value , f_int2 = @cur_value,
23253f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23254f_charbig = '#SINGLE#';
23255
23256# check single-1 success: 	1
23257SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23258INSERT INTO t1
23259SET f_int1 = @cur_value , f_int2 = @cur_value,
23260f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23261f_charbig = '#SINGLE#';
23262
23263# check single-2 success: 	1
23264SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23265SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23266UPDATE t1 SET f_int1 = @cur_value2
23267WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23268
23269# check single-3 success: 	1
23270SET @cur_value1= -1;
23271SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23272UPDATE t1 SET f_int1 = @cur_value1
23273WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23274
23275# check single-4 success: 	1
23276SELECT MAX(f_int1) INTO @cur_value FROM t1;
23277DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23278
23279# check single-5 success: 	1
23280DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23281
23282# check single-6 success: 	1
23283INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23284
23285# check single-7 success: 	1
23286DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23287DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23288INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23289f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23290f_charbig = '#NULL#';
23291INSERT INTO t1
23292SET f_int1 = NULL , f_int2 = -@max_row,
23293f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23294f_charbig = '#NULL#';
23295ERROR 23000: Column 'f_int1' cannot be null
23296# check null success:    1
23297DELETE FROM t1
23298WHERE f_int1 = 0 AND f_int2 = 0
23299AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23300AND f_charbig = '#NULL#';
23301INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23302SELECT f_int1, f_int1, '', '', 'was inserted'
23303   FROM t0_template source_tab
23304WHERE MOD(f_int1,3) = 0
23305AND f_int1 BETWEEN @max_row_div2 AND @max_row
23306ON DUPLICATE KEY
23307UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
23308f_int2 = 2 * @max_row + source_tab.f_int1,
23309f_charbig = 'was updated';
23310
23311# check unique-1-a success: 	1
23312
23313# check unique-1-b success: 	1
23314DELETE FROM t1 WHERE f_charbig = 'was inserted';
23315UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23316f_int2 = CAST(f_char1 AS SIGNED INT),
23317f_charbig = CONCAT('===',f_char1,'===')
23318WHERE f_charbig = 'was updated';
23319REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23320SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
23321   FROM t0_template source_tab
23322WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23323
23324# check replace success: 	1
23325DELETE FROM t1
23326WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
23327DELETE FROM t1
23328WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
23329f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
23330UPDATE t1 SET f_int2 = f_int1,
23331f_char1 = CAST(f_int1 AS CHAR),
23332f_char2 = CAST(f_int1 AS CHAR),
23333f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
23334WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
23335SET AUTOCOMMIT= 0;
23336INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23337SELECT f_int1, f_int1, '', '', 'was inserted'
23338FROM t0_template source_tab
23339WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23340
23341# check transactions-1 success: 	1
23342COMMIT WORK;
23343
23344# check transactions-2 success: 	1
23345ROLLBACK WORK;
23346
23347# check transactions-3 success: 	1
23348DELETE FROM t1 WHERE f_charbig = 'was inserted';
23349COMMIT WORK;
23350ROLLBACK WORK;
23351
23352# check transactions-4 success: 	1
23353INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23354SELECT f_int1, f_int1, '', '', 'was inserted'
23355FROM t0_template source_tab
23356WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23357
23358# check transactions-5 success: 	1
23359ROLLBACK WORK;
23360
23361# check transactions-6 success: 	1
23362# INFO: Storage engine used for t1 seems to be transactional.
23363COMMIT;
23364
23365# check transactions-7 success: 	1
23366DELETE FROM t1 WHERE f_charbig = 'was inserted';
23367COMMIT WORK;
23368SET @@session.sql_mode = 'traditional';
23369Warnings:
23370Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
23371SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23372INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23373SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23374'', '', 'was inserted' FROM t0_template
23375WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23376ERROR 22012: Division by 0
23377COMMIT;
23378
23379# check transactions-8 success: 	1
23380# INFO: Storage engine used for t1 seems to be able to revert
23381#       changes made by the failing statement.
23382SET @@session.sql_mode = '';
23383Warnings:
23384Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
23385SET AUTOCOMMIT= 1;
23386DELETE FROM t1 WHERE f_charbig = 'was inserted';
23387COMMIT WORK;
23388UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23389
23390# check special-1 success: 	1
23391UPDATE t1 SET f_charbig = '';
23392
23393# check special-2 success: 	1
23394UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23395INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23396SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23397WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23398INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23399SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23400'just inserted' FROM t0_template
23401WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23402CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23403BEGIN
23404UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23405f_charbig = 'updated by trigger'
23406      WHERE f_int1 = new.f_int1;
23407END|
23408INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23409SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23411
23412# check trigger-1 success: 	1
23413DROP TRIGGER trg_1;
23414UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23415f_int2 = CAST(f_char1 AS SIGNED INT),
23416f_charbig = 'just inserted'
23417   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23418DELETE FROM t0_aux
23419WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23420INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23421SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23422'just inserted' FROM t0_template
23423WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23424CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23425BEGIN
23426UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23427f_charbig = 'updated by trigger'
23428      WHERE f_int1 = new.f_int1;
23429END|
23430INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23431SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23432WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23433
23434# check trigger-2 success: 	1
23435DROP TRIGGER trg_1;
23436UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23437f_int2 = CAST(f_char1 AS SIGNED INT),
23438f_charbig = 'just inserted'
23439   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23440DELETE FROM t0_aux
23441WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23442INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23443SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23444'just inserted' FROM t0_template
23445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23446CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23447BEGIN
23448UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23449f_charbig = 'updated by trigger'
23450      WHERE f_int1 = new.f_int1;
23451END|
23452UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23453WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23454
23455# check trigger-3 success: 	1
23456DROP TRIGGER trg_1;
23457UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23458f_int2 = CAST(f_char1 AS SIGNED INT),
23459f_charbig = 'just inserted'
23460   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23461DELETE FROM t0_aux
23462WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23463INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23464SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23465'just inserted' FROM t0_template
23466WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23467CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23468BEGIN
23469UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23470f_charbig = 'updated by trigger'
23471      WHERE f_int1 = - old.f_int1;
23472END|
23473UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23474WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23475
23476# check trigger-4 success: 	1
23477DROP TRIGGER trg_1;
23478UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23479f_int2 = CAST(f_char1 AS SIGNED INT),
23480f_charbig = 'just inserted'
23481   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23482DELETE FROM t0_aux
23483WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23484INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23485SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23486'just inserted' FROM t0_template
23487WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23488CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23489BEGIN
23490UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23491f_charbig = 'updated by trigger'
23492      WHERE f_int1 = new.f_int1;
23493END|
23494UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23495WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23496
23497# check trigger-5 success: 	1
23498DROP TRIGGER trg_1;
23499UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23500f_int2 = CAST(f_char1 AS SIGNED INT),
23501f_charbig = 'just inserted'
23502   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23503DELETE FROM t0_aux
23504WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23505INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23506SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23507'just inserted' FROM t0_template
23508WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23509CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
23510BEGIN
23511UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23512f_charbig = 'updated by trigger'
23513      WHERE f_int1 = - old.f_int1;
23514END|
23515UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23516WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23517
23518# check trigger-6 success: 	1
23519DROP TRIGGER trg_1;
23520UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23521f_int2 = CAST(f_char1 AS SIGNED INT),
23522f_charbig = 'just inserted'
23523   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23524DELETE FROM t0_aux
23525WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23526INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23527SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23528'just inserted' FROM t0_template
23529WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23530CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
23531BEGIN
23532UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23533f_charbig = 'updated by trigger'
23534      WHERE f_int1 = - old.f_int1;
23535END|
23536DELETE FROM t0_aux
23537WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23538
23539# check trigger-7 success: 	1
23540DROP TRIGGER trg_1;
23541UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23542f_int2 = CAST(f_char1 AS SIGNED INT),
23543f_charbig = 'just inserted'
23544   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23545DELETE FROM t0_aux
23546WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23548SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23549'just inserted' FROM t0_template
23550WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23551CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
23552BEGIN
23553UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23554f_charbig = 'updated by trigger'
23555      WHERE f_int1 = - old.f_int1;
23556END|
23557DELETE FROM t0_aux
23558WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23559
23560# check trigger-8 success: 	1
23561DROP TRIGGER trg_1;
23562UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23563f_int2 = CAST(f_char1 AS SIGNED INT),
23564f_charbig = 'just inserted'
23565   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23566DELETE FROM t0_aux
23567WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23568DELETE FROM t1
23569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23570CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23571BEGIN
23572SET new.f_int1 = old.f_int1 + @max_row,
23573new.f_int2 = old.f_int2 - @max_row,
23574new.f_charbig = '####updated per update trigger####';
23575END|
23576UPDATE t1
23577SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23578f_charbig = '####updated per update statement itself####';
23579
23580# check trigger-9 success: 	1
23581DROP TRIGGER trg_2;
23582UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23583f_int2 = CAST(f_char1 AS SIGNED INT),
23584f_charbig = CONCAT('===',f_char1,'===');
23585CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
23586BEGIN
23587SET new.f_int1 = new.f_int1 + @max_row,
23588new.f_int2 = new.f_int2 - @max_row,
23589new.f_charbig = '####updated per update trigger####';
23590END|
23591UPDATE t1
23592SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
23593f_charbig = '####updated per update statement itself####';
23594
23595# check trigger-10 success: 	1
23596DROP TRIGGER trg_2;
23597UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23598f_int2 = CAST(f_char1 AS SIGNED INT),
23599f_charbig = CONCAT('===',f_char1,'===');
23600CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23601BEGIN
23602SET new.f_int1 = @my_max1 + @counter,
23603new.f_int2 = @my_min2 - @counter,
23604new.f_charbig = '####updated per insert trigger####';
23605SET @counter = @counter + 1;
23606END|
23607SET @counter = 1;
23608SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23609INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23610SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23611CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23612WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23613ORDER BY f_int1;
23614DROP TRIGGER trg_3;
23615
23616# check trigger-11 success: 	1
23617DELETE FROM t1
23618WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23619AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23620AND f_charbig = '####updated per insert trigger####';
23621CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
23622BEGIN
23623SET new.f_int1 = @my_max1 + @counter,
23624new.f_int2 = @my_min2 - @counter,
23625new.f_charbig = '####updated per insert trigger####';
23626SET @counter = @counter + 1;
23627END|
23628SET @counter = 1;
23629SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
23630INSERT INTO t1 (f_char1, f_char2, f_charbig)
23631SELECT CAST(f_int1 AS CHAR),
23632CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
23633WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
23634ORDER BY f_int1;
23635DROP TRIGGER trg_3;
23636
23637# check trigger-12 success: 	1
23638DELETE FROM t1
23639WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
23640AND f_int2 <> CAST(f_char1 AS SIGNED INT)
23641AND f_charbig = '####updated per insert trigger####';
23642ANALYZE  TABLE t1;
23643Table	Op	Msg_type	Msg_text
23644test.t1	analyze	status	OK
23645CHECK    TABLE t1 EXTENDED;
23646Table	Op	Msg_type	Msg_text
23647test.t1	check	status	OK
23648CHECKSUM TABLE t1 EXTENDED;
23649Table	Checksum
23650test.t1	<some_value>
23651OPTIMIZE TABLE t1;
23652Table	Op	Msg_type	Msg_text
23653test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
23654test.t1	optimize	status	OK
23655# check layout success:    1
23656REPAIR   TABLE t1 EXTENDED;
23657Table	Op	Msg_type	Msg_text
23658test.t1	repair	status	OK
23659# check layout success:    1
23660TRUNCATE t1;
23661
23662# check TRUNCATE success: 	1
23663# check layout success:    1
23664# End usability test (inc/partition_check.inc)
23665DROP TABLE t1;
23666CREATE TABLE t1 (
23667f_int1 INTEGER,
23668f_int2 INTEGER,
23669f_char1 CHAR(20),
23670f_char2 CHAR(20),
23671f_charbig VARCHAR(1000)
23672, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1)
23673)
23674PARTITION BY LIST(ABS(MOD(f_int1,2)))
23675SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
23676(PARTITION part1 VALUES IN (0),
23677PARTITION part2 VALUES IN (1),
23678PARTITION part3 VALUES IN (NULL));
23679INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23680SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
23681# Start usability test (inc/partition_check.inc)
23682create_command
23683SHOW CREATE TABLE t1;
23684Table	Create Table
23685t1	CREATE TABLE `t1` (
23686  `f_int1` int(11) NOT NULL,
23687  `f_int2` int(11) NOT NULL,
23688  `f_char1` char(20) DEFAULT NULL,
23689  `f_char2` char(20) DEFAULT NULL,
23690  `f_charbig` varchar(1000) DEFAULT NULL,
23691  PRIMARY KEY (`f_int2`,`f_int1`),
23692  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`)
23693) ENGINE=InnoDB DEFAULT CHARSET=latin1
23694/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
23695SUBPARTITION BY KEY (f_int2)
23696SUBPARTITIONS 3
23697(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
23698 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
23699 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
23700
23701unified filelist
23702t1#P#part1#SP#part1sp0.ibd
23703t1#P#part1#SP#part1sp1.ibd
23704t1#P#part1#SP#part1sp2.ibd
23705t1#P#part2#SP#part2sp0.ibd
23706t1#P#part2#SP#part2sp1.ibd
23707t1#P#part2#SP#part2sp2.ibd
23708t1#P#part3#SP#part3sp0.ibd
23709t1#P#part3#SP#part3sp1.ibd
23710t1#P#part3#SP#part3sp2.ibd
23711t1.frm
23712
23713# check prerequisites-1 success:    1
23714# check COUNT(*) success:    1
23715# check MIN/MAX(f_int1) success:    1
23716# check MIN/MAX(f_int2) success:    1
23717INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23718SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
23719CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
23720WHERE f_int1 IN (2,3);
23721ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
23722# check prerequisites-3 success:    1
23723# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
23724INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23725SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23726CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23727WHERE f_int1 IN (2,3);
23728DELETE FROM t1 WHERE f_charbig = 'delete me';
23729INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23730SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
23731CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
23732WHERE f_int1 IN (2,3);
23733DELETE FROM t1 WHERE f_charbig = 'delete me';
23734# check read via f_int1 success: 1
23735# check read via f_int2 success: 1
23736
23737# check multiple-1 success: 	1
23738DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
23739
23740# check multiple-2 success: 	1
23741INSERT INTO t1 SELECT * FROM t0_template
23742WHERE MOD(f_int1,3) = 0;
23743
23744# check multiple-3 success: 	1
23745UPDATE t1 SET f_int1 = f_int1 + @max_row
23746WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
23747AND @max_row_div2 + @max_row_div4;
23748
23749# check multiple-4 success: 	1
23750DELETE FROM t1
23751WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
23752AND @max_row_div2 + @max_row_div4 + @max_row;
23753
23754# check multiple-5 success: 	1
23755SELECT COUNT(*) INTO @try_count FROM t0_template
23756WHERE MOD(f_int1,3) = 0
23757AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23758SELECT COUNT(*) INTO @clash_count
23759FROM t1 INNER JOIN t0_template USING(f_int1)
23760WHERE MOD(f_int1,3) = 0
23761AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23762SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
23763INSERT INTO t1
23764SET f_int1 = @cur_value , f_int2 = @cur_value,
23765f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23766f_charbig = '#SINGLE#';
23767
23768# check single-1 success: 	1
23769SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
23770INSERT INTO t1
23771SET f_int1 = @cur_value , f_int2 = @cur_value,
23772f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
23773f_charbig = '#SINGLE#';
23774
23775# check single-2 success: 	1
23776SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
23777SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
23778UPDATE t1 SET f_int1 = @cur_value2
23779WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
23780
23781# check single-3 success: 	1
23782SET @cur_value1= -1;
23783SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
23784UPDATE t1 SET f_int1 = @cur_value1
23785WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
23786
23787# check single-4 success: 	1
23788SELECT MAX(f_int1) INTO @cur_value FROM t1;
23789DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
23790
23791# check single-5 success: 	1
23792DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
23793
23794# check single-6 success: 	1
23795INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
23796
23797# check single-7 success: 	1
23798DELETE FROM t1 WHERE f_charbig = '#2147483647##';
23799DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
23800INSERT t1 SET f_int1 = 0 , f_int2 = 0,
23801f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
23802f_charbig = '#NULL#';
23803INSERT INTO t1
23804SET f_int1 = NULL , f_int2 = -@max_row,
23805f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
23806f_charbig = '#NULL#';
23807ERROR 23000: Column 'f_int1' cannot be null
23808# check null success:    1
23809DELETE FROM t1
23810WHERE f_int1 = 0 AND f_int2 = 0
23811AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
23812AND f_charbig = '#NULL#';
23813INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23814SELECT f_int1, f_int1, '', '', 'was inserted'
23815   FROM t0_template source_tab
23816WHERE MOD(f_int1,3) = 0
23817AND f_int1 BETWEEN @max_row_div2 AND @max_row
23818ON DUPLICATE KEY
23819UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
23820f_int2 = 2 * @max_row + source_tab.f_int1,
23821f_charbig = 'was updated';
23822
23823# check unique-1-a success: 	1
23824
23825# check unique-1-b success: 	1
23826DELETE FROM t1 WHERE f_charbig = 'was inserted';
23827UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23828f_int2 = CAST(f_char1 AS SIGNED INT),
23829f_charbig = CONCAT('===',f_char1,'===')
23830WHERE f_charbig = 'was updated';
23831REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23832SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
23833   FROM t0_template source_tab
23834WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
23835
23836# check replace success: 	1
23837DELETE FROM t1
23838WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
23839DELETE FROM t1
23840WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
23841f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
23842UPDATE t1 SET f_int2 = f_int1,
23843f_char1 = CAST(f_int1 AS CHAR),
23844f_char2 = CAST(f_int1 AS CHAR),
23845f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
23846WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
23847SET AUTOCOMMIT= 0;
23848INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23849SELECT f_int1, f_int1, '', '', 'was inserted'
23850FROM t0_template source_tab
23851WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23852
23853# check transactions-1 success: 	1
23854COMMIT WORK;
23855
23856# check transactions-2 success: 	1
23857ROLLBACK WORK;
23858
23859# check transactions-3 success: 	1
23860DELETE FROM t1 WHERE f_charbig = 'was inserted';
23861COMMIT WORK;
23862ROLLBACK WORK;
23863
23864# check transactions-4 success: 	1
23865INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23866SELECT f_int1, f_int1, '', '', 'was inserted'
23867FROM t0_template source_tab
23868WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23869
23870# check transactions-5 success: 	1
23871ROLLBACK WORK;
23872
23873# check transactions-6 success: 	1
23874# INFO: Storage engine used for t1 seems to be transactional.
23875COMMIT;
23876
23877# check transactions-7 success: 	1
23878DELETE FROM t1 WHERE f_charbig = 'was inserted';
23879COMMIT WORK;
23880SET @@session.sql_mode = 'traditional';
23881Warnings:
23882Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
23883SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
23884INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
23885SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
23886'', '', 'was inserted' FROM t0_template
23887WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
23888ERROR 22012: Division by 0
23889COMMIT;
23890
23891# check transactions-8 success: 	1
23892# INFO: Storage engine used for t1 seems to be able to revert
23893#       changes made by the failing statement.
23894SET @@session.sql_mode = '';
23895Warnings:
23896Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
23897SET AUTOCOMMIT= 1;
23898DELETE FROM t1 WHERE f_charbig = 'was inserted';
23899COMMIT WORK;
23900UPDATE t1 SET f_charbig = REPEAT('b', 1000);
23901
23902# check special-1 success: 	1
23903UPDATE t1 SET f_charbig = '';
23904
23905# check special-2 success: 	1
23906UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
23907INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
23908SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
23909WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23910INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23911SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23912'just inserted' FROM t0_template
23913WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23914CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
23915BEGIN
23916UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23917f_charbig = 'updated by trigger'
23918      WHERE f_int1 = new.f_int1;
23919END|
23920INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23921SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23922WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23923
23924# check trigger-1 success: 	1
23925DROP TRIGGER trg_1;
23926UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23927f_int2 = CAST(f_char1 AS SIGNED INT),
23928f_charbig = 'just inserted'
23929   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23930DELETE FROM t0_aux
23931WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23932INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23933SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23934'just inserted' FROM t0_template
23935WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23936CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
23937BEGIN
23938UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23939f_charbig = 'updated by trigger'
23940      WHERE f_int1 = new.f_int1;
23941END|
23942INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23943SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
23944WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23945
23946# check trigger-2 success: 	1
23947DROP TRIGGER trg_1;
23948UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23949f_int2 = CAST(f_char1 AS SIGNED INT),
23950f_charbig = 'just inserted'
23951   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23952DELETE FROM t0_aux
23953WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23954INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23955SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23956'just inserted' FROM t0_template
23957WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23958CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23959BEGIN
23960UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23961f_charbig = 'updated by trigger'
23962      WHERE f_int1 = new.f_int1;
23963END|
23964UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23965WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23966
23967# check trigger-3 success: 	1
23968DROP TRIGGER trg_1;
23969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23970f_int2 = CAST(f_char1 AS SIGNED INT),
23971f_charbig = 'just inserted'
23972   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23973DELETE FROM t0_aux
23974WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23975INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23976SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23977'just inserted' FROM t0_template
23978WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23979CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
23980BEGIN
23981UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
23982f_charbig = 'updated by trigger'
23983      WHERE f_int1 = - old.f_int1;
23984END|
23985UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
23986WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
23987
23988# check trigger-4 success: 	1
23989DROP TRIGGER trg_1;
23990UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
23991f_int2 = CAST(f_char1 AS SIGNED INT),
23992f_charbig = 'just inserted'
23993   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
23994DELETE FROM t0_aux
23995WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
23996INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
23997SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
23998'just inserted' FROM t0_template
23999WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24000CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24001BEGIN
24002UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24003f_charbig = 'updated by trigger'
24004      WHERE f_int1 = new.f_int1;
24005END|
24006UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24007WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24008
24009# check trigger-5 success: 	1
24010DROP TRIGGER trg_1;
24011UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24012f_int2 = CAST(f_char1 AS SIGNED INT),
24013f_charbig = 'just inserted'
24014   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24015DELETE FROM t0_aux
24016WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24017INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24018SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24019'just inserted' FROM t0_template
24020WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24021CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24022BEGIN
24023UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24024f_charbig = 'updated by trigger'
24025      WHERE f_int1 = - old.f_int1;
24026END|
24027UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24028WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24029
24030# check trigger-6 success: 	1
24031DROP TRIGGER trg_1;
24032UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24033f_int2 = CAST(f_char1 AS SIGNED INT),
24034f_charbig = 'just inserted'
24035   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24036DELETE FROM t0_aux
24037WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24038INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24039SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24040'just inserted' FROM t0_template
24041WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24042CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24043BEGIN
24044UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24045f_charbig = 'updated by trigger'
24046      WHERE f_int1 = - old.f_int1;
24047END|
24048DELETE FROM t0_aux
24049WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24050
24051# check trigger-7 success: 	1
24052DROP TRIGGER trg_1;
24053UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24054f_int2 = CAST(f_char1 AS SIGNED INT),
24055f_charbig = 'just inserted'
24056   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24057DELETE FROM t0_aux
24058WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24059INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24060SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24061'just inserted' FROM t0_template
24062WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24063CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24064BEGIN
24065UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24066f_charbig = 'updated by trigger'
24067      WHERE f_int1 = - old.f_int1;
24068END|
24069DELETE FROM t0_aux
24070WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24071
24072# check trigger-8 success: 	1
24073DROP TRIGGER trg_1;
24074UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24075f_int2 = CAST(f_char1 AS SIGNED INT),
24076f_charbig = 'just inserted'
24077   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24078DELETE FROM t0_aux
24079WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24080DELETE FROM t1
24081WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24082CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24083BEGIN
24084SET new.f_int1 = old.f_int1 + @max_row,
24085new.f_int2 = old.f_int2 - @max_row,
24086new.f_charbig = '####updated per update trigger####';
24087END|
24088UPDATE t1
24089SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24090f_charbig = '####updated per update statement itself####';
24091
24092# check trigger-9 success: 	1
24093DROP TRIGGER trg_2;
24094UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24095f_int2 = CAST(f_char1 AS SIGNED INT),
24096f_charbig = CONCAT('===',f_char1,'===');
24097CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24098BEGIN
24099SET new.f_int1 = new.f_int1 + @max_row,
24100new.f_int2 = new.f_int2 - @max_row,
24101new.f_charbig = '####updated per update trigger####';
24102END|
24103UPDATE t1
24104SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24105f_charbig = '####updated per update statement itself####';
24106
24107# check trigger-10 success: 	1
24108DROP TRIGGER trg_2;
24109UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24110f_int2 = CAST(f_char1 AS SIGNED INT),
24111f_charbig = CONCAT('===',f_char1,'===');
24112CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24113BEGIN
24114SET new.f_int1 = @my_max1 + @counter,
24115new.f_int2 = @my_min2 - @counter,
24116new.f_charbig = '####updated per insert trigger####';
24117SET @counter = @counter + 1;
24118END|
24119SET @counter = 1;
24120SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24122SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24123CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24124WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24125ORDER BY f_int1;
24126DROP TRIGGER trg_3;
24127
24128# check trigger-11 success: 	1
24129DELETE FROM t1
24130WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24131AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24132AND f_charbig = '####updated per insert trigger####';
24133CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24134BEGIN
24135SET new.f_int1 = @my_max1 + @counter,
24136new.f_int2 = @my_min2 - @counter,
24137new.f_charbig = '####updated per insert trigger####';
24138SET @counter = @counter + 1;
24139END|
24140SET @counter = 1;
24141SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24142INSERT INTO t1 (f_char1, f_char2, f_charbig)
24143SELECT CAST(f_int1 AS CHAR),
24144CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24146ORDER BY f_int1;
24147DROP TRIGGER trg_3;
24148
24149# check trigger-12 success: 	1
24150DELETE FROM t1
24151WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24152AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24153AND f_charbig = '####updated per insert trigger####';
24154ANALYZE  TABLE t1;
24155Table	Op	Msg_type	Msg_text
24156test.t1	analyze	status	OK
24157CHECK    TABLE t1 EXTENDED;
24158Table	Op	Msg_type	Msg_text
24159test.t1	check	status	OK
24160CHECKSUM TABLE t1 EXTENDED;
24161Table	Checksum
24162test.t1	<some_value>
24163OPTIMIZE TABLE t1;
24164Table	Op	Msg_type	Msg_text
24165test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
24166test.t1	optimize	status	OK
24167# check layout success:    1
24168REPAIR   TABLE t1 EXTENDED;
24169Table	Op	Msg_type	Msg_text
24170test.t1	repair	status	OK
24171# check layout success:    1
24172TRUNCATE t1;
24173
24174# check TRUNCATE success: 	1
24175# check layout success:    1
24176# End usability test (inc/partition_check.inc)
24177DROP TABLE t1;
24178DROP TABLE IF EXISTS t1;
24179CREATE TABLE t1 (
24180f_int1 INTEGER,
24181f_int2 INTEGER,
24182f_char1 CHAR(20),
24183f_char2 CHAR(20),
24184f_charbig VARCHAR(1000)
24185, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
24186)
24187PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
24188INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24189SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
24190# Start usability test (inc/partition_check.inc)
24191create_command
24192SHOW CREATE TABLE t1;
24193Table	Create Table
24194t1	CREATE TABLE `t1` (
24195  `f_int1` int(11) NOT NULL,
24196  `f_int2` int(11) NOT NULL,
24197  `f_char1` char(20) DEFAULT NULL,
24198  `f_char2` char(20) DEFAULT NULL,
24199  `f_charbig` varchar(1000) DEFAULT NULL,
24200  PRIMARY KEY (`f_int1`,`f_int2`),
24201  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
24202) ENGINE=InnoDB DEFAULT CHARSET=latin1
24203/*!50100 PARTITION BY HASH (f_int1 + f_int2)
24204PARTITIONS 2 */
24205
24206unified filelist
24207t1#P#p0.ibd
24208t1#P#p1.ibd
24209t1.frm
24210
24211# check prerequisites-1 success:    1
24212# check COUNT(*) success:    1
24213# check MIN/MAX(f_int1) success:    1
24214# check MIN/MAX(f_int2) success:    1
24215INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24216SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24217CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24218WHERE f_int1 IN (2,3);
24219ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
24220# check prerequisites-3 success:    1
24221# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
24222INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24223SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24224CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24225WHERE f_int1 IN (2,3);
24226DELETE FROM t1 WHERE f_charbig = 'delete me';
24227INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24228SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24229CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24230WHERE f_int1 IN (2,3);
24231DELETE FROM t1 WHERE f_charbig = 'delete me';
24232# check read via f_int1 success: 1
24233# check read via f_int2 success: 1
24234
24235# check multiple-1 success: 	1
24236DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24237
24238# check multiple-2 success: 	1
24239INSERT INTO t1 SELECT * FROM t0_template
24240WHERE MOD(f_int1,3) = 0;
24241
24242# check multiple-3 success: 	1
24243UPDATE t1 SET f_int1 = f_int1 + @max_row
24244WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24245AND @max_row_div2 + @max_row_div4;
24246
24247# check multiple-4 success: 	1
24248DELETE FROM t1
24249WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24250AND @max_row_div2 + @max_row_div4 + @max_row;
24251
24252# check multiple-5 success: 	1
24253SELECT COUNT(*) INTO @try_count FROM t0_template
24254WHERE MOD(f_int1,3) = 0
24255AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24256SELECT COUNT(*) INTO @clash_count
24257FROM t1 INNER JOIN t0_template USING(f_int1)
24258WHERE MOD(f_int1,3) = 0
24259AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24260SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24261INSERT INTO t1
24262SET f_int1 = @cur_value , f_int2 = @cur_value,
24263f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24264f_charbig = '#SINGLE#';
24265
24266# check single-1 success: 	1
24267SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24268INSERT INTO t1
24269SET f_int1 = @cur_value , f_int2 = @cur_value,
24270f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24271f_charbig = '#SINGLE#';
24272
24273# check single-2 success: 	1
24274SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24275SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24276UPDATE t1 SET f_int1 = @cur_value2
24277WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24278
24279# check single-3 success: 	1
24280SET @cur_value1= -1;
24281SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24282UPDATE t1 SET f_int1 = @cur_value1
24283WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24284
24285# check single-4 success: 	1
24286SELECT MAX(f_int1) INTO @cur_value FROM t1;
24287DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24288
24289# check single-5 success: 	1
24290DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24291
24292# check single-6 success: 	1
24293INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24294
24295# check single-7 success: 	1
24296DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24297DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24298INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24299f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24300f_charbig = '#NULL#';
24301INSERT INTO t1
24302SET f_int1 = NULL , f_int2 = -@max_row,
24303f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24304f_charbig = '#NULL#';
24305ERROR 23000: Column 'f_int1' cannot be null
24306# check null success:    1
24307DELETE FROM t1
24308WHERE f_int1 = 0 AND f_int2 = 0
24309AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24310AND f_charbig = '#NULL#';
24311INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24312SELECT f_int1, f_int1, '', '', 'was inserted'
24313   FROM t0_template source_tab
24314WHERE MOD(f_int1,3) = 0
24315AND f_int1 BETWEEN @max_row_div2 AND @max_row
24316ON DUPLICATE KEY
24317UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
24318f_int2 = 2 * @max_row + source_tab.f_int1,
24319f_charbig = 'was updated';
24320
24321# check unique-1-a success: 	1
24322
24323# check unique-1-b success: 	1
24324DELETE FROM t1 WHERE f_charbig = 'was inserted';
24325UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24326f_int2 = CAST(f_char1 AS SIGNED INT),
24327f_charbig = CONCAT('===',f_char1,'===')
24328WHERE f_charbig = 'was updated';
24329REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24330SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
24331   FROM t0_template source_tab
24332WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24333
24334# check replace success: 	1
24335DELETE FROM t1
24336WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
24337DELETE FROM t1
24338WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
24339f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
24340UPDATE t1 SET f_int2 = f_int1,
24341f_char1 = CAST(f_int1 AS CHAR),
24342f_char2 = CAST(f_int1 AS CHAR),
24343f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
24344WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
24345SET AUTOCOMMIT= 0;
24346INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24347SELECT f_int1, f_int1, '', '', 'was inserted'
24348FROM t0_template source_tab
24349WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24350
24351# check transactions-1 success: 	1
24352COMMIT WORK;
24353
24354# check transactions-2 success: 	1
24355ROLLBACK WORK;
24356
24357# check transactions-3 success: 	1
24358DELETE FROM t1 WHERE f_charbig = 'was inserted';
24359COMMIT WORK;
24360ROLLBACK WORK;
24361
24362# check transactions-4 success: 	1
24363INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24364SELECT f_int1, f_int1, '', '', 'was inserted'
24365FROM t0_template source_tab
24366WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24367
24368# check transactions-5 success: 	1
24369ROLLBACK WORK;
24370
24371# check transactions-6 success: 	1
24372# INFO: Storage engine used for t1 seems to be transactional.
24373COMMIT;
24374
24375# check transactions-7 success: 	1
24376DELETE FROM t1 WHERE f_charbig = 'was inserted';
24377COMMIT WORK;
24378SET @@session.sql_mode = 'traditional';
24379Warnings:
24380Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
24381SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24382INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24383SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24384'', '', 'was inserted' FROM t0_template
24385WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24386ERROR 22012: Division by 0
24387COMMIT;
24388
24389# check transactions-8 success: 	1
24390# INFO: Storage engine used for t1 seems to be able to revert
24391#       changes made by the failing statement.
24392SET @@session.sql_mode = '';
24393Warnings:
24394Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
24395SET AUTOCOMMIT= 1;
24396DELETE FROM t1 WHERE f_charbig = 'was inserted';
24397COMMIT WORK;
24398UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24399
24400# check special-1 success: 	1
24401UPDATE t1 SET f_charbig = '';
24402
24403# check special-2 success: 	1
24404UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24405INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24406SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24408INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24409SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24410'just inserted' FROM t0_template
24411WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24412CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24413BEGIN
24414UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24415f_charbig = 'updated by trigger'
24416      WHERE f_int1 = new.f_int1;
24417END|
24418INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24419SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24420WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24421
24422# check trigger-1 success: 	1
24423DROP TRIGGER trg_1;
24424UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24425f_int2 = CAST(f_char1 AS SIGNED INT),
24426f_charbig = 'just inserted'
24427   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24428DELETE FROM t0_aux
24429WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24430INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24431SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24432'just inserted' FROM t0_template
24433WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24434CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24435BEGIN
24436UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24437f_charbig = 'updated by trigger'
24438      WHERE f_int1 = new.f_int1;
24439END|
24440INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24441SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24442WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24443
24444# check trigger-2 success: 	1
24445DROP TRIGGER trg_1;
24446UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24447f_int2 = CAST(f_char1 AS SIGNED INT),
24448f_charbig = 'just inserted'
24449   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24450DELETE FROM t0_aux
24451WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24452INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24453SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24454'just inserted' FROM t0_template
24455WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24456CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24457BEGIN
24458UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24459f_charbig = 'updated by trigger'
24460      WHERE f_int1 = new.f_int1;
24461END|
24462UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24463WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24464
24465# check trigger-3 success: 	1
24466DROP TRIGGER trg_1;
24467UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24468f_int2 = CAST(f_char1 AS SIGNED INT),
24469f_charbig = 'just inserted'
24470   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24471DELETE FROM t0_aux
24472WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24473INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24474SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24475'just inserted' FROM t0_template
24476WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24477CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24478BEGIN
24479UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24480f_charbig = 'updated by trigger'
24481      WHERE f_int1 = - old.f_int1;
24482END|
24483UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24484WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24485
24486# check trigger-4 success: 	1
24487DROP TRIGGER trg_1;
24488UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24489f_int2 = CAST(f_char1 AS SIGNED INT),
24490f_charbig = 'just inserted'
24491   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24492DELETE FROM t0_aux
24493WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24494INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24495SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24496'just inserted' FROM t0_template
24497WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24498CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24499BEGIN
24500UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24501f_charbig = 'updated by trigger'
24502      WHERE f_int1 = new.f_int1;
24503END|
24504UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24505WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24506
24507# check trigger-5 success: 	1
24508DROP TRIGGER trg_1;
24509UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24510f_int2 = CAST(f_char1 AS SIGNED INT),
24511f_charbig = 'just inserted'
24512   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24513DELETE FROM t0_aux
24514WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24515INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24516SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24517'just inserted' FROM t0_template
24518WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24519CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24520BEGIN
24521UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24522f_charbig = 'updated by trigger'
24523      WHERE f_int1 = - old.f_int1;
24524END|
24525UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24526WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24527
24528# check trigger-6 success: 	1
24529DROP TRIGGER trg_1;
24530UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24531f_int2 = CAST(f_char1 AS SIGNED INT),
24532f_charbig = 'just inserted'
24533   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24534DELETE FROM t0_aux
24535WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24536INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24537SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24538'just inserted' FROM t0_template
24539WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24540CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
24541BEGIN
24542UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24543f_charbig = 'updated by trigger'
24544      WHERE f_int1 = - old.f_int1;
24545END|
24546DELETE FROM t0_aux
24547WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24548
24549# check trigger-7 success: 	1
24550DROP TRIGGER trg_1;
24551UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24552f_int2 = CAST(f_char1 AS SIGNED INT),
24553f_charbig = 'just inserted'
24554   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24555DELETE FROM t0_aux
24556WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24557INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24558SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24559'just inserted' FROM t0_template
24560WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24561CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
24562BEGIN
24563UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24564f_charbig = 'updated by trigger'
24565      WHERE f_int1 = - old.f_int1;
24566END|
24567DELETE FROM t0_aux
24568WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24569
24570# check trigger-8 success: 	1
24571DROP TRIGGER trg_1;
24572UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24573f_int2 = CAST(f_char1 AS SIGNED INT),
24574f_charbig = 'just inserted'
24575   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24576DELETE FROM t0_aux
24577WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24578DELETE FROM t1
24579WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24580CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24581BEGIN
24582SET new.f_int1 = old.f_int1 + @max_row,
24583new.f_int2 = old.f_int2 - @max_row,
24584new.f_charbig = '####updated per update trigger####';
24585END|
24586UPDATE t1
24587SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24588f_charbig = '####updated per update statement itself####';
24589
24590# check trigger-9 success: 	1
24591DROP TRIGGER trg_2;
24592UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24593f_int2 = CAST(f_char1 AS SIGNED INT),
24594f_charbig = CONCAT('===',f_char1,'===');
24595CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
24596BEGIN
24597SET new.f_int1 = new.f_int1 + @max_row,
24598new.f_int2 = new.f_int2 - @max_row,
24599new.f_charbig = '####updated per update trigger####';
24600END|
24601UPDATE t1
24602SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
24603f_charbig = '####updated per update statement itself####';
24604
24605# check trigger-10 success: 	1
24606DROP TRIGGER trg_2;
24607UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24608f_int2 = CAST(f_char1 AS SIGNED INT),
24609f_charbig = CONCAT('===',f_char1,'===');
24610CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24611BEGIN
24612SET new.f_int1 = @my_max1 + @counter,
24613new.f_int2 = @my_min2 - @counter,
24614new.f_charbig = '####updated per insert trigger####';
24615SET @counter = @counter + 1;
24616END|
24617SET @counter = 1;
24618SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24619INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24620SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24621CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24622WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24623ORDER BY f_int1;
24624DROP TRIGGER trg_3;
24625
24626# check trigger-11 success: 	1
24627DELETE FROM t1
24628WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24629AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24630AND f_charbig = '####updated per insert trigger####';
24631CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
24632BEGIN
24633SET new.f_int1 = @my_max1 + @counter,
24634new.f_int2 = @my_min2 - @counter,
24635new.f_charbig = '####updated per insert trigger####';
24636SET @counter = @counter + 1;
24637END|
24638SET @counter = 1;
24639SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
24640INSERT INTO t1 (f_char1, f_char2, f_charbig)
24641SELECT CAST(f_int1 AS CHAR),
24642CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
24643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
24644ORDER BY f_int1;
24645DROP TRIGGER trg_3;
24646
24647# check trigger-12 success: 	1
24648DELETE FROM t1
24649WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
24650AND f_int2 <> CAST(f_char1 AS SIGNED INT)
24651AND f_charbig = '####updated per insert trigger####';
24652ANALYZE  TABLE t1;
24653Table	Op	Msg_type	Msg_text
24654test.t1	analyze	status	OK
24655CHECK    TABLE t1 EXTENDED;
24656Table	Op	Msg_type	Msg_text
24657test.t1	check	status	OK
24658CHECKSUM TABLE t1 EXTENDED;
24659Table	Checksum
24660test.t1	<some_value>
24661OPTIMIZE TABLE t1;
24662Table	Op	Msg_type	Msg_text
24663test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
24664test.t1	optimize	status	OK
24665# check layout success:    1
24666REPAIR   TABLE t1 EXTENDED;
24667Table	Op	Msg_type	Msg_text
24668test.t1	repair	status	OK
24669# check layout success:    1
24670TRUNCATE t1;
24671
24672# check TRUNCATE success: 	1
24673# check layout success:    1
24674# End usability test (inc/partition_check.inc)
24675DROP TABLE t1;
24676CREATE TABLE t1 (
24677f_int1 INTEGER,
24678f_int2 INTEGER,
24679f_char1 CHAR(20),
24680f_char2 CHAR(20),
24681f_charbig VARCHAR(1000)
24682, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
24683)
24684PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
24685INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24686SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
24687# Start usability test (inc/partition_check.inc)
24688create_command
24689SHOW CREATE TABLE t1;
24690Table	Create Table
24691t1	CREATE TABLE `t1` (
24692  `f_int1` int(11) NOT NULL,
24693  `f_int2` int(11) NOT NULL,
24694  `f_char1` char(20) DEFAULT NULL,
24695  `f_char2` char(20) DEFAULT NULL,
24696  `f_charbig` varchar(1000) DEFAULT NULL,
24697  PRIMARY KEY (`f_int1`,`f_int2`),
24698  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
24699) ENGINE=InnoDB DEFAULT CHARSET=latin1
24700/*!50100 PARTITION BY KEY (f_int1,f_int2)
24701PARTITIONS 5 */
24702
24703unified filelist
24704t1#P#p0.ibd
24705t1#P#p1.ibd
24706t1#P#p2.ibd
24707t1#P#p3.ibd
24708t1#P#p4.ibd
24709t1.frm
24710
24711# check prerequisites-1 success:    1
24712# check COUNT(*) success:    1
24713# check MIN/MAX(f_int1) success:    1
24714# check MIN/MAX(f_int2) success:    1
24715INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24716SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
24717CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
24718WHERE f_int1 IN (2,3);
24719ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
24720# check prerequisites-3 success:    1
24721# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
24722INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24723SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24724CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24725WHERE f_int1 IN (2,3);
24726DELETE FROM t1 WHERE f_charbig = 'delete me';
24727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24728SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
24729CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
24730WHERE f_int1 IN (2,3);
24731DELETE FROM t1 WHERE f_charbig = 'delete me';
24732# check read via f_int1 success: 1
24733# check read via f_int2 success: 1
24734
24735# check multiple-1 success: 	1
24736DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
24737
24738# check multiple-2 success: 	1
24739INSERT INTO t1 SELECT * FROM t0_template
24740WHERE MOD(f_int1,3) = 0;
24741
24742# check multiple-3 success: 	1
24743UPDATE t1 SET f_int1 = f_int1 + @max_row
24744WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
24745AND @max_row_div2 + @max_row_div4;
24746
24747# check multiple-4 success: 	1
24748DELETE FROM t1
24749WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
24750AND @max_row_div2 + @max_row_div4 + @max_row;
24751
24752# check multiple-5 success: 	1
24753SELECT COUNT(*) INTO @try_count FROM t0_template
24754WHERE MOD(f_int1,3) = 0
24755AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24756SELECT COUNT(*) INTO @clash_count
24757FROM t1 INNER JOIN t0_template USING(f_int1)
24758WHERE MOD(f_int1,3) = 0
24759AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24760SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
24761INSERT INTO t1
24762SET f_int1 = @cur_value , f_int2 = @cur_value,
24763f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24764f_charbig = '#SINGLE#';
24765
24766# check single-1 success: 	1
24767SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
24768INSERT INTO t1
24769SET f_int1 = @cur_value , f_int2 = @cur_value,
24770f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
24771f_charbig = '#SINGLE#';
24772
24773# check single-2 success: 	1
24774SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
24775SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
24776UPDATE t1 SET f_int1 = @cur_value2
24777WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
24778
24779# check single-3 success: 	1
24780SET @cur_value1= -1;
24781SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
24782UPDATE t1 SET f_int1 = @cur_value1
24783WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
24784
24785# check single-4 success: 	1
24786SELECT MAX(f_int1) INTO @cur_value FROM t1;
24787DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
24788
24789# check single-5 success: 	1
24790DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
24791
24792# check single-6 success: 	1
24793INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
24794
24795# check single-7 success: 	1
24796DELETE FROM t1 WHERE f_charbig = '#2147483647##';
24797DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
24798INSERT t1 SET f_int1 = 0 , f_int2 = 0,
24799f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
24800f_charbig = '#NULL#';
24801INSERT INTO t1
24802SET f_int1 = NULL , f_int2 = -@max_row,
24803f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
24804f_charbig = '#NULL#';
24805ERROR 23000: Column 'f_int1' cannot be null
24806# check null success:    1
24807DELETE FROM t1
24808WHERE f_int1 = 0 AND f_int2 = 0
24809AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
24810AND f_charbig = '#NULL#';
24811INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24812SELECT f_int1, f_int1, '', '', 'was inserted'
24813   FROM t0_template source_tab
24814WHERE MOD(f_int1,3) = 0
24815AND f_int1 BETWEEN @max_row_div2 AND @max_row
24816ON DUPLICATE KEY
24817UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
24818f_int2 = 2 * @max_row + source_tab.f_int1,
24819f_charbig = 'was updated';
24820
24821# check unique-1-a success: 	1
24822
24823# check unique-1-b success: 	1
24824DELETE FROM t1 WHERE f_charbig = 'was inserted';
24825UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24826f_int2 = CAST(f_char1 AS SIGNED INT),
24827f_charbig = CONCAT('===',f_char1,'===')
24828WHERE f_charbig = 'was updated';
24829REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24830SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
24831   FROM t0_template source_tab
24832WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
24833
24834# check replace success: 	1
24835DELETE FROM t1
24836WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
24837DELETE FROM t1
24838WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
24839f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
24840UPDATE t1 SET f_int2 = f_int1,
24841f_char1 = CAST(f_int1 AS CHAR),
24842f_char2 = CAST(f_int1 AS CHAR),
24843f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
24844WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
24845SET AUTOCOMMIT= 0;
24846INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24847SELECT f_int1, f_int1, '', '', 'was inserted'
24848FROM t0_template source_tab
24849WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24850
24851# check transactions-1 success: 	1
24852COMMIT WORK;
24853
24854# check transactions-2 success: 	1
24855ROLLBACK WORK;
24856
24857# check transactions-3 success: 	1
24858DELETE FROM t1 WHERE f_charbig = 'was inserted';
24859COMMIT WORK;
24860ROLLBACK WORK;
24861
24862# check transactions-4 success: 	1
24863INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24864SELECT f_int1, f_int1, '', '', 'was inserted'
24865FROM t0_template source_tab
24866WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24867
24868# check transactions-5 success: 	1
24869ROLLBACK WORK;
24870
24871# check transactions-6 success: 	1
24872# INFO: Storage engine used for t1 seems to be transactional.
24873COMMIT;
24874
24875# check transactions-7 success: 	1
24876DELETE FROM t1 WHERE f_charbig = 'was inserted';
24877COMMIT WORK;
24878SET @@session.sql_mode = 'traditional';
24879Warnings:
24880Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
24881SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
24882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
24883SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
24884'', '', 'was inserted' FROM t0_template
24885WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
24886ERROR 22012: Division by 0
24887COMMIT;
24888
24889# check transactions-8 success: 	1
24890# INFO: Storage engine used for t1 seems to be able to revert
24891#       changes made by the failing statement.
24892SET @@session.sql_mode = '';
24893Warnings:
24894Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
24895SET AUTOCOMMIT= 1;
24896DELETE FROM t1 WHERE f_charbig = 'was inserted';
24897COMMIT WORK;
24898UPDATE t1 SET f_charbig = REPEAT('b', 1000);
24899
24900# check special-1 success: 	1
24901UPDATE t1 SET f_charbig = '';
24902
24903# check special-2 success: 	1
24904UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
24905INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
24906SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
24907WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24908INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24909SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24910'just inserted' FROM t0_template
24911WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24912CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
24913BEGIN
24914UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24915f_charbig = 'updated by trigger'
24916      WHERE f_int1 = new.f_int1;
24917END|
24918INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24919SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24920WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24921
24922# check trigger-1 success: 	1
24923DROP TRIGGER trg_1;
24924UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24925f_int2 = CAST(f_char1 AS SIGNED INT),
24926f_charbig = 'just inserted'
24927   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24928DELETE FROM t0_aux
24929WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24930INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24931SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24932'just inserted' FROM t0_template
24933WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24934CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
24935BEGIN
24936UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24937f_charbig = 'updated by trigger'
24938      WHERE f_int1 = new.f_int1;
24939END|
24940INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24941SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
24942WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24943
24944# check trigger-2 success: 	1
24945DROP TRIGGER trg_1;
24946UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24947f_int2 = CAST(f_char1 AS SIGNED INT),
24948f_charbig = 'just inserted'
24949   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24950DELETE FROM t0_aux
24951WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24952INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24953SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24954'just inserted' FROM t0_template
24955WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24956CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24957BEGIN
24958UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24959f_charbig = 'updated by trigger'
24960      WHERE f_int1 = new.f_int1;
24961END|
24962UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24963WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24964
24965# check trigger-3 success: 	1
24966DROP TRIGGER trg_1;
24967UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24968f_int2 = CAST(f_char1 AS SIGNED INT),
24969f_charbig = 'just inserted'
24970   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24971DELETE FROM t0_aux
24972WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24973INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24974SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24975'just inserted' FROM t0_template
24976WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24977CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
24978BEGIN
24979UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
24980f_charbig = 'updated by trigger'
24981      WHERE f_int1 = - old.f_int1;
24982END|
24983UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
24984WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
24985
24986# check trigger-4 success: 	1
24987DROP TRIGGER trg_1;
24988UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
24989f_int2 = CAST(f_char1 AS SIGNED INT),
24990f_charbig = 'just inserted'
24991   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
24992DELETE FROM t0_aux
24993WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24994INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
24995SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
24996'just inserted' FROM t0_template
24997WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
24998CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
24999BEGIN
25000UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25001f_charbig = 'updated by trigger'
25002      WHERE f_int1 = new.f_int1;
25003END|
25004UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25005WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25006
25007# check trigger-5 success: 	1
25008DROP TRIGGER trg_1;
25009UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25010f_int2 = CAST(f_char1 AS SIGNED INT),
25011f_charbig = 'just inserted'
25012   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25013DELETE FROM t0_aux
25014WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25015INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25016SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25017'just inserted' FROM t0_template
25018WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25019CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25020BEGIN
25021UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25022f_charbig = 'updated by trigger'
25023      WHERE f_int1 = - old.f_int1;
25024END|
25025UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25026WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25027
25028# check trigger-6 success: 	1
25029DROP TRIGGER trg_1;
25030UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25031f_int2 = CAST(f_char1 AS SIGNED INT),
25032f_charbig = 'just inserted'
25033   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25034DELETE FROM t0_aux
25035WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25036INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25037SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25038'just inserted' FROM t0_template
25039WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25040CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25041BEGIN
25042UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25043f_charbig = 'updated by trigger'
25044      WHERE f_int1 = - old.f_int1;
25045END|
25046DELETE FROM t0_aux
25047WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25048
25049# check trigger-7 success: 	1
25050DROP TRIGGER trg_1;
25051UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25052f_int2 = CAST(f_char1 AS SIGNED INT),
25053f_charbig = 'just inserted'
25054   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25055DELETE FROM t0_aux
25056WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25057INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25058SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25059'just inserted' FROM t0_template
25060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25061CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25062BEGIN
25063UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25064f_charbig = 'updated by trigger'
25065      WHERE f_int1 = - old.f_int1;
25066END|
25067DELETE FROM t0_aux
25068WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25069
25070# check trigger-8 success: 	1
25071DROP TRIGGER trg_1;
25072UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25073f_int2 = CAST(f_char1 AS SIGNED INT),
25074f_charbig = 'just inserted'
25075   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25076DELETE FROM t0_aux
25077WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25078DELETE FROM t1
25079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25080CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25081BEGIN
25082SET new.f_int1 = old.f_int1 + @max_row,
25083new.f_int2 = old.f_int2 - @max_row,
25084new.f_charbig = '####updated per update trigger####';
25085END|
25086UPDATE t1
25087SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25088f_charbig = '####updated per update statement itself####';
25089
25090# check trigger-9 success: 	1
25091DROP TRIGGER trg_2;
25092UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25093f_int2 = CAST(f_char1 AS SIGNED INT),
25094f_charbig = CONCAT('===',f_char1,'===');
25095CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25096BEGIN
25097SET new.f_int1 = new.f_int1 + @max_row,
25098new.f_int2 = new.f_int2 - @max_row,
25099new.f_charbig = '####updated per update trigger####';
25100END|
25101UPDATE t1
25102SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25103f_charbig = '####updated per update statement itself####';
25104
25105# check trigger-10 success: 	1
25106DROP TRIGGER trg_2;
25107UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25108f_int2 = CAST(f_char1 AS SIGNED INT),
25109f_charbig = CONCAT('===',f_char1,'===');
25110CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25111BEGIN
25112SET new.f_int1 = @my_max1 + @counter,
25113new.f_int2 = @my_min2 - @counter,
25114new.f_charbig = '####updated per insert trigger####';
25115SET @counter = @counter + 1;
25116END|
25117SET @counter = 1;
25118SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25119INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25120SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25121CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25123ORDER BY f_int1;
25124DROP TRIGGER trg_3;
25125
25126# check trigger-11 success: 	1
25127DELETE FROM t1
25128WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25129AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25130AND f_charbig = '####updated per insert trigger####';
25131CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25132BEGIN
25133SET new.f_int1 = @my_max1 + @counter,
25134new.f_int2 = @my_min2 - @counter,
25135new.f_charbig = '####updated per insert trigger####';
25136SET @counter = @counter + 1;
25137END|
25138SET @counter = 1;
25139SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25140INSERT INTO t1 (f_char1, f_char2, f_charbig)
25141SELECT CAST(f_int1 AS CHAR),
25142CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25144ORDER BY f_int1;
25145DROP TRIGGER trg_3;
25146
25147# check trigger-12 success: 	1
25148DELETE FROM t1
25149WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25150AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25151AND f_charbig = '####updated per insert trigger####';
25152ANALYZE  TABLE t1;
25153Table	Op	Msg_type	Msg_text
25154test.t1	analyze	status	OK
25155CHECK    TABLE t1 EXTENDED;
25156Table	Op	Msg_type	Msg_text
25157test.t1	check	status	OK
25158CHECKSUM TABLE t1 EXTENDED;
25159Table	Checksum
25160test.t1	<some_value>
25161OPTIMIZE TABLE t1;
25162Table	Op	Msg_type	Msg_text
25163test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
25164test.t1	optimize	status	OK
25165# check layout success:    1
25166REPAIR   TABLE t1 EXTENDED;
25167Table	Op	Msg_type	Msg_text
25168test.t1	repair	status	OK
25169# check layout success:    1
25170TRUNCATE t1;
25171
25172# check TRUNCATE success: 	1
25173# check layout success:    1
25174# End usability test (inc/partition_check.inc)
25175DROP TABLE t1;
25176CREATE TABLE t1 (
25177f_int1 INTEGER,
25178f_int2 INTEGER,
25179f_char1 CHAR(20),
25180f_char2 CHAR(20),
25181f_charbig VARCHAR(1000)
25182, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
25183)
25184PARTITION BY LIST(MOD(f_int1 + f_int2,4))
25185(PARTITION part_3 VALUES IN (-3),
25186PARTITION part_2 VALUES IN (-2),
25187PARTITION part_1 VALUES IN (-1),
25188PARTITION part_N VALUES IN (NULL),
25189PARTITION part0 VALUES IN (0),
25190PARTITION part1 VALUES IN (1),
25191PARTITION part2 VALUES IN (2),
25192PARTITION part3 VALUES IN (3));
25193INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25194SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
25195# Start usability test (inc/partition_check.inc)
25196create_command
25197SHOW CREATE TABLE t1;
25198Table	Create Table
25199t1	CREATE TABLE `t1` (
25200  `f_int1` int(11) NOT NULL,
25201  `f_int2` int(11) NOT NULL,
25202  `f_char1` char(20) DEFAULT NULL,
25203  `f_char2` char(20) DEFAULT NULL,
25204  `f_charbig` varchar(1000) DEFAULT NULL,
25205  PRIMARY KEY (`f_int1`,`f_int2`),
25206  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
25207) ENGINE=InnoDB DEFAULT CHARSET=latin1
25208/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
25209(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
25210 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
25211 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
25212 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
25213 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
25214 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
25215 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
25216 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
25217
25218unified filelist
25219t1#P#part0.ibd
25220t1#P#part1.ibd
25221t1#P#part2.ibd
25222t1#P#part3.ibd
25223t1#P#part_1.ibd
25224t1#P#part_2.ibd
25225t1#P#part_3.ibd
25226t1#P#part_N.ibd
25227t1.frm
25228
25229# check prerequisites-1 success:    1
25230# check COUNT(*) success:    1
25231# check MIN/MAX(f_int1) success:    1
25232# check MIN/MAX(f_int2) success:    1
25233INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25234SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25235CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25236WHERE f_int1 IN (2,3);
25237ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
25238# check prerequisites-3 success:    1
25239# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
25240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25241SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25242CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25243WHERE f_int1 IN (2,3);
25244DELETE FROM t1 WHERE f_charbig = 'delete me';
25245INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25246SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25247CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25248WHERE f_int1 IN (2,3);
25249DELETE FROM t1 WHERE f_charbig = 'delete me';
25250# check read via f_int1 success: 1
25251# check read via f_int2 success: 1
25252
25253# check multiple-1 success: 	1
25254DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25255
25256# check multiple-2 success: 	1
25257INSERT INTO t1 SELECT * FROM t0_template
25258WHERE MOD(f_int1,3) = 0;
25259
25260# check multiple-3 success: 	1
25261UPDATE t1 SET f_int1 = f_int1 + @max_row
25262WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25263AND @max_row_div2 + @max_row_div4;
25264
25265# check multiple-4 success: 	1
25266DELETE FROM t1
25267WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25268AND @max_row_div2 + @max_row_div4 + @max_row;
25269
25270# check multiple-5 success: 	1
25271SELECT COUNT(*) INTO @try_count FROM t0_template
25272WHERE MOD(f_int1,3) = 0
25273AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25274SELECT COUNT(*) INTO @clash_count
25275FROM t1 INNER JOIN t0_template USING(f_int1)
25276WHERE MOD(f_int1,3) = 0
25277AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25278SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25279INSERT INTO t1
25280SET f_int1 = @cur_value , f_int2 = @cur_value,
25281f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25282f_charbig = '#SINGLE#';
25283
25284# check single-1 success: 	1
25285SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25286INSERT INTO t1
25287SET f_int1 = @cur_value , f_int2 = @cur_value,
25288f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25289f_charbig = '#SINGLE#';
25290
25291# check single-2 success: 	1
25292SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25293SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25294UPDATE t1 SET f_int1 = @cur_value2
25295WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25296
25297# check single-3 success: 	1
25298SET @cur_value1= -1;
25299SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25300UPDATE t1 SET f_int1 = @cur_value1
25301WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25302
25303# check single-4 success: 	1
25304SELECT MAX(f_int1) INTO @cur_value FROM t1;
25305DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25306
25307# check single-5 success: 	1
25308DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25309
25310# check single-6 success: 	1
25311INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25312
25313# check single-7 success: 	1
25314DELETE FROM t1 WHERE f_charbig = '#2147483647##';
25315DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25316INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25317f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25318f_charbig = '#NULL#';
25319INSERT INTO t1
25320SET f_int1 = NULL , f_int2 = -@max_row,
25321f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25322f_charbig = '#NULL#';
25323ERROR 23000: Column 'f_int1' cannot be null
25324# check null success:    1
25325DELETE FROM t1
25326WHERE f_int1 = 0 AND f_int2 = 0
25327AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25328AND f_charbig = '#NULL#';
25329INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25330SELECT f_int1, f_int1, '', '', 'was inserted'
25331   FROM t0_template source_tab
25332WHERE MOD(f_int1,3) = 0
25333AND f_int1 BETWEEN @max_row_div2 AND @max_row
25334ON DUPLICATE KEY
25335UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
25336f_int2 = 2 * @max_row + source_tab.f_int1,
25337f_charbig = 'was updated';
25338
25339# check unique-1-a success: 	1
25340
25341# check unique-1-b success: 	1
25342DELETE FROM t1 WHERE f_charbig = 'was inserted';
25343UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25344f_int2 = CAST(f_char1 AS SIGNED INT),
25345f_charbig = CONCAT('===',f_char1,'===')
25346WHERE f_charbig = 'was updated';
25347REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25348SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
25349   FROM t0_template source_tab
25350WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25351
25352# check replace success: 	1
25353DELETE FROM t1
25354WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
25355DELETE FROM t1
25356WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
25357f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
25358UPDATE t1 SET f_int2 = f_int1,
25359f_char1 = CAST(f_int1 AS CHAR),
25360f_char2 = CAST(f_int1 AS CHAR),
25361f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
25362WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
25363SET AUTOCOMMIT= 0;
25364INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25365SELECT f_int1, f_int1, '', '', 'was inserted'
25366FROM t0_template source_tab
25367WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25368
25369# check transactions-1 success: 	1
25370COMMIT WORK;
25371
25372# check transactions-2 success: 	1
25373ROLLBACK WORK;
25374
25375# check transactions-3 success: 	1
25376DELETE FROM t1 WHERE f_charbig = 'was inserted';
25377COMMIT WORK;
25378ROLLBACK WORK;
25379
25380# check transactions-4 success: 	1
25381INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25382SELECT f_int1, f_int1, '', '', 'was inserted'
25383FROM t0_template source_tab
25384WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25385
25386# check transactions-5 success: 	1
25387ROLLBACK WORK;
25388
25389# check transactions-6 success: 	1
25390# INFO: Storage engine used for t1 seems to be transactional.
25391COMMIT;
25392
25393# check transactions-7 success: 	1
25394DELETE FROM t1 WHERE f_charbig = 'was inserted';
25395COMMIT WORK;
25396SET @@session.sql_mode = 'traditional';
25397Warnings:
25398Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
25399SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25400INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25401SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25402'', '', 'was inserted' FROM t0_template
25403WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25404ERROR 22012: Division by 0
25405COMMIT;
25406
25407# check transactions-8 success: 	1
25408# INFO: Storage engine used for t1 seems to be able to revert
25409#       changes made by the failing statement.
25410SET @@session.sql_mode = '';
25411Warnings:
25412Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
25413SET AUTOCOMMIT= 1;
25414DELETE FROM t1 WHERE f_charbig = 'was inserted';
25415COMMIT WORK;
25416UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25417
25418# check special-1 success: 	1
25419UPDATE t1 SET f_charbig = '';
25420
25421# check special-2 success: 	1
25422UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25423INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25424SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25425WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25426INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25427SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25428'just inserted' FROM t0_template
25429WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25430CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25431BEGIN
25432UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25433f_charbig = 'updated by trigger'
25434      WHERE f_int1 = new.f_int1;
25435END|
25436INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25437SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25438WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25439
25440# check trigger-1 success: 	1
25441DROP TRIGGER trg_1;
25442UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25443f_int2 = CAST(f_char1 AS SIGNED INT),
25444f_charbig = 'just inserted'
25445   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25446DELETE FROM t0_aux
25447WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25448INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25449SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25450'just inserted' FROM t0_template
25451WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25452CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25453BEGIN
25454UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25455f_charbig = 'updated by trigger'
25456      WHERE f_int1 = new.f_int1;
25457END|
25458INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25459SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25460WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25461
25462# check trigger-2 success: 	1
25463DROP TRIGGER trg_1;
25464UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25465f_int2 = CAST(f_char1 AS SIGNED INT),
25466f_charbig = 'just inserted'
25467   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25468DELETE FROM t0_aux
25469WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25470INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25471SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25472'just inserted' FROM t0_template
25473WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25474CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25475BEGIN
25476UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25477f_charbig = 'updated by trigger'
25478      WHERE f_int1 = new.f_int1;
25479END|
25480UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25481WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25482
25483# check trigger-3 success: 	1
25484DROP TRIGGER trg_1;
25485UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25486f_int2 = CAST(f_char1 AS SIGNED INT),
25487f_charbig = 'just inserted'
25488   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25489DELETE FROM t0_aux
25490WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25491INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25492SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25493'just inserted' FROM t0_template
25494WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25495CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25496BEGIN
25497UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25498f_charbig = 'updated by trigger'
25499      WHERE f_int1 = - old.f_int1;
25500END|
25501UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25502WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25503
25504# check trigger-4 success: 	1
25505DROP TRIGGER trg_1;
25506UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25507f_int2 = CAST(f_char1 AS SIGNED INT),
25508f_charbig = 'just inserted'
25509   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25510DELETE FROM t0_aux
25511WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25512INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25513SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25514'just inserted' FROM t0_template
25515WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25516CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25517BEGIN
25518UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25519f_charbig = 'updated by trigger'
25520      WHERE f_int1 = new.f_int1;
25521END|
25522UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25523WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25524
25525# check trigger-5 success: 	1
25526DROP TRIGGER trg_1;
25527UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25528f_int2 = CAST(f_char1 AS SIGNED INT),
25529f_charbig = 'just inserted'
25530   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25531DELETE FROM t0_aux
25532WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25533INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25534SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25535'just inserted' FROM t0_template
25536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25537CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
25538BEGIN
25539UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25540f_charbig = 'updated by trigger'
25541      WHERE f_int1 = - old.f_int1;
25542END|
25543UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25544WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25545
25546# check trigger-6 success: 	1
25547DROP TRIGGER trg_1;
25548UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25549f_int2 = CAST(f_char1 AS SIGNED INT),
25550f_charbig = 'just inserted'
25551   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25552DELETE FROM t0_aux
25553WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25554INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25555SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25556'just inserted' FROM t0_template
25557WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25558CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
25559BEGIN
25560UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25561f_charbig = 'updated by trigger'
25562      WHERE f_int1 = - old.f_int1;
25563END|
25564DELETE FROM t0_aux
25565WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25566
25567# check trigger-7 success: 	1
25568DROP TRIGGER trg_1;
25569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25570f_int2 = CAST(f_char1 AS SIGNED INT),
25571f_charbig = 'just inserted'
25572   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25573DELETE FROM t0_aux
25574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25577'just inserted' FROM t0_template
25578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25579CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
25580BEGIN
25581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25582f_charbig = 'updated by trigger'
25583      WHERE f_int1 = - old.f_int1;
25584END|
25585DELETE FROM t0_aux
25586WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25587
25588# check trigger-8 success: 	1
25589DROP TRIGGER trg_1;
25590UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25591f_int2 = CAST(f_char1 AS SIGNED INT),
25592f_charbig = 'just inserted'
25593   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25594DELETE FROM t0_aux
25595WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25596DELETE FROM t1
25597WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25598CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25599BEGIN
25600SET new.f_int1 = old.f_int1 + @max_row,
25601new.f_int2 = old.f_int2 - @max_row,
25602new.f_charbig = '####updated per update trigger####';
25603END|
25604UPDATE t1
25605SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25606f_charbig = '####updated per update statement itself####';
25607
25608# check trigger-9 success: 	1
25609DROP TRIGGER trg_2;
25610UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25611f_int2 = CAST(f_char1 AS SIGNED INT),
25612f_charbig = CONCAT('===',f_char1,'===');
25613CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
25614BEGIN
25615SET new.f_int1 = new.f_int1 + @max_row,
25616new.f_int2 = new.f_int2 - @max_row,
25617new.f_charbig = '####updated per update trigger####';
25618END|
25619UPDATE t1
25620SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
25621f_charbig = '####updated per update statement itself####';
25622
25623# check trigger-10 success: 	1
25624DROP TRIGGER trg_2;
25625UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25626f_int2 = CAST(f_char1 AS SIGNED INT),
25627f_charbig = CONCAT('===',f_char1,'===');
25628CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25629BEGIN
25630SET new.f_int1 = @my_max1 + @counter,
25631new.f_int2 = @my_min2 - @counter,
25632new.f_charbig = '####updated per insert trigger####';
25633SET @counter = @counter + 1;
25634END|
25635SET @counter = 1;
25636SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25637INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25638SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25639CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25641ORDER BY f_int1;
25642DROP TRIGGER trg_3;
25643
25644# check trigger-11 success: 	1
25645DELETE FROM t1
25646WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25647AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25648AND f_charbig = '####updated per insert trigger####';
25649CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
25650BEGIN
25651SET new.f_int1 = @my_max1 + @counter,
25652new.f_int2 = @my_min2 - @counter,
25653new.f_charbig = '####updated per insert trigger####';
25654SET @counter = @counter + 1;
25655END|
25656SET @counter = 1;
25657SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
25658INSERT INTO t1 (f_char1, f_char2, f_charbig)
25659SELECT CAST(f_int1 AS CHAR),
25660CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
25661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
25662ORDER BY f_int1;
25663DROP TRIGGER trg_3;
25664
25665# check trigger-12 success: 	1
25666DELETE FROM t1
25667WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
25668AND f_int2 <> CAST(f_char1 AS SIGNED INT)
25669AND f_charbig = '####updated per insert trigger####';
25670ANALYZE  TABLE t1;
25671Table	Op	Msg_type	Msg_text
25672test.t1	analyze	status	OK
25673CHECK    TABLE t1 EXTENDED;
25674Table	Op	Msg_type	Msg_text
25675test.t1	check	status	OK
25676CHECKSUM TABLE t1 EXTENDED;
25677Table	Checksum
25678test.t1	<some_value>
25679OPTIMIZE TABLE t1;
25680Table	Op	Msg_type	Msg_text
25681test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
25682test.t1	optimize	status	OK
25683# check layout success:    1
25684REPAIR   TABLE t1 EXTENDED;
25685Table	Op	Msg_type	Msg_text
25686test.t1	repair	status	OK
25687# check layout success:    1
25688TRUNCATE t1;
25689
25690# check TRUNCATE success: 	1
25691# check layout success:    1
25692# End usability test (inc/partition_check.inc)
25693DROP TABLE t1;
25694CREATE TABLE t1 (
25695f_int1 INTEGER,
25696f_int2 INTEGER,
25697f_char1 CHAR(20),
25698f_char2 CHAR(20),
25699f_charbig VARCHAR(1000)
25700, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
25701)
25702PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
25703(PARTITION parta VALUES LESS THAN (0),
25704PARTITION partb VALUES LESS THAN (5),
25705PARTITION partc VALUES LESS THAN (10),
25706PARTITION partd VALUES LESS THAN (10 + 5),
25707PARTITION parte VALUES LESS THAN (20),
25708PARTITION partf VALUES LESS THAN (2147483646));
25709INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25710SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
25711# Start usability test (inc/partition_check.inc)
25712create_command
25713SHOW CREATE TABLE t1;
25714Table	Create Table
25715t1	CREATE TABLE `t1` (
25716  `f_int1` int(11) NOT NULL,
25717  `f_int2` int(11) NOT NULL,
25718  `f_char1` char(20) DEFAULT NULL,
25719  `f_char2` char(20) DEFAULT NULL,
25720  `f_charbig` varchar(1000) DEFAULT NULL,
25721  PRIMARY KEY (`f_int1`,`f_int2`),
25722  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
25723) ENGINE=InnoDB DEFAULT CHARSET=latin1
25724/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
25725(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
25726 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
25727 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
25728 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
25729 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
25730 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
25731
25732unified filelist
25733t1#P#parta.ibd
25734t1#P#partb.ibd
25735t1#P#partc.ibd
25736t1#P#partd.ibd
25737t1#P#parte.ibd
25738t1#P#partf.ibd
25739t1.frm
25740
25741# check prerequisites-1 success:    1
25742# check COUNT(*) success:    1
25743# check MIN/MAX(f_int1) success:    1
25744# check MIN/MAX(f_int2) success:    1
25745INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25746SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
25747CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
25748WHERE f_int1 IN (2,3);
25749ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
25750# check prerequisites-3 success:    1
25751# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
25752INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25753SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25754CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25755WHERE f_int1 IN (2,3);
25756DELETE FROM t1 WHERE f_charbig = 'delete me';
25757INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25758SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
25759CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
25760WHERE f_int1 IN (2,3);
25761DELETE FROM t1 WHERE f_charbig = 'delete me';
25762# check read via f_int1 success: 1
25763# check read via f_int2 success: 1
25764
25765# check multiple-1 success: 	1
25766DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
25767
25768# check multiple-2 success: 	1
25769INSERT INTO t1 SELECT * FROM t0_template
25770WHERE MOD(f_int1,3) = 0;
25771
25772# check multiple-3 success: 	1
25773UPDATE t1 SET f_int1 = f_int1 + @max_row
25774WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
25775AND @max_row_div2 + @max_row_div4;
25776
25777# check multiple-4 success: 	1
25778DELETE FROM t1
25779WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
25780AND @max_row_div2 + @max_row_div4 + @max_row;
25781
25782# check multiple-5 success: 	1
25783SELECT COUNT(*) INTO @try_count FROM t0_template
25784WHERE MOD(f_int1,3) = 0
25785AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25786SELECT COUNT(*) INTO @clash_count
25787FROM t1 INNER JOIN t0_template USING(f_int1)
25788WHERE MOD(f_int1,3) = 0
25789AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25790SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
25791INSERT INTO t1
25792SET f_int1 = @cur_value , f_int2 = @cur_value,
25793f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25794f_charbig = '#SINGLE#';
25795
25796# check single-1 success: 	1
25797SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
25798INSERT INTO t1
25799SET f_int1 = @cur_value , f_int2 = @cur_value,
25800f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
25801f_charbig = '#SINGLE#';
25802
25803# check single-2 success: 	1
25804SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
25805SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
25806UPDATE t1 SET f_int1 = @cur_value2
25807WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
25808
25809# check single-3 success: 	1
25810SET @cur_value1= -1;
25811SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
25812UPDATE t1 SET f_int1 = @cur_value1
25813WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
25814
25815# check single-4 success: 	1
25816SELECT MAX(f_int1) INTO @cur_value FROM t1;
25817DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
25818
25819# check single-5 success: 	1
25820DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
25821
25822# check single-6 success: 	1
25823INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
25824ERROR HY000: Table has no partition for value 2147483647
25825DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
25826INSERT t1 SET f_int1 = 0 , f_int2 = 0,
25827f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
25828f_charbig = '#NULL#';
25829INSERT INTO t1
25830SET f_int1 = NULL , f_int2 = -@max_row,
25831f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
25832f_charbig = '#NULL#';
25833ERROR 23000: Column 'f_int1' cannot be null
25834# check null success:    1
25835DELETE FROM t1
25836WHERE f_int1 = 0 AND f_int2 = 0
25837AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
25838AND f_charbig = '#NULL#';
25839INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25840SELECT f_int1, f_int1, '', '', 'was inserted'
25841   FROM t0_template source_tab
25842WHERE MOD(f_int1,3) = 0
25843AND f_int1 BETWEEN @max_row_div2 AND @max_row
25844ON DUPLICATE KEY
25845UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
25846f_int2 = 2 * @max_row + source_tab.f_int1,
25847f_charbig = 'was updated';
25848
25849# check unique-1-a success: 	1
25850
25851# check unique-1-b success: 	1
25852DELETE FROM t1 WHERE f_charbig = 'was inserted';
25853UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25854f_int2 = CAST(f_char1 AS SIGNED INT),
25855f_charbig = CONCAT('===',f_char1,'===')
25856WHERE f_charbig = 'was updated';
25857REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25858SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
25859   FROM t0_template source_tab
25860WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
25861
25862# check replace success: 	1
25863DELETE FROM t1
25864WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
25865DELETE FROM t1
25866WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
25867f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
25868UPDATE t1 SET f_int2 = f_int1,
25869f_char1 = CAST(f_int1 AS CHAR),
25870f_char2 = CAST(f_int1 AS CHAR),
25871f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
25872WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
25873SET AUTOCOMMIT= 0;
25874INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25875SELECT f_int1, f_int1, '', '', 'was inserted'
25876FROM t0_template source_tab
25877WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25878
25879# check transactions-1 success: 	1
25880COMMIT WORK;
25881
25882# check transactions-2 success: 	1
25883ROLLBACK WORK;
25884
25885# check transactions-3 success: 	1
25886DELETE FROM t1 WHERE f_charbig = 'was inserted';
25887COMMIT WORK;
25888ROLLBACK WORK;
25889
25890# check transactions-4 success: 	1
25891INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25892SELECT f_int1, f_int1, '', '', 'was inserted'
25893FROM t0_template source_tab
25894WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25895
25896# check transactions-5 success: 	1
25897ROLLBACK WORK;
25898
25899# check transactions-6 success: 	1
25900# INFO: Storage engine used for t1 seems to be transactional.
25901COMMIT;
25902
25903# check transactions-7 success: 	1
25904DELETE FROM t1 WHERE f_charbig = 'was inserted';
25905COMMIT WORK;
25906SET @@session.sql_mode = 'traditional';
25907Warnings:
25908Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
25909SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
25910INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
25911SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
25912'', '', 'was inserted' FROM t0_template
25913WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
25914ERROR 22012: Division by 0
25915COMMIT;
25916
25917# check transactions-8 success: 	1
25918# INFO: Storage engine used for t1 seems to be able to revert
25919#       changes made by the failing statement.
25920SET @@session.sql_mode = '';
25921Warnings:
25922Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
25923SET AUTOCOMMIT= 1;
25924DELETE FROM t1 WHERE f_charbig = 'was inserted';
25925COMMIT WORK;
25926UPDATE t1 SET f_charbig = REPEAT('b', 1000);
25927
25928# check special-1 success: 	1
25929UPDATE t1 SET f_charbig = '';
25930
25931# check special-2 success: 	1
25932UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
25933INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
25934SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
25935WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25936INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25937SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25938'just inserted' FROM t0_template
25939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25940CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
25941BEGIN
25942UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25943f_charbig = 'updated by trigger'
25944      WHERE f_int1 = new.f_int1;
25945END|
25946INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25947SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25948WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25949
25950# check trigger-1 success: 	1
25951DROP TRIGGER trg_1;
25952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25953f_int2 = CAST(f_char1 AS SIGNED INT),
25954f_charbig = 'just inserted'
25955   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25956DELETE FROM t0_aux
25957WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25958INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25959SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25960'just inserted' FROM t0_template
25961WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25962CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
25963BEGIN
25964UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25965f_charbig = 'updated by trigger'
25966      WHERE f_int1 = new.f_int1;
25967END|
25968INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25969SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
25970WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25971
25972# check trigger-2 success: 	1
25973DROP TRIGGER trg_1;
25974UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25975f_int2 = CAST(f_char1 AS SIGNED INT),
25976f_charbig = 'just inserted'
25977   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25978DELETE FROM t0_aux
25979WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25980INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
25981SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
25982'just inserted' FROM t0_template
25983WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
25984CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
25985BEGIN
25986UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
25987f_charbig = 'updated by trigger'
25988      WHERE f_int1 = new.f_int1;
25989END|
25990UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
25991WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
25992
25993# check trigger-3 success: 	1
25994DROP TRIGGER trg_1;
25995UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
25996f_int2 = CAST(f_char1 AS SIGNED INT),
25997f_charbig = 'just inserted'
25998   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
25999DELETE FROM t0_aux
26000WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26001INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26002SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26003'just inserted' FROM t0_template
26004WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26005CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26006BEGIN
26007UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26008f_charbig = 'updated by trigger'
26009      WHERE f_int1 = - old.f_int1;
26010END|
26011UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26012WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26013
26014# check trigger-4 success: 	1
26015DROP TRIGGER trg_1;
26016UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26017f_int2 = CAST(f_char1 AS SIGNED INT),
26018f_charbig = 'just inserted'
26019   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26020DELETE FROM t0_aux
26021WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26022INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26023SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26024'just inserted' FROM t0_template
26025WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26026CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26027BEGIN
26028UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26029f_charbig = 'updated by trigger'
26030      WHERE f_int1 = new.f_int1;
26031END|
26032UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26033WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26034
26035# check trigger-5 success: 	1
26036DROP TRIGGER trg_1;
26037UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26038f_int2 = CAST(f_char1 AS SIGNED INT),
26039f_charbig = 'just inserted'
26040   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26041DELETE FROM t0_aux
26042WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26043INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26044SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26045'just inserted' FROM t0_template
26046WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26047CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26048BEGIN
26049UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26050f_charbig = 'updated by trigger'
26051      WHERE f_int1 = - old.f_int1;
26052END|
26053UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26054WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26055
26056# check trigger-6 success: 	1
26057DROP TRIGGER trg_1;
26058UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26059f_int2 = CAST(f_char1 AS SIGNED INT),
26060f_charbig = 'just inserted'
26061   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26062DELETE FROM t0_aux
26063WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26064INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26065SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26066'just inserted' FROM t0_template
26067WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26068CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26069BEGIN
26070UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26071f_charbig = 'updated by trigger'
26072      WHERE f_int1 = - old.f_int1;
26073END|
26074DELETE FROM t0_aux
26075WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26076
26077# check trigger-7 success: 	1
26078DROP TRIGGER trg_1;
26079UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26080f_int2 = CAST(f_char1 AS SIGNED INT),
26081f_charbig = 'just inserted'
26082   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26083DELETE FROM t0_aux
26084WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26085INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26086SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26087'just inserted' FROM t0_template
26088WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26089CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26090BEGIN
26091UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26092f_charbig = 'updated by trigger'
26093      WHERE f_int1 = - old.f_int1;
26094END|
26095DELETE FROM t0_aux
26096WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26097
26098# check trigger-8 success: 	1
26099DROP TRIGGER trg_1;
26100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26101f_int2 = CAST(f_char1 AS SIGNED INT),
26102f_charbig = 'just inserted'
26103   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26104DELETE FROM t0_aux
26105WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26106DELETE FROM t1
26107WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26108CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26109BEGIN
26110SET new.f_int1 = old.f_int1 + @max_row,
26111new.f_int2 = old.f_int2 - @max_row,
26112new.f_charbig = '####updated per update trigger####';
26113END|
26114UPDATE t1
26115SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26116f_charbig = '####updated per update statement itself####';
26117
26118# check trigger-9 success: 	1
26119DROP TRIGGER trg_2;
26120UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26121f_int2 = CAST(f_char1 AS SIGNED INT),
26122f_charbig = CONCAT('===',f_char1,'===');
26123CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26124BEGIN
26125SET new.f_int1 = new.f_int1 + @max_row,
26126new.f_int2 = new.f_int2 - @max_row,
26127new.f_charbig = '####updated per update trigger####';
26128END|
26129UPDATE t1
26130SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26131f_charbig = '####updated per update statement itself####';
26132
26133# check trigger-10 success: 	1
26134DROP TRIGGER trg_2;
26135UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26136f_int2 = CAST(f_char1 AS SIGNED INT),
26137f_charbig = CONCAT('===',f_char1,'===');
26138CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26139BEGIN
26140SET new.f_int1 = @my_max1 + @counter,
26141new.f_int2 = @my_min2 - @counter,
26142new.f_charbig = '####updated per insert trigger####';
26143SET @counter = @counter + 1;
26144END|
26145SET @counter = 1;
26146SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26147INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26148SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26149CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26151ORDER BY f_int1;
26152DROP TRIGGER trg_3;
26153
26154# check trigger-11 success: 	1
26155DELETE FROM t1
26156WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26157AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26158AND f_charbig = '####updated per insert trigger####';
26159CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26160BEGIN
26161SET new.f_int1 = @my_max1 + @counter,
26162new.f_int2 = @my_min2 - @counter,
26163new.f_charbig = '####updated per insert trigger####';
26164SET @counter = @counter + 1;
26165END|
26166SET @counter = 1;
26167SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26168INSERT INTO t1 (f_char1, f_char2, f_charbig)
26169SELECT CAST(f_int1 AS CHAR),
26170CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26171WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26172ORDER BY f_int1;
26173DROP TRIGGER trg_3;
26174
26175# check trigger-12 success: 	1
26176DELETE FROM t1
26177WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26178AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26179AND f_charbig = '####updated per insert trigger####';
26180ANALYZE  TABLE t1;
26181Table	Op	Msg_type	Msg_text
26182test.t1	analyze	status	OK
26183CHECK    TABLE t1 EXTENDED;
26184Table	Op	Msg_type	Msg_text
26185test.t1	check	status	OK
26186CHECKSUM TABLE t1 EXTENDED;
26187Table	Checksum
26188test.t1	<some_value>
26189OPTIMIZE TABLE t1;
26190Table	Op	Msg_type	Msg_text
26191test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
26192test.t1	optimize	status	OK
26193# check layout success:    1
26194REPAIR   TABLE t1 EXTENDED;
26195Table	Op	Msg_type	Msg_text
26196test.t1	repair	status	OK
26197# check layout success:    1
26198TRUNCATE t1;
26199
26200# check TRUNCATE success: 	1
26201# check layout success:    1
26202# End usability test (inc/partition_check.inc)
26203DROP TABLE t1;
26204CREATE TABLE t1 (
26205f_int1 INTEGER,
26206f_int2 INTEGER,
26207f_char1 CHAR(20),
26208f_char2 CHAR(20),
26209f_charbig VARCHAR(1000)
26210, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
26211)
26212PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
26213(PARTITION parta VALUES LESS THAN (0),
26214PARTITION partb VALUES LESS THAN (5),
26215PARTITION partc VALUES LESS THAN (10),
26216PARTITION partd VALUES LESS THAN (2147483646));
26217INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26218SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
26219# Start usability test (inc/partition_check.inc)
26220create_command
26221SHOW CREATE TABLE t1;
26222Table	Create Table
26223t1	CREATE TABLE `t1` (
26224  `f_int1` int(11) NOT NULL,
26225  `f_int2` int(11) NOT NULL,
26226  `f_char1` char(20) DEFAULT NULL,
26227  `f_char2` char(20) DEFAULT NULL,
26228  `f_charbig` varchar(1000) DEFAULT NULL,
26229  PRIMARY KEY (`f_int1`,`f_int2`),
26230  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
26231) ENGINE=InnoDB DEFAULT CHARSET=latin1
26232/*!50100 PARTITION BY RANGE (f_int1)
26233SUBPARTITION BY HASH (f_int2)
26234SUBPARTITIONS 2
26235(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
26236 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
26237 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
26238 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
26239
26240unified filelist
26241t1#P#parta#SP#partasp0.ibd
26242t1#P#parta#SP#partasp1.ibd
26243t1#P#partb#SP#partbsp0.ibd
26244t1#P#partb#SP#partbsp1.ibd
26245t1#P#partc#SP#partcsp0.ibd
26246t1#P#partc#SP#partcsp1.ibd
26247t1#P#partd#SP#partdsp0.ibd
26248t1#P#partd#SP#partdsp1.ibd
26249t1.frm
26250
26251# check prerequisites-1 success:    1
26252# check COUNT(*) success:    1
26253# check MIN/MAX(f_int1) success:    1
26254# check MIN/MAX(f_int2) success:    1
26255INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26256SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26257CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26258WHERE f_int1 IN (2,3);
26259ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
26260# check prerequisites-3 success:    1
26261# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
26262INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26263SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26264CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26265WHERE f_int1 IN (2,3);
26266DELETE FROM t1 WHERE f_charbig = 'delete me';
26267INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26268SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26269CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26270WHERE f_int1 IN (2,3);
26271DELETE FROM t1 WHERE f_charbig = 'delete me';
26272# check read via f_int1 success: 1
26273# check read via f_int2 success: 1
26274
26275# check multiple-1 success: 	1
26276DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26277
26278# check multiple-2 success: 	1
26279INSERT INTO t1 SELECT * FROM t0_template
26280WHERE MOD(f_int1,3) = 0;
26281
26282# check multiple-3 success: 	1
26283UPDATE t1 SET f_int1 = f_int1 + @max_row
26284WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26285AND @max_row_div2 + @max_row_div4;
26286
26287# check multiple-4 success: 	1
26288DELETE FROM t1
26289WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26290AND @max_row_div2 + @max_row_div4 + @max_row;
26291
26292# check multiple-5 success: 	1
26293SELECT COUNT(*) INTO @try_count FROM t0_template
26294WHERE MOD(f_int1,3) = 0
26295AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26296SELECT COUNT(*) INTO @clash_count
26297FROM t1 INNER JOIN t0_template USING(f_int1)
26298WHERE MOD(f_int1,3) = 0
26299AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26300SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26301INSERT INTO t1
26302SET f_int1 = @cur_value , f_int2 = @cur_value,
26303f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26304f_charbig = '#SINGLE#';
26305
26306# check single-1 success: 	1
26307SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26308INSERT INTO t1
26309SET f_int1 = @cur_value , f_int2 = @cur_value,
26310f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26311f_charbig = '#SINGLE#';
26312
26313# check single-2 success: 	1
26314SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26315SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26316UPDATE t1 SET f_int1 = @cur_value2
26317WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26318
26319# check single-3 success: 	1
26320SET @cur_value1= -1;
26321SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26322UPDATE t1 SET f_int1 = @cur_value1
26323WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26324
26325# check single-4 success: 	1
26326SELECT MAX(f_int1) INTO @cur_value FROM t1;
26327DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26328
26329# check single-5 success: 	1
26330DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26331
26332# check single-6 success: 	1
26333INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26334ERROR HY000: Table has no partition for value 2147483647
26335DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26336INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26337f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26338f_charbig = '#NULL#';
26339INSERT INTO t1
26340SET f_int1 = NULL , f_int2 = -@max_row,
26341f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26342f_charbig = '#NULL#';
26343ERROR 23000: Column 'f_int1' cannot be null
26344# check null success:    1
26345DELETE FROM t1
26346WHERE f_int1 = 0 AND f_int2 = 0
26347AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26348AND f_charbig = '#NULL#';
26349INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26350SELECT f_int1, f_int1, '', '', 'was inserted'
26351   FROM t0_template source_tab
26352WHERE MOD(f_int1,3) = 0
26353AND f_int1 BETWEEN @max_row_div2 AND @max_row
26354ON DUPLICATE KEY
26355UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
26356f_int2 = 2 * @max_row + source_tab.f_int1,
26357f_charbig = 'was updated';
26358
26359# check unique-1-a success: 	1
26360
26361# check unique-1-b success: 	1
26362DELETE FROM t1 WHERE f_charbig = 'was inserted';
26363UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26364f_int2 = CAST(f_char1 AS SIGNED INT),
26365f_charbig = CONCAT('===',f_char1,'===')
26366WHERE f_charbig = 'was updated';
26367REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26368SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
26369   FROM t0_template source_tab
26370WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26371
26372# check replace success: 	1
26373DELETE FROM t1
26374WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
26375DELETE FROM t1
26376WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
26377f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
26378UPDATE t1 SET f_int2 = f_int1,
26379f_char1 = CAST(f_int1 AS CHAR),
26380f_char2 = CAST(f_int1 AS CHAR),
26381f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
26382WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
26383SET AUTOCOMMIT= 0;
26384INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26385SELECT f_int1, f_int1, '', '', 'was inserted'
26386FROM t0_template source_tab
26387WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26388
26389# check transactions-1 success: 	1
26390COMMIT WORK;
26391
26392# check transactions-2 success: 	1
26393ROLLBACK WORK;
26394
26395# check transactions-3 success: 	1
26396DELETE FROM t1 WHERE f_charbig = 'was inserted';
26397COMMIT WORK;
26398ROLLBACK WORK;
26399
26400# check transactions-4 success: 	1
26401INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26402SELECT f_int1, f_int1, '', '', 'was inserted'
26403FROM t0_template source_tab
26404WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26405
26406# check transactions-5 success: 	1
26407ROLLBACK WORK;
26408
26409# check transactions-6 success: 	1
26410# INFO: Storage engine used for t1 seems to be transactional.
26411COMMIT;
26412
26413# check transactions-7 success: 	1
26414DELETE FROM t1 WHERE f_charbig = 'was inserted';
26415COMMIT WORK;
26416SET @@session.sql_mode = 'traditional';
26417Warnings:
26418Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
26419SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26420INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26421SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26422'', '', 'was inserted' FROM t0_template
26423WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26424ERROR 22012: Division by 0
26425COMMIT;
26426
26427# check transactions-8 success: 	1
26428# INFO: Storage engine used for t1 seems to be able to revert
26429#       changes made by the failing statement.
26430SET @@session.sql_mode = '';
26431Warnings:
26432Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
26433SET AUTOCOMMIT= 1;
26434DELETE FROM t1 WHERE f_charbig = 'was inserted';
26435COMMIT WORK;
26436UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26437
26438# check special-1 success: 	1
26439UPDATE t1 SET f_charbig = '';
26440
26441# check special-2 success: 	1
26442UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26443INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26444SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26445WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26446INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26447SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26448'just inserted' FROM t0_template
26449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26450CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26451BEGIN
26452UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26453f_charbig = 'updated by trigger'
26454      WHERE f_int1 = new.f_int1;
26455END|
26456INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26457SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26459
26460# check trigger-1 success: 	1
26461DROP TRIGGER trg_1;
26462UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26463f_int2 = CAST(f_char1 AS SIGNED INT),
26464f_charbig = 'just inserted'
26465   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26466DELETE FROM t0_aux
26467WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26468INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26469SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26470'just inserted' FROM t0_template
26471WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26472CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26473BEGIN
26474UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26475f_charbig = 'updated by trigger'
26476      WHERE f_int1 = new.f_int1;
26477END|
26478INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26479SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26480WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26481
26482# check trigger-2 success: 	1
26483DROP TRIGGER trg_1;
26484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26485f_int2 = CAST(f_char1 AS SIGNED INT),
26486f_charbig = 'just inserted'
26487   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26488DELETE FROM t0_aux
26489WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26490INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26491SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26492'just inserted' FROM t0_template
26493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26494CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26495BEGIN
26496UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26497f_charbig = 'updated by trigger'
26498      WHERE f_int1 = new.f_int1;
26499END|
26500UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26501WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26502
26503# check trigger-3 success: 	1
26504DROP TRIGGER trg_1;
26505UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26506f_int2 = CAST(f_char1 AS SIGNED INT),
26507f_charbig = 'just inserted'
26508   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26509DELETE FROM t0_aux
26510WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26511INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26512SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26513'just inserted' FROM t0_template
26514WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26515CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
26516BEGIN
26517UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26518f_charbig = 'updated by trigger'
26519      WHERE f_int1 = - old.f_int1;
26520END|
26521UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26522WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26523
26524# check trigger-4 success: 	1
26525DROP TRIGGER trg_1;
26526UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26527f_int2 = CAST(f_char1 AS SIGNED INT),
26528f_charbig = 'just inserted'
26529   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26530DELETE FROM t0_aux
26531WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26532INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26533SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26534'just inserted' FROM t0_template
26535WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26536CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26537BEGIN
26538UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26539f_charbig = 'updated by trigger'
26540      WHERE f_int1 = new.f_int1;
26541END|
26542UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26543WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26544
26545# check trigger-5 success: 	1
26546DROP TRIGGER trg_1;
26547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26548f_int2 = CAST(f_char1 AS SIGNED INT),
26549f_charbig = 'just inserted'
26550   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26551DELETE FROM t0_aux
26552WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26554SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26555'just inserted' FROM t0_template
26556WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26557CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
26558BEGIN
26559UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26560f_charbig = 'updated by trigger'
26561      WHERE f_int1 = - old.f_int1;
26562END|
26563UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
26564WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26565
26566# check trigger-6 success: 	1
26567DROP TRIGGER trg_1;
26568UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26569f_int2 = CAST(f_char1 AS SIGNED INT),
26570f_charbig = 'just inserted'
26571   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26572DELETE FROM t0_aux
26573WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26574INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26575SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26576'just inserted' FROM t0_template
26577WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26578CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
26579BEGIN
26580UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26581f_charbig = 'updated by trigger'
26582      WHERE f_int1 = - old.f_int1;
26583END|
26584DELETE FROM t0_aux
26585WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26586
26587# check trigger-7 success: 	1
26588DROP TRIGGER trg_1;
26589UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26590f_int2 = CAST(f_char1 AS SIGNED INT),
26591f_charbig = 'just inserted'
26592   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26593DELETE FROM t0_aux
26594WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26595INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26596SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26597'just inserted' FROM t0_template
26598WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26599CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
26600BEGIN
26601UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26602f_charbig = 'updated by trigger'
26603      WHERE f_int1 = - old.f_int1;
26604END|
26605DELETE FROM t0_aux
26606WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
26607
26608# check trigger-8 success: 	1
26609DROP TRIGGER trg_1;
26610UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26611f_int2 = CAST(f_char1 AS SIGNED INT),
26612f_charbig = 'just inserted'
26613   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26614DELETE FROM t0_aux
26615WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26616DELETE FROM t1
26617WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26618CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26619BEGIN
26620SET new.f_int1 = old.f_int1 + @max_row,
26621new.f_int2 = old.f_int2 - @max_row,
26622new.f_charbig = '####updated per update trigger####';
26623END|
26624UPDATE t1
26625SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26626f_charbig = '####updated per update statement itself####';
26627
26628# check trigger-9 success: 	1
26629DROP TRIGGER trg_2;
26630UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26631f_int2 = CAST(f_char1 AS SIGNED INT),
26632f_charbig = CONCAT('===',f_char1,'===');
26633CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
26634BEGIN
26635SET new.f_int1 = new.f_int1 + @max_row,
26636new.f_int2 = new.f_int2 - @max_row,
26637new.f_charbig = '####updated per update trigger####';
26638END|
26639UPDATE t1
26640SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
26641f_charbig = '####updated per update statement itself####';
26642
26643# check trigger-10 success: 	1
26644DROP TRIGGER trg_2;
26645UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26646f_int2 = CAST(f_char1 AS SIGNED INT),
26647f_charbig = CONCAT('===',f_char1,'===');
26648CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26649BEGIN
26650SET new.f_int1 = @my_max1 + @counter,
26651new.f_int2 = @my_min2 - @counter,
26652new.f_charbig = '####updated per insert trigger####';
26653SET @counter = @counter + 1;
26654END|
26655SET @counter = 1;
26656SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26657INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26658SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26659CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26660WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26661ORDER BY f_int1;
26662DROP TRIGGER trg_3;
26663
26664# check trigger-11 success: 	1
26665DELETE FROM t1
26666WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26667AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26668AND f_charbig = '####updated per insert trigger####';
26669CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
26670BEGIN
26671SET new.f_int1 = @my_max1 + @counter,
26672new.f_int2 = @my_min2 - @counter,
26673new.f_charbig = '####updated per insert trigger####';
26674SET @counter = @counter + 1;
26675END|
26676SET @counter = 1;
26677SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
26678INSERT INTO t1 (f_char1, f_char2, f_charbig)
26679SELECT CAST(f_int1 AS CHAR),
26680CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
26681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
26682ORDER BY f_int1;
26683DROP TRIGGER trg_3;
26684
26685# check trigger-12 success: 	1
26686DELETE FROM t1
26687WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
26688AND f_int2 <> CAST(f_char1 AS SIGNED INT)
26689AND f_charbig = '####updated per insert trigger####';
26690ANALYZE  TABLE t1;
26691Table	Op	Msg_type	Msg_text
26692test.t1	analyze	status	OK
26693CHECK    TABLE t1 EXTENDED;
26694Table	Op	Msg_type	Msg_text
26695test.t1	check	status	OK
26696CHECKSUM TABLE t1 EXTENDED;
26697Table	Checksum
26698test.t1	<some_value>
26699OPTIMIZE TABLE t1;
26700Table	Op	Msg_type	Msg_text
26701test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
26702test.t1	optimize	status	OK
26703# check layout success:    1
26704REPAIR   TABLE t1 EXTENDED;
26705Table	Op	Msg_type	Msg_text
26706test.t1	repair	status	OK
26707# check layout success:    1
26708TRUNCATE t1;
26709
26710# check TRUNCATE success: 	1
26711# check layout success:    1
26712# End usability test (inc/partition_check.inc)
26713DROP TABLE t1;
26714CREATE TABLE t1 (
26715f_int1 INTEGER,
26716f_int2 INTEGER,
26717f_char1 CHAR(20),
26718f_char2 CHAR(20),
26719f_charbig VARCHAR(1000)
26720, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
26721)
26722PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
26723(PARTITION part1 VALUES LESS THAN (0)
26724(SUBPARTITION subpart11, SUBPARTITION subpart12),
26725PARTITION part2 VALUES LESS THAN (5)
26726(SUBPARTITION subpart21, SUBPARTITION subpart22),
26727PARTITION part3 VALUES LESS THAN (10)
26728(SUBPARTITION subpart31, SUBPARTITION subpart32),
26729PARTITION part4 VALUES LESS THAN (2147483646)
26730(SUBPARTITION subpart41, SUBPARTITION subpart42));
26731INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26732SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
26733# Start usability test (inc/partition_check.inc)
26734create_command
26735SHOW CREATE TABLE t1;
26736Table	Create Table
26737t1	CREATE TABLE `t1` (
26738  `f_int1` int(11) NOT NULL,
26739  `f_int2` int(11) NOT NULL,
26740  `f_char1` char(20) DEFAULT NULL,
26741  `f_char2` char(20) DEFAULT NULL,
26742  `f_charbig` varchar(1000) DEFAULT NULL,
26743  PRIMARY KEY (`f_int1`,`f_int2`),
26744  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
26745) ENGINE=InnoDB DEFAULT CHARSET=latin1
26746/*!50100 PARTITION BY RANGE (f_int1)
26747SUBPARTITION BY KEY (f_int2)
26748(PARTITION part1 VALUES LESS THAN (0)
26749 (SUBPARTITION subpart11 ENGINE = InnoDB,
26750  SUBPARTITION subpart12 ENGINE = InnoDB),
26751 PARTITION part2 VALUES LESS THAN (5)
26752 (SUBPARTITION subpart21 ENGINE = InnoDB,
26753  SUBPARTITION subpart22 ENGINE = InnoDB),
26754 PARTITION part3 VALUES LESS THAN (10)
26755 (SUBPARTITION subpart31 ENGINE = InnoDB,
26756  SUBPARTITION subpart32 ENGINE = InnoDB),
26757 PARTITION part4 VALUES LESS THAN (2147483646)
26758 (SUBPARTITION subpart41 ENGINE = InnoDB,
26759  SUBPARTITION subpart42 ENGINE = InnoDB)) */
26760
26761unified filelist
26762t1#P#part1#SP#subpart11.ibd
26763t1#P#part1#SP#subpart12.ibd
26764t1#P#part2#SP#subpart21.ibd
26765t1#P#part2#SP#subpart22.ibd
26766t1#P#part3#SP#subpart31.ibd
26767t1#P#part3#SP#subpart32.ibd
26768t1#P#part4#SP#subpart41.ibd
26769t1#P#part4#SP#subpart42.ibd
26770t1.frm
26771
26772# check prerequisites-1 success:    1
26773# check COUNT(*) success:    1
26774# check MIN/MAX(f_int1) success:    1
26775# check MIN/MAX(f_int2) success:    1
26776INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26777SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
26778CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
26779WHERE f_int1 IN (2,3);
26780ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
26781# check prerequisites-3 success:    1
26782# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
26783INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26784SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26785CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26786WHERE f_int1 IN (2,3);
26787DELETE FROM t1 WHERE f_charbig = 'delete me';
26788INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26789SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
26790CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
26791WHERE f_int1 IN (2,3);
26792DELETE FROM t1 WHERE f_charbig = 'delete me';
26793# check read via f_int1 success: 1
26794# check read via f_int2 success: 1
26795
26796# check multiple-1 success: 	1
26797DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
26798
26799# check multiple-2 success: 	1
26800INSERT INTO t1 SELECT * FROM t0_template
26801WHERE MOD(f_int1,3) = 0;
26802
26803# check multiple-3 success: 	1
26804UPDATE t1 SET f_int1 = f_int1 + @max_row
26805WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
26806AND @max_row_div2 + @max_row_div4;
26807
26808# check multiple-4 success: 	1
26809DELETE FROM t1
26810WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
26811AND @max_row_div2 + @max_row_div4 + @max_row;
26812
26813# check multiple-5 success: 	1
26814SELECT COUNT(*) INTO @try_count FROM t0_template
26815WHERE MOD(f_int1,3) = 0
26816AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26817SELECT COUNT(*) INTO @clash_count
26818FROM t1 INNER JOIN t0_template USING(f_int1)
26819WHERE MOD(f_int1,3) = 0
26820AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26821SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
26822INSERT INTO t1
26823SET f_int1 = @cur_value , f_int2 = @cur_value,
26824f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26825f_charbig = '#SINGLE#';
26826
26827# check single-1 success: 	1
26828SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
26829INSERT INTO t1
26830SET f_int1 = @cur_value , f_int2 = @cur_value,
26831f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
26832f_charbig = '#SINGLE#';
26833
26834# check single-2 success: 	1
26835SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
26836SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
26837UPDATE t1 SET f_int1 = @cur_value2
26838WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
26839
26840# check single-3 success: 	1
26841SET @cur_value1= -1;
26842SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
26843UPDATE t1 SET f_int1 = @cur_value1
26844WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
26845
26846# check single-4 success: 	1
26847SELECT MAX(f_int1) INTO @cur_value FROM t1;
26848DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
26849
26850# check single-5 success: 	1
26851DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
26852
26853# check single-6 success: 	1
26854INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
26855ERROR HY000: Table has no partition for value 2147483647
26856DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
26857INSERT t1 SET f_int1 = 0 , f_int2 = 0,
26858f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
26859f_charbig = '#NULL#';
26860INSERT INTO t1
26861SET f_int1 = NULL , f_int2 = -@max_row,
26862f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
26863f_charbig = '#NULL#';
26864ERROR 23000: Column 'f_int1' cannot be null
26865# check null success:    1
26866DELETE FROM t1
26867WHERE f_int1 = 0 AND f_int2 = 0
26868AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
26869AND f_charbig = '#NULL#';
26870INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26871SELECT f_int1, f_int1, '', '', 'was inserted'
26872   FROM t0_template source_tab
26873WHERE MOD(f_int1,3) = 0
26874AND f_int1 BETWEEN @max_row_div2 AND @max_row
26875ON DUPLICATE KEY
26876UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
26877f_int2 = 2 * @max_row + source_tab.f_int1,
26878f_charbig = 'was updated';
26879
26880# check unique-1-a success: 	1
26881
26882# check unique-1-b success: 	1
26883DELETE FROM t1 WHERE f_charbig = 'was inserted';
26884UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26885f_int2 = CAST(f_char1 AS SIGNED INT),
26886f_charbig = CONCAT('===',f_char1,'===')
26887WHERE f_charbig = 'was updated';
26888REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26889SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
26890   FROM t0_template source_tab
26891WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
26892
26893# check replace success: 	1
26894DELETE FROM t1
26895WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
26896DELETE FROM t1
26897WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
26898f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
26899UPDATE t1 SET f_int2 = f_int1,
26900f_char1 = CAST(f_int1 AS CHAR),
26901f_char2 = CAST(f_int1 AS CHAR),
26902f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
26903WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
26904SET AUTOCOMMIT= 0;
26905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26906SELECT f_int1, f_int1, '', '', 'was inserted'
26907FROM t0_template source_tab
26908WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26909
26910# check transactions-1 success: 	1
26911COMMIT WORK;
26912
26913# check transactions-2 success: 	1
26914ROLLBACK WORK;
26915
26916# check transactions-3 success: 	1
26917DELETE FROM t1 WHERE f_charbig = 'was inserted';
26918COMMIT WORK;
26919ROLLBACK WORK;
26920
26921# check transactions-4 success: 	1
26922INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26923SELECT f_int1, f_int1, '', '', 'was inserted'
26924FROM t0_template source_tab
26925WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26926
26927# check transactions-5 success: 	1
26928ROLLBACK WORK;
26929
26930# check transactions-6 success: 	1
26931# INFO: Storage engine used for t1 seems to be transactional.
26932COMMIT;
26933
26934# check transactions-7 success: 	1
26935DELETE FROM t1 WHERE f_charbig = 'was inserted';
26936COMMIT WORK;
26937SET @@session.sql_mode = 'traditional';
26938Warnings:
26939Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
26940SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
26941INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
26942SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
26943'', '', 'was inserted' FROM t0_template
26944WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
26945ERROR 22012: Division by 0
26946COMMIT;
26947
26948# check transactions-8 success: 	1
26949# INFO: Storage engine used for t1 seems to be able to revert
26950#       changes made by the failing statement.
26951SET @@session.sql_mode = '';
26952Warnings:
26953Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
26954SET AUTOCOMMIT= 1;
26955DELETE FROM t1 WHERE f_charbig = 'was inserted';
26956COMMIT WORK;
26957UPDATE t1 SET f_charbig = REPEAT('b', 1000);
26958
26959# check special-1 success: 	1
26960UPDATE t1 SET f_charbig = '';
26961
26962# check special-2 success: 	1
26963UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
26964INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
26965SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
26966WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26967INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26968SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26969'just inserted' FROM t0_template
26970WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26971CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
26972BEGIN
26973UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26974f_charbig = 'updated by trigger'
26975      WHERE f_int1 = new.f_int1;
26976END|
26977INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26978SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
26979WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26980
26981# check trigger-1 success: 	1
26982DROP TRIGGER trg_1;
26983UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
26984f_int2 = CAST(f_char1 AS SIGNED INT),
26985f_charbig = 'just inserted'
26986   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
26987DELETE FROM t0_aux
26988WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26989INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
26990SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
26991'just inserted' FROM t0_template
26992WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
26993CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
26994BEGIN
26995UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
26996f_charbig = 'updated by trigger'
26997      WHERE f_int1 = new.f_int1;
26998END|
26999INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27000SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27001WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27002
27003# check trigger-2 success: 	1
27004DROP TRIGGER trg_1;
27005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27006f_int2 = CAST(f_char1 AS SIGNED INT),
27007f_charbig = 'just inserted'
27008   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27009DELETE FROM t0_aux
27010WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27011INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27012SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27013'just inserted' FROM t0_template
27014WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27015CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27016BEGIN
27017UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27018f_charbig = 'updated by trigger'
27019      WHERE f_int1 = new.f_int1;
27020END|
27021UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27022WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27023
27024# check trigger-3 success: 	1
27025DROP TRIGGER trg_1;
27026UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27027f_int2 = CAST(f_char1 AS SIGNED INT),
27028f_charbig = 'just inserted'
27029   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27030DELETE FROM t0_aux
27031WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27032INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27033SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27034'just inserted' FROM t0_template
27035WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27036CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27037BEGIN
27038UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27039f_charbig = 'updated by trigger'
27040      WHERE f_int1 = - old.f_int1;
27041END|
27042UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27043WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27044
27045# check trigger-4 success: 	1
27046DROP TRIGGER trg_1;
27047UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27048f_int2 = CAST(f_char1 AS SIGNED INT),
27049f_charbig = 'just inserted'
27050   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27051DELETE FROM t0_aux
27052WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27053INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27054SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27055'just inserted' FROM t0_template
27056WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27057CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27058BEGIN
27059UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27060f_charbig = 'updated by trigger'
27061      WHERE f_int1 = new.f_int1;
27062END|
27063UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27064WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27065
27066# check trigger-5 success: 	1
27067DROP TRIGGER trg_1;
27068UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27069f_int2 = CAST(f_char1 AS SIGNED INT),
27070f_charbig = 'just inserted'
27071   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27072DELETE FROM t0_aux
27073WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27074INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27075SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27076'just inserted' FROM t0_template
27077WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27078CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27079BEGIN
27080UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27081f_charbig = 'updated by trigger'
27082      WHERE f_int1 = - old.f_int1;
27083END|
27084UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27085WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27086
27087# check trigger-6 success: 	1
27088DROP TRIGGER trg_1;
27089UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27090f_int2 = CAST(f_char1 AS SIGNED INT),
27091f_charbig = 'just inserted'
27092   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27093DELETE FROM t0_aux
27094WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27095INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27096SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27097'just inserted' FROM t0_template
27098WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27099CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27100BEGIN
27101UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27102f_charbig = 'updated by trigger'
27103      WHERE f_int1 = - old.f_int1;
27104END|
27105DELETE FROM t0_aux
27106WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27107
27108# check trigger-7 success: 	1
27109DROP TRIGGER trg_1;
27110UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27111f_int2 = CAST(f_char1 AS SIGNED INT),
27112f_charbig = 'just inserted'
27113   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27114DELETE FROM t0_aux
27115WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27116INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27117SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27118'just inserted' FROM t0_template
27119WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27120CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27121BEGIN
27122UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27123f_charbig = 'updated by trigger'
27124      WHERE f_int1 = - old.f_int1;
27125END|
27126DELETE FROM t0_aux
27127WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27128
27129# check trigger-8 success: 	1
27130DROP TRIGGER trg_1;
27131UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27132f_int2 = CAST(f_char1 AS SIGNED INT),
27133f_charbig = 'just inserted'
27134   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27135DELETE FROM t0_aux
27136WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27137DELETE FROM t1
27138WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27139CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27140BEGIN
27141SET new.f_int1 = old.f_int1 + @max_row,
27142new.f_int2 = old.f_int2 - @max_row,
27143new.f_charbig = '####updated per update trigger####';
27144END|
27145UPDATE t1
27146SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27147f_charbig = '####updated per update statement itself####';
27148
27149# check trigger-9 success: 	1
27150DROP TRIGGER trg_2;
27151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27152f_int2 = CAST(f_char1 AS SIGNED INT),
27153f_charbig = CONCAT('===',f_char1,'===');
27154CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27155BEGIN
27156SET new.f_int1 = new.f_int1 + @max_row,
27157new.f_int2 = new.f_int2 - @max_row,
27158new.f_charbig = '####updated per update trigger####';
27159END|
27160UPDATE t1
27161SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27162f_charbig = '####updated per update statement itself####';
27163
27164# check trigger-10 success: 	1
27165DROP TRIGGER trg_2;
27166UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27167f_int2 = CAST(f_char1 AS SIGNED INT),
27168f_charbig = CONCAT('===',f_char1,'===');
27169CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27170BEGIN
27171SET new.f_int1 = @my_max1 + @counter,
27172new.f_int2 = @my_min2 - @counter,
27173new.f_charbig = '####updated per insert trigger####';
27174SET @counter = @counter + 1;
27175END|
27176SET @counter = 1;
27177SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27178INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27179SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27180CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27182ORDER BY f_int1;
27183DROP TRIGGER trg_3;
27184
27185# check trigger-11 success: 	1
27186DELETE FROM t1
27187WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27188AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27189AND f_charbig = '####updated per insert trigger####';
27190CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27191BEGIN
27192SET new.f_int1 = @my_max1 + @counter,
27193new.f_int2 = @my_min2 - @counter,
27194new.f_charbig = '####updated per insert trigger####';
27195SET @counter = @counter + 1;
27196END|
27197SET @counter = 1;
27198SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27199INSERT INTO t1 (f_char1, f_char2, f_charbig)
27200SELECT CAST(f_int1 AS CHAR),
27201CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27203ORDER BY f_int1;
27204DROP TRIGGER trg_3;
27205
27206# check trigger-12 success: 	1
27207DELETE FROM t1
27208WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27209AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27210AND f_charbig = '####updated per insert trigger####';
27211ANALYZE  TABLE t1;
27212Table	Op	Msg_type	Msg_text
27213test.t1	analyze	status	OK
27214CHECK    TABLE t1 EXTENDED;
27215Table	Op	Msg_type	Msg_text
27216test.t1	check	status	OK
27217CHECKSUM TABLE t1 EXTENDED;
27218Table	Checksum
27219test.t1	<some_value>
27220OPTIMIZE TABLE t1;
27221Table	Op	Msg_type	Msg_text
27222test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
27223test.t1	optimize	status	OK
27224# check layout success:    1
27225REPAIR   TABLE t1 EXTENDED;
27226Table	Op	Msg_type	Msg_text
27227test.t1	repair	status	OK
27228# check layout success:    1
27229TRUNCATE t1;
27230
27231# check TRUNCATE success: 	1
27232# check layout success:    1
27233# End usability test (inc/partition_check.inc)
27234DROP TABLE t1;
27235CREATE TABLE t1 (
27236f_int1 INTEGER,
27237f_int2 INTEGER,
27238f_char1 CHAR(20),
27239f_char2 CHAR(20),
27240f_charbig VARCHAR(1000)
27241, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
27242)
27243PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
27244(PARTITION part1 VALUES IN (0)
27245(SUBPARTITION sp11, SUBPARTITION sp12),
27246PARTITION part2 VALUES IN (1)
27247(SUBPARTITION sp21, SUBPARTITION sp22),
27248PARTITION part3 VALUES IN (2)
27249(SUBPARTITION sp31, SUBPARTITION sp32),
27250PARTITION part4 VALUES IN (NULL)
27251(SUBPARTITION sp41, SUBPARTITION sp42));
27252INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27253SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
27254# Start usability test (inc/partition_check.inc)
27255create_command
27256SHOW CREATE TABLE t1;
27257Table	Create Table
27258t1	CREATE TABLE `t1` (
27259  `f_int1` int(11) NOT NULL,
27260  `f_int2` int(11) NOT NULL,
27261  `f_char1` char(20) DEFAULT NULL,
27262  `f_char2` char(20) DEFAULT NULL,
27263  `f_charbig` varchar(1000) DEFAULT NULL,
27264  PRIMARY KEY (`f_int1`,`f_int2`),
27265  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
27266) ENGINE=InnoDB DEFAULT CHARSET=latin1
27267/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
27268SUBPARTITION BY HASH (f_int2 + 1)
27269(PARTITION part1 VALUES IN (0)
27270 (SUBPARTITION sp11 ENGINE = InnoDB,
27271  SUBPARTITION sp12 ENGINE = InnoDB),
27272 PARTITION part2 VALUES IN (1)
27273 (SUBPARTITION sp21 ENGINE = InnoDB,
27274  SUBPARTITION sp22 ENGINE = InnoDB),
27275 PARTITION part3 VALUES IN (2)
27276 (SUBPARTITION sp31 ENGINE = InnoDB,
27277  SUBPARTITION sp32 ENGINE = InnoDB),
27278 PARTITION part4 VALUES IN (NULL)
27279 (SUBPARTITION sp41 ENGINE = InnoDB,
27280  SUBPARTITION sp42 ENGINE = InnoDB)) */
27281
27282unified filelist
27283t1#P#part1#SP#sp11.ibd
27284t1#P#part1#SP#sp12.ibd
27285t1#P#part2#SP#sp21.ibd
27286t1#P#part2#SP#sp22.ibd
27287t1#P#part3#SP#sp31.ibd
27288t1#P#part3#SP#sp32.ibd
27289t1#P#part4#SP#sp41.ibd
27290t1#P#part4#SP#sp42.ibd
27291t1.frm
27292
27293# check prerequisites-1 success:    1
27294# check COUNT(*) success:    1
27295# check MIN/MAX(f_int1) success:    1
27296# check MIN/MAX(f_int2) success:    1
27297INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27298SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27299CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27300WHERE f_int1 IN (2,3);
27301ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
27302# check prerequisites-3 success:    1
27303# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
27304INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27305SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27306CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27307WHERE f_int1 IN (2,3);
27308DELETE FROM t1 WHERE f_charbig = 'delete me';
27309INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27310SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27311CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27312WHERE f_int1 IN (2,3);
27313DELETE FROM t1 WHERE f_charbig = 'delete me';
27314# check read via f_int1 success: 1
27315# check read via f_int2 success: 1
27316
27317# check multiple-1 success: 	1
27318DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27319
27320# check multiple-2 success: 	1
27321INSERT INTO t1 SELECT * FROM t0_template
27322WHERE MOD(f_int1,3) = 0;
27323
27324# check multiple-3 success: 	1
27325UPDATE t1 SET f_int1 = f_int1 + @max_row
27326WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27327AND @max_row_div2 + @max_row_div4;
27328
27329# check multiple-4 success: 	1
27330DELETE FROM t1
27331WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27332AND @max_row_div2 + @max_row_div4 + @max_row;
27333
27334# check multiple-5 success: 	1
27335SELECT COUNT(*) INTO @try_count FROM t0_template
27336WHERE MOD(f_int1,3) = 0
27337AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27338SELECT COUNT(*) INTO @clash_count
27339FROM t1 INNER JOIN t0_template USING(f_int1)
27340WHERE MOD(f_int1,3) = 0
27341AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27342SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27343INSERT INTO t1
27344SET f_int1 = @cur_value , f_int2 = @cur_value,
27345f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27346f_charbig = '#SINGLE#';
27347
27348# check single-1 success: 	1
27349SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27350INSERT INTO t1
27351SET f_int1 = @cur_value , f_int2 = @cur_value,
27352f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27353f_charbig = '#SINGLE#';
27354
27355# check single-2 success: 	1
27356SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27357SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27358UPDATE t1 SET f_int1 = @cur_value2
27359WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27360
27361# check single-3 success: 	1
27362SET @cur_value1= -1;
27363SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27364UPDATE t1 SET f_int1 = @cur_value1
27365WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27366
27367# check single-4 success: 	1
27368SELECT MAX(f_int1) INTO @cur_value FROM t1;
27369DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27370
27371# check single-5 success: 	1
27372DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27373
27374# check single-6 success: 	1
27375INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27376
27377# check single-7 success: 	1
27378DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27379DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27380INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27381f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27382f_charbig = '#NULL#';
27383INSERT INTO t1
27384SET f_int1 = NULL , f_int2 = -@max_row,
27385f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27386f_charbig = '#NULL#';
27387ERROR 23000: Column 'f_int1' cannot be null
27388# check null success:    1
27389DELETE FROM t1
27390WHERE f_int1 = 0 AND f_int2 = 0
27391AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27392AND f_charbig = '#NULL#';
27393INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27394SELECT f_int1, f_int1, '', '', 'was inserted'
27395   FROM t0_template source_tab
27396WHERE MOD(f_int1,3) = 0
27397AND f_int1 BETWEEN @max_row_div2 AND @max_row
27398ON DUPLICATE KEY
27399UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
27400f_int2 = 2 * @max_row + source_tab.f_int1,
27401f_charbig = 'was updated';
27402
27403# check unique-1-a success: 	1
27404
27405# check unique-1-b success: 	1
27406DELETE FROM t1 WHERE f_charbig = 'was inserted';
27407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27408f_int2 = CAST(f_char1 AS SIGNED INT),
27409f_charbig = CONCAT('===',f_char1,'===')
27410WHERE f_charbig = 'was updated';
27411REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27412SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
27413   FROM t0_template source_tab
27414WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27415
27416# check replace success: 	1
27417DELETE FROM t1
27418WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
27419DELETE FROM t1
27420WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
27421f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
27422UPDATE t1 SET f_int2 = f_int1,
27423f_char1 = CAST(f_int1 AS CHAR),
27424f_char2 = CAST(f_int1 AS CHAR),
27425f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
27426WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
27427SET AUTOCOMMIT= 0;
27428INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27429SELECT f_int1, f_int1, '', '', 'was inserted'
27430FROM t0_template source_tab
27431WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27432
27433# check transactions-1 success: 	1
27434COMMIT WORK;
27435
27436# check transactions-2 success: 	1
27437ROLLBACK WORK;
27438
27439# check transactions-3 success: 	1
27440DELETE FROM t1 WHERE f_charbig = 'was inserted';
27441COMMIT WORK;
27442ROLLBACK WORK;
27443
27444# check transactions-4 success: 	1
27445INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27446SELECT f_int1, f_int1, '', '', 'was inserted'
27447FROM t0_template source_tab
27448WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27449
27450# check transactions-5 success: 	1
27451ROLLBACK WORK;
27452
27453# check transactions-6 success: 	1
27454# INFO: Storage engine used for t1 seems to be transactional.
27455COMMIT;
27456
27457# check transactions-7 success: 	1
27458DELETE FROM t1 WHERE f_charbig = 'was inserted';
27459COMMIT WORK;
27460SET @@session.sql_mode = 'traditional';
27461Warnings:
27462Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
27463SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27464INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27465SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27466'', '', 'was inserted' FROM t0_template
27467WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27468ERROR 22012: Division by 0
27469COMMIT;
27470
27471# check transactions-8 success: 	1
27472# INFO: Storage engine used for t1 seems to be able to revert
27473#       changes made by the failing statement.
27474SET @@session.sql_mode = '';
27475Warnings:
27476Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
27477SET AUTOCOMMIT= 1;
27478DELETE FROM t1 WHERE f_charbig = 'was inserted';
27479COMMIT WORK;
27480UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27481
27482# check special-1 success: 	1
27483UPDATE t1 SET f_charbig = '';
27484
27485# check special-2 success: 	1
27486UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27487INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27488SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
27489WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27490INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27491SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27492'just inserted' FROM t0_template
27493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27494CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
27495BEGIN
27496UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27497f_charbig = 'updated by trigger'
27498      WHERE f_int1 = new.f_int1;
27499END|
27500INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27501SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27502WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27503
27504# check trigger-1 success: 	1
27505DROP TRIGGER trg_1;
27506UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27507f_int2 = CAST(f_char1 AS SIGNED INT),
27508f_charbig = 'just inserted'
27509   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27510DELETE FROM t0_aux
27511WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27512INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27513SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27514'just inserted' FROM t0_template
27515WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27516CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
27517BEGIN
27518UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27519f_charbig = 'updated by trigger'
27520      WHERE f_int1 = new.f_int1;
27521END|
27522INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27523SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
27524WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27525
27526# check trigger-2 success: 	1
27527DROP TRIGGER trg_1;
27528UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27529f_int2 = CAST(f_char1 AS SIGNED INT),
27530f_charbig = 'just inserted'
27531   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27532DELETE FROM t0_aux
27533WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27534INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27535SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27536'just inserted' FROM t0_template
27537WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27538CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27539BEGIN
27540UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27541f_charbig = 'updated by trigger'
27542      WHERE f_int1 = new.f_int1;
27543END|
27544UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27545WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27546
27547# check trigger-3 success: 	1
27548DROP TRIGGER trg_1;
27549UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27550f_int2 = CAST(f_char1 AS SIGNED INT),
27551f_charbig = 'just inserted'
27552   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27553DELETE FROM t0_aux
27554WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27555INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27556SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27557'just inserted' FROM t0_template
27558WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27559CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
27560BEGIN
27561UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27562f_charbig = 'updated by trigger'
27563      WHERE f_int1 = - old.f_int1;
27564END|
27565UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27566WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27567
27568# check trigger-4 success: 	1
27569DROP TRIGGER trg_1;
27570UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27571f_int2 = CAST(f_char1 AS SIGNED INT),
27572f_charbig = 'just inserted'
27573   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27574DELETE FROM t0_aux
27575WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27576INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27577SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27578'just inserted' FROM t0_template
27579WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27580CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27581BEGIN
27582UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27583f_charbig = 'updated by trigger'
27584      WHERE f_int1 = new.f_int1;
27585END|
27586UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27587WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27588
27589# check trigger-5 success: 	1
27590DROP TRIGGER trg_1;
27591UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27592f_int2 = CAST(f_char1 AS SIGNED INT),
27593f_charbig = 'just inserted'
27594   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27595DELETE FROM t0_aux
27596WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27597INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27598SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27599'just inserted' FROM t0_template
27600WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27601CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
27602BEGIN
27603UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27604f_charbig = 'updated by trigger'
27605      WHERE f_int1 = - old.f_int1;
27606END|
27607UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
27608WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27609
27610# check trigger-6 success: 	1
27611DROP TRIGGER trg_1;
27612UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27613f_int2 = CAST(f_char1 AS SIGNED INT),
27614f_charbig = 'just inserted'
27615   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27616DELETE FROM t0_aux
27617WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27618INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27619SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27620'just inserted' FROM t0_template
27621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27622CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
27623BEGIN
27624UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27625f_charbig = 'updated by trigger'
27626      WHERE f_int1 = - old.f_int1;
27627END|
27628DELETE FROM t0_aux
27629WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27630
27631# check trigger-7 success: 	1
27632DROP TRIGGER trg_1;
27633UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27634f_int2 = CAST(f_char1 AS SIGNED INT),
27635f_charbig = 'just inserted'
27636   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27637DELETE FROM t0_aux
27638WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27639INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
27640SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
27641'just inserted' FROM t0_template
27642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27643CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
27644BEGIN
27645UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
27646f_charbig = 'updated by trigger'
27647      WHERE f_int1 = - old.f_int1;
27648END|
27649DELETE FROM t0_aux
27650WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
27651
27652# check trigger-8 success: 	1
27653DROP TRIGGER trg_1;
27654UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27655f_int2 = CAST(f_char1 AS SIGNED INT),
27656f_charbig = 'just inserted'
27657   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
27658DELETE FROM t0_aux
27659WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27660DELETE FROM t1
27661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
27662CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27663BEGIN
27664SET new.f_int1 = old.f_int1 + @max_row,
27665new.f_int2 = old.f_int2 - @max_row,
27666new.f_charbig = '####updated per update trigger####';
27667END|
27668UPDATE t1
27669SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27670f_charbig = '####updated per update statement itself####';
27671
27672# check trigger-9 success: 	1
27673DROP TRIGGER trg_2;
27674UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27675f_int2 = CAST(f_char1 AS SIGNED INT),
27676f_charbig = CONCAT('===',f_char1,'===');
27677CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
27678BEGIN
27679SET new.f_int1 = new.f_int1 + @max_row,
27680new.f_int2 = new.f_int2 - @max_row,
27681new.f_charbig = '####updated per update trigger####';
27682END|
27683UPDATE t1
27684SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
27685f_charbig = '####updated per update statement itself####';
27686
27687# check trigger-10 success: 	1
27688DROP TRIGGER trg_2;
27689UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27690f_int2 = CAST(f_char1 AS SIGNED INT),
27691f_charbig = CONCAT('===',f_char1,'===');
27692CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27693BEGIN
27694SET new.f_int1 = @my_max1 + @counter,
27695new.f_int2 = @my_min2 - @counter,
27696new.f_charbig = '####updated per insert trigger####';
27697SET @counter = @counter + 1;
27698END|
27699SET @counter = 1;
27700SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27701INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27702SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27703CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27704WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27705ORDER BY f_int1;
27706DROP TRIGGER trg_3;
27707
27708# check trigger-11 success: 	1
27709DELETE FROM t1
27710WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27711AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27712AND f_charbig = '####updated per insert trigger####';
27713CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
27714BEGIN
27715SET new.f_int1 = @my_max1 + @counter,
27716new.f_int2 = @my_min2 - @counter,
27717new.f_charbig = '####updated per insert trigger####';
27718SET @counter = @counter + 1;
27719END|
27720SET @counter = 1;
27721SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
27722INSERT INTO t1 (f_char1, f_char2, f_charbig)
27723SELECT CAST(f_int1 AS CHAR),
27724CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
27725WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
27726ORDER BY f_int1;
27727DROP TRIGGER trg_3;
27728
27729# check trigger-12 success: 	1
27730DELETE FROM t1
27731WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
27732AND f_int2 <> CAST(f_char1 AS SIGNED INT)
27733AND f_charbig = '####updated per insert trigger####';
27734ANALYZE  TABLE t1;
27735Table	Op	Msg_type	Msg_text
27736test.t1	analyze	status	OK
27737CHECK    TABLE t1 EXTENDED;
27738Table	Op	Msg_type	Msg_text
27739test.t1	check	status	OK
27740CHECKSUM TABLE t1 EXTENDED;
27741Table	Checksum
27742test.t1	<some_value>
27743OPTIMIZE TABLE t1;
27744Table	Op	Msg_type	Msg_text
27745test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
27746test.t1	optimize	status	OK
27747# check layout success:    1
27748REPAIR   TABLE t1 EXTENDED;
27749Table	Op	Msg_type	Msg_text
27750test.t1	repair	status	OK
27751# check layout success:    1
27752TRUNCATE t1;
27753
27754# check TRUNCATE success: 	1
27755# check layout success:    1
27756# End usability test (inc/partition_check.inc)
27757DROP TABLE t1;
27758CREATE TABLE t1 (
27759f_int1 INTEGER,
27760f_int2 INTEGER,
27761f_char1 CHAR(20),
27762f_char2 CHAR(20),
27763f_charbig VARCHAR(1000)
27764, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2)
27765)
27766PARTITION BY LIST(ABS(MOD(f_int1,2)))
27767SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
27768(PARTITION part1 VALUES IN (0),
27769PARTITION part2 VALUES IN (1),
27770PARTITION part3 VALUES IN (NULL));
27771INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
27772SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
27773# Start usability test (inc/partition_check.inc)
27774create_command
27775SHOW CREATE TABLE t1;
27776Table	Create Table
27777t1	CREATE TABLE `t1` (
27778  `f_int1` int(11) NOT NULL,
27779  `f_int2` int(11) NOT NULL,
27780  `f_char1` char(20) DEFAULT NULL,
27781  `f_char2` char(20) DEFAULT NULL,
27782  `f_charbig` varchar(1000) DEFAULT NULL,
27783  PRIMARY KEY (`f_int1`,`f_int2`),
27784  UNIQUE KEY `uidx1` (`f_int2`,`f_int1`)
27785) ENGINE=InnoDB DEFAULT CHARSET=latin1
27786/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
27787SUBPARTITION BY KEY (f_int2)
27788SUBPARTITIONS 3
27789(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
27790 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
27791 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
27792
27793unified filelist
27794t1#P#part1#SP#part1sp0.ibd
27795t1#P#part1#SP#part1sp1.ibd
27796t1#P#part1#SP#part1sp2.ibd
27797t1#P#part2#SP#part2sp0.ibd
27798t1#P#part2#SP#part2sp1.ibd
27799t1#P#part2#SP#part2sp2.ibd
27800t1#P#part3#SP#part3sp0.ibd
27801t1#P#part3#SP#part3sp1.ibd
27802t1#P#part3#SP#part3sp2.ibd
27803t1.frm
27804
27805# check prerequisites-1 success:    1
27806# check COUNT(*) success:    1
27807# check MIN/MAX(f_int1) success:    1
27808# check MIN/MAX(f_int2) success:    1
27809INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27810SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
27811CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
27812WHERE f_int1 IN (2,3);
27813ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
27814# check prerequisites-3 success:    1
27815# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
27816INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27817SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27818CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27819WHERE f_int1 IN (2,3);
27820DELETE FROM t1 WHERE f_charbig = 'delete me';
27821INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27822SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
27823CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
27824WHERE f_int1 IN (2,3);
27825DELETE FROM t1 WHERE f_charbig = 'delete me';
27826# check read via f_int1 success: 1
27827# check read via f_int2 success: 1
27828
27829# check multiple-1 success: 	1
27830DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
27831
27832# check multiple-2 success: 	1
27833INSERT INTO t1 SELECT * FROM t0_template
27834WHERE MOD(f_int1,3) = 0;
27835
27836# check multiple-3 success: 	1
27837UPDATE t1 SET f_int1 = f_int1 + @max_row
27838WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
27839AND @max_row_div2 + @max_row_div4;
27840
27841# check multiple-4 success: 	1
27842DELETE FROM t1
27843WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
27844AND @max_row_div2 + @max_row_div4 + @max_row;
27845
27846# check multiple-5 success: 	1
27847SELECT COUNT(*) INTO @try_count FROM t0_template
27848WHERE MOD(f_int1,3) = 0
27849AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27850SELECT COUNT(*) INTO @clash_count
27851FROM t1 INNER JOIN t0_template USING(f_int1)
27852WHERE MOD(f_int1,3) = 0
27853AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27854SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
27855INSERT INTO t1
27856SET f_int1 = @cur_value , f_int2 = @cur_value,
27857f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27858f_charbig = '#SINGLE#';
27859
27860# check single-1 success: 	1
27861SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
27862INSERT INTO t1
27863SET f_int1 = @cur_value , f_int2 = @cur_value,
27864f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
27865f_charbig = '#SINGLE#';
27866
27867# check single-2 success: 	1
27868SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
27869SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
27870UPDATE t1 SET f_int1 = @cur_value2
27871WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
27872
27873# check single-3 success: 	1
27874SET @cur_value1= -1;
27875SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
27876UPDATE t1 SET f_int1 = @cur_value1
27877WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
27878
27879# check single-4 success: 	1
27880SELECT MAX(f_int1) INTO @cur_value FROM t1;
27881DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
27882
27883# check single-5 success: 	1
27884DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
27885
27886# check single-6 success: 	1
27887INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
27888
27889# check single-7 success: 	1
27890DELETE FROM t1 WHERE f_charbig = '#2147483647##';
27891DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
27892INSERT t1 SET f_int1 = 0 , f_int2 = 0,
27893f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
27894f_charbig = '#NULL#';
27895INSERT INTO t1
27896SET f_int1 = NULL , f_int2 = -@max_row,
27897f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
27898f_charbig = '#NULL#';
27899ERROR 23000: Column 'f_int1' cannot be null
27900# check null success:    1
27901DELETE FROM t1
27902WHERE f_int1 = 0 AND f_int2 = 0
27903AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
27904AND f_charbig = '#NULL#';
27905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27906SELECT f_int1, f_int1, '', '', 'was inserted'
27907   FROM t0_template source_tab
27908WHERE MOD(f_int1,3) = 0
27909AND f_int1 BETWEEN @max_row_div2 AND @max_row
27910ON DUPLICATE KEY
27911UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
27912f_int2 = 2 * @max_row + source_tab.f_int1,
27913f_charbig = 'was updated';
27914
27915# check unique-1-a success: 	1
27916
27917# check unique-1-b success: 	1
27918DELETE FROM t1 WHERE f_charbig = 'was inserted';
27919UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
27920f_int2 = CAST(f_char1 AS SIGNED INT),
27921f_charbig = CONCAT('===',f_char1,'===')
27922WHERE f_charbig = 'was updated';
27923REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27924SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
27925   FROM t0_template source_tab
27926WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
27927
27928# check replace success: 	1
27929DELETE FROM t1
27930WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
27931DELETE FROM t1
27932WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
27933f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
27934UPDATE t1 SET f_int2 = f_int1,
27935f_char1 = CAST(f_int1 AS CHAR),
27936f_char2 = CAST(f_int1 AS CHAR),
27937f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
27938WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
27939SET AUTOCOMMIT= 0;
27940INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27941SELECT f_int1, f_int1, '', '', 'was inserted'
27942FROM t0_template source_tab
27943WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27944
27945# check transactions-1 success: 	1
27946COMMIT WORK;
27947
27948# check transactions-2 success: 	1
27949ROLLBACK WORK;
27950
27951# check transactions-3 success: 	1
27952DELETE FROM t1 WHERE f_charbig = 'was inserted';
27953COMMIT WORK;
27954ROLLBACK WORK;
27955
27956# check transactions-4 success: 	1
27957INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27958SELECT f_int1, f_int1, '', '', 'was inserted'
27959FROM t0_template source_tab
27960WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27961
27962# check transactions-5 success: 	1
27963ROLLBACK WORK;
27964
27965# check transactions-6 success: 	1
27966# INFO: Storage engine used for t1 seems to be transactional.
27967COMMIT;
27968
27969# check transactions-7 success: 	1
27970DELETE FROM t1 WHERE f_charbig = 'was inserted';
27971COMMIT WORK;
27972SET @@session.sql_mode = 'traditional';
27973Warnings:
27974Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
27975SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
27976INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
27977SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
27978'', '', 'was inserted' FROM t0_template
27979WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
27980ERROR 22012: Division by 0
27981COMMIT;
27982
27983# check transactions-8 success: 	1
27984# INFO: Storage engine used for t1 seems to be able to revert
27985#       changes made by the failing statement.
27986SET @@session.sql_mode = '';
27987Warnings:
27988Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
27989SET AUTOCOMMIT= 1;
27990DELETE FROM t1 WHERE f_charbig = 'was inserted';
27991COMMIT WORK;
27992UPDATE t1 SET f_charbig = REPEAT('b', 1000);
27993
27994# check special-1 success: 	1
27995UPDATE t1 SET f_charbig = '';
27996
27997# check special-2 success: 	1
27998UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
27999INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28000SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28001WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28002INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28003SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28004'just inserted' FROM t0_template
28005WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28006CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28007BEGIN
28008UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28009f_charbig = 'updated by trigger'
28010      WHERE f_int1 = new.f_int1;
28011END|
28012INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28013SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28014WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28015
28016# check trigger-1 success: 	1
28017DROP TRIGGER trg_1;
28018UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28019f_int2 = CAST(f_char1 AS SIGNED INT),
28020f_charbig = 'just inserted'
28021   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28022DELETE FROM t0_aux
28023WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28024INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28025SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28026'just inserted' FROM t0_template
28027WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28028CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28029BEGIN
28030UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28031f_charbig = 'updated by trigger'
28032      WHERE f_int1 = new.f_int1;
28033END|
28034INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28035SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28036WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28037
28038# check trigger-2 success: 	1
28039DROP TRIGGER trg_1;
28040UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28041f_int2 = CAST(f_char1 AS SIGNED INT),
28042f_charbig = 'just inserted'
28043   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28044DELETE FROM t0_aux
28045WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28046INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28047SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28048'just inserted' FROM t0_template
28049WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28050CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28051BEGIN
28052UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28053f_charbig = 'updated by trigger'
28054      WHERE f_int1 = new.f_int1;
28055END|
28056UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28057WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28058
28059# check trigger-3 success: 	1
28060DROP TRIGGER trg_1;
28061UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28062f_int2 = CAST(f_char1 AS SIGNED INT),
28063f_charbig = 'just inserted'
28064   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28065DELETE FROM t0_aux
28066WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28067INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28068SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28069'just inserted' FROM t0_template
28070WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28071CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28072BEGIN
28073UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28074f_charbig = 'updated by trigger'
28075      WHERE f_int1 = - old.f_int1;
28076END|
28077UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28078WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28079
28080# check trigger-4 success: 	1
28081DROP TRIGGER trg_1;
28082UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28083f_int2 = CAST(f_char1 AS SIGNED INT),
28084f_charbig = 'just inserted'
28085   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28086DELETE FROM t0_aux
28087WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28088INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28089SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28090'just inserted' FROM t0_template
28091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28092CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28093BEGIN
28094UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28095f_charbig = 'updated by trigger'
28096      WHERE f_int1 = new.f_int1;
28097END|
28098UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28099WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28100
28101# check trigger-5 success: 	1
28102DROP TRIGGER trg_1;
28103UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28104f_int2 = CAST(f_char1 AS SIGNED INT),
28105f_charbig = 'just inserted'
28106   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28107DELETE FROM t0_aux
28108WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28109INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28110SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28111'just inserted' FROM t0_template
28112WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28113CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28114BEGIN
28115UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28116f_charbig = 'updated by trigger'
28117      WHERE f_int1 = - old.f_int1;
28118END|
28119UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28120WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28121
28122# check trigger-6 success: 	1
28123DROP TRIGGER trg_1;
28124UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28125f_int2 = CAST(f_char1 AS SIGNED INT),
28126f_charbig = 'just inserted'
28127   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28128DELETE FROM t0_aux
28129WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28130INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28131SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28132'just inserted' FROM t0_template
28133WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28134CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28135BEGIN
28136UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28137f_charbig = 'updated by trigger'
28138      WHERE f_int1 = - old.f_int1;
28139END|
28140DELETE FROM t0_aux
28141WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28142
28143# check trigger-7 success: 	1
28144DROP TRIGGER trg_1;
28145UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28146f_int2 = CAST(f_char1 AS SIGNED INT),
28147f_charbig = 'just inserted'
28148   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28149DELETE FROM t0_aux
28150WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28151INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28152SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28153'just inserted' FROM t0_template
28154WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28155CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28156BEGIN
28157UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28158f_charbig = 'updated by trigger'
28159      WHERE f_int1 = - old.f_int1;
28160END|
28161DELETE FROM t0_aux
28162WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28163
28164# check trigger-8 success: 	1
28165DROP TRIGGER trg_1;
28166UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28167f_int2 = CAST(f_char1 AS SIGNED INT),
28168f_charbig = 'just inserted'
28169   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28170DELETE FROM t0_aux
28171WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28172DELETE FROM t1
28173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28174CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28175BEGIN
28176SET new.f_int1 = old.f_int1 + @max_row,
28177new.f_int2 = old.f_int2 - @max_row,
28178new.f_charbig = '####updated per update trigger####';
28179END|
28180UPDATE t1
28181SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28182f_charbig = '####updated per update statement itself####';
28183
28184# check trigger-9 success: 	1
28185DROP TRIGGER trg_2;
28186UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28187f_int2 = CAST(f_char1 AS SIGNED INT),
28188f_charbig = CONCAT('===',f_char1,'===');
28189CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28190BEGIN
28191SET new.f_int1 = new.f_int1 + @max_row,
28192new.f_int2 = new.f_int2 - @max_row,
28193new.f_charbig = '####updated per update trigger####';
28194END|
28195UPDATE t1
28196SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28197f_charbig = '####updated per update statement itself####';
28198
28199# check trigger-10 success: 	1
28200DROP TRIGGER trg_2;
28201UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28202f_int2 = CAST(f_char1 AS SIGNED INT),
28203f_charbig = CONCAT('===',f_char1,'===');
28204CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28205BEGIN
28206SET new.f_int1 = @my_max1 + @counter,
28207new.f_int2 = @my_min2 - @counter,
28208new.f_charbig = '####updated per insert trigger####';
28209SET @counter = @counter + 1;
28210END|
28211SET @counter = 1;
28212SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28213INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28214SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28215CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28216WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28217ORDER BY f_int1;
28218DROP TRIGGER trg_3;
28219
28220# check trigger-11 success: 	1
28221DELETE FROM t1
28222WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28223AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28224AND f_charbig = '####updated per insert trigger####';
28225CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28226BEGIN
28227SET new.f_int1 = @my_max1 + @counter,
28228new.f_int2 = @my_min2 - @counter,
28229new.f_charbig = '####updated per insert trigger####';
28230SET @counter = @counter + 1;
28231END|
28232SET @counter = 1;
28233SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28234INSERT INTO t1 (f_char1, f_char2, f_charbig)
28235SELECT CAST(f_int1 AS CHAR),
28236CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28237WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28238ORDER BY f_int1;
28239DROP TRIGGER trg_3;
28240
28241# check trigger-12 success: 	1
28242DELETE FROM t1
28243WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28244AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28245AND f_charbig = '####updated per insert trigger####';
28246ANALYZE  TABLE t1;
28247Table	Op	Msg_type	Msg_text
28248test.t1	analyze	status	OK
28249CHECK    TABLE t1 EXTENDED;
28250Table	Op	Msg_type	Msg_text
28251test.t1	check	status	OK
28252CHECKSUM TABLE t1 EXTENDED;
28253Table	Checksum
28254test.t1	<some_value>
28255OPTIMIZE TABLE t1;
28256Table	Op	Msg_type	Msg_text
28257test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
28258test.t1	optimize	status	OK
28259# check layout success:    1
28260REPAIR   TABLE t1 EXTENDED;
28261Table	Op	Msg_type	Msg_text
28262test.t1	repair	status	OK
28263# check layout success:    1
28264TRUNCATE t1;
28265
28266# check TRUNCATE success: 	1
28267# check layout success:    1
28268# End usability test (inc/partition_check.inc)
28269DROP TABLE t1;
28270DROP TABLE IF EXISTS t1;
28271CREATE TABLE t1 (
28272f_int1 INTEGER,
28273f_int2 INTEGER,
28274f_char1 CHAR(20),
28275f_char2 CHAR(20),
28276f_charbig VARCHAR(1000)
28277, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
28278)
28279PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
28280INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28281SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
28282# Start usability test (inc/partition_check.inc)
28283create_command
28284SHOW CREATE TABLE t1;
28285Table	Create Table
28286t1	CREATE TABLE `t1` (
28287  `f_int1` int(11) DEFAULT NULL,
28288  `f_int2` int(11) DEFAULT NULL,
28289  `f_char1` char(20) DEFAULT NULL,
28290  `f_char2` char(20) DEFAULT NULL,
28291  `f_charbig` varchar(1000) DEFAULT NULL,
28292  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
28293  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
28294) ENGINE=InnoDB DEFAULT CHARSET=latin1
28295/*!50100 PARTITION BY HASH (f_int1 + f_int2)
28296PARTITIONS 2 */
28297
28298unified filelist
28299t1#P#p0.ibd
28300t1#P#p1.ibd
28301t1.frm
28302
28303# check prerequisites-1 success:    1
28304# check COUNT(*) success:    1
28305# check MIN/MAX(f_int1) success:    1
28306# check MIN/MAX(f_int2) success:    1
28307INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28308SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28309CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28310WHERE f_int1 IN (2,3);
28311ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
28312# check prerequisites-3 success:    1
28313# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28314INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28315SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28316CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28317WHERE f_int1 IN (2,3);
28318DELETE FROM t1 WHERE f_charbig = 'delete me';
28319INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28320SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28321CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28322WHERE f_int1 IN (2,3);
28323DELETE FROM t1 WHERE f_charbig = 'delete me';
28324# check read via f_int1 success: 1
28325# check read via f_int2 success: 1
28326
28327# check multiple-1 success: 	1
28328DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28329
28330# check multiple-2 success: 	1
28331INSERT INTO t1 SELECT * FROM t0_template
28332WHERE MOD(f_int1,3) = 0;
28333
28334# check multiple-3 success: 	1
28335UPDATE t1 SET f_int1 = f_int1 + @max_row
28336WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28337AND @max_row_div2 + @max_row_div4;
28338
28339# check multiple-4 success: 	1
28340DELETE FROM t1
28341WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28342AND @max_row_div2 + @max_row_div4 + @max_row;
28343
28344# check multiple-5 success: 	1
28345SELECT COUNT(*) INTO @try_count FROM t0_template
28346WHERE MOD(f_int1,3) = 0
28347AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28348SELECT COUNT(*) INTO @clash_count
28349FROM t1 INNER JOIN t0_template USING(f_int1)
28350WHERE MOD(f_int1,3) = 0
28351AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28352SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28353INSERT INTO t1
28354SET f_int1 = @cur_value , f_int2 = @cur_value,
28355f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28356f_charbig = '#SINGLE#';
28357
28358# check single-1 success: 	1
28359SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28360INSERT INTO t1
28361SET f_int1 = @cur_value , f_int2 = @cur_value,
28362f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28363f_charbig = '#SINGLE#';
28364
28365# check single-2 success: 	1
28366SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28367SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28368UPDATE t1 SET f_int1 = @cur_value2
28369WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28370
28371# check single-3 success: 	1
28372SET @cur_value1= -1;
28373SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28374UPDATE t1 SET f_int1 = @cur_value1
28375WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28376
28377# check single-4 success: 	1
28378SELECT MAX(f_int1) INTO @cur_value FROM t1;
28379DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28380
28381# check single-5 success: 	1
28382DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28383
28384# check single-6 success: 	1
28385INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28386
28387# check single-7 success: 	1
28388DELETE FROM t1 WHERE f_charbig = '#2147483647##';
28389DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28390INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28391f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28392f_charbig = '#NULL#';
28393INSERT INTO t1
28394SET f_int1 = NULL , f_int2 = -@max_row,
28395f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28396f_charbig = '#NULL#';
28397# check null success:    1
28398
28399# check null-1 success: 	1
28400UPDATE t1 SET f_int1 = -@max_row
28401WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28402AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28403
28404# check null-2 success: 	1
28405UPDATE t1 SET f_int1 = NULL
28406WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28407AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28408
28409# check null-3 success: 	1
28410DELETE FROM t1
28411WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28412AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28413
28414# check null-4 success: 	1
28415DELETE FROM t1
28416WHERE f_int1 = 0 AND f_int2 = 0
28417AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28418AND f_charbig = '#NULL#';
28419INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28420SELECT f_int1, f_int1, '', '', 'was inserted'
28421   FROM t0_template source_tab
28422WHERE MOD(f_int1,3) = 0
28423AND f_int1 BETWEEN @max_row_div2 AND @max_row
28424ON DUPLICATE KEY
28425UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28426f_int2 = 2 * @max_row + source_tab.f_int1,
28427f_charbig = 'was updated';
28428
28429# check unique-1-a success: 	1
28430
28431# check unique-1-b success: 	1
28432DELETE FROM t1 WHERE f_charbig = 'was inserted';
28433UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28434f_int2 = CAST(f_char1 AS SIGNED INT),
28435f_charbig = CONCAT('===',f_char1,'===')
28436WHERE f_charbig = 'was updated';
28437REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28438SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28439   FROM t0_template source_tab
28440WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28441
28442# check replace success: 	1
28443DELETE FROM t1
28444WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28445DELETE FROM t1
28446WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28447f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
28448UPDATE t1 SET f_int2 = f_int1,
28449f_char1 = CAST(f_int1 AS CHAR),
28450f_char2 = CAST(f_int1 AS CHAR),
28451f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
28452WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
28453SET AUTOCOMMIT= 0;
28454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28455SELECT f_int1, f_int1, '', '', 'was inserted'
28456FROM t0_template source_tab
28457WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28458
28459# check transactions-1 success: 	1
28460COMMIT WORK;
28461
28462# check transactions-2 success: 	1
28463ROLLBACK WORK;
28464
28465# check transactions-3 success: 	1
28466DELETE FROM t1 WHERE f_charbig = 'was inserted';
28467COMMIT WORK;
28468ROLLBACK WORK;
28469
28470# check transactions-4 success: 	1
28471INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28472SELECT f_int1, f_int1, '', '', 'was inserted'
28473FROM t0_template source_tab
28474WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28475
28476# check transactions-5 success: 	1
28477ROLLBACK WORK;
28478
28479# check transactions-6 success: 	1
28480# INFO: Storage engine used for t1 seems to be transactional.
28481COMMIT;
28482
28483# check transactions-7 success: 	1
28484DELETE FROM t1 WHERE f_charbig = 'was inserted';
28485COMMIT WORK;
28486SET @@session.sql_mode = 'traditional';
28487Warnings:
28488Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
28489SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
28490INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28491SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
28492'', '', 'was inserted' FROM t0_template
28493WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28494ERROR 22012: Division by 0
28495COMMIT;
28496
28497# check transactions-8 success: 	1
28498# INFO: Storage engine used for t1 seems to be able to revert
28499#       changes made by the failing statement.
28500SET @@session.sql_mode = '';
28501Warnings:
28502Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
28503SET AUTOCOMMIT= 1;
28504DELETE FROM t1 WHERE f_charbig = 'was inserted';
28505COMMIT WORK;
28506UPDATE t1 SET f_charbig = REPEAT('b', 1000);
28507
28508# check special-1 success: 	1
28509UPDATE t1 SET f_charbig = '';
28510
28511# check special-2 success: 	1
28512UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
28513INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28514SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
28515WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28516INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28517SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28518'just inserted' FROM t0_template
28519WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28520CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
28521BEGIN
28522UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28523f_charbig = 'updated by trigger'
28524      WHERE f_int1 = new.f_int1;
28525END|
28526INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28527SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28529
28530# check trigger-1 success: 	1
28531DROP TRIGGER trg_1;
28532UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28533f_int2 = CAST(f_char1 AS SIGNED INT),
28534f_charbig = 'just inserted'
28535   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28536DELETE FROM t0_aux
28537WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28538INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28539SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28540'just inserted' FROM t0_template
28541WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28542CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
28543BEGIN
28544UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28545f_charbig = 'updated by trigger'
28546      WHERE f_int1 = new.f_int1;
28547END|
28548INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28549SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
28550WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28551
28552# check trigger-2 success: 	1
28553DROP TRIGGER trg_1;
28554UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28555f_int2 = CAST(f_char1 AS SIGNED INT),
28556f_charbig = 'just inserted'
28557   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28558DELETE FROM t0_aux
28559WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28560INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28561SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28562'just inserted' FROM t0_template
28563WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28564CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28565BEGIN
28566UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28567f_charbig = 'updated by trigger'
28568      WHERE f_int1 = new.f_int1;
28569END|
28570UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28571WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28572
28573# check trigger-3 success: 	1
28574DROP TRIGGER trg_1;
28575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28576f_int2 = CAST(f_char1 AS SIGNED INT),
28577f_charbig = 'just inserted'
28578   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28579DELETE FROM t0_aux
28580WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28581INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28582SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28583'just inserted' FROM t0_template
28584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28585CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
28586BEGIN
28587UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28588f_charbig = 'updated by trigger'
28589      WHERE f_int1 = - old.f_int1;
28590END|
28591UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28592WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28593
28594# check trigger-4 success: 	1
28595DROP TRIGGER trg_1;
28596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28597f_int2 = CAST(f_char1 AS SIGNED INT),
28598f_charbig = 'just inserted'
28599   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28600DELETE FROM t0_aux
28601WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28603SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28604'just inserted' FROM t0_template
28605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28606CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28607BEGIN
28608UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28609f_charbig = 'updated by trigger'
28610      WHERE f_int1 = new.f_int1;
28611END|
28612UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28613WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28614
28615# check trigger-5 success: 	1
28616DROP TRIGGER trg_1;
28617UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28618f_int2 = CAST(f_char1 AS SIGNED INT),
28619f_charbig = 'just inserted'
28620   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28621DELETE FROM t0_aux
28622WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28624SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28625'just inserted' FROM t0_template
28626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28627CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
28628BEGIN
28629UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28630f_charbig = 'updated by trigger'
28631      WHERE f_int1 = - old.f_int1;
28632END|
28633UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
28634WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28635
28636# check trigger-6 success: 	1
28637DROP TRIGGER trg_1;
28638UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28639f_int2 = CAST(f_char1 AS SIGNED INT),
28640f_charbig = 'just inserted'
28641   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28642DELETE FROM t0_aux
28643WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28646'just inserted' FROM t0_template
28647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28648CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
28649BEGIN
28650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28651f_charbig = 'updated by trigger'
28652      WHERE f_int1 = - old.f_int1;
28653END|
28654DELETE FROM t0_aux
28655WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28656
28657# check trigger-7 success: 	1
28658DROP TRIGGER trg_1;
28659UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28660f_int2 = CAST(f_char1 AS SIGNED INT),
28661f_charbig = 'just inserted'
28662   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28663DELETE FROM t0_aux
28664WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28665INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
28666SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
28667'just inserted' FROM t0_template
28668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28669CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
28670BEGIN
28671UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
28672f_charbig = 'updated by trigger'
28673      WHERE f_int1 = - old.f_int1;
28674END|
28675DELETE FROM t0_aux
28676WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
28677
28678# check trigger-8 success: 	1
28679DROP TRIGGER trg_1;
28680UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28681f_int2 = CAST(f_char1 AS SIGNED INT),
28682f_charbig = 'just inserted'
28683   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
28684DELETE FROM t0_aux
28685WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28686DELETE FROM t1
28687WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
28688CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28689BEGIN
28690SET new.f_int1 = old.f_int1 + @max_row,
28691new.f_int2 = old.f_int2 - @max_row,
28692new.f_charbig = '####updated per update trigger####';
28693END|
28694UPDATE t1
28695SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28696f_charbig = '####updated per update statement itself####';
28697
28698# check trigger-9 success: 	1
28699DROP TRIGGER trg_2;
28700UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28701f_int2 = CAST(f_char1 AS SIGNED INT),
28702f_charbig = CONCAT('===',f_char1,'===');
28703CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
28704BEGIN
28705SET new.f_int1 = new.f_int1 + @max_row,
28706new.f_int2 = new.f_int2 - @max_row,
28707new.f_charbig = '####updated per update trigger####';
28708END|
28709UPDATE t1
28710SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
28711f_charbig = '####updated per update statement itself####';
28712
28713# check trigger-10 success: 	1
28714DROP TRIGGER trg_2;
28715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28716f_int2 = CAST(f_char1 AS SIGNED INT),
28717f_charbig = CONCAT('===',f_char1,'===');
28718CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28719BEGIN
28720SET new.f_int1 = @my_max1 + @counter,
28721new.f_int2 = @my_min2 - @counter,
28722new.f_charbig = '####updated per insert trigger####';
28723SET @counter = @counter + 1;
28724END|
28725SET @counter = 1;
28726SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28728SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28729CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28730WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28731ORDER BY f_int1;
28732DROP TRIGGER trg_3;
28733
28734# check trigger-11 success: 	1
28735DELETE FROM t1
28736WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28737AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28738AND f_charbig = '####updated per insert trigger####';
28739CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
28740BEGIN
28741SET new.f_int1 = @my_max1 + @counter,
28742new.f_int2 = @my_min2 - @counter,
28743new.f_charbig = '####updated per insert trigger####';
28744SET @counter = @counter + 1;
28745END|
28746SET @counter = 1;
28747SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
28748INSERT INTO t1 (f_char1, f_char2, f_charbig)
28749SELECT CAST(f_int1 AS CHAR),
28750CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
28751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
28752ORDER BY f_int1;
28753DROP TRIGGER trg_3;
28754
28755# check trigger-12 success: 	1
28756DELETE FROM t1
28757WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
28758AND f_int2 <> CAST(f_char1 AS SIGNED INT)
28759AND f_charbig = '####updated per insert trigger####';
28760ANALYZE  TABLE t1;
28761Table	Op	Msg_type	Msg_text
28762test.t1	analyze	status	OK
28763CHECK    TABLE t1 EXTENDED;
28764Table	Op	Msg_type	Msg_text
28765test.t1	check	status	OK
28766CHECKSUM TABLE t1 EXTENDED;
28767Table	Checksum
28768test.t1	<some_value>
28769OPTIMIZE TABLE t1;
28770Table	Op	Msg_type	Msg_text
28771test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
28772test.t1	optimize	status	OK
28773# check layout success:    1
28774REPAIR   TABLE t1 EXTENDED;
28775Table	Op	Msg_type	Msg_text
28776test.t1	repair	status	OK
28777# check layout success:    1
28778TRUNCATE t1;
28779
28780# check TRUNCATE success: 	1
28781# check layout success:    1
28782# End usability test (inc/partition_check.inc)
28783DROP TABLE t1;
28784CREATE TABLE t1 (
28785f_int1 INTEGER,
28786f_int2 INTEGER,
28787f_char1 CHAR(20),
28788f_char2 CHAR(20),
28789f_charbig VARCHAR(1000)
28790, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
28791)
28792PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
28793INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
28794SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
28795# Start usability test (inc/partition_check.inc)
28796create_command
28797SHOW CREATE TABLE t1;
28798Table	Create Table
28799t1	CREATE TABLE `t1` (
28800  `f_int1` int(11) DEFAULT NULL,
28801  `f_int2` int(11) DEFAULT NULL,
28802  `f_char1` char(20) DEFAULT NULL,
28803  `f_char2` char(20) DEFAULT NULL,
28804  `f_charbig` varchar(1000) DEFAULT NULL,
28805  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
28806  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
28807) ENGINE=InnoDB DEFAULT CHARSET=latin1
28808/*!50100 PARTITION BY KEY (f_int1,f_int2)
28809PARTITIONS 5 */
28810
28811unified filelist
28812t1#P#p0.ibd
28813t1#P#p1.ibd
28814t1#P#p2.ibd
28815t1#P#p3.ibd
28816t1#P#p4.ibd
28817t1.frm
28818
28819# check prerequisites-1 success:    1
28820# check COUNT(*) success:    1
28821# check MIN/MAX(f_int1) success:    1
28822# check MIN/MAX(f_int2) success:    1
28823INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28824SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
28825CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
28826WHERE f_int1 IN (2,3);
28827ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
28828# check prerequisites-3 success:    1
28829# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
28830INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28831SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28832CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28833WHERE f_int1 IN (2,3);
28834DELETE FROM t1 WHERE f_charbig = 'delete me';
28835INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28836SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
28837CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
28838WHERE f_int1 IN (2,3);
28839DELETE FROM t1 WHERE f_charbig = 'delete me';
28840# check read via f_int1 success: 1
28841# check read via f_int2 success: 1
28842
28843# check multiple-1 success: 	1
28844DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
28845
28846# check multiple-2 success: 	1
28847INSERT INTO t1 SELECT * FROM t0_template
28848WHERE MOD(f_int1,3) = 0;
28849
28850# check multiple-3 success: 	1
28851UPDATE t1 SET f_int1 = f_int1 + @max_row
28852WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
28853AND @max_row_div2 + @max_row_div4;
28854
28855# check multiple-4 success: 	1
28856DELETE FROM t1
28857WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
28858AND @max_row_div2 + @max_row_div4 + @max_row;
28859
28860# check multiple-5 success: 	1
28861SELECT COUNT(*) INTO @try_count FROM t0_template
28862WHERE MOD(f_int1,3) = 0
28863AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28864SELECT COUNT(*) INTO @clash_count
28865FROM t1 INNER JOIN t0_template USING(f_int1)
28866WHERE MOD(f_int1,3) = 0
28867AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28868SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
28869INSERT INTO t1
28870SET f_int1 = @cur_value , f_int2 = @cur_value,
28871f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28872f_charbig = '#SINGLE#';
28873
28874# check single-1 success: 	1
28875SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
28876INSERT INTO t1
28877SET f_int1 = @cur_value , f_int2 = @cur_value,
28878f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
28879f_charbig = '#SINGLE#';
28880
28881# check single-2 success: 	1
28882SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
28883SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
28884UPDATE t1 SET f_int1 = @cur_value2
28885WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
28886
28887# check single-3 success: 	1
28888SET @cur_value1= -1;
28889SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
28890UPDATE t1 SET f_int1 = @cur_value1
28891WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
28892
28893# check single-4 success: 	1
28894SELECT MAX(f_int1) INTO @cur_value FROM t1;
28895DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
28896
28897# check single-5 success: 	1
28898DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
28899
28900# check single-6 success: 	1
28901INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
28902
28903# check single-7 success: 	1
28904DELETE FROM t1 WHERE f_charbig = '#2147483647##';
28905DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
28906INSERT t1 SET f_int1 = 0 , f_int2 = 0,
28907f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
28908f_charbig = '#NULL#';
28909INSERT INTO t1
28910SET f_int1 = NULL , f_int2 = -@max_row,
28911f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
28912f_charbig = '#NULL#';
28913# check null success:    1
28914
28915# check null-1 success: 	1
28916UPDATE t1 SET f_int1 = -@max_row
28917WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28918AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28919
28920# check null-2 success: 	1
28921UPDATE t1 SET f_int1 = NULL
28922WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28923AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28924
28925# check null-3 success: 	1
28926DELETE FROM t1
28927WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
28928AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
28929
28930# check null-4 success: 	1
28931DELETE FROM t1
28932WHERE f_int1 = 0 AND f_int2 = 0
28933AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
28934AND f_charbig = '#NULL#';
28935INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28936SELECT f_int1, f_int1, '', '', 'was inserted'
28937   FROM t0_template source_tab
28938WHERE MOD(f_int1,3) = 0
28939AND f_int1 BETWEEN @max_row_div2 AND @max_row
28940ON DUPLICATE KEY
28941UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
28942f_int2 = 2 * @max_row + source_tab.f_int1,
28943f_charbig = 'was updated';
28944
28945# check unique-1-a success: 	1
28946
28947# check unique-1-b success: 	1
28948DELETE FROM t1 WHERE f_charbig = 'was inserted';
28949UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
28950f_int2 = CAST(f_char1 AS SIGNED INT),
28951f_charbig = CONCAT('===',f_char1,'===')
28952WHERE f_charbig = 'was updated';
28953REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28954SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
28955   FROM t0_template source_tab
28956WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
28957
28958# check replace success: 	1
28959DELETE FROM t1
28960WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
28961DELETE FROM t1
28962WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
28963f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
28964UPDATE t1 SET f_int2 = f_int1,
28965f_char1 = CAST(f_int1 AS CHAR),
28966f_char2 = CAST(f_int1 AS CHAR),
28967f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
28968WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
28969SET AUTOCOMMIT= 0;
28970INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28971SELECT f_int1, f_int1, '', '', 'was inserted'
28972FROM t0_template source_tab
28973WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28974
28975# check transactions-1 success: 	1
28976COMMIT WORK;
28977
28978# check transactions-2 success: 	1
28979ROLLBACK WORK;
28980
28981# check transactions-3 success: 	1
28982DELETE FROM t1 WHERE f_charbig = 'was inserted';
28983COMMIT WORK;
28984ROLLBACK WORK;
28985
28986# check transactions-4 success: 	1
28987INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
28988SELECT f_int1, f_int1, '', '', 'was inserted'
28989FROM t0_template source_tab
28990WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
28991
28992# check transactions-5 success: 	1
28993ROLLBACK WORK;
28994
28995# check transactions-6 success: 	1
28996# INFO: Storage engine used for t1 seems to be transactional.
28997COMMIT;
28998
28999# check transactions-7 success: 	1
29000DELETE FROM t1 WHERE f_charbig = 'was inserted';
29001COMMIT WORK;
29002SET @@session.sql_mode = 'traditional';
29003Warnings:
29004Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
29005SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29006INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29007SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29008'', '', 'was inserted' FROM t0_template
29009WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29010ERROR 22012: Division by 0
29011COMMIT;
29012
29013# check transactions-8 success: 	1
29014# INFO: Storage engine used for t1 seems to be able to revert
29015#       changes made by the failing statement.
29016SET @@session.sql_mode = '';
29017Warnings:
29018Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
29019SET AUTOCOMMIT= 1;
29020DELETE FROM t1 WHERE f_charbig = 'was inserted';
29021COMMIT WORK;
29022UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29023
29024# check special-1 success: 	1
29025UPDATE t1 SET f_charbig = '';
29026
29027# check special-2 success: 	1
29028UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29029INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29030SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29031WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29032INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29033SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29034'just inserted' FROM t0_template
29035WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29036CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29037BEGIN
29038UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29039f_charbig = 'updated by trigger'
29040      WHERE f_int1 = new.f_int1;
29041END|
29042INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29043SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29044WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29045
29046# check trigger-1 success: 	1
29047DROP TRIGGER trg_1;
29048UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29049f_int2 = CAST(f_char1 AS SIGNED INT),
29050f_charbig = 'just inserted'
29051   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29052DELETE FROM t0_aux
29053WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29054INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29055SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29056'just inserted' FROM t0_template
29057WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29058CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29059BEGIN
29060UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29061f_charbig = 'updated by trigger'
29062      WHERE f_int1 = new.f_int1;
29063END|
29064INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29065SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29066WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29067
29068# check trigger-2 success: 	1
29069DROP TRIGGER trg_1;
29070UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29071f_int2 = CAST(f_char1 AS SIGNED INT),
29072f_charbig = 'just inserted'
29073   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29074DELETE FROM t0_aux
29075WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29076INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29077SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29078'just inserted' FROM t0_template
29079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29080CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29081BEGIN
29082UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29083f_charbig = 'updated by trigger'
29084      WHERE f_int1 = new.f_int1;
29085END|
29086UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29087WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29088
29089# check trigger-3 success: 	1
29090DROP TRIGGER trg_1;
29091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29092f_int2 = CAST(f_char1 AS SIGNED INT),
29093f_charbig = 'just inserted'
29094   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29095DELETE FROM t0_aux
29096WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29097INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29098SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29099'just inserted' FROM t0_template
29100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29101CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29102BEGIN
29103UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29104f_charbig = 'updated by trigger'
29105      WHERE f_int1 = - old.f_int1;
29106END|
29107UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29108WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29109
29110# check trigger-4 success: 	1
29111DROP TRIGGER trg_1;
29112UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29113f_int2 = CAST(f_char1 AS SIGNED INT),
29114f_charbig = 'just inserted'
29115   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29116DELETE FROM t0_aux
29117WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29119SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29120'just inserted' FROM t0_template
29121WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29122CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29123BEGIN
29124UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29125f_charbig = 'updated by trigger'
29126      WHERE f_int1 = new.f_int1;
29127END|
29128UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29129WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29130
29131# check trigger-5 success: 	1
29132DROP TRIGGER trg_1;
29133UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29134f_int2 = CAST(f_char1 AS SIGNED INT),
29135f_charbig = 'just inserted'
29136   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29137DELETE FROM t0_aux
29138WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29139INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29140SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29141'just inserted' FROM t0_template
29142WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29143CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29144BEGIN
29145UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29146f_charbig = 'updated by trigger'
29147      WHERE f_int1 = - old.f_int1;
29148END|
29149UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29150WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29151
29152# check trigger-6 success: 	1
29153DROP TRIGGER trg_1;
29154UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29155f_int2 = CAST(f_char1 AS SIGNED INT),
29156f_charbig = 'just inserted'
29157   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29158DELETE FROM t0_aux
29159WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29160INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29161SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29162'just inserted' FROM t0_template
29163WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29164CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29165BEGIN
29166UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29167f_charbig = 'updated by trigger'
29168      WHERE f_int1 = - old.f_int1;
29169END|
29170DELETE FROM t0_aux
29171WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29172
29173# check trigger-7 success: 	1
29174DROP TRIGGER trg_1;
29175UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29176f_int2 = CAST(f_char1 AS SIGNED INT),
29177f_charbig = 'just inserted'
29178   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29179DELETE FROM t0_aux
29180WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29181INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29182SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29183'just inserted' FROM t0_template
29184WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29185CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29186BEGIN
29187UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29188f_charbig = 'updated by trigger'
29189      WHERE f_int1 = - old.f_int1;
29190END|
29191DELETE FROM t0_aux
29192WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29193
29194# check trigger-8 success: 	1
29195DROP TRIGGER trg_1;
29196UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29197f_int2 = CAST(f_char1 AS SIGNED INT),
29198f_charbig = 'just inserted'
29199   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29200DELETE FROM t0_aux
29201WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29202DELETE FROM t1
29203WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29204CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29205BEGIN
29206SET new.f_int1 = old.f_int1 + @max_row,
29207new.f_int2 = old.f_int2 - @max_row,
29208new.f_charbig = '####updated per update trigger####';
29209END|
29210UPDATE t1
29211SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29212f_charbig = '####updated per update statement itself####';
29213
29214# check trigger-9 success: 	1
29215DROP TRIGGER trg_2;
29216UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29217f_int2 = CAST(f_char1 AS SIGNED INT),
29218f_charbig = CONCAT('===',f_char1,'===');
29219CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29220BEGIN
29221SET new.f_int1 = new.f_int1 + @max_row,
29222new.f_int2 = new.f_int2 - @max_row,
29223new.f_charbig = '####updated per update trigger####';
29224END|
29225UPDATE t1
29226SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29227f_charbig = '####updated per update statement itself####';
29228
29229# check trigger-10 success: 	1
29230DROP TRIGGER trg_2;
29231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29232f_int2 = CAST(f_char1 AS SIGNED INT),
29233f_charbig = CONCAT('===',f_char1,'===');
29234CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29235BEGIN
29236SET new.f_int1 = @my_max1 + @counter,
29237new.f_int2 = @my_min2 - @counter,
29238new.f_charbig = '####updated per insert trigger####';
29239SET @counter = @counter + 1;
29240END|
29241SET @counter = 1;
29242SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29243INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29244SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29245CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29246WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29247ORDER BY f_int1;
29248DROP TRIGGER trg_3;
29249
29250# check trigger-11 success: 	1
29251DELETE FROM t1
29252WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29253AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29254AND f_charbig = '####updated per insert trigger####';
29255CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29256BEGIN
29257SET new.f_int1 = @my_max1 + @counter,
29258new.f_int2 = @my_min2 - @counter,
29259new.f_charbig = '####updated per insert trigger####';
29260SET @counter = @counter + 1;
29261END|
29262SET @counter = 1;
29263SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29264INSERT INTO t1 (f_char1, f_char2, f_charbig)
29265SELECT CAST(f_int1 AS CHAR),
29266CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29268ORDER BY f_int1;
29269DROP TRIGGER trg_3;
29270
29271# check trigger-12 success: 	1
29272DELETE FROM t1
29273WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29274AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29275AND f_charbig = '####updated per insert trigger####';
29276ANALYZE  TABLE t1;
29277Table	Op	Msg_type	Msg_text
29278test.t1	analyze	status	OK
29279CHECK    TABLE t1 EXTENDED;
29280Table	Op	Msg_type	Msg_text
29281test.t1	check	status	OK
29282CHECKSUM TABLE t1 EXTENDED;
29283Table	Checksum
29284test.t1	<some_value>
29285OPTIMIZE TABLE t1;
29286Table	Op	Msg_type	Msg_text
29287test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
29288test.t1	optimize	status	OK
29289# check layout success:    1
29290REPAIR   TABLE t1 EXTENDED;
29291Table	Op	Msg_type	Msg_text
29292test.t1	repair	status	OK
29293# check layout success:    1
29294TRUNCATE t1;
29295
29296# check TRUNCATE success: 	1
29297# check layout success:    1
29298# End usability test (inc/partition_check.inc)
29299DROP TABLE t1;
29300CREATE TABLE t1 (
29301f_int1 INTEGER,
29302f_int2 INTEGER,
29303f_char1 CHAR(20),
29304f_char2 CHAR(20),
29305f_charbig VARCHAR(1000)
29306, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
29307)
29308PARTITION BY LIST(MOD(f_int1 + f_int2,4))
29309(PARTITION part_3 VALUES IN (-3),
29310PARTITION part_2 VALUES IN (-2),
29311PARTITION part_1 VALUES IN (-1),
29312PARTITION part_N VALUES IN (NULL),
29313PARTITION part0 VALUES IN (0),
29314PARTITION part1 VALUES IN (1),
29315PARTITION part2 VALUES IN (2),
29316PARTITION part3 VALUES IN (3));
29317INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29318SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
29319# Start usability test (inc/partition_check.inc)
29320create_command
29321SHOW CREATE TABLE t1;
29322Table	Create Table
29323t1	CREATE TABLE `t1` (
29324  `f_int1` int(11) DEFAULT NULL,
29325  `f_int2` int(11) DEFAULT NULL,
29326  `f_char1` char(20) DEFAULT NULL,
29327  `f_char2` char(20) DEFAULT NULL,
29328  `f_charbig` varchar(1000) DEFAULT NULL,
29329  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
29330  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
29331) ENGINE=InnoDB DEFAULT CHARSET=latin1
29332/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
29333(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
29334 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
29335 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
29336 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
29337 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
29338 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
29339 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
29340 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
29341
29342unified filelist
29343t1#P#part0.ibd
29344t1#P#part1.ibd
29345t1#P#part2.ibd
29346t1#P#part3.ibd
29347t1#P#part_1.ibd
29348t1#P#part_2.ibd
29349t1#P#part_3.ibd
29350t1#P#part_N.ibd
29351t1.frm
29352
29353# check prerequisites-1 success:    1
29354# check COUNT(*) success:    1
29355# check MIN/MAX(f_int1) success:    1
29356# check MIN/MAX(f_int2) success:    1
29357INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29358SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29359CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29360WHERE f_int1 IN (2,3);
29361ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
29362# check prerequisites-3 success:    1
29363# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29364INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29365SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29366CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29367WHERE f_int1 IN (2,3);
29368DELETE FROM t1 WHERE f_charbig = 'delete me';
29369INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29370SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29371CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29372WHERE f_int1 IN (2,3);
29373DELETE FROM t1 WHERE f_charbig = 'delete me';
29374# check read via f_int1 success: 1
29375# check read via f_int2 success: 1
29376
29377# check multiple-1 success: 	1
29378DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29379
29380# check multiple-2 success: 	1
29381INSERT INTO t1 SELECT * FROM t0_template
29382WHERE MOD(f_int1,3) = 0;
29383
29384# check multiple-3 success: 	1
29385UPDATE t1 SET f_int1 = f_int1 + @max_row
29386WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29387AND @max_row_div2 + @max_row_div4;
29388
29389# check multiple-4 success: 	1
29390DELETE FROM t1
29391WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29392AND @max_row_div2 + @max_row_div4 + @max_row;
29393
29394# check multiple-5 success: 	1
29395SELECT COUNT(*) INTO @try_count FROM t0_template
29396WHERE MOD(f_int1,3) = 0
29397AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29398SELECT COUNT(*) INTO @clash_count
29399FROM t1 INNER JOIN t0_template USING(f_int1)
29400WHERE MOD(f_int1,3) = 0
29401AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29402SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29403INSERT INTO t1
29404SET f_int1 = @cur_value , f_int2 = @cur_value,
29405f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29406f_charbig = '#SINGLE#';
29407
29408# check single-1 success: 	1
29409SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29410INSERT INTO t1
29411SET f_int1 = @cur_value , f_int2 = @cur_value,
29412f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29413f_charbig = '#SINGLE#';
29414
29415# check single-2 success: 	1
29416SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29417SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29418UPDATE t1 SET f_int1 = @cur_value2
29419WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29420
29421# check single-3 success: 	1
29422SET @cur_value1= -1;
29423SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29424UPDATE t1 SET f_int1 = @cur_value1
29425WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29426
29427# check single-4 success: 	1
29428SELECT MAX(f_int1) INTO @cur_value FROM t1;
29429DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29430
29431# check single-5 success: 	1
29432DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29433
29434# check single-6 success: 	1
29435INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29436
29437# check single-7 success: 	1
29438DELETE FROM t1 WHERE f_charbig = '#2147483647##';
29439DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29440INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29441f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29442f_charbig = '#NULL#';
29443INSERT INTO t1
29444SET f_int1 = NULL , f_int2 = -@max_row,
29445f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29446f_charbig = '#NULL#';
29447# check null success:    1
29448
29449# check null-1 success: 	1
29450UPDATE t1 SET f_int1 = -@max_row
29451WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29452AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29453
29454# check null-2 success: 	1
29455UPDATE t1 SET f_int1 = NULL
29456WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29457AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29458
29459# check null-3 success: 	1
29460DELETE FROM t1
29461WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29462AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29463
29464# check null-4 success: 	1
29465DELETE FROM t1
29466WHERE f_int1 = 0 AND f_int2 = 0
29467AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29468AND f_charbig = '#NULL#';
29469INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29470SELECT f_int1, f_int1, '', '', 'was inserted'
29471   FROM t0_template source_tab
29472WHERE MOD(f_int1,3) = 0
29473AND f_int1 BETWEEN @max_row_div2 AND @max_row
29474ON DUPLICATE KEY
29475UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
29476f_int2 = 2 * @max_row + source_tab.f_int1,
29477f_charbig = 'was updated';
29478
29479# check unique-1-a success: 	1
29480
29481# check unique-1-b success: 	1
29482DELETE FROM t1 WHERE f_charbig = 'was inserted';
29483UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29484f_int2 = CAST(f_char1 AS SIGNED INT),
29485f_charbig = CONCAT('===',f_char1,'===')
29486WHERE f_charbig = 'was updated';
29487REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29488SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
29489   FROM t0_template source_tab
29490WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29491
29492# check replace success: 	1
29493DELETE FROM t1
29494WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
29495DELETE FROM t1
29496WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
29497f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
29498UPDATE t1 SET f_int2 = f_int1,
29499f_char1 = CAST(f_int1 AS CHAR),
29500f_char2 = CAST(f_int1 AS CHAR),
29501f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
29502WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
29503SET AUTOCOMMIT= 0;
29504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29505SELECT f_int1, f_int1, '', '', 'was inserted'
29506FROM t0_template source_tab
29507WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29508
29509# check transactions-1 success: 	1
29510COMMIT WORK;
29511
29512# check transactions-2 success: 	1
29513ROLLBACK WORK;
29514
29515# check transactions-3 success: 	1
29516DELETE FROM t1 WHERE f_charbig = 'was inserted';
29517COMMIT WORK;
29518ROLLBACK WORK;
29519
29520# check transactions-4 success: 	1
29521INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29522SELECT f_int1, f_int1, '', '', 'was inserted'
29523FROM t0_template source_tab
29524WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29525
29526# check transactions-5 success: 	1
29527ROLLBACK WORK;
29528
29529# check transactions-6 success: 	1
29530# INFO: Storage engine used for t1 seems to be transactional.
29531COMMIT;
29532
29533# check transactions-7 success: 	1
29534DELETE FROM t1 WHERE f_charbig = 'was inserted';
29535COMMIT WORK;
29536SET @@session.sql_mode = 'traditional';
29537Warnings:
29538Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
29539SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
29540INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29541SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
29542'', '', 'was inserted' FROM t0_template
29543WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
29544ERROR 22012: Division by 0
29545COMMIT;
29546
29547# check transactions-8 success: 	1
29548# INFO: Storage engine used for t1 seems to be able to revert
29549#       changes made by the failing statement.
29550SET @@session.sql_mode = '';
29551Warnings:
29552Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
29553SET AUTOCOMMIT= 1;
29554DELETE FROM t1 WHERE f_charbig = 'was inserted';
29555COMMIT WORK;
29556UPDATE t1 SET f_charbig = REPEAT('b', 1000);
29557
29558# check special-1 success: 	1
29559UPDATE t1 SET f_charbig = '';
29560
29561# check special-2 success: 	1
29562UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
29563INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29564SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
29565WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29566INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29567SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29568'just inserted' FROM t0_template
29569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29570CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
29571BEGIN
29572UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29573f_charbig = 'updated by trigger'
29574      WHERE f_int1 = new.f_int1;
29575END|
29576INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29577SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29579
29580# check trigger-1 success: 	1
29581DROP TRIGGER trg_1;
29582UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29583f_int2 = CAST(f_char1 AS SIGNED INT),
29584f_charbig = 'just inserted'
29585   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29586DELETE FROM t0_aux
29587WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29588INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29589SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29590'just inserted' FROM t0_template
29591WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29592CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
29593BEGIN
29594UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29595f_charbig = 'updated by trigger'
29596      WHERE f_int1 = new.f_int1;
29597END|
29598INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29599SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
29600WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29601
29602# check trigger-2 success: 	1
29603DROP TRIGGER trg_1;
29604UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29605f_int2 = CAST(f_char1 AS SIGNED INT),
29606f_charbig = 'just inserted'
29607   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29608DELETE FROM t0_aux
29609WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29610INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29611SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29612'just inserted' FROM t0_template
29613WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29614CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29615BEGIN
29616UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29617f_charbig = 'updated by trigger'
29618      WHERE f_int1 = new.f_int1;
29619END|
29620UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29621WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29622
29623# check trigger-3 success: 	1
29624DROP TRIGGER trg_1;
29625UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29626f_int2 = CAST(f_char1 AS SIGNED INT),
29627f_charbig = 'just inserted'
29628   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29629DELETE FROM t0_aux
29630WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29631INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29632SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29633'just inserted' FROM t0_template
29634WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29635CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
29636BEGIN
29637UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29638f_charbig = 'updated by trigger'
29639      WHERE f_int1 = - old.f_int1;
29640END|
29641UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29642WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29643
29644# check trigger-4 success: 	1
29645DROP TRIGGER trg_1;
29646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29647f_int2 = CAST(f_char1 AS SIGNED INT),
29648f_charbig = 'just inserted'
29649   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29650DELETE FROM t0_aux
29651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29654'just inserted' FROM t0_template
29655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29656CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29657BEGIN
29658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29659f_charbig = 'updated by trigger'
29660      WHERE f_int1 = new.f_int1;
29661END|
29662UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29663WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29664
29665# check trigger-5 success: 	1
29666DROP TRIGGER trg_1;
29667UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29668f_int2 = CAST(f_char1 AS SIGNED INT),
29669f_charbig = 'just inserted'
29670   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29671DELETE FROM t0_aux
29672WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29673INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29674SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29675'just inserted' FROM t0_template
29676WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29677CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
29678BEGIN
29679UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29680f_charbig = 'updated by trigger'
29681      WHERE f_int1 = - old.f_int1;
29682END|
29683UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
29684WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29685
29686# check trigger-6 success: 	1
29687DROP TRIGGER trg_1;
29688UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29689f_int2 = CAST(f_char1 AS SIGNED INT),
29690f_charbig = 'just inserted'
29691   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29692DELETE FROM t0_aux
29693WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29696'just inserted' FROM t0_template
29697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29698CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
29699BEGIN
29700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29701f_charbig = 'updated by trigger'
29702      WHERE f_int1 = - old.f_int1;
29703END|
29704DELETE FROM t0_aux
29705WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29706
29707# check trigger-7 success: 	1
29708DROP TRIGGER trg_1;
29709UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29710f_int2 = CAST(f_char1 AS SIGNED INT),
29711f_charbig = 'just inserted'
29712   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29713DELETE FROM t0_aux
29714WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29715INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
29716SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
29717'just inserted' FROM t0_template
29718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29719CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
29720BEGIN
29721UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
29722f_charbig = 'updated by trigger'
29723      WHERE f_int1 = - old.f_int1;
29724END|
29725DELETE FROM t0_aux
29726WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
29727
29728# check trigger-8 success: 	1
29729DROP TRIGGER trg_1;
29730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29731f_int2 = CAST(f_char1 AS SIGNED INT),
29732f_charbig = 'just inserted'
29733   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
29734DELETE FROM t0_aux
29735WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29736DELETE FROM t1
29737WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
29738CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29739BEGIN
29740SET new.f_int1 = old.f_int1 + @max_row,
29741new.f_int2 = old.f_int2 - @max_row,
29742new.f_charbig = '####updated per update trigger####';
29743END|
29744UPDATE t1
29745SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29746f_charbig = '####updated per update statement itself####';
29747
29748# check trigger-9 success: 	1
29749DROP TRIGGER trg_2;
29750UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29751f_int2 = CAST(f_char1 AS SIGNED INT),
29752f_charbig = CONCAT('===',f_char1,'===');
29753CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
29754BEGIN
29755SET new.f_int1 = new.f_int1 + @max_row,
29756new.f_int2 = new.f_int2 - @max_row,
29757new.f_charbig = '####updated per update trigger####';
29758END|
29759UPDATE t1
29760SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
29761f_charbig = '####updated per update statement itself####';
29762
29763# check trigger-10 success: 	1
29764DROP TRIGGER trg_2;
29765UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
29766f_int2 = CAST(f_char1 AS SIGNED INT),
29767f_charbig = CONCAT('===',f_char1,'===');
29768CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29769BEGIN
29770SET new.f_int1 = @my_max1 + @counter,
29771new.f_int2 = @my_min2 - @counter,
29772new.f_charbig = '####updated per insert trigger####';
29773SET @counter = @counter + 1;
29774END|
29775SET @counter = 1;
29776SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29777INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29778SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29779CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29780WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29781ORDER BY f_int1;
29782DROP TRIGGER trg_3;
29783
29784# check trigger-11 success: 	1
29785DELETE FROM t1
29786WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29787AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29788AND f_charbig = '####updated per insert trigger####';
29789CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
29790BEGIN
29791SET new.f_int1 = @my_max1 + @counter,
29792new.f_int2 = @my_min2 - @counter,
29793new.f_charbig = '####updated per insert trigger####';
29794SET @counter = @counter + 1;
29795END|
29796SET @counter = 1;
29797SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
29798INSERT INTO t1 (f_char1, f_char2, f_charbig)
29799SELECT CAST(f_int1 AS CHAR),
29800CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
29801WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
29802ORDER BY f_int1;
29803DROP TRIGGER trg_3;
29804
29805# check trigger-12 success: 	1
29806DELETE FROM t1
29807WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
29808AND f_int2 <> CAST(f_char1 AS SIGNED INT)
29809AND f_charbig = '####updated per insert trigger####';
29810ANALYZE  TABLE t1;
29811Table	Op	Msg_type	Msg_text
29812test.t1	analyze	status	OK
29813CHECK    TABLE t1 EXTENDED;
29814Table	Op	Msg_type	Msg_text
29815test.t1	check	status	OK
29816CHECKSUM TABLE t1 EXTENDED;
29817Table	Checksum
29818test.t1	<some_value>
29819OPTIMIZE TABLE t1;
29820Table	Op	Msg_type	Msg_text
29821test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
29822test.t1	optimize	status	OK
29823# check layout success:    1
29824REPAIR   TABLE t1 EXTENDED;
29825Table	Op	Msg_type	Msg_text
29826test.t1	repair	status	OK
29827# check layout success:    1
29828TRUNCATE t1;
29829
29830# check TRUNCATE success: 	1
29831# check layout success:    1
29832# End usability test (inc/partition_check.inc)
29833DROP TABLE t1;
29834CREATE TABLE t1 (
29835f_int1 INTEGER,
29836f_int2 INTEGER,
29837f_char1 CHAR(20),
29838f_char2 CHAR(20),
29839f_charbig VARCHAR(1000)
29840, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
29841)
29842PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
29843(PARTITION parta VALUES LESS THAN (0),
29844PARTITION partb VALUES LESS THAN (5),
29845PARTITION partc VALUES LESS THAN (10),
29846PARTITION partd VALUES LESS THAN (10 + 5),
29847PARTITION parte VALUES LESS THAN (20),
29848PARTITION partf VALUES LESS THAN (2147483646));
29849INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
29850SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
29851# Start usability test (inc/partition_check.inc)
29852create_command
29853SHOW CREATE TABLE t1;
29854Table	Create Table
29855t1	CREATE TABLE `t1` (
29856  `f_int1` int(11) DEFAULT NULL,
29857  `f_int2` int(11) DEFAULT NULL,
29858  `f_char1` char(20) DEFAULT NULL,
29859  `f_char2` char(20) DEFAULT NULL,
29860  `f_charbig` varchar(1000) DEFAULT NULL,
29861  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
29862  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
29863) ENGINE=InnoDB DEFAULT CHARSET=latin1
29864/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
29865(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
29866 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
29867 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
29868 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
29869 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
29870 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
29871
29872unified filelist
29873t1#P#parta.ibd
29874t1#P#partb.ibd
29875t1#P#partc.ibd
29876t1#P#partd.ibd
29877t1#P#parte.ibd
29878t1#P#partf.ibd
29879t1.frm
29880
29881# check prerequisites-1 success:    1
29882# check COUNT(*) success:    1
29883# check MIN/MAX(f_int1) success:    1
29884# check MIN/MAX(f_int2) success:    1
29885INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29886SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
29887CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
29888WHERE f_int1 IN (2,3);
29889ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
29890# check prerequisites-3 success:    1
29891# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
29892INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29893SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29894CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29895WHERE f_int1 IN (2,3);
29896DELETE FROM t1 WHERE f_charbig = 'delete me';
29897INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29898SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
29899CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
29900WHERE f_int1 IN (2,3);
29901DELETE FROM t1 WHERE f_charbig = 'delete me';
29902# check read via f_int1 success: 1
29903# check read via f_int2 success: 1
29904
29905# check multiple-1 success: 	1
29906DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
29907
29908# check multiple-2 success: 	1
29909INSERT INTO t1 SELECT * FROM t0_template
29910WHERE MOD(f_int1,3) = 0;
29911
29912# check multiple-3 success: 	1
29913UPDATE t1 SET f_int1 = f_int1 + @max_row
29914WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
29915AND @max_row_div2 + @max_row_div4;
29916
29917# check multiple-4 success: 	1
29918DELETE FROM t1
29919WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
29920AND @max_row_div2 + @max_row_div4 + @max_row;
29921
29922# check multiple-5 success: 	1
29923SELECT COUNT(*) INTO @try_count FROM t0_template
29924WHERE MOD(f_int1,3) = 0
29925AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29926SELECT COUNT(*) INTO @clash_count
29927FROM t1 INNER JOIN t0_template USING(f_int1)
29928WHERE MOD(f_int1,3) = 0
29929AND f_int1 BETWEEN @max_row_div2 AND @max_row;
29930SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
29931INSERT INTO t1
29932SET f_int1 = @cur_value , f_int2 = @cur_value,
29933f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29934f_charbig = '#SINGLE#';
29935
29936# check single-1 success: 	1
29937SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
29938INSERT INTO t1
29939SET f_int1 = @cur_value , f_int2 = @cur_value,
29940f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
29941f_charbig = '#SINGLE#';
29942
29943# check single-2 success: 	1
29944SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
29945SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
29946UPDATE t1 SET f_int1 = @cur_value2
29947WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
29948
29949# check single-3 success: 	1
29950SET @cur_value1= -1;
29951SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
29952UPDATE t1 SET f_int1 = @cur_value1
29953WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
29954
29955# check single-4 success: 	1
29956SELECT MAX(f_int1) INTO @cur_value FROM t1;
29957DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
29958
29959# check single-5 success: 	1
29960DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
29961
29962# check single-6 success: 	1
29963INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
29964ERROR HY000: Table has no partition for value 2147483647
29965DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
29966INSERT t1 SET f_int1 = 0 , f_int2 = 0,
29967f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
29968f_charbig = '#NULL#';
29969INSERT INTO t1
29970SET f_int1 = NULL , f_int2 = -@max_row,
29971f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
29972f_charbig = '#NULL#';
29973# check null success:    1
29974
29975# check null-1 success: 	1
29976UPDATE t1 SET f_int1 = -@max_row
29977WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29978AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29979
29980# check null-2 success: 	1
29981UPDATE t1 SET f_int1 = NULL
29982WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29983AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29984
29985# check null-3 success: 	1
29986DELETE FROM t1
29987WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
29988AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
29989
29990# check null-4 success: 	1
29991DELETE FROM t1
29992WHERE f_int1 = 0 AND f_int2 = 0
29993AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
29994AND f_charbig = '#NULL#';
29995INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
29996SELECT f_int1, f_int1, '', '', 'was inserted'
29997   FROM t0_template source_tab
29998WHERE MOD(f_int1,3) = 0
29999AND f_int1 BETWEEN @max_row_div2 AND @max_row
30000ON DUPLICATE KEY
30001UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
30002f_int2 = 2 * @max_row + source_tab.f_int1,
30003f_charbig = 'was updated';
30004
30005# check unique-1-a success: 	1
30006
30007# check unique-1-b success: 	1
30008DELETE FROM t1 WHERE f_charbig = 'was inserted';
30009UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30010f_int2 = CAST(f_char1 AS SIGNED INT),
30011f_charbig = CONCAT('===',f_char1,'===')
30012WHERE f_charbig = 'was updated';
30013REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30014SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30015   FROM t0_template source_tab
30016WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30017
30018# check replace success: 	1
30019DELETE FROM t1
30020WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30021DELETE FROM t1
30022WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30023f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30024UPDATE t1 SET f_int2 = f_int1,
30025f_char1 = CAST(f_int1 AS CHAR),
30026f_char2 = CAST(f_int1 AS CHAR),
30027f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30028WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30029SET AUTOCOMMIT= 0;
30030INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30031SELECT f_int1, f_int1, '', '', 'was inserted'
30032FROM t0_template source_tab
30033WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30034
30035# check transactions-1 success: 	1
30036COMMIT WORK;
30037
30038# check transactions-2 success: 	1
30039ROLLBACK WORK;
30040
30041# check transactions-3 success: 	1
30042DELETE FROM t1 WHERE f_charbig = 'was inserted';
30043COMMIT WORK;
30044ROLLBACK WORK;
30045
30046# check transactions-4 success: 	1
30047INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30048SELECT f_int1, f_int1, '', '', 'was inserted'
30049FROM t0_template source_tab
30050WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30051
30052# check transactions-5 success: 	1
30053ROLLBACK WORK;
30054
30055# check transactions-6 success: 	1
30056# INFO: Storage engine used for t1 seems to be transactional.
30057COMMIT;
30058
30059# check transactions-7 success: 	1
30060DELETE FROM t1 WHERE f_charbig = 'was inserted';
30061COMMIT WORK;
30062SET @@session.sql_mode = 'traditional';
30063Warnings:
30064Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
30065SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30066INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30067SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30068'', '', 'was inserted' FROM t0_template
30069WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30070ERROR 22012: Division by 0
30071COMMIT;
30072
30073# check transactions-8 success: 	1
30074# INFO: Storage engine used for t1 seems to be able to revert
30075#       changes made by the failing statement.
30076SET @@session.sql_mode = '';
30077Warnings:
30078Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
30079SET AUTOCOMMIT= 1;
30080DELETE FROM t1 WHERE f_charbig = 'was inserted';
30081COMMIT WORK;
30082UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30083
30084# check special-1 success: 	1
30085UPDATE t1 SET f_charbig = '';
30086
30087# check special-2 success: 	1
30088UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30089INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30090SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30092INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30093SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30094'just inserted' FROM t0_template
30095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30096CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30097BEGIN
30098UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30099f_charbig = 'updated by trigger'
30100      WHERE f_int1 = new.f_int1;
30101END|
30102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30103SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30104WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30105
30106# check trigger-1 success: 	1
30107DROP TRIGGER trg_1;
30108UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30109f_int2 = CAST(f_char1 AS SIGNED INT),
30110f_charbig = 'just inserted'
30111   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30112DELETE FROM t0_aux
30113WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30114INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30115SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30116'just inserted' FROM t0_template
30117WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30118CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30119BEGIN
30120UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30121f_charbig = 'updated by trigger'
30122      WHERE f_int1 = new.f_int1;
30123END|
30124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30125SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30126WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30127
30128# check trigger-2 success: 	1
30129DROP TRIGGER trg_1;
30130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30131f_int2 = CAST(f_char1 AS SIGNED INT),
30132f_charbig = 'just inserted'
30133   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30134DELETE FROM t0_aux
30135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30138'just inserted' FROM t0_template
30139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30140CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30141BEGIN
30142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30143f_charbig = 'updated by trigger'
30144      WHERE f_int1 = new.f_int1;
30145END|
30146UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30148
30149# check trigger-3 success: 	1
30150DROP TRIGGER trg_1;
30151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30152f_int2 = CAST(f_char1 AS SIGNED INT),
30153f_charbig = 'just inserted'
30154   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30155DELETE FROM t0_aux
30156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30157INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30158SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30159'just inserted' FROM t0_template
30160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30161CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30162BEGIN
30163UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30164f_charbig = 'updated by trigger'
30165      WHERE f_int1 = - old.f_int1;
30166END|
30167UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30168WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30169
30170# check trigger-4 success: 	1
30171DROP TRIGGER trg_1;
30172UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30173f_int2 = CAST(f_char1 AS SIGNED INT),
30174f_charbig = 'just inserted'
30175   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30176DELETE FROM t0_aux
30177WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30178INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30179SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30180'just inserted' FROM t0_template
30181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30182CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30183BEGIN
30184UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30185f_charbig = 'updated by trigger'
30186      WHERE f_int1 = new.f_int1;
30187END|
30188UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30189WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30190
30191# check trigger-5 success: 	1
30192DROP TRIGGER trg_1;
30193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30194f_int2 = CAST(f_char1 AS SIGNED INT),
30195f_charbig = 'just inserted'
30196   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30197DELETE FROM t0_aux
30198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30201'just inserted' FROM t0_template
30202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30203CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30204BEGIN
30205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30206f_charbig = 'updated by trigger'
30207      WHERE f_int1 = - old.f_int1;
30208END|
30209UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30211
30212# check trigger-6 success: 	1
30213DROP TRIGGER trg_1;
30214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30215f_int2 = CAST(f_char1 AS SIGNED INT),
30216f_charbig = 'just inserted'
30217   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30218DELETE FROM t0_aux
30219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30220INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30221SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30222'just inserted' FROM t0_template
30223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30224CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30225BEGIN
30226UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30227f_charbig = 'updated by trigger'
30228      WHERE f_int1 = - old.f_int1;
30229END|
30230DELETE FROM t0_aux
30231WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30232
30233# check trigger-7 success: 	1
30234DROP TRIGGER trg_1;
30235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30236f_int2 = CAST(f_char1 AS SIGNED INT),
30237f_charbig = 'just inserted'
30238   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30239DELETE FROM t0_aux
30240WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30241INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30242SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30243'just inserted' FROM t0_template
30244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30245CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30246BEGIN
30247UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30248f_charbig = 'updated by trigger'
30249      WHERE f_int1 = - old.f_int1;
30250END|
30251DELETE FROM t0_aux
30252WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30253
30254# check trigger-8 success: 	1
30255DROP TRIGGER trg_1;
30256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30257f_int2 = CAST(f_char1 AS SIGNED INT),
30258f_charbig = 'just inserted'
30259   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30260DELETE FROM t0_aux
30261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30262DELETE FROM t1
30263WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30264CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30265BEGIN
30266SET new.f_int1 = old.f_int1 + @max_row,
30267new.f_int2 = old.f_int2 - @max_row,
30268new.f_charbig = '####updated per update trigger####';
30269END|
30270UPDATE t1
30271SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30272f_charbig = '####updated per update statement itself####';
30273
30274# check trigger-9 success: 	1
30275DROP TRIGGER trg_2;
30276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30277f_int2 = CAST(f_char1 AS SIGNED INT),
30278f_charbig = CONCAT('===',f_char1,'===');
30279CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30280BEGIN
30281SET new.f_int1 = new.f_int1 + @max_row,
30282new.f_int2 = new.f_int2 - @max_row,
30283new.f_charbig = '####updated per update trigger####';
30284END|
30285UPDATE t1
30286SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30287f_charbig = '####updated per update statement itself####';
30288
30289# check trigger-10 success: 	1
30290DROP TRIGGER trg_2;
30291UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30292f_int2 = CAST(f_char1 AS SIGNED INT),
30293f_charbig = CONCAT('===',f_char1,'===');
30294CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30295BEGIN
30296SET new.f_int1 = @my_max1 + @counter,
30297new.f_int2 = @my_min2 - @counter,
30298new.f_charbig = '####updated per insert trigger####';
30299SET @counter = @counter + 1;
30300END|
30301SET @counter = 1;
30302SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30303INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30304SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30305CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30307ORDER BY f_int1;
30308DROP TRIGGER trg_3;
30309
30310# check trigger-11 success: 	1
30311DELETE FROM t1
30312WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30313AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30314AND f_charbig = '####updated per insert trigger####';
30315CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30316BEGIN
30317SET new.f_int1 = @my_max1 + @counter,
30318new.f_int2 = @my_min2 - @counter,
30319new.f_charbig = '####updated per insert trigger####';
30320SET @counter = @counter + 1;
30321END|
30322SET @counter = 1;
30323SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30324INSERT INTO t1 (f_char1, f_char2, f_charbig)
30325SELECT CAST(f_int1 AS CHAR),
30326CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30328ORDER BY f_int1;
30329DROP TRIGGER trg_3;
30330
30331# check trigger-12 success: 	1
30332DELETE FROM t1
30333WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30334AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30335AND f_charbig = '####updated per insert trigger####';
30336ANALYZE  TABLE t1;
30337Table	Op	Msg_type	Msg_text
30338test.t1	analyze	status	OK
30339CHECK    TABLE t1 EXTENDED;
30340Table	Op	Msg_type	Msg_text
30341test.t1	check	status	OK
30342CHECKSUM TABLE t1 EXTENDED;
30343Table	Checksum
30344test.t1	<some_value>
30345OPTIMIZE TABLE t1;
30346Table	Op	Msg_type	Msg_text
30347test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
30348test.t1	optimize	status	OK
30349# check layout success:    1
30350REPAIR   TABLE t1 EXTENDED;
30351Table	Op	Msg_type	Msg_text
30352test.t1	repair	status	OK
30353# check layout success:    1
30354TRUNCATE t1;
30355
30356# check TRUNCATE success: 	1
30357# check layout success:    1
30358# End usability test (inc/partition_check.inc)
30359DROP TABLE t1;
30360CREATE TABLE t1 (
30361f_int1 INTEGER,
30362f_int2 INTEGER,
30363f_char1 CHAR(20),
30364f_char2 CHAR(20),
30365f_charbig VARCHAR(1000)
30366, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
30367)
30368PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
30369(PARTITION parta VALUES LESS THAN (0),
30370PARTITION partb VALUES LESS THAN (5),
30371PARTITION partc VALUES LESS THAN (10),
30372PARTITION partd VALUES LESS THAN (2147483646));
30373INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30374SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
30375# Start usability test (inc/partition_check.inc)
30376create_command
30377SHOW CREATE TABLE t1;
30378Table	Create Table
30379t1	CREATE TABLE `t1` (
30380  `f_int1` int(11) DEFAULT NULL,
30381  `f_int2` int(11) DEFAULT NULL,
30382  `f_char1` char(20) DEFAULT NULL,
30383  `f_char2` char(20) DEFAULT NULL,
30384  `f_charbig` varchar(1000) DEFAULT NULL,
30385  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
30386  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
30387) ENGINE=InnoDB DEFAULT CHARSET=latin1
30388/*!50100 PARTITION BY RANGE (f_int1)
30389SUBPARTITION BY HASH (f_int2)
30390SUBPARTITIONS 2
30391(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
30392 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
30393 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
30394 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
30395
30396unified filelist
30397t1#P#parta#SP#partasp0.ibd
30398t1#P#parta#SP#partasp1.ibd
30399t1#P#partb#SP#partbsp0.ibd
30400t1#P#partb#SP#partbsp1.ibd
30401t1#P#partc#SP#partcsp0.ibd
30402t1#P#partc#SP#partcsp1.ibd
30403t1#P#partd#SP#partdsp0.ibd
30404t1#P#partd#SP#partdsp1.ibd
30405t1.frm
30406
30407# check prerequisites-1 success:    1
30408# check COUNT(*) success:    1
30409# check MIN/MAX(f_int1) success:    1
30410# check MIN/MAX(f_int2) success:    1
30411INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30412SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30413CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
30414WHERE f_int1 IN (2,3);
30415ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
30416# check prerequisites-3 success:    1
30417# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
30418INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30419SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30420CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30421WHERE f_int1 IN (2,3);
30422DELETE FROM t1 WHERE f_charbig = 'delete me';
30423INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30424SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30425CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30426WHERE f_int1 IN (2,3);
30427DELETE FROM t1 WHERE f_charbig = 'delete me';
30428# check read via f_int1 success: 1
30429# check read via f_int2 success: 1
30430
30431# check multiple-1 success: 	1
30432DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
30433
30434# check multiple-2 success: 	1
30435INSERT INTO t1 SELECT * FROM t0_template
30436WHERE MOD(f_int1,3) = 0;
30437
30438# check multiple-3 success: 	1
30439UPDATE t1 SET f_int1 = f_int1 + @max_row
30440WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
30441AND @max_row_div2 + @max_row_div4;
30442
30443# check multiple-4 success: 	1
30444DELETE FROM t1
30445WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
30446AND @max_row_div2 + @max_row_div4 + @max_row;
30447
30448# check multiple-5 success: 	1
30449SELECT COUNT(*) INTO @try_count FROM t0_template
30450WHERE MOD(f_int1,3) = 0
30451AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30452SELECT COUNT(*) INTO @clash_count
30453FROM t1 INNER JOIN t0_template USING(f_int1)
30454WHERE MOD(f_int1,3) = 0
30455AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30456SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
30457INSERT INTO t1
30458SET f_int1 = @cur_value , f_int2 = @cur_value,
30459f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30460f_charbig = '#SINGLE#';
30461
30462# check single-1 success: 	1
30463SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
30464INSERT INTO t1
30465SET f_int1 = @cur_value , f_int2 = @cur_value,
30466f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30467f_charbig = '#SINGLE#';
30468
30469# check single-2 success: 	1
30470SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
30471SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
30472UPDATE t1 SET f_int1 = @cur_value2
30473WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
30474
30475# check single-3 success: 	1
30476SET @cur_value1= -1;
30477SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
30478UPDATE t1 SET f_int1 = @cur_value1
30479WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
30480
30481# check single-4 success: 	1
30482SELECT MAX(f_int1) INTO @cur_value FROM t1;
30483DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
30484
30485# check single-5 success: 	1
30486DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
30487
30488# check single-6 success: 	1
30489INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
30490ERROR HY000: Table has no partition for value 2147483647
30491DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
30492INSERT t1 SET f_int1 = 0 , f_int2 = 0,
30493f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
30494f_charbig = '#NULL#';
30495INSERT INTO t1
30496SET f_int1 = NULL , f_int2 = -@max_row,
30497f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
30498f_charbig = '#NULL#';
30499# check null success:    1
30500
30501# check null-1 success: 	1
30502UPDATE t1 SET f_int1 = -@max_row
30503WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30504AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30505
30506# check null-2 success: 	1
30507UPDATE t1 SET f_int1 = NULL
30508WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30509AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30510
30511# check null-3 success: 	1
30512DELETE FROM t1
30513WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
30514AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
30515
30516# check null-4 success: 	1
30517DELETE FROM t1
30518WHERE f_int1 = 0 AND f_int2 = 0
30519AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
30520AND f_charbig = '#NULL#';
30521INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30522SELECT f_int1, f_int1, '', '', 'was inserted'
30523   FROM t0_template source_tab
30524WHERE MOD(f_int1,3) = 0
30525AND f_int1 BETWEEN @max_row_div2 AND @max_row
30526ON DUPLICATE KEY
30527UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
30528f_int2 = 2 * @max_row + source_tab.f_int1,
30529f_charbig = 'was updated';
30530
30531# check unique-1-a success: 	1
30532
30533# check unique-1-b success: 	1
30534DELETE FROM t1 WHERE f_charbig = 'was inserted';
30535UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30536f_int2 = CAST(f_char1 AS SIGNED INT),
30537f_charbig = CONCAT('===',f_char1,'===')
30538WHERE f_charbig = 'was updated';
30539REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30540SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
30541   FROM t0_template source_tab
30542WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30543
30544# check replace success: 	1
30545DELETE FROM t1
30546WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
30547DELETE FROM t1
30548WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
30549f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
30550UPDATE t1 SET f_int2 = f_int1,
30551f_char1 = CAST(f_int1 AS CHAR),
30552f_char2 = CAST(f_int1 AS CHAR),
30553f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
30554WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
30555SET AUTOCOMMIT= 0;
30556INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30557SELECT f_int1, f_int1, '', '', 'was inserted'
30558FROM t0_template source_tab
30559WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30560
30561# check transactions-1 success: 	1
30562COMMIT WORK;
30563
30564# check transactions-2 success: 	1
30565ROLLBACK WORK;
30566
30567# check transactions-3 success: 	1
30568DELETE FROM t1 WHERE f_charbig = 'was inserted';
30569COMMIT WORK;
30570ROLLBACK WORK;
30571
30572# check transactions-4 success: 	1
30573INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30574SELECT f_int1, f_int1, '', '', 'was inserted'
30575FROM t0_template source_tab
30576WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30577
30578# check transactions-5 success: 	1
30579ROLLBACK WORK;
30580
30581# check transactions-6 success: 	1
30582# INFO: Storage engine used for t1 seems to be transactional.
30583COMMIT;
30584
30585# check transactions-7 success: 	1
30586DELETE FROM t1 WHERE f_charbig = 'was inserted';
30587COMMIT WORK;
30588SET @@session.sql_mode = 'traditional';
30589Warnings:
30590Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
30591SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
30592INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30593SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
30594'', '', 'was inserted' FROM t0_template
30595WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
30596ERROR 22012: Division by 0
30597COMMIT;
30598
30599# check transactions-8 success: 	1
30600# INFO: Storage engine used for t1 seems to be able to revert
30601#       changes made by the failing statement.
30602SET @@session.sql_mode = '';
30603Warnings:
30604Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
30605SET AUTOCOMMIT= 1;
30606DELETE FROM t1 WHERE f_charbig = 'was inserted';
30607COMMIT WORK;
30608UPDATE t1 SET f_charbig = REPEAT('b', 1000);
30609
30610# check special-1 success: 	1
30611UPDATE t1 SET f_charbig = '';
30612
30613# check special-2 success: 	1
30614UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
30615INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30616SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
30617WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30618INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30619SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30620'just inserted' FROM t0_template
30621WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30622CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
30623BEGIN
30624UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30625f_charbig = 'updated by trigger'
30626      WHERE f_int1 = new.f_int1;
30627END|
30628INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30629SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30630WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30631
30632# check trigger-1 success: 	1
30633DROP TRIGGER trg_1;
30634UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30635f_int2 = CAST(f_char1 AS SIGNED INT),
30636f_charbig = 'just inserted'
30637   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30638DELETE FROM t0_aux
30639WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30641SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30642'just inserted' FROM t0_template
30643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30644CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
30645BEGIN
30646UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30647f_charbig = 'updated by trigger'
30648      WHERE f_int1 = new.f_int1;
30649END|
30650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30651SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
30652WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30653
30654# check trigger-2 success: 	1
30655DROP TRIGGER trg_1;
30656UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30657f_int2 = CAST(f_char1 AS SIGNED INT),
30658f_charbig = 'just inserted'
30659   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30660DELETE FROM t0_aux
30661WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30662INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30663SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30664'just inserted' FROM t0_template
30665WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30666CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30667BEGIN
30668UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30669f_charbig = 'updated by trigger'
30670      WHERE f_int1 = new.f_int1;
30671END|
30672UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30673WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30674
30675# check trigger-3 success: 	1
30676DROP TRIGGER trg_1;
30677UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30678f_int2 = CAST(f_char1 AS SIGNED INT),
30679f_charbig = 'just inserted'
30680   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30681DELETE FROM t0_aux
30682WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30683INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30684SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30685'just inserted' FROM t0_template
30686WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30687CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
30688BEGIN
30689UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30690f_charbig = 'updated by trigger'
30691      WHERE f_int1 = - old.f_int1;
30692END|
30693UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30694WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30695
30696# check trigger-4 success: 	1
30697DROP TRIGGER trg_1;
30698UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30699f_int2 = CAST(f_char1 AS SIGNED INT),
30700f_charbig = 'just inserted'
30701   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30702DELETE FROM t0_aux
30703WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30705SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30706'just inserted' FROM t0_template
30707WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30708CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30709BEGIN
30710UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30711f_charbig = 'updated by trigger'
30712      WHERE f_int1 = new.f_int1;
30713END|
30714UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30715WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30716
30717# check trigger-5 success: 	1
30718DROP TRIGGER trg_1;
30719UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30720f_int2 = CAST(f_char1 AS SIGNED INT),
30721f_charbig = 'just inserted'
30722   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30723DELETE FROM t0_aux
30724WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30725INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30726SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30727'just inserted' FROM t0_template
30728WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30729CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
30730BEGIN
30731UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30732f_charbig = 'updated by trigger'
30733      WHERE f_int1 = - old.f_int1;
30734END|
30735UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
30736WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30737
30738# check trigger-6 success: 	1
30739DROP TRIGGER trg_1;
30740UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30741f_int2 = CAST(f_char1 AS SIGNED INT),
30742f_charbig = 'just inserted'
30743   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30744DELETE FROM t0_aux
30745WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30746INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30747SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30748'just inserted' FROM t0_template
30749WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30750CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
30751BEGIN
30752UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30753f_charbig = 'updated by trigger'
30754      WHERE f_int1 = - old.f_int1;
30755END|
30756DELETE FROM t0_aux
30757WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30758
30759# check trigger-7 success: 	1
30760DROP TRIGGER trg_1;
30761UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30762f_int2 = CAST(f_char1 AS SIGNED INT),
30763f_charbig = 'just inserted'
30764   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30765DELETE FROM t0_aux
30766WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30767INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
30768SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
30769'just inserted' FROM t0_template
30770WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30771CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
30772BEGIN
30773UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
30774f_charbig = 'updated by trigger'
30775      WHERE f_int1 = - old.f_int1;
30776END|
30777DELETE FROM t0_aux
30778WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
30779
30780# check trigger-8 success: 	1
30781DROP TRIGGER trg_1;
30782UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30783f_int2 = CAST(f_char1 AS SIGNED INT),
30784f_charbig = 'just inserted'
30785   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
30786DELETE FROM t0_aux
30787WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30788DELETE FROM t1
30789WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
30790CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30791BEGIN
30792SET new.f_int1 = old.f_int1 + @max_row,
30793new.f_int2 = old.f_int2 - @max_row,
30794new.f_charbig = '####updated per update trigger####';
30795END|
30796UPDATE t1
30797SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30798f_charbig = '####updated per update statement itself####';
30799
30800# check trigger-9 success: 	1
30801DROP TRIGGER trg_2;
30802UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30803f_int2 = CAST(f_char1 AS SIGNED INT),
30804f_charbig = CONCAT('===',f_char1,'===');
30805CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
30806BEGIN
30807SET new.f_int1 = new.f_int1 + @max_row,
30808new.f_int2 = new.f_int2 - @max_row,
30809new.f_charbig = '####updated per update trigger####';
30810END|
30811UPDATE t1
30812SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
30813f_charbig = '####updated per update statement itself####';
30814
30815# check trigger-10 success: 	1
30816DROP TRIGGER trg_2;
30817UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
30818f_int2 = CAST(f_char1 AS SIGNED INT),
30819f_charbig = CONCAT('===',f_char1,'===');
30820CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30821BEGIN
30822SET new.f_int1 = @my_max1 + @counter,
30823new.f_int2 = @my_min2 - @counter,
30824new.f_charbig = '####updated per insert trigger####';
30825SET @counter = @counter + 1;
30826END|
30827SET @counter = 1;
30828SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30829INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30830SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30831CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30832WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30833ORDER BY f_int1;
30834DROP TRIGGER trg_3;
30835
30836# check trigger-11 success: 	1
30837DELETE FROM t1
30838WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30839AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30840AND f_charbig = '####updated per insert trigger####';
30841CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
30842BEGIN
30843SET new.f_int1 = @my_max1 + @counter,
30844new.f_int2 = @my_min2 - @counter,
30845new.f_charbig = '####updated per insert trigger####';
30846SET @counter = @counter + 1;
30847END|
30848SET @counter = 1;
30849SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
30850INSERT INTO t1 (f_char1, f_char2, f_charbig)
30851SELECT CAST(f_int1 AS CHAR),
30852CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
30853WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
30854ORDER BY f_int1;
30855DROP TRIGGER trg_3;
30856
30857# check trigger-12 success: 	1
30858DELETE FROM t1
30859WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
30860AND f_int2 <> CAST(f_char1 AS SIGNED INT)
30861AND f_charbig = '####updated per insert trigger####';
30862ANALYZE  TABLE t1;
30863Table	Op	Msg_type	Msg_text
30864test.t1	analyze	status	OK
30865CHECK    TABLE t1 EXTENDED;
30866Table	Op	Msg_type	Msg_text
30867test.t1	check	status	OK
30868CHECKSUM TABLE t1 EXTENDED;
30869Table	Checksum
30870test.t1	<some_value>
30871OPTIMIZE TABLE t1;
30872Table	Op	Msg_type	Msg_text
30873test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
30874test.t1	optimize	status	OK
30875# check layout success:    1
30876REPAIR   TABLE t1 EXTENDED;
30877Table	Op	Msg_type	Msg_text
30878test.t1	repair	status	OK
30879# check layout success:    1
30880TRUNCATE t1;
30881
30882# check TRUNCATE success: 	1
30883# check layout success:    1
30884# End usability test (inc/partition_check.inc)
30885DROP TABLE t1;
30886CREATE TABLE t1 (
30887f_int1 INTEGER,
30888f_int2 INTEGER,
30889f_char1 CHAR(20),
30890f_char2 CHAR(20),
30891f_charbig VARCHAR(1000)
30892, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
30893)
30894PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
30895(PARTITION part1 VALUES LESS THAN (0)
30896(SUBPARTITION subpart11, SUBPARTITION subpart12),
30897PARTITION part2 VALUES LESS THAN (5)
30898(SUBPARTITION subpart21, SUBPARTITION subpart22),
30899PARTITION part3 VALUES LESS THAN (10)
30900(SUBPARTITION subpart31, SUBPARTITION subpart32),
30901PARTITION part4 VALUES LESS THAN (2147483646)
30902(SUBPARTITION subpart41, SUBPARTITION subpart42));
30903INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
30904SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
30905# Start usability test (inc/partition_check.inc)
30906create_command
30907SHOW CREATE TABLE t1;
30908Table	Create Table
30909t1	CREATE TABLE `t1` (
30910  `f_int1` int(11) DEFAULT NULL,
30911  `f_int2` int(11) DEFAULT NULL,
30912  `f_char1` char(20) DEFAULT NULL,
30913  `f_char2` char(20) DEFAULT NULL,
30914  `f_charbig` varchar(1000) DEFAULT NULL,
30915  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
30916  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
30917) ENGINE=InnoDB DEFAULT CHARSET=latin1
30918/*!50100 PARTITION BY RANGE (f_int1)
30919SUBPARTITION BY KEY (f_int2)
30920(PARTITION part1 VALUES LESS THAN (0)
30921 (SUBPARTITION subpart11 ENGINE = InnoDB,
30922  SUBPARTITION subpart12 ENGINE = InnoDB),
30923 PARTITION part2 VALUES LESS THAN (5)
30924 (SUBPARTITION subpart21 ENGINE = InnoDB,
30925  SUBPARTITION subpart22 ENGINE = InnoDB),
30926 PARTITION part3 VALUES LESS THAN (10)
30927 (SUBPARTITION subpart31 ENGINE = InnoDB,
30928  SUBPARTITION subpart32 ENGINE = InnoDB),
30929 PARTITION part4 VALUES LESS THAN (2147483646)
30930 (SUBPARTITION subpart41 ENGINE = InnoDB,
30931  SUBPARTITION subpart42 ENGINE = InnoDB)) */
30932
30933unified filelist
30934t1#P#part1#SP#subpart11.ibd
30935t1#P#part1#SP#subpart12.ibd
30936t1#P#part2#SP#subpart21.ibd
30937t1#P#part2#SP#subpart22.ibd
30938t1#P#part3#SP#subpart31.ibd
30939t1#P#part3#SP#subpart32.ibd
30940t1#P#part4#SP#subpart41.ibd
30941t1#P#part4#SP#subpart42.ibd
30942t1.frm
30943
30944# check prerequisites-1 success:    1
30945# check COUNT(*) success:    1
30946# check MIN/MAX(f_int1) success:    1
30947# check MIN/MAX(f_int2) success:    1
30948INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30949SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
30950CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
30951WHERE f_int1 IN (2,3);
30952ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
30953# check prerequisites-3 success:    1
30954# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
30955INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30956SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30957CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30958WHERE f_int1 IN (2,3);
30959DELETE FROM t1 WHERE f_charbig = 'delete me';
30960INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
30961SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
30962CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
30963WHERE f_int1 IN (2,3);
30964DELETE FROM t1 WHERE f_charbig = 'delete me';
30965# check read via f_int1 success: 1
30966# check read via f_int2 success: 1
30967
30968# check multiple-1 success: 	1
30969DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
30970
30971# check multiple-2 success: 	1
30972INSERT INTO t1 SELECT * FROM t0_template
30973WHERE MOD(f_int1,3) = 0;
30974
30975# check multiple-3 success: 	1
30976UPDATE t1 SET f_int1 = f_int1 + @max_row
30977WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
30978AND @max_row_div2 + @max_row_div4;
30979
30980# check multiple-4 success: 	1
30981DELETE FROM t1
30982WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
30983AND @max_row_div2 + @max_row_div4 + @max_row;
30984
30985# check multiple-5 success: 	1
30986SELECT COUNT(*) INTO @try_count FROM t0_template
30987WHERE MOD(f_int1,3) = 0
30988AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30989SELECT COUNT(*) INTO @clash_count
30990FROM t1 INNER JOIN t0_template USING(f_int1)
30991WHERE MOD(f_int1,3) = 0
30992AND f_int1 BETWEEN @max_row_div2 AND @max_row;
30993SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
30994INSERT INTO t1
30995SET f_int1 = @cur_value , f_int2 = @cur_value,
30996f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
30997f_charbig = '#SINGLE#';
30998
30999# check single-1 success: 	1
31000SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
31001INSERT INTO t1
31002SET f_int1 = @cur_value , f_int2 = @cur_value,
31003f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31004f_charbig = '#SINGLE#';
31005
31006# check single-2 success: 	1
31007SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
31008SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
31009UPDATE t1 SET f_int1 = @cur_value2
31010WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
31011
31012# check single-3 success: 	1
31013SET @cur_value1= -1;
31014SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
31015UPDATE t1 SET f_int1 = @cur_value1
31016WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
31017
31018# check single-4 success: 	1
31019SELECT MAX(f_int1) INTO @cur_value FROM t1;
31020DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
31021
31022# check single-5 success: 	1
31023DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
31024
31025# check single-6 success: 	1
31026INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
31027ERROR HY000: Table has no partition for value 2147483647
31028DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
31029INSERT t1 SET f_int1 = 0 , f_int2 = 0,
31030f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
31031f_charbig = '#NULL#';
31032INSERT INTO t1
31033SET f_int1 = NULL , f_int2 = -@max_row,
31034f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
31035f_charbig = '#NULL#';
31036# check null success:    1
31037
31038# check null-1 success: 	1
31039UPDATE t1 SET f_int1 = -@max_row
31040WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31041AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31042
31043# check null-2 success: 	1
31044UPDATE t1 SET f_int1 = NULL
31045WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31046AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31047
31048# check null-3 success: 	1
31049DELETE FROM t1
31050WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31051AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31052
31053# check null-4 success: 	1
31054DELETE FROM t1
31055WHERE f_int1 = 0 AND f_int2 = 0
31056AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
31057AND f_charbig = '#NULL#';
31058INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31059SELECT f_int1, f_int1, '', '', 'was inserted'
31060   FROM t0_template source_tab
31061WHERE MOD(f_int1,3) = 0
31062AND f_int1 BETWEEN @max_row_div2 AND @max_row
31063ON DUPLICATE KEY
31064UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
31065f_int2 = 2 * @max_row + source_tab.f_int1,
31066f_charbig = 'was updated';
31067
31068# check unique-1-a success: 	1
31069
31070# check unique-1-b success: 	1
31071DELETE FROM t1 WHERE f_charbig = 'was inserted';
31072UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31073f_int2 = CAST(f_char1 AS SIGNED INT),
31074f_charbig = CONCAT('===',f_char1,'===')
31075WHERE f_charbig = 'was updated';
31076REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31077SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
31078   FROM t0_template source_tab
31079WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31080
31081# check replace success: 	1
31082DELETE FROM t1
31083WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
31084DELETE FROM t1
31085WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
31086f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
31087UPDATE t1 SET f_int2 = f_int1,
31088f_char1 = CAST(f_int1 AS CHAR),
31089f_char2 = CAST(f_int1 AS CHAR),
31090f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
31091WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
31092SET AUTOCOMMIT= 0;
31093INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31094SELECT f_int1, f_int1, '', '', 'was inserted'
31095FROM t0_template source_tab
31096WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31097
31098# check transactions-1 success: 	1
31099COMMIT WORK;
31100
31101# check transactions-2 success: 	1
31102ROLLBACK WORK;
31103
31104# check transactions-3 success: 	1
31105DELETE FROM t1 WHERE f_charbig = 'was inserted';
31106COMMIT WORK;
31107ROLLBACK WORK;
31108
31109# check transactions-4 success: 	1
31110INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31111SELECT f_int1, f_int1, '', '', 'was inserted'
31112FROM t0_template source_tab
31113WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31114
31115# check transactions-5 success: 	1
31116ROLLBACK WORK;
31117
31118# check transactions-6 success: 	1
31119# INFO: Storage engine used for t1 seems to be transactional.
31120COMMIT;
31121
31122# check transactions-7 success: 	1
31123DELETE FROM t1 WHERE f_charbig = 'was inserted';
31124COMMIT WORK;
31125SET @@session.sql_mode = 'traditional';
31126Warnings:
31127Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
31128SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
31129INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31130SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
31131'', '', 'was inserted' FROM t0_template
31132WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31133ERROR 22012: Division by 0
31134COMMIT;
31135
31136# check transactions-8 success: 	1
31137# INFO: Storage engine used for t1 seems to be able to revert
31138#       changes made by the failing statement.
31139SET @@session.sql_mode = '';
31140Warnings:
31141Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
31142SET AUTOCOMMIT= 1;
31143DELETE FROM t1 WHERE f_charbig = 'was inserted';
31144COMMIT WORK;
31145UPDATE t1 SET f_charbig = REPEAT('b', 1000);
31146
31147# check special-1 success: 	1
31148UPDATE t1 SET f_charbig = '';
31149
31150# check special-2 success: 	1
31151UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
31152INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31153SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
31154WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31157'just inserted' FROM t0_template
31158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31159CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
31160BEGIN
31161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31162f_charbig = 'updated by trigger'
31163      WHERE f_int1 = new.f_int1;
31164END|
31165INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31166SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31167WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31168
31169# check trigger-1 success: 	1
31170DROP TRIGGER trg_1;
31171UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31172f_int2 = CAST(f_char1 AS SIGNED INT),
31173f_charbig = 'just inserted'
31174   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31175DELETE FROM t0_aux
31176WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31177INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31178SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31179'just inserted' FROM t0_template
31180WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31181CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
31182BEGIN
31183UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31184f_charbig = 'updated by trigger'
31185      WHERE f_int1 = new.f_int1;
31186END|
31187INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31188SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31189WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31190
31191# check trigger-2 success: 	1
31192DROP TRIGGER trg_1;
31193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31194f_int2 = CAST(f_char1 AS SIGNED INT),
31195f_charbig = 'just inserted'
31196   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31197DELETE FROM t0_aux
31198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31201'just inserted' FROM t0_template
31202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31203CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31204BEGIN
31205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31206f_charbig = 'updated by trigger'
31207      WHERE f_int1 = new.f_int1;
31208END|
31209UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31211
31212# check trigger-3 success: 	1
31213DROP TRIGGER trg_1;
31214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31215f_int2 = CAST(f_char1 AS SIGNED INT),
31216f_charbig = 'just inserted'
31217   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31218DELETE FROM t0_aux
31219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31220INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31221SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31222'just inserted' FROM t0_template
31223WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31224CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31225BEGIN
31226UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31227f_charbig = 'updated by trigger'
31228      WHERE f_int1 = - old.f_int1;
31229END|
31230UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31231WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31232
31233# check trigger-4 success: 	1
31234DROP TRIGGER trg_1;
31235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31236f_int2 = CAST(f_char1 AS SIGNED INT),
31237f_charbig = 'just inserted'
31238   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31239DELETE FROM t0_aux
31240WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31241INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31242SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31243'just inserted' FROM t0_template
31244WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31245CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31246BEGIN
31247UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31248f_charbig = 'updated by trigger'
31249      WHERE f_int1 = new.f_int1;
31250END|
31251UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31252WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31253
31254# check trigger-5 success: 	1
31255DROP TRIGGER trg_1;
31256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31257f_int2 = CAST(f_char1 AS SIGNED INT),
31258f_charbig = 'just inserted'
31259   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31260DELETE FROM t0_aux
31261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31262INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31263SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31264'just inserted' FROM t0_template
31265WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31266CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31267BEGIN
31268UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31269f_charbig = 'updated by trigger'
31270      WHERE f_int1 = - old.f_int1;
31271END|
31272UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31273WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31274
31275# check trigger-6 success: 	1
31276DROP TRIGGER trg_1;
31277UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31278f_int2 = CAST(f_char1 AS SIGNED INT),
31279f_charbig = 'just inserted'
31280   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31281DELETE FROM t0_aux
31282WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31283INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31284SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31285'just inserted' FROM t0_template
31286WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31287CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
31288BEGIN
31289UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31290f_charbig = 'updated by trigger'
31291      WHERE f_int1 = - old.f_int1;
31292END|
31293DELETE FROM t0_aux
31294WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31295
31296# check trigger-7 success: 	1
31297DROP TRIGGER trg_1;
31298UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31299f_int2 = CAST(f_char1 AS SIGNED INT),
31300f_charbig = 'just inserted'
31301   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31302DELETE FROM t0_aux
31303WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31304INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31305SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31306'just inserted' FROM t0_template
31307WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31308CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
31309BEGIN
31310UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31311f_charbig = 'updated by trigger'
31312      WHERE f_int1 = - old.f_int1;
31313END|
31314DELETE FROM t0_aux
31315WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31316
31317# check trigger-8 success: 	1
31318DROP TRIGGER trg_1;
31319UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31320f_int2 = CAST(f_char1 AS SIGNED INT),
31321f_charbig = 'just inserted'
31322   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31323DELETE FROM t0_aux
31324WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31325DELETE FROM t1
31326WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31327CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31328BEGIN
31329SET new.f_int1 = old.f_int1 + @max_row,
31330new.f_int2 = old.f_int2 - @max_row,
31331new.f_charbig = '####updated per update trigger####';
31332END|
31333UPDATE t1
31334SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31335f_charbig = '####updated per update statement itself####';
31336
31337# check trigger-9 success: 	1
31338DROP TRIGGER trg_2;
31339UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31340f_int2 = CAST(f_char1 AS SIGNED INT),
31341f_charbig = CONCAT('===',f_char1,'===');
31342CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31343BEGIN
31344SET new.f_int1 = new.f_int1 + @max_row,
31345new.f_int2 = new.f_int2 - @max_row,
31346new.f_charbig = '####updated per update trigger####';
31347END|
31348UPDATE t1
31349SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31350f_charbig = '####updated per update statement itself####';
31351
31352# check trigger-10 success: 	1
31353DROP TRIGGER trg_2;
31354UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31355f_int2 = CAST(f_char1 AS SIGNED INT),
31356f_charbig = CONCAT('===',f_char1,'===');
31357CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31358BEGIN
31359SET new.f_int1 = @my_max1 + @counter,
31360new.f_int2 = @my_min2 - @counter,
31361new.f_charbig = '####updated per insert trigger####';
31362SET @counter = @counter + 1;
31363END|
31364SET @counter = 1;
31365SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31366INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31367SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31368CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31369WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31370ORDER BY f_int1;
31371DROP TRIGGER trg_3;
31372
31373# check trigger-11 success: 	1
31374DELETE FROM t1
31375WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31376AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31377AND f_charbig = '####updated per insert trigger####';
31378CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31379BEGIN
31380SET new.f_int1 = @my_max1 + @counter,
31381new.f_int2 = @my_min2 - @counter,
31382new.f_charbig = '####updated per insert trigger####';
31383SET @counter = @counter + 1;
31384END|
31385SET @counter = 1;
31386SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31387INSERT INTO t1 (f_char1, f_char2, f_charbig)
31388SELECT CAST(f_int1 AS CHAR),
31389CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31390WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31391ORDER BY f_int1;
31392DROP TRIGGER trg_3;
31393
31394# check trigger-12 success: 	1
31395DELETE FROM t1
31396WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31397AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31398AND f_charbig = '####updated per insert trigger####';
31399ANALYZE  TABLE t1;
31400Table	Op	Msg_type	Msg_text
31401test.t1	analyze	status	OK
31402CHECK    TABLE t1 EXTENDED;
31403Table	Op	Msg_type	Msg_text
31404test.t1	check	status	OK
31405CHECKSUM TABLE t1 EXTENDED;
31406Table	Checksum
31407test.t1	<some_value>
31408OPTIMIZE TABLE t1;
31409Table	Op	Msg_type	Msg_text
31410test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
31411test.t1	optimize	status	OK
31412# check layout success:    1
31413REPAIR   TABLE t1 EXTENDED;
31414Table	Op	Msg_type	Msg_text
31415test.t1	repair	status	OK
31416# check layout success:    1
31417TRUNCATE t1;
31418
31419# check TRUNCATE success: 	1
31420# check layout success:    1
31421# End usability test (inc/partition_check.inc)
31422DROP TABLE t1;
31423CREATE TABLE t1 (
31424f_int1 INTEGER,
31425f_int2 INTEGER,
31426f_char1 CHAR(20),
31427f_char2 CHAR(20),
31428f_charbig VARCHAR(1000)
31429, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
31430)
31431PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
31432(PARTITION part1 VALUES IN (0)
31433(SUBPARTITION sp11, SUBPARTITION sp12),
31434PARTITION part2 VALUES IN (1)
31435(SUBPARTITION sp21, SUBPARTITION sp22),
31436PARTITION part3 VALUES IN (2)
31437(SUBPARTITION sp31, SUBPARTITION sp32),
31438PARTITION part4 VALUES IN (NULL)
31439(SUBPARTITION sp41, SUBPARTITION sp42));
31440INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31441SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
31442# Start usability test (inc/partition_check.inc)
31443create_command
31444SHOW CREATE TABLE t1;
31445Table	Create Table
31446t1	CREATE TABLE `t1` (
31447  `f_int1` int(11) DEFAULT NULL,
31448  `f_int2` int(11) DEFAULT NULL,
31449  `f_char1` char(20) DEFAULT NULL,
31450  `f_char2` char(20) DEFAULT NULL,
31451  `f_charbig` varchar(1000) DEFAULT NULL,
31452  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
31453  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
31454) ENGINE=InnoDB DEFAULT CHARSET=latin1
31455/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
31456SUBPARTITION BY HASH (f_int2 + 1)
31457(PARTITION part1 VALUES IN (0)
31458 (SUBPARTITION sp11 ENGINE = InnoDB,
31459  SUBPARTITION sp12 ENGINE = InnoDB),
31460 PARTITION part2 VALUES IN (1)
31461 (SUBPARTITION sp21 ENGINE = InnoDB,
31462  SUBPARTITION sp22 ENGINE = InnoDB),
31463 PARTITION part3 VALUES IN (2)
31464 (SUBPARTITION sp31 ENGINE = InnoDB,
31465  SUBPARTITION sp32 ENGINE = InnoDB),
31466 PARTITION part4 VALUES IN (NULL)
31467 (SUBPARTITION sp41 ENGINE = InnoDB,
31468  SUBPARTITION sp42 ENGINE = InnoDB)) */
31469
31470unified filelist
31471t1#P#part1#SP#sp11.ibd
31472t1#P#part1#SP#sp12.ibd
31473t1#P#part2#SP#sp21.ibd
31474t1#P#part2#SP#sp22.ibd
31475t1#P#part3#SP#sp31.ibd
31476t1#P#part3#SP#sp32.ibd
31477t1#P#part4#SP#sp41.ibd
31478t1#P#part4#SP#sp42.ibd
31479t1.frm
31480
31481# check prerequisites-1 success:    1
31482# check COUNT(*) success:    1
31483# check MIN/MAX(f_int1) success:    1
31484# check MIN/MAX(f_int2) success:    1
31485INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31486SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31487CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
31488WHERE f_int1 IN (2,3);
31489ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
31490# check prerequisites-3 success:    1
31491# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
31492INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31493SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31494CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31495WHERE f_int1 IN (2,3);
31496DELETE FROM t1 WHERE f_charbig = 'delete me';
31497INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31498SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
31499CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
31500WHERE f_int1 IN (2,3);
31501DELETE FROM t1 WHERE f_charbig = 'delete me';
31502# check read via f_int1 success: 1
31503# check read via f_int2 success: 1
31504
31505# check multiple-1 success: 	1
31506DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
31507
31508# check multiple-2 success: 	1
31509INSERT INTO t1 SELECT * FROM t0_template
31510WHERE MOD(f_int1,3) = 0;
31511
31512# check multiple-3 success: 	1
31513UPDATE t1 SET f_int1 = f_int1 + @max_row
31514WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
31515AND @max_row_div2 + @max_row_div4;
31516
31517# check multiple-4 success: 	1
31518DELETE FROM t1
31519WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
31520AND @max_row_div2 + @max_row_div4 + @max_row;
31521
31522# check multiple-5 success: 	1
31523SELECT COUNT(*) INTO @try_count FROM t0_template
31524WHERE MOD(f_int1,3) = 0
31525AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31526SELECT COUNT(*) INTO @clash_count
31527FROM t1 INNER JOIN t0_template USING(f_int1)
31528WHERE MOD(f_int1,3) = 0
31529AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31530SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
31531INSERT INTO t1
31532SET f_int1 = @cur_value , f_int2 = @cur_value,
31533f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31534f_charbig = '#SINGLE#';
31535
31536# check single-1 success: 	1
31537SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
31538INSERT INTO t1
31539SET f_int1 = @cur_value , f_int2 = @cur_value,
31540f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
31541f_charbig = '#SINGLE#';
31542
31543# check single-2 success: 	1
31544SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
31545SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
31546UPDATE t1 SET f_int1 = @cur_value2
31547WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
31548
31549# check single-3 success: 	1
31550SET @cur_value1= -1;
31551SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
31552UPDATE t1 SET f_int1 = @cur_value1
31553WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
31554
31555# check single-4 success: 	1
31556SELECT MAX(f_int1) INTO @cur_value FROM t1;
31557DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
31558
31559# check single-5 success: 	1
31560DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
31561
31562# check single-6 success: 	1
31563INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
31564
31565# check single-7 success: 	1
31566DELETE FROM t1 WHERE f_charbig = '#2147483647##';
31567DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
31568INSERT t1 SET f_int1 = 0 , f_int2 = 0,
31569f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
31570f_charbig = '#NULL#';
31571INSERT INTO t1
31572SET f_int1 = NULL , f_int2 = -@max_row,
31573f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
31574f_charbig = '#NULL#';
31575# check null success:    1
31576
31577# check null-1 success: 	1
31578UPDATE t1 SET f_int1 = -@max_row
31579WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31580AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31581
31582# check null-2 success: 	1
31583UPDATE t1 SET f_int1 = NULL
31584WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31585AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31586
31587# check null-3 success: 	1
31588DELETE FROM t1
31589WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
31590AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
31591
31592# check null-4 success: 	1
31593DELETE FROM t1
31594WHERE f_int1 = 0 AND f_int2 = 0
31595AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
31596AND f_charbig = '#NULL#';
31597INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31598SELECT f_int1, f_int1, '', '', 'was inserted'
31599   FROM t0_template source_tab
31600WHERE MOD(f_int1,3) = 0
31601AND f_int1 BETWEEN @max_row_div2 AND @max_row
31602ON DUPLICATE KEY
31603UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
31604f_int2 = 2 * @max_row + source_tab.f_int1,
31605f_charbig = 'was updated';
31606
31607# check unique-1-a success: 	1
31608
31609# check unique-1-b success: 	1
31610DELETE FROM t1 WHERE f_charbig = 'was inserted';
31611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31612f_int2 = CAST(f_char1 AS SIGNED INT),
31613f_charbig = CONCAT('===',f_char1,'===')
31614WHERE f_charbig = 'was updated';
31615REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31616SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
31617   FROM t0_template source_tab
31618WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
31619
31620# check replace success: 	1
31621DELETE FROM t1
31622WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
31623DELETE FROM t1
31624WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
31625f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
31626UPDATE t1 SET f_int2 = f_int1,
31627f_char1 = CAST(f_int1 AS CHAR),
31628f_char2 = CAST(f_int1 AS CHAR),
31629f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
31630WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
31631SET AUTOCOMMIT= 0;
31632INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31633SELECT f_int1, f_int1, '', '', 'was inserted'
31634FROM t0_template source_tab
31635WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31636
31637# check transactions-1 success: 	1
31638COMMIT WORK;
31639
31640# check transactions-2 success: 	1
31641ROLLBACK WORK;
31642
31643# check transactions-3 success: 	1
31644DELETE FROM t1 WHERE f_charbig = 'was inserted';
31645COMMIT WORK;
31646ROLLBACK WORK;
31647
31648# check transactions-4 success: 	1
31649INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31650SELECT f_int1, f_int1, '', '', 'was inserted'
31651FROM t0_template source_tab
31652WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31653
31654# check transactions-5 success: 	1
31655ROLLBACK WORK;
31656
31657# check transactions-6 success: 	1
31658# INFO: Storage engine used for t1 seems to be transactional.
31659COMMIT;
31660
31661# check transactions-7 success: 	1
31662DELETE FROM t1 WHERE f_charbig = 'was inserted';
31663COMMIT WORK;
31664SET @@session.sql_mode = 'traditional';
31665Warnings:
31666Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
31667SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
31668INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31669SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
31670'', '', 'was inserted' FROM t0_template
31671WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
31672ERROR 22012: Division by 0
31673COMMIT;
31674
31675# check transactions-8 success: 	1
31676# INFO: Storage engine used for t1 seems to be able to revert
31677#       changes made by the failing statement.
31678SET @@session.sql_mode = '';
31679Warnings:
31680Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
31681SET AUTOCOMMIT= 1;
31682DELETE FROM t1 WHERE f_charbig = 'was inserted';
31683COMMIT WORK;
31684UPDATE t1 SET f_charbig = REPEAT('b', 1000);
31685
31686# check special-1 success: 	1
31687UPDATE t1 SET f_charbig = '';
31688
31689# check special-2 success: 	1
31690UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
31691INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31692SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
31693WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31694INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31695SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31696'just inserted' FROM t0_template
31697WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31698CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
31699BEGIN
31700UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31701f_charbig = 'updated by trigger'
31702      WHERE f_int1 = new.f_int1;
31703END|
31704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31705SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31706WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31707
31708# check trigger-1 success: 	1
31709DROP TRIGGER trg_1;
31710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31711f_int2 = CAST(f_char1 AS SIGNED INT),
31712f_charbig = 'just inserted'
31713   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31714DELETE FROM t0_aux
31715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31718'just inserted' FROM t0_template
31719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31720CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
31721BEGIN
31722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31723f_charbig = 'updated by trigger'
31724      WHERE f_int1 = new.f_int1;
31725END|
31726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31727SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
31728WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31729
31730# check trigger-2 success: 	1
31731DROP TRIGGER trg_1;
31732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31733f_int2 = CAST(f_char1 AS SIGNED INT),
31734f_charbig = 'just inserted'
31735   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31736DELETE FROM t0_aux
31737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31740'just inserted' FROM t0_template
31741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31742CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31743BEGIN
31744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31745f_charbig = 'updated by trigger'
31746      WHERE f_int1 = new.f_int1;
31747END|
31748UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31750
31751# check trigger-3 success: 	1
31752DROP TRIGGER trg_1;
31753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31754f_int2 = CAST(f_char1 AS SIGNED INT),
31755f_charbig = 'just inserted'
31756   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31757DELETE FROM t0_aux
31758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31759INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31760SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31761'just inserted' FROM t0_template
31762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31763CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
31764BEGIN
31765UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31766f_charbig = 'updated by trigger'
31767      WHERE f_int1 = - old.f_int1;
31768END|
31769UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31770WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31771
31772# check trigger-4 success: 	1
31773DROP TRIGGER trg_1;
31774UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31775f_int2 = CAST(f_char1 AS SIGNED INT),
31776f_charbig = 'just inserted'
31777   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31778DELETE FROM t0_aux
31779WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31780INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31781SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31782'just inserted' FROM t0_template
31783WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31784CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31785BEGIN
31786UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31787f_charbig = 'updated by trigger'
31788      WHERE f_int1 = new.f_int1;
31789END|
31790UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31791WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31792
31793# check trigger-5 success: 	1
31794DROP TRIGGER trg_1;
31795UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31796f_int2 = CAST(f_char1 AS SIGNED INT),
31797f_charbig = 'just inserted'
31798   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31799DELETE FROM t0_aux
31800WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31801INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31802SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31803'just inserted' FROM t0_template
31804WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31805CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
31806BEGIN
31807UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31808f_charbig = 'updated by trigger'
31809      WHERE f_int1 = - old.f_int1;
31810END|
31811UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
31812WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31813
31814# check trigger-6 success: 	1
31815DROP TRIGGER trg_1;
31816UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31817f_int2 = CAST(f_char1 AS SIGNED INT),
31818f_charbig = 'just inserted'
31819   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31820DELETE FROM t0_aux
31821WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31822INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31823SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31824'just inserted' FROM t0_template
31825WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31826CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
31827BEGIN
31828UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31829f_charbig = 'updated by trigger'
31830      WHERE f_int1 = - old.f_int1;
31831END|
31832DELETE FROM t0_aux
31833WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31834
31835# check trigger-7 success: 	1
31836DROP TRIGGER trg_1;
31837UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31838f_int2 = CAST(f_char1 AS SIGNED INT),
31839f_charbig = 'just inserted'
31840   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31841DELETE FROM t0_aux
31842WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31843INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
31844SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
31845'just inserted' FROM t0_template
31846WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31847CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
31848BEGIN
31849UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
31850f_charbig = 'updated by trigger'
31851      WHERE f_int1 = - old.f_int1;
31852END|
31853DELETE FROM t0_aux
31854WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
31855
31856# check trigger-8 success: 	1
31857DROP TRIGGER trg_1;
31858UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31859f_int2 = CAST(f_char1 AS SIGNED INT),
31860f_charbig = 'just inserted'
31861   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
31862DELETE FROM t0_aux
31863WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31864DELETE FROM t1
31865WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
31866CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31867BEGIN
31868SET new.f_int1 = old.f_int1 + @max_row,
31869new.f_int2 = old.f_int2 - @max_row,
31870new.f_charbig = '####updated per update trigger####';
31871END|
31872UPDATE t1
31873SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31874f_charbig = '####updated per update statement itself####';
31875
31876# check trigger-9 success: 	1
31877DROP TRIGGER trg_2;
31878UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31879f_int2 = CAST(f_char1 AS SIGNED INT),
31880f_charbig = CONCAT('===',f_char1,'===');
31881CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
31882BEGIN
31883SET new.f_int1 = new.f_int1 + @max_row,
31884new.f_int2 = new.f_int2 - @max_row,
31885new.f_charbig = '####updated per update trigger####';
31886END|
31887UPDATE t1
31888SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
31889f_charbig = '####updated per update statement itself####';
31890
31891# check trigger-10 success: 	1
31892DROP TRIGGER trg_2;
31893UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
31894f_int2 = CAST(f_char1 AS SIGNED INT),
31895f_charbig = CONCAT('===',f_char1,'===');
31896CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31897BEGIN
31898SET new.f_int1 = @my_max1 + @counter,
31899new.f_int2 = @my_min2 - @counter,
31900new.f_charbig = '####updated per insert trigger####';
31901SET @counter = @counter + 1;
31902END|
31903SET @counter = 1;
31904SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
31906SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
31907CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31908WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31909ORDER BY f_int1;
31910DROP TRIGGER trg_3;
31911
31912# check trigger-11 success: 	1
31913DELETE FROM t1
31914WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31915AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31916AND f_charbig = '####updated per insert trigger####';
31917CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
31918BEGIN
31919SET new.f_int1 = @my_max1 + @counter,
31920new.f_int2 = @my_min2 - @counter,
31921new.f_charbig = '####updated per insert trigger####';
31922SET @counter = @counter + 1;
31923END|
31924SET @counter = 1;
31925SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
31926INSERT INTO t1 (f_char1, f_char2, f_charbig)
31927SELECT CAST(f_int1 AS CHAR),
31928CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
31929WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
31930ORDER BY f_int1;
31931DROP TRIGGER trg_3;
31932
31933# check trigger-12 success: 	1
31934DELETE FROM t1
31935WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
31936AND f_int2 <> CAST(f_char1 AS SIGNED INT)
31937AND f_charbig = '####updated per insert trigger####';
31938ANALYZE  TABLE t1;
31939Table	Op	Msg_type	Msg_text
31940test.t1	analyze	status	OK
31941CHECK    TABLE t1 EXTENDED;
31942Table	Op	Msg_type	Msg_text
31943test.t1	check	status	OK
31944CHECKSUM TABLE t1 EXTENDED;
31945Table	Checksum
31946test.t1	<some_value>
31947OPTIMIZE TABLE t1;
31948Table	Op	Msg_type	Msg_text
31949test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
31950test.t1	optimize	status	OK
31951# check layout success:    1
31952REPAIR   TABLE t1 EXTENDED;
31953Table	Op	Msg_type	Msg_text
31954test.t1	repair	status	OK
31955# check layout success:    1
31956TRUNCATE t1;
31957
31958# check TRUNCATE success: 	1
31959# check layout success:    1
31960# End usability test (inc/partition_check.inc)
31961DROP TABLE t1;
31962CREATE TABLE t1 (
31963f_int1 INTEGER,
31964f_int2 INTEGER,
31965f_char1 CHAR(20),
31966f_char2 CHAR(20),
31967f_charbig VARCHAR(1000)
31968, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1)
31969)
31970PARTITION BY LIST(ABS(MOD(f_int1,2)))
31971SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
31972(PARTITION part1 VALUES IN (0),
31973PARTITION part2 VALUES IN (1),
31974PARTITION part3 VALUES IN (NULL));
31975INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
31976SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
31977# Start usability test (inc/partition_check.inc)
31978create_command
31979SHOW CREATE TABLE t1;
31980Table	Create Table
31981t1	CREATE TABLE `t1` (
31982  `f_int1` int(11) DEFAULT NULL,
31983  `f_int2` int(11) DEFAULT NULL,
31984  `f_char1` char(20) DEFAULT NULL,
31985  `f_char2` char(20) DEFAULT NULL,
31986  `f_charbig` varchar(1000) DEFAULT NULL,
31987  UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
31988  UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
31989) ENGINE=InnoDB DEFAULT CHARSET=latin1
31990/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
31991SUBPARTITION BY KEY (f_int2)
31992SUBPARTITIONS 3
31993(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
31994 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
31995 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
31996
31997unified filelist
31998t1#P#part1#SP#part1sp0.ibd
31999t1#P#part1#SP#part1sp1.ibd
32000t1#P#part1#SP#part1sp2.ibd
32001t1#P#part2#SP#part2sp0.ibd
32002t1#P#part2#SP#part2sp1.ibd
32003t1#P#part2#SP#part2sp2.ibd
32004t1#P#part3#SP#part3sp0.ibd
32005t1#P#part3#SP#part3sp1.ibd
32006t1#P#part3#SP#part3sp2.ibd
32007t1.frm
32008
32009# check prerequisites-1 success:    1
32010# check COUNT(*) success:    1
32011# check MIN/MAX(f_int1) success:    1
32012# check MIN/MAX(f_int2) success:    1
32013INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32014SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32015CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
32016WHERE f_int1 IN (2,3);
32017ERROR 23000: Duplicate entry '2-2' for key 'uidx1'
32018# check prerequisites-3 success:    1
32019# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
32020INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32021SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32022CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32023WHERE f_int1 IN (2,3);
32024DELETE FROM t1 WHERE f_charbig = 'delete me';
32025INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32026SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
32027CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
32028WHERE f_int1 IN (2,3);
32029DELETE FROM t1 WHERE f_charbig = 'delete me';
32030# check read via f_int1 success: 1
32031# check read via f_int2 success: 1
32032
32033# check multiple-1 success: 	1
32034DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
32035
32036# check multiple-2 success: 	1
32037INSERT INTO t1 SELECT * FROM t0_template
32038WHERE MOD(f_int1,3) = 0;
32039
32040# check multiple-3 success: 	1
32041UPDATE t1 SET f_int1 = f_int1 + @max_row
32042WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
32043AND @max_row_div2 + @max_row_div4;
32044
32045# check multiple-4 success: 	1
32046DELETE FROM t1
32047WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
32048AND @max_row_div2 + @max_row_div4 + @max_row;
32049
32050# check multiple-5 success: 	1
32051SELECT COUNT(*) INTO @try_count FROM t0_template
32052WHERE MOD(f_int1,3) = 0
32053AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32054SELECT COUNT(*) INTO @clash_count
32055FROM t1 INNER JOIN t0_template USING(f_int1)
32056WHERE MOD(f_int1,3) = 0
32057AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32058SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
32059INSERT INTO t1
32060SET f_int1 = @cur_value , f_int2 = @cur_value,
32061f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32062f_charbig = '#SINGLE#';
32063
32064# check single-1 success: 	1
32065SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
32066INSERT INTO t1
32067SET f_int1 = @cur_value , f_int2 = @cur_value,
32068f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
32069f_charbig = '#SINGLE#';
32070
32071# check single-2 success: 	1
32072SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
32073SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
32074UPDATE t1 SET f_int1 = @cur_value2
32075WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
32076
32077# check single-3 success: 	1
32078SET @cur_value1= -1;
32079SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
32080UPDATE t1 SET f_int1 = @cur_value1
32081WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
32082
32083# check single-4 success: 	1
32084SELECT MAX(f_int1) INTO @cur_value FROM t1;
32085DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
32086
32087# check single-5 success: 	1
32088DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
32089
32090# check single-6 success: 	1
32091INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
32092
32093# check single-7 success: 	1
32094DELETE FROM t1 WHERE f_charbig = '#2147483647##';
32095DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
32096INSERT t1 SET f_int1 = 0 , f_int2 = 0,
32097f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
32098f_charbig = '#NULL#';
32099INSERT INTO t1
32100SET f_int1 = NULL , f_int2 = -@max_row,
32101f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
32102f_charbig = '#NULL#';
32103# check null success:    1
32104
32105# check null-1 success: 	1
32106UPDATE t1 SET f_int1 = -@max_row
32107WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
32108AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
32109
32110# check null-2 success: 	1
32111UPDATE t1 SET f_int1 = NULL
32112WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
32113AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
32114
32115# check null-3 success: 	1
32116DELETE FROM t1
32117WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
32118AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
32119
32120# check null-4 success: 	1
32121DELETE FROM t1
32122WHERE f_int1 = 0 AND f_int2 = 0
32123AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
32124AND f_charbig = '#NULL#';
32125INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32126SELECT f_int1, f_int1, '', '', 'was inserted'
32127   FROM t0_template source_tab
32128WHERE MOD(f_int1,3) = 0
32129AND f_int1 BETWEEN @max_row_div2 AND @max_row
32130ON DUPLICATE KEY
32131UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
32132f_int2 = 2 * @max_row + source_tab.f_int1,
32133f_charbig = 'was updated';
32134
32135# check unique-1-a success: 	1
32136
32137# check unique-1-b success: 	1
32138DELETE FROM t1 WHERE f_charbig = 'was inserted';
32139UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32140f_int2 = CAST(f_char1 AS SIGNED INT),
32141f_charbig = CONCAT('===',f_char1,'===')
32142WHERE f_charbig = 'was updated';
32143REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32144SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
32145   FROM t0_template source_tab
32146WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
32147
32148# check replace success: 	1
32149DELETE FROM t1
32150WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
32151DELETE FROM t1
32152WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
32153f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
32154UPDATE t1 SET f_int2 = f_int1,
32155f_char1 = CAST(f_int1 AS CHAR),
32156f_char2 = CAST(f_int1 AS CHAR),
32157f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
32158WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
32159SET AUTOCOMMIT= 0;
32160INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32161SELECT f_int1, f_int1, '', '', 'was inserted'
32162FROM t0_template source_tab
32163WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32164
32165# check transactions-1 success: 	1
32166COMMIT WORK;
32167
32168# check transactions-2 success: 	1
32169ROLLBACK WORK;
32170
32171# check transactions-3 success: 	1
32172DELETE FROM t1 WHERE f_charbig = 'was inserted';
32173COMMIT WORK;
32174ROLLBACK WORK;
32175
32176# check transactions-4 success: 	1
32177INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32178SELECT f_int1, f_int1, '', '', 'was inserted'
32179FROM t0_template source_tab
32180WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32181
32182# check transactions-5 success: 	1
32183ROLLBACK WORK;
32184
32185# check transactions-6 success: 	1
32186# INFO: Storage engine used for t1 seems to be transactional.
32187COMMIT;
32188
32189# check transactions-7 success: 	1
32190DELETE FROM t1 WHERE f_charbig = 'was inserted';
32191COMMIT WORK;
32192SET @@session.sql_mode = 'traditional';
32193Warnings:
32194Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
32195SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
32196INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32197SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
32198'', '', 'was inserted' FROM t0_template
32199WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
32200ERROR 22012: Division by 0
32201COMMIT;
32202
32203# check transactions-8 success: 	1
32204# INFO: Storage engine used for t1 seems to be able to revert
32205#       changes made by the failing statement.
32206SET @@session.sql_mode = '';
32207Warnings:
32208Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
32209SET AUTOCOMMIT= 1;
32210DELETE FROM t1 WHERE f_charbig = 'was inserted';
32211COMMIT WORK;
32212UPDATE t1 SET f_charbig = REPEAT('b', 1000);
32213
32214# check special-1 success: 	1
32215UPDATE t1 SET f_charbig = '';
32216
32217# check special-2 success: 	1
32218UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
32219INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
32220SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
32221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32222INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32223SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32224'just inserted' FROM t0_template
32225WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32226CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
32227BEGIN
32228UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32229f_charbig = 'updated by trigger'
32230      WHERE f_int1 = new.f_int1;
32231END|
32232INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32233SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32234WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32235
32236# check trigger-1 success: 	1
32237DROP TRIGGER trg_1;
32238UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32239f_int2 = CAST(f_char1 AS SIGNED INT),
32240f_charbig = 'just inserted'
32241   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32242DELETE FROM t0_aux
32243WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32244INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32245SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32246'just inserted' FROM t0_template
32247WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32248CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
32249BEGIN
32250UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32251f_charbig = 'updated by trigger'
32252      WHERE f_int1 = new.f_int1;
32253END|
32254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32255SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
32256WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32257
32258# check trigger-2 success: 	1
32259DROP TRIGGER trg_1;
32260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32261f_int2 = CAST(f_char1 AS SIGNED INT),
32262f_charbig = 'just inserted'
32263   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32264DELETE FROM t0_aux
32265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32266INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32267SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32268'just inserted' FROM t0_template
32269WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32270CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
32271BEGIN
32272UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32273f_charbig = 'updated by trigger'
32274      WHERE f_int1 = new.f_int1;
32275END|
32276UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32277WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32278
32279# check trigger-3 success: 	1
32280DROP TRIGGER trg_1;
32281UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32282f_int2 = CAST(f_char1 AS SIGNED INT),
32283f_charbig = 'just inserted'
32284   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32285DELETE FROM t0_aux
32286WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32287INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32288SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32289'just inserted' FROM t0_template
32290WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32291CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
32292BEGIN
32293UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32294f_charbig = 'updated by trigger'
32295      WHERE f_int1 = - old.f_int1;
32296END|
32297UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32298WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32299
32300# check trigger-4 success: 	1
32301DROP TRIGGER trg_1;
32302UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32303f_int2 = CAST(f_char1 AS SIGNED INT),
32304f_charbig = 'just inserted'
32305   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32306DELETE FROM t0_aux
32307WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32308INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32309SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32310'just inserted' FROM t0_template
32311WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32312CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32313BEGIN
32314UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32315f_charbig = 'updated by trigger'
32316      WHERE f_int1 = new.f_int1;
32317END|
32318UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32319WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32320
32321# check trigger-5 success: 	1
32322DROP TRIGGER trg_1;
32323UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32324f_int2 = CAST(f_char1 AS SIGNED INT),
32325f_charbig = 'just inserted'
32326   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32327DELETE FROM t0_aux
32328WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32329INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32330SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32331'just inserted' FROM t0_template
32332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32333CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
32334BEGIN
32335UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32336f_charbig = 'updated by trigger'
32337      WHERE f_int1 = - old.f_int1;
32338END|
32339UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
32340WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32341
32342# check trigger-6 success: 	1
32343DROP TRIGGER trg_1;
32344UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32345f_int2 = CAST(f_char1 AS SIGNED INT),
32346f_charbig = 'just inserted'
32347   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32348DELETE FROM t0_aux
32349WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32351SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32352'just inserted' FROM t0_template
32353WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32354CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
32355BEGIN
32356UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32357f_charbig = 'updated by trigger'
32358      WHERE f_int1 = - old.f_int1;
32359END|
32360DELETE FROM t0_aux
32361WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32362
32363# check trigger-7 success: 	1
32364DROP TRIGGER trg_1;
32365UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32366f_int2 = CAST(f_char1 AS SIGNED INT),
32367f_charbig = 'just inserted'
32368   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32369DELETE FROM t0_aux
32370WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32371INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
32372SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
32373'just inserted' FROM t0_template
32374WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32375CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
32376BEGIN
32377UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
32378f_charbig = 'updated by trigger'
32379      WHERE f_int1 = - old.f_int1;
32380END|
32381DELETE FROM t0_aux
32382WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
32383
32384# check trigger-8 success: 	1
32385DROP TRIGGER trg_1;
32386UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32387f_int2 = CAST(f_char1 AS SIGNED INT),
32388f_charbig = 'just inserted'
32389   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
32390DELETE FROM t0_aux
32391WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32392DELETE FROM t1
32393WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
32394CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32395BEGIN
32396SET new.f_int1 = old.f_int1 + @max_row,
32397new.f_int2 = old.f_int2 - @max_row,
32398new.f_charbig = '####updated per update trigger####';
32399END|
32400UPDATE t1
32401SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32402f_charbig = '####updated per update statement itself####';
32403
32404# check trigger-9 success: 	1
32405DROP TRIGGER trg_2;
32406UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32407f_int2 = CAST(f_char1 AS SIGNED INT),
32408f_charbig = CONCAT('===',f_char1,'===');
32409CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
32410BEGIN
32411SET new.f_int1 = new.f_int1 + @max_row,
32412new.f_int2 = new.f_int2 - @max_row,
32413new.f_charbig = '####updated per update trigger####';
32414END|
32415UPDATE t1
32416SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
32417f_charbig = '####updated per update statement itself####';
32418
32419# check trigger-10 success: 	1
32420DROP TRIGGER trg_2;
32421UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
32422f_int2 = CAST(f_char1 AS SIGNED INT),
32423f_charbig = CONCAT('===',f_char1,'===');
32424CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32425BEGIN
32426SET new.f_int1 = @my_max1 + @counter,
32427new.f_int2 = @my_min2 - @counter,
32428new.f_charbig = '####updated per insert trigger####';
32429SET @counter = @counter + 1;
32430END|
32431SET @counter = 1;
32432SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
32434SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
32435CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32436WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32437ORDER BY f_int1;
32438DROP TRIGGER trg_3;
32439
32440# check trigger-11 success: 	1
32441DELETE FROM t1
32442WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32443AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32444AND f_charbig = '####updated per insert trigger####';
32445CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
32446BEGIN
32447SET new.f_int1 = @my_max1 + @counter,
32448new.f_int2 = @my_min2 - @counter,
32449new.f_charbig = '####updated per insert trigger####';
32450SET @counter = @counter + 1;
32451END|
32452SET @counter = 1;
32453SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
32454INSERT INTO t1 (f_char1, f_char2, f_charbig)
32455SELECT CAST(f_int1 AS CHAR),
32456CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
32457WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
32458ORDER BY f_int1;
32459DROP TRIGGER trg_3;
32460
32461# check trigger-12 success: 	1
32462DELETE FROM t1
32463WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
32464AND f_int2 <> CAST(f_char1 AS SIGNED INT)
32465AND f_charbig = '####updated per insert trigger####';
32466ANALYZE  TABLE t1;
32467Table	Op	Msg_type	Msg_text
32468test.t1	analyze	status	OK
32469CHECK    TABLE t1 EXTENDED;
32470Table	Op	Msg_type	Msg_text
32471test.t1	check	status	OK
32472CHECKSUM TABLE t1 EXTENDED;
32473Table	Checksum
32474test.t1	<some_value>
32475OPTIMIZE TABLE t1;
32476Table	Op	Msg_type	Msg_text
32477test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
32478test.t1	optimize	status	OK
32479# check layout success:    1
32480REPAIR   TABLE t1 EXTENDED;
32481Table	Op	Msg_type	Msg_text
32482test.t1	repair	status	OK
32483# check layout success:    1
32484TRUNCATE t1;
32485
32486# check TRUNCATE success: 	1
32487# check layout success:    1
32488# End usability test (inc/partition_check.inc)
32489DROP TABLE t1;
32490DROP VIEW  IF EXISTS v1;
32491DROP TABLE IF EXISTS t1;
32492DROP TABLE IF EXISTS t0_aux;
32493DROP TABLE IF EXISTS t0_definition;
32494DROP TABLE IF EXISTS t0_template;
32495