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#  1.3   ALTER column f_int1 and f_int2
44#        f_int1 or (f_int1 and f_int2) used in partitioning function
45#------------------------------------------------------------------------
46#  1.3.1 no PRIMARY KEY or UNIQUE INDEX exists
47DROP TABLE IF EXISTS t1;
48CREATE TABLE t1 (
49f_int1 INTEGER,
50f_int2 INTEGER,
51f_char1 CHAR(20),
52f_char2 CHAR(20),
53f_charbig VARCHAR(1000)
54
55)
56PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
57INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
58SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
59WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
60ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
61INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
62SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
63WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
64# Start usability test (inc/partition_check.inc)
65create_command
66SHOW CREATE TABLE t1;
67Table	Create Table
68t1	CREATE TABLE `t1` (
69  `f_int1` bigint(20) DEFAULT NULL,
70  `f_int2` bigint(20) DEFAULT NULL,
71  `f_char1` char(20) DEFAULT NULL,
72  `f_char2` char(20) DEFAULT NULL,
73  `f_charbig` varchar(1000) DEFAULT NULL
74) ENGINE=InnoDB DEFAULT CHARSET=latin1
75/*!50100 PARTITION BY HASH (f_int1 + f_int2)
76PARTITIONS 2 */
77
78# check prerequisites-1 success:    1
79# check COUNT(*) success:    1
80# check MIN/MAX(f_int1) success:    1
81# check MIN/MAX(f_int2) success:    1
82INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
83SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
84CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
85WHERE f_int1 IN (2,3);
86# check prerequisites-3 success:    1
87DELETE FROM t1 WHERE f_charbig = 'delete me';
88# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
89# check read via f_int1 success: 1
90# check read via f_int2 success: 1
91
92# check multiple-1 success: 	1
93DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
94
95# check multiple-2 success: 	1
96INSERT INTO t1 SELECT * FROM t0_template
97WHERE MOD(f_int1,3) = 0;
98
99# check multiple-3 success: 	1
100UPDATE t1 SET f_int1 = f_int1 + @max_row
101WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
102AND @max_row_div2 + @max_row_div4;
103
104# check multiple-4 success: 	1
105DELETE FROM t1
106WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
107AND @max_row_div2 + @max_row_div4 + @max_row;
108
109# check multiple-5 success: 	1
110SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
111INSERT INTO t1
112SET f_int1 = @cur_value , f_int2 = @cur_value,
113f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
114f_charbig = '#SINGLE#';
115
116# check single-1 success: 	1
117SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
118INSERT INTO t1
119SET f_int1 = @cur_value , f_int2 = @cur_value,
120f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
121f_charbig = '#SINGLE#';
122
123# check single-2 success: 	1
124SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
125SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
126UPDATE t1 SET f_int1 = @cur_value2
127WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
128
129# check single-3 success: 	1
130SET @cur_value1= -1;
131SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
132UPDATE t1 SET f_int1 = @cur_value1
133WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
134
135# check single-4 success: 	1
136SELECT MAX(f_int1) INTO @cur_value FROM t1;
137DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
138
139# check single-5 success: 	1
140DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
141
142# check single-6 success: 	1
143INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
144
145# check single-7 success: 	1
146DELETE FROM t1 WHERE f_charbig = '#2147483647##';
147DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
148INSERT t1 SET f_int1 = 0 , f_int2 = 0,
149f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
150f_charbig = '#NULL#';
151INSERT INTO t1
152SET f_int1 = NULL , f_int2 = -@max_row,
153f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
154f_charbig = '#NULL#';
155# check null success:    1
156
157# check null-1 success: 	1
158UPDATE t1 SET f_int1 = -@max_row
159WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
160AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
161
162# check null-2 success: 	1
163UPDATE t1 SET f_int1 = NULL
164WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
165AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
166
167# check null-3 success: 	1
168DELETE FROM t1
169WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
170AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
171
172# check null-4 success: 	1
173DELETE FROM t1
174WHERE f_int1 = 0 AND f_int2 = 0
175AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
176AND f_charbig = '#NULL#';
177SET AUTOCOMMIT= 0;
178INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
179SELECT f_int1, f_int1, '', '', 'was inserted'
180FROM t0_template source_tab
181WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
182
183# check transactions-1 success: 	1
184COMMIT WORK;
185
186# check transactions-2 success: 	1
187ROLLBACK WORK;
188
189# check transactions-3 success: 	1
190DELETE FROM t1 WHERE f_charbig = 'was inserted';
191COMMIT WORK;
192ROLLBACK WORK;
193
194# check transactions-4 success: 	1
195INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
196SELECT f_int1, f_int1, '', '', 'was inserted'
197FROM t0_template source_tab
198WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
199
200# check transactions-5 success: 	1
201ROLLBACK WORK;
202
203# check transactions-6 success: 	1
204# INFO: Storage engine used for t1 seems to be transactional.
205COMMIT;
206
207# check transactions-7 success: 	1
208DELETE FROM t1 WHERE f_charbig = 'was inserted';
209COMMIT WORK;
210SET @@session.sql_mode = 'traditional';
211Warnings:
212Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
213SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
214INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
215SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
216'', '', 'was inserted' FROM t0_template
217WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
218ERROR 22012: Division by 0
219COMMIT;
220
221# check transactions-8 success: 	1
222# INFO: Storage engine used for t1 seems to be able to revert
223#       changes made by the failing statement.
224SET @@session.sql_mode = '';
225Warnings:
226Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
227SET AUTOCOMMIT= 1;
228DELETE FROM t1 WHERE f_charbig = 'was inserted';
229COMMIT WORK;
230UPDATE t1 SET f_charbig = REPEAT('b', 1000);
231
232# check special-1 success: 	1
233UPDATE t1 SET f_charbig = '';
234
235# check special-2 success: 	1
236UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
237INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
238SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
239WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
240INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
241SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
242'just inserted' FROM t0_template
243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
244CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
245BEGIN
246UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
247f_charbig = 'updated by trigger'
248      WHERE f_int1 = new.f_int1;
249END|
250INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
251SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
253
254# check trigger-1 success: 	1
255DROP TRIGGER trg_1;
256UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
257f_int2 = CAST(f_char1 AS SIGNED INT),
258f_charbig = 'just inserted'
259   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
260DELETE FROM t0_aux
261WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
262INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
263SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
264'just inserted' FROM t0_template
265WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
266CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
267BEGIN
268UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
269f_charbig = 'updated by trigger'
270      WHERE f_int1 = new.f_int1;
271END|
272INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
273SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
274WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
275
276# check trigger-2 success: 	1
277DROP TRIGGER trg_1;
278UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
279f_int2 = CAST(f_char1 AS SIGNED INT),
280f_charbig = 'just inserted'
281   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
282DELETE FROM t0_aux
283WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
284INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
285SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
286'just inserted' FROM t0_template
287WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
288CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
289BEGIN
290UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
291f_charbig = 'updated by trigger'
292      WHERE f_int1 = new.f_int1;
293END|
294UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
295WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
296
297# check trigger-3 success: 	1
298DROP TRIGGER trg_1;
299UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
300f_int2 = CAST(f_char1 AS SIGNED INT),
301f_charbig = 'just inserted'
302   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
303DELETE FROM t0_aux
304WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
305INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
306SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
307'just inserted' FROM t0_template
308WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
309CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
310BEGIN
311UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
312f_charbig = 'updated by trigger'
313      WHERE f_int1 = - old.f_int1;
314END|
315UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
316WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
317
318# check trigger-4 success: 	1
319DROP TRIGGER trg_1;
320UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
321f_int2 = CAST(f_char1 AS SIGNED INT),
322f_charbig = 'just inserted'
323   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
324DELETE FROM t0_aux
325WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
326INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
327SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
328'just inserted' FROM t0_template
329WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
330CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
331BEGIN
332UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
333f_charbig = 'updated by trigger'
334      WHERE f_int1 = new.f_int1;
335END|
336UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
337WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
338
339# check trigger-5 success: 	1
340DROP TRIGGER trg_1;
341UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
342f_int2 = CAST(f_char1 AS SIGNED INT),
343f_charbig = 'just inserted'
344   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
345DELETE FROM t0_aux
346WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
347INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
348SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
349'just inserted' FROM t0_template
350WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
351CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
352BEGIN
353UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
354f_charbig = 'updated by trigger'
355      WHERE f_int1 = - old.f_int1;
356END|
357UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
358WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
359
360# check trigger-6 success: 	1
361DROP TRIGGER trg_1;
362UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
363f_int2 = CAST(f_char1 AS SIGNED INT),
364f_charbig = 'just inserted'
365   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
366DELETE FROM t0_aux
367WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
368INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
369SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
370'just inserted' FROM t0_template
371WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
372CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
373BEGIN
374UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
375f_charbig = 'updated by trigger'
376      WHERE f_int1 = - old.f_int1;
377END|
378DELETE FROM t0_aux
379WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
380
381# check trigger-7 success: 	1
382DROP TRIGGER trg_1;
383UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
384f_int2 = CAST(f_char1 AS SIGNED INT),
385f_charbig = 'just inserted'
386   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
387DELETE FROM t0_aux
388WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
389INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
390SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
391'just inserted' FROM t0_template
392WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
393CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
394BEGIN
395UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
396f_charbig = 'updated by trigger'
397      WHERE f_int1 = - old.f_int1;
398END|
399DELETE FROM t0_aux
400WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
401
402# check trigger-8 success: 	1
403DROP TRIGGER trg_1;
404UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
405f_int2 = CAST(f_char1 AS SIGNED INT),
406f_charbig = 'just inserted'
407   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
408DELETE FROM t0_aux
409WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
410DELETE FROM t1
411WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
412CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
413BEGIN
414SET new.f_int1 = old.f_int1 + @max_row,
415new.f_int2 = old.f_int2 - @max_row,
416new.f_charbig = '####updated per update trigger####';
417END|
418UPDATE t1
419SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
420f_charbig = '####updated per update statement itself####';
421
422# check trigger-9 success: 	1
423DROP TRIGGER trg_2;
424UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
425f_int2 = CAST(f_char1 AS SIGNED INT),
426f_charbig = CONCAT('===',f_char1,'===');
427CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
428BEGIN
429SET new.f_int1 = new.f_int1 + @max_row,
430new.f_int2 = new.f_int2 - @max_row,
431new.f_charbig = '####updated per update trigger####';
432END|
433UPDATE t1
434SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
435f_charbig = '####updated per update statement itself####';
436
437# check trigger-10 success: 	1
438DROP TRIGGER trg_2;
439UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
440f_int2 = CAST(f_char1 AS SIGNED INT),
441f_charbig = CONCAT('===',f_char1,'===');
442CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
443BEGIN
444SET new.f_int1 = @my_max1 + @counter,
445new.f_int2 = @my_min2 - @counter,
446new.f_charbig = '####updated per insert trigger####';
447SET @counter = @counter + 1;
448END|
449SET @counter = 1;
450SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
451INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
452SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
453CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
454WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
455ORDER BY f_int1;
456DROP TRIGGER trg_3;
457
458# check trigger-11 success: 	1
459DELETE FROM t1
460WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
461AND f_int2 <> CAST(f_char1 AS SIGNED INT)
462AND f_charbig = '####updated per insert trigger####';
463CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
464BEGIN
465SET new.f_int1 = @my_max1 + @counter,
466new.f_int2 = @my_min2 - @counter,
467new.f_charbig = '####updated per insert trigger####';
468SET @counter = @counter + 1;
469END|
470SET @counter = 1;
471SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
472INSERT INTO t1 (f_char1, f_char2, f_charbig)
473SELECT CAST(f_int1 AS CHAR),
474CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
475WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
476ORDER BY f_int1;
477DROP TRIGGER trg_3;
478
479# check trigger-12 success: 	1
480DELETE FROM t1
481WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
482AND f_int2 <> CAST(f_char1 AS SIGNED INT)
483AND f_charbig = '####updated per insert trigger####';
484ANALYZE  TABLE t1;
485Table	Op	Msg_type	Msg_text
486test.t1	analyze	status	OK
487CHECK    TABLE t1 EXTENDED;
488Table	Op	Msg_type	Msg_text
489test.t1	check	status	OK
490CHECKSUM TABLE t1 EXTENDED;
491Table	Checksum
492test.t1	<some_value>
493OPTIMIZE TABLE t1;
494Table	Op	Msg_type	Msg_text
495test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
496test.t1	optimize	status	OK
497# check layout success:    1
498REPAIR   TABLE t1 EXTENDED;
499Table	Op	Msg_type	Msg_text
500test.t1	repair	status	OK
501# check layout success:    1
502TRUNCATE t1;
503
504# check TRUNCATE success: 	1
505# check layout success:    1
506# End usability test (inc/partition_check.inc)
507DROP TABLE t1;
508CREATE TABLE t1 (
509f_int1 INTEGER,
510f_int2 INTEGER,
511f_char1 CHAR(20),
512f_char2 CHAR(20),
513f_charbig VARCHAR(1000)
514
515)
516PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
517INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
518SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
519WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
520ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
521INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
522SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
523WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
524# Start usability test (inc/partition_check.inc)
525create_command
526SHOW CREATE TABLE t1;
527Table	Create Table
528t1	CREATE TABLE `t1` (
529  `f_int1` bigint(20) DEFAULT NULL,
530  `f_int2` bigint(20) DEFAULT NULL,
531  `f_char1` char(20) DEFAULT NULL,
532  `f_char2` char(20) DEFAULT NULL,
533  `f_charbig` varchar(1000) DEFAULT NULL
534) ENGINE=InnoDB DEFAULT CHARSET=latin1
535/*!50100 PARTITION BY KEY (f_int1,f_int2)
536PARTITIONS 5 */
537
538# check prerequisites-1 success:    1
539# check COUNT(*) success:    1
540# check MIN/MAX(f_int1) success:    1
541# check MIN/MAX(f_int2) success:    1
542INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
543SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
544CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
545WHERE f_int1 IN (2,3);
546# check prerequisites-3 success:    1
547DELETE FROM t1 WHERE f_charbig = 'delete me';
548# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
549# check read via f_int1 success: 1
550# check read via f_int2 success: 1
551
552# check multiple-1 success: 	1
553DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
554
555# check multiple-2 success: 	1
556INSERT INTO t1 SELECT * FROM t0_template
557WHERE MOD(f_int1,3) = 0;
558
559# check multiple-3 success: 	1
560UPDATE t1 SET f_int1 = f_int1 + @max_row
561WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
562AND @max_row_div2 + @max_row_div4;
563
564# check multiple-4 success: 	1
565DELETE FROM t1
566WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
567AND @max_row_div2 + @max_row_div4 + @max_row;
568
569# check multiple-5 success: 	1
570SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
571INSERT INTO t1
572SET f_int1 = @cur_value , f_int2 = @cur_value,
573f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
574f_charbig = '#SINGLE#';
575
576# check single-1 success: 	1
577SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
578INSERT INTO t1
579SET f_int1 = @cur_value , f_int2 = @cur_value,
580f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
581f_charbig = '#SINGLE#';
582
583# check single-2 success: 	1
584SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
585SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
586UPDATE t1 SET f_int1 = @cur_value2
587WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
588
589# check single-3 success: 	1
590SET @cur_value1= -1;
591SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
592UPDATE t1 SET f_int1 = @cur_value1
593WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
594
595# check single-4 success: 	1
596SELECT MAX(f_int1) INTO @cur_value FROM t1;
597DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
598
599# check single-5 success: 	1
600DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
601
602# check single-6 success: 	1
603INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
604
605# check single-7 success: 	1
606DELETE FROM t1 WHERE f_charbig = '#2147483647##';
607DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
608INSERT t1 SET f_int1 = 0 , f_int2 = 0,
609f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
610f_charbig = '#NULL#';
611INSERT INTO t1
612SET f_int1 = NULL , f_int2 = -@max_row,
613f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
614f_charbig = '#NULL#';
615# check null success:    1
616
617# check null-1 success: 	1
618UPDATE t1 SET f_int1 = -@max_row
619WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
620AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
621
622# check null-2 success: 	1
623UPDATE t1 SET f_int1 = NULL
624WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
625AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
626
627# check null-3 success: 	1
628DELETE FROM t1
629WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
630AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
631
632# check null-4 success: 	1
633DELETE FROM t1
634WHERE f_int1 = 0 AND f_int2 = 0
635AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
636AND f_charbig = '#NULL#';
637SET AUTOCOMMIT= 0;
638INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
639SELECT f_int1, f_int1, '', '', 'was inserted'
640FROM t0_template source_tab
641WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
642
643# check transactions-1 success: 	1
644COMMIT WORK;
645
646# check transactions-2 success: 	1
647ROLLBACK WORK;
648
649# check transactions-3 success: 	1
650DELETE FROM t1 WHERE f_charbig = 'was inserted';
651COMMIT WORK;
652ROLLBACK WORK;
653
654# check transactions-4 success: 	1
655INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
656SELECT f_int1, f_int1, '', '', 'was inserted'
657FROM t0_template source_tab
658WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
659
660# check transactions-5 success: 	1
661ROLLBACK WORK;
662
663# check transactions-6 success: 	1
664# INFO: Storage engine used for t1 seems to be transactional.
665COMMIT;
666
667# check transactions-7 success: 	1
668DELETE FROM t1 WHERE f_charbig = 'was inserted';
669COMMIT WORK;
670SET @@session.sql_mode = 'traditional';
671Warnings:
672Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
673SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
674INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
675SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
676'', '', 'was inserted' FROM t0_template
677WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
678ERROR 22012: Division by 0
679COMMIT;
680
681# check transactions-8 success: 	1
682# INFO: Storage engine used for t1 seems to be able to revert
683#       changes made by the failing statement.
684SET @@session.sql_mode = '';
685Warnings:
686Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
687SET AUTOCOMMIT= 1;
688DELETE FROM t1 WHERE f_charbig = 'was inserted';
689COMMIT WORK;
690UPDATE t1 SET f_charbig = REPEAT('b', 1000);
691
692# check special-1 success: 	1
693UPDATE t1 SET f_charbig = '';
694
695# check special-2 success: 	1
696UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
697INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
698SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
702'just inserted' FROM t0_template
703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
704CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
705BEGIN
706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
707f_charbig = 'updated by trigger'
708      WHERE f_int1 = new.f_int1;
709END|
710INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
711SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
712WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
713
714# check trigger-1 success: 	1
715DROP TRIGGER trg_1;
716UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
717f_int2 = CAST(f_char1 AS SIGNED INT),
718f_charbig = 'just inserted'
719   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
720DELETE FROM t0_aux
721WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
722INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
723SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
724'just inserted' FROM t0_template
725WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
726CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
727BEGIN
728UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
729f_charbig = 'updated by trigger'
730      WHERE f_int1 = new.f_int1;
731END|
732INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
733SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
734WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
735
736# check trigger-2 success: 	1
737DROP TRIGGER trg_1;
738UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
739f_int2 = CAST(f_char1 AS SIGNED INT),
740f_charbig = 'just inserted'
741   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
742DELETE FROM t0_aux
743WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
744INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
745SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
746'just inserted' FROM t0_template
747WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
748CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
749BEGIN
750UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
751f_charbig = 'updated by trigger'
752      WHERE f_int1 = new.f_int1;
753END|
754UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
755WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
756
757# check trigger-3 success: 	1
758DROP TRIGGER trg_1;
759UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
760f_int2 = CAST(f_char1 AS SIGNED INT),
761f_charbig = 'just inserted'
762   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
763DELETE FROM t0_aux
764WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
765INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
766SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
767'just inserted' FROM t0_template
768WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
769CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
770BEGIN
771UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
772f_charbig = 'updated by trigger'
773      WHERE f_int1 = - old.f_int1;
774END|
775UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
776WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
777
778# check trigger-4 success: 	1
779DROP TRIGGER trg_1;
780UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
781f_int2 = CAST(f_char1 AS SIGNED INT),
782f_charbig = 'just inserted'
783   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
784DELETE FROM t0_aux
785WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
786INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
787SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
788'just inserted' FROM t0_template
789WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
790CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
791BEGIN
792UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
793f_charbig = 'updated by trigger'
794      WHERE f_int1 = new.f_int1;
795END|
796UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
797WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
798
799# check trigger-5 success: 	1
800DROP TRIGGER trg_1;
801UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
802f_int2 = CAST(f_char1 AS SIGNED INT),
803f_charbig = 'just inserted'
804   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
805DELETE FROM t0_aux
806WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
807INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
808SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
809'just inserted' FROM t0_template
810WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
811CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
812BEGIN
813UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
814f_charbig = 'updated by trigger'
815      WHERE f_int1 = - old.f_int1;
816END|
817UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
818WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
819
820# check trigger-6 success: 	1
821DROP TRIGGER trg_1;
822UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
823f_int2 = CAST(f_char1 AS SIGNED INT),
824f_charbig = 'just inserted'
825   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
826DELETE FROM t0_aux
827WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
828INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
829SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
830'just inserted' FROM t0_template
831WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
832CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
833BEGIN
834UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
835f_charbig = 'updated by trigger'
836      WHERE f_int1 = - old.f_int1;
837END|
838DELETE FROM t0_aux
839WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
840
841# check trigger-7 success: 	1
842DROP TRIGGER trg_1;
843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
844f_int2 = CAST(f_char1 AS SIGNED INT),
845f_charbig = 'just inserted'
846   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
847DELETE FROM t0_aux
848WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
850SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
851'just inserted' FROM t0_template
852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
853CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
854BEGIN
855UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
856f_charbig = 'updated by trigger'
857      WHERE f_int1 = - old.f_int1;
858END|
859DELETE FROM t0_aux
860WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
861
862# check trigger-8 success: 	1
863DROP TRIGGER trg_1;
864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
865f_int2 = CAST(f_char1 AS SIGNED INT),
866f_charbig = 'just inserted'
867   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
868DELETE FROM t0_aux
869WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
870DELETE FROM t1
871WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
872CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
873BEGIN
874SET new.f_int1 = old.f_int1 + @max_row,
875new.f_int2 = old.f_int2 - @max_row,
876new.f_charbig = '####updated per update trigger####';
877END|
878UPDATE t1
879SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
880f_charbig = '####updated per update statement itself####';
881
882# check trigger-9 success: 	1
883DROP TRIGGER trg_2;
884UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
885f_int2 = CAST(f_char1 AS SIGNED INT),
886f_charbig = CONCAT('===',f_char1,'===');
887CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
888BEGIN
889SET new.f_int1 = new.f_int1 + @max_row,
890new.f_int2 = new.f_int2 - @max_row,
891new.f_charbig = '####updated per update trigger####';
892END|
893UPDATE t1
894SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
895f_charbig = '####updated per update statement itself####';
896
897# check trigger-10 success: 	1
898DROP TRIGGER trg_2;
899UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
900f_int2 = CAST(f_char1 AS SIGNED INT),
901f_charbig = CONCAT('===',f_char1,'===');
902CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
903BEGIN
904SET new.f_int1 = @my_max1 + @counter,
905new.f_int2 = @my_min2 - @counter,
906new.f_charbig = '####updated per insert trigger####';
907SET @counter = @counter + 1;
908END|
909SET @counter = 1;
910SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
913CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
914WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
915ORDER BY f_int1;
916DROP TRIGGER trg_3;
917
918# check trigger-11 success: 	1
919DELETE FROM t1
920WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
921AND f_int2 <> CAST(f_char1 AS SIGNED INT)
922AND f_charbig = '####updated per insert trigger####';
923CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
924BEGIN
925SET new.f_int1 = @my_max1 + @counter,
926new.f_int2 = @my_min2 - @counter,
927new.f_charbig = '####updated per insert trigger####';
928SET @counter = @counter + 1;
929END|
930SET @counter = 1;
931SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
932INSERT INTO t1 (f_char1, f_char2, f_charbig)
933SELECT CAST(f_int1 AS CHAR),
934CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
935WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
936ORDER BY f_int1;
937DROP TRIGGER trg_3;
938
939# check trigger-12 success: 	1
940DELETE FROM t1
941WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
942AND f_int2 <> CAST(f_char1 AS SIGNED INT)
943AND f_charbig = '####updated per insert trigger####';
944ANALYZE  TABLE t1;
945Table	Op	Msg_type	Msg_text
946test.t1	analyze	status	OK
947CHECK    TABLE t1 EXTENDED;
948Table	Op	Msg_type	Msg_text
949test.t1	check	status	OK
950CHECKSUM TABLE t1 EXTENDED;
951Table	Checksum
952test.t1	<some_value>
953OPTIMIZE TABLE t1;
954Table	Op	Msg_type	Msg_text
955test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
956test.t1	optimize	status	OK
957# check layout success:    1
958REPAIR   TABLE t1 EXTENDED;
959Table	Op	Msg_type	Msg_text
960test.t1	repair	status	OK
961# check layout success:    1
962TRUNCATE t1;
963
964# check TRUNCATE success: 	1
965# check layout success:    1
966# End usability test (inc/partition_check.inc)
967DROP TABLE t1;
968CREATE TABLE t1 (
969f_int1 INTEGER,
970f_int2 INTEGER,
971f_char1 CHAR(20),
972f_char2 CHAR(20),
973f_charbig VARCHAR(1000)
974
975)
976PARTITION BY LIST(MOD(f_int1 + f_int2,4))
977(PARTITION part_3 VALUES IN (-3),
978PARTITION part_2 VALUES IN (-2),
979PARTITION part_1 VALUES IN (-1),
980PARTITION part_N VALUES IN (NULL),
981PARTITION part0 VALUES IN (0),
982PARTITION part1 VALUES IN (1),
983PARTITION part2 VALUES IN (2),
984PARTITION part3 VALUES IN (3));
985INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
986SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
987WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
988ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
989INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
990SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
991WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
992# Start usability test (inc/partition_check.inc)
993create_command
994SHOW CREATE TABLE t1;
995Table	Create Table
996t1	CREATE TABLE `t1` (
997  `f_int1` bigint(20) DEFAULT NULL,
998  `f_int2` bigint(20) DEFAULT NULL,
999  `f_char1` char(20) DEFAULT NULL,
1000  `f_char2` char(20) DEFAULT NULL,
1001  `f_charbig` varchar(1000) DEFAULT NULL
1002) ENGINE=InnoDB DEFAULT CHARSET=latin1
1003/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
1004(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
1005 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
1006 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
1007 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
1008 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
1009 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
1010 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
1011 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
1012
1013# check prerequisites-1 success:    1
1014# check COUNT(*) success:    1
1015# check MIN/MAX(f_int1) success:    1
1016# check MIN/MAX(f_int2) success:    1
1017INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1018SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1019CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1020WHERE f_int1 IN (2,3);
1021# check prerequisites-3 success:    1
1022DELETE FROM t1 WHERE f_charbig = 'delete me';
1023# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1024# check read via f_int1 success: 1
1025# check read via f_int2 success: 1
1026
1027# check multiple-1 success: 	1
1028DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1029
1030# check multiple-2 success: 	1
1031INSERT INTO t1 SELECT * FROM t0_template
1032WHERE MOD(f_int1,3) = 0;
1033
1034# check multiple-3 success: 	1
1035UPDATE t1 SET f_int1 = f_int1 + @max_row
1036WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1037AND @max_row_div2 + @max_row_div4;
1038
1039# check multiple-4 success: 	1
1040DELETE FROM t1
1041WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1042AND @max_row_div2 + @max_row_div4 + @max_row;
1043
1044# check multiple-5 success: 	1
1045SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1046INSERT INTO t1
1047SET f_int1 = @cur_value , f_int2 = @cur_value,
1048f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1049f_charbig = '#SINGLE#';
1050
1051# check single-1 success: 	1
1052SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1053INSERT INTO t1
1054SET f_int1 = @cur_value , f_int2 = @cur_value,
1055f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1056f_charbig = '#SINGLE#';
1057
1058# check single-2 success: 	1
1059SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1060SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1061UPDATE t1 SET f_int1 = @cur_value2
1062WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1063
1064# check single-3 success: 	1
1065SET @cur_value1= -1;
1066SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1067UPDATE t1 SET f_int1 = @cur_value1
1068WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1069
1070# check single-4 success: 	1
1071SELECT MAX(f_int1) INTO @cur_value FROM t1;
1072DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1073
1074# check single-5 success: 	1
1075DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1076
1077# check single-6 success: 	1
1078INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1079
1080# check single-7 success: 	1
1081DELETE FROM t1 WHERE f_charbig = '#2147483647##';
1082DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1083INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1084f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1085f_charbig = '#NULL#';
1086INSERT INTO t1
1087SET f_int1 = NULL , f_int2 = -@max_row,
1088f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1089f_charbig = '#NULL#';
1090# check null success:    1
1091
1092# check null-1 success: 	1
1093UPDATE t1 SET f_int1 = -@max_row
1094WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1095AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1096
1097# check null-2 success: 	1
1098UPDATE t1 SET f_int1 = NULL
1099WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1100AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1101
1102# check null-3 success: 	1
1103DELETE FROM t1
1104WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1105AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1106
1107# check null-4 success: 	1
1108DELETE FROM t1
1109WHERE f_int1 = 0 AND f_int2 = 0
1110AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1111AND f_charbig = '#NULL#';
1112SET AUTOCOMMIT= 0;
1113INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1114SELECT f_int1, f_int1, '', '', 'was inserted'
1115FROM t0_template source_tab
1116WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1117
1118# check transactions-1 success: 	1
1119COMMIT WORK;
1120
1121# check transactions-2 success: 	1
1122ROLLBACK WORK;
1123
1124# check transactions-3 success: 	1
1125DELETE FROM t1 WHERE f_charbig = 'was inserted';
1126COMMIT WORK;
1127ROLLBACK WORK;
1128
1129# check transactions-4 success: 	1
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-5 success: 	1
1136ROLLBACK WORK;
1137
1138# check transactions-6 success: 	1
1139# INFO: Storage engine used for t1 seems to be transactional.
1140COMMIT;
1141
1142# check transactions-7 success: 	1
1143DELETE FROM t1 WHERE f_charbig = 'was inserted';
1144COMMIT WORK;
1145SET @@session.sql_mode = 'traditional';
1146Warnings:
1147Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1148SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1149INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1150SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1151'', '', 'was inserted' FROM t0_template
1152WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1153ERROR 22012: Division by 0
1154COMMIT;
1155
1156# check transactions-8 success: 	1
1157# INFO: Storage engine used for t1 seems to be able to revert
1158#       changes made by the failing statement.
1159SET @@session.sql_mode = '';
1160Warnings:
1161Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1162SET AUTOCOMMIT= 1;
1163DELETE FROM t1 WHERE f_charbig = 'was inserted';
1164COMMIT WORK;
1165UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1166
1167# check special-1 success: 	1
1168UPDATE t1 SET f_charbig = '';
1169
1170# check special-2 success: 	1
1171UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1172INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1173SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1174WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1175INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1176SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1177'just inserted' FROM t0_template
1178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1179CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1180BEGIN
1181UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1182f_charbig = 'updated by trigger'
1183      WHERE f_int1 = new.f_int1;
1184END|
1185INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1186SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1188
1189# check trigger-1 success: 	1
1190DROP TRIGGER trg_1;
1191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1192f_int2 = CAST(f_char1 AS SIGNED INT),
1193f_charbig = 'just inserted'
1194   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1195DELETE FROM t0_aux
1196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1199'just inserted' FROM t0_template
1200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1201CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1202BEGIN
1203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1204f_charbig = 'updated by trigger'
1205      WHERE f_int1 = new.f_int1;
1206END|
1207INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1208SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1209WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1210
1211# check trigger-2 success: 	1
1212DROP TRIGGER trg_1;
1213UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1214f_int2 = CAST(f_char1 AS SIGNED INT),
1215f_charbig = 'just inserted'
1216   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1217DELETE FROM t0_aux
1218WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1219INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1220SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1221'just inserted' FROM t0_template
1222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1223CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1224BEGIN
1225UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1226f_charbig = 'updated by trigger'
1227      WHERE f_int1 = new.f_int1;
1228END|
1229UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1230WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1231
1232# check trigger-3 success: 	1
1233DROP TRIGGER trg_1;
1234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1235f_int2 = CAST(f_char1 AS SIGNED INT),
1236f_charbig = 'just inserted'
1237   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1238DELETE FROM t0_aux
1239WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1240INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1241SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1242'just inserted' FROM t0_template
1243WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1244CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1245BEGIN
1246UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1247f_charbig = 'updated by trigger'
1248      WHERE f_int1 = - old.f_int1;
1249END|
1250UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1251WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1252
1253# check trigger-4 success: 	1
1254DROP TRIGGER trg_1;
1255UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1256f_int2 = CAST(f_char1 AS SIGNED INT),
1257f_charbig = 'just inserted'
1258   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1259DELETE FROM t0_aux
1260WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1261INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1262SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1263'just inserted' FROM t0_template
1264WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1265CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1266BEGIN
1267UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1268f_charbig = 'updated by trigger'
1269      WHERE f_int1 = new.f_int1;
1270END|
1271UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1272WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1273
1274# check trigger-5 success: 	1
1275DROP TRIGGER trg_1;
1276UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1277f_int2 = CAST(f_char1 AS SIGNED INT),
1278f_charbig = 'just inserted'
1279   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1280DELETE FROM t0_aux
1281WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1282INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1283SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1284'just inserted' FROM t0_template
1285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1286CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
1287BEGIN
1288UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1289f_charbig = 'updated by trigger'
1290      WHERE f_int1 = - old.f_int1;
1291END|
1292UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1293WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1294
1295# check trigger-6 success: 	1
1296DROP TRIGGER trg_1;
1297UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1298f_int2 = CAST(f_char1 AS SIGNED INT),
1299f_charbig = 'just inserted'
1300   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1301DELETE FROM t0_aux
1302WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1303INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1304SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1305'just inserted' FROM t0_template
1306WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1307CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
1308BEGIN
1309UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1310f_charbig = 'updated by trigger'
1311      WHERE f_int1 = - old.f_int1;
1312END|
1313DELETE FROM t0_aux
1314WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1315
1316# check trigger-7 success: 	1
1317DROP TRIGGER trg_1;
1318UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1319f_int2 = CAST(f_char1 AS SIGNED INT),
1320f_charbig = 'just inserted'
1321   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1322DELETE FROM t0_aux
1323WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1324INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1325SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1326'just inserted' FROM t0_template
1327WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1328CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
1329BEGIN
1330UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1331f_charbig = 'updated by trigger'
1332      WHERE f_int1 = - old.f_int1;
1333END|
1334DELETE FROM t0_aux
1335WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1336
1337# check trigger-8 success: 	1
1338DROP TRIGGER trg_1;
1339UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1340f_int2 = CAST(f_char1 AS SIGNED INT),
1341f_charbig = 'just inserted'
1342   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1343DELETE FROM t0_aux
1344WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1345DELETE FROM t1
1346WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1347CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1348BEGIN
1349SET new.f_int1 = old.f_int1 + @max_row,
1350new.f_int2 = old.f_int2 - @max_row,
1351new.f_charbig = '####updated per update trigger####';
1352END|
1353UPDATE t1
1354SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1355f_charbig = '####updated per update statement itself####';
1356
1357# check trigger-9 success: 	1
1358DROP TRIGGER trg_2;
1359UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1360f_int2 = CAST(f_char1 AS SIGNED INT),
1361f_charbig = CONCAT('===',f_char1,'===');
1362CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1363BEGIN
1364SET new.f_int1 = new.f_int1 + @max_row,
1365new.f_int2 = new.f_int2 - @max_row,
1366new.f_charbig = '####updated per update trigger####';
1367END|
1368UPDATE t1
1369SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1370f_charbig = '####updated per update statement itself####';
1371
1372# check trigger-10 success: 	1
1373DROP TRIGGER trg_2;
1374UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1375f_int2 = CAST(f_char1 AS SIGNED INT),
1376f_charbig = CONCAT('===',f_char1,'===');
1377CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1378BEGIN
1379SET new.f_int1 = @my_max1 + @counter,
1380new.f_int2 = @my_min2 - @counter,
1381new.f_charbig = '####updated per insert trigger####';
1382SET @counter = @counter + 1;
1383END|
1384SET @counter = 1;
1385SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1386INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1387SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1388CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1389WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1390ORDER BY f_int1;
1391DROP TRIGGER trg_3;
1392
1393# check trigger-11 success: 	1
1394DELETE FROM t1
1395WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1396AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1397AND f_charbig = '####updated per insert trigger####';
1398CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1399BEGIN
1400SET new.f_int1 = @my_max1 + @counter,
1401new.f_int2 = @my_min2 - @counter,
1402new.f_charbig = '####updated per insert trigger####';
1403SET @counter = @counter + 1;
1404END|
1405SET @counter = 1;
1406SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1407INSERT INTO t1 (f_char1, f_char2, f_charbig)
1408SELECT CAST(f_int1 AS CHAR),
1409CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1410WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1411ORDER BY f_int1;
1412DROP TRIGGER trg_3;
1413
1414# check trigger-12 success: 	1
1415DELETE FROM t1
1416WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1417AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1418AND f_charbig = '####updated per insert trigger####';
1419ANALYZE  TABLE t1;
1420Table	Op	Msg_type	Msg_text
1421test.t1	analyze	status	OK
1422CHECK    TABLE t1 EXTENDED;
1423Table	Op	Msg_type	Msg_text
1424test.t1	check	status	OK
1425CHECKSUM TABLE t1 EXTENDED;
1426Table	Checksum
1427test.t1	<some_value>
1428OPTIMIZE TABLE t1;
1429Table	Op	Msg_type	Msg_text
1430test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1431test.t1	optimize	status	OK
1432# check layout success:    1
1433REPAIR   TABLE t1 EXTENDED;
1434Table	Op	Msg_type	Msg_text
1435test.t1	repair	status	OK
1436# check layout success:    1
1437TRUNCATE t1;
1438
1439# check TRUNCATE success: 	1
1440# check layout success:    1
1441# End usability test (inc/partition_check.inc)
1442DROP TABLE t1;
1443CREATE TABLE t1 (
1444f_int1 INTEGER,
1445f_int2 INTEGER,
1446f_char1 CHAR(20),
1447f_char2 CHAR(20),
1448f_charbig VARCHAR(1000)
1449
1450)
1451PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
1452(PARTITION parta VALUES LESS THAN (0),
1453PARTITION partb VALUES LESS THAN (5),
1454PARTITION partc VALUES LESS THAN (10),
1455PARTITION partd VALUES LESS THAN (10 + 5),
1456PARTITION parte VALUES LESS THAN (20),
1457PARTITION partf VALUES LESS THAN (2147483646));
1458INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1459SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1460WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1461ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
1462INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1463SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1464WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1465# Start usability test (inc/partition_check.inc)
1466create_command
1467SHOW CREATE TABLE t1;
1468Table	Create Table
1469t1	CREATE TABLE `t1` (
1470  `f_int1` bigint(20) DEFAULT NULL,
1471  `f_int2` bigint(20) DEFAULT NULL,
1472  `f_char1` char(20) DEFAULT NULL,
1473  `f_char2` char(20) DEFAULT NULL,
1474  `f_charbig` varchar(1000) DEFAULT NULL
1475) ENGINE=InnoDB DEFAULT CHARSET=latin1
1476/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
1477(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1478 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1479 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1480 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
1481 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
1482 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1483
1484# check prerequisites-1 success:    1
1485# check COUNT(*) success:    1
1486# check MIN/MAX(f_int1) success:    1
1487# check MIN/MAX(f_int2) success:    1
1488INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1489SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1490CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1491WHERE f_int1 IN (2,3);
1492# check prerequisites-3 success:    1
1493DELETE FROM t1 WHERE f_charbig = 'delete me';
1494# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1495# check read via f_int1 success: 1
1496# check read via f_int2 success: 1
1497
1498# check multiple-1 success: 	1
1499DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1500
1501# check multiple-2 success: 	1
1502INSERT INTO t1 SELECT * FROM t0_template
1503WHERE MOD(f_int1,3) = 0;
1504
1505# check multiple-3 success: 	1
1506UPDATE t1 SET f_int1 = f_int1 + @max_row
1507WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1508AND @max_row_div2 + @max_row_div4;
1509
1510# check multiple-4 success: 	1
1511DELETE FROM t1
1512WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1513AND @max_row_div2 + @max_row_div4 + @max_row;
1514
1515# check multiple-5 success: 	1
1516SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1517INSERT INTO t1
1518SET f_int1 = @cur_value , f_int2 = @cur_value,
1519f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1520f_charbig = '#SINGLE#';
1521
1522# check single-1 success: 	1
1523SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1524INSERT INTO t1
1525SET f_int1 = @cur_value , f_int2 = @cur_value,
1526f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1527f_charbig = '#SINGLE#';
1528
1529# check single-2 success: 	1
1530SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1531SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1532UPDATE t1 SET f_int1 = @cur_value2
1533WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
1534
1535# check single-3 success: 	1
1536SET @cur_value1= -1;
1537SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
1538UPDATE t1 SET f_int1 = @cur_value1
1539WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
1540
1541# check single-4 success: 	1
1542SELECT MAX(f_int1) INTO @cur_value FROM t1;
1543DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
1544
1545# check single-5 success: 	1
1546DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
1547
1548# check single-6 success: 	1
1549INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
1550ERROR HY000: Table has no partition for value 2147483647
1551DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
1552INSERT t1 SET f_int1 = 0 , f_int2 = 0,
1553f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
1554f_charbig = '#NULL#';
1555INSERT INTO t1
1556SET f_int1 = NULL , f_int2 = -@max_row,
1557f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
1558f_charbig = '#NULL#';
1559# check null success:    1
1560
1561# check null-1 success: 	1
1562UPDATE t1 SET f_int1 = -@max_row
1563WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1564AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1565
1566# check null-2 success: 	1
1567UPDATE t1 SET f_int1 = NULL
1568WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1569AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1570
1571# check null-3 success: 	1
1572DELETE FROM t1
1573WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
1574AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
1575
1576# check null-4 success: 	1
1577DELETE FROM t1
1578WHERE f_int1 = 0 AND f_int2 = 0
1579AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
1580AND f_charbig = '#NULL#';
1581SET AUTOCOMMIT= 0;
1582INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1583SELECT f_int1, f_int1, '', '', 'was inserted'
1584FROM t0_template source_tab
1585WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1586
1587# check transactions-1 success: 	1
1588COMMIT WORK;
1589
1590# check transactions-2 success: 	1
1591ROLLBACK WORK;
1592
1593# check transactions-3 success: 	1
1594DELETE FROM t1 WHERE f_charbig = 'was inserted';
1595COMMIT WORK;
1596ROLLBACK WORK;
1597
1598# check transactions-4 success: 	1
1599INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1600SELECT f_int1, f_int1, '', '', 'was inserted'
1601FROM t0_template source_tab
1602WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1603
1604# check transactions-5 success: 	1
1605ROLLBACK WORK;
1606
1607# check transactions-6 success: 	1
1608# INFO: Storage engine used for t1 seems to be transactional.
1609COMMIT;
1610
1611# check transactions-7 success: 	1
1612DELETE FROM t1 WHERE f_charbig = 'was inserted';
1613COMMIT WORK;
1614SET @@session.sql_mode = 'traditional';
1615Warnings:
1616Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1617SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
1618INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1619SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
1620'', '', 'was inserted' FROM t0_template
1621WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
1622ERROR 22012: Division by 0
1623COMMIT;
1624
1625# check transactions-8 success: 	1
1626# INFO: Storage engine used for t1 seems to be able to revert
1627#       changes made by the failing statement.
1628SET @@session.sql_mode = '';
1629Warnings:
1630Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
1631SET AUTOCOMMIT= 1;
1632DELETE FROM t1 WHERE f_charbig = 'was inserted';
1633COMMIT WORK;
1634UPDATE t1 SET f_charbig = REPEAT('b', 1000);
1635
1636# check special-1 success: 	1
1637UPDATE t1 SET f_charbig = '';
1638
1639# check special-2 success: 	1
1640UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
1641INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1642SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
1643WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1646'just inserted' FROM t0_template
1647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1648CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
1649BEGIN
1650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1651f_charbig = 'updated by trigger'
1652      WHERE f_int1 = new.f_int1;
1653END|
1654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1655SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1656WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1657
1658# check trigger-1 success: 	1
1659DROP TRIGGER trg_1;
1660UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1661f_int2 = CAST(f_char1 AS SIGNED INT),
1662f_charbig = 'just inserted'
1663   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1664DELETE FROM t0_aux
1665WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1667SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1668'just inserted' FROM t0_template
1669WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1670CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
1671BEGIN
1672UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1673f_charbig = 'updated by trigger'
1674      WHERE f_int1 = new.f_int1;
1675END|
1676INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1677SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
1678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1679
1680# check trigger-2 success: 	1
1681DROP TRIGGER trg_1;
1682UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1683f_int2 = CAST(f_char1 AS SIGNED INT),
1684f_charbig = 'just inserted'
1685   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
1686DELETE FROM t0_aux
1687WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1688INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
1689SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
1690'just inserted' FROM t0_template
1691WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1692CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
1693BEGIN
1694UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
1695f_charbig = 'updated by trigger'
1696      WHERE f_int1 = new.f_int1;
1697END|
1698UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
1699WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1700
1701# check trigger-3 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 = - old.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-4 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 AFTER 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 = new.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-5 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 = - old.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-6 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 BEFORE DELETE 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|
1782DELETE FROM t0_aux
1783WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
1784
1785# check trigger-7 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 AFTER 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-8 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;
1814DELETE FROM t1
1815WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
1816CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1817BEGIN
1818SET new.f_int1 = old.f_int1 + @max_row,
1819new.f_int2 = old.f_int2 - @max_row,
1820new.f_charbig = '####updated per update trigger####';
1821END|
1822UPDATE t1
1823SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1824f_charbig = '####updated per update statement itself####';
1825
1826# check trigger-9 success: 	1
1827DROP TRIGGER trg_2;
1828UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1829f_int2 = CAST(f_char1 AS SIGNED INT),
1830f_charbig = CONCAT('===',f_char1,'===');
1831CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
1832BEGIN
1833SET new.f_int1 = new.f_int1 + @max_row,
1834new.f_int2 = new.f_int2 - @max_row,
1835new.f_charbig = '####updated per update trigger####';
1836END|
1837UPDATE t1
1838SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
1839f_charbig = '####updated per update statement itself####';
1840
1841# check trigger-10 success: 	1
1842DROP TRIGGER trg_2;
1843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
1844f_int2 = CAST(f_char1 AS SIGNED INT),
1845f_charbig = CONCAT('===',f_char1,'===');
1846CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
1847BEGIN
1848SET new.f_int1 = @my_max1 + @counter,
1849new.f_int2 = @my_min2 - @counter,
1850new.f_charbig = '####updated per insert trigger####';
1851SET @counter = @counter + 1;
1852END|
1853SET @counter = 1;
1854SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
1855INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1856SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1857CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
1858WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
1859ORDER BY f_int1;
1860DROP TRIGGER trg_3;
1861
1862# check trigger-11 success: 	1
1863DELETE FROM t1
1864WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
1865AND f_int2 <> CAST(f_char1 AS SIGNED INT)
1866AND f_charbig = '####updated per insert trigger####';
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_char1, f_char2, f_charbig)
1877SELECT 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-12 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####';
1888ANALYZE  TABLE t1;
1889Table	Op	Msg_type	Msg_text
1890test.t1	analyze	status	OK
1891CHECK    TABLE t1 EXTENDED;
1892Table	Op	Msg_type	Msg_text
1893test.t1	check	status	OK
1894CHECKSUM TABLE t1 EXTENDED;
1895Table	Checksum
1896test.t1	<some_value>
1897OPTIMIZE TABLE t1;
1898Table	Op	Msg_type	Msg_text
1899test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
1900test.t1	optimize	status	OK
1901# check layout success:    1
1902REPAIR   TABLE t1 EXTENDED;
1903Table	Op	Msg_type	Msg_text
1904test.t1	repair	status	OK
1905# check layout success:    1
1906TRUNCATE t1;
1907
1908# check TRUNCATE success: 	1
1909# check layout success:    1
1910# End usability test (inc/partition_check.inc)
1911DROP TABLE t1;
1912CREATE TABLE t1 (
1913f_int1 INTEGER,
1914f_int2 INTEGER,
1915f_char1 CHAR(20),
1916f_char2 CHAR(20),
1917f_charbig VARCHAR(1000)
1918
1919)
1920PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
1921(PARTITION parta VALUES LESS THAN (0),
1922PARTITION partb VALUES LESS THAN (5),
1923PARTITION partc VALUES LESS THAN (10),
1924PARTITION partd VALUES LESS THAN (2147483646));
1925INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1926SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1927WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
1928ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
1929INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
1930SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
1931WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
1932# Start usability test (inc/partition_check.inc)
1933create_command
1934SHOW CREATE TABLE t1;
1935Table	Create Table
1936t1	CREATE TABLE `t1` (
1937  `f_int1` bigint(20) DEFAULT NULL,
1938  `f_int2` bigint(20) DEFAULT NULL,
1939  `f_char1` char(20) DEFAULT NULL,
1940  `f_char2` char(20) DEFAULT NULL,
1941  `f_charbig` varchar(1000) DEFAULT NULL
1942) ENGINE=InnoDB DEFAULT CHARSET=latin1
1943/*!50100 PARTITION BY RANGE (f_int1)
1944SUBPARTITION BY HASH (f_int2)
1945SUBPARTITIONS 2
1946(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
1947 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
1948 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
1949 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
1950
1951# check prerequisites-1 success:    1
1952# check COUNT(*) success:    1
1953# check MIN/MAX(f_int1) success:    1
1954# check MIN/MAX(f_int2) success:    1
1955INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
1956SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
1957CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
1958WHERE f_int1 IN (2,3);
1959# check prerequisites-3 success:    1
1960DELETE FROM t1 WHERE f_charbig = 'delete me';
1961# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
1962# check read via f_int1 success: 1
1963# check read via f_int2 success: 1
1964
1965# check multiple-1 success: 	1
1966DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
1967
1968# check multiple-2 success: 	1
1969INSERT INTO t1 SELECT * FROM t0_template
1970WHERE MOD(f_int1,3) = 0;
1971
1972# check multiple-3 success: 	1
1973UPDATE t1 SET f_int1 = f_int1 + @max_row
1974WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
1975AND @max_row_div2 + @max_row_div4;
1976
1977# check multiple-4 success: 	1
1978DELETE FROM t1
1979WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
1980AND @max_row_div2 + @max_row_div4 + @max_row;
1981
1982# check multiple-5 success: 	1
1983SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
1984INSERT INTO t1
1985SET f_int1 = @cur_value , f_int2 = @cur_value,
1986f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1987f_charbig = '#SINGLE#';
1988
1989# check single-1 success: 	1
1990SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
1991INSERT INTO t1
1992SET f_int1 = @cur_value , f_int2 = @cur_value,
1993f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
1994f_charbig = '#SINGLE#';
1995
1996# check single-2 success: 	1
1997SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
1998SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
1999UPDATE t1 SET f_int1 = @cur_value2
2000WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2001
2002# check single-3 success: 	1
2003SET @cur_value1= -1;
2004SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2005UPDATE t1 SET f_int1 = @cur_value1
2006WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2007
2008# check single-4 success: 	1
2009SELECT MAX(f_int1) INTO @cur_value FROM t1;
2010DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2011
2012# check single-5 success: 	1
2013DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2014
2015# check single-6 success: 	1
2016INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2017ERROR HY000: Table has no partition for value 2147483647
2018DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2019INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2020f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2021f_charbig = '#NULL#';
2022INSERT INTO t1
2023SET f_int1 = NULL , f_int2 = -@max_row,
2024f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2025f_charbig = '#NULL#';
2026# check null success:    1
2027
2028# check null-1 success: 	1
2029UPDATE t1 SET f_int1 = -@max_row
2030WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2031AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2032
2033# check null-2 success: 	1
2034UPDATE t1 SET f_int1 = NULL
2035WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2036AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2037
2038# check null-3 success: 	1
2039DELETE FROM t1
2040WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2041AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2042
2043# check null-4 success: 	1
2044DELETE FROM t1
2045WHERE f_int1 = 0 AND f_int2 = 0
2046AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2047AND f_charbig = '#NULL#';
2048SET AUTOCOMMIT= 0;
2049INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2050SELECT f_int1, f_int1, '', '', 'was inserted'
2051FROM t0_template source_tab
2052WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2053
2054# check transactions-1 success: 	1
2055COMMIT WORK;
2056
2057# check transactions-2 success: 	1
2058ROLLBACK WORK;
2059
2060# check transactions-3 success: 	1
2061DELETE FROM t1 WHERE f_charbig = 'was inserted';
2062COMMIT WORK;
2063ROLLBACK WORK;
2064
2065# check transactions-4 success: 	1
2066INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2067SELECT f_int1, f_int1, '', '', 'was inserted'
2068FROM t0_template source_tab
2069WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2070
2071# check transactions-5 success: 	1
2072ROLLBACK WORK;
2073
2074# check transactions-6 success: 	1
2075# INFO: Storage engine used for t1 seems to be transactional.
2076COMMIT;
2077
2078# check transactions-7 success: 	1
2079DELETE FROM t1 WHERE f_charbig = 'was inserted';
2080COMMIT WORK;
2081SET @@session.sql_mode = 'traditional';
2082Warnings:
2083Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2084SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2085INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2086SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2087'', '', 'was inserted' FROM t0_template
2088WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2089ERROR 22012: Division by 0
2090COMMIT;
2091
2092# check transactions-8 success: 	1
2093# INFO: Storage engine used for t1 seems to be able to revert
2094#       changes made by the failing statement.
2095SET @@session.sql_mode = '';
2096Warnings:
2097Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2098SET AUTOCOMMIT= 1;
2099DELETE FROM t1 WHERE f_charbig = 'was inserted';
2100COMMIT WORK;
2101UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2102
2103# check special-1 success: 	1
2104UPDATE t1 SET f_charbig = '';
2105
2106# check special-2 success: 	1
2107UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2108INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2109SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2111INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2112SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2113'just inserted' FROM t0_template
2114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2115CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2116BEGIN
2117UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2118f_charbig = 'updated by trigger'
2119      WHERE f_int1 = new.f_int1;
2120END|
2121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2122SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2123WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2124
2125# check trigger-1 success: 	1
2126DROP TRIGGER trg_1;
2127UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2128f_int2 = CAST(f_char1 AS SIGNED INT),
2129f_charbig = 'just inserted'
2130   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2131DELETE FROM t0_aux
2132WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2133INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2134SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2135'just inserted' FROM t0_template
2136WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2137CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2138BEGIN
2139UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2140f_charbig = 'updated by trigger'
2141      WHERE f_int1 = new.f_int1;
2142END|
2143INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2144SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2146
2147# check trigger-2 success: 	1
2148DROP TRIGGER trg_1;
2149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2150f_int2 = CAST(f_char1 AS SIGNED INT),
2151f_charbig = 'just inserted'
2152   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2153DELETE FROM t0_aux
2154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2157'just inserted' FROM t0_template
2158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2159CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2160BEGIN
2161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2162f_charbig = 'updated by trigger'
2163      WHERE f_int1 = new.f_int1;
2164END|
2165UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2167
2168# check trigger-3 success: 	1
2169DROP TRIGGER trg_1;
2170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2171f_int2 = CAST(f_char1 AS SIGNED INT),
2172f_charbig = 'just inserted'
2173   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2174DELETE FROM t0_aux
2175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2178'just inserted' FROM t0_template
2179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2180CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2181BEGIN
2182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2183f_charbig = 'updated by trigger'
2184      WHERE f_int1 = - old.f_int1;
2185END|
2186UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2188
2189# check trigger-4 success: 	1
2190DROP TRIGGER trg_1;
2191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2192f_int2 = CAST(f_char1 AS SIGNED INT),
2193f_charbig = 'just inserted'
2194   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2195DELETE FROM t0_aux
2196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2199'just inserted' FROM t0_template
2200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2201CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2202BEGIN
2203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2204f_charbig = 'updated by trigger'
2205      WHERE f_int1 = new.f_int1;
2206END|
2207UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2208WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2209
2210# check trigger-5 success: 	1
2211DROP TRIGGER trg_1;
2212UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2213f_int2 = CAST(f_char1 AS SIGNED INT),
2214f_charbig = 'just inserted'
2215   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2216DELETE FROM t0_aux
2217WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2218INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2219SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2220'just inserted' FROM t0_template
2221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2222CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2223BEGIN
2224UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2225f_charbig = 'updated by trigger'
2226      WHERE f_int1 = - old.f_int1;
2227END|
2228UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2229WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2230
2231# check trigger-6 success: 	1
2232DROP TRIGGER trg_1;
2233UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2234f_int2 = CAST(f_char1 AS SIGNED INT),
2235f_charbig = 'just inserted'
2236   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2237DELETE FROM t0_aux
2238WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2239INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2240SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2241'just inserted' FROM t0_template
2242WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2243CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2244BEGIN
2245UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2246f_charbig = 'updated by trigger'
2247      WHERE f_int1 = - old.f_int1;
2248END|
2249DELETE FROM t0_aux
2250WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2251
2252# check trigger-7 success: 	1
2253DROP TRIGGER trg_1;
2254UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2255f_int2 = CAST(f_char1 AS SIGNED INT),
2256f_charbig = 'just inserted'
2257   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2258DELETE FROM t0_aux
2259WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2260INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2261SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2262'just inserted' FROM t0_template
2263WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2264CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2265BEGIN
2266UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2267f_charbig = 'updated by trigger'
2268      WHERE f_int1 = - old.f_int1;
2269END|
2270DELETE FROM t0_aux
2271WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2272
2273# check trigger-8 success: 	1
2274DROP TRIGGER trg_1;
2275UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2276f_int2 = CAST(f_char1 AS SIGNED INT),
2277f_charbig = 'just inserted'
2278   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2279DELETE FROM t0_aux
2280WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2281DELETE FROM t1
2282WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2283CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2284BEGIN
2285SET new.f_int1 = old.f_int1 + @max_row,
2286new.f_int2 = old.f_int2 - @max_row,
2287new.f_charbig = '####updated per update trigger####';
2288END|
2289UPDATE t1
2290SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2291f_charbig = '####updated per update statement itself####';
2292
2293# check trigger-9 success: 	1
2294DROP TRIGGER trg_2;
2295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2296f_int2 = CAST(f_char1 AS SIGNED INT),
2297f_charbig = CONCAT('===',f_char1,'===');
2298CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2299BEGIN
2300SET new.f_int1 = new.f_int1 + @max_row,
2301new.f_int2 = new.f_int2 - @max_row,
2302new.f_charbig = '####updated per update trigger####';
2303END|
2304UPDATE t1
2305SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2306f_charbig = '####updated per update statement itself####';
2307
2308# check trigger-10 success: 	1
2309DROP TRIGGER trg_2;
2310UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2311f_int2 = CAST(f_char1 AS SIGNED INT),
2312f_charbig = CONCAT('===',f_char1,'===');
2313CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2314BEGIN
2315SET new.f_int1 = @my_max1 + @counter,
2316new.f_int2 = @my_min2 - @counter,
2317new.f_charbig = '####updated per insert trigger####';
2318SET @counter = @counter + 1;
2319END|
2320SET @counter = 1;
2321SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2322INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2323SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2324CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2325WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2326ORDER BY f_int1;
2327DROP TRIGGER trg_3;
2328
2329# check trigger-11 success: 	1
2330DELETE FROM t1
2331WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2332AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2333AND f_charbig = '####updated per insert trigger####';
2334CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2335BEGIN
2336SET new.f_int1 = @my_max1 + @counter,
2337new.f_int2 = @my_min2 - @counter,
2338new.f_charbig = '####updated per insert trigger####';
2339SET @counter = @counter + 1;
2340END|
2341SET @counter = 1;
2342SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2343INSERT INTO t1 (f_char1, f_char2, f_charbig)
2344SELECT CAST(f_int1 AS CHAR),
2345CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2346WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2347ORDER BY f_int1;
2348DROP TRIGGER trg_3;
2349
2350# check trigger-12 success: 	1
2351DELETE FROM t1
2352WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2353AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2354AND f_charbig = '####updated per insert trigger####';
2355ANALYZE  TABLE t1;
2356Table	Op	Msg_type	Msg_text
2357test.t1	analyze	status	OK
2358CHECK    TABLE t1 EXTENDED;
2359Table	Op	Msg_type	Msg_text
2360test.t1	check	status	OK
2361CHECKSUM TABLE t1 EXTENDED;
2362Table	Checksum
2363test.t1	<some_value>
2364OPTIMIZE TABLE t1;
2365Table	Op	Msg_type	Msg_text
2366test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2367test.t1	optimize	status	OK
2368# check layout success:    1
2369REPAIR   TABLE t1 EXTENDED;
2370Table	Op	Msg_type	Msg_text
2371test.t1	repair	status	OK
2372# check layout success:    1
2373TRUNCATE t1;
2374
2375# check TRUNCATE success: 	1
2376# check layout success:    1
2377# End usability test (inc/partition_check.inc)
2378DROP TABLE t1;
2379CREATE TABLE t1 (
2380f_int1 INTEGER,
2381f_int2 INTEGER,
2382f_char1 CHAR(20),
2383f_char2 CHAR(20),
2384f_charbig VARCHAR(1000)
2385
2386)
2387PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
2388(PARTITION part1 VALUES LESS THAN (0)
2389(SUBPARTITION subpart11, SUBPARTITION subpart12),
2390PARTITION part2 VALUES LESS THAN (5)
2391(SUBPARTITION subpart21, SUBPARTITION subpart22),
2392PARTITION part3 VALUES LESS THAN (10)
2393(SUBPARTITION subpart31, SUBPARTITION subpart32),
2394PARTITION part4 VALUES LESS THAN (2147483646)
2395(SUBPARTITION subpart41, SUBPARTITION subpart42));
2396INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2397SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2398WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2399ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
2400INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2401SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2402WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2403# Start usability test (inc/partition_check.inc)
2404create_command
2405SHOW CREATE TABLE t1;
2406Table	Create Table
2407t1	CREATE TABLE `t1` (
2408  `f_int1` bigint(20) DEFAULT NULL,
2409  `f_int2` bigint(20) DEFAULT NULL,
2410  `f_char1` char(20) DEFAULT NULL,
2411  `f_char2` char(20) DEFAULT NULL,
2412  `f_charbig` varchar(1000) DEFAULT NULL
2413) ENGINE=InnoDB DEFAULT CHARSET=latin1
2414/*!50100 PARTITION BY RANGE (f_int1)
2415SUBPARTITION BY KEY (f_int2)
2416(PARTITION part1 VALUES LESS THAN (0)
2417 (SUBPARTITION subpart11 ENGINE = InnoDB,
2418  SUBPARTITION subpart12 ENGINE = InnoDB),
2419 PARTITION part2 VALUES LESS THAN (5)
2420 (SUBPARTITION subpart21 ENGINE = InnoDB,
2421  SUBPARTITION subpart22 ENGINE = InnoDB),
2422 PARTITION part3 VALUES LESS THAN (10)
2423 (SUBPARTITION subpart31 ENGINE = InnoDB,
2424  SUBPARTITION subpart32 ENGINE = InnoDB),
2425 PARTITION part4 VALUES LESS THAN (2147483646)
2426 (SUBPARTITION subpart41 ENGINE = InnoDB,
2427  SUBPARTITION subpart42 ENGINE = InnoDB)) */
2428
2429# check prerequisites-1 success:    1
2430# check COUNT(*) success:    1
2431# check MIN/MAX(f_int1) success:    1
2432# check MIN/MAX(f_int2) success:    1
2433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2434SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2435CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2436WHERE f_int1 IN (2,3);
2437# check prerequisites-3 success:    1
2438DELETE FROM t1 WHERE f_charbig = 'delete me';
2439# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2440# check read via f_int1 success: 1
2441# check read via f_int2 success: 1
2442
2443# check multiple-1 success: 	1
2444DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2445
2446# check multiple-2 success: 	1
2447INSERT INTO t1 SELECT * FROM t0_template
2448WHERE MOD(f_int1,3) = 0;
2449
2450# check multiple-3 success: 	1
2451UPDATE t1 SET f_int1 = f_int1 + @max_row
2452WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2453AND @max_row_div2 + @max_row_div4;
2454
2455# check multiple-4 success: 	1
2456DELETE FROM t1
2457WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2458AND @max_row_div2 + @max_row_div4 + @max_row;
2459
2460# check multiple-5 success: 	1
2461SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2462INSERT INTO t1
2463SET f_int1 = @cur_value , f_int2 = @cur_value,
2464f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2465f_charbig = '#SINGLE#';
2466
2467# check single-1 success: 	1
2468SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2469INSERT INTO t1
2470SET f_int1 = @cur_value , f_int2 = @cur_value,
2471f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2472f_charbig = '#SINGLE#';
2473
2474# check single-2 success: 	1
2475SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2476SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2477UPDATE t1 SET f_int1 = @cur_value2
2478WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2479
2480# check single-3 success: 	1
2481SET @cur_value1= -1;
2482SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2483UPDATE t1 SET f_int1 = @cur_value1
2484WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2485
2486# check single-4 success: 	1
2487SELECT MAX(f_int1) INTO @cur_value FROM t1;
2488DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2489
2490# check single-5 success: 	1
2491DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2492
2493# check single-6 success: 	1
2494INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2495ERROR HY000: Table has no partition for value 2147483647
2496DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2497INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2498f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2499f_charbig = '#NULL#';
2500INSERT INTO t1
2501SET f_int1 = NULL , f_int2 = -@max_row,
2502f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2503f_charbig = '#NULL#';
2504# check null success:    1
2505
2506# check null-1 success: 	1
2507UPDATE t1 SET f_int1 = -@max_row
2508WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2509AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2510
2511# check null-2 success: 	1
2512UPDATE t1 SET f_int1 = NULL
2513WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2514AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2515
2516# check null-3 success: 	1
2517DELETE FROM t1
2518WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2519AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2520
2521# check null-4 success: 	1
2522DELETE FROM t1
2523WHERE f_int1 = 0 AND f_int2 = 0
2524AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
2525AND f_charbig = '#NULL#';
2526SET AUTOCOMMIT= 0;
2527INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2528SELECT f_int1, f_int1, '', '', 'was inserted'
2529FROM t0_template source_tab
2530WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2531
2532# check transactions-1 success: 	1
2533COMMIT WORK;
2534
2535# check transactions-2 success: 	1
2536ROLLBACK WORK;
2537
2538# check transactions-3 success: 	1
2539DELETE FROM t1 WHERE f_charbig = 'was inserted';
2540COMMIT WORK;
2541ROLLBACK WORK;
2542
2543# check transactions-4 success: 	1
2544INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2545SELECT f_int1, f_int1, '', '', 'was inserted'
2546FROM t0_template source_tab
2547WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2548
2549# check transactions-5 success: 	1
2550ROLLBACK WORK;
2551
2552# check transactions-6 success: 	1
2553# INFO: Storage engine used for t1 seems to be transactional.
2554COMMIT;
2555
2556# check transactions-7 success: 	1
2557DELETE FROM t1 WHERE f_charbig = 'was inserted';
2558COMMIT WORK;
2559SET @@session.sql_mode = 'traditional';
2560Warnings:
2561Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2562SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
2563INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2564SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
2565'', '', 'was inserted' FROM t0_template
2566WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
2567ERROR 22012: Division by 0
2568COMMIT;
2569
2570# check transactions-8 success: 	1
2571# INFO: Storage engine used for t1 seems to be able to revert
2572#       changes made by the failing statement.
2573SET @@session.sql_mode = '';
2574Warnings:
2575Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
2576SET AUTOCOMMIT= 1;
2577DELETE FROM t1 WHERE f_charbig = 'was inserted';
2578COMMIT WORK;
2579UPDATE t1 SET f_charbig = REPEAT('b', 1000);
2580
2581# check special-1 success: 	1
2582UPDATE t1 SET f_charbig = '';
2583
2584# check special-2 success: 	1
2585UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
2586INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2587SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
2588WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2589INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2590SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2591'just inserted' FROM t0_template
2592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2593CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
2594BEGIN
2595UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2596f_charbig = 'updated by trigger'
2597      WHERE f_int1 = new.f_int1;
2598END|
2599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2600SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2601WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2602
2603# check trigger-1 success: 	1
2604DROP TRIGGER trg_1;
2605UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2606f_int2 = CAST(f_char1 AS SIGNED INT),
2607f_charbig = 'just inserted'
2608   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2609DELETE FROM t0_aux
2610WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2611INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2612SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2613'just inserted' FROM t0_template
2614WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2615CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
2616BEGIN
2617UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2618f_charbig = 'updated by trigger'
2619      WHERE f_int1 = new.f_int1;
2620END|
2621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2622SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
2623WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2624
2625# check trigger-2 success: 	1
2626DROP TRIGGER trg_1;
2627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2628f_int2 = CAST(f_char1 AS SIGNED INT),
2629f_charbig = 'just inserted'
2630   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2631DELETE FROM t0_aux
2632WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2634SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2635'just inserted' FROM t0_template
2636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2637CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2638BEGIN
2639UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2640f_charbig = 'updated by trigger'
2641      WHERE f_int1 = new.f_int1;
2642END|
2643UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2644WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2645
2646# check trigger-3 success: 	1
2647DROP TRIGGER trg_1;
2648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2649f_int2 = CAST(f_char1 AS SIGNED INT),
2650f_charbig = 'just inserted'
2651   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2652DELETE FROM t0_aux
2653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2656'just inserted' FROM t0_template
2657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2658CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
2659BEGIN
2660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2661f_charbig = 'updated by trigger'
2662      WHERE f_int1 = - old.f_int1;
2663END|
2664UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2666
2667# check trigger-4 success: 	1
2668DROP TRIGGER trg_1;
2669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2670f_int2 = CAST(f_char1 AS SIGNED INT),
2671f_charbig = 'just inserted'
2672   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2673DELETE FROM t0_aux
2674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2677'just inserted' FROM t0_template
2678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2679CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2680BEGIN
2681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2682f_charbig = 'updated by trigger'
2683      WHERE f_int1 = new.f_int1;
2684END|
2685UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2687
2688# check trigger-5 success: 	1
2689DROP TRIGGER trg_1;
2690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2691f_int2 = CAST(f_char1 AS SIGNED INT),
2692f_charbig = 'just inserted'
2693   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2694DELETE FROM t0_aux
2695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2698'just inserted' FROM t0_template
2699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2700CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
2701BEGIN
2702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2703f_charbig = 'updated by trigger'
2704      WHERE f_int1 = - old.f_int1;
2705END|
2706UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
2707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2708
2709# check trigger-6 success: 	1
2710DROP TRIGGER trg_1;
2711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2712f_int2 = CAST(f_char1 AS SIGNED INT),
2713f_charbig = 'just inserted'
2714   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2715DELETE FROM t0_aux
2716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2719'just inserted' FROM t0_template
2720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2721CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
2722BEGIN
2723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2724f_charbig = 'updated by trigger'
2725      WHERE f_int1 = - old.f_int1;
2726END|
2727DELETE FROM t0_aux
2728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2729
2730# check trigger-7 success: 	1
2731DROP TRIGGER trg_1;
2732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2733f_int2 = CAST(f_char1 AS SIGNED INT),
2734f_charbig = 'just inserted'
2735   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2736DELETE FROM t0_aux
2737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
2739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
2740'just inserted' FROM t0_template
2741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2742CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
2743BEGIN
2744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
2745f_charbig = 'updated by trigger'
2746      WHERE f_int1 = - old.f_int1;
2747END|
2748DELETE FROM t0_aux
2749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
2750
2751# check trigger-8 success: 	1
2752DROP TRIGGER trg_1;
2753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2754f_int2 = CAST(f_char1 AS SIGNED INT),
2755f_charbig = 'just inserted'
2756   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
2757DELETE FROM t0_aux
2758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2759DELETE FROM t1
2760WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
2761CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2762BEGIN
2763SET new.f_int1 = old.f_int1 + @max_row,
2764new.f_int2 = old.f_int2 - @max_row,
2765new.f_charbig = '####updated per update trigger####';
2766END|
2767UPDATE t1
2768SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2769f_charbig = '####updated per update statement itself####';
2770
2771# check trigger-9 success: 	1
2772DROP TRIGGER trg_2;
2773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2774f_int2 = CAST(f_char1 AS SIGNED INT),
2775f_charbig = CONCAT('===',f_char1,'===');
2776CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
2777BEGIN
2778SET new.f_int1 = new.f_int1 + @max_row,
2779new.f_int2 = new.f_int2 - @max_row,
2780new.f_charbig = '####updated per update trigger####';
2781END|
2782UPDATE t1
2783SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
2784f_charbig = '####updated per update statement itself####';
2785
2786# check trigger-10 success: 	1
2787DROP TRIGGER trg_2;
2788UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
2789f_int2 = CAST(f_char1 AS SIGNED INT),
2790f_charbig = CONCAT('===',f_char1,'===');
2791CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2792BEGIN
2793SET new.f_int1 = @my_max1 + @counter,
2794new.f_int2 = @my_min2 - @counter,
2795new.f_charbig = '####updated per insert trigger####';
2796SET @counter = @counter + 1;
2797END|
2798SET @counter = 1;
2799SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2800INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2801SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2802CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2803WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2804ORDER BY f_int1;
2805DROP TRIGGER trg_3;
2806
2807# check trigger-11 success: 	1
2808DELETE FROM t1
2809WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2810AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2811AND f_charbig = '####updated per insert trigger####';
2812CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
2813BEGIN
2814SET new.f_int1 = @my_max1 + @counter,
2815new.f_int2 = @my_min2 - @counter,
2816new.f_charbig = '####updated per insert trigger####';
2817SET @counter = @counter + 1;
2818END|
2819SET @counter = 1;
2820SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
2821INSERT INTO t1 (f_char1, f_char2, f_charbig)
2822SELECT CAST(f_int1 AS CHAR),
2823CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
2824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
2825ORDER BY f_int1;
2826DROP TRIGGER trg_3;
2827
2828# check trigger-12 success: 	1
2829DELETE FROM t1
2830WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
2831AND f_int2 <> CAST(f_char1 AS SIGNED INT)
2832AND f_charbig = '####updated per insert trigger####';
2833ANALYZE  TABLE t1;
2834Table	Op	Msg_type	Msg_text
2835test.t1	analyze	status	OK
2836CHECK    TABLE t1 EXTENDED;
2837Table	Op	Msg_type	Msg_text
2838test.t1	check	status	OK
2839CHECKSUM TABLE t1 EXTENDED;
2840Table	Checksum
2841test.t1	<some_value>
2842OPTIMIZE TABLE t1;
2843Table	Op	Msg_type	Msg_text
2844test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
2845test.t1	optimize	status	OK
2846# check layout success:    1
2847REPAIR   TABLE t1 EXTENDED;
2848Table	Op	Msg_type	Msg_text
2849test.t1	repair	status	OK
2850# check layout success:    1
2851TRUNCATE t1;
2852
2853# check TRUNCATE success: 	1
2854# check layout success:    1
2855# End usability test (inc/partition_check.inc)
2856DROP TABLE t1;
2857CREATE TABLE t1 (
2858f_int1 INTEGER,
2859f_int2 INTEGER,
2860f_char1 CHAR(20),
2861f_char2 CHAR(20),
2862f_charbig VARCHAR(1000)
2863
2864)
2865PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
2866(PARTITION part1 VALUES IN (0)
2867(SUBPARTITION sp11, SUBPARTITION sp12),
2868PARTITION part2 VALUES IN (1)
2869(SUBPARTITION sp21, SUBPARTITION sp22),
2870PARTITION part3 VALUES IN (2)
2871(SUBPARTITION sp31, SUBPARTITION sp32),
2872PARTITION part4 VALUES IN (NULL)
2873(SUBPARTITION sp41, SUBPARTITION sp42));
2874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
2877ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
2878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
2879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
2880WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
2881# Start usability test (inc/partition_check.inc)
2882create_command
2883SHOW CREATE TABLE t1;
2884Table	Create Table
2885t1	CREATE TABLE `t1` (
2886  `f_int1` bigint(20) DEFAULT NULL,
2887  `f_int2` bigint(20) DEFAULT NULL,
2888  `f_char1` char(20) DEFAULT NULL,
2889  `f_char2` char(20) DEFAULT NULL,
2890  `f_charbig` varchar(1000) DEFAULT NULL
2891) ENGINE=InnoDB DEFAULT CHARSET=latin1
2892/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
2893SUBPARTITION BY HASH (f_int2 + 1)
2894(PARTITION part1 VALUES IN (0)
2895 (SUBPARTITION sp11 ENGINE = InnoDB,
2896  SUBPARTITION sp12 ENGINE = InnoDB),
2897 PARTITION part2 VALUES IN (1)
2898 (SUBPARTITION sp21 ENGINE = InnoDB,
2899  SUBPARTITION sp22 ENGINE = InnoDB),
2900 PARTITION part3 VALUES IN (2)
2901 (SUBPARTITION sp31 ENGINE = InnoDB,
2902  SUBPARTITION sp32 ENGINE = InnoDB),
2903 PARTITION part4 VALUES IN (NULL)
2904 (SUBPARTITION sp41 ENGINE = InnoDB,
2905  SUBPARTITION sp42 ENGINE = InnoDB)) */
2906
2907# check prerequisites-1 success:    1
2908# check COUNT(*) success:    1
2909# check MIN/MAX(f_int1) success:    1
2910# check MIN/MAX(f_int2) success:    1
2911INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
2912SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
2913CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
2914WHERE f_int1 IN (2,3);
2915# check prerequisites-3 success:    1
2916DELETE FROM t1 WHERE f_charbig = 'delete me';
2917# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
2918# check read via f_int1 success: 1
2919# check read via f_int2 success: 1
2920
2921# check multiple-1 success: 	1
2922DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
2923
2924# check multiple-2 success: 	1
2925INSERT INTO t1 SELECT * FROM t0_template
2926WHERE MOD(f_int1,3) = 0;
2927
2928# check multiple-3 success: 	1
2929UPDATE t1 SET f_int1 = f_int1 + @max_row
2930WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
2931AND @max_row_div2 + @max_row_div4;
2932
2933# check multiple-4 success: 	1
2934DELETE FROM t1
2935WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
2936AND @max_row_div2 + @max_row_div4 + @max_row;
2937
2938# check multiple-5 success: 	1
2939SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
2940INSERT INTO t1
2941SET f_int1 = @cur_value , f_int2 = @cur_value,
2942f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2943f_charbig = '#SINGLE#';
2944
2945# check single-1 success: 	1
2946SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
2947INSERT INTO t1
2948SET f_int1 = @cur_value , f_int2 = @cur_value,
2949f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
2950f_charbig = '#SINGLE#';
2951
2952# check single-2 success: 	1
2953SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
2954SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
2955UPDATE t1 SET f_int1 = @cur_value2
2956WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
2957
2958# check single-3 success: 	1
2959SET @cur_value1= -1;
2960SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
2961UPDATE t1 SET f_int1 = @cur_value1
2962WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
2963
2964# check single-4 success: 	1
2965SELECT MAX(f_int1) INTO @cur_value FROM t1;
2966DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
2967
2968# check single-5 success: 	1
2969DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
2970
2971# check single-6 success: 	1
2972INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
2973
2974# check single-7 success: 	1
2975DELETE FROM t1 WHERE f_charbig = '#2147483647##';
2976DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
2977INSERT t1 SET f_int1 = 0 , f_int2 = 0,
2978f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
2979f_charbig = '#NULL#';
2980INSERT INTO t1
2981SET f_int1 = NULL , f_int2 = -@max_row,
2982f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
2983f_charbig = '#NULL#';
2984# check null success:    1
2985
2986# check null-1 success: 	1
2987UPDATE t1 SET f_int1 = -@max_row
2988WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2989AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2990
2991# check null-2 success: 	1
2992UPDATE t1 SET f_int1 = NULL
2993WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2994AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
2995
2996# check null-3 success: 	1
2997DELETE FROM t1
2998WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
2999AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3000
3001# check null-4 success: 	1
3002DELETE FROM t1
3003WHERE f_int1 = 0 AND f_int2 = 0
3004AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3005AND f_charbig = '#NULL#';
3006SET AUTOCOMMIT= 0;
3007INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3008SELECT f_int1, f_int1, '', '', 'was inserted'
3009FROM t0_template source_tab
3010WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3011
3012# check transactions-1 success: 	1
3013COMMIT WORK;
3014
3015# check transactions-2 success: 	1
3016ROLLBACK WORK;
3017
3018# check transactions-3 success: 	1
3019DELETE FROM t1 WHERE f_charbig = 'was inserted';
3020COMMIT WORK;
3021ROLLBACK WORK;
3022
3023# check transactions-4 success: 	1
3024INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3025SELECT f_int1, f_int1, '', '', 'was inserted'
3026FROM t0_template source_tab
3027WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3028
3029# check transactions-5 success: 	1
3030ROLLBACK WORK;
3031
3032# check transactions-6 success: 	1
3033# INFO: Storage engine used for t1 seems to be transactional.
3034COMMIT;
3035
3036# check transactions-7 success: 	1
3037DELETE FROM t1 WHERE f_charbig = 'was inserted';
3038COMMIT WORK;
3039SET @@session.sql_mode = 'traditional';
3040Warnings:
3041Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3042SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3044SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3045'', '', 'was inserted' FROM t0_template
3046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3047ERROR 22012: Division by 0
3048COMMIT;
3049
3050# check transactions-8 success: 	1
3051# INFO: Storage engine used for t1 seems to be able to revert
3052#       changes made by the failing statement.
3053SET @@session.sql_mode = '';
3054Warnings:
3055Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3056SET AUTOCOMMIT= 1;
3057DELETE FROM t1 WHERE f_charbig = 'was inserted';
3058COMMIT WORK;
3059UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3060
3061# check special-1 success: 	1
3062UPDATE t1 SET f_charbig = '';
3063
3064# check special-2 success: 	1
3065UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3066INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3067SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3068WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3069INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3070SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3071'just inserted' FROM t0_template
3072WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3073CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3074BEGIN
3075UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3076f_charbig = 'updated by trigger'
3077      WHERE f_int1 = new.f_int1;
3078END|
3079INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3080SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3081WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3082
3083# check trigger-1 success: 	1
3084DROP TRIGGER trg_1;
3085UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3086f_int2 = CAST(f_char1 AS SIGNED INT),
3087f_charbig = 'just inserted'
3088   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3089DELETE FROM t0_aux
3090WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3091INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3092SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3093'just inserted' FROM t0_template
3094WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3095CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3096BEGIN
3097UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3098f_charbig = 'updated by trigger'
3099      WHERE f_int1 = new.f_int1;
3100END|
3101INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3102SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3104
3105# check trigger-2 success: 	1
3106DROP TRIGGER trg_1;
3107UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3108f_int2 = CAST(f_char1 AS SIGNED INT),
3109f_charbig = 'just inserted'
3110   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3111DELETE FROM t0_aux
3112WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3114SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3115'just inserted' FROM t0_template
3116WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3117CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3118BEGIN
3119UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3120f_charbig = 'updated by trigger'
3121      WHERE f_int1 = new.f_int1;
3122END|
3123UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3124WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3125
3126# check trigger-3 success: 	1
3127DROP TRIGGER trg_1;
3128UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3129f_int2 = CAST(f_char1 AS SIGNED INT),
3130f_charbig = 'just inserted'
3131   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3132DELETE FROM t0_aux
3133WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3134INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3135SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3136'just inserted' FROM t0_template
3137WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3138CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3139BEGIN
3140UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3141f_charbig = 'updated by trigger'
3142      WHERE f_int1 = - old.f_int1;
3143END|
3144UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3145WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3146
3147# check trigger-4 success: 	1
3148DROP TRIGGER trg_1;
3149UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3150f_int2 = CAST(f_char1 AS SIGNED INT),
3151f_charbig = 'just inserted'
3152   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3153DELETE FROM t0_aux
3154WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3155INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3156SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3157'just inserted' FROM t0_template
3158WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3159CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3160BEGIN
3161UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3162f_charbig = 'updated by trigger'
3163      WHERE f_int1 = new.f_int1;
3164END|
3165UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3166WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3167
3168# check trigger-5 success: 	1
3169DROP TRIGGER trg_1;
3170UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3171f_int2 = CAST(f_char1 AS SIGNED INT),
3172f_charbig = 'just inserted'
3173   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3174DELETE FROM t0_aux
3175WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3177SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3178'just inserted' FROM t0_template
3179WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3180CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3181BEGIN
3182UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3183f_charbig = 'updated by trigger'
3184      WHERE f_int1 = - old.f_int1;
3185END|
3186UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3187WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3188
3189# check trigger-6 success: 	1
3190DROP TRIGGER trg_1;
3191UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3192f_int2 = CAST(f_char1 AS SIGNED INT),
3193f_charbig = 'just inserted'
3194   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3195DELETE FROM t0_aux
3196WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3197INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3198SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3199'just inserted' FROM t0_template
3200WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3201CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3202BEGIN
3203UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3204f_charbig = 'updated by trigger'
3205      WHERE f_int1 = - old.f_int1;
3206END|
3207DELETE FROM t0_aux
3208WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3209
3210# check trigger-7 success: 	1
3211DROP TRIGGER trg_1;
3212UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3213f_int2 = CAST(f_char1 AS SIGNED INT),
3214f_charbig = 'just inserted'
3215   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3216DELETE FROM t0_aux
3217WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3218INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3219SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3220'just inserted' FROM t0_template
3221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3222CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3223BEGIN
3224UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3225f_charbig = 'updated by trigger'
3226      WHERE f_int1 = - old.f_int1;
3227END|
3228DELETE FROM t0_aux
3229WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3230
3231# check trigger-8 success: 	1
3232DROP TRIGGER trg_1;
3233UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3234f_int2 = CAST(f_char1 AS SIGNED INT),
3235f_charbig = 'just inserted'
3236   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3237DELETE FROM t0_aux
3238WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3239DELETE FROM t1
3240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3241CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3242BEGIN
3243SET new.f_int1 = old.f_int1 + @max_row,
3244new.f_int2 = old.f_int2 - @max_row,
3245new.f_charbig = '####updated per update trigger####';
3246END|
3247UPDATE t1
3248SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3249f_charbig = '####updated per update statement itself####';
3250
3251# check trigger-9 success: 	1
3252DROP TRIGGER trg_2;
3253UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3254f_int2 = CAST(f_char1 AS SIGNED INT),
3255f_charbig = CONCAT('===',f_char1,'===');
3256CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3257BEGIN
3258SET new.f_int1 = new.f_int1 + @max_row,
3259new.f_int2 = new.f_int2 - @max_row,
3260new.f_charbig = '####updated per update trigger####';
3261END|
3262UPDATE t1
3263SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3264f_charbig = '####updated per update statement itself####';
3265
3266# check trigger-10 success: 	1
3267DROP TRIGGER trg_2;
3268UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3269f_int2 = CAST(f_char1 AS SIGNED INT),
3270f_charbig = CONCAT('===',f_char1,'===');
3271CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3272BEGIN
3273SET new.f_int1 = @my_max1 + @counter,
3274new.f_int2 = @my_min2 - @counter,
3275new.f_charbig = '####updated per insert trigger####';
3276SET @counter = @counter + 1;
3277END|
3278SET @counter = 1;
3279SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3280INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3281SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3282CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3283WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3284ORDER BY f_int1;
3285DROP TRIGGER trg_3;
3286
3287# check trigger-11 success: 	1
3288DELETE FROM t1
3289WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3290AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3291AND f_charbig = '####updated per insert trigger####';
3292CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3293BEGIN
3294SET new.f_int1 = @my_max1 + @counter,
3295new.f_int2 = @my_min2 - @counter,
3296new.f_charbig = '####updated per insert trigger####';
3297SET @counter = @counter + 1;
3298END|
3299SET @counter = 1;
3300SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3301INSERT INTO t1 (f_char1, f_char2, f_charbig)
3302SELECT CAST(f_int1 AS CHAR),
3303CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3304WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3305ORDER BY f_int1;
3306DROP TRIGGER trg_3;
3307
3308# check trigger-12 success: 	1
3309DELETE FROM t1
3310WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3311AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3312AND f_charbig = '####updated per insert trigger####';
3313ANALYZE  TABLE t1;
3314Table	Op	Msg_type	Msg_text
3315test.t1	analyze	status	OK
3316CHECK    TABLE t1 EXTENDED;
3317Table	Op	Msg_type	Msg_text
3318test.t1	check	status	OK
3319CHECKSUM TABLE t1 EXTENDED;
3320Table	Checksum
3321test.t1	<some_value>
3322OPTIMIZE TABLE t1;
3323Table	Op	Msg_type	Msg_text
3324test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3325test.t1	optimize	status	OK
3326# check layout success:    1
3327REPAIR   TABLE t1 EXTENDED;
3328Table	Op	Msg_type	Msg_text
3329test.t1	repair	status	OK
3330# check layout success:    1
3331TRUNCATE t1;
3332
3333# check TRUNCATE success: 	1
3334# check layout success:    1
3335# End usability test (inc/partition_check.inc)
3336DROP TABLE t1;
3337CREATE TABLE t1 (
3338f_int1 INTEGER,
3339f_int2 INTEGER,
3340f_char1 CHAR(20),
3341f_char2 CHAR(20),
3342f_charbig VARCHAR(1000)
3343
3344)
3345PARTITION BY LIST(ABS(MOD(f_int1,2)))
3346SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
3347(PARTITION part1 VALUES IN (0),
3348PARTITION part2 VALUES IN (1),
3349PARTITION part3 VALUES IN (NULL));
3350INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3351SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3352WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3353ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
3354INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3355SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3356WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3357# Start usability test (inc/partition_check.inc)
3358create_command
3359SHOW CREATE TABLE t1;
3360Table	Create Table
3361t1	CREATE TABLE `t1` (
3362  `f_int1` bigint(20) DEFAULT NULL,
3363  `f_int2` bigint(20) DEFAULT NULL,
3364  `f_char1` char(20) DEFAULT NULL,
3365  `f_char2` char(20) DEFAULT NULL,
3366  `f_charbig` varchar(1000) DEFAULT NULL
3367) ENGINE=InnoDB DEFAULT CHARSET=latin1
3368/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
3369SUBPARTITION BY KEY (f_int2)
3370SUBPARTITIONS 3
3371(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
3372 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
3373 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
3374
3375# check prerequisites-1 success:    1
3376# check COUNT(*) success:    1
3377# check MIN/MAX(f_int1) success:    1
3378# check MIN/MAX(f_int2) success:    1
3379INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3380SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3381CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3382WHERE f_int1 IN (2,3);
3383# check prerequisites-3 success:    1
3384DELETE FROM t1 WHERE f_charbig = 'delete me';
3385# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE
3386# check read via f_int1 success: 1
3387# check read via f_int2 success: 1
3388
3389# check multiple-1 success: 	1
3390DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3391
3392# check multiple-2 success: 	1
3393INSERT INTO t1 SELECT * FROM t0_template
3394WHERE MOD(f_int1,3) = 0;
3395
3396# check multiple-3 success: 	1
3397UPDATE t1 SET f_int1 = f_int1 + @max_row
3398WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3399AND @max_row_div2 + @max_row_div4;
3400
3401# check multiple-4 success: 	1
3402DELETE FROM t1
3403WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3404AND @max_row_div2 + @max_row_div4 + @max_row;
3405
3406# check multiple-5 success: 	1
3407SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3408INSERT INTO t1
3409SET f_int1 = @cur_value , f_int2 = @cur_value,
3410f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3411f_charbig = '#SINGLE#';
3412
3413# check single-1 success: 	1
3414SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3415INSERT INTO t1
3416SET f_int1 = @cur_value , f_int2 = @cur_value,
3417f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3418f_charbig = '#SINGLE#';
3419
3420# check single-2 success: 	1
3421SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3422SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3423UPDATE t1 SET f_int1 = @cur_value2
3424WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3425
3426# check single-3 success: 	1
3427SET @cur_value1= -1;
3428SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3429UPDATE t1 SET f_int1 = @cur_value1
3430WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3431
3432# check single-4 success: 	1
3433SELECT MAX(f_int1) INTO @cur_value FROM t1;
3434DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3435
3436# check single-5 success: 	1
3437DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3438
3439# check single-6 success: 	1
3440INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3441
3442# check single-7 success: 	1
3443DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3444DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3445INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3446f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3447f_charbig = '#NULL#';
3448INSERT INTO t1
3449SET f_int1 = NULL , f_int2 = -@max_row,
3450f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3451f_charbig = '#NULL#';
3452# check null success:    1
3453
3454# check null-1 success: 	1
3455UPDATE t1 SET f_int1 = -@max_row
3456WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3457AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3458
3459# check null-2 success: 	1
3460UPDATE t1 SET f_int1 = NULL
3461WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3462AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3463
3464# check null-3 success: 	1
3465DELETE FROM t1
3466WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
3467AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
3468
3469# check null-4 success: 	1
3470DELETE FROM t1
3471WHERE f_int1 = 0 AND f_int2 = 0
3472AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3473AND f_charbig = '#NULL#';
3474SET AUTOCOMMIT= 0;
3475INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3476SELECT f_int1, f_int1, '', '', 'was inserted'
3477FROM t0_template source_tab
3478WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3479
3480# check transactions-1 success: 	1
3481COMMIT WORK;
3482
3483# check transactions-2 success: 	1
3484ROLLBACK WORK;
3485
3486# check transactions-3 success: 	1
3487DELETE FROM t1 WHERE f_charbig = 'was inserted';
3488COMMIT WORK;
3489ROLLBACK WORK;
3490
3491# check transactions-4 success: 	1
3492INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3493SELECT f_int1, f_int1, '', '', 'was inserted'
3494FROM t0_template source_tab
3495WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3496
3497# check transactions-5 success: 	1
3498ROLLBACK WORK;
3499
3500# check transactions-6 success: 	1
3501# INFO: Storage engine used for t1 seems to be transactional.
3502COMMIT;
3503
3504# check transactions-7 success: 	1
3505DELETE FROM t1 WHERE f_charbig = 'was inserted';
3506COMMIT WORK;
3507SET @@session.sql_mode = 'traditional';
3508Warnings:
3509Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3510SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
3511INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3512SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
3513'', '', 'was inserted' FROM t0_template
3514WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3515ERROR 22012: Division by 0
3516COMMIT;
3517
3518# check transactions-8 success: 	1
3519# INFO: Storage engine used for t1 seems to be able to revert
3520#       changes made by the failing statement.
3521SET @@session.sql_mode = '';
3522Warnings:
3523Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
3524SET AUTOCOMMIT= 1;
3525DELETE FROM t1 WHERE f_charbig = 'was inserted';
3526COMMIT WORK;
3527UPDATE t1 SET f_charbig = REPEAT('b', 1000);
3528
3529# check special-1 success: 	1
3530UPDATE t1 SET f_charbig = '';
3531
3532# check special-2 success: 	1
3533UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
3534INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3535SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
3536WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3537INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3538SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3539'just inserted' FROM t0_template
3540WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3541CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
3542BEGIN
3543UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3544f_charbig = 'updated by trigger'
3545      WHERE f_int1 = new.f_int1;
3546END|
3547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3548SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3550
3551# check trigger-1 success: 	1
3552DROP TRIGGER trg_1;
3553UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3554f_int2 = CAST(f_char1 AS SIGNED INT),
3555f_charbig = 'just inserted'
3556   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3557DELETE FROM t0_aux
3558WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3559INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3560SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3561'just inserted' FROM t0_template
3562WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3563CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
3564BEGIN
3565UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3566f_charbig = 'updated by trigger'
3567      WHERE f_int1 = new.f_int1;
3568END|
3569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3570SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
3571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3572
3573# check trigger-2 success: 	1
3574DROP TRIGGER trg_1;
3575UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3576f_int2 = CAST(f_char1 AS SIGNED INT),
3577f_charbig = 'just inserted'
3578   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3579DELETE FROM t0_aux
3580WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3581INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3582SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3583'just inserted' FROM t0_template
3584WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3585CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3586BEGIN
3587UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3588f_charbig = 'updated by trigger'
3589      WHERE f_int1 = new.f_int1;
3590END|
3591UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3592WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3593
3594# check trigger-3 success: 	1
3595DROP TRIGGER trg_1;
3596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3597f_int2 = CAST(f_char1 AS SIGNED INT),
3598f_charbig = 'just inserted'
3599   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3600DELETE FROM t0_aux
3601WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3602INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3603SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3604'just inserted' FROM t0_template
3605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3606CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
3607BEGIN
3608UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3609f_charbig = 'updated by trigger'
3610      WHERE f_int1 = - old.f_int1;
3611END|
3612UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3613WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3614
3615# check trigger-4 success: 	1
3616DROP TRIGGER trg_1;
3617UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3618f_int2 = CAST(f_char1 AS SIGNED INT),
3619f_charbig = 'just inserted'
3620   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3621DELETE FROM t0_aux
3622WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3623INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3624SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3625'just inserted' FROM t0_template
3626WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3627CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3628BEGIN
3629UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3630f_charbig = 'updated by trigger'
3631      WHERE f_int1 = new.f_int1;
3632END|
3633UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3634WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3635
3636# check trigger-5 success: 	1
3637DROP TRIGGER trg_1;
3638UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3639f_int2 = CAST(f_char1 AS SIGNED INT),
3640f_charbig = 'just inserted'
3641   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3642DELETE FROM t0_aux
3643WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3644INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3645SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3646'just inserted' FROM t0_template
3647WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3648CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
3649BEGIN
3650UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3651f_charbig = 'updated by trigger'
3652      WHERE f_int1 = - old.f_int1;
3653END|
3654UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
3655WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3656
3657# check trigger-6 success: 	1
3658DROP TRIGGER trg_1;
3659UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3660f_int2 = CAST(f_char1 AS SIGNED INT),
3661f_charbig = 'just inserted'
3662   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3663DELETE FROM t0_aux
3664WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3665INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3666SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3667'just inserted' FROM t0_template
3668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3669CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
3670BEGIN
3671UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3672f_charbig = 'updated by trigger'
3673      WHERE f_int1 = - old.f_int1;
3674END|
3675DELETE FROM t0_aux
3676WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3677
3678# check trigger-7 success: 	1
3679DROP TRIGGER trg_1;
3680UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3681f_int2 = CAST(f_char1 AS SIGNED INT),
3682f_charbig = 'just inserted'
3683   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3684DELETE FROM t0_aux
3685WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3686INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
3687SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
3688'just inserted' FROM t0_template
3689WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3690CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
3691BEGIN
3692UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
3693f_charbig = 'updated by trigger'
3694      WHERE f_int1 = - old.f_int1;
3695END|
3696DELETE FROM t0_aux
3697WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
3698
3699# check trigger-8 success: 	1
3700DROP TRIGGER trg_1;
3701UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3702f_int2 = CAST(f_char1 AS SIGNED INT),
3703f_charbig = 'just inserted'
3704   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
3705DELETE FROM t0_aux
3706WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3707DELETE FROM t1
3708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
3709CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3710BEGIN
3711SET new.f_int1 = old.f_int1 + @max_row,
3712new.f_int2 = old.f_int2 - @max_row,
3713new.f_charbig = '####updated per update trigger####';
3714END|
3715UPDATE t1
3716SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3717f_charbig = '####updated per update statement itself####';
3718
3719# check trigger-9 success: 	1
3720DROP TRIGGER trg_2;
3721UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3722f_int2 = CAST(f_char1 AS SIGNED INT),
3723f_charbig = CONCAT('===',f_char1,'===');
3724CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
3725BEGIN
3726SET new.f_int1 = new.f_int1 + @max_row,
3727new.f_int2 = new.f_int2 - @max_row,
3728new.f_charbig = '####updated per update trigger####';
3729END|
3730UPDATE t1
3731SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
3732f_charbig = '####updated per update statement itself####';
3733
3734# check trigger-10 success: 	1
3735DROP TRIGGER trg_2;
3736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3737f_int2 = CAST(f_char1 AS SIGNED INT),
3738f_charbig = CONCAT('===',f_char1,'===');
3739CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3740BEGIN
3741SET new.f_int1 = @my_max1 + @counter,
3742new.f_int2 = @my_min2 - @counter,
3743new.f_charbig = '####updated per insert trigger####';
3744SET @counter = @counter + 1;
3745END|
3746SET @counter = 1;
3747SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3748INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3749SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3750CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3752ORDER BY f_int1;
3753DROP TRIGGER trg_3;
3754
3755# check trigger-11 success: 	1
3756DELETE FROM t1
3757WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3758AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3759AND f_charbig = '####updated per insert trigger####';
3760CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
3761BEGIN
3762SET new.f_int1 = @my_max1 + @counter,
3763new.f_int2 = @my_min2 - @counter,
3764new.f_charbig = '####updated per insert trigger####';
3765SET @counter = @counter + 1;
3766END|
3767SET @counter = 1;
3768SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
3769INSERT INTO t1 (f_char1, f_char2, f_charbig)
3770SELECT CAST(f_int1 AS CHAR),
3771CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
3772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
3773ORDER BY f_int1;
3774DROP TRIGGER trg_3;
3775
3776# check trigger-12 success: 	1
3777DELETE FROM t1
3778WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
3779AND f_int2 <> CAST(f_char1 AS SIGNED INT)
3780AND f_charbig = '####updated per insert trigger####';
3781ANALYZE  TABLE t1;
3782Table	Op	Msg_type	Msg_text
3783test.t1	analyze	status	OK
3784CHECK    TABLE t1 EXTENDED;
3785Table	Op	Msg_type	Msg_text
3786test.t1	check	status	OK
3787CHECKSUM TABLE t1 EXTENDED;
3788Table	Checksum
3789test.t1	<some_value>
3790OPTIMIZE TABLE t1;
3791Table	Op	Msg_type	Msg_text
3792test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
3793test.t1	optimize	status	OK
3794# check layout success:    1
3795REPAIR   TABLE t1 EXTENDED;
3796Table	Op	Msg_type	Msg_text
3797test.t1	repair	status	OK
3798# check layout success:    1
3799TRUNCATE t1;
3800
3801# check TRUNCATE success: 	1
3802# check layout success:    1
3803# End usability test (inc/partition_check.inc)
3804DROP TABLE t1;
3805#  1.3.2 PRIMARY KEY exists
3806DROP TABLE IF EXISTS t1;
3807CREATE TABLE t1 (
3808f_int1 INTEGER,
3809f_int2 INTEGER,
3810f_char1 CHAR(20),
3811f_char2 CHAR(20),
3812f_charbig VARCHAR(1000)
3813, PRIMARY KEY (f_int1,f_int2)
3814)
3815PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
3816INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3817SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3818WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
3819ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
3820INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
3821SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
3822WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
3823# Start usability test (inc/partition_check.inc)
3824create_command
3825SHOW CREATE TABLE t1;
3826Table	Create Table
3827t1	CREATE TABLE `t1` (
3828  `f_int1` bigint(20) NOT NULL,
3829  `f_int2` bigint(20) NOT NULL,
3830  `f_char1` char(20) DEFAULT NULL,
3831  `f_char2` char(20) DEFAULT NULL,
3832  `f_charbig` varchar(1000) DEFAULT NULL,
3833  PRIMARY KEY (`f_int1`,`f_int2`)
3834) ENGINE=InnoDB DEFAULT CHARSET=latin1
3835/*!50100 PARTITION BY HASH (f_int1 + f_int2)
3836PARTITIONS 2 */
3837
3838# check prerequisites-1 success:    1
3839# check COUNT(*) success:    1
3840# check MIN/MAX(f_int1) success:    1
3841# check MIN/MAX(f_int2) success:    1
3842INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3843SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
3844CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
3845WHERE f_int1 IN (2,3);
3846ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
3847# check prerequisites-3 success:    1
3848# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
3849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3850SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3851CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3852WHERE f_int1 IN (2,3);
3853DELETE FROM t1 WHERE f_charbig = 'delete me';
3854INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3855SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
3856CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
3857WHERE f_int1 IN (2,3);
3858DELETE FROM t1 WHERE f_charbig = 'delete me';
3859# check read via f_int1 success: 1
3860# check read via f_int2 success: 1
3861
3862# check multiple-1 success: 	1
3863DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
3864
3865# check multiple-2 success: 	1
3866INSERT INTO t1 SELECT * FROM t0_template
3867WHERE MOD(f_int1,3) = 0;
3868
3869# check multiple-3 success: 	1
3870UPDATE t1 SET f_int1 = f_int1 + @max_row
3871WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
3872AND @max_row_div2 + @max_row_div4;
3873
3874# check multiple-4 success: 	1
3875DELETE FROM t1
3876WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
3877AND @max_row_div2 + @max_row_div4 + @max_row;
3878
3879# check multiple-5 success: 	1
3880SELECT COUNT(*) INTO @try_count FROM t0_template
3881WHERE MOD(f_int1,3) = 0
3882AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3883SELECT COUNT(*) INTO @clash_count
3884FROM t1 INNER JOIN t0_template USING(f_int1)
3885WHERE MOD(f_int1,3) = 0
3886AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3887SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
3888INSERT INTO t1
3889SET f_int1 = @cur_value , f_int2 = @cur_value,
3890f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3891f_charbig = '#SINGLE#';
3892
3893# check single-1 success: 	1
3894SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
3895INSERT INTO t1
3896SET f_int1 = @cur_value , f_int2 = @cur_value,
3897f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
3898f_charbig = '#SINGLE#';
3899
3900# check single-2 success: 	1
3901SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
3902SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
3903UPDATE t1 SET f_int1 = @cur_value2
3904WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
3905
3906# check single-3 success: 	1
3907SET @cur_value1= -1;
3908SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
3909UPDATE t1 SET f_int1 = @cur_value1
3910WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
3911
3912# check single-4 success: 	1
3913SELECT MAX(f_int1) INTO @cur_value FROM t1;
3914DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
3915
3916# check single-5 success: 	1
3917DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
3918
3919# check single-6 success: 	1
3920INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
3921
3922# check single-7 success: 	1
3923DELETE FROM t1 WHERE f_charbig = '#2147483647##';
3924DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
3925INSERT t1 SET f_int1 = 0 , f_int2 = 0,
3926f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
3927f_charbig = '#NULL#';
3928INSERT INTO t1
3929SET f_int1 = NULL , f_int2 = -@max_row,
3930f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
3931f_charbig = '#NULL#';
3932ERROR 23000: Column 'f_int1' cannot be null
3933# check null success:    1
3934DELETE FROM t1
3935WHERE f_int1 = 0 AND f_int2 = 0
3936AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
3937AND f_charbig = '#NULL#';
3938INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3939SELECT f_int1, f_int1, '', '', 'was inserted'
3940   FROM t0_template source_tab
3941WHERE MOD(f_int1,3) = 0
3942AND f_int1 BETWEEN @max_row_div2 AND @max_row
3943ON DUPLICATE KEY
3944UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
3945f_int2 = 2 * @max_row + source_tab.f_int1,
3946f_charbig = 'was updated';
3947
3948# check unique-1-a success: 	1
3949
3950# check unique-1-b success: 	1
3951DELETE FROM t1 WHERE f_charbig = 'was inserted';
3952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
3953f_int2 = CAST(f_char1 AS SIGNED INT),
3954f_charbig = CONCAT('===',f_char1,'===')
3955WHERE f_charbig = 'was updated';
3956REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3957SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
3958   FROM t0_template source_tab
3959WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
3960
3961# check replace success: 	1
3962DELETE FROM t1
3963WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
3964DELETE FROM t1
3965WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
3966f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
3967UPDATE t1 SET f_int2 = f_int1,
3968f_char1 = CAST(f_int1 AS CHAR),
3969f_char2 = CAST(f_int1 AS CHAR),
3970f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
3971WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
3972SET AUTOCOMMIT= 0;
3973INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3974SELECT f_int1, f_int1, '', '', 'was inserted'
3975FROM t0_template source_tab
3976WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3977
3978# check transactions-1 success: 	1
3979COMMIT WORK;
3980
3981# check transactions-2 success: 	1
3982ROLLBACK WORK;
3983
3984# check transactions-3 success: 	1
3985DELETE FROM t1 WHERE f_charbig = 'was inserted';
3986COMMIT WORK;
3987ROLLBACK WORK;
3988
3989# check transactions-4 success: 	1
3990INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
3991SELECT f_int1, f_int1, '', '', 'was inserted'
3992FROM t0_template source_tab
3993WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
3994
3995# check transactions-5 success: 	1
3996ROLLBACK WORK;
3997
3998# check transactions-6 success: 	1
3999# INFO: Storage engine used for t1 seems to be transactional.
4000COMMIT;
4001
4002# check transactions-7 success: 	1
4003DELETE FROM t1 WHERE f_charbig = 'was inserted';
4004COMMIT WORK;
4005SET @@session.sql_mode = 'traditional';
4006Warnings:
4007Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4008SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4009INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4010SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4011'', '', 'was inserted' FROM t0_template
4012WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4013ERROR 22012: Division by 0
4014COMMIT;
4015
4016# check transactions-8 success: 	1
4017# INFO: Storage engine used for t1 seems to be able to revert
4018#       changes made by the failing statement.
4019SET @@session.sql_mode = '';
4020Warnings:
4021Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4022SET AUTOCOMMIT= 1;
4023DELETE FROM t1 WHERE f_charbig = 'was inserted';
4024COMMIT WORK;
4025UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4026
4027# check special-1 success: 	1
4028UPDATE t1 SET f_charbig = '';
4029
4030# check special-2 success: 	1
4031UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4032INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4033SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4034WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4035INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4036SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4037'just inserted' FROM t0_template
4038WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4039CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4040BEGIN
4041UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4042f_charbig = 'updated by trigger'
4043      WHERE f_int1 = new.f_int1;
4044END|
4045INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4046SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4047WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4048
4049# check trigger-1 success: 	1
4050DROP TRIGGER trg_1;
4051UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4052f_int2 = CAST(f_char1 AS SIGNED INT),
4053f_charbig = 'just inserted'
4054   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4055DELETE FROM t0_aux
4056WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4057INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4058SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4059'just inserted' FROM t0_template
4060WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4061CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4062BEGIN
4063UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4064f_charbig = 'updated by trigger'
4065      WHERE f_int1 = new.f_int1;
4066END|
4067INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4068SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4069WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4070
4071# check trigger-2 success: 	1
4072DROP TRIGGER trg_1;
4073UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4074f_int2 = CAST(f_char1 AS SIGNED INT),
4075f_charbig = 'just inserted'
4076   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4077DELETE FROM t0_aux
4078WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4079INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4080SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4081'just inserted' FROM t0_template
4082WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4083CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4084BEGIN
4085UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4086f_charbig = 'updated by trigger'
4087      WHERE f_int1 = new.f_int1;
4088END|
4089UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4090WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4091
4092# check trigger-3 success: 	1
4093DROP TRIGGER trg_1;
4094UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4095f_int2 = CAST(f_char1 AS SIGNED INT),
4096f_charbig = 'just inserted'
4097   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4098DELETE FROM t0_aux
4099WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4100INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4101SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4102'just inserted' FROM t0_template
4103WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4104CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4105BEGIN
4106UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4107f_charbig = 'updated by trigger'
4108      WHERE f_int1 = - old.f_int1;
4109END|
4110UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4111WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4112
4113# check trigger-4 success: 	1
4114DROP TRIGGER trg_1;
4115UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4116f_int2 = CAST(f_char1 AS SIGNED INT),
4117f_charbig = 'just inserted'
4118   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4119DELETE FROM t0_aux
4120WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4121INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4122SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4123'just inserted' FROM t0_template
4124WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4125CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4126BEGIN
4127UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4128f_charbig = 'updated by trigger'
4129      WHERE f_int1 = new.f_int1;
4130END|
4131UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4132WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4133
4134# check trigger-5 success: 	1
4135DROP TRIGGER trg_1;
4136UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4137f_int2 = CAST(f_char1 AS SIGNED INT),
4138f_charbig = 'just inserted'
4139   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4140DELETE FROM t0_aux
4141WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4142INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4143SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4144'just inserted' FROM t0_template
4145WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4146CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4147BEGIN
4148UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4149f_charbig = 'updated by trigger'
4150      WHERE f_int1 = - old.f_int1;
4151END|
4152UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4153WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4154
4155# check trigger-6 success: 	1
4156DROP TRIGGER trg_1;
4157UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4158f_int2 = CAST(f_char1 AS SIGNED INT),
4159f_charbig = 'just inserted'
4160   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4161DELETE FROM t0_aux
4162WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4163INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4164SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4165'just inserted' FROM t0_template
4166WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4167CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4168BEGIN
4169UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4170f_charbig = 'updated by trigger'
4171      WHERE f_int1 = - old.f_int1;
4172END|
4173DELETE FROM t0_aux
4174WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4175
4176# check trigger-7 success: 	1
4177DROP TRIGGER trg_1;
4178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4179f_int2 = CAST(f_char1 AS SIGNED INT),
4180f_charbig = 'just inserted'
4181   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4182DELETE FROM t0_aux
4183WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4184INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4185SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4186'just inserted' FROM t0_template
4187WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4188CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4189BEGIN
4190UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4191f_charbig = 'updated by trigger'
4192      WHERE f_int1 = - old.f_int1;
4193END|
4194DELETE FROM t0_aux
4195WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4196
4197# check trigger-8 success: 	1
4198DROP TRIGGER trg_1;
4199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4200f_int2 = CAST(f_char1 AS SIGNED INT),
4201f_charbig = 'just inserted'
4202   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4203DELETE FROM t0_aux
4204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4205DELETE FROM t1
4206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4207CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4208BEGIN
4209SET new.f_int1 = old.f_int1 + @max_row,
4210new.f_int2 = old.f_int2 - @max_row,
4211new.f_charbig = '####updated per update trigger####';
4212END|
4213UPDATE t1
4214SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4215f_charbig = '####updated per update statement itself####';
4216
4217# check trigger-9 success: 	1
4218DROP TRIGGER trg_2;
4219UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4220f_int2 = CAST(f_char1 AS SIGNED INT),
4221f_charbig = CONCAT('===',f_char1,'===');
4222CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4223BEGIN
4224SET new.f_int1 = new.f_int1 + @max_row,
4225new.f_int2 = new.f_int2 - @max_row,
4226new.f_charbig = '####updated per update trigger####';
4227END|
4228UPDATE t1
4229SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4230f_charbig = '####updated per update statement itself####';
4231
4232# check trigger-10 success: 	1
4233DROP TRIGGER trg_2;
4234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4235f_int2 = CAST(f_char1 AS SIGNED INT),
4236f_charbig = CONCAT('===',f_char1,'===');
4237CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4238BEGIN
4239SET new.f_int1 = @my_max1 + @counter,
4240new.f_int2 = @my_min2 - @counter,
4241new.f_charbig = '####updated per insert trigger####';
4242SET @counter = @counter + 1;
4243END|
4244SET @counter = 1;
4245SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4246INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4247SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4248CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4249WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4250ORDER BY f_int1;
4251DROP TRIGGER trg_3;
4252
4253# check trigger-11 success: 	1
4254DELETE FROM t1
4255WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4256AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4257AND f_charbig = '####updated per insert trigger####';
4258CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4259BEGIN
4260SET new.f_int1 = @my_max1 + @counter,
4261new.f_int2 = @my_min2 - @counter,
4262new.f_charbig = '####updated per insert trigger####';
4263SET @counter = @counter + 1;
4264END|
4265SET @counter = 1;
4266SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4267INSERT INTO t1 (f_char1, f_char2, f_charbig)
4268SELECT CAST(f_int1 AS CHAR),
4269CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4270WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4271ORDER BY f_int1;
4272DROP TRIGGER trg_3;
4273
4274# check trigger-12 success: 	1
4275DELETE FROM t1
4276WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4277AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4278AND f_charbig = '####updated per insert trigger####';
4279ANALYZE  TABLE t1;
4280Table	Op	Msg_type	Msg_text
4281test.t1	analyze	status	OK
4282CHECK    TABLE t1 EXTENDED;
4283Table	Op	Msg_type	Msg_text
4284test.t1	check	status	OK
4285CHECKSUM TABLE t1 EXTENDED;
4286Table	Checksum
4287test.t1	<some_value>
4288OPTIMIZE TABLE t1;
4289Table	Op	Msg_type	Msg_text
4290test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4291test.t1	optimize	status	OK
4292# check layout success:    1
4293REPAIR   TABLE t1 EXTENDED;
4294Table	Op	Msg_type	Msg_text
4295test.t1	repair	status	OK
4296# check layout success:    1
4297TRUNCATE t1;
4298
4299# check TRUNCATE success: 	1
4300# check layout success:    1
4301# End usability test (inc/partition_check.inc)
4302DROP TABLE t1;
4303CREATE TABLE t1 (
4304f_int1 INTEGER,
4305f_int2 INTEGER,
4306f_char1 CHAR(20),
4307f_char2 CHAR(20),
4308f_charbig VARCHAR(1000)
4309, PRIMARY KEY (f_int1,f_int2)
4310)
4311PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
4312INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4313SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4314WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4315ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
4316INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4317SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4318WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4319# Start usability test (inc/partition_check.inc)
4320create_command
4321SHOW CREATE TABLE t1;
4322Table	Create Table
4323t1	CREATE TABLE `t1` (
4324  `f_int1` bigint(20) NOT NULL,
4325  `f_int2` bigint(20) NOT NULL,
4326  `f_char1` char(20) DEFAULT NULL,
4327  `f_char2` char(20) DEFAULT NULL,
4328  `f_charbig` varchar(1000) DEFAULT NULL,
4329  PRIMARY KEY (`f_int1`,`f_int2`)
4330) ENGINE=InnoDB DEFAULT CHARSET=latin1
4331/*!50100 PARTITION BY KEY (f_int1,f_int2)
4332PARTITIONS 5 */
4333
4334# check prerequisites-1 success:    1
4335# check COUNT(*) success:    1
4336# check MIN/MAX(f_int1) success:    1
4337# check MIN/MAX(f_int2) success:    1
4338INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4339SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4340CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4341WHERE f_int1 IN (2,3);
4342ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4343# check prerequisites-3 success:    1
4344# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4345INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4346SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4347CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4348WHERE f_int1 IN (2,3);
4349DELETE FROM t1 WHERE f_charbig = 'delete me';
4350INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4351SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4352CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4353WHERE f_int1 IN (2,3);
4354DELETE FROM t1 WHERE f_charbig = 'delete me';
4355# check read via f_int1 success: 1
4356# check read via f_int2 success: 1
4357
4358# check multiple-1 success: 	1
4359DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4360
4361# check multiple-2 success: 	1
4362INSERT INTO t1 SELECT * FROM t0_template
4363WHERE MOD(f_int1,3) = 0;
4364
4365# check multiple-3 success: 	1
4366UPDATE t1 SET f_int1 = f_int1 + @max_row
4367WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4368AND @max_row_div2 + @max_row_div4;
4369
4370# check multiple-4 success: 	1
4371DELETE FROM t1
4372WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4373AND @max_row_div2 + @max_row_div4 + @max_row;
4374
4375# check multiple-5 success: 	1
4376SELECT COUNT(*) INTO @try_count FROM t0_template
4377WHERE MOD(f_int1,3) = 0
4378AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4379SELECT COUNT(*) INTO @clash_count
4380FROM t1 INNER JOIN t0_template USING(f_int1)
4381WHERE MOD(f_int1,3) = 0
4382AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4383SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4384INSERT INTO t1
4385SET f_int1 = @cur_value , f_int2 = @cur_value,
4386f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4387f_charbig = '#SINGLE#';
4388
4389# check single-1 success: 	1
4390SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4391INSERT INTO t1
4392SET f_int1 = @cur_value , f_int2 = @cur_value,
4393f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4394f_charbig = '#SINGLE#';
4395
4396# check single-2 success: 	1
4397SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4398SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4399UPDATE t1 SET f_int1 = @cur_value2
4400WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4401
4402# check single-3 success: 	1
4403SET @cur_value1= -1;
4404SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4405UPDATE t1 SET f_int1 = @cur_value1
4406WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4407
4408# check single-4 success: 	1
4409SELECT MAX(f_int1) INTO @cur_value FROM t1;
4410DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4411
4412# check single-5 success: 	1
4413DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4414
4415# check single-6 success: 	1
4416INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4417
4418# check single-7 success: 	1
4419DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4420DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4421INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4422f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4423f_charbig = '#NULL#';
4424INSERT INTO t1
4425SET f_int1 = NULL , f_int2 = -@max_row,
4426f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4427f_charbig = '#NULL#';
4428ERROR 23000: Column 'f_int1' cannot be null
4429# check null success:    1
4430DELETE FROM t1
4431WHERE f_int1 = 0 AND f_int2 = 0
4432AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4433AND f_charbig = '#NULL#';
4434INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4435SELECT f_int1, f_int1, '', '', 'was inserted'
4436   FROM t0_template source_tab
4437WHERE MOD(f_int1,3) = 0
4438AND f_int1 BETWEEN @max_row_div2 AND @max_row
4439ON DUPLICATE KEY
4440UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4441f_int2 = 2 * @max_row + source_tab.f_int1,
4442f_charbig = 'was updated';
4443
4444# check unique-1-a success: 	1
4445
4446# check unique-1-b success: 	1
4447DELETE FROM t1 WHERE f_charbig = 'was inserted';
4448UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4449f_int2 = CAST(f_char1 AS SIGNED INT),
4450f_charbig = CONCAT('===',f_char1,'===')
4451WHERE f_charbig = 'was updated';
4452REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4453SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4454   FROM t0_template source_tab
4455WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4456
4457# check replace success: 	1
4458DELETE FROM t1
4459WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4460DELETE FROM t1
4461WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4462f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4463UPDATE t1 SET f_int2 = f_int1,
4464f_char1 = CAST(f_int1 AS CHAR),
4465f_char2 = CAST(f_int1 AS CHAR),
4466f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4467WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4468SET AUTOCOMMIT= 0;
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-1 success: 	1
4475COMMIT WORK;
4476
4477# check transactions-2 success: 	1
4478ROLLBACK WORK;
4479
4480# check transactions-3 success: 	1
4481DELETE FROM t1 WHERE f_charbig = 'was inserted';
4482COMMIT WORK;
4483ROLLBACK WORK;
4484
4485# check transactions-4 success: 	1
4486INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4487SELECT f_int1, f_int1, '', '', 'was inserted'
4488FROM t0_template source_tab
4489WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4490
4491# check transactions-5 success: 	1
4492ROLLBACK WORK;
4493
4494# check transactions-6 success: 	1
4495# INFO: Storage engine used for t1 seems to be transactional.
4496COMMIT;
4497
4498# check transactions-7 success: 	1
4499DELETE FROM t1 WHERE f_charbig = 'was inserted';
4500COMMIT WORK;
4501SET @@session.sql_mode = 'traditional';
4502Warnings:
4503Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4504SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
4505INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4506SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
4507'', '', 'was inserted' FROM t0_template
4508WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4509ERROR 22012: Division by 0
4510COMMIT;
4511
4512# check transactions-8 success: 	1
4513# INFO: Storage engine used for t1 seems to be able to revert
4514#       changes made by the failing statement.
4515SET @@session.sql_mode = '';
4516Warnings:
4517Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
4518SET AUTOCOMMIT= 1;
4519DELETE FROM t1 WHERE f_charbig = 'was inserted';
4520COMMIT WORK;
4521UPDATE t1 SET f_charbig = REPEAT('b', 1000);
4522
4523# check special-1 success: 	1
4524UPDATE t1 SET f_charbig = '';
4525
4526# check special-2 success: 	1
4527UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
4528INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4529SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
4530WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4531INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4532SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4533'just inserted' FROM t0_template
4534WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4535CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
4536BEGIN
4537UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4538f_charbig = 'updated by trigger'
4539      WHERE f_int1 = new.f_int1;
4540END|
4541INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4542SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4543WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4544
4545# check trigger-1 success: 	1
4546DROP TRIGGER trg_1;
4547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4548f_int2 = CAST(f_char1 AS SIGNED INT),
4549f_charbig = 'just inserted'
4550   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4551DELETE FROM t0_aux
4552WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4553INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4554SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4555'just inserted' FROM t0_template
4556WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4557CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
4558BEGIN
4559UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4560f_charbig = 'updated by trigger'
4561      WHERE f_int1 = new.f_int1;
4562END|
4563INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4564SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
4565WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4566
4567# check trigger-2 success: 	1
4568DROP TRIGGER trg_1;
4569UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4570f_int2 = CAST(f_char1 AS SIGNED INT),
4571f_charbig = 'just inserted'
4572   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4573DELETE FROM t0_aux
4574WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4575INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4576SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4577'just inserted' FROM t0_template
4578WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4579CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4580BEGIN
4581UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4582f_charbig = 'updated by trigger'
4583      WHERE f_int1 = new.f_int1;
4584END|
4585UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4586WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4587
4588# check trigger-3 success: 	1
4589DROP TRIGGER trg_1;
4590UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4591f_int2 = CAST(f_char1 AS SIGNED INT),
4592f_charbig = 'just inserted'
4593   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4594DELETE FROM t0_aux
4595WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4597SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4598'just inserted' FROM t0_template
4599WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4600CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
4601BEGIN
4602UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4603f_charbig = 'updated by trigger'
4604      WHERE f_int1 = - old.f_int1;
4605END|
4606UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4607WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4608
4609# check trigger-4 success: 	1
4610DROP TRIGGER trg_1;
4611UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4612f_int2 = CAST(f_char1 AS SIGNED INT),
4613f_charbig = 'just inserted'
4614   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4615DELETE FROM t0_aux
4616WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4617INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4618SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4619'just inserted' FROM t0_template
4620WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4621CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4622BEGIN
4623UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4624f_charbig = 'updated by trigger'
4625      WHERE f_int1 = new.f_int1;
4626END|
4627UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4628WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4629
4630# check trigger-5 success: 	1
4631DROP TRIGGER trg_1;
4632UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4633f_int2 = CAST(f_char1 AS SIGNED INT),
4634f_charbig = 'just inserted'
4635   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4636DELETE FROM t0_aux
4637WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4638INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4639SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4640'just inserted' FROM t0_template
4641WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4642CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
4643BEGIN
4644UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4645f_charbig = 'updated by trigger'
4646      WHERE f_int1 = - old.f_int1;
4647END|
4648UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
4649WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4650
4651# check trigger-6 success: 	1
4652DROP TRIGGER trg_1;
4653UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4654f_int2 = CAST(f_char1 AS SIGNED INT),
4655f_charbig = 'just inserted'
4656   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4657DELETE FROM t0_aux
4658WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4659INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4660SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4661'just inserted' FROM t0_template
4662WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4663CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
4664BEGIN
4665UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4666f_charbig = 'updated by trigger'
4667      WHERE f_int1 = - old.f_int1;
4668END|
4669DELETE FROM t0_aux
4670WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4671
4672# check trigger-7 success: 	1
4673DROP TRIGGER trg_1;
4674UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4675f_int2 = CAST(f_char1 AS SIGNED INT),
4676f_charbig = 'just inserted'
4677   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4678DELETE FROM t0_aux
4679WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4680INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
4681SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
4682'just inserted' FROM t0_template
4683WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4684CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
4685BEGIN
4686UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
4687f_charbig = 'updated by trigger'
4688      WHERE f_int1 = - old.f_int1;
4689END|
4690DELETE FROM t0_aux
4691WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
4692
4693# check trigger-8 success: 	1
4694DROP TRIGGER trg_1;
4695UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4696f_int2 = CAST(f_char1 AS SIGNED INT),
4697f_charbig = 'just inserted'
4698   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
4699DELETE FROM t0_aux
4700WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4701DELETE FROM t1
4702WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
4703CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4704BEGIN
4705SET new.f_int1 = old.f_int1 + @max_row,
4706new.f_int2 = old.f_int2 - @max_row,
4707new.f_charbig = '####updated per update trigger####';
4708END|
4709UPDATE t1
4710SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4711f_charbig = '####updated per update statement itself####';
4712
4713# check trigger-9 success: 	1
4714DROP TRIGGER trg_2;
4715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4716f_int2 = CAST(f_char1 AS SIGNED INT),
4717f_charbig = CONCAT('===',f_char1,'===');
4718CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
4719BEGIN
4720SET new.f_int1 = new.f_int1 + @max_row,
4721new.f_int2 = new.f_int2 - @max_row,
4722new.f_charbig = '####updated per update trigger####';
4723END|
4724UPDATE t1
4725SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
4726f_charbig = '####updated per update statement itself####';
4727
4728# check trigger-10 success: 	1
4729DROP TRIGGER trg_2;
4730UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4731f_int2 = CAST(f_char1 AS SIGNED INT),
4732f_charbig = CONCAT('===',f_char1,'===');
4733CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4734BEGIN
4735SET new.f_int1 = @my_max1 + @counter,
4736new.f_int2 = @my_min2 - @counter,
4737new.f_charbig = '####updated per insert trigger####';
4738SET @counter = @counter + 1;
4739END|
4740SET @counter = 1;
4741SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4742INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4743SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4744CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4746ORDER BY f_int1;
4747DROP TRIGGER trg_3;
4748
4749# check trigger-11 success: 	1
4750DELETE FROM t1
4751WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4752AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4753AND f_charbig = '####updated per insert trigger####';
4754CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
4755BEGIN
4756SET new.f_int1 = @my_max1 + @counter,
4757new.f_int2 = @my_min2 - @counter,
4758new.f_charbig = '####updated per insert trigger####';
4759SET @counter = @counter + 1;
4760END|
4761SET @counter = 1;
4762SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
4763INSERT INTO t1 (f_char1, f_char2, f_charbig)
4764SELECT CAST(f_int1 AS CHAR),
4765CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
4766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
4767ORDER BY f_int1;
4768DROP TRIGGER trg_3;
4769
4770# check trigger-12 success: 	1
4771DELETE FROM t1
4772WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
4773AND f_int2 <> CAST(f_char1 AS SIGNED INT)
4774AND f_charbig = '####updated per insert trigger####';
4775ANALYZE  TABLE t1;
4776Table	Op	Msg_type	Msg_text
4777test.t1	analyze	status	OK
4778CHECK    TABLE t1 EXTENDED;
4779Table	Op	Msg_type	Msg_text
4780test.t1	check	status	OK
4781CHECKSUM TABLE t1 EXTENDED;
4782Table	Checksum
4783test.t1	<some_value>
4784OPTIMIZE TABLE t1;
4785Table	Op	Msg_type	Msg_text
4786test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
4787test.t1	optimize	status	OK
4788# check layout success:    1
4789REPAIR   TABLE t1 EXTENDED;
4790Table	Op	Msg_type	Msg_text
4791test.t1	repair	status	OK
4792# check layout success:    1
4793TRUNCATE t1;
4794
4795# check TRUNCATE success: 	1
4796# check layout success:    1
4797# End usability test (inc/partition_check.inc)
4798DROP TABLE t1;
4799CREATE TABLE t1 (
4800f_int1 INTEGER,
4801f_int2 INTEGER,
4802f_char1 CHAR(20),
4803f_char2 CHAR(20),
4804f_charbig VARCHAR(1000)
4805, PRIMARY KEY (f_int1,f_int2)
4806)
4807PARTITION BY LIST(MOD(f_int1 + f_int2,4))
4808(PARTITION part_3 VALUES IN (-3),
4809PARTITION part_2 VALUES IN (-2),
4810PARTITION part_1 VALUES IN (-1),
4811PARTITION part_N VALUES IN (NULL),
4812PARTITION part0 VALUES IN (0),
4813PARTITION part1 VALUES IN (1),
4814PARTITION part2 VALUES IN (2),
4815PARTITION part3 VALUES IN (3));
4816INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4817SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4818WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
4819ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
4820INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
4821SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
4822WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
4823# Start usability test (inc/partition_check.inc)
4824create_command
4825SHOW CREATE TABLE t1;
4826Table	Create Table
4827t1	CREATE TABLE `t1` (
4828  `f_int1` bigint(20) NOT NULL,
4829  `f_int2` bigint(20) NOT NULL,
4830  `f_char1` char(20) DEFAULT NULL,
4831  `f_char2` char(20) DEFAULT NULL,
4832  `f_charbig` varchar(1000) DEFAULT NULL,
4833  PRIMARY KEY (`f_int1`,`f_int2`)
4834) ENGINE=InnoDB DEFAULT CHARSET=latin1
4835/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
4836(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
4837 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
4838 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
4839 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
4840 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
4841 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
4842 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
4843 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
4844
4845# check prerequisites-1 success:    1
4846# check COUNT(*) success:    1
4847# check MIN/MAX(f_int1) success:    1
4848# check MIN/MAX(f_int2) success:    1
4849INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4850SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
4851CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
4852WHERE f_int1 IN (2,3);
4853ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
4854# check prerequisites-3 success:    1
4855# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
4856INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4857SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4858CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4859WHERE f_int1 IN (2,3);
4860DELETE FROM t1 WHERE f_charbig = 'delete me';
4861INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4862SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
4863CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
4864WHERE f_int1 IN (2,3);
4865DELETE FROM t1 WHERE f_charbig = 'delete me';
4866# check read via f_int1 success: 1
4867# check read via f_int2 success: 1
4868
4869# check multiple-1 success: 	1
4870DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
4871
4872# check multiple-2 success: 	1
4873INSERT INTO t1 SELECT * FROM t0_template
4874WHERE MOD(f_int1,3) = 0;
4875
4876# check multiple-3 success: 	1
4877UPDATE t1 SET f_int1 = f_int1 + @max_row
4878WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
4879AND @max_row_div2 + @max_row_div4;
4880
4881# check multiple-4 success: 	1
4882DELETE FROM t1
4883WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
4884AND @max_row_div2 + @max_row_div4 + @max_row;
4885
4886# check multiple-5 success: 	1
4887SELECT COUNT(*) INTO @try_count FROM t0_template
4888WHERE MOD(f_int1,3) = 0
4889AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4890SELECT COUNT(*) INTO @clash_count
4891FROM t1 INNER JOIN t0_template USING(f_int1)
4892WHERE MOD(f_int1,3) = 0
4893AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4894SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
4895INSERT INTO t1
4896SET f_int1 = @cur_value , f_int2 = @cur_value,
4897f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4898f_charbig = '#SINGLE#';
4899
4900# check single-1 success: 	1
4901SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
4902INSERT INTO t1
4903SET f_int1 = @cur_value , f_int2 = @cur_value,
4904f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
4905f_charbig = '#SINGLE#';
4906
4907# check single-2 success: 	1
4908SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
4909SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
4910UPDATE t1 SET f_int1 = @cur_value2
4911WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
4912
4913# check single-3 success: 	1
4914SET @cur_value1= -1;
4915SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
4916UPDATE t1 SET f_int1 = @cur_value1
4917WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
4918
4919# check single-4 success: 	1
4920SELECT MAX(f_int1) INTO @cur_value FROM t1;
4921DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
4922
4923# check single-5 success: 	1
4924DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
4925
4926# check single-6 success: 	1
4927INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
4928
4929# check single-7 success: 	1
4930DELETE FROM t1 WHERE f_charbig = '#2147483647##';
4931DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
4932INSERT t1 SET f_int1 = 0 , f_int2 = 0,
4933f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
4934f_charbig = '#NULL#';
4935INSERT INTO t1
4936SET f_int1 = NULL , f_int2 = -@max_row,
4937f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
4938f_charbig = '#NULL#';
4939ERROR 23000: Column 'f_int1' cannot be null
4940# check null success:    1
4941DELETE FROM t1
4942WHERE f_int1 = 0 AND f_int2 = 0
4943AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
4944AND f_charbig = '#NULL#';
4945INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4946SELECT f_int1, f_int1, '', '', 'was inserted'
4947   FROM t0_template source_tab
4948WHERE MOD(f_int1,3) = 0
4949AND f_int1 BETWEEN @max_row_div2 AND @max_row
4950ON DUPLICATE KEY
4951UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
4952f_int2 = 2 * @max_row + source_tab.f_int1,
4953f_charbig = 'was updated';
4954
4955# check unique-1-a success: 	1
4956
4957# check unique-1-b success: 	1
4958DELETE FROM t1 WHERE f_charbig = 'was inserted';
4959UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
4960f_int2 = CAST(f_char1 AS SIGNED INT),
4961f_charbig = CONCAT('===',f_char1,'===')
4962WHERE f_charbig = 'was updated';
4963REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4964SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
4965   FROM t0_template source_tab
4966WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
4967
4968# check replace success: 	1
4969DELETE FROM t1
4970WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
4971DELETE FROM t1
4972WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
4973f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
4974UPDATE t1 SET f_int2 = f_int1,
4975f_char1 = CAST(f_int1 AS CHAR),
4976f_char2 = CAST(f_int1 AS CHAR),
4977f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
4978WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
4979SET AUTOCOMMIT= 0;
4980INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4981SELECT f_int1, f_int1, '', '', 'was inserted'
4982FROM t0_template source_tab
4983WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
4984
4985# check transactions-1 success: 	1
4986COMMIT WORK;
4987
4988# check transactions-2 success: 	1
4989ROLLBACK WORK;
4990
4991# check transactions-3 success: 	1
4992DELETE FROM t1 WHERE f_charbig = 'was inserted';
4993COMMIT WORK;
4994ROLLBACK WORK;
4995
4996# check transactions-4 success: 	1
4997INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
4998SELECT f_int1, f_int1, '', '', 'was inserted'
4999FROM t0_template source_tab
5000WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5001
5002# check transactions-5 success: 	1
5003ROLLBACK WORK;
5004
5005# check transactions-6 success: 	1
5006# INFO: Storage engine used for t1 seems to be transactional.
5007COMMIT;
5008
5009# check transactions-7 success: 	1
5010DELETE FROM t1 WHERE f_charbig = 'was inserted';
5011COMMIT WORK;
5012SET @@session.sql_mode = 'traditional';
5013Warnings:
5014Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5015SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5017SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5018'', '', 'was inserted' FROM t0_template
5019WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5020ERROR 22012: Division by 0
5021COMMIT;
5022
5023# check transactions-8 success: 	1
5024# INFO: Storage engine used for t1 seems to be able to revert
5025#       changes made by the failing statement.
5026SET @@session.sql_mode = '';
5027Warnings:
5028Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5029SET AUTOCOMMIT= 1;
5030DELETE FROM t1 WHERE f_charbig = 'was inserted';
5031COMMIT WORK;
5032UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5033
5034# check special-1 success: 	1
5035UPDATE t1 SET f_charbig = '';
5036
5037# check special-2 success: 	1
5038UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5039INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5040SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5041WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5042INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5043SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5044'just inserted' FROM t0_template
5045WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5046CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5047BEGIN
5048UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5049f_charbig = 'updated by trigger'
5050      WHERE f_int1 = new.f_int1;
5051END|
5052INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5053SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5054WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5055
5056# check trigger-1 success: 	1
5057DROP TRIGGER trg_1;
5058UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5059f_int2 = CAST(f_char1 AS SIGNED INT),
5060f_charbig = 'just inserted'
5061   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5062DELETE FROM t0_aux
5063WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5064INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5065SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5066'just inserted' FROM t0_template
5067WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5068CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5069BEGIN
5070UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5071f_charbig = 'updated by trigger'
5072      WHERE f_int1 = new.f_int1;
5073END|
5074INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5075SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5076WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5077
5078# check trigger-2 success: 	1
5079DROP TRIGGER trg_1;
5080UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5081f_int2 = CAST(f_char1 AS SIGNED INT),
5082f_charbig = 'just inserted'
5083   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5084DELETE FROM t0_aux
5085WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5086INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5087SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5088'just inserted' FROM t0_template
5089WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5090CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5091BEGIN
5092UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5093f_charbig = 'updated by trigger'
5094      WHERE f_int1 = new.f_int1;
5095END|
5096UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5097WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5098
5099# check trigger-3 success: 	1
5100DROP TRIGGER trg_1;
5101UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5102f_int2 = CAST(f_char1 AS SIGNED INT),
5103f_charbig = 'just inserted'
5104   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5105DELETE FROM t0_aux
5106WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5108SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5109'just inserted' FROM t0_template
5110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5111CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5112BEGIN
5113UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5114f_charbig = 'updated by trigger'
5115      WHERE f_int1 = - old.f_int1;
5116END|
5117UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5118WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5119
5120# check trigger-4 success: 	1
5121DROP TRIGGER trg_1;
5122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5123f_int2 = CAST(f_char1 AS SIGNED INT),
5124f_charbig = 'just inserted'
5125   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5126DELETE FROM t0_aux
5127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5130'just inserted' FROM t0_template
5131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5132CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5133BEGIN
5134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5135f_charbig = 'updated by trigger'
5136      WHERE f_int1 = new.f_int1;
5137END|
5138UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5140
5141# check trigger-5 success: 	1
5142DROP TRIGGER trg_1;
5143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5144f_int2 = CAST(f_char1 AS SIGNED INT),
5145f_charbig = 'just inserted'
5146   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5147DELETE FROM t0_aux
5148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5149INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5150SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5151'just inserted' FROM t0_template
5152WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5153CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5154BEGIN
5155UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5156f_charbig = 'updated by trigger'
5157      WHERE f_int1 = - old.f_int1;
5158END|
5159UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5160WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5161
5162# check trigger-6 success: 	1
5163DROP TRIGGER trg_1;
5164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5165f_int2 = CAST(f_char1 AS SIGNED INT),
5166f_charbig = 'just inserted'
5167   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5168DELETE FROM t0_aux
5169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5172'just inserted' FROM t0_template
5173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5174CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5175BEGIN
5176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5177f_charbig = 'updated by trigger'
5178      WHERE f_int1 = - old.f_int1;
5179END|
5180DELETE FROM t0_aux
5181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5182
5183# check trigger-7 success: 	1
5184DROP TRIGGER trg_1;
5185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5186f_int2 = CAST(f_char1 AS SIGNED INT),
5187f_charbig = 'just inserted'
5188   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5189DELETE FROM t0_aux
5190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5193'just inserted' FROM t0_template
5194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5195CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5196BEGIN
5197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5198f_charbig = 'updated by trigger'
5199      WHERE f_int1 = - old.f_int1;
5200END|
5201DELETE FROM t0_aux
5202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5203
5204# check trigger-8 success: 	1
5205DROP TRIGGER trg_1;
5206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5207f_int2 = CAST(f_char1 AS SIGNED INT),
5208f_charbig = 'just inserted'
5209   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5210DELETE FROM t0_aux
5211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5212DELETE FROM t1
5213WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5214CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5215BEGIN
5216SET new.f_int1 = old.f_int1 + @max_row,
5217new.f_int2 = old.f_int2 - @max_row,
5218new.f_charbig = '####updated per update trigger####';
5219END|
5220UPDATE t1
5221SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5222f_charbig = '####updated per update statement itself####';
5223
5224# check trigger-9 success: 	1
5225DROP TRIGGER trg_2;
5226UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5227f_int2 = CAST(f_char1 AS SIGNED INT),
5228f_charbig = CONCAT('===',f_char1,'===');
5229CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5230BEGIN
5231SET new.f_int1 = new.f_int1 + @max_row,
5232new.f_int2 = new.f_int2 - @max_row,
5233new.f_charbig = '####updated per update trigger####';
5234END|
5235UPDATE t1
5236SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5237f_charbig = '####updated per update statement itself####';
5238
5239# check trigger-10 success: 	1
5240DROP TRIGGER trg_2;
5241UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5242f_int2 = CAST(f_char1 AS SIGNED INT),
5243f_charbig = CONCAT('===',f_char1,'===');
5244CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5245BEGIN
5246SET new.f_int1 = @my_max1 + @counter,
5247new.f_int2 = @my_min2 - @counter,
5248new.f_charbig = '####updated per insert trigger####';
5249SET @counter = @counter + 1;
5250END|
5251SET @counter = 1;
5252SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5253INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5254SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5255CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5256WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5257ORDER BY f_int1;
5258DROP TRIGGER trg_3;
5259
5260# check trigger-11 success: 	1
5261DELETE FROM t1
5262WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5263AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5264AND f_charbig = '####updated per insert trigger####';
5265CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5266BEGIN
5267SET new.f_int1 = @my_max1 + @counter,
5268new.f_int2 = @my_min2 - @counter,
5269new.f_charbig = '####updated per insert trigger####';
5270SET @counter = @counter + 1;
5271END|
5272SET @counter = 1;
5273SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5274INSERT INTO t1 (f_char1, f_char2, f_charbig)
5275SELECT CAST(f_int1 AS CHAR),
5276CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5277WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5278ORDER BY f_int1;
5279DROP TRIGGER trg_3;
5280
5281# check trigger-12 success: 	1
5282DELETE FROM t1
5283WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5284AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5285AND f_charbig = '####updated per insert trigger####';
5286ANALYZE  TABLE t1;
5287Table	Op	Msg_type	Msg_text
5288test.t1	analyze	status	OK
5289CHECK    TABLE t1 EXTENDED;
5290Table	Op	Msg_type	Msg_text
5291test.t1	check	status	OK
5292CHECKSUM TABLE t1 EXTENDED;
5293Table	Checksum
5294test.t1	<some_value>
5295OPTIMIZE TABLE t1;
5296Table	Op	Msg_type	Msg_text
5297test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5298test.t1	optimize	status	OK
5299# check layout success:    1
5300REPAIR   TABLE t1 EXTENDED;
5301Table	Op	Msg_type	Msg_text
5302test.t1	repair	status	OK
5303# check layout success:    1
5304TRUNCATE t1;
5305
5306# check TRUNCATE success: 	1
5307# check layout success:    1
5308# End usability test (inc/partition_check.inc)
5309DROP TABLE t1;
5310CREATE TABLE t1 (
5311f_int1 INTEGER,
5312f_int2 INTEGER,
5313f_char1 CHAR(20),
5314f_char2 CHAR(20),
5315f_charbig VARCHAR(1000)
5316, PRIMARY KEY (f_int1,f_int2)
5317)
5318PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
5319(PARTITION parta VALUES LESS THAN (0),
5320PARTITION partb VALUES LESS THAN (5),
5321PARTITION partc VALUES LESS THAN (10),
5322PARTITION partd VALUES LESS THAN (10 + 5),
5323PARTITION parte VALUES LESS THAN (20),
5324PARTITION partf VALUES LESS THAN (2147483646));
5325INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5326SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5327WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5328ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
5329INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5330SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5331WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5332# Start usability test (inc/partition_check.inc)
5333create_command
5334SHOW CREATE TABLE t1;
5335Table	Create Table
5336t1	CREATE TABLE `t1` (
5337  `f_int1` bigint(20) NOT NULL,
5338  `f_int2` bigint(20) NOT NULL,
5339  `f_char1` char(20) DEFAULT NULL,
5340  `f_char2` char(20) DEFAULT NULL,
5341  `f_charbig` varchar(1000) DEFAULT NULL,
5342  PRIMARY KEY (`f_int1`,`f_int2`)
5343) ENGINE=InnoDB DEFAULT CHARSET=latin1
5344/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
5345(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5346 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5347 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5348 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
5349 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
5350 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5351
5352# check prerequisites-1 success:    1
5353# check COUNT(*) success:    1
5354# check MIN/MAX(f_int1) success:    1
5355# check MIN/MAX(f_int2) success:    1
5356INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5357SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5358CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5359WHERE f_int1 IN (2,3);
5360ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5361# check prerequisites-3 success:    1
5362# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5363INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5364SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5365CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5366WHERE f_int1 IN (2,3);
5367DELETE FROM t1 WHERE f_charbig = 'delete me';
5368INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5369SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5370CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5371WHERE f_int1 IN (2,3);
5372DELETE FROM t1 WHERE f_charbig = 'delete me';
5373# check read via f_int1 success: 1
5374# check read via f_int2 success: 1
5375
5376# check multiple-1 success: 	1
5377DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5378
5379# check multiple-2 success: 	1
5380INSERT INTO t1 SELECT * FROM t0_template
5381WHERE MOD(f_int1,3) = 0;
5382
5383# check multiple-3 success: 	1
5384UPDATE t1 SET f_int1 = f_int1 + @max_row
5385WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5386AND @max_row_div2 + @max_row_div4;
5387
5388# check multiple-4 success: 	1
5389DELETE FROM t1
5390WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5391AND @max_row_div2 + @max_row_div4 + @max_row;
5392
5393# check multiple-5 success: 	1
5394SELECT COUNT(*) INTO @try_count FROM t0_template
5395WHERE MOD(f_int1,3) = 0
5396AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5397SELECT COUNT(*) INTO @clash_count
5398FROM t1 INNER JOIN t0_template USING(f_int1)
5399WHERE MOD(f_int1,3) = 0
5400AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5401SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5402INSERT INTO t1
5403SET f_int1 = @cur_value , f_int2 = @cur_value,
5404f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5405f_charbig = '#SINGLE#';
5406
5407# check single-1 success: 	1
5408SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5409INSERT INTO t1
5410SET f_int1 = @cur_value , f_int2 = @cur_value,
5411f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5412f_charbig = '#SINGLE#';
5413
5414# check single-2 success: 	1
5415SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5416SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5417UPDATE t1 SET f_int1 = @cur_value2
5418WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5419
5420# check single-3 success: 	1
5421SET @cur_value1= -1;
5422SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5423UPDATE t1 SET f_int1 = @cur_value1
5424WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5425
5426# check single-4 success: 	1
5427SELECT MAX(f_int1) INTO @cur_value FROM t1;
5428DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5429
5430# check single-5 success: 	1
5431DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5432
5433# check single-6 success: 	1
5434INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5435ERROR HY000: Table has no partition for value 2147483647
5436DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5437INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5438f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5439f_charbig = '#NULL#';
5440INSERT INTO t1
5441SET f_int1 = NULL , f_int2 = -@max_row,
5442f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5443f_charbig = '#NULL#';
5444ERROR 23000: Column 'f_int1' cannot be null
5445# check null success:    1
5446DELETE FROM t1
5447WHERE f_int1 = 0 AND f_int2 = 0
5448AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5449AND f_charbig = '#NULL#';
5450INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5451SELECT f_int1, f_int1, '', '', 'was inserted'
5452   FROM t0_template source_tab
5453WHERE MOD(f_int1,3) = 0
5454AND f_int1 BETWEEN @max_row_div2 AND @max_row
5455ON DUPLICATE KEY
5456UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5457f_int2 = 2 * @max_row + source_tab.f_int1,
5458f_charbig = 'was updated';
5459
5460# check unique-1-a success: 	1
5461
5462# check unique-1-b success: 	1
5463DELETE FROM t1 WHERE f_charbig = 'was inserted';
5464UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5465f_int2 = CAST(f_char1 AS SIGNED INT),
5466f_charbig = CONCAT('===',f_char1,'===')
5467WHERE f_charbig = 'was updated';
5468REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5469SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5470   FROM t0_template source_tab
5471WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5472
5473# check replace success: 	1
5474DELETE FROM t1
5475WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5476DELETE FROM t1
5477WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5478f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5479UPDATE t1 SET f_int2 = f_int1,
5480f_char1 = CAST(f_int1 AS CHAR),
5481f_char2 = CAST(f_int1 AS CHAR),
5482f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5483WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5484SET AUTOCOMMIT= 0;
5485INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5486SELECT f_int1, f_int1, '', '', 'was inserted'
5487FROM t0_template source_tab
5488WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5489
5490# check transactions-1 success: 	1
5491COMMIT WORK;
5492
5493# check transactions-2 success: 	1
5494ROLLBACK WORK;
5495
5496# check transactions-3 success: 	1
5497DELETE FROM t1 WHERE f_charbig = 'was inserted';
5498COMMIT WORK;
5499ROLLBACK WORK;
5500
5501# check transactions-4 success: 	1
5502INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5503SELECT f_int1, f_int1, '', '', 'was inserted'
5504FROM t0_template source_tab
5505WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5506
5507# check transactions-5 success: 	1
5508ROLLBACK WORK;
5509
5510# check transactions-6 success: 	1
5511# INFO: Storage engine used for t1 seems to be transactional.
5512COMMIT;
5513
5514# check transactions-7 success: 	1
5515DELETE FROM t1 WHERE f_charbig = 'was inserted';
5516COMMIT WORK;
5517SET @@session.sql_mode = 'traditional';
5518Warnings:
5519Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5520SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
5521INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5522SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
5523'', '', 'was inserted' FROM t0_template
5524WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5525ERROR 22012: Division by 0
5526COMMIT;
5527
5528# check transactions-8 success: 	1
5529# INFO: Storage engine used for t1 seems to be able to revert
5530#       changes made by the failing statement.
5531SET @@session.sql_mode = '';
5532Warnings:
5533Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
5534SET AUTOCOMMIT= 1;
5535DELETE FROM t1 WHERE f_charbig = 'was inserted';
5536COMMIT WORK;
5537UPDATE t1 SET f_charbig = REPEAT('b', 1000);
5538
5539# check special-1 success: 	1
5540UPDATE t1 SET f_charbig = '';
5541
5542# check special-2 success: 	1
5543UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
5544INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5545SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
5546WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5547INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5548SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5549'just inserted' FROM t0_template
5550WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5551CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
5552BEGIN
5553UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5554f_charbig = 'updated by trigger'
5555      WHERE f_int1 = new.f_int1;
5556END|
5557INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5558SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5559WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5560
5561# check trigger-1 success: 	1
5562DROP TRIGGER trg_1;
5563UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5564f_int2 = CAST(f_char1 AS SIGNED INT),
5565f_charbig = 'just inserted'
5566   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5567DELETE FROM t0_aux
5568WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5569INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5570SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5571'just inserted' FROM t0_template
5572WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5573CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
5574BEGIN
5575UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5576f_charbig = 'updated by trigger'
5577      WHERE f_int1 = new.f_int1;
5578END|
5579INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5580SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
5581WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5582
5583# check trigger-2 success: 	1
5584DROP TRIGGER trg_1;
5585UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5586f_int2 = CAST(f_char1 AS SIGNED INT),
5587f_charbig = 'just inserted'
5588   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5589DELETE FROM t0_aux
5590WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5591INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5592SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5593'just inserted' FROM t0_template
5594WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5595CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5596BEGIN
5597UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5598f_charbig = 'updated by trigger'
5599      WHERE f_int1 = new.f_int1;
5600END|
5601UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5602WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5603
5604# check trigger-3 success: 	1
5605DROP TRIGGER trg_1;
5606UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5607f_int2 = CAST(f_char1 AS SIGNED INT),
5608f_charbig = 'just inserted'
5609   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5610DELETE FROM t0_aux
5611WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5612INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5613SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5614'just inserted' FROM t0_template
5615WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5616CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
5617BEGIN
5618UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5619f_charbig = 'updated by trigger'
5620      WHERE f_int1 = - old.f_int1;
5621END|
5622UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5623WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5624
5625# check trigger-4 success: 	1
5626DROP TRIGGER trg_1;
5627UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5628f_int2 = CAST(f_char1 AS SIGNED INT),
5629f_charbig = 'just inserted'
5630   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5631DELETE FROM t0_aux
5632WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5633INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5634SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5635'just inserted' FROM t0_template
5636WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5637CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5638BEGIN
5639UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5640f_charbig = 'updated by trigger'
5641      WHERE f_int1 = new.f_int1;
5642END|
5643UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5644WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5645
5646# check trigger-5 success: 	1
5647DROP TRIGGER trg_1;
5648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5649f_int2 = CAST(f_char1 AS SIGNED INT),
5650f_charbig = 'just inserted'
5651   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5652DELETE FROM t0_aux
5653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5656'just inserted' FROM t0_template
5657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5658CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
5659BEGIN
5660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5661f_charbig = 'updated by trigger'
5662      WHERE f_int1 = - old.f_int1;
5663END|
5664UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
5665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5666
5667# check trigger-6 success: 	1
5668DROP TRIGGER trg_1;
5669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5670f_int2 = CAST(f_char1 AS SIGNED INT),
5671f_charbig = 'just inserted'
5672   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5673DELETE FROM t0_aux
5674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5677'just inserted' FROM t0_template
5678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5679CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
5680BEGIN
5681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5682f_charbig = 'updated by trigger'
5683      WHERE f_int1 = - old.f_int1;
5684END|
5685DELETE FROM t0_aux
5686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5687
5688# check trigger-7 success: 	1
5689DROP TRIGGER trg_1;
5690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5691f_int2 = CAST(f_char1 AS SIGNED INT),
5692f_charbig = 'just inserted'
5693   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5694DELETE FROM t0_aux
5695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
5697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
5698'just inserted' FROM t0_template
5699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5700CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
5701BEGIN
5702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
5703f_charbig = 'updated by trigger'
5704      WHERE f_int1 = - old.f_int1;
5705END|
5706DELETE FROM t0_aux
5707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
5708
5709# check trigger-8 success: 	1
5710DROP TRIGGER trg_1;
5711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5712f_int2 = CAST(f_char1 AS SIGNED INT),
5713f_charbig = 'just inserted'
5714   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
5715DELETE FROM t0_aux
5716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5717DELETE FROM t1
5718WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
5719CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5720BEGIN
5721SET new.f_int1 = old.f_int1 + @max_row,
5722new.f_int2 = old.f_int2 - @max_row,
5723new.f_charbig = '####updated per update trigger####';
5724END|
5725UPDATE t1
5726SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5727f_charbig = '####updated per update statement itself####';
5728
5729# check trigger-9 success: 	1
5730DROP TRIGGER trg_2;
5731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5732f_int2 = CAST(f_char1 AS SIGNED INT),
5733f_charbig = CONCAT('===',f_char1,'===');
5734CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
5735BEGIN
5736SET new.f_int1 = new.f_int1 + @max_row,
5737new.f_int2 = new.f_int2 - @max_row,
5738new.f_charbig = '####updated per update trigger####';
5739END|
5740UPDATE t1
5741SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
5742f_charbig = '####updated per update statement itself####';
5743
5744# check trigger-10 success: 	1
5745DROP TRIGGER trg_2;
5746UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5747f_int2 = CAST(f_char1 AS SIGNED INT),
5748f_charbig = CONCAT('===',f_char1,'===');
5749CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5750BEGIN
5751SET new.f_int1 = @my_max1 + @counter,
5752new.f_int2 = @my_min2 - @counter,
5753new.f_charbig = '####updated per insert trigger####';
5754SET @counter = @counter + 1;
5755END|
5756SET @counter = 1;
5757SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5758INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5759SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5760CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5762ORDER BY f_int1;
5763DROP TRIGGER trg_3;
5764
5765# check trigger-11 success: 	1
5766DELETE FROM t1
5767WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5768AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5769AND f_charbig = '####updated per insert trigger####';
5770CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
5771BEGIN
5772SET new.f_int1 = @my_max1 + @counter,
5773new.f_int2 = @my_min2 - @counter,
5774new.f_charbig = '####updated per insert trigger####';
5775SET @counter = @counter + 1;
5776END|
5777SET @counter = 1;
5778SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
5779INSERT INTO t1 (f_char1, f_char2, f_charbig)
5780SELECT CAST(f_int1 AS CHAR),
5781CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
5782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
5783ORDER BY f_int1;
5784DROP TRIGGER trg_3;
5785
5786# check trigger-12 success: 	1
5787DELETE FROM t1
5788WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
5789AND f_int2 <> CAST(f_char1 AS SIGNED INT)
5790AND f_charbig = '####updated per insert trigger####';
5791ANALYZE  TABLE t1;
5792Table	Op	Msg_type	Msg_text
5793test.t1	analyze	status	OK
5794CHECK    TABLE t1 EXTENDED;
5795Table	Op	Msg_type	Msg_text
5796test.t1	check	status	OK
5797CHECKSUM TABLE t1 EXTENDED;
5798Table	Checksum
5799test.t1	<some_value>
5800OPTIMIZE TABLE t1;
5801Table	Op	Msg_type	Msg_text
5802test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
5803test.t1	optimize	status	OK
5804# check layout success:    1
5805REPAIR   TABLE t1 EXTENDED;
5806Table	Op	Msg_type	Msg_text
5807test.t1	repair	status	OK
5808# check layout success:    1
5809TRUNCATE t1;
5810
5811# check TRUNCATE success: 	1
5812# check layout success:    1
5813# End usability test (inc/partition_check.inc)
5814DROP TABLE t1;
5815CREATE TABLE t1 (
5816f_int1 INTEGER,
5817f_int2 INTEGER,
5818f_char1 CHAR(20),
5819f_char2 CHAR(20),
5820f_charbig VARCHAR(1000)
5821, PRIMARY KEY (f_int1,f_int2)
5822)
5823PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
5824(PARTITION parta VALUES LESS THAN (0),
5825PARTITION partb VALUES LESS THAN (5),
5826PARTITION partc VALUES LESS THAN (10),
5827PARTITION partd VALUES LESS THAN (2147483646));
5828INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5829SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5830WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
5831ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
5832INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
5833SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
5834WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
5835# Start usability test (inc/partition_check.inc)
5836create_command
5837SHOW CREATE TABLE t1;
5838Table	Create Table
5839t1	CREATE TABLE `t1` (
5840  `f_int1` bigint(20) NOT NULL,
5841  `f_int2` bigint(20) NOT NULL,
5842  `f_char1` char(20) DEFAULT NULL,
5843  `f_char2` char(20) DEFAULT NULL,
5844  `f_charbig` varchar(1000) DEFAULT NULL,
5845  PRIMARY KEY (`f_int1`,`f_int2`)
5846) ENGINE=InnoDB DEFAULT CHARSET=latin1
5847/*!50100 PARTITION BY RANGE (f_int1)
5848SUBPARTITION BY HASH (f_int2)
5849SUBPARTITIONS 2
5850(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
5851 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
5852 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
5853 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
5854
5855# check prerequisites-1 success:    1
5856# check COUNT(*) success:    1
5857# check MIN/MAX(f_int1) success:    1
5858# check MIN/MAX(f_int2) success:    1
5859INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5860SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
5861CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
5862WHERE f_int1 IN (2,3);
5863ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
5864# check prerequisites-3 success:    1
5865# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
5866INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5867SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5868CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5869WHERE f_int1 IN (2,3);
5870DELETE FROM t1 WHERE f_charbig = 'delete me';
5871INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5872SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
5873CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
5874WHERE f_int1 IN (2,3);
5875DELETE FROM t1 WHERE f_charbig = 'delete me';
5876# check read via f_int1 success: 1
5877# check read via f_int2 success: 1
5878
5879# check multiple-1 success: 	1
5880DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
5881
5882# check multiple-2 success: 	1
5883INSERT INTO t1 SELECT * FROM t0_template
5884WHERE MOD(f_int1,3) = 0;
5885
5886# check multiple-3 success: 	1
5887UPDATE t1 SET f_int1 = f_int1 + @max_row
5888WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
5889AND @max_row_div2 + @max_row_div4;
5890
5891# check multiple-4 success: 	1
5892DELETE FROM t1
5893WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
5894AND @max_row_div2 + @max_row_div4 + @max_row;
5895
5896# check multiple-5 success: 	1
5897SELECT COUNT(*) INTO @try_count FROM t0_template
5898WHERE MOD(f_int1,3) = 0
5899AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5900SELECT COUNT(*) INTO @clash_count
5901FROM t1 INNER JOIN t0_template USING(f_int1)
5902WHERE MOD(f_int1,3) = 0
5903AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5904SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
5905INSERT INTO t1
5906SET f_int1 = @cur_value , f_int2 = @cur_value,
5907f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5908f_charbig = '#SINGLE#';
5909
5910# check single-1 success: 	1
5911SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
5912INSERT INTO t1
5913SET f_int1 = @cur_value , f_int2 = @cur_value,
5914f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
5915f_charbig = '#SINGLE#';
5916
5917# check single-2 success: 	1
5918SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
5919SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
5920UPDATE t1 SET f_int1 = @cur_value2
5921WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
5922
5923# check single-3 success: 	1
5924SET @cur_value1= -1;
5925SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
5926UPDATE t1 SET f_int1 = @cur_value1
5927WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
5928
5929# check single-4 success: 	1
5930SELECT MAX(f_int1) INTO @cur_value FROM t1;
5931DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
5932
5933# check single-5 success: 	1
5934DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
5935
5936# check single-6 success: 	1
5937INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
5938ERROR HY000: Table has no partition for value 2147483647
5939DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
5940INSERT t1 SET f_int1 = 0 , f_int2 = 0,
5941f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
5942f_charbig = '#NULL#';
5943INSERT INTO t1
5944SET f_int1 = NULL , f_int2 = -@max_row,
5945f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
5946f_charbig = '#NULL#';
5947ERROR 23000: Column 'f_int1' cannot be null
5948# check null success:    1
5949DELETE FROM t1
5950WHERE f_int1 = 0 AND f_int2 = 0
5951AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
5952AND f_charbig = '#NULL#';
5953INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5954SELECT f_int1, f_int1, '', '', 'was inserted'
5955   FROM t0_template source_tab
5956WHERE MOD(f_int1,3) = 0
5957AND f_int1 BETWEEN @max_row_div2 AND @max_row
5958ON DUPLICATE KEY
5959UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
5960f_int2 = 2 * @max_row + source_tab.f_int1,
5961f_charbig = 'was updated';
5962
5963# check unique-1-a success: 	1
5964
5965# check unique-1-b success: 	1
5966DELETE FROM t1 WHERE f_charbig = 'was inserted';
5967UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
5968f_int2 = CAST(f_char1 AS SIGNED INT),
5969f_charbig = CONCAT('===',f_char1,'===')
5970WHERE f_charbig = 'was updated';
5971REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5972SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
5973   FROM t0_template source_tab
5974WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
5975
5976# check replace success: 	1
5977DELETE FROM t1
5978WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
5979DELETE FROM t1
5980WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
5981f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
5982UPDATE t1 SET f_int2 = f_int1,
5983f_char1 = CAST(f_int1 AS CHAR),
5984f_char2 = CAST(f_int1 AS CHAR),
5985f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
5986WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
5987SET AUTOCOMMIT= 0;
5988INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
5989SELECT f_int1, f_int1, '', '', 'was inserted'
5990FROM t0_template source_tab
5991WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
5992
5993# check transactions-1 success: 	1
5994COMMIT WORK;
5995
5996# check transactions-2 success: 	1
5997ROLLBACK WORK;
5998
5999# check transactions-3 success: 	1
6000DELETE FROM t1 WHERE f_charbig = 'was inserted';
6001COMMIT WORK;
6002ROLLBACK WORK;
6003
6004# check transactions-4 success: 	1
6005INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6006SELECT f_int1, f_int1, '', '', 'was inserted'
6007FROM t0_template source_tab
6008WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6009
6010# check transactions-5 success: 	1
6011ROLLBACK WORK;
6012
6013# check transactions-6 success: 	1
6014# INFO: Storage engine used for t1 seems to be transactional.
6015COMMIT;
6016
6017# check transactions-7 success: 	1
6018DELETE FROM t1 WHERE f_charbig = 'was inserted';
6019COMMIT WORK;
6020SET @@session.sql_mode = 'traditional';
6021Warnings:
6022Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6023SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6024INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6025SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6026'', '', 'was inserted' FROM t0_template
6027WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6028ERROR 22012: Division by 0
6029COMMIT;
6030
6031# check transactions-8 success: 	1
6032# INFO: Storage engine used for t1 seems to be able to revert
6033#       changes made by the failing statement.
6034SET @@session.sql_mode = '';
6035Warnings:
6036Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6037SET AUTOCOMMIT= 1;
6038DELETE FROM t1 WHERE f_charbig = 'was inserted';
6039COMMIT WORK;
6040UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6041
6042# check special-1 success: 	1
6043UPDATE t1 SET f_charbig = '';
6044
6045# check special-2 success: 	1
6046UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6047INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6048SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6049WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6050INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6051SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6052'just inserted' FROM t0_template
6053WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6054CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6055BEGIN
6056UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6057f_charbig = 'updated by trigger'
6058      WHERE f_int1 = new.f_int1;
6059END|
6060INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6061SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6062WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6063
6064# check trigger-1 success: 	1
6065DROP TRIGGER trg_1;
6066UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6067f_int2 = CAST(f_char1 AS SIGNED INT),
6068f_charbig = 'just inserted'
6069   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6070DELETE FROM t0_aux
6071WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6072INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6073SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6074'just inserted' FROM t0_template
6075WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6076CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6077BEGIN
6078UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6079f_charbig = 'updated by trigger'
6080      WHERE f_int1 = new.f_int1;
6081END|
6082INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6083SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6084WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6085
6086# check trigger-2 success: 	1
6087DROP TRIGGER trg_1;
6088UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6089f_int2 = CAST(f_char1 AS SIGNED INT),
6090f_charbig = 'just inserted'
6091   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6092DELETE FROM t0_aux
6093WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6094INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6095SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6096'just inserted' FROM t0_template
6097WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6098CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6099BEGIN
6100UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6101f_charbig = 'updated by trigger'
6102      WHERE f_int1 = new.f_int1;
6103END|
6104UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6105WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6106
6107# check trigger-3 success: 	1
6108DROP TRIGGER trg_1;
6109UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6110f_int2 = CAST(f_char1 AS SIGNED INT),
6111f_charbig = 'just inserted'
6112   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6113DELETE FROM t0_aux
6114WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6115INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6116SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6117'just inserted' FROM t0_template
6118WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6119CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6120BEGIN
6121UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6122f_charbig = 'updated by trigger'
6123      WHERE f_int1 = - old.f_int1;
6124END|
6125UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6126WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6127
6128# check trigger-4 success: 	1
6129DROP TRIGGER trg_1;
6130UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6131f_int2 = CAST(f_char1 AS SIGNED INT),
6132f_charbig = 'just inserted'
6133   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6134DELETE FROM t0_aux
6135WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6137SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6138'just inserted' FROM t0_template
6139WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6140CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6141BEGIN
6142UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6143f_charbig = 'updated by trigger'
6144      WHERE f_int1 = new.f_int1;
6145END|
6146UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6147WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6148
6149# check trigger-5 success: 	1
6150DROP TRIGGER trg_1;
6151UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6152f_int2 = CAST(f_char1 AS SIGNED INT),
6153f_charbig = 'just inserted'
6154   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6155DELETE FROM t0_aux
6156WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6157INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6158SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6159'just inserted' FROM t0_template
6160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6161CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6162BEGIN
6163UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6164f_charbig = 'updated by trigger'
6165      WHERE f_int1 = - old.f_int1;
6166END|
6167UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6168WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6169
6170# check trigger-6 success: 	1
6171DROP TRIGGER trg_1;
6172UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6173f_int2 = CAST(f_char1 AS SIGNED INT),
6174f_charbig = 'just inserted'
6175   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6176DELETE FROM t0_aux
6177WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6178INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6179SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6180'just inserted' FROM t0_template
6181WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6182CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6183BEGIN
6184UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6185f_charbig = 'updated by trigger'
6186      WHERE f_int1 = - old.f_int1;
6187END|
6188DELETE FROM t0_aux
6189WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6190
6191# check trigger-7 success: 	1
6192DROP TRIGGER trg_1;
6193UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6194f_int2 = CAST(f_char1 AS SIGNED INT),
6195f_charbig = 'just inserted'
6196   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6197DELETE FROM t0_aux
6198WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6199INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6200SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6201'just inserted' FROM t0_template
6202WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6203CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6204BEGIN
6205UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6206f_charbig = 'updated by trigger'
6207      WHERE f_int1 = - old.f_int1;
6208END|
6209DELETE FROM t0_aux
6210WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6211
6212# check trigger-8 success: 	1
6213DROP TRIGGER trg_1;
6214UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6215f_int2 = CAST(f_char1 AS SIGNED INT),
6216f_charbig = 'just inserted'
6217   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6218DELETE FROM t0_aux
6219WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6220DELETE FROM t1
6221WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6222CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6223BEGIN
6224SET new.f_int1 = old.f_int1 + @max_row,
6225new.f_int2 = old.f_int2 - @max_row,
6226new.f_charbig = '####updated per update trigger####';
6227END|
6228UPDATE t1
6229SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6230f_charbig = '####updated per update statement itself####';
6231
6232# check trigger-9 success: 	1
6233DROP TRIGGER trg_2;
6234UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6235f_int2 = CAST(f_char1 AS SIGNED INT),
6236f_charbig = CONCAT('===',f_char1,'===');
6237CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6238BEGIN
6239SET new.f_int1 = new.f_int1 + @max_row,
6240new.f_int2 = new.f_int2 - @max_row,
6241new.f_charbig = '####updated per update trigger####';
6242END|
6243UPDATE t1
6244SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6245f_charbig = '####updated per update statement itself####';
6246
6247# check trigger-10 success: 	1
6248DROP TRIGGER trg_2;
6249UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6250f_int2 = CAST(f_char1 AS SIGNED INT),
6251f_charbig = CONCAT('===',f_char1,'===');
6252CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6253BEGIN
6254SET new.f_int1 = @my_max1 + @counter,
6255new.f_int2 = @my_min2 - @counter,
6256new.f_charbig = '####updated per insert trigger####';
6257SET @counter = @counter + 1;
6258END|
6259SET @counter = 1;
6260SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6261INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6262SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6263CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6264WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6265ORDER BY f_int1;
6266DROP TRIGGER trg_3;
6267
6268# check trigger-11 success: 	1
6269DELETE FROM t1
6270WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6271AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6272AND f_charbig = '####updated per insert trigger####';
6273CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6274BEGIN
6275SET new.f_int1 = @my_max1 + @counter,
6276new.f_int2 = @my_min2 - @counter,
6277new.f_charbig = '####updated per insert trigger####';
6278SET @counter = @counter + 1;
6279END|
6280SET @counter = 1;
6281SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6282INSERT INTO t1 (f_char1, f_char2, f_charbig)
6283SELECT CAST(f_int1 AS CHAR),
6284CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6285WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6286ORDER BY f_int1;
6287DROP TRIGGER trg_3;
6288
6289# check trigger-12 success: 	1
6290DELETE FROM t1
6291WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6292AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6293AND f_charbig = '####updated per insert trigger####';
6294ANALYZE  TABLE t1;
6295Table	Op	Msg_type	Msg_text
6296test.t1	analyze	status	OK
6297CHECK    TABLE t1 EXTENDED;
6298Table	Op	Msg_type	Msg_text
6299test.t1	check	status	OK
6300CHECKSUM TABLE t1 EXTENDED;
6301Table	Checksum
6302test.t1	<some_value>
6303OPTIMIZE TABLE t1;
6304Table	Op	Msg_type	Msg_text
6305test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6306test.t1	optimize	status	OK
6307# check layout success:    1
6308REPAIR   TABLE t1 EXTENDED;
6309Table	Op	Msg_type	Msg_text
6310test.t1	repair	status	OK
6311# check layout success:    1
6312TRUNCATE t1;
6313
6314# check TRUNCATE success: 	1
6315# check layout success:    1
6316# End usability test (inc/partition_check.inc)
6317DROP TABLE t1;
6318CREATE TABLE t1 (
6319f_int1 INTEGER,
6320f_int2 INTEGER,
6321f_char1 CHAR(20),
6322f_char2 CHAR(20),
6323f_charbig VARCHAR(1000)
6324, PRIMARY KEY (f_int1,f_int2)
6325)
6326PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
6327(PARTITION part1 VALUES LESS THAN (0)
6328(SUBPARTITION subpart11, SUBPARTITION subpart12),
6329PARTITION part2 VALUES LESS THAN (5)
6330(SUBPARTITION subpart21, SUBPARTITION subpart22),
6331PARTITION part3 VALUES LESS THAN (10)
6332(SUBPARTITION subpart31, SUBPARTITION subpart32),
6333PARTITION part4 VALUES LESS THAN (2147483646)
6334(SUBPARTITION subpart41, SUBPARTITION subpart42));
6335INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6336SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6337WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6338ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
6339INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6340SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6341WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6342# Start usability test (inc/partition_check.inc)
6343create_command
6344SHOW CREATE TABLE t1;
6345Table	Create Table
6346t1	CREATE TABLE `t1` (
6347  `f_int1` bigint(20) NOT NULL,
6348  `f_int2` bigint(20) NOT NULL,
6349  `f_char1` char(20) DEFAULT NULL,
6350  `f_char2` char(20) DEFAULT NULL,
6351  `f_charbig` varchar(1000) DEFAULT NULL,
6352  PRIMARY KEY (`f_int1`,`f_int2`)
6353) ENGINE=InnoDB DEFAULT CHARSET=latin1
6354/*!50100 PARTITION BY RANGE (f_int1)
6355SUBPARTITION BY KEY (f_int2)
6356(PARTITION part1 VALUES LESS THAN (0)
6357 (SUBPARTITION subpart11 ENGINE = InnoDB,
6358  SUBPARTITION subpart12 ENGINE = InnoDB),
6359 PARTITION part2 VALUES LESS THAN (5)
6360 (SUBPARTITION subpart21 ENGINE = InnoDB,
6361  SUBPARTITION subpart22 ENGINE = InnoDB),
6362 PARTITION part3 VALUES LESS THAN (10)
6363 (SUBPARTITION subpart31 ENGINE = InnoDB,
6364  SUBPARTITION subpart32 ENGINE = InnoDB),
6365 PARTITION part4 VALUES LESS THAN (2147483646)
6366 (SUBPARTITION subpart41 ENGINE = InnoDB,
6367  SUBPARTITION subpart42 ENGINE = InnoDB)) */
6368
6369# check prerequisites-1 success:    1
6370# check COUNT(*) success:    1
6371# check MIN/MAX(f_int1) success:    1
6372# check MIN/MAX(f_int2) success:    1
6373INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6374SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6375CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6376WHERE f_int1 IN (2,3);
6377ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6378# check prerequisites-3 success:    1
6379# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6380INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6381SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6382CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6383WHERE f_int1 IN (2,3);
6384DELETE FROM t1 WHERE f_charbig = 'delete me';
6385INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6386SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6387CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6388WHERE f_int1 IN (2,3);
6389DELETE FROM t1 WHERE f_charbig = 'delete me';
6390# check read via f_int1 success: 1
6391# check read via f_int2 success: 1
6392
6393# check multiple-1 success: 	1
6394DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6395
6396# check multiple-2 success: 	1
6397INSERT INTO t1 SELECT * FROM t0_template
6398WHERE MOD(f_int1,3) = 0;
6399
6400# check multiple-3 success: 	1
6401UPDATE t1 SET f_int1 = f_int1 + @max_row
6402WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6403AND @max_row_div2 + @max_row_div4;
6404
6405# check multiple-4 success: 	1
6406DELETE FROM t1
6407WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6408AND @max_row_div2 + @max_row_div4 + @max_row;
6409
6410# check multiple-5 success: 	1
6411SELECT COUNT(*) INTO @try_count FROM t0_template
6412WHERE MOD(f_int1,3) = 0
6413AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6414SELECT COUNT(*) INTO @clash_count
6415FROM t1 INNER JOIN t0_template USING(f_int1)
6416WHERE MOD(f_int1,3) = 0
6417AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6418SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6419INSERT INTO t1
6420SET f_int1 = @cur_value , f_int2 = @cur_value,
6421f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6422f_charbig = '#SINGLE#';
6423
6424# check single-1 success: 	1
6425SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6426INSERT INTO t1
6427SET f_int1 = @cur_value , f_int2 = @cur_value,
6428f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6429f_charbig = '#SINGLE#';
6430
6431# check single-2 success: 	1
6432SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6433SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6434UPDATE t1 SET f_int1 = @cur_value2
6435WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6436
6437# check single-3 success: 	1
6438SET @cur_value1= -1;
6439SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6440UPDATE t1 SET f_int1 = @cur_value1
6441WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6442
6443# check single-4 success: 	1
6444SELECT MAX(f_int1) INTO @cur_value FROM t1;
6445DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6446
6447# check single-5 success: 	1
6448DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6449
6450# check single-6 success: 	1
6451INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6452ERROR HY000: Table has no partition for value 2147483647
6453DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6454INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6455f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6456f_charbig = '#NULL#';
6457INSERT INTO t1
6458SET f_int1 = NULL , f_int2 = -@max_row,
6459f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6460f_charbig = '#NULL#';
6461ERROR 23000: Column 'f_int1' cannot be null
6462# check null success:    1
6463DELETE FROM t1
6464WHERE f_int1 = 0 AND f_int2 = 0
6465AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6466AND f_charbig = '#NULL#';
6467INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6468SELECT f_int1, f_int1, '', '', 'was inserted'
6469   FROM t0_template source_tab
6470WHERE MOD(f_int1,3) = 0
6471AND f_int1 BETWEEN @max_row_div2 AND @max_row
6472ON DUPLICATE KEY
6473UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6474f_int2 = 2 * @max_row + source_tab.f_int1,
6475f_charbig = 'was updated';
6476
6477# check unique-1-a success: 	1
6478
6479# check unique-1-b success: 	1
6480DELETE FROM t1 WHERE f_charbig = 'was inserted';
6481UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6482f_int2 = CAST(f_char1 AS SIGNED INT),
6483f_charbig = CONCAT('===',f_char1,'===')
6484WHERE f_charbig = 'was updated';
6485REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6486SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
6487   FROM t0_template source_tab
6488WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6489
6490# check replace success: 	1
6491DELETE FROM t1
6492WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
6493DELETE FROM t1
6494WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
6495f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
6496UPDATE t1 SET f_int2 = f_int1,
6497f_char1 = CAST(f_int1 AS CHAR),
6498f_char2 = CAST(f_int1 AS CHAR),
6499f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
6500WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
6501SET AUTOCOMMIT= 0;
6502INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6503SELECT f_int1, f_int1, '', '', 'was inserted'
6504FROM t0_template source_tab
6505WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6506
6507# check transactions-1 success: 	1
6508COMMIT WORK;
6509
6510# check transactions-2 success: 	1
6511ROLLBACK WORK;
6512
6513# check transactions-3 success: 	1
6514DELETE FROM t1 WHERE f_charbig = 'was inserted';
6515COMMIT WORK;
6516ROLLBACK WORK;
6517
6518# check transactions-4 success: 	1
6519INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6520SELECT f_int1, f_int1, '', '', 'was inserted'
6521FROM t0_template source_tab
6522WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6523
6524# check transactions-5 success: 	1
6525ROLLBACK WORK;
6526
6527# check transactions-6 success: 	1
6528# INFO: Storage engine used for t1 seems to be transactional.
6529COMMIT;
6530
6531# check transactions-7 success: 	1
6532DELETE FROM t1 WHERE f_charbig = 'was inserted';
6533COMMIT WORK;
6534SET @@session.sql_mode = 'traditional';
6535Warnings:
6536Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6537SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
6538INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6539SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
6540'', '', 'was inserted' FROM t0_template
6541WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
6542ERROR 22012: Division by 0
6543COMMIT;
6544
6545# check transactions-8 success: 	1
6546# INFO: Storage engine used for t1 seems to be able to revert
6547#       changes made by the failing statement.
6548SET @@session.sql_mode = '';
6549Warnings:
6550Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
6551SET AUTOCOMMIT= 1;
6552DELETE FROM t1 WHERE f_charbig = 'was inserted';
6553COMMIT WORK;
6554UPDATE t1 SET f_charbig = REPEAT('b', 1000);
6555
6556# check special-1 success: 	1
6557UPDATE t1 SET f_charbig = '';
6558
6559# check special-2 success: 	1
6560UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
6561INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6562SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
6563WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6564INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6565SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6566'just inserted' FROM t0_template
6567WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6568CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
6569BEGIN
6570UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6571f_charbig = 'updated by trigger'
6572      WHERE f_int1 = new.f_int1;
6573END|
6574INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6575SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6576WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6577
6578# check trigger-1 success: 	1
6579DROP TRIGGER trg_1;
6580UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6581f_int2 = CAST(f_char1 AS SIGNED INT),
6582f_charbig = 'just inserted'
6583   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6584DELETE FROM t0_aux
6585WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6586INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6587SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6588'just inserted' FROM t0_template
6589WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6590CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
6591BEGIN
6592UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6593f_charbig = 'updated by trigger'
6594      WHERE f_int1 = new.f_int1;
6595END|
6596INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6597SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
6598WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6599
6600# check trigger-2 success: 	1
6601DROP TRIGGER trg_1;
6602UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6603f_int2 = CAST(f_char1 AS SIGNED INT),
6604f_charbig = 'just inserted'
6605   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6606DELETE FROM t0_aux
6607WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6610'just inserted' FROM t0_template
6611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6612CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6613BEGIN
6614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6615f_charbig = 'updated by trigger'
6616      WHERE f_int1 = new.f_int1;
6617END|
6618UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6619WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6620
6621# check trigger-3 success: 	1
6622DROP TRIGGER trg_1;
6623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6624f_int2 = CAST(f_char1 AS SIGNED INT),
6625f_charbig = 'just inserted'
6626   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6627DELETE FROM t0_aux
6628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6629INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6630SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6631'just inserted' FROM t0_template
6632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6633CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
6634BEGIN
6635UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6636f_charbig = 'updated by trigger'
6637      WHERE f_int1 = - old.f_int1;
6638END|
6639UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6640WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6641
6642# check trigger-4 success: 	1
6643DROP TRIGGER trg_1;
6644UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6645f_int2 = CAST(f_char1 AS SIGNED INT),
6646f_charbig = 'just inserted'
6647   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6648DELETE FROM t0_aux
6649WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6650INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6651SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6652'just inserted' FROM t0_template
6653WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6654CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6655BEGIN
6656UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6657f_charbig = 'updated by trigger'
6658      WHERE f_int1 = new.f_int1;
6659END|
6660UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6661WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6662
6663# check trigger-5 success: 	1
6664DROP TRIGGER trg_1;
6665UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6666f_int2 = CAST(f_char1 AS SIGNED INT),
6667f_charbig = 'just inserted'
6668   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6669DELETE FROM t0_aux
6670WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6671INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6672SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6673'just inserted' FROM t0_template
6674WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6675CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
6676BEGIN
6677UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6678f_charbig = 'updated by trigger'
6679      WHERE f_int1 = - old.f_int1;
6680END|
6681UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
6682WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6683
6684# check trigger-6 success: 	1
6685DROP TRIGGER trg_1;
6686UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6687f_int2 = CAST(f_char1 AS SIGNED INT),
6688f_charbig = 'just inserted'
6689   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6690DELETE FROM t0_aux
6691WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6692INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6693SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6694'just inserted' FROM t0_template
6695WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6696CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
6697BEGIN
6698UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6699f_charbig = 'updated by trigger'
6700      WHERE f_int1 = - old.f_int1;
6701END|
6702DELETE FROM t0_aux
6703WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6704
6705# check trigger-7 success: 	1
6706DROP TRIGGER trg_1;
6707UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6708f_int2 = CAST(f_char1 AS SIGNED INT),
6709f_charbig = 'just inserted'
6710   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6711DELETE FROM t0_aux
6712WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6713INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
6714SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
6715'just inserted' FROM t0_template
6716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6717CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
6718BEGIN
6719UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
6720f_charbig = 'updated by trigger'
6721      WHERE f_int1 = - old.f_int1;
6722END|
6723DELETE FROM t0_aux
6724WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
6725
6726# check trigger-8 success: 	1
6727DROP TRIGGER trg_1;
6728UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6729f_int2 = CAST(f_char1 AS SIGNED INT),
6730f_charbig = 'just inserted'
6731   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
6732DELETE FROM t0_aux
6733WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6734DELETE FROM t1
6735WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
6736CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6737BEGIN
6738SET new.f_int1 = old.f_int1 + @max_row,
6739new.f_int2 = old.f_int2 - @max_row,
6740new.f_charbig = '####updated per update trigger####';
6741END|
6742UPDATE t1
6743SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6744f_charbig = '####updated per update statement itself####';
6745
6746# check trigger-9 success: 	1
6747DROP TRIGGER trg_2;
6748UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6749f_int2 = CAST(f_char1 AS SIGNED INT),
6750f_charbig = CONCAT('===',f_char1,'===');
6751CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
6752BEGIN
6753SET new.f_int1 = new.f_int1 + @max_row,
6754new.f_int2 = new.f_int2 - @max_row,
6755new.f_charbig = '####updated per update trigger####';
6756END|
6757UPDATE t1
6758SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
6759f_charbig = '####updated per update statement itself####';
6760
6761# check trigger-10 success: 	1
6762DROP TRIGGER trg_2;
6763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6764f_int2 = CAST(f_char1 AS SIGNED INT),
6765f_charbig = CONCAT('===',f_char1,'===');
6766CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6767BEGIN
6768SET new.f_int1 = @my_max1 + @counter,
6769new.f_int2 = @my_min2 - @counter,
6770new.f_charbig = '####updated per insert trigger####';
6771SET @counter = @counter + 1;
6772END|
6773SET @counter = 1;
6774SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6775INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6776SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6777CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6779ORDER BY f_int1;
6780DROP TRIGGER trg_3;
6781
6782# check trigger-11 success: 	1
6783DELETE FROM t1
6784WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6785AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6786AND f_charbig = '####updated per insert trigger####';
6787CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
6788BEGIN
6789SET new.f_int1 = @my_max1 + @counter,
6790new.f_int2 = @my_min2 - @counter,
6791new.f_charbig = '####updated per insert trigger####';
6792SET @counter = @counter + 1;
6793END|
6794SET @counter = 1;
6795SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
6796INSERT INTO t1 (f_char1, f_char2, f_charbig)
6797SELECT CAST(f_int1 AS CHAR),
6798CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
6799WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
6800ORDER BY f_int1;
6801DROP TRIGGER trg_3;
6802
6803# check trigger-12 success: 	1
6804DELETE FROM t1
6805WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
6806AND f_int2 <> CAST(f_char1 AS SIGNED INT)
6807AND f_charbig = '####updated per insert trigger####';
6808ANALYZE  TABLE t1;
6809Table	Op	Msg_type	Msg_text
6810test.t1	analyze	status	OK
6811CHECK    TABLE t1 EXTENDED;
6812Table	Op	Msg_type	Msg_text
6813test.t1	check	status	OK
6814CHECKSUM TABLE t1 EXTENDED;
6815Table	Checksum
6816test.t1	<some_value>
6817OPTIMIZE TABLE t1;
6818Table	Op	Msg_type	Msg_text
6819test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
6820test.t1	optimize	status	OK
6821# check layout success:    1
6822REPAIR   TABLE t1 EXTENDED;
6823Table	Op	Msg_type	Msg_text
6824test.t1	repair	status	OK
6825# check layout success:    1
6826TRUNCATE t1;
6827
6828# check TRUNCATE success: 	1
6829# check layout success:    1
6830# End usability test (inc/partition_check.inc)
6831DROP TABLE t1;
6832CREATE TABLE t1 (
6833f_int1 INTEGER,
6834f_int2 INTEGER,
6835f_char1 CHAR(20),
6836f_char2 CHAR(20),
6837f_charbig VARCHAR(1000)
6838, PRIMARY KEY (f_int1,f_int2)
6839)
6840PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
6841(PARTITION part1 VALUES IN (0)
6842(SUBPARTITION sp11, SUBPARTITION sp12),
6843PARTITION part2 VALUES IN (1)
6844(SUBPARTITION sp21, SUBPARTITION sp22),
6845PARTITION part3 VALUES IN (2)
6846(SUBPARTITION sp31, SUBPARTITION sp32),
6847PARTITION part4 VALUES IN (NULL)
6848(SUBPARTITION sp41, SUBPARTITION sp42));
6849INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6850SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6851WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
6852ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
6853INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
6854SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
6855WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
6856# Start usability test (inc/partition_check.inc)
6857create_command
6858SHOW CREATE TABLE t1;
6859Table	Create Table
6860t1	CREATE TABLE `t1` (
6861  `f_int1` bigint(20) NOT NULL,
6862  `f_int2` bigint(20) NOT NULL,
6863  `f_char1` char(20) DEFAULT NULL,
6864  `f_char2` char(20) DEFAULT NULL,
6865  `f_charbig` varchar(1000) DEFAULT NULL,
6866  PRIMARY KEY (`f_int1`,`f_int2`)
6867) ENGINE=InnoDB DEFAULT CHARSET=latin1
6868/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
6869SUBPARTITION BY HASH (f_int2 + 1)
6870(PARTITION part1 VALUES IN (0)
6871 (SUBPARTITION sp11 ENGINE = InnoDB,
6872  SUBPARTITION sp12 ENGINE = InnoDB),
6873 PARTITION part2 VALUES IN (1)
6874 (SUBPARTITION sp21 ENGINE = InnoDB,
6875  SUBPARTITION sp22 ENGINE = InnoDB),
6876 PARTITION part3 VALUES IN (2)
6877 (SUBPARTITION sp31 ENGINE = InnoDB,
6878  SUBPARTITION sp32 ENGINE = InnoDB),
6879 PARTITION part4 VALUES IN (NULL)
6880 (SUBPARTITION sp41 ENGINE = InnoDB,
6881  SUBPARTITION sp42 ENGINE = InnoDB)) */
6882
6883# check prerequisites-1 success:    1
6884# check COUNT(*) success:    1
6885# check MIN/MAX(f_int1) success:    1
6886# check MIN/MAX(f_int2) success:    1
6887INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6888SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
6889CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
6890WHERE f_int1 IN (2,3);
6891ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
6892# check prerequisites-3 success:    1
6893# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
6894INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6895SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6896CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6897WHERE f_int1 IN (2,3);
6898DELETE FROM t1 WHERE f_charbig = 'delete me';
6899INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6900SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
6901CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
6902WHERE f_int1 IN (2,3);
6903DELETE FROM t1 WHERE f_charbig = 'delete me';
6904# check read via f_int1 success: 1
6905# check read via f_int2 success: 1
6906
6907# check multiple-1 success: 	1
6908DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
6909
6910# check multiple-2 success: 	1
6911INSERT INTO t1 SELECT * FROM t0_template
6912WHERE MOD(f_int1,3) = 0;
6913
6914# check multiple-3 success: 	1
6915UPDATE t1 SET f_int1 = f_int1 + @max_row
6916WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
6917AND @max_row_div2 + @max_row_div4;
6918
6919# check multiple-4 success: 	1
6920DELETE FROM t1
6921WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
6922AND @max_row_div2 + @max_row_div4 + @max_row;
6923
6924# check multiple-5 success: 	1
6925SELECT COUNT(*) INTO @try_count FROM t0_template
6926WHERE MOD(f_int1,3) = 0
6927AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6928SELECT COUNT(*) INTO @clash_count
6929FROM t1 INNER JOIN t0_template USING(f_int1)
6930WHERE MOD(f_int1,3) = 0
6931AND f_int1 BETWEEN @max_row_div2 AND @max_row;
6932SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
6933INSERT INTO t1
6934SET f_int1 = @cur_value , f_int2 = @cur_value,
6935f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6936f_charbig = '#SINGLE#';
6937
6938# check single-1 success: 	1
6939SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
6940INSERT INTO t1
6941SET f_int1 = @cur_value , f_int2 = @cur_value,
6942f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
6943f_charbig = '#SINGLE#';
6944
6945# check single-2 success: 	1
6946SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
6947SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
6948UPDATE t1 SET f_int1 = @cur_value2
6949WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
6950
6951# check single-3 success: 	1
6952SET @cur_value1= -1;
6953SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
6954UPDATE t1 SET f_int1 = @cur_value1
6955WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
6956
6957# check single-4 success: 	1
6958SELECT MAX(f_int1) INTO @cur_value FROM t1;
6959DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
6960
6961# check single-5 success: 	1
6962DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
6963
6964# check single-6 success: 	1
6965INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
6966
6967# check single-7 success: 	1
6968DELETE FROM t1 WHERE f_charbig = '#2147483647##';
6969DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
6970INSERT t1 SET f_int1 = 0 , f_int2 = 0,
6971f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
6972f_charbig = '#NULL#';
6973INSERT INTO t1
6974SET f_int1 = NULL , f_int2 = -@max_row,
6975f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
6976f_charbig = '#NULL#';
6977ERROR 23000: Column 'f_int1' cannot be null
6978# check null success:    1
6979DELETE FROM t1
6980WHERE f_int1 = 0 AND f_int2 = 0
6981AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
6982AND f_charbig = '#NULL#';
6983INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
6984SELECT f_int1, f_int1, '', '', 'was inserted'
6985   FROM t0_template source_tab
6986WHERE MOD(f_int1,3) = 0
6987AND f_int1 BETWEEN @max_row_div2 AND @max_row
6988ON DUPLICATE KEY
6989UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
6990f_int2 = 2 * @max_row + source_tab.f_int1,
6991f_charbig = 'was updated';
6992
6993# check unique-1-a success: 	1
6994
6995# check unique-1-b success: 	1
6996DELETE FROM t1 WHERE f_charbig = 'was inserted';
6997UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
6998f_int2 = CAST(f_char1 AS SIGNED INT),
6999f_charbig = CONCAT('===',f_char1,'===')
7000WHERE f_charbig = 'was updated';
7001REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7002SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7003   FROM t0_template source_tab
7004WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7005
7006# check replace success: 	1
7007DELETE FROM t1
7008WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7009DELETE FROM t1
7010WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7011f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7012UPDATE t1 SET f_int2 = f_int1,
7013f_char1 = CAST(f_int1 AS CHAR),
7014f_char2 = CAST(f_int1 AS CHAR),
7015f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7016WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7017SET AUTOCOMMIT= 0;
7018INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7019SELECT f_int1, f_int1, '', '', 'was inserted'
7020FROM t0_template source_tab
7021WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7022
7023# check transactions-1 success: 	1
7024COMMIT WORK;
7025
7026# check transactions-2 success: 	1
7027ROLLBACK WORK;
7028
7029# check transactions-3 success: 	1
7030DELETE FROM t1 WHERE f_charbig = 'was inserted';
7031COMMIT WORK;
7032ROLLBACK WORK;
7033
7034# check transactions-4 success: 	1
7035INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7036SELECT f_int1, f_int1, '', '', 'was inserted'
7037FROM t0_template source_tab
7038WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7039
7040# check transactions-5 success: 	1
7041ROLLBACK WORK;
7042
7043# check transactions-6 success: 	1
7044# INFO: Storage engine used for t1 seems to be transactional.
7045COMMIT;
7046
7047# check transactions-7 success: 	1
7048DELETE FROM t1 WHERE f_charbig = 'was inserted';
7049COMMIT WORK;
7050SET @@session.sql_mode = 'traditional';
7051Warnings:
7052Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7053SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7054INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7055SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7056'', '', 'was inserted' FROM t0_template
7057WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7058ERROR 22012: Division by 0
7059COMMIT;
7060
7061# check transactions-8 success: 	1
7062# INFO: Storage engine used for t1 seems to be able to revert
7063#       changes made by the failing statement.
7064SET @@session.sql_mode = '';
7065Warnings:
7066Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7067SET AUTOCOMMIT= 1;
7068DELETE FROM t1 WHERE f_charbig = 'was inserted';
7069COMMIT WORK;
7070UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7071
7072# check special-1 success: 	1
7073UPDATE t1 SET f_charbig = '';
7074
7075# check special-2 success: 	1
7076UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7077INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7078SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7080INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7081SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7082'just inserted' FROM t0_template
7083WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7084CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7085BEGIN
7086UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7087f_charbig = 'updated by trigger'
7088      WHERE f_int1 = new.f_int1;
7089END|
7090INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7091SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7093
7094# check trigger-1 success: 	1
7095DROP TRIGGER trg_1;
7096UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7097f_int2 = CAST(f_char1 AS SIGNED INT),
7098f_charbig = 'just inserted'
7099   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7100DELETE FROM t0_aux
7101WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7102INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7103SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7104'just inserted' FROM t0_template
7105WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7106CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7107BEGIN
7108UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7109f_charbig = 'updated by trigger'
7110      WHERE f_int1 = new.f_int1;
7111END|
7112INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7113SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7114WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7115
7116# check trigger-2 success: 	1
7117DROP TRIGGER trg_1;
7118UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7119f_int2 = CAST(f_char1 AS SIGNED INT),
7120f_charbig = 'just inserted'
7121   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7122DELETE FROM t0_aux
7123WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7124INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7125SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7126'just inserted' FROM t0_template
7127WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7128CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7129BEGIN
7130UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7131f_charbig = 'updated by trigger'
7132      WHERE f_int1 = new.f_int1;
7133END|
7134UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7135WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7136
7137# check trigger-3 success: 	1
7138DROP TRIGGER trg_1;
7139UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7140f_int2 = CAST(f_char1 AS SIGNED INT),
7141f_charbig = 'just inserted'
7142   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7143DELETE FROM t0_aux
7144WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7145INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7146SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7147'just inserted' FROM t0_template
7148WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7149CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7150BEGIN
7151UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7152f_charbig = 'updated by trigger'
7153      WHERE f_int1 = - old.f_int1;
7154END|
7155UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7156WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7157
7158# check trigger-4 success: 	1
7159DROP TRIGGER trg_1;
7160UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7161f_int2 = CAST(f_char1 AS SIGNED INT),
7162f_charbig = 'just inserted'
7163   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7164DELETE FROM t0_aux
7165WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7166INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7167SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7168'just inserted' FROM t0_template
7169WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7170CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7171BEGIN
7172UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7173f_charbig = 'updated by trigger'
7174      WHERE f_int1 = new.f_int1;
7175END|
7176UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7177WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7178
7179# check trigger-5 success: 	1
7180DROP TRIGGER trg_1;
7181UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7182f_int2 = CAST(f_char1 AS SIGNED INT),
7183f_charbig = 'just inserted'
7184   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7185DELETE FROM t0_aux
7186WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7187INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7188SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7189'just inserted' FROM t0_template
7190WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7191CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7192BEGIN
7193UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7194f_charbig = 'updated by trigger'
7195      WHERE f_int1 = - old.f_int1;
7196END|
7197UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7198WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7199
7200# check trigger-6 success: 	1
7201DROP TRIGGER trg_1;
7202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7203f_int2 = CAST(f_char1 AS SIGNED INT),
7204f_charbig = 'just inserted'
7205   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7206DELETE FROM t0_aux
7207WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7208INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7209SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7210'just inserted' FROM t0_template
7211WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7212CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7213BEGIN
7214UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7215f_charbig = 'updated by trigger'
7216      WHERE f_int1 = - old.f_int1;
7217END|
7218DELETE FROM t0_aux
7219WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7220
7221# check trigger-7 success: 	1
7222DROP TRIGGER trg_1;
7223UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7224f_int2 = CAST(f_char1 AS SIGNED INT),
7225f_charbig = 'just inserted'
7226   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7227DELETE FROM t0_aux
7228WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7229INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7230SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7231'just inserted' FROM t0_template
7232WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7233CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7234BEGIN
7235UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7236f_charbig = 'updated by trigger'
7237      WHERE f_int1 = - old.f_int1;
7238END|
7239DELETE FROM t0_aux
7240WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7241
7242# check trigger-8 success: 	1
7243DROP TRIGGER trg_1;
7244UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7245f_int2 = CAST(f_char1 AS SIGNED INT),
7246f_charbig = 'just inserted'
7247   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7248DELETE FROM t0_aux
7249WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7250DELETE FROM t1
7251WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7252CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7253BEGIN
7254SET new.f_int1 = old.f_int1 + @max_row,
7255new.f_int2 = old.f_int2 - @max_row,
7256new.f_charbig = '####updated per update trigger####';
7257END|
7258UPDATE t1
7259SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7260f_charbig = '####updated per update statement itself####';
7261
7262# check trigger-9 success: 	1
7263DROP TRIGGER trg_2;
7264UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7265f_int2 = CAST(f_char1 AS SIGNED INT),
7266f_charbig = CONCAT('===',f_char1,'===');
7267CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7268BEGIN
7269SET new.f_int1 = new.f_int1 + @max_row,
7270new.f_int2 = new.f_int2 - @max_row,
7271new.f_charbig = '####updated per update trigger####';
7272END|
7273UPDATE t1
7274SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7275f_charbig = '####updated per update statement itself####';
7276
7277# check trigger-10 success: 	1
7278DROP TRIGGER trg_2;
7279UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7280f_int2 = CAST(f_char1 AS SIGNED INT),
7281f_charbig = CONCAT('===',f_char1,'===');
7282CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7283BEGIN
7284SET new.f_int1 = @my_max1 + @counter,
7285new.f_int2 = @my_min2 - @counter,
7286new.f_charbig = '####updated per insert trigger####';
7287SET @counter = @counter + 1;
7288END|
7289SET @counter = 1;
7290SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7291INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7292SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7293CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7294WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7295ORDER BY f_int1;
7296DROP TRIGGER trg_3;
7297
7298# check trigger-11 success: 	1
7299DELETE FROM t1
7300WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7301AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7302AND f_charbig = '####updated per insert trigger####';
7303CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7304BEGIN
7305SET new.f_int1 = @my_max1 + @counter,
7306new.f_int2 = @my_min2 - @counter,
7307new.f_charbig = '####updated per insert trigger####';
7308SET @counter = @counter + 1;
7309END|
7310SET @counter = 1;
7311SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7312INSERT INTO t1 (f_char1, f_char2, f_charbig)
7313SELECT CAST(f_int1 AS CHAR),
7314CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7316ORDER BY f_int1;
7317DROP TRIGGER trg_3;
7318
7319# check trigger-12 success: 	1
7320DELETE FROM t1
7321WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7322AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7323AND f_charbig = '####updated per insert trigger####';
7324ANALYZE  TABLE t1;
7325Table	Op	Msg_type	Msg_text
7326test.t1	analyze	status	OK
7327CHECK    TABLE t1 EXTENDED;
7328Table	Op	Msg_type	Msg_text
7329test.t1	check	status	OK
7330CHECKSUM TABLE t1 EXTENDED;
7331Table	Checksum
7332test.t1	<some_value>
7333OPTIMIZE TABLE t1;
7334Table	Op	Msg_type	Msg_text
7335test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7336test.t1	optimize	status	OK
7337# check layout success:    1
7338REPAIR   TABLE t1 EXTENDED;
7339Table	Op	Msg_type	Msg_text
7340test.t1	repair	status	OK
7341# check layout success:    1
7342TRUNCATE t1;
7343
7344# check TRUNCATE success: 	1
7345# check layout success:    1
7346# End usability test (inc/partition_check.inc)
7347DROP TABLE t1;
7348CREATE TABLE t1 (
7349f_int1 INTEGER,
7350f_int2 INTEGER,
7351f_char1 CHAR(20),
7352f_char2 CHAR(20),
7353f_charbig VARCHAR(1000)
7354, PRIMARY KEY (f_int1,f_int2)
7355)
7356PARTITION BY LIST(ABS(MOD(f_int1,2)))
7357SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
7358(PARTITION part1 VALUES IN (0),
7359PARTITION part2 VALUES IN (1),
7360PARTITION part3 VALUES IN (NULL));
7361INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7362SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7363WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7364ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
7365INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7366SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7367WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7368# Start usability test (inc/partition_check.inc)
7369create_command
7370SHOW CREATE TABLE t1;
7371Table	Create Table
7372t1	CREATE TABLE `t1` (
7373  `f_int1` bigint(20) NOT NULL,
7374  `f_int2` bigint(20) NOT NULL,
7375  `f_char1` char(20) DEFAULT NULL,
7376  `f_char2` char(20) DEFAULT NULL,
7377  `f_charbig` varchar(1000) DEFAULT NULL,
7378  PRIMARY KEY (`f_int1`,`f_int2`)
7379) ENGINE=InnoDB DEFAULT CHARSET=latin1
7380/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
7381SUBPARTITION BY KEY (f_int2)
7382SUBPARTITIONS 3
7383(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
7384 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
7385 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
7386
7387# check prerequisites-1 success:    1
7388# check COUNT(*) success:    1
7389# check MIN/MAX(f_int1) success:    1
7390# check MIN/MAX(f_int2) success:    1
7391INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7392SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7393CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7394WHERE f_int1 IN (2,3);
7395ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7396# check prerequisites-3 success:    1
7397# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7398INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7399SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7400CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7401WHERE f_int1 IN (2,3);
7402DELETE FROM t1 WHERE f_charbig = 'delete me';
7403INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7404SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7405CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7406WHERE f_int1 IN (2,3);
7407DELETE FROM t1 WHERE f_charbig = 'delete me';
7408# check read via f_int1 success: 1
7409# check read via f_int2 success: 1
7410
7411# check multiple-1 success: 	1
7412DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7413
7414# check multiple-2 success: 	1
7415INSERT INTO t1 SELECT * FROM t0_template
7416WHERE MOD(f_int1,3) = 0;
7417
7418# check multiple-3 success: 	1
7419UPDATE t1 SET f_int1 = f_int1 + @max_row
7420WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7421AND @max_row_div2 + @max_row_div4;
7422
7423# check multiple-4 success: 	1
7424DELETE FROM t1
7425WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7426AND @max_row_div2 + @max_row_div4 + @max_row;
7427
7428# check multiple-5 success: 	1
7429SELECT COUNT(*) INTO @try_count FROM t0_template
7430WHERE MOD(f_int1,3) = 0
7431AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7432SELECT COUNT(*) INTO @clash_count
7433FROM t1 INNER JOIN t0_template USING(f_int1)
7434WHERE MOD(f_int1,3) = 0
7435AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7436SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7437INSERT INTO t1
7438SET f_int1 = @cur_value , f_int2 = @cur_value,
7439f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7440f_charbig = '#SINGLE#';
7441
7442# check single-1 success: 	1
7443SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7444INSERT INTO t1
7445SET f_int1 = @cur_value , f_int2 = @cur_value,
7446f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7447f_charbig = '#SINGLE#';
7448
7449# check single-2 success: 	1
7450SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7451SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7452UPDATE t1 SET f_int1 = @cur_value2
7453WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7454
7455# check single-3 success: 	1
7456SET @cur_value1= -1;
7457SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7458UPDATE t1 SET f_int1 = @cur_value1
7459WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7460
7461# check single-4 success: 	1
7462SELECT MAX(f_int1) INTO @cur_value FROM t1;
7463DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7464
7465# check single-5 success: 	1
7466DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7467
7468# check single-6 success: 	1
7469INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7470
7471# check single-7 success: 	1
7472DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7473DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7474INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7475f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7476f_charbig = '#NULL#';
7477INSERT INTO t1
7478SET f_int1 = NULL , f_int2 = -@max_row,
7479f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7480f_charbig = '#NULL#';
7481ERROR 23000: Column 'f_int1' cannot be null
7482# check null success:    1
7483DELETE FROM t1
7484WHERE f_int1 = 0 AND f_int2 = 0
7485AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7486AND f_charbig = '#NULL#';
7487INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7488SELECT f_int1, f_int1, '', '', 'was inserted'
7489   FROM t0_template source_tab
7490WHERE MOD(f_int1,3) = 0
7491AND f_int1 BETWEEN @max_row_div2 AND @max_row
7492ON DUPLICATE KEY
7493UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7494f_int2 = 2 * @max_row + source_tab.f_int1,
7495f_charbig = 'was updated';
7496
7497# check unique-1-a success: 	1
7498
7499# check unique-1-b success: 	1
7500DELETE FROM t1 WHERE f_charbig = 'was inserted';
7501UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7502f_int2 = CAST(f_char1 AS SIGNED INT),
7503f_charbig = CONCAT('===',f_char1,'===')
7504WHERE f_charbig = 'was updated';
7505REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7506SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
7507   FROM t0_template source_tab
7508WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7509
7510# check replace success: 	1
7511DELETE FROM t1
7512WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
7513DELETE FROM t1
7514WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
7515f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
7516UPDATE t1 SET f_int2 = f_int1,
7517f_char1 = CAST(f_int1 AS CHAR),
7518f_char2 = CAST(f_int1 AS CHAR),
7519f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
7520WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
7521SET AUTOCOMMIT= 0;
7522INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7523SELECT f_int1, f_int1, '', '', 'was inserted'
7524FROM t0_template source_tab
7525WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7526
7527# check transactions-1 success: 	1
7528COMMIT WORK;
7529
7530# check transactions-2 success: 	1
7531ROLLBACK WORK;
7532
7533# check transactions-3 success: 	1
7534DELETE FROM t1 WHERE f_charbig = 'was inserted';
7535COMMIT WORK;
7536ROLLBACK WORK;
7537
7538# check transactions-4 success: 	1
7539INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7540SELECT f_int1, f_int1, '', '', 'was inserted'
7541FROM t0_template source_tab
7542WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7543
7544# check transactions-5 success: 	1
7545ROLLBACK WORK;
7546
7547# check transactions-6 success: 	1
7548# INFO: Storage engine used for t1 seems to be transactional.
7549COMMIT;
7550
7551# check transactions-7 success: 	1
7552DELETE FROM t1 WHERE f_charbig = 'was inserted';
7553COMMIT WORK;
7554SET @@session.sql_mode = 'traditional';
7555Warnings:
7556Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7557SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
7558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7559SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
7560'', '', 'was inserted' FROM t0_template
7561WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
7562ERROR 22012: Division by 0
7563COMMIT;
7564
7565# check transactions-8 success: 	1
7566# INFO: Storage engine used for t1 seems to be able to revert
7567#       changes made by the failing statement.
7568SET @@session.sql_mode = '';
7569Warnings:
7570Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
7571SET AUTOCOMMIT= 1;
7572DELETE FROM t1 WHERE f_charbig = 'was inserted';
7573COMMIT WORK;
7574UPDATE t1 SET f_charbig = REPEAT('b', 1000);
7575
7576# check special-1 success: 	1
7577UPDATE t1 SET f_charbig = '';
7578
7579# check special-2 success: 	1
7580UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
7581INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7582SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
7583WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7584INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7585SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7586'just inserted' FROM t0_template
7587WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7588CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
7589BEGIN
7590UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7591f_charbig = 'updated by trigger'
7592      WHERE f_int1 = new.f_int1;
7593END|
7594INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7595SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7597
7598# check trigger-1 success: 	1
7599DROP TRIGGER trg_1;
7600UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7601f_int2 = CAST(f_char1 AS SIGNED INT),
7602f_charbig = 'just inserted'
7603   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7604DELETE FROM t0_aux
7605WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7606INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7607SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7608'just inserted' FROM t0_template
7609WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7610CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
7611BEGIN
7612UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7613f_charbig = 'updated by trigger'
7614      WHERE f_int1 = new.f_int1;
7615END|
7616INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7617SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
7618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7619
7620# check trigger-2 success: 	1
7621DROP TRIGGER trg_1;
7622UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7623f_int2 = CAST(f_char1 AS SIGNED INT),
7624f_charbig = 'just inserted'
7625   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7626DELETE FROM t0_aux
7627WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7628INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7629SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7630'just inserted' FROM t0_template
7631WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7632CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7633BEGIN
7634UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7635f_charbig = 'updated by trigger'
7636      WHERE f_int1 = new.f_int1;
7637END|
7638UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7639WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7640
7641# check trigger-3 success: 	1
7642DROP TRIGGER trg_1;
7643UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7644f_int2 = CAST(f_char1 AS SIGNED INT),
7645f_charbig = 'just inserted'
7646   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7647DELETE FROM t0_aux
7648WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7649INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7650SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7651'just inserted' FROM t0_template
7652WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7653CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
7654BEGIN
7655UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7656f_charbig = 'updated by trigger'
7657      WHERE f_int1 = - old.f_int1;
7658END|
7659UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7660WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7661
7662# check trigger-4 success: 	1
7663DROP TRIGGER trg_1;
7664UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7665f_int2 = CAST(f_char1 AS SIGNED INT),
7666f_charbig = 'just inserted'
7667   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7668DELETE FROM t0_aux
7669WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7670INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7671SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7672'just inserted' FROM t0_template
7673WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7674CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7675BEGIN
7676UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7677f_charbig = 'updated by trigger'
7678      WHERE f_int1 = new.f_int1;
7679END|
7680UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7681WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7682
7683# check trigger-5 success: 	1
7684DROP TRIGGER trg_1;
7685UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7686f_int2 = CAST(f_char1 AS SIGNED INT),
7687f_charbig = 'just inserted'
7688   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7689DELETE FROM t0_aux
7690WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7691INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7692SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7693'just inserted' FROM t0_template
7694WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7695CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
7696BEGIN
7697UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7698f_charbig = 'updated by trigger'
7699      WHERE f_int1 = - old.f_int1;
7700END|
7701UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
7702WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7703
7704# check trigger-6 success: 	1
7705DROP TRIGGER trg_1;
7706UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7707f_int2 = CAST(f_char1 AS SIGNED INT),
7708f_charbig = 'just inserted'
7709   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7710DELETE FROM t0_aux
7711WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7712INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7713SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7714'just inserted' FROM t0_template
7715WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7716CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
7717BEGIN
7718UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7719f_charbig = 'updated by trigger'
7720      WHERE f_int1 = - old.f_int1;
7721END|
7722DELETE FROM t0_aux
7723WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7724
7725# check trigger-7 success: 	1
7726DROP TRIGGER trg_1;
7727UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7728f_int2 = CAST(f_char1 AS SIGNED INT),
7729f_charbig = 'just inserted'
7730   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7731DELETE FROM t0_aux
7732WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7733INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
7734SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
7735'just inserted' FROM t0_template
7736WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7737CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
7738BEGIN
7739UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
7740f_charbig = 'updated by trigger'
7741      WHERE f_int1 = - old.f_int1;
7742END|
7743DELETE FROM t0_aux
7744WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
7745
7746# check trigger-8 success: 	1
7747DROP TRIGGER trg_1;
7748UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7749f_int2 = CAST(f_char1 AS SIGNED INT),
7750f_charbig = 'just inserted'
7751   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
7752DELETE FROM t0_aux
7753WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7754DELETE FROM t1
7755WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
7756CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7757BEGIN
7758SET new.f_int1 = old.f_int1 + @max_row,
7759new.f_int2 = old.f_int2 - @max_row,
7760new.f_charbig = '####updated per update trigger####';
7761END|
7762UPDATE t1
7763SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7764f_charbig = '####updated per update statement itself####';
7765
7766# check trigger-9 success: 	1
7767DROP TRIGGER trg_2;
7768UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7769f_int2 = CAST(f_char1 AS SIGNED INT),
7770f_charbig = CONCAT('===',f_char1,'===');
7771CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
7772BEGIN
7773SET new.f_int1 = new.f_int1 + @max_row,
7774new.f_int2 = new.f_int2 - @max_row,
7775new.f_charbig = '####updated per update trigger####';
7776END|
7777UPDATE t1
7778SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
7779f_charbig = '####updated per update statement itself####';
7780
7781# check trigger-10 success: 	1
7782DROP TRIGGER trg_2;
7783UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7784f_int2 = CAST(f_char1 AS SIGNED INT),
7785f_charbig = CONCAT('===',f_char1,'===');
7786CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7787BEGIN
7788SET new.f_int1 = @my_max1 + @counter,
7789new.f_int2 = @my_min2 - @counter,
7790new.f_charbig = '####updated per insert trigger####';
7791SET @counter = @counter + 1;
7792END|
7793SET @counter = 1;
7794SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7795INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7796SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7797CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7798WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7799ORDER BY f_int1;
7800DROP TRIGGER trg_3;
7801
7802# check trigger-11 success: 	1
7803DELETE FROM t1
7804WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7805AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7806AND f_charbig = '####updated per insert trigger####';
7807CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
7808BEGIN
7809SET new.f_int1 = @my_max1 + @counter,
7810new.f_int2 = @my_min2 - @counter,
7811new.f_charbig = '####updated per insert trigger####';
7812SET @counter = @counter + 1;
7813END|
7814SET @counter = 1;
7815SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
7816INSERT INTO t1 (f_char1, f_char2, f_charbig)
7817SELECT CAST(f_int1 AS CHAR),
7818CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
7819WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
7820ORDER BY f_int1;
7821DROP TRIGGER trg_3;
7822
7823# check trigger-12 success: 	1
7824DELETE FROM t1
7825WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
7826AND f_int2 <> CAST(f_char1 AS SIGNED INT)
7827AND f_charbig = '####updated per insert trigger####';
7828ANALYZE  TABLE t1;
7829Table	Op	Msg_type	Msg_text
7830test.t1	analyze	status	OK
7831CHECK    TABLE t1 EXTENDED;
7832Table	Op	Msg_type	Msg_text
7833test.t1	check	status	OK
7834CHECKSUM TABLE t1 EXTENDED;
7835Table	Checksum
7836test.t1	<some_value>
7837OPTIMIZE TABLE t1;
7838Table	Op	Msg_type	Msg_text
7839test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
7840test.t1	optimize	status	OK
7841# check layout success:    1
7842REPAIR   TABLE t1 EXTENDED;
7843Table	Op	Msg_type	Msg_text
7844test.t1	repair	status	OK
7845# check layout success:    1
7846TRUNCATE t1;
7847
7848# check TRUNCATE success: 	1
7849# check layout success:    1
7850# End usability test (inc/partition_check.inc)
7851DROP TABLE t1;
7852DROP TABLE IF EXISTS t1;
7853CREATE TABLE t1 (
7854f_int1 INTEGER,
7855f_int2 INTEGER,
7856f_char1 CHAR(20),
7857f_char2 CHAR(20),
7858f_charbig VARCHAR(1000)
7859, PRIMARY KEY (f_int2,f_int1)
7860)
7861PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
7862INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7863SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7864WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
7865ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
7866INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
7867SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
7868WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
7869# Start usability test (inc/partition_check.inc)
7870create_command
7871SHOW CREATE TABLE t1;
7872Table	Create Table
7873t1	CREATE TABLE `t1` (
7874  `f_int1` bigint(20) NOT NULL,
7875  `f_int2` bigint(20) NOT NULL,
7876  `f_char1` char(20) DEFAULT NULL,
7877  `f_char2` char(20) DEFAULT NULL,
7878  `f_charbig` varchar(1000) DEFAULT NULL,
7879  PRIMARY KEY (`f_int2`,`f_int1`)
7880) ENGINE=InnoDB DEFAULT CHARSET=latin1
7881/*!50100 PARTITION BY HASH (f_int1 + f_int2)
7882PARTITIONS 2 */
7883
7884# check prerequisites-1 success:    1
7885# check COUNT(*) success:    1
7886# check MIN/MAX(f_int1) success:    1
7887# check MIN/MAX(f_int2) success:    1
7888INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7889SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
7890CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
7891WHERE f_int1 IN (2,3);
7892ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
7893# check prerequisites-3 success:    1
7894# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
7895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7896SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7897CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7898WHERE f_int1 IN (2,3);
7899DELETE FROM t1 WHERE f_charbig = 'delete me';
7900INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7901SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
7902CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
7903WHERE f_int1 IN (2,3);
7904DELETE FROM t1 WHERE f_charbig = 'delete me';
7905# check read via f_int1 success: 1
7906# check read via f_int2 success: 1
7907
7908# check multiple-1 success: 	1
7909DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
7910
7911# check multiple-2 success: 	1
7912INSERT INTO t1 SELECT * FROM t0_template
7913WHERE MOD(f_int1,3) = 0;
7914
7915# check multiple-3 success: 	1
7916UPDATE t1 SET f_int1 = f_int1 + @max_row
7917WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
7918AND @max_row_div2 + @max_row_div4;
7919
7920# check multiple-4 success: 	1
7921DELETE FROM t1
7922WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
7923AND @max_row_div2 + @max_row_div4 + @max_row;
7924
7925# check multiple-5 success: 	1
7926SELECT COUNT(*) INTO @try_count FROM t0_template
7927WHERE MOD(f_int1,3) = 0
7928AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7929SELECT COUNT(*) INTO @clash_count
7930FROM t1 INNER JOIN t0_template USING(f_int1)
7931WHERE MOD(f_int1,3) = 0
7932AND f_int1 BETWEEN @max_row_div2 AND @max_row;
7933SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
7934INSERT INTO t1
7935SET f_int1 = @cur_value , f_int2 = @cur_value,
7936f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7937f_charbig = '#SINGLE#';
7938
7939# check single-1 success: 	1
7940SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
7941INSERT INTO t1
7942SET f_int1 = @cur_value , f_int2 = @cur_value,
7943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
7944f_charbig = '#SINGLE#';
7945
7946# check single-2 success: 	1
7947SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
7948SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
7949UPDATE t1 SET f_int1 = @cur_value2
7950WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
7951
7952# check single-3 success: 	1
7953SET @cur_value1= -1;
7954SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
7955UPDATE t1 SET f_int1 = @cur_value1
7956WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
7957
7958# check single-4 success: 	1
7959SELECT MAX(f_int1) INTO @cur_value FROM t1;
7960DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
7961
7962# check single-5 success: 	1
7963DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
7964
7965# check single-6 success: 	1
7966INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
7967
7968# check single-7 success: 	1
7969DELETE FROM t1 WHERE f_charbig = '#2147483647##';
7970DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
7971INSERT t1 SET f_int1 = 0 , f_int2 = 0,
7972f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
7973f_charbig = '#NULL#';
7974INSERT INTO t1
7975SET f_int1 = NULL , f_int2 = -@max_row,
7976f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
7977f_charbig = '#NULL#';
7978ERROR 23000: Column 'f_int1' cannot be null
7979# check null success:    1
7980DELETE FROM t1
7981WHERE f_int1 = 0 AND f_int2 = 0
7982AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
7983AND f_charbig = '#NULL#';
7984INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
7985SELECT f_int1, f_int1, '', '', 'was inserted'
7986   FROM t0_template source_tab
7987WHERE MOD(f_int1,3) = 0
7988AND f_int1 BETWEEN @max_row_div2 AND @max_row
7989ON DUPLICATE KEY
7990UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
7991f_int2 = 2 * @max_row + source_tab.f_int1,
7992f_charbig = 'was updated';
7993
7994# check unique-1-a success: 	1
7995
7996# check unique-1-b success: 	1
7997DELETE FROM t1 WHERE f_charbig = 'was inserted';
7998UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
7999f_int2 = CAST(f_char1 AS SIGNED INT),
8000f_charbig = CONCAT('===',f_char1,'===')
8001WHERE f_charbig = 'was updated';
8002REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8003SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8004   FROM t0_template source_tab
8005WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8006
8007# check replace success: 	1
8008DELETE FROM t1
8009WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8010DELETE FROM t1
8011WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8012f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8013UPDATE t1 SET f_int2 = f_int1,
8014f_char1 = CAST(f_int1 AS CHAR),
8015f_char2 = CAST(f_int1 AS CHAR),
8016f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8017WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8018SET AUTOCOMMIT= 0;
8019INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8020SELECT f_int1, f_int1, '', '', 'was inserted'
8021FROM t0_template source_tab
8022WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8023
8024# check transactions-1 success: 	1
8025COMMIT WORK;
8026
8027# check transactions-2 success: 	1
8028ROLLBACK WORK;
8029
8030# check transactions-3 success: 	1
8031DELETE FROM t1 WHERE f_charbig = 'was inserted';
8032COMMIT WORK;
8033ROLLBACK WORK;
8034
8035# check transactions-4 success: 	1
8036INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8037SELECT f_int1, f_int1, '', '', 'was inserted'
8038FROM t0_template source_tab
8039WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8040
8041# check transactions-5 success: 	1
8042ROLLBACK WORK;
8043
8044# check transactions-6 success: 	1
8045# INFO: Storage engine used for t1 seems to be transactional.
8046COMMIT;
8047
8048# check transactions-7 success: 	1
8049DELETE FROM t1 WHERE f_charbig = 'was inserted';
8050COMMIT WORK;
8051SET @@session.sql_mode = 'traditional';
8052Warnings:
8053Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8054SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8055INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8056SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8057'', '', 'was inserted' FROM t0_template
8058WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8059ERROR 22012: Division by 0
8060COMMIT;
8061
8062# check transactions-8 success: 	1
8063# INFO: Storage engine used for t1 seems to be able to revert
8064#       changes made by the failing statement.
8065SET @@session.sql_mode = '';
8066Warnings:
8067Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8068SET AUTOCOMMIT= 1;
8069DELETE FROM t1 WHERE f_charbig = 'was inserted';
8070COMMIT WORK;
8071UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8072
8073# check special-1 success: 	1
8074UPDATE t1 SET f_charbig = '';
8075
8076# check special-2 success: 	1
8077UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8078INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8079SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8080WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8081INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8082SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8083'just inserted' FROM t0_template
8084WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8085CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8086BEGIN
8087UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8088f_charbig = 'updated by trigger'
8089      WHERE f_int1 = new.f_int1;
8090END|
8091INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8092SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8093WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8094
8095# check trigger-1 success: 	1
8096DROP TRIGGER trg_1;
8097UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8098f_int2 = CAST(f_char1 AS SIGNED INT),
8099f_charbig = 'just inserted'
8100   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8101DELETE FROM t0_aux
8102WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8103INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8104SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8105'just inserted' FROM t0_template
8106WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8107CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8108BEGIN
8109UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8110f_charbig = 'updated by trigger'
8111      WHERE f_int1 = new.f_int1;
8112END|
8113INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8114SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8115WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8116
8117# check trigger-2 success: 	1
8118DROP TRIGGER trg_1;
8119UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8120f_int2 = CAST(f_char1 AS SIGNED INT),
8121f_charbig = 'just inserted'
8122   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8123DELETE FROM t0_aux
8124WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8125INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8126SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8127'just inserted' FROM t0_template
8128WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8129CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8130BEGIN
8131UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8132f_charbig = 'updated by trigger'
8133      WHERE f_int1 = new.f_int1;
8134END|
8135UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8136WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8137
8138# check trigger-3 success: 	1
8139DROP TRIGGER trg_1;
8140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8141f_int2 = CAST(f_char1 AS SIGNED INT),
8142f_charbig = 'just inserted'
8143   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8144DELETE FROM t0_aux
8145WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8146INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8147SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8148'just inserted' FROM t0_template
8149WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8150CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8151BEGIN
8152UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8153f_charbig = 'updated by trigger'
8154      WHERE f_int1 = - old.f_int1;
8155END|
8156UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8157WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8158
8159# check trigger-4 success: 	1
8160DROP TRIGGER trg_1;
8161UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8162f_int2 = CAST(f_char1 AS SIGNED INT),
8163f_charbig = 'just inserted'
8164   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8165DELETE FROM t0_aux
8166WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8167INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8168SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8169'just inserted' FROM t0_template
8170WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8171CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8172BEGIN
8173UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8174f_charbig = 'updated by trigger'
8175      WHERE f_int1 = new.f_int1;
8176END|
8177UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8178WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8179
8180# check trigger-5 success: 	1
8181DROP TRIGGER trg_1;
8182UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8183f_int2 = CAST(f_char1 AS SIGNED INT),
8184f_charbig = 'just inserted'
8185   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8186DELETE FROM t0_aux
8187WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8188INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8189SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8190'just inserted' FROM t0_template
8191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8192CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8193BEGIN
8194UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8195f_charbig = 'updated by trigger'
8196      WHERE f_int1 = - old.f_int1;
8197END|
8198UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8199WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8200
8201# check trigger-6 success: 	1
8202DROP TRIGGER trg_1;
8203UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8204f_int2 = CAST(f_char1 AS SIGNED INT),
8205f_charbig = 'just inserted'
8206   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8207DELETE FROM t0_aux
8208WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8209INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8210SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8211'just inserted' FROM t0_template
8212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8213CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8214BEGIN
8215UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8216f_charbig = 'updated by trigger'
8217      WHERE f_int1 = - old.f_int1;
8218END|
8219DELETE FROM t0_aux
8220WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8221
8222# check trigger-7 success: 	1
8223DROP TRIGGER trg_1;
8224UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8225f_int2 = CAST(f_char1 AS SIGNED INT),
8226f_charbig = 'just inserted'
8227   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8228DELETE FROM t0_aux
8229WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8230INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8231SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8232'just inserted' FROM t0_template
8233WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8234CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8235BEGIN
8236UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8237f_charbig = 'updated by trigger'
8238      WHERE f_int1 = - old.f_int1;
8239END|
8240DELETE FROM t0_aux
8241WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8242
8243# check trigger-8 success: 	1
8244DROP TRIGGER trg_1;
8245UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8246f_int2 = CAST(f_char1 AS SIGNED INT),
8247f_charbig = 'just inserted'
8248   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8249DELETE FROM t0_aux
8250WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8251DELETE FROM t1
8252WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8253CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8254BEGIN
8255SET new.f_int1 = old.f_int1 + @max_row,
8256new.f_int2 = old.f_int2 - @max_row,
8257new.f_charbig = '####updated per update trigger####';
8258END|
8259UPDATE t1
8260SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8261f_charbig = '####updated per update statement itself####';
8262
8263# check trigger-9 success: 	1
8264DROP TRIGGER trg_2;
8265UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8266f_int2 = CAST(f_char1 AS SIGNED INT),
8267f_charbig = CONCAT('===',f_char1,'===');
8268CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8269BEGIN
8270SET new.f_int1 = new.f_int1 + @max_row,
8271new.f_int2 = new.f_int2 - @max_row,
8272new.f_charbig = '####updated per update trigger####';
8273END|
8274UPDATE t1
8275SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8276f_charbig = '####updated per update statement itself####';
8277
8278# check trigger-10 success: 	1
8279DROP TRIGGER trg_2;
8280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8281f_int2 = CAST(f_char1 AS SIGNED INT),
8282f_charbig = CONCAT('===',f_char1,'===');
8283CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8284BEGIN
8285SET new.f_int1 = @my_max1 + @counter,
8286new.f_int2 = @my_min2 - @counter,
8287new.f_charbig = '####updated per insert trigger####';
8288SET @counter = @counter + 1;
8289END|
8290SET @counter = 1;
8291SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8293SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8294CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8295WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8296ORDER BY f_int1;
8297DROP TRIGGER trg_3;
8298
8299# check trigger-11 success: 	1
8300DELETE FROM t1
8301WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8302AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8303AND f_charbig = '####updated per insert trigger####';
8304CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8305BEGIN
8306SET new.f_int1 = @my_max1 + @counter,
8307new.f_int2 = @my_min2 - @counter,
8308new.f_charbig = '####updated per insert trigger####';
8309SET @counter = @counter + 1;
8310END|
8311SET @counter = 1;
8312SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8313INSERT INTO t1 (f_char1, f_char2, f_charbig)
8314SELECT CAST(f_int1 AS CHAR),
8315CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8316WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8317ORDER BY f_int1;
8318DROP TRIGGER trg_3;
8319
8320# check trigger-12 success: 	1
8321DELETE FROM t1
8322WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8323AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8324AND f_charbig = '####updated per insert trigger####';
8325ANALYZE  TABLE t1;
8326Table	Op	Msg_type	Msg_text
8327test.t1	analyze	status	OK
8328CHECK    TABLE t1 EXTENDED;
8329Table	Op	Msg_type	Msg_text
8330test.t1	check	status	OK
8331CHECKSUM TABLE t1 EXTENDED;
8332Table	Checksum
8333test.t1	<some_value>
8334OPTIMIZE TABLE t1;
8335Table	Op	Msg_type	Msg_text
8336test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8337test.t1	optimize	status	OK
8338# check layout success:    1
8339REPAIR   TABLE t1 EXTENDED;
8340Table	Op	Msg_type	Msg_text
8341test.t1	repair	status	OK
8342# check layout success:    1
8343TRUNCATE t1;
8344
8345# check TRUNCATE success: 	1
8346# check layout success:    1
8347# End usability test (inc/partition_check.inc)
8348DROP TABLE t1;
8349CREATE TABLE t1 (
8350f_int1 INTEGER,
8351f_int2 INTEGER,
8352f_char1 CHAR(20),
8353f_char2 CHAR(20),
8354f_charbig VARCHAR(1000)
8355, PRIMARY KEY (f_int2,f_int1)
8356)
8357PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
8358INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8359SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8360WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8361ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
8362INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8363SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8364WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8365# Start usability test (inc/partition_check.inc)
8366create_command
8367SHOW CREATE TABLE t1;
8368Table	Create Table
8369t1	CREATE TABLE `t1` (
8370  `f_int1` bigint(20) NOT NULL,
8371  `f_int2` bigint(20) NOT NULL,
8372  `f_char1` char(20) DEFAULT NULL,
8373  `f_char2` char(20) DEFAULT NULL,
8374  `f_charbig` varchar(1000) DEFAULT NULL,
8375  PRIMARY KEY (`f_int2`,`f_int1`)
8376) ENGINE=InnoDB DEFAULT CHARSET=latin1
8377/*!50100 PARTITION BY KEY (f_int1,f_int2)
8378PARTITIONS 5 */
8379
8380# check prerequisites-1 success:    1
8381# check COUNT(*) success:    1
8382# check MIN/MAX(f_int1) success:    1
8383# check MIN/MAX(f_int2) success:    1
8384INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8385SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8386CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8387WHERE f_int1 IN (2,3);
8388ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8389# check prerequisites-3 success:    1
8390# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8391INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8392SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8393CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8394WHERE f_int1 IN (2,3);
8395DELETE FROM t1 WHERE f_charbig = 'delete me';
8396INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8397SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8398CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8399WHERE f_int1 IN (2,3);
8400DELETE FROM t1 WHERE f_charbig = 'delete me';
8401# check read via f_int1 success: 1
8402# check read via f_int2 success: 1
8403
8404# check multiple-1 success: 	1
8405DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8406
8407# check multiple-2 success: 	1
8408INSERT INTO t1 SELECT * FROM t0_template
8409WHERE MOD(f_int1,3) = 0;
8410
8411# check multiple-3 success: 	1
8412UPDATE t1 SET f_int1 = f_int1 + @max_row
8413WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8414AND @max_row_div2 + @max_row_div4;
8415
8416# check multiple-4 success: 	1
8417DELETE FROM t1
8418WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8419AND @max_row_div2 + @max_row_div4 + @max_row;
8420
8421# check multiple-5 success: 	1
8422SELECT COUNT(*) INTO @try_count FROM t0_template
8423WHERE MOD(f_int1,3) = 0
8424AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8425SELECT COUNT(*) INTO @clash_count
8426FROM t1 INNER JOIN t0_template USING(f_int1)
8427WHERE MOD(f_int1,3) = 0
8428AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8429SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8430INSERT INTO t1
8431SET f_int1 = @cur_value , f_int2 = @cur_value,
8432f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8433f_charbig = '#SINGLE#';
8434
8435# check single-1 success: 	1
8436SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8437INSERT INTO t1
8438SET f_int1 = @cur_value , f_int2 = @cur_value,
8439f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8440f_charbig = '#SINGLE#';
8441
8442# check single-2 success: 	1
8443SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8444SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8445UPDATE t1 SET f_int1 = @cur_value2
8446WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8447
8448# check single-3 success: 	1
8449SET @cur_value1= -1;
8450SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8451UPDATE t1 SET f_int1 = @cur_value1
8452WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8453
8454# check single-4 success: 	1
8455SELECT MAX(f_int1) INTO @cur_value FROM t1;
8456DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8457
8458# check single-5 success: 	1
8459DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8460
8461# check single-6 success: 	1
8462INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8463
8464# check single-7 success: 	1
8465DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8466DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8467INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8468f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8469f_charbig = '#NULL#';
8470INSERT INTO t1
8471SET f_int1 = NULL , f_int2 = -@max_row,
8472f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8473f_charbig = '#NULL#';
8474ERROR 23000: Column 'f_int1' cannot be null
8475# check null success:    1
8476DELETE FROM t1
8477WHERE f_int1 = 0 AND f_int2 = 0
8478AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8479AND f_charbig = '#NULL#';
8480INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8481SELECT f_int1, f_int1, '', '', 'was inserted'
8482   FROM t0_template source_tab
8483WHERE MOD(f_int1,3) = 0
8484AND f_int1 BETWEEN @max_row_div2 AND @max_row
8485ON DUPLICATE KEY
8486UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8487f_int2 = 2 * @max_row + source_tab.f_int1,
8488f_charbig = 'was updated';
8489
8490# check unique-1-a success: 	1
8491
8492# check unique-1-b success: 	1
8493DELETE FROM t1 WHERE f_charbig = 'was inserted';
8494UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8495f_int2 = CAST(f_char1 AS SIGNED INT),
8496f_charbig = CONCAT('===',f_char1,'===')
8497WHERE f_charbig = 'was updated';
8498REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8499SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
8500   FROM t0_template source_tab
8501WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8502
8503# check replace success: 	1
8504DELETE FROM t1
8505WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
8506DELETE FROM t1
8507WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
8508f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
8509UPDATE t1 SET f_int2 = f_int1,
8510f_char1 = CAST(f_int1 AS CHAR),
8511f_char2 = CAST(f_int1 AS CHAR),
8512f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
8513WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
8514SET AUTOCOMMIT= 0;
8515INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8516SELECT f_int1, f_int1, '', '', 'was inserted'
8517FROM t0_template source_tab
8518WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8519
8520# check transactions-1 success: 	1
8521COMMIT WORK;
8522
8523# check transactions-2 success: 	1
8524ROLLBACK WORK;
8525
8526# check transactions-3 success: 	1
8527DELETE FROM t1 WHERE f_charbig = 'was inserted';
8528COMMIT WORK;
8529ROLLBACK WORK;
8530
8531# check transactions-4 success: 	1
8532INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8533SELECT f_int1, f_int1, '', '', 'was inserted'
8534FROM t0_template source_tab
8535WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8536
8537# check transactions-5 success: 	1
8538ROLLBACK WORK;
8539
8540# check transactions-6 success: 	1
8541# INFO: Storage engine used for t1 seems to be transactional.
8542COMMIT;
8543
8544# check transactions-7 success: 	1
8545DELETE FROM t1 WHERE f_charbig = 'was inserted';
8546COMMIT WORK;
8547SET @@session.sql_mode = 'traditional';
8548Warnings:
8549Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8550SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
8551INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8552SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
8553'', '', 'was inserted' FROM t0_template
8554WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
8555ERROR 22012: Division by 0
8556COMMIT;
8557
8558# check transactions-8 success: 	1
8559# INFO: Storage engine used for t1 seems to be able to revert
8560#       changes made by the failing statement.
8561SET @@session.sql_mode = '';
8562Warnings:
8563Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
8564SET AUTOCOMMIT= 1;
8565DELETE FROM t1 WHERE f_charbig = 'was inserted';
8566COMMIT WORK;
8567UPDATE t1 SET f_charbig = REPEAT('b', 1000);
8568
8569# check special-1 success: 	1
8570UPDATE t1 SET f_charbig = '';
8571
8572# check special-2 success: 	1
8573UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
8574INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8575SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
8576WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8577INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8578SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8579'just inserted' FROM t0_template
8580WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8581CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
8582BEGIN
8583UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8584f_charbig = 'updated by trigger'
8585      WHERE f_int1 = new.f_int1;
8586END|
8587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8588SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8589WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8590
8591# check trigger-1 success: 	1
8592DROP TRIGGER trg_1;
8593UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8594f_int2 = CAST(f_char1 AS SIGNED INT),
8595f_charbig = 'just inserted'
8596   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8597DELETE FROM t0_aux
8598WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8599INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8600SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8601'just inserted' FROM t0_template
8602WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8603CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
8604BEGIN
8605UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8606f_charbig = 'updated by trigger'
8607      WHERE f_int1 = new.f_int1;
8608END|
8609INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8610SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
8611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8612
8613# check trigger-2 success: 	1
8614DROP TRIGGER trg_1;
8615UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8616f_int2 = CAST(f_char1 AS SIGNED INT),
8617f_charbig = 'just inserted'
8618   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8619DELETE FROM t0_aux
8620WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8621INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8622SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8623'just inserted' FROM t0_template
8624WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8625CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8626BEGIN
8627UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8628f_charbig = 'updated by trigger'
8629      WHERE f_int1 = new.f_int1;
8630END|
8631UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8632WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8633
8634# check trigger-3 success: 	1
8635DROP TRIGGER trg_1;
8636UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8637f_int2 = CAST(f_char1 AS SIGNED INT),
8638f_charbig = 'just inserted'
8639   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8640DELETE FROM t0_aux
8641WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8643SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8644'just inserted' FROM t0_template
8645WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8646CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
8647BEGIN
8648UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8649f_charbig = 'updated by trigger'
8650      WHERE f_int1 = - old.f_int1;
8651END|
8652UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8653WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8654
8655# check trigger-4 success: 	1
8656DROP TRIGGER trg_1;
8657UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8658f_int2 = CAST(f_char1 AS SIGNED INT),
8659f_charbig = 'just inserted'
8660   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8661DELETE FROM t0_aux
8662WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8663INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8664SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8665'just inserted' FROM t0_template
8666WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8667CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8668BEGIN
8669UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8670f_charbig = 'updated by trigger'
8671      WHERE f_int1 = new.f_int1;
8672END|
8673UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8674WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8675
8676# check trigger-5 success: 	1
8677DROP TRIGGER trg_1;
8678UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8679f_int2 = CAST(f_char1 AS SIGNED INT),
8680f_charbig = 'just inserted'
8681   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8682DELETE FROM t0_aux
8683WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8684INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8685SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8686'just inserted' FROM t0_template
8687WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8688CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
8689BEGIN
8690UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8691f_charbig = 'updated by trigger'
8692      WHERE f_int1 = - old.f_int1;
8693END|
8694UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
8695WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8696
8697# check trigger-6 success: 	1
8698DROP TRIGGER trg_1;
8699UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8700f_int2 = CAST(f_char1 AS SIGNED INT),
8701f_charbig = 'just inserted'
8702   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8703DELETE FROM t0_aux
8704WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8705INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8706SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8707'just inserted' FROM t0_template
8708WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8709CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
8710BEGIN
8711UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8712f_charbig = 'updated by trigger'
8713      WHERE f_int1 = - old.f_int1;
8714END|
8715DELETE FROM t0_aux
8716WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8717
8718# check trigger-7 success: 	1
8719DROP TRIGGER trg_1;
8720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8721f_int2 = CAST(f_char1 AS SIGNED INT),
8722f_charbig = 'just inserted'
8723   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8724DELETE FROM t0_aux
8725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
8727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
8728'just inserted' FROM t0_template
8729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8730CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
8731BEGIN
8732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
8733f_charbig = 'updated by trigger'
8734      WHERE f_int1 = - old.f_int1;
8735END|
8736DELETE FROM t0_aux
8737WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
8738
8739# check trigger-8 success: 	1
8740DROP TRIGGER trg_1;
8741UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8742f_int2 = CAST(f_char1 AS SIGNED INT),
8743f_charbig = 'just inserted'
8744   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
8745DELETE FROM t0_aux
8746WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8747DELETE FROM t1
8748WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
8749CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8750BEGIN
8751SET new.f_int1 = old.f_int1 + @max_row,
8752new.f_int2 = old.f_int2 - @max_row,
8753new.f_charbig = '####updated per update trigger####';
8754END|
8755UPDATE t1
8756SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8757f_charbig = '####updated per update statement itself####';
8758
8759# check trigger-9 success: 	1
8760DROP TRIGGER trg_2;
8761UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8762f_int2 = CAST(f_char1 AS SIGNED INT),
8763f_charbig = CONCAT('===',f_char1,'===');
8764CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
8765BEGIN
8766SET new.f_int1 = new.f_int1 + @max_row,
8767new.f_int2 = new.f_int2 - @max_row,
8768new.f_charbig = '####updated per update trigger####';
8769END|
8770UPDATE t1
8771SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
8772f_charbig = '####updated per update statement itself####';
8773
8774# check trigger-10 success: 	1
8775DROP TRIGGER trg_2;
8776UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
8777f_int2 = CAST(f_char1 AS SIGNED INT),
8778f_charbig = CONCAT('===',f_char1,'===');
8779CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8780BEGIN
8781SET new.f_int1 = @my_max1 + @counter,
8782new.f_int2 = @my_min2 - @counter,
8783new.f_charbig = '####updated per insert trigger####';
8784SET @counter = @counter + 1;
8785END|
8786SET @counter = 1;
8787SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8788INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8789SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8790CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8791WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8792ORDER BY f_int1;
8793DROP TRIGGER trg_3;
8794
8795# check trigger-11 success: 	1
8796DELETE FROM t1
8797WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8798AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8799AND f_charbig = '####updated per insert trigger####';
8800CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
8801BEGIN
8802SET new.f_int1 = @my_max1 + @counter,
8803new.f_int2 = @my_min2 - @counter,
8804new.f_charbig = '####updated per insert trigger####';
8805SET @counter = @counter + 1;
8806END|
8807SET @counter = 1;
8808SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
8809INSERT INTO t1 (f_char1, f_char2, f_charbig)
8810SELECT CAST(f_int1 AS CHAR),
8811CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
8812WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
8813ORDER BY f_int1;
8814DROP TRIGGER trg_3;
8815
8816# check trigger-12 success: 	1
8817DELETE FROM t1
8818WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
8819AND f_int2 <> CAST(f_char1 AS SIGNED INT)
8820AND f_charbig = '####updated per insert trigger####';
8821ANALYZE  TABLE t1;
8822Table	Op	Msg_type	Msg_text
8823test.t1	analyze	status	OK
8824CHECK    TABLE t1 EXTENDED;
8825Table	Op	Msg_type	Msg_text
8826test.t1	check	status	OK
8827CHECKSUM TABLE t1 EXTENDED;
8828Table	Checksum
8829test.t1	<some_value>
8830OPTIMIZE TABLE t1;
8831Table	Op	Msg_type	Msg_text
8832test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
8833test.t1	optimize	status	OK
8834# check layout success:    1
8835REPAIR   TABLE t1 EXTENDED;
8836Table	Op	Msg_type	Msg_text
8837test.t1	repair	status	OK
8838# check layout success:    1
8839TRUNCATE t1;
8840
8841# check TRUNCATE success: 	1
8842# check layout success:    1
8843# End usability test (inc/partition_check.inc)
8844DROP TABLE t1;
8845CREATE TABLE t1 (
8846f_int1 INTEGER,
8847f_int2 INTEGER,
8848f_char1 CHAR(20),
8849f_char2 CHAR(20),
8850f_charbig VARCHAR(1000)
8851, PRIMARY KEY (f_int2,f_int1)
8852)
8853PARTITION BY LIST(MOD(f_int1 + f_int2,4))
8854(PARTITION part_3 VALUES IN (-3),
8855PARTITION part_2 VALUES IN (-2),
8856PARTITION part_1 VALUES IN (-1),
8857PARTITION part_N VALUES IN (NULL),
8858PARTITION part0 VALUES IN (0),
8859PARTITION part1 VALUES IN (1),
8860PARTITION part2 VALUES IN (2),
8861PARTITION part3 VALUES IN (3));
8862INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8863SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8864WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
8865ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
8866INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
8867SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
8868WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
8869# Start usability test (inc/partition_check.inc)
8870create_command
8871SHOW CREATE TABLE t1;
8872Table	Create Table
8873t1	CREATE TABLE `t1` (
8874  `f_int1` bigint(20) NOT NULL,
8875  `f_int2` bigint(20) NOT NULL,
8876  `f_char1` char(20) DEFAULT NULL,
8877  `f_char2` char(20) DEFAULT NULL,
8878  `f_charbig` varchar(1000) DEFAULT NULL,
8879  PRIMARY KEY (`f_int2`,`f_int1`)
8880) ENGINE=InnoDB DEFAULT CHARSET=latin1
8881/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
8882(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
8883 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
8884 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
8885 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
8886 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
8887 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
8888 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
8889 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
8890
8891# check prerequisites-1 success:    1
8892# check COUNT(*) success:    1
8893# check MIN/MAX(f_int1) success:    1
8894# check MIN/MAX(f_int2) success:    1
8895INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8896SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
8897CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
8898WHERE f_int1 IN (2,3);
8899ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
8900# check prerequisites-3 success:    1
8901# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
8902INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8903SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8904CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8905WHERE f_int1 IN (2,3);
8906DELETE FROM t1 WHERE f_charbig = 'delete me';
8907INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8908SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
8909CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
8910WHERE f_int1 IN (2,3);
8911DELETE FROM t1 WHERE f_charbig = 'delete me';
8912# check read via f_int1 success: 1
8913# check read via f_int2 success: 1
8914
8915# check multiple-1 success: 	1
8916DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
8917
8918# check multiple-2 success: 	1
8919INSERT INTO t1 SELECT * FROM t0_template
8920WHERE MOD(f_int1,3) = 0;
8921
8922# check multiple-3 success: 	1
8923UPDATE t1 SET f_int1 = f_int1 + @max_row
8924WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
8925AND @max_row_div2 + @max_row_div4;
8926
8927# check multiple-4 success: 	1
8928DELETE FROM t1
8929WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
8930AND @max_row_div2 + @max_row_div4 + @max_row;
8931
8932# check multiple-5 success: 	1
8933SELECT COUNT(*) INTO @try_count FROM t0_template
8934WHERE MOD(f_int1,3) = 0
8935AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8936SELECT COUNT(*) INTO @clash_count
8937FROM t1 INNER JOIN t0_template USING(f_int1)
8938WHERE MOD(f_int1,3) = 0
8939AND f_int1 BETWEEN @max_row_div2 AND @max_row;
8940SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
8941INSERT INTO t1
8942SET f_int1 = @cur_value , f_int2 = @cur_value,
8943f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8944f_charbig = '#SINGLE#';
8945
8946# check single-1 success: 	1
8947SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
8948INSERT INTO t1
8949SET f_int1 = @cur_value , f_int2 = @cur_value,
8950f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
8951f_charbig = '#SINGLE#';
8952
8953# check single-2 success: 	1
8954SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
8955SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
8956UPDATE t1 SET f_int1 = @cur_value2
8957WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
8958
8959# check single-3 success: 	1
8960SET @cur_value1= -1;
8961SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
8962UPDATE t1 SET f_int1 = @cur_value1
8963WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
8964
8965# check single-4 success: 	1
8966SELECT MAX(f_int1) INTO @cur_value FROM t1;
8967DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
8968
8969# check single-5 success: 	1
8970DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
8971
8972# check single-6 success: 	1
8973INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
8974
8975# check single-7 success: 	1
8976DELETE FROM t1 WHERE f_charbig = '#2147483647##';
8977DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
8978INSERT t1 SET f_int1 = 0 , f_int2 = 0,
8979f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
8980f_charbig = '#NULL#';
8981INSERT INTO t1
8982SET f_int1 = NULL , f_int2 = -@max_row,
8983f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
8984f_charbig = '#NULL#';
8985ERROR 23000: Column 'f_int1' cannot be null
8986# check null success:    1
8987DELETE FROM t1
8988WHERE f_int1 = 0 AND f_int2 = 0
8989AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
8990AND f_charbig = '#NULL#';
8991INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
8992SELECT f_int1, f_int1, '', '', 'was inserted'
8993   FROM t0_template source_tab
8994WHERE MOD(f_int1,3) = 0
8995AND f_int1 BETWEEN @max_row_div2 AND @max_row
8996ON DUPLICATE KEY
8997UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
8998f_int2 = 2 * @max_row + source_tab.f_int1,
8999f_charbig = 'was updated';
9000
9001# check unique-1-a success: 	1
9002
9003# check unique-1-b success: 	1
9004DELETE FROM t1 WHERE f_charbig = 'was inserted';
9005UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9006f_int2 = CAST(f_char1 AS SIGNED INT),
9007f_charbig = CONCAT('===',f_char1,'===')
9008WHERE f_charbig = 'was updated';
9009REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9010SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9011   FROM t0_template source_tab
9012WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9013
9014# check replace success: 	1
9015DELETE FROM t1
9016WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9017DELETE FROM t1
9018WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9019f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9020UPDATE t1 SET f_int2 = f_int1,
9021f_char1 = CAST(f_int1 AS CHAR),
9022f_char2 = CAST(f_int1 AS CHAR),
9023f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9024WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9025SET AUTOCOMMIT= 0;
9026INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9027SELECT f_int1, f_int1, '', '', 'was inserted'
9028FROM t0_template source_tab
9029WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9030
9031# check transactions-1 success: 	1
9032COMMIT WORK;
9033
9034# check transactions-2 success: 	1
9035ROLLBACK WORK;
9036
9037# check transactions-3 success: 	1
9038DELETE FROM t1 WHERE f_charbig = 'was inserted';
9039COMMIT WORK;
9040ROLLBACK WORK;
9041
9042# check transactions-4 success: 	1
9043INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9044SELECT f_int1, f_int1, '', '', 'was inserted'
9045FROM t0_template source_tab
9046WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9047
9048# check transactions-5 success: 	1
9049ROLLBACK WORK;
9050
9051# check transactions-6 success: 	1
9052# INFO: Storage engine used for t1 seems to be transactional.
9053COMMIT;
9054
9055# check transactions-7 success: 	1
9056DELETE FROM t1 WHERE f_charbig = 'was inserted';
9057COMMIT WORK;
9058SET @@session.sql_mode = 'traditional';
9059Warnings:
9060Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9061SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9062INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9063SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9064'', '', 'was inserted' FROM t0_template
9065WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9066ERROR 22012: Division by 0
9067COMMIT;
9068
9069# check transactions-8 success: 	1
9070# INFO: Storage engine used for t1 seems to be able to revert
9071#       changes made by the failing statement.
9072SET @@session.sql_mode = '';
9073Warnings:
9074Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9075SET AUTOCOMMIT= 1;
9076DELETE FROM t1 WHERE f_charbig = 'was inserted';
9077COMMIT WORK;
9078UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9079
9080# check special-1 success: 	1
9081UPDATE t1 SET f_charbig = '';
9082
9083# check special-2 success: 	1
9084UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9085INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9086SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9087WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9088INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9089SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9090'just inserted' FROM t0_template
9091WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9092CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9093BEGIN
9094UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9095f_charbig = 'updated by trigger'
9096      WHERE f_int1 = new.f_int1;
9097END|
9098INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9099SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9100WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9101
9102# check trigger-1 success: 	1
9103DROP TRIGGER trg_1;
9104UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9105f_int2 = CAST(f_char1 AS SIGNED INT),
9106f_charbig = 'just inserted'
9107   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9108DELETE FROM t0_aux
9109WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9110INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9111SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9112'just inserted' FROM t0_template
9113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9114CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9115BEGIN
9116UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9117f_charbig = 'updated by trigger'
9118      WHERE f_int1 = new.f_int1;
9119END|
9120INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9121SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9122WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9123
9124# check trigger-2 success: 	1
9125DROP TRIGGER trg_1;
9126UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9127f_int2 = CAST(f_char1 AS SIGNED INT),
9128f_charbig = 'just inserted'
9129   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9130DELETE FROM t0_aux
9131WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9132INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9133SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9134'just inserted' FROM t0_template
9135WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9136CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9137BEGIN
9138UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9139f_charbig = 'updated by trigger'
9140      WHERE f_int1 = new.f_int1;
9141END|
9142UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9143WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9144
9145# check trigger-3 success: 	1
9146DROP TRIGGER trg_1;
9147UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9148f_int2 = CAST(f_char1 AS SIGNED INT),
9149f_charbig = 'just inserted'
9150   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9151DELETE FROM t0_aux
9152WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9153INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9154SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9155'just inserted' FROM t0_template
9156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9157CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9158BEGIN
9159UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9160f_charbig = 'updated by trigger'
9161      WHERE f_int1 = - old.f_int1;
9162END|
9163UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9164WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9165
9166# check trigger-4 success: 	1
9167DROP TRIGGER trg_1;
9168UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9169f_int2 = CAST(f_char1 AS SIGNED INT),
9170f_charbig = 'just inserted'
9171   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9172DELETE FROM t0_aux
9173WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9174INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9175SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9176'just inserted' FROM t0_template
9177WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9178CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9179BEGIN
9180UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9181f_charbig = 'updated by trigger'
9182      WHERE f_int1 = new.f_int1;
9183END|
9184UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9185WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9186
9187# check trigger-5 success: 	1
9188DROP TRIGGER trg_1;
9189UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9190f_int2 = CAST(f_char1 AS SIGNED INT),
9191f_charbig = 'just inserted'
9192   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9193DELETE FROM t0_aux
9194WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9195INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9196SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9197'just inserted' FROM t0_template
9198WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9199CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9200BEGIN
9201UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9202f_charbig = 'updated by trigger'
9203      WHERE f_int1 = - old.f_int1;
9204END|
9205UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9206WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9207
9208# check trigger-6 success: 	1
9209DROP TRIGGER trg_1;
9210UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9211f_int2 = CAST(f_char1 AS SIGNED INT),
9212f_charbig = 'just inserted'
9213   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9214DELETE FROM t0_aux
9215WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9216INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9217SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9218'just inserted' FROM t0_template
9219WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9220CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9221BEGIN
9222UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9223f_charbig = 'updated by trigger'
9224      WHERE f_int1 = - old.f_int1;
9225END|
9226DELETE FROM t0_aux
9227WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9228
9229# check trigger-7 success: 	1
9230DROP TRIGGER trg_1;
9231UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9232f_int2 = CAST(f_char1 AS SIGNED INT),
9233f_charbig = 'just inserted'
9234   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9235DELETE FROM t0_aux
9236WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9237INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9238SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9239'just inserted' FROM t0_template
9240WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9241CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9242BEGIN
9243UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9244f_charbig = 'updated by trigger'
9245      WHERE f_int1 = - old.f_int1;
9246END|
9247DELETE FROM t0_aux
9248WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9249
9250# check trigger-8 success: 	1
9251DROP TRIGGER trg_1;
9252UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9253f_int2 = CAST(f_char1 AS SIGNED INT),
9254f_charbig = 'just inserted'
9255   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9256DELETE FROM t0_aux
9257WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9258DELETE FROM t1
9259WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9260CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9261BEGIN
9262SET new.f_int1 = old.f_int1 + @max_row,
9263new.f_int2 = old.f_int2 - @max_row,
9264new.f_charbig = '####updated per update trigger####';
9265END|
9266UPDATE t1
9267SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9268f_charbig = '####updated per update statement itself####';
9269
9270# check trigger-9 success: 	1
9271DROP TRIGGER trg_2;
9272UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9273f_int2 = CAST(f_char1 AS SIGNED INT),
9274f_charbig = CONCAT('===',f_char1,'===');
9275CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9276BEGIN
9277SET new.f_int1 = new.f_int1 + @max_row,
9278new.f_int2 = new.f_int2 - @max_row,
9279new.f_charbig = '####updated per update trigger####';
9280END|
9281UPDATE t1
9282SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9283f_charbig = '####updated per update statement itself####';
9284
9285# check trigger-10 success: 	1
9286DROP TRIGGER trg_2;
9287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9288f_int2 = CAST(f_char1 AS SIGNED INT),
9289f_charbig = CONCAT('===',f_char1,'===');
9290CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9291BEGIN
9292SET new.f_int1 = @my_max1 + @counter,
9293new.f_int2 = @my_min2 - @counter,
9294new.f_charbig = '####updated per insert trigger####';
9295SET @counter = @counter + 1;
9296END|
9297SET @counter = 1;
9298SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9299INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9300SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9301CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9302WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9303ORDER BY f_int1;
9304DROP TRIGGER trg_3;
9305
9306# check trigger-11 success: 	1
9307DELETE FROM t1
9308WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9309AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9310AND f_charbig = '####updated per insert trigger####';
9311CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9312BEGIN
9313SET new.f_int1 = @my_max1 + @counter,
9314new.f_int2 = @my_min2 - @counter,
9315new.f_charbig = '####updated per insert trigger####';
9316SET @counter = @counter + 1;
9317END|
9318SET @counter = 1;
9319SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9320INSERT INTO t1 (f_char1, f_char2, f_charbig)
9321SELECT CAST(f_int1 AS CHAR),
9322CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9323WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9324ORDER BY f_int1;
9325DROP TRIGGER trg_3;
9326
9327# check trigger-12 success: 	1
9328DELETE FROM t1
9329WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9330AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9331AND f_charbig = '####updated per insert trigger####';
9332ANALYZE  TABLE t1;
9333Table	Op	Msg_type	Msg_text
9334test.t1	analyze	status	OK
9335CHECK    TABLE t1 EXTENDED;
9336Table	Op	Msg_type	Msg_text
9337test.t1	check	status	OK
9338CHECKSUM TABLE t1 EXTENDED;
9339Table	Checksum
9340test.t1	<some_value>
9341OPTIMIZE TABLE t1;
9342Table	Op	Msg_type	Msg_text
9343test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9344test.t1	optimize	status	OK
9345# check layout success:    1
9346REPAIR   TABLE t1 EXTENDED;
9347Table	Op	Msg_type	Msg_text
9348test.t1	repair	status	OK
9349# check layout success:    1
9350TRUNCATE t1;
9351
9352# check TRUNCATE success: 	1
9353# check layout success:    1
9354# End usability test (inc/partition_check.inc)
9355DROP TABLE t1;
9356CREATE TABLE t1 (
9357f_int1 INTEGER,
9358f_int2 INTEGER,
9359f_char1 CHAR(20),
9360f_char2 CHAR(20),
9361f_charbig VARCHAR(1000)
9362, PRIMARY KEY (f_int2,f_int1)
9363)
9364PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
9365(PARTITION parta VALUES LESS THAN (0),
9366PARTITION partb VALUES LESS THAN (5),
9367PARTITION partc VALUES LESS THAN (10),
9368PARTITION partd VALUES LESS THAN (10 + 5),
9369PARTITION parte VALUES LESS THAN (20),
9370PARTITION partf VALUES LESS THAN (2147483646));
9371INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9372SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9373WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9374ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
9375INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9376SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9377WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9378# Start usability test (inc/partition_check.inc)
9379create_command
9380SHOW CREATE TABLE t1;
9381Table	Create Table
9382t1	CREATE TABLE `t1` (
9383  `f_int1` bigint(20) NOT NULL,
9384  `f_int2` bigint(20) NOT NULL,
9385  `f_char1` char(20) DEFAULT NULL,
9386  `f_char2` char(20) DEFAULT NULL,
9387  `f_charbig` varchar(1000) DEFAULT NULL,
9388  PRIMARY KEY (`f_int2`,`f_int1`)
9389) ENGINE=InnoDB DEFAULT CHARSET=latin1
9390/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
9391(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9392 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9393 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9394 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
9395 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
9396 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9397
9398# check prerequisites-1 success:    1
9399# check COUNT(*) success:    1
9400# check MIN/MAX(f_int1) success:    1
9401# check MIN/MAX(f_int2) success:    1
9402INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9403SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9404CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9405WHERE f_int1 IN (2,3);
9406ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9407# check prerequisites-3 success:    1
9408# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9409INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9410SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9411CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9412WHERE f_int1 IN (2,3);
9413DELETE FROM t1 WHERE f_charbig = 'delete me';
9414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9415SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9416CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9417WHERE f_int1 IN (2,3);
9418DELETE FROM t1 WHERE f_charbig = 'delete me';
9419# check read via f_int1 success: 1
9420# check read via f_int2 success: 1
9421
9422# check multiple-1 success: 	1
9423DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9424
9425# check multiple-2 success: 	1
9426INSERT INTO t1 SELECT * FROM t0_template
9427WHERE MOD(f_int1,3) = 0;
9428
9429# check multiple-3 success: 	1
9430UPDATE t1 SET f_int1 = f_int1 + @max_row
9431WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9432AND @max_row_div2 + @max_row_div4;
9433
9434# check multiple-4 success: 	1
9435DELETE FROM t1
9436WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9437AND @max_row_div2 + @max_row_div4 + @max_row;
9438
9439# check multiple-5 success: 	1
9440SELECT COUNT(*) INTO @try_count FROM t0_template
9441WHERE MOD(f_int1,3) = 0
9442AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9443SELECT COUNT(*) INTO @clash_count
9444FROM t1 INNER JOIN t0_template USING(f_int1)
9445WHERE MOD(f_int1,3) = 0
9446AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9447SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9448INSERT INTO t1
9449SET f_int1 = @cur_value , f_int2 = @cur_value,
9450f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9451f_charbig = '#SINGLE#';
9452
9453# check single-1 success: 	1
9454SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9455INSERT INTO t1
9456SET f_int1 = @cur_value , f_int2 = @cur_value,
9457f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9458f_charbig = '#SINGLE#';
9459
9460# check single-2 success: 	1
9461SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9462SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9463UPDATE t1 SET f_int1 = @cur_value2
9464WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9465
9466# check single-3 success: 	1
9467SET @cur_value1= -1;
9468SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9469UPDATE t1 SET f_int1 = @cur_value1
9470WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9471
9472# check single-4 success: 	1
9473SELECT MAX(f_int1) INTO @cur_value FROM t1;
9474DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9475
9476# check single-5 success: 	1
9477DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9478
9479# check single-6 success: 	1
9480INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9481ERROR HY000: Table has no partition for value 2147483647
9482DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9483INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9484f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9485f_charbig = '#NULL#';
9486INSERT INTO t1
9487SET f_int1 = NULL , f_int2 = -@max_row,
9488f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9489f_charbig = '#NULL#';
9490ERROR 23000: Column 'f_int1' cannot be null
9491# check null success:    1
9492DELETE FROM t1
9493WHERE f_int1 = 0 AND f_int2 = 0
9494AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9495AND f_charbig = '#NULL#';
9496INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9497SELECT f_int1, f_int1, '', '', 'was inserted'
9498   FROM t0_template source_tab
9499WHERE MOD(f_int1,3) = 0
9500AND f_int1 BETWEEN @max_row_div2 AND @max_row
9501ON DUPLICATE KEY
9502UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
9503f_int2 = 2 * @max_row + source_tab.f_int1,
9504f_charbig = 'was updated';
9505
9506# check unique-1-a success: 	1
9507
9508# check unique-1-b success: 	1
9509DELETE FROM t1 WHERE f_charbig = 'was inserted';
9510UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9511f_int2 = CAST(f_char1 AS SIGNED INT),
9512f_charbig = CONCAT('===',f_char1,'===')
9513WHERE f_charbig = 'was updated';
9514REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9515SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
9516   FROM t0_template source_tab
9517WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9518
9519# check replace success: 	1
9520DELETE FROM t1
9521WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
9522DELETE FROM t1
9523WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
9524f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
9525UPDATE t1 SET f_int2 = f_int1,
9526f_char1 = CAST(f_int1 AS CHAR),
9527f_char2 = CAST(f_int1 AS CHAR),
9528f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
9529WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
9530SET AUTOCOMMIT= 0;
9531INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9532SELECT f_int1, f_int1, '', '', 'was inserted'
9533FROM t0_template source_tab
9534WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9535
9536# check transactions-1 success: 	1
9537COMMIT WORK;
9538
9539# check transactions-2 success: 	1
9540ROLLBACK WORK;
9541
9542# check transactions-3 success: 	1
9543DELETE FROM t1 WHERE f_charbig = 'was inserted';
9544COMMIT WORK;
9545ROLLBACK WORK;
9546
9547# check transactions-4 success: 	1
9548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9549SELECT f_int1, f_int1, '', '', 'was inserted'
9550FROM t0_template source_tab
9551WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9552
9553# check transactions-5 success: 	1
9554ROLLBACK WORK;
9555
9556# check transactions-6 success: 	1
9557# INFO: Storage engine used for t1 seems to be transactional.
9558COMMIT;
9559
9560# check transactions-7 success: 	1
9561DELETE FROM t1 WHERE f_charbig = 'was inserted';
9562COMMIT WORK;
9563SET @@session.sql_mode = 'traditional';
9564Warnings:
9565Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9566SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
9567INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9568SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
9569'', '', 'was inserted' FROM t0_template
9570WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
9571ERROR 22012: Division by 0
9572COMMIT;
9573
9574# check transactions-8 success: 	1
9575# INFO: Storage engine used for t1 seems to be able to revert
9576#       changes made by the failing statement.
9577SET @@session.sql_mode = '';
9578Warnings:
9579Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
9580SET AUTOCOMMIT= 1;
9581DELETE FROM t1 WHERE f_charbig = 'was inserted';
9582COMMIT WORK;
9583UPDATE t1 SET f_charbig = REPEAT('b', 1000);
9584
9585# check special-1 success: 	1
9586UPDATE t1 SET f_charbig = '';
9587
9588# check special-2 success: 	1
9589UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
9590INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9591SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
9592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9593INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9594SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9595'just inserted' FROM t0_template
9596WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9597CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
9598BEGIN
9599UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9600f_charbig = 'updated by trigger'
9601      WHERE f_int1 = new.f_int1;
9602END|
9603INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9604SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9605WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9606
9607# check trigger-1 success: 	1
9608DROP TRIGGER trg_1;
9609UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9610f_int2 = CAST(f_char1 AS SIGNED INT),
9611f_charbig = 'just inserted'
9612   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9613DELETE FROM t0_aux
9614WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9615INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9616SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9617'just inserted' FROM t0_template
9618WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9619CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
9620BEGIN
9621UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9622f_charbig = 'updated by trigger'
9623      WHERE f_int1 = new.f_int1;
9624END|
9625INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9626SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
9627WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9628
9629# check trigger-2 success: 	1
9630DROP TRIGGER trg_1;
9631UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9632f_int2 = CAST(f_char1 AS SIGNED INT),
9633f_charbig = 'just inserted'
9634   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9635DELETE FROM t0_aux
9636WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9637INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9638SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9639'just inserted' FROM t0_template
9640WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9641CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9642BEGIN
9643UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9644f_charbig = 'updated by trigger'
9645      WHERE f_int1 = new.f_int1;
9646END|
9647UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9648WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9649
9650# check trigger-3 success: 	1
9651DROP TRIGGER trg_1;
9652UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9653f_int2 = CAST(f_char1 AS SIGNED INT),
9654f_charbig = 'just inserted'
9655   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9656DELETE FROM t0_aux
9657WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9658INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9659SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9660'just inserted' FROM t0_template
9661WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9662CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
9663BEGIN
9664UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9665f_charbig = 'updated by trigger'
9666      WHERE f_int1 = - old.f_int1;
9667END|
9668UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9669WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9670
9671# check trigger-4 success: 	1
9672DROP TRIGGER trg_1;
9673UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9674f_int2 = CAST(f_char1 AS SIGNED INT),
9675f_charbig = 'just inserted'
9676   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9677DELETE FROM t0_aux
9678WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9679INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9680SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9681'just inserted' FROM t0_template
9682WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9683CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9684BEGIN
9685UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9686f_charbig = 'updated by trigger'
9687      WHERE f_int1 = new.f_int1;
9688END|
9689UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9690WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9691
9692# check trigger-5 success: 	1
9693DROP TRIGGER trg_1;
9694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9695f_int2 = CAST(f_char1 AS SIGNED INT),
9696f_charbig = 'just inserted'
9697   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9698DELETE FROM t0_aux
9699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9702'just inserted' FROM t0_template
9703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9704CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
9705BEGIN
9706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9707f_charbig = 'updated by trigger'
9708      WHERE f_int1 = - old.f_int1;
9709END|
9710UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
9711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9712
9713# check trigger-6 success: 	1
9714DROP TRIGGER trg_1;
9715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9716f_int2 = CAST(f_char1 AS SIGNED INT),
9717f_charbig = 'just inserted'
9718   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9719DELETE FROM t0_aux
9720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9723'just inserted' FROM t0_template
9724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9725CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
9726BEGIN
9727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9728f_charbig = 'updated by trigger'
9729      WHERE f_int1 = - old.f_int1;
9730END|
9731DELETE FROM t0_aux
9732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9733
9734# check trigger-7 success: 	1
9735DROP TRIGGER trg_1;
9736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9737f_int2 = CAST(f_char1 AS SIGNED INT),
9738f_charbig = 'just inserted'
9739   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9740DELETE FROM t0_aux
9741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
9743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
9744'just inserted' FROM t0_template
9745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9746CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
9747BEGIN
9748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
9749f_charbig = 'updated by trigger'
9750      WHERE f_int1 = - old.f_int1;
9751END|
9752DELETE FROM t0_aux
9753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
9754
9755# check trigger-8 success: 	1
9756DROP TRIGGER trg_1;
9757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9758f_int2 = CAST(f_char1 AS SIGNED INT),
9759f_charbig = 'just inserted'
9760   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
9761DELETE FROM t0_aux
9762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9763DELETE FROM t1
9764WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
9765CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9766BEGIN
9767SET new.f_int1 = old.f_int1 + @max_row,
9768new.f_int2 = old.f_int2 - @max_row,
9769new.f_charbig = '####updated per update trigger####';
9770END|
9771UPDATE t1
9772SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9773f_charbig = '####updated per update statement itself####';
9774
9775# check trigger-9 success: 	1
9776DROP TRIGGER trg_2;
9777UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9778f_int2 = CAST(f_char1 AS SIGNED INT),
9779f_charbig = CONCAT('===',f_char1,'===');
9780CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
9781BEGIN
9782SET new.f_int1 = new.f_int1 + @max_row,
9783new.f_int2 = new.f_int2 - @max_row,
9784new.f_charbig = '####updated per update trigger####';
9785END|
9786UPDATE t1
9787SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
9788f_charbig = '####updated per update statement itself####';
9789
9790# check trigger-10 success: 	1
9791DROP TRIGGER trg_2;
9792UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
9793f_int2 = CAST(f_char1 AS SIGNED INT),
9794f_charbig = CONCAT('===',f_char1,'===');
9795CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9796BEGIN
9797SET new.f_int1 = @my_max1 + @counter,
9798new.f_int2 = @my_min2 - @counter,
9799new.f_charbig = '####updated per insert trigger####';
9800SET @counter = @counter + 1;
9801END|
9802SET @counter = 1;
9803SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9805SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9806CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9807WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9808ORDER BY f_int1;
9809DROP TRIGGER trg_3;
9810
9811# check trigger-11 success: 	1
9812DELETE FROM t1
9813WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9814AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9815AND f_charbig = '####updated per insert trigger####';
9816CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
9817BEGIN
9818SET new.f_int1 = @my_max1 + @counter,
9819new.f_int2 = @my_min2 - @counter,
9820new.f_charbig = '####updated per insert trigger####';
9821SET @counter = @counter + 1;
9822END|
9823SET @counter = 1;
9824SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
9825INSERT INTO t1 (f_char1, f_char2, f_charbig)
9826SELECT CAST(f_int1 AS CHAR),
9827CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
9828WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
9829ORDER BY f_int1;
9830DROP TRIGGER trg_3;
9831
9832# check trigger-12 success: 	1
9833DELETE FROM t1
9834WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
9835AND f_int2 <> CAST(f_char1 AS SIGNED INT)
9836AND f_charbig = '####updated per insert trigger####';
9837ANALYZE  TABLE t1;
9838Table	Op	Msg_type	Msg_text
9839test.t1	analyze	status	OK
9840CHECK    TABLE t1 EXTENDED;
9841Table	Op	Msg_type	Msg_text
9842test.t1	check	status	OK
9843CHECKSUM TABLE t1 EXTENDED;
9844Table	Checksum
9845test.t1	<some_value>
9846OPTIMIZE TABLE t1;
9847Table	Op	Msg_type	Msg_text
9848test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
9849test.t1	optimize	status	OK
9850# check layout success:    1
9851REPAIR   TABLE t1 EXTENDED;
9852Table	Op	Msg_type	Msg_text
9853test.t1	repair	status	OK
9854# check layout success:    1
9855TRUNCATE t1;
9856
9857# check TRUNCATE success: 	1
9858# check layout success:    1
9859# End usability test (inc/partition_check.inc)
9860DROP TABLE t1;
9861CREATE TABLE t1 (
9862f_int1 INTEGER,
9863f_int2 INTEGER,
9864f_char1 CHAR(20),
9865f_char2 CHAR(20),
9866f_charbig VARCHAR(1000)
9867, PRIMARY KEY (f_int2,f_int1)
9868)
9869PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
9870(PARTITION parta VALUES LESS THAN (0),
9871PARTITION partb VALUES LESS THAN (5),
9872PARTITION partc VALUES LESS THAN (10),
9873PARTITION partd VALUES LESS THAN (2147483646));
9874INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9875SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9876WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
9877ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
9878INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
9879SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
9880WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
9881# Start usability test (inc/partition_check.inc)
9882create_command
9883SHOW CREATE TABLE t1;
9884Table	Create Table
9885t1	CREATE TABLE `t1` (
9886  `f_int1` bigint(20) NOT NULL,
9887  `f_int2` bigint(20) NOT NULL,
9888  `f_char1` char(20) DEFAULT NULL,
9889  `f_char2` char(20) DEFAULT NULL,
9890  `f_charbig` varchar(1000) DEFAULT NULL,
9891  PRIMARY KEY (`f_int2`,`f_int1`)
9892) ENGINE=InnoDB DEFAULT CHARSET=latin1
9893/*!50100 PARTITION BY RANGE (f_int1)
9894SUBPARTITION BY HASH (f_int2)
9895SUBPARTITIONS 2
9896(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
9897 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
9898 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
9899 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
9900
9901# check prerequisites-1 success:    1
9902# check COUNT(*) success:    1
9903# check MIN/MAX(f_int1) success:    1
9904# check MIN/MAX(f_int2) success:    1
9905INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9906SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
9907CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
9908WHERE f_int1 IN (2,3);
9909ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
9910# check prerequisites-3 success:    1
9911# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
9912INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9913SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9914CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9915WHERE f_int1 IN (2,3);
9916DELETE FROM t1 WHERE f_charbig = 'delete me';
9917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
9918SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
9919CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
9920WHERE f_int1 IN (2,3);
9921DELETE FROM t1 WHERE f_charbig = 'delete me';
9922# check read via f_int1 success: 1
9923# check read via f_int2 success: 1
9924
9925# check multiple-1 success: 	1
9926DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
9927
9928# check multiple-2 success: 	1
9929INSERT INTO t1 SELECT * FROM t0_template
9930WHERE MOD(f_int1,3) = 0;
9931
9932# check multiple-3 success: 	1
9933UPDATE t1 SET f_int1 = f_int1 + @max_row
9934WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
9935AND @max_row_div2 + @max_row_div4;
9936
9937# check multiple-4 success: 	1
9938DELETE FROM t1
9939WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
9940AND @max_row_div2 + @max_row_div4 + @max_row;
9941
9942# check multiple-5 success: 	1
9943SELECT COUNT(*) INTO @try_count FROM t0_template
9944WHERE MOD(f_int1,3) = 0
9945AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9946SELECT COUNT(*) INTO @clash_count
9947FROM t1 INNER JOIN t0_template USING(f_int1)
9948WHERE MOD(f_int1,3) = 0
9949AND f_int1 BETWEEN @max_row_div2 AND @max_row;
9950SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
9951INSERT INTO t1
9952SET f_int1 = @cur_value , f_int2 = @cur_value,
9953f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9954f_charbig = '#SINGLE#';
9955
9956# check single-1 success: 	1
9957SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
9958INSERT INTO t1
9959SET f_int1 = @cur_value , f_int2 = @cur_value,
9960f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
9961f_charbig = '#SINGLE#';
9962
9963# check single-2 success: 	1
9964SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
9965SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
9966UPDATE t1 SET f_int1 = @cur_value2
9967WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
9968
9969# check single-3 success: 	1
9970SET @cur_value1= -1;
9971SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
9972UPDATE t1 SET f_int1 = @cur_value1
9973WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
9974
9975# check single-4 success: 	1
9976SELECT MAX(f_int1) INTO @cur_value FROM t1;
9977DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
9978
9979# check single-5 success: 	1
9980DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
9981
9982# check single-6 success: 	1
9983INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
9984ERROR HY000: Table has no partition for value 2147483647
9985DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
9986INSERT t1 SET f_int1 = 0 , f_int2 = 0,
9987f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
9988f_charbig = '#NULL#';
9989INSERT INTO t1
9990SET f_int1 = NULL , f_int2 = -@max_row,
9991f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
9992f_charbig = '#NULL#';
9993ERROR 23000: Column 'f_int1' cannot be null
9994# check null success:    1
9995DELETE FROM t1
9996WHERE f_int1 = 0 AND f_int2 = 0
9997AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
9998AND f_charbig = '#NULL#';
9999INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10000SELECT f_int1, f_int1, '', '', 'was inserted'
10001   FROM t0_template source_tab
10002WHERE MOD(f_int1,3) = 0
10003AND f_int1 BETWEEN @max_row_div2 AND @max_row
10004ON DUPLICATE KEY
10005UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10006f_int2 = 2 * @max_row + source_tab.f_int1,
10007f_charbig = 'was updated';
10008
10009# check unique-1-a success: 	1
10010
10011# check unique-1-b success: 	1
10012DELETE FROM t1 WHERE f_charbig = 'was inserted';
10013UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10014f_int2 = CAST(f_char1 AS SIGNED INT),
10015f_charbig = CONCAT('===',f_char1,'===')
10016WHERE f_charbig = 'was updated';
10017REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10018SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10019   FROM t0_template source_tab
10020WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10021
10022# check replace success: 	1
10023DELETE FROM t1
10024WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10025DELETE FROM t1
10026WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10027f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10028UPDATE t1 SET f_int2 = f_int1,
10029f_char1 = CAST(f_int1 AS CHAR),
10030f_char2 = CAST(f_int1 AS CHAR),
10031f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10032WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10033SET AUTOCOMMIT= 0;
10034INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10035SELECT f_int1, f_int1, '', '', 'was inserted'
10036FROM t0_template source_tab
10037WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10038
10039# check transactions-1 success: 	1
10040COMMIT WORK;
10041
10042# check transactions-2 success: 	1
10043ROLLBACK WORK;
10044
10045# check transactions-3 success: 	1
10046DELETE FROM t1 WHERE f_charbig = 'was inserted';
10047COMMIT WORK;
10048ROLLBACK WORK;
10049
10050# check transactions-4 success: 	1
10051INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10052SELECT f_int1, f_int1, '', '', 'was inserted'
10053FROM t0_template source_tab
10054WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10055
10056# check transactions-5 success: 	1
10057ROLLBACK WORK;
10058
10059# check transactions-6 success: 	1
10060# INFO: Storage engine used for t1 seems to be transactional.
10061COMMIT;
10062
10063# check transactions-7 success: 	1
10064DELETE FROM t1 WHERE f_charbig = 'was inserted';
10065COMMIT WORK;
10066SET @@session.sql_mode = 'traditional';
10067Warnings:
10068Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10069SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10070INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10071SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10072'', '', 'was inserted' FROM t0_template
10073WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10074ERROR 22012: Division by 0
10075COMMIT;
10076
10077# check transactions-8 success: 	1
10078# INFO: Storage engine used for t1 seems to be able to revert
10079#       changes made by the failing statement.
10080SET @@session.sql_mode = '';
10081Warnings:
10082Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10083SET AUTOCOMMIT= 1;
10084DELETE FROM t1 WHERE f_charbig = 'was inserted';
10085COMMIT WORK;
10086UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10087
10088# check special-1 success: 	1
10089UPDATE t1 SET f_charbig = '';
10090
10091# check special-2 success: 	1
10092UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10093INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10094SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10095WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10096INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10097SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10098'just inserted' FROM t0_template
10099WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10100CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10101BEGIN
10102UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10103f_charbig = 'updated by trigger'
10104      WHERE f_int1 = new.f_int1;
10105END|
10106INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10107SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10108WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10109
10110# check trigger-1 success: 	1
10111DROP TRIGGER trg_1;
10112UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10113f_int2 = CAST(f_char1 AS SIGNED INT),
10114f_charbig = 'just inserted'
10115   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10116DELETE FROM t0_aux
10117WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10118INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10119SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10120'just inserted' FROM t0_template
10121WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10122CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10123BEGIN
10124UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10125f_charbig = 'updated by trigger'
10126      WHERE f_int1 = new.f_int1;
10127END|
10128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10129SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10130WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10131
10132# check trigger-2 success: 	1
10133DROP TRIGGER trg_1;
10134UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10135f_int2 = CAST(f_char1 AS SIGNED INT),
10136f_charbig = 'just inserted'
10137   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10138DELETE FROM t0_aux
10139WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10140INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10141SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10142'just inserted' FROM t0_template
10143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10144CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10145BEGIN
10146UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10147f_charbig = 'updated by trigger'
10148      WHERE f_int1 = new.f_int1;
10149END|
10150UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10151WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10152
10153# check trigger-3 success: 	1
10154DROP TRIGGER trg_1;
10155UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10156f_int2 = CAST(f_char1 AS SIGNED INT),
10157f_charbig = 'just inserted'
10158   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10159DELETE FROM t0_aux
10160WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10161INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10162SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10163'just inserted' FROM t0_template
10164WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10165CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10166BEGIN
10167UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10168f_charbig = 'updated by trigger'
10169      WHERE f_int1 = - old.f_int1;
10170END|
10171UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10172WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10173
10174# check trigger-4 success: 	1
10175DROP TRIGGER trg_1;
10176UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10177f_int2 = CAST(f_char1 AS SIGNED INT),
10178f_charbig = 'just inserted'
10179   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10180DELETE FROM t0_aux
10181WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10182INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10183SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10184'just inserted' FROM t0_template
10185WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10186CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10187BEGIN
10188UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10189f_charbig = 'updated by trigger'
10190      WHERE f_int1 = new.f_int1;
10191END|
10192UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10193WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10194
10195# check trigger-5 success: 	1
10196DROP TRIGGER trg_1;
10197UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10198f_int2 = CAST(f_char1 AS SIGNED INT),
10199f_charbig = 'just inserted'
10200   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10201DELETE FROM t0_aux
10202WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10203INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10204SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10205'just inserted' FROM t0_template
10206WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10207CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10208BEGIN
10209UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10210f_charbig = 'updated by trigger'
10211      WHERE f_int1 = - old.f_int1;
10212END|
10213UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10214WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10215
10216# check trigger-6 success: 	1
10217DROP TRIGGER trg_1;
10218UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10219f_int2 = CAST(f_char1 AS SIGNED INT),
10220f_charbig = 'just inserted'
10221   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10222DELETE FROM t0_aux
10223WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10224INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10225SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10226'just inserted' FROM t0_template
10227WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10228CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10229BEGIN
10230UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10231f_charbig = 'updated by trigger'
10232      WHERE f_int1 = - old.f_int1;
10233END|
10234DELETE FROM t0_aux
10235WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10236
10237# check trigger-7 success: 	1
10238DROP TRIGGER trg_1;
10239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10240f_int2 = CAST(f_char1 AS SIGNED INT),
10241f_charbig = 'just inserted'
10242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10243DELETE FROM t0_aux
10244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10247'just inserted' FROM t0_template
10248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10249CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10250BEGIN
10251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10252f_charbig = 'updated by trigger'
10253      WHERE f_int1 = - old.f_int1;
10254END|
10255DELETE FROM t0_aux
10256WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10257
10258# check trigger-8 success: 	1
10259DROP TRIGGER trg_1;
10260UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10261f_int2 = CAST(f_char1 AS SIGNED INT),
10262f_charbig = 'just inserted'
10263   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10264DELETE FROM t0_aux
10265WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10266DELETE FROM t1
10267WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10268CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10269BEGIN
10270SET new.f_int1 = old.f_int1 + @max_row,
10271new.f_int2 = old.f_int2 - @max_row,
10272new.f_charbig = '####updated per update trigger####';
10273END|
10274UPDATE t1
10275SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10276f_charbig = '####updated per update statement itself####';
10277
10278# check trigger-9 success: 	1
10279DROP TRIGGER trg_2;
10280UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10281f_int2 = CAST(f_char1 AS SIGNED INT),
10282f_charbig = CONCAT('===',f_char1,'===');
10283CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10284BEGIN
10285SET new.f_int1 = new.f_int1 + @max_row,
10286new.f_int2 = new.f_int2 - @max_row,
10287new.f_charbig = '####updated per update trigger####';
10288END|
10289UPDATE t1
10290SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10291f_charbig = '####updated per update statement itself####';
10292
10293# check trigger-10 success: 	1
10294DROP TRIGGER trg_2;
10295UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10296f_int2 = CAST(f_char1 AS SIGNED INT),
10297f_charbig = CONCAT('===',f_char1,'===');
10298CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10299BEGIN
10300SET new.f_int1 = @my_max1 + @counter,
10301new.f_int2 = @my_min2 - @counter,
10302new.f_charbig = '####updated per insert trigger####';
10303SET @counter = @counter + 1;
10304END|
10305SET @counter = 1;
10306SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10307INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10308SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10309CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10311ORDER BY f_int1;
10312DROP TRIGGER trg_3;
10313
10314# check trigger-11 success: 	1
10315DELETE FROM t1
10316WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10317AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10318AND f_charbig = '####updated per insert trigger####';
10319CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10320BEGIN
10321SET new.f_int1 = @my_max1 + @counter,
10322new.f_int2 = @my_min2 - @counter,
10323new.f_charbig = '####updated per insert trigger####';
10324SET @counter = @counter + 1;
10325END|
10326SET @counter = 1;
10327SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10328INSERT INTO t1 (f_char1, f_char2, f_charbig)
10329SELECT CAST(f_int1 AS CHAR),
10330CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10331WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10332ORDER BY f_int1;
10333DROP TRIGGER trg_3;
10334
10335# check trigger-12 success: 	1
10336DELETE FROM t1
10337WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10338AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10339AND f_charbig = '####updated per insert trigger####';
10340ANALYZE  TABLE t1;
10341Table	Op	Msg_type	Msg_text
10342test.t1	analyze	status	OK
10343CHECK    TABLE t1 EXTENDED;
10344Table	Op	Msg_type	Msg_text
10345test.t1	check	status	OK
10346CHECKSUM TABLE t1 EXTENDED;
10347Table	Checksum
10348test.t1	<some_value>
10349OPTIMIZE TABLE t1;
10350Table	Op	Msg_type	Msg_text
10351test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10352test.t1	optimize	status	OK
10353# check layout success:    1
10354REPAIR   TABLE t1 EXTENDED;
10355Table	Op	Msg_type	Msg_text
10356test.t1	repair	status	OK
10357# check layout success:    1
10358TRUNCATE t1;
10359
10360# check TRUNCATE success: 	1
10361# check layout success:    1
10362# End usability test (inc/partition_check.inc)
10363DROP TABLE t1;
10364CREATE TABLE t1 (
10365f_int1 INTEGER,
10366f_int2 INTEGER,
10367f_char1 CHAR(20),
10368f_char2 CHAR(20),
10369f_charbig VARCHAR(1000)
10370, PRIMARY KEY (f_int2,f_int1)
10371)
10372PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
10373(PARTITION part1 VALUES LESS THAN (0)
10374(SUBPARTITION subpart11, SUBPARTITION subpart12),
10375PARTITION part2 VALUES LESS THAN (5)
10376(SUBPARTITION subpart21, SUBPARTITION subpart22),
10377PARTITION part3 VALUES LESS THAN (10)
10378(SUBPARTITION subpart31, SUBPARTITION subpart32),
10379PARTITION part4 VALUES LESS THAN (2147483646)
10380(SUBPARTITION subpart41, SUBPARTITION subpart42));
10381INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10382SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10383WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10384ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
10385INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10386SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10387WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10388# Start usability test (inc/partition_check.inc)
10389create_command
10390SHOW CREATE TABLE t1;
10391Table	Create Table
10392t1	CREATE TABLE `t1` (
10393  `f_int1` bigint(20) NOT NULL,
10394  `f_int2` bigint(20) NOT NULL,
10395  `f_char1` char(20) DEFAULT NULL,
10396  `f_char2` char(20) DEFAULT NULL,
10397  `f_charbig` varchar(1000) DEFAULT NULL,
10398  PRIMARY KEY (`f_int2`,`f_int1`)
10399) ENGINE=InnoDB DEFAULT CHARSET=latin1
10400/*!50100 PARTITION BY RANGE (f_int1)
10401SUBPARTITION BY KEY (f_int2)
10402(PARTITION part1 VALUES LESS THAN (0)
10403 (SUBPARTITION subpart11 ENGINE = InnoDB,
10404  SUBPARTITION subpart12 ENGINE = InnoDB),
10405 PARTITION part2 VALUES LESS THAN (5)
10406 (SUBPARTITION subpart21 ENGINE = InnoDB,
10407  SUBPARTITION subpart22 ENGINE = InnoDB),
10408 PARTITION part3 VALUES LESS THAN (10)
10409 (SUBPARTITION subpart31 ENGINE = InnoDB,
10410  SUBPARTITION subpart32 ENGINE = InnoDB),
10411 PARTITION part4 VALUES LESS THAN (2147483646)
10412 (SUBPARTITION subpart41 ENGINE = InnoDB,
10413  SUBPARTITION subpart42 ENGINE = InnoDB)) */
10414
10415# check prerequisites-1 success:    1
10416# check COUNT(*) success:    1
10417# check MIN/MAX(f_int1) success:    1
10418# check MIN/MAX(f_int2) success:    1
10419INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10420SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10421CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10422WHERE f_int1 IN (2,3);
10423ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10424# check prerequisites-3 success:    1
10425# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10426INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10427SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10428CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10429WHERE f_int1 IN (2,3);
10430DELETE FROM t1 WHERE f_charbig = 'delete me';
10431INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10432SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10433CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10434WHERE f_int1 IN (2,3);
10435DELETE FROM t1 WHERE f_charbig = 'delete me';
10436# check read via f_int1 success: 1
10437# check read via f_int2 success: 1
10438
10439# check multiple-1 success: 	1
10440DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10441
10442# check multiple-2 success: 	1
10443INSERT INTO t1 SELECT * FROM t0_template
10444WHERE MOD(f_int1,3) = 0;
10445
10446# check multiple-3 success: 	1
10447UPDATE t1 SET f_int1 = f_int1 + @max_row
10448WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10449AND @max_row_div2 + @max_row_div4;
10450
10451# check multiple-4 success: 	1
10452DELETE FROM t1
10453WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10454AND @max_row_div2 + @max_row_div4 + @max_row;
10455
10456# check multiple-5 success: 	1
10457SELECT COUNT(*) INTO @try_count FROM t0_template
10458WHERE MOD(f_int1,3) = 0
10459AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10460SELECT COUNT(*) INTO @clash_count
10461FROM t1 INNER JOIN t0_template USING(f_int1)
10462WHERE MOD(f_int1,3) = 0
10463AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10464SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10465INSERT INTO t1
10466SET f_int1 = @cur_value , f_int2 = @cur_value,
10467f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10468f_charbig = '#SINGLE#';
10469
10470# check single-1 success: 	1
10471SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10472INSERT INTO t1
10473SET f_int1 = @cur_value , f_int2 = @cur_value,
10474f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10475f_charbig = '#SINGLE#';
10476
10477# check single-2 success: 	1
10478SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10479SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10480UPDATE t1 SET f_int1 = @cur_value2
10481WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10482
10483# check single-3 success: 	1
10484SET @cur_value1= -1;
10485SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
10486UPDATE t1 SET f_int1 = @cur_value1
10487WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
10488
10489# check single-4 success: 	1
10490SELECT MAX(f_int1) INTO @cur_value FROM t1;
10491DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
10492
10493# check single-5 success: 	1
10494DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
10495
10496# check single-6 success: 	1
10497INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
10498ERROR HY000: Table has no partition for value 2147483647
10499DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
10500INSERT t1 SET f_int1 = 0 , f_int2 = 0,
10501f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
10502f_charbig = '#NULL#';
10503INSERT INTO t1
10504SET f_int1 = NULL , f_int2 = -@max_row,
10505f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
10506f_charbig = '#NULL#';
10507ERROR 23000: Column 'f_int1' cannot be null
10508# check null success:    1
10509DELETE FROM t1
10510WHERE f_int1 = 0 AND f_int2 = 0
10511AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
10512AND f_charbig = '#NULL#';
10513INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10514SELECT f_int1, f_int1, '', '', 'was inserted'
10515   FROM t0_template source_tab
10516WHERE MOD(f_int1,3) = 0
10517AND f_int1 BETWEEN @max_row_div2 AND @max_row
10518ON DUPLICATE KEY
10519UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
10520f_int2 = 2 * @max_row + source_tab.f_int1,
10521f_charbig = 'was updated';
10522
10523# check unique-1-a success: 	1
10524
10525# check unique-1-b success: 	1
10526DELETE FROM t1 WHERE f_charbig = 'was inserted';
10527UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10528f_int2 = CAST(f_char1 AS SIGNED INT),
10529f_charbig = CONCAT('===',f_char1,'===')
10530WHERE f_charbig = 'was updated';
10531REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10532SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
10533   FROM t0_template source_tab
10534WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10535
10536# check replace success: 	1
10537DELETE FROM t1
10538WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
10539DELETE FROM t1
10540WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
10541f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
10542UPDATE t1 SET f_int2 = f_int1,
10543f_char1 = CAST(f_int1 AS CHAR),
10544f_char2 = CAST(f_int1 AS CHAR),
10545f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
10546WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
10547SET AUTOCOMMIT= 0;
10548INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10549SELECT f_int1, f_int1, '', '', 'was inserted'
10550FROM t0_template source_tab
10551WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10552
10553# check transactions-1 success: 	1
10554COMMIT WORK;
10555
10556# check transactions-2 success: 	1
10557ROLLBACK WORK;
10558
10559# check transactions-3 success: 	1
10560DELETE FROM t1 WHERE f_charbig = 'was inserted';
10561COMMIT WORK;
10562ROLLBACK WORK;
10563
10564# check transactions-4 success: 	1
10565INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10566SELECT f_int1, f_int1, '', '', 'was inserted'
10567FROM t0_template source_tab
10568WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10569
10570# check transactions-5 success: 	1
10571ROLLBACK WORK;
10572
10573# check transactions-6 success: 	1
10574# INFO: Storage engine used for t1 seems to be transactional.
10575COMMIT;
10576
10577# check transactions-7 success: 	1
10578DELETE FROM t1 WHERE f_charbig = 'was inserted';
10579COMMIT WORK;
10580SET @@session.sql_mode = 'traditional';
10581Warnings:
10582Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10583SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
10584INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10585SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
10586'', '', 'was inserted' FROM t0_template
10587WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
10588ERROR 22012: Division by 0
10589COMMIT;
10590
10591# check transactions-8 success: 	1
10592# INFO: Storage engine used for t1 seems to be able to revert
10593#       changes made by the failing statement.
10594SET @@session.sql_mode = '';
10595Warnings:
10596Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
10597SET AUTOCOMMIT= 1;
10598DELETE FROM t1 WHERE f_charbig = 'was inserted';
10599COMMIT WORK;
10600UPDATE t1 SET f_charbig = REPEAT('b', 1000);
10601
10602# check special-1 success: 	1
10603UPDATE t1 SET f_charbig = '';
10604
10605# check special-2 success: 	1
10606UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
10607INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10608SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
10609WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10610INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10611SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10612'just inserted' FROM t0_template
10613WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10614CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
10615BEGIN
10616UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10617f_charbig = 'updated by trigger'
10618      WHERE f_int1 = new.f_int1;
10619END|
10620INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10621SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10622WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10623
10624# check trigger-1 success: 	1
10625DROP TRIGGER trg_1;
10626UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10627f_int2 = CAST(f_char1 AS SIGNED INT),
10628f_charbig = 'just inserted'
10629   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10630DELETE FROM t0_aux
10631WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10632INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10633SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10634'just inserted' FROM t0_template
10635WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10636CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
10637BEGIN
10638UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10639f_charbig = 'updated by trigger'
10640      WHERE f_int1 = new.f_int1;
10641END|
10642INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10643SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
10644WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10645
10646# check trigger-2 success: 	1
10647DROP TRIGGER trg_1;
10648UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10649f_int2 = CAST(f_char1 AS SIGNED INT),
10650f_charbig = 'just inserted'
10651   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10652DELETE FROM t0_aux
10653WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10654INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10655SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10656'just inserted' FROM t0_template
10657WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10658CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10659BEGIN
10660UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10661f_charbig = 'updated by trigger'
10662      WHERE f_int1 = new.f_int1;
10663END|
10664UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10665WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10666
10667# check trigger-3 success: 	1
10668DROP TRIGGER trg_1;
10669UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10670f_int2 = CAST(f_char1 AS SIGNED INT),
10671f_charbig = 'just inserted'
10672   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10673DELETE FROM t0_aux
10674WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10675INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10676SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10677'just inserted' FROM t0_template
10678WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10679CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
10680BEGIN
10681UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10682f_charbig = 'updated by trigger'
10683      WHERE f_int1 = - old.f_int1;
10684END|
10685UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10686WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10687
10688# check trigger-4 success: 	1
10689DROP TRIGGER trg_1;
10690UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10691f_int2 = CAST(f_char1 AS SIGNED INT),
10692f_charbig = 'just inserted'
10693   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10694DELETE FROM t0_aux
10695WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10696INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10697SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10698'just inserted' FROM t0_template
10699WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10700CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10701BEGIN
10702UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10703f_charbig = 'updated by trigger'
10704      WHERE f_int1 = new.f_int1;
10705END|
10706UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10707WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10708
10709# check trigger-5 success: 	1
10710DROP TRIGGER trg_1;
10711UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10712f_int2 = CAST(f_char1 AS SIGNED INT),
10713f_charbig = 'just inserted'
10714   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10715DELETE FROM t0_aux
10716WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10717INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10718SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10719'just inserted' FROM t0_template
10720WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10721CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
10722BEGIN
10723UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10724f_charbig = 'updated by trigger'
10725      WHERE f_int1 = - old.f_int1;
10726END|
10727UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
10728WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10729
10730# check trigger-6 success: 	1
10731DROP TRIGGER trg_1;
10732UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10733f_int2 = CAST(f_char1 AS SIGNED INT),
10734f_charbig = 'just inserted'
10735   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10736DELETE FROM t0_aux
10737WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10738INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10739SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10740'just inserted' FROM t0_template
10741WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10742CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
10743BEGIN
10744UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10745f_charbig = 'updated by trigger'
10746      WHERE f_int1 = - old.f_int1;
10747END|
10748DELETE FROM t0_aux
10749WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10750
10751# check trigger-7 success: 	1
10752DROP TRIGGER trg_1;
10753UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10754f_int2 = CAST(f_char1 AS SIGNED INT),
10755f_charbig = 'just inserted'
10756   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10757DELETE FROM t0_aux
10758WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10759INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
10760SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
10761'just inserted' FROM t0_template
10762WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10763CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
10764BEGIN
10765UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
10766f_charbig = 'updated by trigger'
10767      WHERE f_int1 = - old.f_int1;
10768END|
10769DELETE FROM t0_aux
10770WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
10771
10772# check trigger-8 success: 	1
10773DROP TRIGGER trg_1;
10774UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10775f_int2 = CAST(f_char1 AS SIGNED INT),
10776f_charbig = 'just inserted'
10777   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
10778DELETE FROM t0_aux
10779WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10780DELETE FROM t1
10781WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
10782CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10783BEGIN
10784SET new.f_int1 = old.f_int1 + @max_row,
10785new.f_int2 = old.f_int2 - @max_row,
10786new.f_charbig = '####updated per update trigger####';
10787END|
10788UPDATE t1
10789SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10790f_charbig = '####updated per update statement itself####';
10791
10792# check trigger-9 success: 	1
10793DROP TRIGGER trg_2;
10794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10795f_int2 = CAST(f_char1 AS SIGNED INT),
10796f_charbig = CONCAT('===',f_char1,'===');
10797CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
10798BEGIN
10799SET new.f_int1 = new.f_int1 + @max_row,
10800new.f_int2 = new.f_int2 - @max_row,
10801new.f_charbig = '####updated per update trigger####';
10802END|
10803UPDATE t1
10804SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
10805f_charbig = '####updated per update statement itself####';
10806
10807# check trigger-10 success: 	1
10808DROP TRIGGER trg_2;
10809UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
10810f_int2 = CAST(f_char1 AS SIGNED INT),
10811f_charbig = CONCAT('===',f_char1,'===');
10812CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10813BEGIN
10814SET new.f_int1 = @my_max1 + @counter,
10815new.f_int2 = @my_min2 - @counter,
10816new.f_charbig = '####updated per insert trigger####';
10817SET @counter = @counter + 1;
10818END|
10819SET @counter = 1;
10820SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10821INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10822SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10823CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10824WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10825ORDER BY f_int1;
10826DROP TRIGGER trg_3;
10827
10828# check trigger-11 success: 	1
10829DELETE FROM t1
10830WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10831AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10832AND f_charbig = '####updated per insert trigger####';
10833CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
10834BEGIN
10835SET new.f_int1 = @my_max1 + @counter,
10836new.f_int2 = @my_min2 - @counter,
10837new.f_charbig = '####updated per insert trigger####';
10838SET @counter = @counter + 1;
10839END|
10840SET @counter = 1;
10841SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
10842INSERT INTO t1 (f_char1, f_char2, f_charbig)
10843SELECT CAST(f_int1 AS CHAR),
10844CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
10845WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
10846ORDER BY f_int1;
10847DROP TRIGGER trg_3;
10848
10849# check trigger-12 success: 	1
10850DELETE FROM t1
10851WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
10852AND f_int2 <> CAST(f_char1 AS SIGNED INT)
10853AND f_charbig = '####updated per insert trigger####';
10854ANALYZE  TABLE t1;
10855Table	Op	Msg_type	Msg_text
10856test.t1	analyze	status	OK
10857CHECK    TABLE t1 EXTENDED;
10858Table	Op	Msg_type	Msg_text
10859test.t1	check	status	OK
10860CHECKSUM TABLE t1 EXTENDED;
10861Table	Checksum
10862test.t1	<some_value>
10863OPTIMIZE TABLE t1;
10864Table	Op	Msg_type	Msg_text
10865test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
10866test.t1	optimize	status	OK
10867# check layout success:    1
10868REPAIR   TABLE t1 EXTENDED;
10869Table	Op	Msg_type	Msg_text
10870test.t1	repair	status	OK
10871# check layout success:    1
10872TRUNCATE t1;
10873
10874# check TRUNCATE success: 	1
10875# check layout success:    1
10876# End usability test (inc/partition_check.inc)
10877DROP TABLE t1;
10878CREATE TABLE t1 (
10879f_int1 INTEGER,
10880f_int2 INTEGER,
10881f_char1 CHAR(20),
10882f_char2 CHAR(20),
10883f_charbig VARCHAR(1000)
10884, PRIMARY KEY (f_int2,f_int1)
10885)
10886PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
10887(PARTITION part1 VALUES IN (0)
10888(SUBPARTITION sp11, SUBPARTITION sp12),
10889PARTITION part2 VALUES IN (1)
10890(SUBPARTITION sp21, SUBPARTITION sp22),
10891PARTITION part3 VALUES IN (2)
10892(SUBPARTITION sp31, SUBPARTITION sp32),
10893PARTITION part4 VALUES IN (NULL)
10894(SUBPARTITION sp41, SUBPARTITION sp42));
10895INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10896SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10897WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
10898ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
10899INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
10900SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
10901WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
10902# Start usability test (inc/partition_check.inc)
10903create_command
10904SHOW CREATE TABLE t1;
10905Table	Create Table
10906t1	CREATE TABLE `t1` (
10907  `f_int1` bigint(20) NOT NULL,
10908  `f_int2` bigint(20) NOT NULL,
10909  `f_char1` char(20) DEFAULT NULL,
10910  `f_char2` char(20) DEFAULT NULL,
10911  `f_charbig` varchar(1000) DEFAULT NULL,
10912  PRIMARY KEY (`f_int2`,`f_int1`)
10913) ENGINE=InnoDB DEFAULT CHARSET=latin1
10914/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
10915SUBPARTITION BY HASH (f_int2 + 1)
10916(PARTITION part1 VALUES IN (0)
10917 (SUBPARTITION sp11 ENGINE = InnoDB,
10918  SUBPARTITION sp12 ENGINE = InnoDB),
10919 PARTITION part2 VALUES IN (1)
10920 (SUBPARTITION sp21 ENGINE = InnoDB,
10921  SUBPARTITION sp22 ENGINE = InnoDB),
10922 PARTITION part3 VALUES IN (2)
10923 (SUBPARTITION sp31 ENGINE = InnoDB,
10924  SUBPARTITION sp32 ENGINE = InnoDB),
10925 PARTITION part4 VALUES IN (NULL)
10926 (SUBPARTITION sp41 ENGINE = InnoDB,
10927  SUBPARTITION sp42 ENGINE = InnoDB)) */
10928
10929# check prerequisites-1 success:    1
10930# check COUNT(*) success:    1
10931# check MIN/MAX(f_int1) success:    1
10932# check MIN/MAX(f_int2) success:    1
10933INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10934SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
10935CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
10936WHERE f_int1 IN (2,3);
10937ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
10938# check prerequisites-3 success:    1
10939# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
10940INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10941SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10942CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10943WHERE f_int1 IN (2,3);
10944DELETE FROM t1 WHERE f_charbig = 'delete me';
10945INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
10946SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
10947CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
10948WHERE f_int1 IN (2,3);
10949DELETE FROM t1 WHERE f_charbig = 'delete me';
10950# check read via f_int1 success: 1
10951# check read via f_int2 success: 1
10952
10953# check multiple-1 success: 	1
10954DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
10955
10956# check multiple-2 success: 	1
10957INSERT INTO t1 SELECT * FROM t0_template
10958WHERE MOD(f_int1,3) = 0;
10959
10960# check multiple-3 success: 	1
10961UPDATE t1 SET f_int1 = f_int1 + @max_row
10962WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
10963AND @max_row_div2 + @max_row_div4;
10964
10965# check multiple-4 success: 	1
10966DELETE FROM t1
10967WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
10968AND @max_row_div2 + @max_row_div4 + @max_row;
10969
10970# check multiple-5 success: 	1
10971SELECT COUNT(*) INTO @try_count FROM t0_template
10972WHERE MOD(f_int1,3) = 0
10973AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10974SELECT COUNT(*) INTO @clash_count
10975FROM t1 INNER JOIN t0_template USING(f_int1)
10976WHERE MOD(f_int1,3) = 0
10977AND f_int1 BETWEEN @max_row_div2 AND @max_row;
10978SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
10979INSERT INTO t1
10980SET f_int1 = @cur_value , f_int2 = @cur_value,
10981f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10982f_charbig = '#SINGLE#';
10983
10984# check single-1 success: 	1
10985SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
10986INSERT INTO t1
10987SET f_int1 = @cur_value , f_int2 = @cur_value,
10988f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
10989f_charbig = '#SINGLE#';
10990
10991# check single-2 success: 	1
10992SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
10993SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
10994UPDATE t1 SET f_int1 = @cur_value2
10995WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
10996
10997# check single-3 success: 	1
10998SET @cur_value1= -1;
10999SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11000UPDATE t1 SET f_int1 = @cur_value1
11001WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11002
11003# check single-4 success: 	1
11004SELECT MAX(f_int1) INTO @cur_value FROM t1;
11005DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11006
11007# check single-5 success: 	1
11008DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11009
11010# check single-6 success: 	1
11011INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11012
11013# check single-7 success: 	1
11014DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11015DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11016INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11017f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11018f_charbig = '#NULL#';
11019INSERT INTO t1
11020SET f_int1 = NULL , f_int2 = -@max_row,
11021f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11022f_charbig = '#NULL#';
11023ERROR 23000: Column 'f_int1' cannot be null
11024# check null success:    1
11025DELETE FROM t1
11026WHERE f_int1 = 0 AND f_int2 = 0
11027AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11028AND f_charbig = '#NULL#';
11029INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11030SELECT f_int1, f_int1, '', '', 'was inserted'
11031   FROM t0_template source_tab
11032WHERE MOD(f_int1,3) = 0
11033AND f_int1 BETWEEN @max_row_div2 AND @max_row
11034ON DUPLICATE KEY
11035UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11036f_int2 = 2 * @max_row + source_tab.f_int1,
11037f_charbig = 'was updated';
11038
11039# check unique-1-a success: 	1
11040
11041# check unique-1-b success: 	1
11042DELETE FROM t1 WHERE f_charbig = 'was inserted';
11043UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11044f_int2 = CAST(f_char1 AS SIGNED INT),
11045f_charbig = CONCAT('===',f_char1,'===')
11046WHERE f_charbig = 'was updated';
11047REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11048SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11049   FROM t0_template source_tab
11050WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11051
11052# check replace success: 	1
11053DELETE FROM t1
11054WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11055DELETE FROM t1
11056WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11057f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11058UPDATE t1 SET f_int2 = f_int1,
11059f_char1 = CAST(f_int1 AS CHAR),
11060f_char2 = CAST(f_int1 AS CHAR),
11061f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11062WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11063SET AUTOCOMMIT= 0;
11064INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11065SELECT f_int1, f_int1, '', '', 'was inserted'
11066FROM t0_template source_tab
11067WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11068
11069# check transactions-1 success: 	1
11070COMMIT WORK;
11071
11072# check transactions-2 success: 	1
11073ROLLBACK WORK;
11074
11075# check transactions-3 success: 	1
11076DELETE FROM t1 WHERE f_charbig = 'was inserted';
11077COMMIT WORK;
11078ROLLBACK WORK;
11079
11080# check transactions-4 success: 	1
11081INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11082SELECT f_int1, f_int1, '', '', 'was inserted'
11083FROM t0_template source_tab
11084WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11085
11086# check transactions-5 success: 	1
11087ROLLBACK WORK;
11088
11089# check transactions-6 success: 	1
11090# INFO: Storage engine used for t1 seems to be transactional.
11091COMMIT;
11092
11093# check transactions-7 success: 	1
11094DELETE FROM t1 WHERE f_charbig = 'was inserted';
11095COMMIT WORK;
11096SET @@session.sql_mode = 'traditional';
11097Warnings:
11098Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11099SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11100INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11101SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11102'', '', 'was inserted' FROM t0_template
11103WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11104ERROR 22012: Division by 0
11105COMMIT;
11106
11107# check transactions-8 success: 	1
11108# INFO: Storage engine used for t1 seems to be able to revert
11109#       changes made by the failing statement.
11110SET @@session.sql_mode = '';
11111Warnings:
11112Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11113SET AUTOCOMMIT= 1;
11114DELETE FROM t1 WHERE f_charbig = 'was inserted';
11115COMMIT WORK;
11116UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11117
11118# check special-1 success: 	1
11119UPDATE t1 SET f_charbig = '';
11120
11121# check special-2 success: 	1
11122UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11123INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11124SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11125WHERE 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 BEFORE INSERT 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 = new.f_int1;
11135END|
11136INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11137SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11138WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11139
11140# check trigger-1 success: 	1
11141DROP TRIGGER trg_1;
11142UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11143f_int2 = CAST(f_char1 AS SIGNED INT),
11144f_charbig = 'just inserted'
11145   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11146DELETE FROM t0_aux
11147WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11148INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11149SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11150'just inserted' FROM t0_template
11151WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11152CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11153BEGIN
11154UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11155f_charbig = 'updated by trigger'
11156      WHERE f_int1 = new.f_int1;
11157END|
11158INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11159SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11160WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11161
11162# check trigger-2 success: 	1
11163DROP TRIGGER trg_1;
11164UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11165f_int2 = CAST(f_char1 AS SIGNED INT),
11166f_charbig = 'just inserted'
11167   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11168DELETE FROM t0_aux
11169WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11170INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11171SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11172'just inserted' FROM t0_template
11173WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11174CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11175BEGIN
11176UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11177f_charbig = 'updated by trigger'
11178      WHERE f_int1 = new.f_int1;
11179END|
11180UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11181WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11182
11183# check trigger-3 success: 	1
11184DROP TRIGGER trg_1;
11185UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11186f_int2 = CAST(f_char1 AS SIGNED INT),
11187f_charbig = 'just inserted'
11188   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11189DELETE FROM t0_aux
11190WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11191INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11192SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11193'just inserted' FROM t0_template
11194WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11195CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11196BEGIN
11197UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11198f_charbig = 'updated by trigger'
11199      WHERE f_int1 = - old.f_int1;
11200END|
11201UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11202WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11203
11204# check trigger-4 success: 	1
11205DROP TRIGGER trg_1;
11206UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11207f_int2 = CAST(f_char1 AS SIGNED INT),
11208f_charbig = 'just inserted'
11209   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11210DELETE FROM t0_aux
11211WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11212INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11213SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11214'just inserted' FROM t0_template
11215WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11216CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11217BEGIN
11218UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11219f_charbig = 'updated by trigger'
11220      WHERE f_int1 = new.f_int1;
11221END|
11222UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11223WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11224
11225# check trigger-5 success: 	1
11226DROP TRIGGER trg_1;
11227UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11228f_int2 = CAST(f_char1 AS SIGNED INT),
11229f_charbig = 'just inserted'
11230   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11231DELETE FROM t0_aux
11232WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11234SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11235'just inserted' FROM t0_template
11236WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11237CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11238BEGIN
11239UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11240f_charbig = 'updated by trigger'
11241      WHERE f_int1 = - old.f_int1;
11242END|
11243UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11244WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11245
11246# check trigger-6 success: 	1
11247DROP TRIGGER trg_1;
11248UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11249f_int2 = CAST(f_char1 AS SIGNED INT),
11250f_charbig = 'just inserted'
11251   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11252DELETE FROM t0_aux
11253WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11254INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11255SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11256'just inserted' FROM t0_template
11257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11258CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11259BEGIN
11260UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11261f_charbig = 'updated by trigger'
11262      WHERE f_int1 = - old.f_int1;
11263END|
11264DELETE FROM t0_aux
11265WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11266
11267# check trigger-7 success: 	1
11268DROP TRIGGER trg_1;
11269UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11270f_int2 = CAST(f_char1 AS SIGNED INT),
11271f_charbig = 'just inserted'
11272   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11273DELETE FROM t0_aux
11274WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11275INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11276SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11277'just inserted' FROM t0_template
11278WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11279CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11280BEGIN
11281UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11282f_charbig = 'updated by trigger'
11283      WHERE f_int1 = - old.f_int1;
11284END|
11285DELETE FROM t0_aux
11286WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11287
11288# check trigger-8 success: 	1
11289DROP TRIGGER trg_1;
11290UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11291f_int2 = CAST(f_char1 AS SIGNED INT),
11292f_charbig = 'just inserted'
11293   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11294DELETE FROM t0_aux
11295WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11296DELETE FROM t1
11297WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11298CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11299BEGIN
11300SET new.f_int1 = old.f_int1 + @max_row,
11301new.f_int2 = old.f_int2 - @max_row,
11302new.f_charbig = '####updated per update trigger####';
11303END|
11304UPDATE t1
11305SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11306f_charbig = '####updated per update statement itself####';
11307
11308# check trigger-9 success: 	1
11309DROP TRIGGER trg_2;
11310UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11311f_int2 = CAST(f_char1 AS SIGNED INT),
11312f_charbig = CONCAT('===',f_char1,'===');
11313CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11314BEGIN
11315SET new.f_int1 = new.f_int1 + @max_row,
11316new.f_int2 = new.f_int2 - @max_row,
11317new.f_charbig = '####updated per update trigger####';
11318END|
11319UPDATE t1
11320SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11321f_charbig = '####updated per update statement itself####';
11322
11323# check trigger-10 success: 	1
11324DROP TRIGGER trg_2;
11325UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11326f_int2 = CAST(f_char1 AS SIGNED INT),
11327f_charbig = CONCAT('===',f_char1,'===');
11328CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11329BEGIN
11330SET new.f_int1 = @my_max1 + @counter,
11331new.f_int2 = @my_min2 - @counter,
11332new.f_charbig = '####updated per insert trigger####';
11333SET @counter = @counter + 1;
11334END|
11335SET @counter = 1;
11336SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11337INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11338SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11339CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11340WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11341ORDER BY f_int1;
11342DROP TRIGGER trg_3;
11343
11344# check trigger-11 success: 	1
11345DELETE FROM t1
11346WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11347AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11348AND f_charbig = '####updated per insert trigger####';
11349CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11350BEGIN
11351SET new.f_int1 = @my_max1 + @counter,
11352new.f_int2 = @my_min2 - @counter,
11353new.f_charbig = '####updated per insert trigger####';
11354SET @counter = @counter + 1;
11355END|
11356SET @counter = 1;
11357SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11358INSERT INTO t1 (f_char1, f_char2, f_charbig)
11359SELECT CAST(f_int1 AS CHAR),
11360CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11361WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11362ORDER BY f_int1;
11363DROP TRIGGER trg_3;
11364
11365# check trigger-12 success: 	1
11366DELETE FROM t1
11367WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11368AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11369AND f_charbig = '####updated per insert trigger####';
11370ANALYZE  TABLE t1;
11371Table	Op	Msg_type	Msg_text
11372test.t1	analyze	status	OK
11373CHECK    TABLE t1 EXTENDED;
11374Table	Op	Msg_type	Msg_text
11375test.t1	check	status	OK
11376CHECKSUM TABLE t1 EXTENDED;
11377Table	Checksum
11378test.t1	<some_value>
11379OPTIMIZE TABLE t1;
11380Table	Op	Msg_type	Msg_text
11381test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11382test.t1	optimize	status	OK
11383# check layout success:    1
11384REPAIR   TABLE t1 EXTENDED;
11385Table	Op	Msg_type	Msg_text
11386test.t1	repair	status	OK
11387# check layout success:    1
11388TRUNCATE t1;
11389
11390# check TRUNCATE success: 	1
11391# check layout success:    1
11392# End usability test (inc/partition_check.inc)
11393DROP TABLE t1;
11394CREATE TABLE t1 (
11395f_int1 INTEGER,
11396f_int2 INTEGER,
11397f_char1 CHAR(20),
11398f_char2 CHAR(20),
11399f_charbig VARCHAR(1000)
11400, PRIMARY KEY (f_int2,f_int1)
11401)
11402PARTITION BY LIST(ABS(MOD(f_int1,2)))
11403SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
11404(PARTITION part1 VALUES IN (0),
11405PARTITION part2 VALUES IN (1),
11406PARTITION part3 VALUES IN (NULL));
11407INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11408SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11409WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11410ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
11411INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11412SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11413WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11414# Start usability test (inc/partition_check.inc)
11415create_command
11416SHOW CREATE TABLE t1;
11417Table	Create Table
11418t1	CREATE TABLE `t1` (
11419  `f_int1` bigint(20) NOT NULL,
11420  `f_int2` bigint(20) NOT NULL,
11421  `f_char1` char(20) DEFAULT NULL,
11422  `f_char2` char(20) DEFAULT NULL,
11423  `f_charbig` varchar(1000) DEFAULT NULL,
11424  PRIMARY KEY (`f_int2`,`f_int1`)
11425) ENGINE=InnoDB DEFAULT CHARSET=latin1
11426/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
11427SUBPARTITION BY KEY (f_int2)
11428SUBPARTITIONS 3
11429(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
11430 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
11431 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
11432
11433# check prerequisites-1 success:    1
11434# check COUNT(*) success:    1
11435# check MIN/MAX(f_int1) success:    1
11436# check MIN/MAX(f_int2) success:    1
11437INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11438SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11439CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11440WHERE f_int1 IN (2,3);
11441ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY'
11442# check prerequisites-3 success:    1
11443# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11444INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11445SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11446CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11447WHERE f_int1 IN (2,3);
11448DELETE FROM t1 WHERE f_charbig = 'delete me';
11449INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11450SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11451CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11452WHERE f_int1 IN (2,3);
11453DELETE FROM t1 WHERE f_charbig = 'delete me';
11454# check read via f_int1 success: 1
11455# check read via f_int2 success: 1
11456
11457# check multiple-1 success: 	1
11458DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11459
11460# check multiple-2 success: 	1
11461INSERT INTO t1 SELECT * FROM t0_template
11462WHERE MOD(f_int1,3) = 0;
11463
11464# check multiple-3 success: 	1
11465UPDATE t1 SET f_int1 = f_int1 + @max_row
11466WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11467AND @max_row_div2 + @max_row_div4;
11468
11469# check multiple-4 success: 	1
11470DELETE FROM t1
11471WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11472AND @max_row_div2 + @max_row_div4 + @max_row;
11473
11474# check multiple-5 success: 	1
11475SELECT COUNT(*) INTO @try_count FROM t0_template
11476WHERE MOD(f_int1,3) = 0
11477AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11478SELECT COUNT(*) INTO @clash_count
11479FROM t1 INNER JOIN t0_template USING(f_int1)
11480WHERE MOD(f_int1,3) = 0
11481AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11482SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11483INSERT INTO t1
11484SET f_int1 = @cur_value , f_int2 = @cur_value,
11485f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11486f_charbig = '#SINGLE#';
11487
11488# check single-1 success: 	1
11489SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11490INSERT INTO t1
11491SET f_int1 = @cur_value , f_int2 = @cur_value,
11492f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11493f_charbig = '#SINGLE#';
11494
11495# check single-2 success: 	1
11496SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11497SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11498UPDATE t1 SET f_int1 = @cur_value2
11499WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11500
11501# check single-3 success: 	1
11502SET @cur_value1= -1;
11503SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
11504UPDATE t1 SET f_int1 = @cur_value1
11505WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
11506
11507# check single-4 success: 	1
11508SELECT MAX(f_int1) INTO @cur_value FROM t1;
11509DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
11510
11511# check single-5 success: 	1
11512DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
11513
11514# check single-6 success: 	1
11515INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
11516
11517# check single-7 success: 	1
11518DELETE FROM t1 WHERE f_charbig = '#2147483647##';
11519DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
11520INSERT t1 SET f_int1 = 0 , f_int2 = 0,
11521f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
11522f_charbig = '#NULL#';
11523INSERT INTO t1
11524SET f_int1 = NULL , f_int2 = -@max_row,
11525f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
11526f_charbig = '#NULL#';
11527ERROR 23000: Column 'f_int1' cannot be null
11528# check null success:    1
11529DELETE FROM t1
11530WHERE f_int1 = 0 AND f_int2 = 0
11531AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
11532AND f_charbig = '#NULL#';
11533INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11534SELECT f_int1, f_int1, '', '', 'was inserted'
11535   FROM t0_template source_tab
11536WHERE MOD(f_int1,3) = 0
11537AND f_int1 BETWEEN @max_row_div2 AND @max_row
11538ON DUPLICATE KEY
11539UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
11540f_int2 = 2 * @max_row + source_tab.f_int1,
11541f_charbig = 'was updated';
11542
11543# check unique-1-a success: 	1
11544
11545# check unique-1-b success: 	1
11546DELETE FROM t1 WHERE f_charbig = 'was inserted';
11547UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11548f_int2 = CAST(f_char1 AS SIGNED INT),
11549f_charbig = CONCAT('===',f_char1,'===')
11550WHERE f_charbig = 'was updated';
11551REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11552SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
11553   FROM t0_template source_tab
11554WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11555
11556# check replace success: 	1
11557DELETE FROM t1
11558WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
11559DELETE FROM t1
11560WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
11561f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
11562UPDATE t1 SET f_int2 = f_int1,
11563f_char1 = CAST(f_int1 AS CHAR),
11564f_char2 = CAST(f_int1 AS CHAR),
11565f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
11566WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
11567SET AUTOCOMMIT= 0;
11568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11569SELECT f_int1, f_int1, '', '', 'was inserted'
11570FROM t0_template source_tab
11571WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11572
11573# check transactions-1 success: 	1
11574COMMIT WORK;
11575
11576# check transactions-2 success: 	1
11577ROLLBACK WORK;
11578
11579# check transactions-3 success: 	1
11580DELETE FROM t1 WHERE f_charbig = 'was inserted';
11581COMMIT WORK;
11582ROLLBACK WORK;
11583
11584# check transactions-4 success: 	1
11585INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11586SELECT f_int1, f_int1, '', '', 'was inserted'
11587FROM t0_template source_tab
11588WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11589
11590# check transactions-5 success: 	1
11591ROLLBACK WORK;
11592
11593# check transactions-6 success: 	1
11594# INFO: Storage engine used for t1 seems to be transactional.
11595COMMIT;
11596
11597# check transactions-7 success: 	1
11598DELETE FROM t1 WHERE f_charbig = 'was inserted';
11599COMMIT WORK;
11600SET @@session.sql_mode = 'traditional';
11601Warnings:
11602Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11603SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
11604INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11605SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
11606'', '', 'was inserted' FROM t0_template
11607WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
11608ERROR 22012: Division by 0
11609COMMIT;
11610
11611# check transactions-8 success: 	1
11612# INFO: Storage engine used for t1 seems to be able to revert
11613#       changes made by the failing statement.
11614SET @@session.sql_mode = '';
11615Warnings:
11616Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
11617SET AUTOCOMMIT= 1;
11618DELETE FROM t1 WHERE f_charbig = 'was inserted';
11619COMMIT WORK;
11620UPDATE t1 SET f_charbig = REPEAT('b', 1000);
11621
11622# check special-1 success: 	1
11623UPDATE t1 SET f_charbig = '';
11624
11625# check special-2 success: 	1
11626UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
11627INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11628SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
11629WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11630INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11631SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11632'just inserted' FROM t0_template
11633WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11634CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
11635BEGIN
11636UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11637f_charbig = 'updated by trigger'
11638      WHERE f_int1 = new.f_int1;
11639END|
11640INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11641SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11642WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11643
11644# check trigger-1 success: 	1
11645DROP TRIGGER trg_1;
11646UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11647f_int2 = CAST(f_char1 AS SIGNED INT),
11648f_charbig = 'just inserted'
11649   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11650DELETE FROM t0_aux
11651WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11652INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11653SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11654'just inserted' FROM t0_template
11655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11656CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
11657BEGIN
11658UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11659f_charbig = 'updated by trigger'
11660      WHERE f_int1 = new.f_int1;
11661END|
11662INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11663SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
11664WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11665
11666# check trigger-2 success: 	1
11667DROP TRIGGER trg_1;
11668UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11669f_int2 = CAST(f_char1 AS SIGNED INT),
11670f_charbig = 'just inserted'
11671   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11672DELETE FROM t0_aux
11673WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11674INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11675SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11676'just inserted' FROM t0_template
11677WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11678CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11679BEGIN
11680UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11681f_charbig = 'updated by trigger'
11682      WHERE f_int1 = new.f_int1;
11683END|
11684UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11685WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11686
11687# check trigger-3 success: 	1
11688DROP TRIGGER trg_1;
11689UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11690f_int2 = CAST(f_char1 AS SIGNED INT),
11691f_charbig = 'just inserted'
11692   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11693DELETE FROM t0_aux
11694WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11695INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11696SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11697'just inserted' FROM t0_template
11698WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11699CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
11700BEGIN
11701UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11702f_charbig = 'updated by trigger'
11703      WHERE f_int1 = - old.f_int1;
11704END|
11705UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11706WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11707
11708# check trigger-4 success: 	1
11709DROP TRIGGER trg_1;
11710UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11711f_int2 = CAST(f_char1 AS SIGNED INT),
11712f_charbig = 'just inserted'
11713   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11714DELETE FROM t0_aux
11715WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11716INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11717SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11718'just inserted' FROM t0_template
11719WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11720CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11721BEGIN
11722UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11723f_charbig = 'updated by trigger'
11724      WHERE f_int1 = new.f_int1;
11725END|
11726UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11727WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11728
11729# check trigger-5 success: 	1
11730DROP TRIGGER trg_1;
11731UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11732f_int2 = CAST(f_char1 AS SIGNED INT),
11733f_charbig = 'just inserted'
11734   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11735DELETE FROM t0_aux
11736WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11737INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11738SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11739'just inserted' FROM t0_template
11740WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11741CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
11742BEGIN
11743UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11744f_charbig = 'updated by trigger'
11745      WHERE f_int1 = - old.f_int1;
11746END|
11747UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
11748WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11749
11750# check trigger-6 success: 	1
11751DROP TRIGGER trg_1;
11752UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11753f_int2 = CAST(f_char1 AS SIGNED INT),
11754f_charbig = 'just inserted'
11755   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11756DELETE FROM t0_aux
11757WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11758INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11759SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11760'just inserted' FROM t0_template
11761WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11762CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
11763BEGIN
11764UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11765f_charbig = 'updated by trigger'
11766      WHERE f_int1 = - old.f_int1;
11767END|
11768DELETE FROM t0_aux
11769WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11770
11771# check trigger-7 success: 	1
11772DROP TRIGGER trg_1;
11773UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11774f_int2 = CAST(f_char1 AS SIGNED INT),
11775f_charbig = 'just inserted'
11776   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11777DELETE FROM t0_aux
11778WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11779INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
11780SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
11781'just inserted' FROM t0_template
11782WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11783CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
11784BEGIN
11785UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
11786f_charbig = 'updated by trigger'
11787      WHERE f_int1 = - old.f_int1;
11788END|
11789DELETE FROM t0_aux
11790WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
11791
11792# check trigger-8 success: 	1
11793DROP TRIGGER trg_1;
11794UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11795f_int2 = CAST(f_char1 AS SIGNED INT),
11796f_charbig = 'just inserted'
11797   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
11798DELETE FROM t0_aux
11799WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11800DELETE FROM t1
11801WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
11802CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11803BEGIN
11804SET new.f_int1 = old.f_int1 + @max_row,
11805new.f_int2 = old.f_int2 - @max_row,
11806new.f_charbig = '####updated per update trigger####';
11807END|
11808UPDATE t1
11809SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11810f_charbig = '####updated per update statement itself####';
11811
11812# check trigger-9 success: 	1
11813DROP TRIGGER trg_2;
11814UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11815f_int2 = CAST(f_char1 AS SIGNED INT),
11816f_charbig = CONCAT('===',f_char1,'===');
11817CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
11818BEGIN
11819SET new.f_int1 = new.f_int1 + @max_row,
11820new.f_int2 = new.f_int2 - @max_row,
11821new.f_charbig = '####updated per update trigger####';
11822END|
11823UPDATE t1
11824SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
11825f_charbig = '####updated per update statement itself####';
11826
11827# check trigger-10 success: 	1
11828DROP TRIGGER trg_2;
11829UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
11830f_int2 = CAST(f_char1 AS SIGNED INT),
11831f_charbig = CONCAT('===',f_char1,'===');
11832CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11833BEGIN
11834SET new.f_int1 = @my_max1 + @counter,
11835new.f_int2 = @my_min2 - @counter,
11836new.f_charbig = '####updated per insert trigger####';
11837SET @counter = @counter + 1;
11838END|
11839SET @counter = 1;
11840SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11841INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11842SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11843CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11844WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11845ORDER BY f_int1;
11846DROP TRIGGER trg_3;
11847
11848# check trigger-11 success: 	1
11849DELETE FROM t1
11850WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11851AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11852AND f_charbig = '####updated per insert trigger####';
11853CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
11854BEGIN
11855SET new.f_int1 = @my_max1 + @counter,
11856new.f_int2 = @my_min2 - @counter,
11857new.f_charbig = '####updated per insert trigger####';
11858SET @counter = @counter + 1;
11859END|
11860SET @counter = 1;
11861SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
11862INSERT INTO t1 (f_char1, f_char2, f_charbig)
11863SELECT CAST(f_int1 AS CHAR),
11864CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
11865WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
11866ORDER BY f_int1;
11867DROP TRIGGER trg_3;
11868
11869# check trigger-12 success: 	1
11870DELETE FROM t1
11871WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
11872AND f_int2 <> CAST(f_char1 AS SIGNED INT)
11873AND f_charbig = '####updated per insert trigger####';
11874ANALYZE  TABLE t1;
11875Table	Op	Msg_type	Msg_text
11876test.t1	analyze	status	OK
11877CHECK    TABLE t1 EXTENDED;
11878Table	Op	Msg_type	Msg_text
11879test.t1	check	status	OK
11880CHECKSUM TABLE t1 EXTENDED;
11881Table	Checksum
11882test.t1	<some_value>
11883OPTIMIZE TABLE t1;
11884Table	Op	Msg_type	Msg_text
11885test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
11886test.t1	optimize	status	OK
11887# check layout success:    1
11888REPAIR   TABLE t1 EXTENDED;
11889Table	Op	Msg_type	Msg_text
11890test.t1	repair	status	OK
11891# check layout success:    1
11892TRUNCATE t1;
11893
11894# check TRUNCATE success: 	1
11895# check layout success:    1
11896# End usability test (inc/partition_check.inc)
11897DROP TABLE t1;
11898#  1.3.3 UNIQUE INDEX exists
11899DROP TABLE IF EXISTS t1;
11900CREATE TABLE t1 (
11901f_int1 INTEGER,
11902f_int2 INTEGER,
11903f_char1 CHAR(20),
11904f_char2 CHAR(20),
11905f_charbig VARCHAR(1000)
11906, UNIQUE INDEX uidx (f_int1,f_int2)
11907)
11908PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
11909INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11910SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11911WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
11912ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
11913INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
11914SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
11915WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
11916# Start usability test (inc/partition_check.inc)
11917create_command
11918SHOW CREATE TABLE t1;
11919Table	Create Table
11920t1	CREATE TABLE `t1` (
11921  `f_int1` bigint(20) DEFAULT NULL,
11922  `f_int2` bigint(20) DEFAULT NULL,
11923  `f_char1` char(20) DEFAULT NULL,
11924  `f_char2` char(20) DEFAULT NULL,
11925  `f_charbig` varchar(1000) DEFAULT NULL,
11926  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
11927) ENGINE=InnoDB DEFAULT CHARSET=latin1
11928/*!50100 PARTITION BY HASH (f_int1 + f_int2)
11929PARTITIONS 2 */
11930
11931# check prerequisites-1 success:    1
11932# check COUNT(*) success:    1
11933# check MIN/MAX(f_int1) success:    1
11934# check MIN/MAX(f_int2) success:    1
11935INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11936SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
11937CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
11938WHERE f_int1 IN (2,3);
11939ERROR 23000: Duplicate entry '2-2' for key 'uidx'
11940# check prerequisites-3 success:    1
11941# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
11942INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11943SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11944CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11945WHERE f_int1 IN (2,3);
11946DELETE FROM t1 WHERE f_charbig = 'delete me';
11947INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
11948SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
11949CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
11950WHERE f_int1 IN (2,3);
11951DELETE FROM t1 WHERE f_charbig = 'delete me';
11952# check read via f_int1 success: 1
11953# check read via f_int2 success: 1
11954
11955# check multiple-1 success: 	1
11956DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
11957
11958# check multiple-2 success: 	1
11959INSERT INTO t1 SELECT * FROM t0_template
11960WHERE MOD(f_int1,3) = 0;
11961
11962# check multiple-3 success: 	1
11963UPDATE t1 SET f_int1 = f_int1 + @max_row
11964WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
11965AND @max_row_div2 + @max_row_div4;
11966
11967# check multiple-4 success: 	1
11968DELETE FROM t1
11969WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
11970AND @max_row_div2 + @max_row_div4 + @max_row;
11971
11972# check multiple-5 success: 	1
11973SELECT COUNT(*) INTO @try_count FROM t0_template
11974WHERE MOD(f_int1,3) = 0
11975AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11976SELECT COUNT(*) INTO @clash_count
11977FROM t1 INNER JOIN t0_template USING(f_int1)
11978WHERE MOD(f_int1,3) = 0
11979AND f_int1 BETWEEN @max_row_div2 AND @max_row;
11980SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
11981INSERT INTO t1
11982SET f_int1 = @cur_value , f_int2 = @cur_value,
11983f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11984f_charbig = '#SINGLE#';
11985
11986# check single-1 success: 	1
11987SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
11988INSERT INTO t1
11989SET f_int1 = @cur_value , f_int2 = @cur_value,
11990f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
11991f_charbig = '#SINGLE#';
11992
11993# check single-2 success: 	1
11994SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
11995SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
11996UPDATE t1 SET f_int1 = @cur_value2
11997WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
11998
11999# check single-3 success: 	1
12000SET @cur_value1= -1;
12001SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12002UPDATE t1 SET f_int1 = @cur_value1
12003WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12004
12005# check single-4 success: 	1
12006SELECT MAX(f_int1) INTO @cur_value FROM t1;
12007DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12008
12009# check single-5 success: 	1
12010DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12011
12012# check single-6 success: 	1
12013INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12014
12015# check single-7 success: 	1
12016DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12017DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12018INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12019f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12020f_charbig = '#NULL#';
12021INSERT INTO t1
12022SET f_int1 = NULL , f_int2 = -@max_row,
12023f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12024f_charbig = '#NULL#';
12025# check null success:    1
12026
12027# check null-1 success: 	1
12028UPDATE t1 SET f_int1 = -@max_row
12029WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12030AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12031
12032# check null-2 success: 	1
12033UPDATE t1 SET f_int1 = NULL
12034WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12035AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12036
12037# check null-3 success: 	1
12038DELETE FROM t1
12039WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12040AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12041
12042# check null-4 success: 	1
12043DELETE FROM t1
12044WHERE f_int1 = 0 AND f_int2 = 0
12045AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12046AND f_charbig = '#NULL#';
12047INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12048SELECT f_int1, f_int1, '', '', 'was inserted'
12049   FROM t0_template source_tab
12050WHERE MOD(f_int1,3) = 0
12051AND f_int1 BETWEEN @max_row_div2 AND @max_row
12052ON DUPLICATE KEY
12053UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12054f_int2 = 2 * @max_row + source_tab.f_int1,
12055f_charbig = 'was updated';
12056
12057# check unique-1-a success: 	1
12058
12059# check unique-1-b success: 	1
12060DELETE FROM t1 WHERE f_charbig = 'was inserted';
12061UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12062f_int2 = CAST(f_char1 AS SIGNED INT),
12063f_charbig = CONCAT('===',f_char1,'===')
12064WHERE f_charbig = 'was updated';
12065REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12066SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12067   FROM t0_template source_tab
12068WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12069
12070# check replace success: 	1
12071DELETE FROM t1
12072WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12073DELETE FROM t1
12074WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12075f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12076UPDATE t1 SET f_int2 = f_int1,
12077f_char1 = CAST(f_int1 AS CHAR),
12078f_char2 = CAST(f_int1 AS CHAR),
12079f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12080WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12081SET AUTOCOMMIT= 0;
12082INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12083SELECT f_int1, f_int1, '', '', 'was inserted'
12084FROM t0_template source_tab
12085WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12086
12087# check transactions-1 success: 	1
12088COMMIT WORK;
12089
12090# check transactions-2 success: 	1
12091ROLLBACK WORK;
12092
12093# check transactions-3 success: 	1
12094DELETE FROM t1 WHERE f_charbig = 'was inserted';
12095COMMIT WORK;
12096ROLLBACK WORK;
12097
12098# check transactions-4 success: 	1
12099INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12100SELECT f_int1, f_int1, '', '', 'was inserted'
12101FROM t0_template source_tab
12102WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12103
12104# check transactions-5 success: 	1
12105ROLLBACK WORK;
12106
12107# check transactions-6 success: 	1
12108# INFO: Storage engine used for t1 seems to be transactional.
12109COMMIT;
12110
12111# check transactions-7 success: 	1
12112DELETE FROM t1 WHERE f_charbig = 'was inserted';
12113COMMIT WORK;
12114SET @@session.sql_mode = 'traditional';
12115Warnings:
12116Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12117SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12118INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12119SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12120'', '', 'was inserted' FROM t0_template
12121WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12122ERROR 22012: Division by 0
12123COMMIT;
12124
12125# check transactions-8 success: 	1
12126# INFO: Storage engine used for t1 seems to be able to revert
12127#       changes made by the failing statement.
12128SET @@session.sql_mode = '';
12129Warnings:
12130Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12131SET AUTOCOMMIT= 1;
12132DELETE FROM t1 WHERE f_charbig = 'was inserted';
12133COMMIT WORK;
12134UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12135
12136# check special-1 success: 	1
12137UPDATE t1 SET f_charbig = '';
12138
12139# check special-2 success: 	1
12140UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12141INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12142SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12143WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12144INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12145SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12146'just inserted' FROM t0_template
12147WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12148CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12149BEGIN
12150UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12151f_charbig = 'updated by trigger'
12152      WHERE f_int1 = new.f_int1;
12153END|
12154INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12155SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12156WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12157
12158# check trigger-1 success: 	1
12159DROP TRIGGER trg_1;
12160UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12161f_int2 = CAST(f_char1 AS SIGNED INT),
12162f_charbig = 'just inserted'
12163   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12164DELETE FROM t0_aux
12165WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12166INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12167SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12168'just inserted' FROM t0_template
12169WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12170CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12171BEGIN
12172UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12173f_charbig = 'updated by trigger'
12174      WHERE f_int1 = new.f_int1;
12175END|
12176INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12177SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12178WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12179
12180# check trigger-2 success: 	1
12181DROP TRIGGER trg_1;
12182UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12183f_int2 = CAST(f_char1 AS SIGNED INT),
12184f_charbig = 'just inserted'
12185   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12186DELETE FROM t0_aux
12187WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12188INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12189SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12190'just inserted' FROM t0_template
12191WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12192CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12193BEGIN
12194UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12195f_charbig = 'updated by trigger'
12196      WHERE f_int1 = new.f_int1;
12197END|
12198UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12199WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12200
12201# check trigger-3 success: 	1
12202DROP TRIGGER trg_1;
12203UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12204f_int2 = CAST(f_char1 AS SIGNED INT),
12205f_charbig = 'just inserted'
12206   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12207DELETE FROM t0_aux
12208WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12209INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12210SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12211'just inserted' FROM t0_template
12212WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12213CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12214BEGIN
12215UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12216f_charbig = 'updated by trigger'
12217      WHERE f_int1 = - old.f_int1;
12218END|
12219UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12220WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12221
12222# check trigger-4 success: 	1
12223DROP TRIGGER trg_1;
12224UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12225f_int2 = CAST(f_char1 AS SIGNED INT),
12226f_charbig = 'just inserted'
12227   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12228DELETE FROM t0_aux
12229WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12230INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12231SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12232'just inserted' FROM t0_template
12233WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12234CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12235BEGIN
12236UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12237f_charbig = 'updated by trigger'
12238      WHERE f_int1 = new.f_int1;
12239END|
12240UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12241WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12242
12243# check trigger-5 success: 	1
12244DROP TRIGGER trg_1;
12245UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12246f_int2 = CAST(f_char1 AS SIGNED INT),
12247f_charbig = 'just inserted'
12248   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12249DELETE FROM t0_aux
12250WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12251INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12252SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12253'just inserted' FROM t0_template
12254WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12255CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12256BEGIN
12257UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12258f_charbig = 'updated by trigger'
12259      WHERE f_int1 = - old.f_int1;
12260END|
12261UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12262WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12263
12264# check trigger-6 success: 	1
12265DROP TRIGGER trg_1;
12266UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12267f_int2 = CAST(f_char1 AS SIGNED INT),
12268f_charbig = 'just inserted'
12269   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12270DELETE FROM t0_aux
12271WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12272INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12273SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12274'just inserted' FROM t0_template
12275WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12276CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12277BEGIN
12278UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12279f_charbig = 'updated by trigger'
12280      WHERE f_int1 = - old.f_int1;
12281END|
12282DELETE FROM t0_aux
12283WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12284
12285# check trigger-7 success: 	1
12286DROP TRIGGER trg_1;
12287UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12288f_int2 = CAST(f_char1 AS SIGNED INT),
12289f_charbig = 'just inserted'
12290   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12291DELETE FROM t0_aux
12292WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12293INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12294SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12295'just inserted' FROM t0_template
12296WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12297CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12298BEGIN
12299UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12300f_charbig = 'updated by trigger'
12301      WHERE f_int1 = - old.f_int1;
12302END|
12303DELETE FROM t0_aux
12304WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12305
12306# check trigger-8 success: 	1
12307DROP TRIGGER trg_1;
12308UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12309f_int2 = CAST(f_char1 AS SIGNED INT),
12310f_charbig = 'just inserted'
12311   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12312DELETE FROM t0_aux
12313WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12314DELETE FROM t1
12315WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12316CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12317BEGIN
12318SET new.f_int1 = old.f_int1 + @max_row,
12319new.f_int2 = old.f_int2 - @max_row,
12320new.f_charbig = '####updated per update trigger####';
12321END|
12322UPDATE t1
12323SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12324f_charbig = '####updated per update statement itself####';
12325
12326# check trigger-9 success: 	1
12327DROP TRIGGER trg_2;
12328UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12329f_int2 = CAST(f_char1 AS SIGNED INT),
12330f_charbig = CONCAT('===',f_char1,'===');
12331CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12332BEGIN
12333SET new.f_int1 = new.f_int1 + @max_row,
12334new.f_int2 = new.f_int2 - @max_row,
12335new.f_charbig = '####updated per update trigger####';
12336END|
12337UPDATE t1
12338SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12339f_charbig = '####updated per update statement itself####';
12340
12341# check trigger-10 success: 	1
12342DROP TRIGGER trg_2;
12343UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12344f_int2 = CAST(f_char1 AS SIGNED INT),
12345f_charbig = CONCAT('===',f_char1,'===');
12346CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12347BEGIN
12348SET new.f_int1 = @my_max1 + @counter,
12349new.f_int2 = @my_min2 - @counter,
12350new.f_charbig = '####updated per insert trigger####';
12351SET @counter = @counter + 1;
12352END|
12353SET @counter = 1;
12354SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12355INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12356SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12357CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12358WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12359ORDER BY f_int1;
12360DROP TRIGGER trg_3;
12361
12362# check trigger-11 success: 	1
12363DELETE FROM t1
12364WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12365AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12366AND f_charbig = '####updated per insert trigger####';
12367CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12368BEGIN
12369SET new.f_int1 = @my_max1 + @counter,
12370new.f_int2 = @my_min2 - @counter,
12371new.f_charbig = '####updated per insert trigger####';
12372SET @counter = @counter + 1;
12373END|
12374SET @counter = 1;
12375SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12376INSERT INTO t1 (f_char1, f_char2, f_charbig)
12377SELECT CAST(f_int1 AS CHAR),
12378CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12379WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12380ORDER BY f_int1;
12381DROP TRIGGER trg_3;
12382
12383# check trigger-12 success: 	1
12384DELETE FROM t1
12385WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12386AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12387AND f_charbig = '####updated per insert trigger####';
12388ANALYZE  TABLE t1;
12389Table	Op	Msg_type	Msg_text
12390test.t1	analyze	status	OK
12391CHECK    TABLE t1 EXTENDED;
12392Table	Op	Msg_type	Msg_text
12393test.t1	check	status	OK
12394CHECKSUM TABLE t1 EXTENDED;
12395Table	Checksum
12396test.t1	<some_value>
12397OPTIMIZE TABLE t1;
12398Table	Op	Msg_type	Msg_text
12399test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12400test.t1	optimize	status	OK
12401# check layout success:    1
12402REPAIR   TABLE t1 EXTENDED;
12403Table	Op	Msg_type	Msg_text
12404test.t1	repair	status	OK
12405# check layout success:    1
12406TRUNCATE t1;
12407
12408# check TRUNCATE success: 	1
12409# check layout success:    1
12410# End usability test (inc/partition_check.inc)
12411DROP TABLE t1;
12412CREATE TABLE t1 (
12413f_int1 INTEGER,
12414f_int2 INTEGER,
12415f_char1 CHAR(20),
12416f_char2 CHAR(20),
12417f_charbig VARCHAR(1000)
12418, UNIQUE INDEX uidx (f_int1,f_int2)
12419)
12420PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
12421INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12422SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12423WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12424ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
12425INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12426SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12427WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12428# Start usability test (inc/partition_check.inc)
12429create_command
12430SHOW CREATE TABLE t1;
12431Table	Create Table
12432t1	CREATE TABLE `t1` (
12433  `f_int1` bigint(20) DEFAULT NULL,
12434  `f_int2` bigint(20) DEFAULT NULL,
12435  `f_char1` char(20) DEFAULT NULL,
12436  `f_char2` char(20) DEFAULT NULL,
12437  `f_charbig` varchar(1000) DEFAULT NULL,
12438  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
12439) ENGINE=InnoDB DEFAULT CHARSET=latin1
12440/*!50100 PARTITION BY KEY (f_int1,f_int2)
12441PARTITIONS 5 */
12442
12443# check prerequisites-1 success:    1
12444# check COUNT(*) success:    1
12445# check MIN/MAX(f_int1) success:    1
12446# check MIN/MAX(f_int2) success:    1
12447INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12448SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12449CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12450WHERE f_int1 IN (2,3);
12451ERROR 23000: Duplicate entry '2-2' for key 'uidx'
12452# check prerequisites-3 success:    1
12453# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12454INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12455SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12456CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12457WHERE f_int1 IN (2,3);
12458DELETE FROM t1 WHERE f_charbig = 'delete me';
12459INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12460SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12461CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12462WHERE f_int1 IN (2,3);
12463DELETE FROM t1 WHERE f_charbig = 'delete me';
12464# check read via f_int1 success: 1
12465# check read via f_int2 success: 1
12466
12467# check multiple-1 success: 	1
12468DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12469
12470# check multiple-2 success: 	1
12471INSERT INTO t1 SELECT * FROM t0_template
12472WHERE MOD(f_int1,3) = 0;
12473
12474# check multiple-3 success: 	1
12475UPDATE t1 SET f_int1 = f_int1 + @max_row
12476WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
12477AND @max_row_div2 + @max_row_div4;
12478
12479# check multiple-4 success: 	1
12480DELETE FROM t1
12481WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
12482AND @max_row_div2 + @max_row_div4 + @max_row;
12483
12484# check multiple-5 success: 	1
12485SELECT COUNT(*) INTO @try_count FROM t0_template
12486WHERE MOD(f_int1,3) = 0
12487AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12488SELECT COUNT(*) INTO @clash_count
12489FROM t1 INNER JOIN t0_template USING(f_int1)
12490WHERE MOD(f_int1,3) = 0
12491AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12492SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
12493INSERT INTO t1
12494SET f_int1 = @cur_value , f_int2 = @cur_value,
12495f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12496f_charbig = '#SINGLE#';
12497
12498# check single-1 success: 	1
12499SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
12500INSERT INTO t1
12501SET f_int1 = @cur_value , f_int2 = @cur_value,
12502f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
12503f_charbig = '#SINGLE#';
12504
12505# check single-2 success: 	1
12506SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
12507SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
12508UPDATE t1 SET f_int1 = @cur_value2
12509WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
12510
12511# check single-3 success: 	1
12512SET @cur_value1= -1;
12513SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
12514UPDATE t1 SET f_int1 = @cur_value1
12515WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
12516
12517# check single-4 success: 	1
12518SELECT MAX(f_int1) INTO @cur_value FROM t1;
12519DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
12520
12521# check single-5 success: 	1
12522DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
12523
12524# check single-6 success: 	1
12525INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
12526
12527# check single-7 success: 	1
12528DELETE FROM t1 WHERE f_charbig = '#2147483647##';
12529DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
12530INSERT t1 SET f_int1 = 0 , f_int2 = 0,
12531f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
12532f_charbig = '#NULL#';
12533INSERT INTO t1
12534SET f_int1 = NULL , f_int2 = -@max_row,
12535f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
12536f_charbig = '#NULL#';
12537# check null success:    1
12538
12539# check null-1 success: 	1
12540UPDATE t1 SET f_int1 = -@max_row
12541WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12542AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12543
12544# check null-2 success: 	1
12545UPDATE t1 SET f_int1 = NULL
12546WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12547AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12548
12549# check null-3 success: 	1
12550DELETE FROM t1
12551WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
12552AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
12553
12554# check null-4 success: 	1
12555DELETE FROM t1
12556WHERE f_int1 = 0 AND f_int2 = 0
12557AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
12558AND f_charbig = '#NULL#';
12559INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12560SELECT f_int1, f_int1, '', '', 'was inserted'
12561   FROM t0_template source_tab
12562WHERE MOD(f_int1,3) = 0
12563AND f_int1 BETWEEN @max_row_div2 AND @max_row
12564ON DUPLICATE KEY
12565UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
12566f_int2 = 2 * @max_row + source_tab.f_int1,
12567f_charbig = 'was updated';
12568
12569# check unique-1-a success: 	1
12570
12571# check unique-1-b success: 	1
12572DELETE FROM t1 WHERE f_charbig = 'was inserted';
12573UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12574f_int2 = CAST(f_char1 AS SIGNED INT),
12575f_charbig = CONCAT('===',f_char1,'===')
12576WHERE f_charbig = 'was updated';
12577REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12578SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
12579   FROM t0_template source_tab
12580WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
12581
12582# check replace success: 	1
12583DELETE FROM t1
12584WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
12585DELETE FROM t1
12586WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
12587f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
12588UPDATE t1 SET f_int2 = f_int1,
12589f_char1 = CAST(f_int1 AS CHAR),
12590f_char2 = CAST(f_int1 AS CHAR),
12591f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
12592WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
12593SET AUTOCOMMIT= 0;
12594INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12595SELECT f_int1, f_int1, '', '', 'was inserted'
12596FROM t0_template source_tab
12597WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12598
12599# check transactions-1 success: 	1
12600COMMIT WORK;
12601
12602# check transactions-2 success: 	1
12603ROLLBACK WORK;
12604
12605# check transactions-3 success: 	1
12606DELETE FROM t1 WHERE f_charbig = 'was inserted';
12607COMMIT WORK;
12608ROLLBACK WORK;
12609
12610# check transactions-4 success: 	1
12611INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12612SELECT f_int1, f_int1, '', '', 'was inserted'
12613FROM t0_template source_tab
12614WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12615
12616# check transactions-5 success: 	1
12617ROLLBACK WORK;
12618
12619# check transactions-6 success: 	1
12620# INFO: Storage engine used for t1 seems to be transactional.
12621COMMIT;
12622
12623# check transactions-7 success: 	1
12624DELETE FROM t1 WHERE f_charbig = 'was inserted';
12625COMMIT WORK;
12626SET @@session.sql_mode = 'traditional';
12627Warnings:
12628Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12629SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
12630INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12631SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
12632'', '', 'was inserted' FROM t0_template
12633WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
12634ERROR 22012: Division by 0
12635COMMIT;
12636
12637# check transactions-8 success: 	1
12638# INFO: Storage engine used for t1 seems to be able to revert
12639#       changes made by the failing statement.
12640SET @@session.sql_mode = '';
12641Warnings:
12642Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
12643SET AUTOCOMMIT= 1;
12644DELETE FROM t1 WHERE f_charbig = 'was inserted';
12645COMMIT WORK;
12646UPDATE t1 SET f_charbig = REPEAT('b', 1000);
12647
12648# check special-1 success: 	1
12649UPDATE t1 SET f_charbig = '';
12650
12651# check special-2 success: 	1
12652UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
12653INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12654SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
12655WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12656INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12657SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12658'just inserted' FROM t0_template
12659WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12660CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
12661BEGIN
12662UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12663f_charbig = 'updated by trigger'
12664      WHERE f_int1 = new.f_int1;
12665END|
12666INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12667SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12668WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12669
12670# check trigger-1 success: 	1
12671DROP TRIGGER trg_1;
12672UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12673f_int2 = CAST(f_char1 AS SIGNED INT),
12674f_charbig = 'just inserted'
12675   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12676DELETE FROM t0_aux
12677WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12678INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12679SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12680'just inserted' FROM t0_template
12681WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12682CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
12683BEGIN
12684UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12685f_charbig = 'updated by trigger'
12686      WHERE f_int1 = new.f_int1;
12687END|
12688INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12689SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
12690WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12691
12692# check trigger-2 success: 	1
12693DROP TRIGGER trg_1;
12694UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12695f_int2 = CAST(f_char1 AS SIGNED INT),
12696f_charbig = 'just inserted'
12697   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12698DELETE FROM t0_aux
12699WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12700INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12701SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12702'just inserted' FROM t0_template
12703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12704CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12705BEGIN
12706UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12707f_charbig = 'updated by trigger'
12708      WHERE f_int1 = new.f_int1;
12709END|
12710UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12711WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12712
12713# check trigger-3 success: 	1
12714DROP TRIGGER trg_1;
12715UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12716f_int2 = CAST(f_char1 AS SIGNED INT),
12717f_charbig = 'just inserted'
12718   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12719DELETE FROM t0_aux
12720WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12721INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12722SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12723'just inserted' FROM t0_template
12724WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12725CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
12726BEGIN
12727UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12728f_charbig = 'updated by trigger'
12729      WHERE f_int1 = - old.f_int1;
12730END|
12731UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12732WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12733
12734# check trigger-4 success: 	1
12735DROP TRIGGER trg_1;
12736UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12737f_int2 = CAST(f_char1 AS SIGNED INT),
12738f_charbig = 'just inserted'
12739   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12740DELETE FROM t0_aux
12741WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12742INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12743SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12744'just inserted' FROM t0_template
12745WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12746CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12747BEGIN
12748UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12749f_charbig = 'updated by trigger'
12750      WHERE f_int1 = new.f_int1;
12751END|
12752UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12753WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12754
12755# check trigger-5 success: 	1
12756DROP TRIGGER trg_1;
12757UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12758f_int2 = CAST(f_char1 AS SIGNED INT),
12759f_charbig = 'just inserted'
12760   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12761DELETE FROM t0_aux
12762WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12763INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12764SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12765'just inserted' FROM t0_template
12766WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12767CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
12768BEGIN
12769UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12770f_charbig = 'updated by trigger'
12771      WHERE f_int1 = - old.f_int1;
12772END|
12773UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
12774WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12775
12776# check trigger-6 success: 	1
12777DROP TRIGGER trg_1;
12778UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12779f_int2 = CAST(f_char1 AS SIGNED INT),
12780f_charbig = 'just inserted'
12781   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12782DELETE FROM t0_aux
12783WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12784INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12785SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12786'just inserted' FROM t0_template
12787WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12788CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
12789BEGIN
12790UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12791f_charbig = 'updated by trigger'
12792      WHERE f_int1 = - old.f_int1;
12793END|
12794DELETE FROM t0_aux
12795WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12796
12797# check trigger-7 success: 	1
12798DROP TRIGGER trg_1;
12799UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12800f_int2 = CAST(f_char1 AS SIGNED INT),
12801f_charbig = 'just inserted'
12802   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12803DELETE FROM t0_aux
12804WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12805INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
12806SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
12807'just inserted' FROM t0_template
12808WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12809CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
12810BEGIN
12811UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
12812f_charbig = 'updated by trigger'
12813      WHERE f_int1 = - old.f_int1;
12814END|
12815DELETE FROM t0_aux
12816WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
12817
12818# check trigger-8 success: 	1
12819DROP TRIGGER trg_1;
12820UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12821f_int2 = CAST(f_char1 AS SIGNED INT),
12822f_charbig = 'just inserted'
12823   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
12824DELETE FROM t0_aux
12825WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12826DELETE FROM t1
12827WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
12828CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12829BEGIN
12830SET new.f_int1 = old.f_int1 + @max_row,
12831new.f_int2 = old.f_int2 - @max_row,
12832new.f_charbig = '####updated per update trigger####';
12833END|
12834UPDATE t1
12835SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12836f_charbig = '####updated per update statement itself####';
12837
12838# check trigger-9 success: 	1
12839DROP TRIGGER trg_2;
12840UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12841f_int2 = CAST(f_char1 AS SIGNED INT),
12842f_charbig = CONCAT('===',f_char1,'===');
12843CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
12844BEGIN
12845SET new.f_int1 = new.f_int1 + @max_row,
12846new.f_int2 = new.f_int2 - @max_row,
12847new.f_charbig = '####updated per update trigger####';
12848END|
12849UPDATE t1
12850SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
12851f_charbig = '####updated per update statement itself####';
12852
12853# check trigger-10 success: 	1
12854DROP TRIGGER trg_2;
12855UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
12856f_int2 = CAST(f_char1 AS SIGNED INT),
12857f_charbig = CONCAT('===',f_char1,'===');
12858CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12859BEGIN
12860SET new.f_int1 = @my_max1 + @counter,
12861new.f_int2 = @my_min2 - @counter,
12862new.f_charbig = '####updated per insert trigger####';
12863SET @counter = @counter + 1;
12864END|
12865SET @counter = 1;
12866SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12867INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12868SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12869CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12870WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12871ORDER BY f_int1;
12872DROP TRIGGER trg_3;
12873
12874# check trigger-11 success: 	1
12875DELETE FROM t1
12876WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12877AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12878AND f_charbig = '####updated per insert trigger####';
12879CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
12880BEGIN
12881SET new.f_int1 = @my_max1 + @counter,
12882new.f_int2 = @my_min2 - @counter,
12883new.f_charbig = '####updated per insert trigger####';
12884SET @counter = @counter + 1;
12885END|
12886SET @counter = 1;
12887SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
12888INSERT INTO t1 (f_char1, f_char2, f_charbig)
12889SELECT CAST(f_int1 AS CHAR),
12890CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
12891WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
12892ORDER BY f_int1;
12893DROP TRIGGER trg_3;
12894
12895# check trigger-12 success: 	1
12896DELETE FROM t1
12897WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
12898AND f_int2 <> CAST(f_char1 AS SIGNED INT)
12899AND f_charbig = '####updated per insert trigger####';
12900ANALYZE  TABLE t1;
12901Table	Op	Msg_type	Msg_text
12902test.t1	analyze	status	OK
12903CHECK    TABLE t1 EXTENDED;
12904Table	Op	Msg_type	Msg_text
12905test.t1	check	status	OK
12906CHECKSUM TABLE t1 EXTENDED;
12907Table	Checksum
12908test.t1	<some_value>
12909OPTIMIZE TABLE t1;
12910Table	Op	Msg_type	Msg_text
12911test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
12912test.t1	optimize	status	OK
12913# check layout success:    1
12914REPAIR   TABLE t1 EXTENDED;
12915Table	Op	Msg_type	Msg_text
12916test.t1	repair	status	OK
12917# check layout success:    1
12918TRUNCATE t1;
12919
12920# check TRUNCATE success: 	1
12921# check layout success:    1
12922# End usability test (inc/partition_check.inc)
12923DROP TABLE t1;
12924CREATE TABLE t1 (
12925f_int1 INTEGER,
12926f_int2 INTEGER,
12927f_char1 CHAR(20),
12928f_char2 CHAR(20),
12929f_charbig VARCHAR(1000)
12930, UNIQUE INDEX uidx (f_int1,f_int2)
12931)
12932PARTITION BY LIST(MOD(f_int1 + f_int2,4))
12933(PARTITION part_3 VALUES IN (-3),
12934PARTITION part_2 VALUES IN (-2),
12935PARTITION part_1 VALUES IN (-1),
12936PARTITION part_N VALUES IN (NULL),
12937PARTITION part0 VALUES IN (0),
12938PARTITION part1 VALUES IN (1),
12939PARTITION part2 VALUES IN (2),
12940PARTITION part3 VALUES IN (3));
12941INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12942SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12943WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
12944ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
12945INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
12946SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
12947WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
12948# Start usability test (inc/partition_check.inc)
12949create_command
12950SHOW CREATE TABLE t1;
12951Table	Create Table
12952t1	CREATE TABLE `t1` (
12953  `f_int1` bigint(20) DEFAULT NULL,
12954  `f_int2` bigint(20) DEFAULT NULL,
12955  `f_char1` char(20) DEFAULT NULL,
12956  `f_char2` char(20) DEFAULT NULL,
12957  `f_charbig` varchar(1000) DEFAULT NULL,
12958  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
12959) ENGINE=InnoDB DEFAULT CHARSET=latin1
12960/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
12961(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
12962 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
12963 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
12964 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
12965 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
12966 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
12967 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
12968 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
12969
12970# check prerequisites-1 success:    1
12971# check COUNT(*) success:    1
12972# check MIN/MAX(f_int1) success:    1
12973# check MIN/MAX(f_int2) success:    1
12974INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12975SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
12976CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
12977WHERE f_int1 IN (2,3);
12978ERROR 23000: Duplicate entry '2-2' for key 'uidx'
12979# check prerequisites-3 success:    1
12980# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
12981INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12982SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12983CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12984WHERE f_int1 IN (2,3);
12985DELETE FROM t1 WHERE f_charbig = 'delete me';
12986INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
12987SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
12988CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
12989WHERE f_int1 IN (2,3);
12990DELETE FROM t1 WHERE f_charbig = 'delete me';
12991# check read via f_int1 success: 1
12992# check read via f_int2 success: 1
12993
12994# check multiple-1 success: 	1
12995DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
12996
12997# check multiple-2 success: 	1
12998INSERT INTO t1 SELECT * FROM t0_template
12999WHERE MOD(f_int1,3) = 0;
13000
13001# check multiple-3 success: 	1
13002UPDATE t1 SET f_int1 = f_int1 + @max_row
13003WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13004AND @max_row_div2 + @max_row_div4;
13005
13006# check multiple-4 success: 	1
13007DELETE FROM t1
13008WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13009AND @max_row_div2 + @max_row_div4 + @max_row;
13010
13011# check multiple-5 success: 	1
13012SELECT COUNT(*) INTO @try_count FROM t0_template
13013WHERE MOD(f_int1,3) = 0
13014AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13015SELECT COUNT(*) INTO @clash_count
13016FROM t1 INNER JOIN t0_template USING(f_int1)
13017WHERE MOD(f_int1,3) = 0
13018AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13019SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13020INSERT INTO t1
13021SET f_int1 = @cur_value , f_int2 = @cur_value,
13022f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13023f_charbig = '#SINGLE#';
13024
13025# check single-1 success: 	1
13026SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13027INSERT INTO t1
13028SET f_int1 = @cur_value , f_int2 = @cur_value,
13029f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13030f_charbig = '#SINGLE#';
13031
13032# check single-2 success: 	1
13033SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13034SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13035UPDATE t1 SET f_int1 = @cur_value2
13036WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13037
13038# check single-3 success: 	1
13039SET @cur_value1= -1;
13040SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13041UPDATE t1 SET f_int1 = @cur_value1
13042WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13043
13044# check single-4 success: 	1
13045SELECT MAX(f_int1) INTO @cur_value FROM t1;
13046DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13047
13048# check single-5 success: 	1
13049DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13050
13051# check single-6 success: 	1
13052INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13053
13054# check single-7 success: 	1
13055DELETE FROM t1 WHERE f_charbig = '#2147483647##';
13056DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13057INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13058f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13059f_charbig = '#NULL#';
13060INSERT INTO t1
13061SET f_int1 = NULL , f_int2 = -@max_row,
13062f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13063f_charbig = '#NULL#';
13064# check null success:    1
13065
13066# check null-1 success: 	1
13067UPDATE t1 SET f_int1 = -@max_row
13068WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13069AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13070
13071# check null-2 success: 	1
13072UPDATE t1 SET f_int1 = NULL
13073WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13074AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13075
13076# check null-3 success: 	1
13077DELETE FROM t1
13078WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13079AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13080
13081# check null-4 success: 	1
13082DELETE FROM t1
13083WHERE f_int1 = 0 AND f_int2 = 0
13084AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13085AND f_charbig = '#NULL#';
13086INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13087SELECT f_int1, f_int1, '', '', 'was inserted'
13088   FROM t0_template source_tab
13089WHERE MOD(f_int1,3) = 0
13090AND f_int1 BETWEEN @max_row_div2 AND @max_row
13091ON DUPLICATE KEY
13092UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13093f_int2 = 2 * @max_row + source_tab.f_int1,
13094f_charbig = 'was updated';
13095
13096# check unique-1-a success: 	1
13097
13098# check unique-1-b success: 	1
13099DELETE FROM t1 WHERE f_charbig = 'was inserted';
13100UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13101f_int2 = CAST(f_char1 AS SIGNED INT),
13102f_charbig = CONCAT('===',f_char1,'===')
13103WHERE f_charbig = 'was updated';
13104REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13105SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13106   FROM t0_template source_tab
13107WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13108
13109# check replace success: 	1
13110DELETE FROM t1
13111WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13112DELETE FROM t1
13113WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13114f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13115UPDATE t1 SET f_int2 = f_int1,
13116f_char1 = CAST(f_int1 AS CHAR),
13117f_char2 = CAST(f_int1 AS CHAR),
13118f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13119WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13120SET AUTOCOMMIT= 0;
13121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13122SELECT f_int1, f_int1, '', '', 'was inserted'
13123FROM t0_template source_tab
13124WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13125
13126# check transactions-1 success: 	1
13127COMMIT WORK;
13128
13129# check transactions-2 success: 	1
13130ROLLBACK WORK;
13131
13132# check transactions-3 success: 	1
13133DELETE FROM t1 WHERE f_charbig = 'was inserted';
13134COMMIT WORK;
13135ROLLBACK WORK;
13136
13137# check transactions-4 success: 	1
13138INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13139SELECT f_int1, f_int1, '', '', 'was inserted'
13140FROM t0_template source_tab
13141WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13142
13143# check transactions-5 success: 	1
13144ROLLBACK WORK;
13145
13146# check transactions-6 success: 	1
13147# INFO: Storage engine used for t1 seems to be transactional.
13148COMMIT;
13149
13150# check transactions-7 success: 	1
13151DELETE FROM t1 WHERE f_charbig = 'was inserted';
13152COMMIT WORK;
13153SET @@session.sql_mode = 'traditional';
13154Warnings:
13155Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13156SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13157INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13158SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13159'', '', 'was inserted' FROM t0_template
13160WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13161ERROR 22012: Division by 0
13162COMMIT;
13163
13164# check transactions-8 success: 	1
13165# INFO: Storage engine used for t1 seems to be able to revert
13166#       changes made by the failing statement.
13167SET @@session.sql_mode = '';
13168Warnings:
13169Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13170SET AUTOCOMMIT= 1;
13171DELETE FROM t1 WHERE f_charbig = 'was inserted';
13172COMMIT WORK;
13173UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13174
13175# check special-1 success: 	1
13176UPDATE t1 SET f_charbig = '';
13177
13178# check special-2 success: 	1
13179UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13180INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13181SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13182WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13183INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13184SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13185'just inserted' FROM t0_template
13186WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13187CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13188BEGIN
13189UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13190f_charbig = 'updated by trigger'
13191      WHERE f_int1 = new.f_int1;
13192END|
13193INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13194SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13195WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13196
13197# check trigger-1 success: 	1
13198DROP TRIGGER trg_1;
13199UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13200f_int2 = CAST(f_char1 AS SIGNED INT),
13201f_charbig = 'just inserted'
13202   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13203DELETE FROM t0_aux
13204WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13205INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13206SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13207'just inserted' FROM t0_template
13208WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13209CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13210BEGIN
13211UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13212f_charbig = 'updated by trigger'
13213      WHERE f_int1 = new.f_int1;
13214END|
13215INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13216SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13217WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13218
13219# check trigger-2 success: 	1
13220DROP TRIGGER trg_1;
13221UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13222f_int2 = CAST(f_char1 AS SIGNED INT),
13223f_charbig = 'just inserted'
13224   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13225DELETE FROM t0_aux
13226WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13227INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13228SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13229'just inserted' FROM t0_template
13230WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13231CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13232BEGIN
13233UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13234f_charbig = 'updated by trigger'
13235      WHERE f_int1 = new.f_int1;
13236END|
13237UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13238WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13239
13240# check trigger-3 success: 	1
13241DROP TRIGGER trg_1;
13242UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13243f_int2 = CAST(f_char1 AS SIGNED INT),
13244f_charbig = 'just inserted'
13245   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13246DELETE FROM t0_aux
13247WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13248INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13249SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13250'just inserted' FROM t0_template
13251WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13252CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13253BEGIN
13254UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13255f_charbig = 'updated by trigger'
13256      WHERE f_int1 = - old.f_int1;
13257END|
13258UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13259WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13260
13261# check trigger-4 success: 	1
13262DROP TRIGGER trg_1;
13263UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13264f_int2 = CAST(f_char1 AS SIGNED INT),
13265f_charbig = 'just inserted'
13266   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13267DELETE FROM t0_aux
13268WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13269INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13270SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13271'just inserted' FROM t0_template
13272WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13273CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13274BEGIN
13275UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13276f_charbig = 'updated by trigger'
13277      WHERE f_int1 = new.f_int1;
13278END|
13279UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13280WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13281
13282# check trigger-5 success: 	1
13283DROP TRIGGER trg_1;
13284UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13285f_int2 = CAST(f_char1 AS SIGNED INT),
13286f_charbig = 'just inserted'
13287   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13288DELETE FROM t0_aux
13289WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13290INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13291SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13292'just inserted' FROM t0_template
13293WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13294CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13295BEGIN
13296UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13297f_charbig = 'updated by trigger'
13298      WHERE f_int1 = - old.f_int1;
13299END|
13300UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13301WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13302
13303# check trigger-6 success: 	1
13304DROP TRIGGER trg_1;
13305UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13306f_int2 = CAST(f_char1 AS SIGNED INT),
13307f_charbig = 'just inserted'
13308   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13309DELETE FROM t0_aux
13310WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13311INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13312SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13313'just inserted' FROM t0_template
13314WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13315CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13316BEGIN
13317UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13318f_charbig = 'updated by trigger'
13319      WHERE f_int1 = - old.f_int1;
13320END|
13321DELETE FROM t0_aux
13322WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13323
13324# check trigger-7 success: 	1
13325DROP TRIGGER trg_1;
13326UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13327f_int2 = CAST(f_char1 AS SIGNED INT),
13328f_charbig = 'just inserted'
13329   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13330DELETE FROM t0_aux
13331WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13332INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13333SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13334'just inserted' FROM t0_template
13335WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13336CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13337BEGIN
13338UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13339f_charbig = 'updated by trigger'
13340      WHERE f_int1 = - old.f_int1;
13341END|
13342DELETE FROM t0_aux
13343WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13344
13345# check trigger-8 success: 	1
13346DROP TRIGGER trg_1;
13347UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13348f_int2 = CAST(f_char1 AS SIGNED INT),
13349f_charbig = 'just inserted'
13350   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13351DELETE FROM t0_aux
13352WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13353DELETE FROM t1
13354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13355CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13356BEGIN
13357SET new.f_int1 = old.f_int1 + @max_row,
13358new.f_int2 = old.f_int2 - @max_row,
13359new.f_charbig = '####updated per update trigger####';
13360END|
13361UPDATE t1
13362SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13363f_charbig = '####updated per update statement itself####';
13364
13365# check trigger-9 success: 	1
13366DROP TRIGGER trg_2;
13367UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13368f_int2 = CAST(f_char1 AS SIGNED INT),
13369f_charbig = CONCAT('===',f_char1,'===');
13370CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13371BEGIN
13372SET new.f_int1 = new.f_int1 + @max_row,
13373new.f_int2 = new.f_int2 - @max_row,
13374new.f_charbig = '####updated per update trigger####';
13375END|
13376UPDATE t1
13377SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13378f_charbig = '####updated per update statement itself####';
13379
13380# check trigger-10 success: 	1
13381DROP TRIGGER trg_2;
13382UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13383f_int2 = CAST(f_char1 AS SIGNED INT),
13384f_charbig = CONCAT('===',f_char1,'===');
13385CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13386BEGIN
13387SET new.f_int1 = @my_max1 + @counter,
13388new.f_int2 = @my_min2 - @counter,
13389new.f_charbig = '####updated per insert trigger####';
13390SET @counter = @counter + 1;
13391END|
13392SET @counter = 1;
13393SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13394INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13395SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13396CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13397WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13398ORDER BY f_int1;
13399DROP TRIGGER trg_3;
13400
13401# check trigger-11 success: 	1
13402DELETE FROM t1
13403WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13404AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13405AND f_charbig = '####updated per insert trigger####';
13406CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13407BEGIN
13408SET new.f_int1 = @my_max1 + @counter,
13409new.f_int2 = @my_min2 - @counter,
13410new.f_charbig = '####updated per insert trigger####';
13411SET @counter = @counter + 1;
13412END|
13413SET @counter = 1;
13414SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13415INSERT INTO t1 (f_char1, f_char2, f_charbig)
13416SELECT CAST(f_int1 AS CHAR),
13417CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13418WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13419ORDER BY f_int1;
13420DROP TRIGGER trg_3;
13421
13422# check trigger-12 success: 	1
13423DELETE FROM t1
13424WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13425AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13426AND f_charbig = '####updated per insert trigger####';
13427ANALYZE  TABLE t1;
13428Table	Op	Msg_type	Msg_text
13429test.t1	analyze	status	OK
13430CHECK    TABLE t1 EXTENDED;
13431Table	Op	Msg_type	Msg_text
13432test.t1	check	status	OK
13433CHECKSUM TABLE t1 EXTENDED;
13434Table	Checksum
13435test.t1	<some_value>
13436OPTIMIZE TABLE t1;
13437Table	Op	Msg_type	Msg_text
13438test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13439test.t1	optimize	status	OK
13440# check layout success:    1
13441REPAIR   TABLE t1 EXTENDED;
13442Table	Op	Msg_type	Msg_text
13443test.t1	repair	status	OK
13444# check layout success:    1
13445TRUNCATE t1;
13446
13447# check TRUNCATE success: 	1
13448# check layout success:    1
13449# End usability test (inc/partition_check.inc)
13450DROP TABLE t1;
13451CREATE TABLE t1 (
13452f_int1 INTEGER,
13453f_int2 INTEGER,
13454f_char1 CHAR(20),
13455f_char2 CHAR(20),
13456f_charbig VARCHAR(1000)
13457, UNIQUE INDEX uidx (f_int1,f_int2)
13458)
13459PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
13460(PARTITION parta VALUES LESS THAN (0),
13461PARTITION partb VALUES LESS THAN (5),
13462PARTITION partc VALUES LESS THAN (10),
13463PARTITION partd VALUES LESS THAN (10 + 5),
13464PARTITION parte VALUES LESS THAN (20),
13465PARTITION partf VALUES LESS THAN (2147483646));
13466INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13467SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13468WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13469ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
13470INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13471SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13472WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13473# Start usability test (inc/partition_check.inc)
13474create_command
13475SHOW CREATE TABLE t1;
13476Table	Create Table
13477t1	CREATE TABLE `t1` (
13478  `f_int1` bigint(20) DEFAULT NULL,
13479  `f_int2` bigint(20) DEFAULT NULL,
13480  `f_char1` char(20) DEFAULT NULL,
13481  `f_char2` char(20) DEFAULT NULL,
13482  `f_charbig` varchar(1000) DEFAULT NULL,
13483  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
13484) ENGINE=InnoDB DEFAULT CHARSET=latin1
13485/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
13486(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
13487 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
13488 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
13489 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
13490 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
13491 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
13492
13493# check prerequisites-1 success:    1
13494# check COUNT(*) success:    1
13495# check MIN/MAX(f_int1) success:    1
13496# check MIN/MAX(f_int2) success:    1
13497INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13498SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13499CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
13500WHERE f_int1 IN (2,3);
13501ERROR 23000: Duplicate entry '2-2' for key 'uidx'
13502# check prerequisites-3 success:    1
13503# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
13504INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13505SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13506CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13507WHERE f_int1 IN (2,3);
13508DELETE FROM t1 WHERE f_charbig = 'delete me';
13509INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13510SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
13511CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
13512WHERE f_int1 IN (2,3);
13513DELETE FROM t1 WHERE f_charbig = 'delete me';
13514# check read via f_int1 success: 1
13515# check read via f_int2 success: 1
13516
13517# check multiple-1 success: 	1
13518DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
13519
13520# check multiple-2 success: 	1
13521INSERT INTO t1 SELECT * FROM t0_template
13522WHERE MOD(f_int1,3) = 0;
13523
13524# check multiple-3 success: 	1
13525UPDATE t1 SET f_int1 = f_int1 + @max_row
13526WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
13527AND @max_row_div2 + @max_row_div4;
13528
13529# check multiple-4 success: 	1
13530DELETE FROM t1
13531WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
13532AND @max_row_div2 + @max_row_div4 + @max_row;
13533
13534# check multiple-5 success: 	1
13535SELECT COUNT(*) INTO @try_count FROM t0_template
13536WHERE MOD(f_int1,3) = 0
13537AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13538SELECT COUNT(*) INTO @clash_count
13539FROM t1 INNER JOIN t0_template USING(f_int1)
13540WHERE MOD(f_int1,3) = 0
13541AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13542SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
13543INSERT INTO t1
13544SET f_int1 = @cur_value , f_int2 = @cur_value,
13545f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13546f_charbig = '#SINGLE#';
13547
13548# check single-1 success: 	1
13549SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
13550INSERT INTO t1
13551SET f_int1 = @cur_value , f_int2 = @cur_value,
13552f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
13553f_charbig = '#SINGLE#';
13554
13555# check single-2 success: 	1
13556SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
13557SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
13558UPDATE t1 SET f_int1 = @cur_value2
13559WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
13560
13561# check single-3 success: 	1
13562SET @cur_value1= -1;
13563SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
13564UPDATE t1 SET f_int1 = @cur_value1
13565WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
13566
13567# check single-4 success: 	1
13568SELECT MAX(f_int1) INTO @cur_value FROM t1;
13569DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
13570
13571# check single-5 success: 	1
13572DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
13573
13574# check single-6 success: 	1
13575INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
13576ERROR HY000: Table has no partition for value 2147483647
13577DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
13578INSERT t1 SET f_int1 = 0 , f_int2 = 0,
13579f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
13580f_charbig = '#NULL#';
13581INSERT INTO t1
13582SET f_int1 = NULL , f_int2 = -@max_row,
13583f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
13584f_charbig = '#NULL#';
13585# check null success:    1
13586
13587# check null-1 success: 	1
13588UPDATE t1 SET f_int1 = -@max_row
13589WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13590AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13591
13592# check null-2 success: 	1
13593UPDATE t1 SET f_int1 = NULL
13594WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13595AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13596
13597# check null-3 success: 	1
13598DELETE FROM t1
13599WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
13600AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
13601
13602# check null-4 success: 	1
13603DELETE FROM t1
13604WHERE f_int1 = 0 AND f_int2 = 0
13605AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
13606AND f_charbig = '#NULL#';
13607INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13608SELECT f_int1, f_int1, '', '', 'was inserted'
13609   FROM t0_template source_tab
13610WHERE MOD(f_int1,3) = 0
13611AND f_int1 BETWEEN @max_row_div2 AND @max_row
13612ON DUPLICATE KEY
13613UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
13614f_int2 = 2 * @max_row + source_tab.f_int1,
13615f_charbig = 'was updated';
13616
13617# check unique-1-a success: 	1
13618
13619# check unique-1-b success: 	1
13620DELETE FROM t1 WHERE f_charbig = 'was inserted';
13621UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13622f_int2 = CAST(f_char1 AS SIGNED INT),
13623f_charbig = CONCAT('===',f_char1,'===')
13624WHERE f_charbig = 'was updated';
13625REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13626SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
13627   FROM t0_template source_tab
13628WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
13629
13630# check replace success: 	1
13631DELETE FROM t1
13632WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
13633DELETE FROM t1
13634WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
13635f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
13636UPDATE t1 SET f_int2 = f_int1,
13637f_char1 = CAST(f_int1 AS CHAR),
13638f_char2 = CAST(f_int1 AS CHAR),
13639f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
13640WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
13641SET AUTOCOMMIT= 0;
13642INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13643SELECT f_int1, f_int1, '', '', 'was inserted'
13644FROM t0_template source_tab
13645WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13646
13647# check transactions-1 success: 	1
13648COMMIT WORK;
13649
13650# check transactions-2 success: 	1
13651ROLLBACK WORK;
13652
13653# check transactions-3 success: 	1
13654DELETE FROM t1 WHERE f_charbig = 'was inserted';
13655COMMIT WORK;
13656ROLLBACK WORK;
13657
13658# check transactions-4 success: 	1
13659INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13660SELECT f_int1, f_int1, '', '', 'was inserted'
13661FROM t0_template source_tab
13662WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13663
13664# check transactions-5 success: 	1
13665ROLLBACK WORK;
13666
13667# check transactions-6 success: 	1
13668# INFO: Storage engine used for t1 seems to be transactional.
13669COMMIT;
13670
13671# check transactions-7 success: 	1
13672DELETE FROM t1 WHERE f_charbig = 'was inserted';
13673COMMIT WORK;
13674SET @@session.sql_mode = 'traditional';
13675Warnings:
13676Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13677SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
13678INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13679SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
13680'', '', 'was inserted' FROM t0_template
13681WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
13682ERROR 22012: Division by 0
13683COMMIT;
13684
13685# check transactions-8 success: 	1
13686# INFO: Storage engine used for t1 seems to be able to revert
13687#       changes made by the failing statement.
13688SET @@session.sql_mode = '';
13689Warnings:
13690Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
13691SET AUTOCOMMIT= 1;
13692DELETE FROM t1 WHERE f_charbig = 'was inserted';
13693COMMIT WORK;
13694UPDATE t1 SET f_charbig = REPEAT('b', 1000);
13695
13696# check special-1 success: 	1
13697UPDATE t1 SET f_charbig = '';
13698
13699# check special-2 success: 	1
13700UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
13701INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13702SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
13703WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13704INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13705SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13706'just inserted' FROM t0_template
13707WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13708CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
13709BEGIN
13710UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13711f_charbig = 'updated by trigger'
13712      WHERE f_int1 = new.f_int1;
13713END|
13714INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13715SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13716WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13717
13718# check trigger-1 success: 	1
13719DROP TRIGGER trg_1;
13720UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13721f_int2 = CAST(f_char1 AS SIGNED INT),
13722f_charbig = 'just inserted'
13723   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13724DELETE FROM t0_aux
13725WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13726INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13727SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13728'just inserted' FROM t0_template
13729WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13730CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
13731BEGIN
13732UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13733f_charbig = 'updated by trigger'
13734      WHERE f_int1 = new.f_int1;
13735END|
13736INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13737SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
13738WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13739
13740# check trigger-2 success: 	1
13741DROP TRIGGER trg_1;
13742UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13743f_int2 = CAST(f_char1 AS SIGNED INT),
13744f_charbig = 'just inserted'
13745   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13746DELETE FROM t0_aux
13747WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13748INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13749SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13750'just inserted' FROM t0_template
13751WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13752CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13753BEGIN
13754UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13755f_charbig = 'updated by trigger'
13756      WHERE f_int1 = new.f_int1;
13757END|
13758UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13759WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13760
13761# check trigger-3 success: 	1
13762DROP TRIGGER trg_1;
13763UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13764f_int2 = CAST(f_char1 AS SIGNED INT),
13765f_charbig = 'just inserted'
13766   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13767DELETE FROM t0_aux
13768WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13769INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13770SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13771'just inserted' FROM t0_template
13772WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13773CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
13774BEGIN
13775UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13776f_charbig = 'updated by trigger'
13777      WHERE f_int1 = - old.f_int1;
13778END|
13779UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13780WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13781
13782# check trigger-4 success: 	1
13783DROP TRIGGER trg_1;
13784UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13785f_int2 = CAST(f_char1 AS SIGNED INT),
13786f_charbig = 'just inserted'
13787   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13788DELETE FROM t0_aux
13789WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13790INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13791SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13792'just inserted' FROM t0_template
13793WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13794CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13795BEGIN
13796UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13797f_charbig = 'updated by trigger'
13798      WHERE f_int1 = new.f_int1;
13799END|
13800UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13801WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13802
13803# check trigger-5 success: 	1
13804DROP TRIGGER trg_1;
13805UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13806f_int2 = CAST(f_char1 AS SIGNED INT),
13807f_charbig = 'just inserted'
13808   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13809DELETE FROM t0_aux
13810WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13811INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13812SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13813'just inserted' FROM t0_template
13814WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13815CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
13816BEGIN
13817UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13818f_charbig = 'updated by trigger'
13819      WHERE f_int1 = - old.f_int1;
13820END|
13821UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
13822WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13823
13824# check trigger-6 success: 	1
13825DROP TRIGGER trg_1;
13826UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13827f_int2 = CAST(f_char1 AS SIGNED INT),
13828f_charbig = 'just inserted'
13829   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13830DELETE FROM t0_aux
13831WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13832INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13833SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13834'just inserted' FROM t0_template
13835WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13836CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
13837BEGIN
13838UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13839f_charbig = 'updated by trigger'
13840      WHERE f_int1 = - old.f_int1;
13841END|
13842DELETE FROM t0_aux
13843WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13844
13845# check trigger-7 success: 	1
13846DROP TRIGGER trg_1;
13847UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13848f_int2 = CAST(f_char1 AS SIGNED INT),
13849f_charbig = 'just inserted'
13850   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13851DELETE FROM t0_aux
13852WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13853INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
13854SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
13855'just inserted' FROM t0_template
13856WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13857CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
13858BEGIN
13859UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
13860f_charbig = 'updated by trigger'
13861      WHERE f_int1 = - old.f_int1;
13862END|
13863DELETE FROM t0_aux
13864WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
13865
13866# check trigger-8 success: 	1
13867DROP TRIGGER trg_1;
13868UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13869f_int2 = CAST(f_char1 AS SIGNED INT),
13870f_charbig = 'just inserted'
13871   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
13872DELETE FROM t0_aux
13873WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13874DELETE FROM t1
13875WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
13876CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13877BEGIN
13878SET new.f_int1 = old.f_int1 + @max_row,
13879new.f_int2 = old.f_int2 - @max_row,
13880new.f_charbig = '####updated per update trigger####';
13881END|
13882UPDATE t1
13883SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13884f_charbig = '####updated per update statement itself####';
13885
13886# check trigger-9 success: 	1
13887DROP TRIGGER trg_2;
13888UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13889f_int2 = CAST(f_char1 AS SIGNED INT),
13890f_charbig = CONCAT('===',f_char1,'===');
13891CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
13892BEGIN
13893SET new.f_int1 = new.f_int1 + @max_row,
13894new.f_int2 = new.f_int2 - @max_row,
13895new.f_charbig = '####updated per update trigger####';
13896END|
13897UPDATE t1
13898SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
13899f_charbig = '####updated per update statement itself####';
13900
13901# check trigger-10 success: 	1
13902DROP TRIGGER trg_2;
13903UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
13904f_int2 = CAST(f_char1 AS SIGNED INT),
13905f_charbig = CONCAT('===',f_char1,'===');
13906CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13907BEGIN
13908SET new.f_int1 = @my_max1 + @counter,
13909new.f_int2 = @my_min2 - @counter,
13910new.f_charbig = '####updated per insert trigger####';
13911SET @counter = @counter + 1;
13912END|
13913SET @counter = 1;
13914SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13915INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
13916SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
13917CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13918WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13919ORDER BY f_int1;
13920DROP TRIGGER trg_3;
13921
13922# check trigger-11 success: 	1
13923DELETE FROM t1
13924WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13925AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13926AND f_charbig = '####updated per insert trigger####';
13927CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
13928BEGIN
13929SET new.f_int1 = @my_max1 + @counter,
13930new.f_int2 = @my_min2 - @counter,
13931new.f_charbig = '####updated per insert trigger####';
13932SET @counter = @counter + 1;
13933END|
13934SET @counter = 1;
13935SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
13936INSERT INTO t1 (f_char1, f_char2, f_charbig)
13937SELECT CAST(f_int1 AS CHAR),
13938CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
13939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
13940ORDER BY f_int1;
13941DROP TRIGGER trg_3;
13942
13943# check trigger-12 success: 	1
13944DELETE FROM t1
13945WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
13946AND f_int2 <> CAST(f_char1 AS SIGNED INT)
13947AND f_charbig = '####updated per insert trigger####';
13948ANALYZE  TABLE t1;
13949Table	Op	Msg_type	Msg_text
13950test.t1	analyze	status	OK
13951CHECK    TABLE t1 EXTENDED;
13952Table	Op	Msg_type	Msg_text
13953test.t1	check	status	OK
13954CHECKSUM TABLE t1 EXTENDED;
13955Table	Checksum
13956test.t1	<some_value>
13957OPTIMIZE TABLE t1;
13958Table	Op	Msg_type	Msg_text
13959test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
13960test.t1	optimize	status	OK
13961# check layout success:    1
13962REPAIR   TABLE t1 EXTENDED;
13963Table	Op	Msg_type	Msg_text
13964test.t1	repair	status	OK
13965# check layout success:    1
13966TRUNCATE t1;
13967
13968# check TRUNCATE success: 	1
13969# check layout success:    1
13970# End usability test (inc/partition_check.inc)
13971DROP TABLE t1;
13972CREATE TABLE t1 (
13973f_int1 INTEGER,
13974f_int2 INTEGER,
13975f_char1 CHAR(20),
13976f_char2 CHAR(20),
13977f_charbig VARCHAR(1000)
13978, UNIQUE INDEX uidx (f_int1,f_int2)
13979)
13980PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
13981(PARTITION parta VALUES LESS THAN (0),
13982PARTITION partb VALUES LESS THAN (5),
13983PARTITION partc VALUES LESS THAN (10),
13984PARTITION partd VALUES LESS THAN (2147483646));
13985INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13986SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13987WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
13988ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
13989INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
13990SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
13991WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
13992# Start usability test (inc/partition_check.inc)
13993create_command
13994SHOW CREATE TABLE t1;
13995Table	Create Table
13996t1	CREATE TABLE `t1` (
13997  `f_int1` bigint(20) DEFAULT NULL,
13998  `f_int2` bigint(20) DEFAULT NULL,
13999  `f_char1` char(20) DEFAULT NULL,
14000  `f_char2` char(20) DEFAULT NULL,
14001  `f_charbig` varchar(1000) DEFAULT NULL,
14002  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
14003) ENGINE=InnoDB DEFAULT CHARSET=latin1
14004/*!50100 PARTITION BY RANGE (f_int1)
14005SUBPARTITION BY HASH (f_int2)
14006SUBPARTITIONS 2
14007(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
14008 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
14009 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
14010 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
14011
14012# check prerequisites-1 success:    1
14013# check COUNT(*) success:    1
14014# check MIN/MAX(f_int1) success:    1
14015# check MIN/MAX(f_int2) success:    1
14016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14017SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14018CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14019WHERE f_int1 IN (2,3);
14020ERROR 23000: Duplicate entry '2-2' for key 'uidx'
14021# check prerequisites-3 success:    1
14022# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14023INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14024SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14025CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14026WHERE f_int1 IN (2,3);
14027DELETE FROM t1 WHERE f_charbig = 'delete me';
14028INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14029SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14030CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14031WHERE f_int1 IN (2,3);
14032DELETE FROM t1 WHERE f_charbig = 'delete me';
14033# check read via f_int1 success: 1
14034# check read via f_int2 success: 1
14035
14036# check multiple-1 success: 	1
14037DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14038
14039# check multiple-2 success: 	1
14040INSERT INTO t1 SELECT * FROM t0_template
14041WHERE MOD(f_int1,3) = 0;
14042
14043# check multiple-3 success: 	1
14044UPDATE t1 SET f_int1 = f_int1 + @max_row
14045WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14046AND @max_row_div2 + @max_row_div4;
14047
14048# check multiple-4 success: 	1
14049DELETE FROM t1
14050WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14051AND @max_row_div2 + @max_row_div4 + @max_row;
14052
14053# check multiple-5 success: 	1
14054SELECT COUNT(*) INTO @try_count FROM t0_template
14055WHERE MOD(f_int1,3) = 0
14056AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14057SELECT COUNT(*) INTO @clash_count
14058FROM t1 INNER JOIN t0_template USING(f_int1)
14059WHERE MOD(f_int1,3) = 0
14060AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14061SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14062INSERT INTO t1
14063SET f_int1 = @cur_value , f_int2 = @cur_value,
14064f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14065f_charbig = '#SINGLE#';
14066
14067# check single-1 success: 	1
14068SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14069INSERT INTO t1
14070SET f_int1 = @cur_value , f_int2 = @cur_value,
14071f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14072f_charbig = '#SINGLE#';
14073
14074# check single-2 success: 	1
14075SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14076SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14077UPDATE t1 SET f_int1 = @cur_value2
14078WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14079
14080# check single-3 success: 	1
14081SET @cur_value1= -1;
14082SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14083UPDATE t1 SET f_int1 = @cur_value1
14084WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14085
14086# check single-4 success: 	1
14087SELECT MAX(f_int1) INTO @cur_value FROM t1;
14088DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14089
14090# check single-5 success: 	1
14091DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14092
14093# check single-6 success: 	1
14094INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14095ERROR HY000: Table has no partition for value 2147483647
14096DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14097INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14098f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14099f_charbig = '#NULL#';
14100INSERT INTO t1
14101SET f_int1 = NULL , f_int2 = -@max_row,
14102f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14103f_charbig = '#NULL#';
14104# check null success:    1
14105
14106# check null-1 success: 	1
14107UPDATE t1 SET f_int1 = -@max_row
14108WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14109AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14110
14111# check null-2 success: 	1
14112UPDATE t1 SET f_int1 = NULL
14113WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14114AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14115
14116# check null-3 success: 	1
14117DELETE FROM t1
14118WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14119AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14120
14121# check null-4 success: 	1
14122DELETE FROM t1
14123WHERE f_int1 = 0 AND f_int2 = 0
14124AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14125AND f_charbig = '#NULL#';
14126INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14127SELECT f_int1, f_int1, '', '', 'was inserted'
14128   FROM t0_template source_tab
14129WHERE MOD(f_int1,3) = 0
14130AND f_int1 BETWEEN @max_row_div2 AND @max_row
14131ON DUPLICATE KEY
14132UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14133f_int2 = 2 * @max_row + source_tab.f_int1,
14134f_charbig = 'was updated';
14135
14136# check unique-1-a success: 	1
14137
14138# check unique-1-b success: 	1
14139DELETE FROM t1 WHERE f_charbig = 'was inserted';
14140UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14141f_int2 = CAST(f_char1 AS SIGNED INT),
14142f_charbig = CONCAT('===',f_char1,'===')
14143WHERE f_charbig = 'was updated';
14144REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14145SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14146   FROM t0_template source_tab
14147WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14148
14149# check replace success: 	1
14150DELETE FROM t1
14151WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14152DELETE FROM t1
14153WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14154f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14155UPDATE t1 SET f_int2 = f_int1,
14156f_char1 = CAST(f_int1 AS CHAR),
14157f_char2 = CAST(f_int1 AS CHAR),
14158f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14159WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14160SET AUTOCOMMIT= 0;
14161INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14162SELECT f_int1, f_int1, '', '', 'was inserted'
14163FROM t0_template source_tab
14164WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14165
14166# check transactions-1 success: 	1
14167COMMIT WORK;
14168
14169# check transactions-2 success: 	1
14170ROLLBACK WORK;
14171
14172# check transactions-3 success: 	1
14173DELETE FROM t1 WHERE f_charbig = 'was inserted';
14174COMMIT WORK;
14175ROLLBACK WORK;
14176
14177# check transactions-4 success: 	1
14178INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14179SELECT f_int1, f_int1, '', '', 'was inserted'
14180FROM t0_template source_tab
14181WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14182
14183# check transactions-5 success: 	1
14184ROLLBACK WORK;
14185
14186# check transactions-6 success: 	1
14187# INFO: Storage engine used for t1 seems to be transactional.
14188COMMIT;
14189
14190# check transactions-7 success: 	1
14191DELETE FROM t1 WHERE f_charbig = 'was inserted';
14192COMMIT WORK;
14193SET @@session.sql_mode = 'traditional';
14194Warnings:
14195Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14196SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14197INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14198SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14199'', '', 'was inserted' FROM t0_template
14200WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14201ERROR 22012: Division by 0
14202COMMIT;
14203
14204# check transactions-8 success: 	1
14205# INFO: Storage engine used for t1 seems to be able to revert
14206#       changes made by the failing statement.
14207SET @@session.sql_mode = '';
14208Warnings:
14209Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14210SET AUTOCOMMIT= 1;
14211DELETE FROM t1 WHERE f_charbig = 'was inserted';
14212COMMIT WORK;
14213UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14214
14215# check special-1 success: 	1
14216UPDATE t1 SET f_charbig = '';
14217
14218# check special-2 success: 	1
14219UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14220INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14221SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14222WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14223INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14224SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14225'just inserted' FROM t0_template
14226WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14227CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14228BEGIN
14229UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14230f_charbig = 'updated by trigger'
14231      WHERE f_int1 = new.f_int1;
14232END|
14233INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14234SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14235WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14236
14237# check trigger-1 success: 	1
14238DROP TRIGGER trg_1;
14239UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14240f_int2 = CAST(f_char1 AS SIGNED INT),
14241f_charbig = 'just inserted'
14242   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14243DELETE FROM t0_aux
14244WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14245INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14246SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14247'just inserted' FROM t0_template
14248WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14249CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14250BEGIN
14251UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14252f_charbig = 'updated by trigger'
14253      WHERE f_int1 = new.f_int1;
14254END|
14255INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14256SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14257WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14258
14259# check trigger-2 success: 	1
14260DROP TRIGGER trg_1;
14261UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14262f_int2 = CAST(f_char1 AS SIGNED INT),
14263f_charbig = 'just inserted'
14264   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14265DELETE FROM t0_aux
14266WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14267INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14268SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14269'just inserted' FROM t0_template
14270WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14271CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14272BEGIN
14273UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14274f_charbig = 'updated by trigger'
14275      WHERE f_int1 = new.f_int1;
14276END|
14277UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14278WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14279
14280# check trigger-3 success: 	1
14281DROP TRIGGER trg_1;
14282UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14283f_int2 = CAST(f_char1 AS SIGNED INT),
14284f_charbig = 'just inserted'
14285   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14286DELETE FROM t0_aux
14287WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14288INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14289SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14290'just inserted' FROM t0_template
14291WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14292CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14293BEGIN
14294UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14295f_charbig = 'updated by trigger'
14296      WHERE f_int1 = - old.f_int1;
14297END|
14298UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14299WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14300
14301# check trigger-4 success: 	1
14302DROP TRIGGER trg_1;
14303UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14304f_int2 = CAST(f_char1 AS SIGNED INT),
14305f_charbig = 'just inserted'
14306   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14307DELETE FROM t0_aux
14308WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14309INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14310SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14311'just inserted' FROM t0_template
14312WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14313CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14314BEGIN
14315UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14316f_charbig = 'updated by trigger'
14317      WHERE f_int1 = new.f_int1;
14318END|
14319UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14320WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14321
14322# check trigger-5 success: 	1
14323DROP TRIGGER trg_1;
14324UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14325f_int2 = CAST(f_char1 AS SIGNED INT),
14326f_charbig = 'just inserted'
14327   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14328DELETE FROM t0_aux
14329WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14330INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14331SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14332'just inserted' FROM t0_template
14333WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14334CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14335BEGIN
14336UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14337f_charbig = 'updated by trigger'
14338      WHERE f_int1 = - old.f_int1;
14339END|
14340UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14341WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14342
14343# check trigger-6 success: 	1
14344DROP TRIGGER trg_1;
14345UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14346f_int2 = CAST(f_char1 AS SIGNED INT),
14347f_charbig = 'just inserted'
14348   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14349DELETE FROM t0_aux
14350WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14351INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14352SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14353'just inserted' FROM t0_template
14354WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14355CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14356BEGIN
14357UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14358f_charbig = 'updated by trigger'
14359      WHERE f_int1 = - old.f_int1;
14360END|
14361DELETE FROM t0_aux
14362WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14363
14364# check trigger-7 success: 	1
14365DROP TRIGGER trg_1;
14366UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14367f_int2 = CAST(f_char1 AS SIGNED INT),
14368f_charbig = 'just inserted'
14369   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14370DELETE FROM t0_aux
14371WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14372INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14373SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14374'just inserted' FROM t0_template
14375WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14376CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14377BEGIN
14378UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14379f_charbig = 'updated by trigger'
14380      WHERE f_int1 = - old.f_int1;
14381END|
14382DELETE FROM t0_aux
14383WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14384
14385# check trigger-8 success: 	1
14386DROP TRIGGER trg_1;
14387UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14388f_int2 = CAST(f_char1 AS SIGNED INT),
14389f_charbig = 'just inserted'
14390   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14391DELETE FROM t0_aux
14392WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14393DELETE FROM t1
14394WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14395CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14396BEGIN
14397SET new.f_int1 = old.f_int1 + @max_row,
14398new.f_int2 = old.f_int2 - @max_row,
14399new.f_charbig = '####updated per update trigger####';
14400END|
14401UPDATE t1
14402SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14403f_charbig = '####updated per update statement itself####';
14404
14405# check trigger-9 success: 	1
14406DROP TRIGGER trg_2;
14407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14408f_int2 = CAST(f_char1 AS SIGNED INT),
14409f_charbig = CONCAT('===',f_char1,'===');
14410CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14411BEGIN
14412SET new.f_int1 = new.f_int1 + @max_row,
14413new.f_int2 = new.f_int2 - @max_row,
14414new.f_charbig = '####updated per update trigger####';
14415END|
14416UPDATE t1
14417SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14418f_charbig = '####updated per update statement itself####';
14419
14420# check trigger-10 success: 	1
14421DROP TRIGGER trg_2;
14422UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14423f_int2 = CAST(f_char1 AS SIGNED INT),
14424f_charbig = CONCAT('===',f_char1,'===');
14425CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14426BEGIN
14427SET new.f_int1 = @my_max1 + @counter,
14428new.f_int2 = @my_min2 - @counter,
14429new.f_charbig = '####updated per insert trigger####';
14430SET @counter = @counter + 1;
14431END|
14432SET @counter = 1;
14433SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14434INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14435SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14436CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14438ORDER BY f_int1;
14439DROP TRIGGER trg_3;
14440
14441# check trigger-11 success: 	1
14442DELETE FROM t1
14443WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14444AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14445AND f_charbig = '####updated per insert trigger####';
14446CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14447BEGIN
14448SET new.f_int1 = @my_max1 + @counter,
14449new.f_int2 = @my_min2 - @counter,
14450new.f_charbig = '####updated per insert trigger####';
14451SET @counter = @counter + 1;
14452END|
14453SET @counter = 1;
14454SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14455INSERT INTO t1 (f_char1, f_char2, f_charbig)
14456SELECT CAST(f_int1 AS CHAR),
14457CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14459ORDER BY f_int1;
14460DROP TRIGGER trg_3;
14461
14462# check trigger-12 success: 	1
14463DELETE FROM t1
14464WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14465AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14466AND f_charbig = '####updated per insert trigger####';
14467ANALYZE  TABLE t1;
14468Table	Op	Msg_type	Msg_text
14469test.t1	analyze	status	OK
14470CHECK    TABLE t1 EXTENDED;
14471Table	Op	Msg_type	Msg_text
14472test.t1	check	status	OK
14473CHECKSUM TABLE t1 EXTENDED;
14474Table	Checksum
14475test.t1	<some_value>
14476OPTIMIZE TABLE t1;
14477Table	Op	Msg_type	Msg_text
14478test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
14479test.t1	optimize	status	OK
14480# check layout success:    1
14481REPAIR   TABLE t1 EXTENDED;
14482Table	Op	Msg_type	Msg_text
14483test.t1	repair	status	OK
14484# check layout success:    1
14485TRUNCATE t1;
14486
14487# check TRUNCATE success: 	1
14488# check layout success:    1
14489# End usability test (inc/partition_check.inc)
14490DROP TABLE t1;
14491CREATE TABLE t1 (
14492f_int1 INTEGER,
14493f_int2 INTEGER,
14494f_char1 CHAR(20),
14495f_char2 CHAR(20),
14496f_charbig VARCHAR(1000)
14497, UNIQUE INDEX uidx (f_int1,f_int2)
14498)
14499PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
14500(PARTITION part1 VALUES LESS THAN (0)
14501(SUBPARTITION subpart11, SUBPARTITION subpart12),
14502PARTITION part2 VALUES LESS THAN (5)
14503(SUBPARTITION subpart21, SUBPARTITION subpart22),
14504PARTITION part3 VALUES LESS THAN (10)
14505(SUBPARTITION subpart31, SUBPARTITION subpart32),
14506PARTITION part4 VALUES LESS THAN (2147483646)
14507(SUBPARTITION subpart41, SUBPARTITION subpart42));
14508INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14509SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14510WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
14511ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
14512INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14513SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
14514WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
14515# Start usability test (inc/partition_check.inc)
14516create_command
14517SHOW CREATE TABLE t1;
14518Table	Create Table
14519t1	CREATE TABLE `t1` (
14520  `f_int1` bigint(20) DEFAULT NULL,
14521  `f_int2` bigint(20) DEFAULT NULL,
14522  `f_char1` char(20) DEFAULT NULL,
14523  `f_char2` char(20) DEFAULT NULL,
14524  `f_charbig` varchar(1000) DEFAULT NULL,
14525  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
14526) ENGINE=InnoDB DEFAULT CHARSET=latin1
14527/*!50100 PARTITION BY RANGE (f_int1)
14528SUBPARTITION BY KEY (f_int2)
14529(PARTITION part1 VALUES LESS THAN (0)
14530 (SUBPARTITION subpart11 ENGINE = InnoDB,
14531  SUBPARTITION subpart12 ENGINE = InnoDB),
14532 PARTITION part2 VALUES LESS THAN (5)
14533 (SUBPARTITION subpart21 ENGINE = InnoDB,
14534  SUBPARTITION subpart22 ENGINE = InnoDB),
14535 PARTITION part3 VALUES LESS THAN (10)
14536 (SUBPARTITION subpart31 ENGINE = InnoDB,
14537  SUBPARTITION subpart32 ENGINE = InnoDB),
14538 PARTITION part4 VALUES LESS THAN (2147483646)
14539 (SUBPARTITION subpart41 ENGINE = InnoDB,
14540  SUBPARTITION subpart42 ENGINE = InnoDB)) */
14541
14542# check prerequisites-1 success:    1
14543# check COUNT(*) success:    1
14544# check MIN/MAX(f_int1) success:    1
14545# check MIN/MAX(f_int2) success:    1
14546INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14547SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14548CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
14549WHERE f_int1 IN (2,3);
14550ERROR 23000: Duplicate entry '2-2' for key 'uidx'
14551# check prerequisites-3 success:    1
14552# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
14553INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14554SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14555CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14556WHERE f_int1 IN (2,3);
14557DELETE FROM t1 WHERE f_charbig = 'delete me';
14558INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14559SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
14560CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
14561WHERE f_int1 IN (2,3);
14562DELETE FROM t1 WHERE f_charbig = 'delete me';
14563# check read via f_int1 success: 1
14564# check read via f_int2 success: 1
14565
14566# check multiple-1 success: 	1
14567DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
14568
14569# check multiple-2 success: 	1
14570INSERT INTO t1 SELECT * FROM t0_template
14571WHERE MOD(f_int1,3) = 0;
14572
14573# check multiple-3 success: 	1
14574UPDATE t1 SET f_int1 = f_int1 + @max_row
14575WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
14576AND @max_row_div2 + @max_row_div4;
14577
14578# check multiple-4 success: 	1
14579DELETE FROM t1
14580WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
14581AND @max_row_div2 + @max_row_div4 + @max_row;
14582
14583# check multiple-5 success: 	1
14584SELECT COUNT(*) INTO @try_count FROM t0_template
14585WHERE MOD(f_int1,3) = 0
14586AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14587SELECT COUNT(*) INTO @clash_count
14588FROM t1 INNER JOIN t0_template USING(f_int1)
14589WHERE MOD(f_int1,3) = 0
14590AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14591SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
14592INSERT INTO t1
14593SET f_int1 = @cur_value , f_int2 = @cur_value,
14594f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14595f_charbig = '#SINGLE#';
14596
14597# check single-1 success: 	1
14598SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
14599INSERT INTO t1
14600SET f_int1 = @cur_value , f_int2 = @cur_value,
14601f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
14602f_charbig = '#SINGLE#';
14603
14604# check single-2 success: 	1
14605SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
14606SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
14607UPDATE t1 SET f_int1 = @cur_value2
14608WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
14609
14610# check single-3 success: 	1
14611SET @cur_value1= -1;
14612SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
14613UPDATE t1 SET f_int1 = @cur_value1
14614WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
14615
14616# check single-4 success: 	1
14617SELECT MAX(f_int1) INTO @cur_value FROM t1;
14618DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
14619
14620# check single-5 success: 	1
14621DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
14622
14623# check single-6 success: 	1
14624INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
14625ERROR HY000: Table has no partition for value 2147483647
14626DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
14627INSERT t1 SET f_int1 = 0 , f_int2 = 0,
14628f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
14629f_charbig = '#NULL#';
14630INSERT INTO t1
14631SET f_int1 = NULL , f_int2 = -@max_row,
14632f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
14633f_charbig = '#NULL#';
14634# check null success:    1
14635
14636# check null-1 success: 	1
14637UPDATE t1 SET f_int1 = -@max_row
14638WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14639AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14640
14641# check null-2 success: 	1
14642UPDATE t1 SET f_int1 = NULL
14643WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14644AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14645
14646# check null-3 success: 	1
14647DELETE FROM t1
14648WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
14649AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
14650
14651# check null-4 success: 	1
14652DELETE FROM t1
14653WHERE f_int1 = 0 AND f_int2 = 0
14654AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
14655AND f_charbig = '#NULL#';
14656INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14657SELECT f_int1, f_int1, '', '', 'was inserted'
14658   FROM t0_template source_tab
14659WHERE MOD(f_int1,3) = 0
14660AND f_int1 BETWEEN @max_row_div2 AND @max_row
14661ON DUPLICATE KEY
14662UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
14663f_int2 = 2 * @max_row + source_tab.f_int1,
14664f_charbig = 'was updated';
14665
14666# check unique-1-a success: 	1
14667
14668# check unique-1-b success: 	1
14669DELETE FROM t1 WHERE f_charbig = 'was inserted';
14670UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14671f_int2 = CAST(f_char1 AS SIGNED INT),
14672f_charbig = CONCAT('===',f_char1,'===')
14673WHERE f_charbig = 'was updated';
14674REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14675SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
14676   FROM t0_template source_tab
14677WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
14678
14679# check replace success: 	1
14680DELETE FROM t1
14681WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
14682DELETE FROM t1
14683WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
14684f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
14685UPDATE t1 SET f_int2 = f_int1,
14686f_char1 = CAST(f_int1 AS CHAR),
14687f_char2 = CAST(f_int1 AS CHAR),
14688f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
14689WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
14690SET AUTOCOMMIT= 0;
14691INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14692SELECT f_int1, f_int1, '', '', 'was inserted'
14693FROM t0_template source_tab
14694WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14695
14696# check transactions-1 success: 	1
14697COMMIT WORK;
14698
14699# check transactions-2 success: 	1
14700ROLLBACK WORK;
14701
14702# check transactions-3 success: 	1
14703DELETE FROM t1 WHERE f_charbig = 'was inserted';
14704COMMIT WORK;
14705ROLLBACK WORK;
14706
14707# check transactions-4 success: 	1
14708INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14709SELECT f_int1, f_int1, '', '', 'was inserted'
14710FROM t0_template source_tab
14711WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14712
14713# check transactions-5 success: 	1
14714ROLLBACK WORK;
14715
14716# check transactions-6 success: 	1
14717# INFO: Storage engine used for t1 seems to be transactional.
14718COMMIT;
14719
14720# check transactions-7 success: 	1
14721DELETE FROM t1 WHERE f_charbig = 'was inserted';
14722COMMIT WORK;
14723SET @@session.sql_mode = 'traditional';
14724Warnings:
14725Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14726SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
14727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14728SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
14729'', '', 'was inserted' FROM t0_template
14730WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
14731ERROR 22012: Division by 0
14732COMMIT;
14733
14734# check transactions-8 success: 	1
14735# INFO: Storage engine used for t1 seems to be able to revert
14736#       changes made by the failing statement.
14737SET @@session.sql_mode = '';
14738Warnings:
14739Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
14740SET AUTOCOMMIT= 1;
14741DELETE FROM t1 WHERE f_charbig = 'was inserted';
14742COMMIT WORK;
14743UPDATE t1 SET f_charbig = REPEAT('b', 1000);
14744
14745# check special-1 success: 	1
14746UPDATE t1 SET f_charbig = '';
14747
14748# check special-2 success: 	1
14749UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
14750INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
14751SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
14752WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14753INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14754SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14755'just inserted' FROM t0_template
14756WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14757CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
14758BEGIN
14759UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14760f_charbig = 'updated by trigger'
14761      WHERE f_int1 = new.f_int1;
14762END|
14763INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14764SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14765WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14766
14767# check trigger-1 success: 	1
14768DROP TRIGGER trg_1;
14769UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14770f_int2 = CAST(f_char1 AS SIGNED INT),
14771f_charbig = 'just inserted'
14772   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14773DELETE FROM t0_aux
14774WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14775INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14776SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14777'just inserted' FROM t0_template
14778WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14779CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
14780BEGIN
14781UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14782f_charbig = 'updated by trigger'
14783      WHERE f_int1 = new.f_int1;
14784END|
14785INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14786SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
14787WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14788
14789# check trigger-2 success: 	1
14790DROP TRIGGER trg_1;
14791UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14792f_int2 = CAST(f_char1 AS SIGNED INT),
14793f_charbig = 'just inserted'
14794   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14795DELETE FROM t0_aux
14796WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14797INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14798SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14799'just inserted' FROM t0_template
14800WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14801CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14802BEGIN
14803UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14804f_charbig = 'updated by trigger'
14805      WHERE f_int1 = new.f_int1;
14806END|
14807UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14808WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14809
14810# check trigger-3 success: 	1
14811DROP TRIGGER trg_1;
14812UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14813f_int2 = CAST(f_char1 AS SIGNED INT),
14814f_charbig = 'just inserted'
14815   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14816DELETE FROM t0_aux
14817WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14818INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14819SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14820'just inserted' FROM t0_template
14821WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14822CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
14823BEGIN
14824UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14825f_charbig = 'updated by trigger'
14826      WHERE f_int1 = - old.f_int1;
14827END|
14828UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14829WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14830
14831# check trigger-4 success: 	1
14832DROP TRIGGER trg_1;
14833UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14834f_int2 = CAST(f_char1 AS SIGNED INT),
14835f_charbig = 'just inserted'
14836   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14837DELETE FROM t0_aux
14838WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14839INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14840SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14841'just inserted' FROM t0_template
14842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14843CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14844BEGIN
14845UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14846f_charbig = 'updated by trigger'
14847      WHERE f_int1 = new.f_int1;
14848END|
14849UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14850WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14851
14852# check trigger-5 success: 	1
14853DROP TRIGGER trg_1;
14854UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14855f_int2 = CAST(f_char1 AS SIGNED INT),
14856f_charbig = 'just inserted'
14857   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14858DELETE FROM t0_aux
14859WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14860INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14861SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14862'just inserted' FROM t0_template
14863WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14864CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
14865BEGIN
14866UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14867f_charbig = 'updated by trigger'
14868      WHERE f_int1 = - old.f_int1;
14869END|
14870UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
14871WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14872
14873# check trigger-6 success: 	1
14874DROP TRIGGER trg_1;
14875UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14876f_int2 = CAST(f_char1 AS SIGNED INT),
14877f_charbig = 'just inserted'
14878   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14879DELETE FROM t0_aux
14880WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14881INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14882SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14883'just inserted' FROM t0_template
14884WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14885CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
14886BEGIN
14887UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14888f_charbig = 'updated by trigger'
14889      WHERE f_int1 = - old.f_int1;
14890END|
14891DELETE FROM t0_aux
14892WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14893
14894# check trigger-7 success: 	1
14895DROP TRIGGER trg_1;
14896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14897f_int2 = CAST(f_char1 AS SIGNED INT),
14898f_charbig = 'just inserted'
14899   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14900DELETE FROM t0_aux
14901WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14902INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
14903SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
14904'just inserted' FROM t0_template
14905WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14906CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
14907BEGIN
14908UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
14909f_charbig = 'updated by trigger'
14910      WHERE f_int1 = - old.f_int1;
14911END|
14912DELETE FROM t0_aux
14913WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
14914
14915# check trigger-8 success: 	1
14916DROP TRIGGER trg_1;
14917UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14918f_int2 = CAST(f_char1 AS SIGNED INT),
14919f_charbig = 'just inserted'
14920   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
14921DELETE FROM t0_aux
14922WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14923DELETE FROM t1
14924WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
14925CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14926BEGIN
14927SET new.f_int1 = old.f_int1 + @max_row,
14928new.f_int2 = old.f_int2 - @max_row,
14929new.f_charbig = '####updated per update trigger####';
14930END|
14931UPDATE t1
14932SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14933f_charbig = '####updated per update statement itself####';
14934
14935# check trigger-9 success: 	1
14936DROP TRIGGER trg_2;
14937UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14938f_int2 = CAST(f_char1 AS SIGNED INT),
14939f_charbig = CONCAT('===',f_char1,'===');
14940CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
14941BEGIN
14942SET new.f_int1 = new.f_int1 + @max_row,
14943new.f_int2 = new.f_int2 - @max_row,
14944new.f_charbig = '####updated per update trigger####';
14945END|
14946UPDATE t1
14947SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
14948f_charbig = '####updated per update statement itself####';
14949
14950# check trigger-10 success: 	1
14951DROP TRIGGER trg_2;
14952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
14953f_int2 = CAST(f_char1 AS SIGNED INT),
14954f_charbig = CONCAT('===',f_char1,'===');
14955CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14956BEGIN
14957SET new.f_int1 = @my_max1 + @counter,
14958new.f_int2 = @my_min2 - @counter,
14959new.f_charbig = '####updated per insert trigger####';
14960SET @counter = @counter + 1;
14961END|
14962SET @counter = 1;
14963SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14964INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
14965SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
14966CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14967WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14968ORDER BY f_int1;
14969DROP TRIGGER trg_3;
14970
14971# check trigger-11 success: 	1
14972DELETE FROM t1
14973WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14974AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14975AND f_charbig = '####updated per insert trigger####';
14976CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
14977BEGIN
14978SET new.f_int1 = @my_max1 + @counter,
14979new.f_int2 = @my_min2 - @counter,
14980new.f_charbig = '####updated per insert trigger####';
14981SET @counter = @counter + 1;
14982END|
14983SET @counter = 1;
14984SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
14985INSERT INTO t1 (f_char1, f_char2, f_charbig)
14986SELECT CAST(f_int1 AS CHAR),
14987CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
14988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
14989ORDER BY f_int1;
14990DROP TRIGGER trg_3;
14991
14992# check trigger-12 success: 	1
14993DELETE FROM t1
14994WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
14995AND f_int2 <> CAST(f_char1 AS SIGNED INT)
14996AND f_charbig = '####updated per insert trigger####';
14997ANALYZE  TABLE t1;
14998Table	Op	Msg_type	Msg_text
14999test.t1	analyze	status	OK
15000CHECK    TABLE t1 EXTENDED;
15001Table	Op	Msg_type	Msg_text
15002test.t1	check	status	OK
15003CHECKSUM TABLE t1 EXTENDED;
15004Table	Checksum
15005test.t1	<some_value>
15006OPTIMIZE TABLE t1;
15007Table	Op	Msg_type	Msg_text
15008test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15009test.t1	optimize	status	OK
15010# check layout success:    1
15011REPAIR   TABLE t1 EXTENDED;
15012Table	Op	Msg_type	Msg_text
15013test.t1	repair	status	OK
15014# check layout success:    1
15015TRUNCATE t1;
15016
15017# check TRUNCATE success: 	1
15018# check layout success:    1
15019# End usability test (inc/partition_check.inc)
15020DROP TABLE t1;
15021CREATE TABLE t1 (
15022f_int1 INTEGER,
15023f_int2 INTEGER,
15024f_char1 CHAR(20),
15025f_char2 CHAR(20),
15026f_charbig VARCHAR(1000)
15027, UNIQUE INDEX uidx (f_int1,f_int2)
15028)
15029PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
15030(PARTITION part1 VALUES IN (0)
15031(SUBPARTITION sp11, SUBPARTITION sp12),
15032PARTITION part2 VALUES IN (1)
15033(SUBPARTITION sp21, SUBPARTITION sp22),
15034PARTITION part3 VALUES IN (2)
15035(SUBPARTITION sp31, SUBPARTITION sp32),
15036PARTITION part4 VALUES IN (NULL)
15037(SUBPARTITION sp41, SUBPARTITION sp42));
15038INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15039SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15040WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15041ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
15042INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15043SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15044WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15045# Start usability test (inc/partition_check.inc)
15046create_command
15047SHOW CREATE TABLE t1;
15048Table	Create Table
15049t1	CREATE TABLE `t1` (
15050  `f_int1` bigint(20) DEFAULT NULL,
15051  `f_int2` bigint(20) DEFAULT NULL,
15052  `f_char1` char(20) DEFAULT NULL,
15053  `f_char2` char(20) DEFAULT NULL,
15054  `f_charbig` varchar(1000) DEFAULT NULL,
15055  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
15056) ENGINE=InnoDB DEFAULT CHARSET=latin1
15057/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
15058SUBPARTITION BY HASH (f_int2 + 1)
15059(PARTITION part1 VALUES IN (0)
15060 (SUBPARTITION sp11 ENGINE = InnoDB,
15061  SUBPARTITION sp12 ENGINE = InnoDB),
15062 PARTITION part2 VALUES IN (1)
15063 (SUBPARTITION sp21 ENGINE = InnoDB,
15064  SUBPARTITION sp22 ENGINE = InnoDB),
15065 PARTITION part3 VALUES IN (2)
15066 (SUBPARTITION sp31 ENGINE = InnoDB,
15067  SUBPARTITION sp32 ENGINE = InnoDB),
15068 PARTITION part4 VALUES IN (NULL)
15069 (SUBPARTITION sp41 ENGINE = InnoDB,
15070  SUBPARTITION sp42 ENGINE = InnoDB)) */
15071
15072# check prerequisites-1 success:    1
15073# check COUNT(*) success:    1
15074# check MIN/MAX(f_int1) success:    1
15075# check MIN/MAX(f_int2) success:    1
15076INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15077SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15078CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15079WHERE f_int1 IN (2,3);
15080ERROR 23000: Duplicate entry '2-2' for key 'uidx'
15081# check prerequisites-3 success:    1
15082# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15083INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15084SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15085CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15086WHERE f_int1 IN (2,3);
15087DELETE FROM t1 WHERE f_charbig = 'delete me';
15088INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15089SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15090CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15091WHERE f_int1 IN (2,3);
15092DELETE FROM t1 WHERE f_charbig = 'delete me';
15093# check read via f_int1 success: 1
15094# check read via f_int2 success: 1
15095
15096# check multiple-1 success: 	1
15097DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15098
15099# check multiple-2 success: 	1
15100INSERT INTO t1 SELECT * FROM t0_template
15101WHERE MOD(f_int1,3) = 0;
15102
15103# check multiple-3 success: 	1
15104UPDATE t1 SET f_int1 = f_int1 + @max_row
15105WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15106AND @max_row_div2 + @max_row_div4;
15107
15108# check multiple-4 success: 	1
15109DELETE FROM t1
15110WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15111AND @max_row_div2 + @max_row_div4 + @max_row;
15112
15113# check multiple-5 success: 	1
15114SELECT COUNT(*) INTO @try_count FROM t0_template
15115WHERE MOD(f_int1,3) = 0
15116AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15117SELECT COUNT(*) INTO @clash_count
15118FROM t1 INNER JOIN t0_template USING(f_int1)
15119WHERE MOD(f_int1,3) = 0
15120AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15121SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15122INSERT INTO t1
15123SET f_int1 = @cur_value , f_int2 = @cur_value,
15124f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15125f_charbig = '#SINGLE#';
15126
15127# check single-1 success: 	1
15128SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15129INSERT INTO t1
15130SET f_int1 = @cur_value , f_int2 = @cur_value,
15131f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15132f_charbig = '#SINGLE#';
15133
15134# check single-2 success: 	1
15135SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15136SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15137UPDATE t1 SET f_int1 = @cur_value2
15138WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15139
15140# check single-3 success: 	1
15141SET @cur_value1= -1;
15142SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15143UPDATE t1 SET f_int1 = @cur_value1
15144WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15145
15146# check single-4 success: 	1
15147SELECT MAX(f_int1) INTO @cur_value FROM t1;
15148DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15149
15150# check single-5 success: 	1
15151DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15152
15153# check single-6 success: 	1
15154INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15155
15156# check single-7 success: 	1
15157DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15158DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15159INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15160f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15161f_charbig = '#NULL#';
15162INSERT INTO t1
15163SET f_int1 = NULL , f_int2 = -@max_row,
15164f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15165f_charbig = '#NULL#';
15166# check null success:    1
15167
15168# check null-1 success: 	1
15169UPDATE t1 SET f_int1 = -@max_row
15170WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15171AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15172
15173# check null-2 success: 	1
15174UPDATE t1 SET f_int1 = NULL
15175WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15176AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15177
15178# check null-3 success: 	1
15179DELETE FROM t1
15180WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15181AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15182
15183# check null-4 success: 	1
15184DELETE FROM t1
15185WHERE f_int1 = 0 AND f_int2 = 0
15186AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15187AND f_charbig = '#NULL#';
15188INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15189SELECT f_int1, f_int1, '', '', 'was inserted'
15190   FROM t0_template source_tab
15191WHERE MOD(f_int1,3) = 0
15192AND f_int1 BETWEEN @max_row_div2 AND @max_row
15193ON DUPLICATE KEY
15194UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15195f_int2 = 2 * @max_row + source_tab.f_int1,
15196f_charbig = 'was updated';
15197
15198# check unique-1-a success: 	1
15199
15200# check unique-1-b success: 	1
15201DELETE FROM t1 WHERE f_charbig = 'was inserted';
15202UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15203f_int2 = CAST(f_char1 AS SIGNED INT),
15204f_charbig = CONCAT('===',f_char1,'===')
15205WHERE f_charbig = 'was updated';
15206REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15207SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15208   FROM t0_template source_tab
15209WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15210
15211# check replace success: 	1
15212DELETE FROM t1
15213WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15214DELETE FROM t1
15215WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15216f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15217UPDATE t1 SET f_int2 = f_int1,
15218f_char1 = CAST(f_int1 AS CHAR),
15219f_char2 = CAST(f_int1 AS CHAR),
15220f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15221WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15222SET AUTOCOMMIT= 0;
15223INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15224SELECT f_int1, f_int1, '', '', 'was inserted'
15225FROM t0_template source_tab
15226WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15227
15228# check transactions-1 success: 	1
15229COMMIT WORK;
15230
15231# check transactions-2 success: 	1
15232ROLLBACK WORK;
15233
15234# check transactions-3 success: 	1
15235DELETE FROM t1 WHERE f_charbig = 'was inserted';
15236COMMIT WORK;
15237ROLLBACK WORK;
15238
15239# check transactions-4 success: 	1
15240INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15241SELECT f_int1, f_int1, '', '', 'was inserted'
15242FROM t0_template source_tab
15243WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15244
15245# check transactions-5 success: 	1
15246ROLLBACK WORK;
15247
15248# check transactions-6 success: 	1
15249# INFO: Storage engine used for t1 seems to be transactional.
15250COMMIT;
15251
15252# check transactions-7 success: 	1
15253DELETE FROM t1 WHERE f_charbig = 'was inserted';
15254COMMIT WORK;
15255SET @@session.sql_mode = 'traditional';
15256Warnings:
15257Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15258SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15259INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15260SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15261'', '', 'was inserted' FROM t0_template
15262WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15263ERROR 22012: Division by 0
15264COMMIT;
15265
15266# check transactions-8 success: 	1
15267# INFO: Storage engine used for t1 seems to be able to revert
15268#       changes made by the failing statement.
15269SET @@session.sql_mode = '';
15270Warnings:
15271Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15272SET AUTOCOMMIT= 1;
15273DELETE FROM t1 WHERE f_charbig = 'was inserted';
15274COMMIT WORK;
15275UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15276
15277# check special-1 success: 	1
15278UPDATE t1 SET f_charbig = '';
15279
15280# check special-2 success: 	1
15281UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15282INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15283SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15284WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15285INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15286SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15287'just inserted' FROM t0_template
15288WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15289CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15290BEGIN
15291UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15292f_charbig = 'updated by trigger'
15293      WHERE f_int1 = new.f_int1;
15294END|
15295INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15296SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15297WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15298
15299# check trigger-1 success: 	1
15300DROP TRIGGER trg_1;
15301UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15302f_int2 = CAST(f_char1 AS SIGNED INT),
15303f_charbig = 'just inserted'
15304   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15305DELETE FROM t0_aux
15306WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15307INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15308SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15309'just inserted' FROM t0_template
15310WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15311CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15312BEGIN
15313UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15314f_charbig = 'updated by trigger'
15315      WHERE f_int1 = new.f_int1;
15316END|
15317INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15318SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15319WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15320
15321# check trigger-2 success: 	1
15322DROP TRIGGER trg_1;
15323UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15324f_int2 = CAST(f_char1 AS SIGNED INT),
15325f_charbig = 'just inserted'
15326   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15327DELETE FROM t0_aux
15328WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15329INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15330SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15331'just inserted' FROM t0_template
15332WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15333CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15334BEGIN
15335UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15336f_charbig = 'updated by trigger'
15337      WHERE f_int1 = new.f_int1;
15338END|
15339UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15340WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15341
15342# check trigger-3 success: 	1
15343DROP TRIGGER trg_1;
15344UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15345f_int2 = CAST(f_char1 AS SIGNED INT),
15346f_charbig = 'just inserted'
15347   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15348DELETE FROM t0_aux
15349WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15351SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15352'just inserted' FROM t0_template
15353WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15354CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15355BEGIN
15356UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15357f_charbig = 'updated by trigger'
15358      WHERE f_int1 = - old.f_int1;
15359END|
15360UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15361WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15362
15363# check trigger-4 success: 	1
15364DROP TRIGGER trg_1;
15365UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15366f_int2 = CAST(f_char1 AS SIGNED INT),
15367f_charbig = 'just inserted'
15368   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15369DELETE FROM t0_aux
15370WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15371INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15372SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15373'just inserted' FROM t0_template
15374WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15375CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15376BEGIN
15377UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15378f_charbig = 'updated by trigger'
15379      WHERE f_int1 = new.f_int1;
15380END|
15381UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15382WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15383
15384# check trigger-5 success: 	1
15385DROP TRIGGER trg_1;
15386UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15387f_int2 = CAST(f_char1 AS SIGNED INT),
15388f_charbig = 'just inserted'
15389   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15390DELETE FROM t0_aux
15391WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15392INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15393SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15394'just inserted' FROM t0_template
15395WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15396CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15397BEGIN
15398UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15399f_charbig = 'updated by trigger'
15400      WHERE f_int1 = - old.f_int1;
15401END|
15402UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15403WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15404
15405# check trigger-6 success: 	1
15406DROP TRIGGER trg_1;
15407UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15408f_int2 = CAST(f_char1 AS SIGNED INT),
15409f_charbig = 'just inserted'
15410   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15411DELETE FROM t0_aux
15412WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15413INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15414SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15415'just inserted' FROM t0_template
15416WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15417CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15418BEGIN
15419UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15420f_charbig = 'updated by trigger'
15421      WHERE f_int1 = - old.f_int1;
15422END|
15423DELETE FROM t0_aux
15424WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15425
15426# check trigger-7 success: 	1
15427DROP TRIGGER trg_1;
15428UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15429f_int2 = CAST(f_char1 AS SIGNED INT),
15430f_charbig = 'just inserted'
15431   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15432DELETE FROM t0_aux
15433WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15434INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15435SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15436'just inserted' FROM t0_template
15437WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15438CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15439BEGIN
15440UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15441f_charbig = 'updated by trigger'
15442      WHERE f_int1 = - old.f_int1;
15443END|
15444DELETE FROM t0_aux
15445WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15446
15447# check trigger-8 success: 	1
15448DROP TRIGGER trg_1;
15449UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15450f_int2 = CAST(f_char1 AS SIGNED INT),
15451f_charbig = 'just inserted'
15452   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15453DELETE FROM t0_aux
15454WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15455DELETE FROM t1
15456WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15457CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15458BEGIN
15459SET new.f_int1 = old.f_int1 + @max_row,
15460new.f_int2 = old.f_int2 - @max_row,
15461new.f_charbig = '####updated per update trigger####';
15462END|
15463UPDATE t1
15464SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15465f_charbig = '####updated per update statement itself####';
15466
15467# check trigger-9 success: 	1
15468DROP TRIGGER trg_2;
15469UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15470f_int2 = CAST(f_char1 AS SIGNED INT),
15471f_charbig = CONCAT('===',f_char1,'===');
15472CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15473BEGIN
15474SET new.f_int1 = new.f_int1 + @max_row,
15475new.f_int2 = new.f_int2 - @max_row,
15476new.f_charbig = '####updated per update trigger####';
15477END|
15478UPDATE t1
15479SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15480f_charbig = '####updated per update statement itself####';
15481
15482# check trigger-10 success: 	1
15483DROP TRIGGER trg_2;
15484UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15485f_int2 = CAST(f_char1 AS SIGNED INT),
15486f_charbig = CONCAT('===',f_char1,'===');
15487CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15488BEGIN
15489SET new.f_int1 = @my_max1 + @counter,
15490new.f_int2 = @my_min2 - @counter,
15491new.f_charbig = '####updated per insert trigger####';
15492SET @counter = @counter + 1;
15493END|
15494SET @counter = 1;
15495SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15496INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15497SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15498CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15499WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15500ORDER BY f_int1;
15501DROP TRIGGER trg_3;
15502
15503# check trigger-11 success: 	1
15504DELETE FROM t1
15505WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15506AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15507AND f_charbig = '####updated per insert trigger####';
15508CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
15509BEGIN
15510SET new.f_int1 = @my_max1 + @counter,
15511new.f_int2 = @my_min2 - @counter,
15512new.f_charbig = '####updated per insert trigger####';
15513SET @counter = @counter + 1;
15514END|
15515SET @counter = 1;
15516SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
15517INSERT INTO t1 (f_char1, f_char2, f_charbig)
15518SELECT CAST(f_int1 AS CHAR),
15519CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
15520WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
15521ORDER BY f_int1;
15522DROP TRIGGER trg_3;
15523
15524# check trigger-12 success: 	1
15525DELETE FROM t1
15526WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
15527AND f_int2 <> CAST(f_char1 AS SIGNED INT)
15528AND f_charbig = '####updated per insert trigger####';
15529ANALYZE  TABLE t1;
15530Table	Op	Msg_type	Msg_text
15531test.t1	analyze	status	OK
15532CHECK    TABLE t1 EXTENDED;
15533Table	Op	Msg_type	Msg_text
15534test.t1	check	status	OK
15535CHECKSUM TABLE t1 EXTENDED;
15536Table	Checksum
15537test.t1	<some_value>
15538OPTIMIZE TABLE t1;
15539Table	Op	Msg_type	Msg_text
15540test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
15541test.t1	optimize	status	OK
15542# check layout success:    1
15543REPAIR   TABLE t1 EXTENDED;
15544Table	Op	Msg_type	Msg_text
15545test.t1	repair	status	OK
15546# check layout success:    1
15547TRUNCATE t1;
15548
15549# check TRUNCATE success: 	1
15550# check layout success:    1
15551# End usability test (inc/partition_check.inc)
15552DROP TABLE t1;
15553CREATE TABLE t1 (
15554f_int1 INTEGER,
15555f_int2 INTEGER,
15556f_char1 CHAR(20),
15557f_char2 CHAR(20),
15558f_charbig VARCHAR(1000)
15559, UNIQUE INDEX uidx (f_int1,f_int2)
15560)
15561PARTITION BY LIST(ABS(MOD(f_int1,2)))
15562SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
15563(PARTITION part1 VALUES IN (0),
15564PARTITION part2 VALUES IN (1),
15565PARTITION part3 VALUES IN (NULL));
15566INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15567SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15568WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
15569ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
15570INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15571SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
15572WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
15573# Start usability test (inc/partition_check.inc)
15574create_command
15575SHOW CREATE TABLE t1;
15576Table	Create Table
15577t1	CREATE TABLE `t1` (
15578  `f_int1` bigint(20) DEFAULT NULL,
15579  `f_int2` bigint(20) DEFAULT NULL,
15580  `f_char1` char(20) DEFAULT NULL,
15581  `f_char2` char(20) DEFAULT NULL,
15582  `f_charbig` varchar(1000) DEFAULT NULL,
15583  UNIQUE KEY `uidx` (`f_int1`,`f_int2`)
15584) ENGINE=InnoDB DEFAULT CHARSET=latin1
15585/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
15586SUBPARTITION BY KEY (f_int2)
15587SUBPARTITIONS 3
15588(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
15589 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
15590 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
15591
15592# check prerequisites-1 success:    1
15593# check COUNT(*) success:    1
15594# check MIN/MAX(f_int1) success:    1
15595# check MIN/MAX(f_int2) success:    1
15596INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15597SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
15598CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
15599WHERE f_int1 IN (2,3);
15600ERROR 23000: Duplicate entry '2-2' for key 'uidx'
15601# check prerequisites-3 success:    1
15602# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
15603INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15604SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15605CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15606WHERE f_int1 IN (2,3);
15607DELETE FROM t1 WHERE f_charbig = 'delete me';
15608INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15609SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
15610CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
15611WHERE f_int1 IN (2,3);
15612DELETE FROM t1 WHERE f_charbig = 'delete me';
15613# check read via f_int1 success: 1
15614# check read via f_int2 success: 1
15615
15616# check multiple-1 success: 	1
15617DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
15618
15619# check multiple-2 success: 	1
15620INSERT INTO t1 SELECT * FROM t0_template
15621WHERE MOD(f_int1,3) = 0;
15622
15623# check multiple-3 success: 	1
15624UPDATE t1 SET f_int1 = f_int1 + @max_row
15625WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
15626AND @max_row_div2 + @max_row_div4;
15627
15628# check multiple-4 success: 	1
15629DELETE FROM t1
15630WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
15631AND @max_row_div2 + @max_row_div4 + @max_row;
15632
15633# check multiple-5 success: 	1
15634SELECT COUNT(*) INTO @try_count FROM t0_template
15635WHERE MOD(f_int1,3) = 0
15636AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15637SELECT COUNT(*) INTO @clash_count
15638FROM t1 INNER JOIN t0_template USING(f_int1)
15639WHERE MOD(f_int1,3) = 0
15640AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15641SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
15642INSERT INTO t1
15643SET f_int1 = @cur_value , f_int2 = @cur_value,
15644f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15645f_charbig = '#SINGLE#';
15646
15647# check single-1 success: 	1
15648SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
15649INSERT INTO t1
15650SET f_int1 = @cur_value , f_int2 = @cur_value,
15651f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
15652f_charbig = '#SINGLE#';
15653
15654# check single-2 success: 	1
15655SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
15656SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
15657UPDATE t1 SET f_int1 = @cur_value2
15658WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
15659
15660# check single-3 success: 	1
15661SET @cur_value1= -1;
15662SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
15663UPDATE t1 SET f_int1 = @cur_value1
15664WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
15665
15666# check single-4 success: 	1
15667SELECT MAX(f_int1) INTO @cur_value FROM t1;
15668DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
15669
15670# check single-5 success: 	1
15671DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
15672
15673# check single-6 success: 	1
15674INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
15675
15676# check single-7 success: 	1
15677DELETE FROM t1 WHERE f_charbig = '#2147483647##';
15678DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
15679INSERT t1 SET f_int1 = 0 , f_int2 = 0,
15680f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
15681f_charbig = '#NULL#';
15682INSERT INTO t1
15683SET f_int1 = NULL , f_int2 = -@max_row,
15684f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
15685f_charbig = '#NULL#';
15686# check null success:    1
15687
15688# check null-1 success: 	1
15689UPDATE t1 SET f_int1 = -@max_row
15690WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15691AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15692
15693# check null-2 success: 	1
15694UPDATE t1 SET f_int1 = NULL
15695WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15696AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15697
15698# check null-3 success: 	1
15699DELETE FROM t1
15700WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
15701AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
15702
15703# check null-4 success: 	1
15704DELETE FROM t1
15705WHERE f_int1 = 0 AND f_int2 = 0
15706AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
15707AND f_charbig = '#NULL#';
15708INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15709SELECT f_int1, f_int1, '', '', 'was inserted'
15710   FROM t0_template source_tab
15711WHERE MOD(f_int1,3) = 0
15712AND f_int1 BETWEEN @max_row_div2 AND @max_row
15713ON DUPLICATE KEY
15714UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
15715f_int2 = 2 * @max_row + source_tab.f_int1,
15716f_charbig = 'was updated';
15717
15718# check unique-1-a success: 	1
15719
15720# check unique-1-b success: 	1
15721DELETE FROM t1 WHERE f_charbig = 'was inserted';
15722UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15723f_int2 = CAST(f_char1 AS SIGNED INT),
15724f_charbig = CONCAT('===',f_char1,'===')
15725WHERE f_charbig = 'was updated';
15726REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15727SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
15728   FROM t0_template source_tab
15729WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
15730
15731# check replace success: 	1
15732DELETE FROM t1
15733WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
15734DELETE FROM t1
15735WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
15736f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
15737UPDATE t1 SET f_int2 = f_int1,
15738f_char1 = CAST(f_int1 AS CHAR),
15739f_char2 = CAST(f_int1 AS CHAR),
15740f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
15741WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
15742SET AUTOCOMMIT= 0;
15743INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15744SELECT f_int1, f_int1, '', '', 'was inserted'
15745FROM t0_template source_tab
15746WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15747
15748# check transactions-1 success: 	1
15749COMMIT WORK;
15750
15751# check transactions-2 success: 	1
15752ROLLBACK WORK;
15753
15754# check transactions-3 success: 	1
15755DELETE FROM t1 WHERE f_charbig = 'was inserted';
15756COMMIT WORK;
15757ROLLBACK WORK;
15758
15759# check transactions-4 success: 	1
15760INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15761SELECT f_int1, f_int1, '', '', 'was inserted'
15762FROM t0_template source_tab
15763WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15764
15765# check transactions-5 success: 	1
15766ROLLBACK WORK;
15767
15768# check transactions-6 success: 	1
15769# INFO: Storage engine used for t1 seems to be transactional.
15770COMMIT;
15771
15772# check transactions-7 success: 	1
15773DELETE FROM t1 WHERE f_charbig = 'was inserted';
15774COMMIT WORK;
15775SET @@session.sql_mode = 'traditional';
15776Warnings:
15777Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15778SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
15779INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
15780SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
15781'', '', 'was inserted' FROM t0_template
15782WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
15783ERROR 22012: Division by 0
15784COMMIT;
15785
15786# check transactions-8 success: 	1
15787# INFO: Storage engine used for t1 seems to be able to revert
15788#       changes made by the failing statement.
15789SET @@session.sql_mode = '';
15790Warnings:
15791Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
15792SET AUTOCOMMIT= 1;
15793DELETE FROM t1 WHERE f_charbig = 'was inserted';
15794COMMIT WORK;
15795UPDATE t1 SET f_charbig = REPEAT('b', 1000);
15796
15797# check special-1 success: 	1
15798UPDATE t1 SET f_charbig = '';
15799
15800# check special-2 success: 	1
15801UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
15802INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
15803SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
15804WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15805INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15806SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15807'just inserted' FROM t0_template
15808WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15809CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
15810BEGIN
15811UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15812f_charbig = 'updated by trigger'
15813      WHERE f_int1 = new.f_int1;
15814END|
15815INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15816SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15817WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15818
15819# check trigger-1 success: 	1
15820DROP TRIGGER trg_1;
15821UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15822f_int2 = CAST(f_char1 AS SIGNED INT),
15823f_charbig = 'just inserted'
15824   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15825DELETE FROM t0_aux
15826WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15827INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15828SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15829'just inserted' FROM t0_template
15830WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15831CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
15832BEGIN
15833UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15834f_charbig = 'updated by trigger'
15835      WHERE f_int1 = new.f_int1;
15836END|
15837INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15838SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
15839WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15840
15841# check trigger-2 success: 	1
15842DROP TRIGGER trg_1;
15843UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15844f_int2 = CAST(f_char1 AS SIGNED INT),
15845f_charbig = 'just inserted'
15846   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15847DELETE FROM t0_aux
15848WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15849INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15850SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15851'just inserted' FROM t0_template
15852WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15853CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15854BEGIN
15855UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15856f_charbig = 'updated by trigger'
15857      WHERE f_int1 = new.f_int1;
15858END|
15859UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15860WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15861
15862# check trigger-3 success: 	1
15863DROP TRIGGER trg_1;
15864UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15865f_int2 = CAST(f_char1 AS SIGNED INT),
15866f_charbig = 'just inserted'
15867   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15868DELETE FROM t0_aux
15869WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15870INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15871SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15872'just inserted' FROM t0_template
15873WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15874CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
15875BEGIN
15876UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15877f_charbig = 'updated by trigger'
15878      WHERE f_int1 = - old.f_int1;
15879END|
15880UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15881WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15882
15883# check trigger-4 success: 	1
15884DROP TRIGGER trg_1;
15885UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15886f_int2 = CAST(f_char1 AS SIGNED INT),
15887f_charbig = 'just inserted'
15888   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15889DELETE FROM t0_aux
15890WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15891INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15892SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15893'just inserted' FROM t0_template
15894WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15895CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15896BEGIN
15897UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15898f_charbig = 'updated by trigger'
15899      WHERE f_int1 = new.f_int1;
15900END|
15901UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15902WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15903
15904# check trigger-5 success: 	1
15905DROP TRIGGER trg_1;
15906UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15907f_int2 = CAST(f_char1 AS SIGNED INT),
15908f_charbig = 'just inserted'
15909   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15910DELETE FROM t0_aux
15911WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15912INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15913SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15914'just inserted' FROM t0_template
15915WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15916CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
15917BEGIN
15918UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15919f_charbig = 'updated by trigger'
15920      WHERE f_int1 = - old.f_int1;
15921END|
15922UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
15923WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15924
15925# check trigger-6 success: 	1
15926DROP TRIGGER trg_1;
15927UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15928f_int2 = CAST(f_char1 AS SIGNED INT),
15929f_charbig = 'just inserted'
15930   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15931DELETE FROM t0_aux
15932WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15933INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15934SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15935'just inserted' FROM t0_template
15936WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15937CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
15938BEGIN
15939UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15940f_charbig = 'updated by trigger'
15941      WHERE f_int1 = - old.f_int1;
15942END|
15943DELETE FROM t0_aux
15944WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15945
15946# check trigger-7 success: 	1
15947DROP TRIGGER trg_1;
15948UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15949f_int2 = CAST(f_char1 AS SIGNED INT),
15950f_charbig = 'just inserted'
15951   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15952DELETE FROM t0_aux
15953WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15954INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
15955SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
15956'just inserted' FROM t0_template
15957WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15958CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
15959BEGIN
15960UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
15961f_charbig = 'updated by trigger'
15962      WHERE f_int1 = - old.f_int1;
15963END|
15964DELETE FROM t0_aux
15965WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
15966
15967# check trigger-8 success: 	1
15968DROP TRIGGER trg_1;
15969UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15970f_int2 = CAST(f_char1 AS SIGNED INT),
15971f_charbig = 'just inserted'
15972   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
15973DELETE FROM t0_aux
15974WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15975DELETE FROM t1
15976WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
15977CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15978BEGIN
15979SET new.f_int1 = old.f_int1 + @max_row,
15980new.f_int2 = old.f_int2 - @max_row,
15981new.f_charbig = '####updated per update trigger####';
15982END|
15983UPDATE t1
15984SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
15985f_charbig = '####updated per update statement itself####';
15986
15987# check trigger-9 success: 	1
15988DROP TRIGGER trg_2;
15989UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
15990f_int2 = CAST(f_char1 AS SIGNED INT),
15991f_charbig = CONCAT('===',f_char1,'===');
15992CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
15993BEGIN
15994SET new.f_int1 = new.f_int1 + @max_row,
15995new.f_int2 = new.f_int2 - @max_row,
15996new.f_charbig = '####updated per update trigger####';
15997END|
15998UPDATE t1
15999SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16000f_charbig = '####updated per update statement itself####';
16001
16002# check trigger-10 success: 	1
16003DROP TRIGGER trg_2;
16004UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16005f_int2 = CAST(f_char1 AS SIGNED INT),
16006f_charbig = CONCAT('===',f_char1,'===');
16007CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16008BEGIN
16009SET new.f_int1 = @my_max1 + @counter,
16010new.f_int2 = @my_min2 - @counter,
16011new.f_charbig = '####updated per insert trigger####';
16012SET @counter = @counter + 1;
16013END|
16014SET @counter = 1;
16015SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16016INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16017SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16018CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16019WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16020ORDER BY f_int1;
16021DROP TRIGGER trg_3;
16022
16023# check trigger-11 success: 	1
16024DELETE FROM t1
16025WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16026AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16027AND f_charbig = '####updated per insert trigger####';
16028CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16029BEGIN
16030SET new.f_int1 = @my_max1 + @counter,
16031new.f_int2 = @my_min2 - @counter,
16032new.f_charbig = '####updated per insert trigger####';
16033SET @counter = @counter + 1;
16034END|
16035SET @counter = 1;
16036SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16037INSERT INTO t1 (f_char1, f_char2, f_charbig)
16038SELECT CAST(f_int1 AS CHAR),
16039CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16040WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16041ORDER BY f_int1;
16042DROP TRIGGER trg_3;
16043
16044# check trigger-12 success: 	1
16045DELETE FROM t1
16046WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16047AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16048AND f_charbig = '####updated per insert trigger####';
16049ANALYZE  TABLE t1;
16050Table	Op	Msg_type	Msg_text
16051test.t1	analyze	status	OK
16052CHECK    TABLE t1 EXTENDED;
16053Table	Op	Msg_type	Msg_text
16054test.t1	check	status	OK
16055CHECKSUM TABLE t1 EXTENDED;
16056Table	Checksum
16057test.t1	<some_value>
16058OPTIMIZE TABLE t1;
16059Table	Op	Msg_type	Msg_text
16060test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16061test.t1	optimize	status	OK
16062# check layout success:    1
16063REPAIR   TABLE t1 EXTENDED;
16064Table	Op	Msg_type	Msg_text
16065test.t1	repair	status	OK
16066# check layout success:    1
16067TRUNCATE t1;
16068
16069# check TRUNCATE success: 	1
16070# check layout success:    1
16071# End usability test (inc/partition_check.inc)
16072DROP TABLE t1;
16073DROP TABLE IF EXISTS t1;
16074CREATE TABLE t1 (
16075f_int1 INTEGER,
16076f_int2 INTEGER,
16077f_char1 CHAR(20),
16078f_char2 CHAR(20),
16079f_charbig VARCHAR(1000)
16080, UNIQUE INDEX uidx (f_int2,f_int1)
16081)
16082PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
16083INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16084SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16085WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16086ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
16087INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16088SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16089WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16090# Start usability test (inc/partition_check.inc)
16091create_command
16092SHOW CREATE TABLE t1;
16093Table	Create Table
16094t1	CREATE TABLE `t1` (
16095  `f_int1` bigint(20) DEFAULT NULL,
16096  `f_int2` bigint(20) DEFAULT NULL,
16097  `f_char1` char(20) DEFAULT NULL,
16098  `f_char2` char(20) DEFAULT NULL,
16099  `f_charbig` varchar(1000) DEFAULT NULL,
16100  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
16101) ENGINE=InnoDB DEFAULT CHARSET=latin1
16102/*!50100 PARTITION BY HASH (f_int1 + f_int2)
16103PARTITIONS 2 */
16104
16105# check prerequisites-1 success:    1
16106# check COUNT(*) success:    1
16107# check MIN/MAX(f_int1) success:    1
16108# check MIN/MAX(f_int2) success:    1
16109INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16110SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16111CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16112WHERE f_int1 IN (2,3);
16113ERROR 23000: Duplicate entry '2-2' for key 'uidx'
16114# check prerequisites-3 success:    1
16115# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16116INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16117SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16118CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16119WHERE f_int1 IN (2,3);
16120DELETE FROM t1 WHERE f_charbig = 'delete me';
16121INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16122SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16123CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16124WHERE f_int1 IN (2,3);
16125DELETE FROM t1 WHERE f_charbig = 'delete me';
16126# check read via f_int1 success: 1
16127# check read via f_int2 success: 1
16128
16129# check multiple-1 success: 	1
16130DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16131
16132# check multiple-2 success: 	1
16133INSERT INTO t1 SELECT * FROM t0_template
16134WHERE MOD(f_int1,3) = 0;
16135
16136# check multiple-3 success: 	1
16137UPDATE t1 SET f_int1 = f_int1 + @max_row
16138WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16139AND @max_row_div2 + @max_row_div4;
16140
16141# check multiple-4 success: 	1
16142DELETE FROM t1
16143WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16144AND @max_row_div2 + @max_row_div4 + @max_row;
16145
16146# check multiple-5 success: 	1
16147SELECT COUNT(*) INTO @try_count FROM t0_template
16148WHERE MOD(f_int1,3) = 0
16149AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16150SELECT COUNT(*) INTO @clash_count
16151FROM t1 INNER JOIN t0_template USING(f_int1)
16152WHERE MOD(f_int1,3) = 0
16153AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16154SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16155INSERT INTO t1
16156SET f_int1 = @cur_value , f_int2 = @cur_value,
16157f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16158f_charbig = '#SINGLE#';
16159
16160# check single-1 success: 	1
16161SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16162INSERT INTO t1
16163SET f_int1 = @cur_value , f_int2 = @cur_value,
16164f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16165f_charbig = '#SINGLE#';
16166
16167# check single-2 success: 	1
16168SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16169SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16170UPDATE t1 SET f_int1 = @cur_value2
16171WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16172
16173# check single-3 success: 	1
16174SET @cur_value1= -1;
16175SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16176UPDATE t1 SET f_int1 = @cur_value1
16177WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16178
16179# check single-4 success: 	1
16180SELECT MAX(f_int1) INTO @cur_value FROM t1;
16181DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16182
16183# check single-5 success: 	1
16184DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16185
16186# check single-6 success: 	1
16187INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16188
16189# check single-7 success: 	1
16190DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16191DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16192INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16193f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16194f_charbig = '#NULL#';
16195INSERT INTO t1
16196SET f_int1 = NULL , f_int2 = -@max_row,
16197f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16198f_charbig = '#NULL#';
16199# check null success:    1
16200
16201# check null-1 success: 	1
16202UPDATE t1 SET f_int1 = -@max_row
16203WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16204AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16205
16206# check null-2 success: 	1
16207UPDATE t1 SET f_int1 = NULL
16208WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16209AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16210
16211# check null-3 success: 	1
16212DELETE FROM t1
16213WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16214AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16215
16216# check null-4 success: 	1
16217DELETE FROM t1
16218WHERE f_int1 = 0 AND f_int2 = 0
16219AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16220AND f_charbig = '#NULL#';
16221INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16222SELECT f_int1, f_int1, '', '', 'was inserted'
16223   FROM t0_template source_tab
16224WHERE MOD(f_int1,3) = 0
16225AND f_int1 BETWEEN @max_row_div2 AND @max_row
16226ON DUPLICATE KEY
16227UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16228f_int2 = 2 * @max_row + source_tab.f_int1,
16229f_charbig = 'was updated';
16230
16231# check unique-1-a success: 	1
16232
16233# check unique-1-b success: 	1
16234DELETE FROM t1 WHERE f_charbig = 'was inserted';
16235UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16236f_int2 = CAST(f_char1 AS SIGNED INT),
16237f_charbig = CONCAT('===',f_char1,'===')
16238WHERE f_charbig = 'was updated';
16239REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16240SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16241   FROM t0_template source_tab
16242WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16243
16244# check replace success: 	1
16245DELETE FROM t1
16246WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16247DELETE FROM t1
16248WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16249f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16250UPDATE t1 SET f_int2 = f_int1,
16251f_char1 = CAST(f_int1 AS CHAR),
16252f_char2 = CAST(f_int1 AS CHAR),
16253f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16254WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16255SET AUTOCOMMIT= 0;
16256INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16257SELECT f_int1, f_int1, '', '', 'was inserted'
16258FROM t0_template source_tab
16259WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16260
16261# check transactions-1 success: 	1
16262COMMIT WORK;
16263
16264# check transactions-2 success: 	1
16265ROLLBACK WORK;
16266
16267# check transactions-3 success: 	1
16268DELETE FROM t1 WHERE f_charbig = 'was inserted';
16269COMMIT WORK;
16270ROLLBACK WORK;
16271
16272# check transactions-4 success: 	1
16273INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16274SELECT f_int1, f_int1, '', '', 'was inserted'
16275FROM t0_template source_tab
16276WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16277
16278# check transactions-5 success: 	1
16279ROLLBACK WORK;
16280
16281# check transactions-6 success: 	1
16282# INFO: Storage engine used for t1 seems to be transactional.
16283COMMIT;
16284
16285# check transactions-7 success: 	1
16286DELETE FROM t1 WHERE f_charbig = 'was inserted';
16287COMMIT WORK;
16288SET @@session.sql_mode = 'traditional';
16289Warnings:
16290Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16291SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16292INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16293SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16294'', '', 'was inserted' FROM t0_template
16295WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16296ERROR 22012: Division by 0
16297COMMIT;
16298
16299# check transactions-8 success: 	1
16300# INFO: Storage engine used for t1 seems to be able to revert
16301#       changes made by the failing statement.
16302SET @@session.sql_mode = '';
16303Warnings:
16304Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16305SET AUTOCOMMIT= 1;
16306DELETE FROM t1 WHERE f_charbig = 'was inserted';
16307COMMIT WORK;
16308UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16309
16310# check special-1 success: 	1
16311UPDATE t1 SET f_charbig = '';
16312
16313# check special-2 success: 	1
16314UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16315INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16316SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16317WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16318INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16319SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16320'just inserted' FROM t0_template
16321WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16322CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16323BEGIN
16324UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16325f_charbig = 'updated by trigger'
16326      WHERE f_int1 = new.f_int1;
16327END|
16328INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16329SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16330WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16331
16332# check trigger-1 success: 	1
16333DROP TRIGGER trg_1;
16334UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16335f_int2 = CAST(f_char1 AS SIGNED INT),
16336f_charbig = 'just inserted'
16337   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16338DELETE FROM t0_aux
16339WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16340INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16341SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16342'just inserted' FROM t0_template
16343WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16344CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16345BEGIN
16346UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16347f_charbig = 'updated by trigger'
16348      WHERE f_int1 = new.f_int1;
16349END|
16350INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16351SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16352WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16353
16354# check trigger-2 success: 	1
16355DROP TRIGGER trg_1;
16356UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16357f_int2 = CAST(f_char1 AS SIGNED INT),
16358f_charbig = 'just inserted'
16359   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16360DELETE FROM t0_aux
16361WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16362INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16363SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16364'just inserted' FROM t0_template
16365WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16366CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16367BEGIN
16368UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16369f_charbig = 'updated by trigger'
16370      WHERE f_int1 = new.f_int1;
16371END|
16372UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16373WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16374
16375# check trigger-3 success: 	1
16376DROP TRIGGER trg_1;
16377UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16378f_int2 = CAST(f_char1 AS SIGNED INT),
16379f_charbig = 'just inserted'
16380   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16381DELETE FROM t0_aux
16382WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16383INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16384SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16385'just inserted' FROM t0_template
16386WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16387CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16388BEGIN
16389UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16390f_charbig = 'updated by trigger'
16391      WHERE f_int1 = - old.f_int1;
16392END|
16393UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16394WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16395
16396# check trigger-4 success: 	1
16397DROP TRIGGER trg_1;
16398UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16399f_int2 = CAST(f_char1 AS SIGNED INT),
16400f_charbig = 'just inserted'
16401   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16402DELETE FROM t0_aux
16403WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16404INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16405SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16406'just inserted' FROM t0_template
16407WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16408CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16409BEGIN
16410UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16411f_charbig = 'updated by trigger'
16412      WHERE f_int1 = new.f_int1;
16413END|
16414UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16415WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16416
16417# check trigger-5 success: 	1
16418DROP TRIGGER trg_1;
16419UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16420f_int2 = CAST(f_char1 AS SIGNED INT),
16421f_charbig = 'just inserted'
16422   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16423DELETE FROM t0_aux
16424WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16425INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16426SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16427'just inserted' FROM t0_template
16428WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16429CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16430BEGIN
16431UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16432f_charbig = 'updated by trigger'
16433      WHERE f_int1 = - old.f_int1;
16434END|
16435UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16436WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16437
16438# check trigger-6 success: 	1
16439DROP TRIGGER trg_1;
16440UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16441f_int2 = CAST(f_char1 AS SIGNED INT),
16442f_charbig = 'just inserted'
16443   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16444DELETE FROM t0_aux
16445WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16446INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16447SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16448'just inserted' FROM t0_template
16449WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16450CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16451BEGIN
16452UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16453f_charbig = 'updated by trigger'
16454      WHERE f_int1 = - old.f_int1;
16455END|
16456DELETE FROM t0_aux
16457WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16458
16459# check trigger-7 success: 	1
16460DROP TRIGGER trg_1;
16461UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16462f_int2 = CAST(f_char1 AS SIGNED INT),
16463f_charbig = 'just inserted'
16464   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16465DELETE FROM t0_aux
16466WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16467INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16468SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16469'just inserted' FROM t0_template
16470WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16471CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16472BEGIN
16473UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16474f_charbig = 'updated by trigger'
16475      WHERE f_int1 = - old.f_int1;
16476END|
16477DELETE FROM t0_aux
16478WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16479
16480# check trigger-8 success: 	1
16481DROP TRIGGER trg_1;
16482UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16483f_int2 = CAST(f_char1 AS SIGNED INT),
16484f_charbig = 'just inserted'
16485   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16486DELETE FROM t0_aux
16487WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16488DELETE FROM t1
16489WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16490CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16491BEGIN
16492SET new.f_int1 = old.f_int1 + @max_row,
16493new.f_int2 = old.f_int2 - @max_row,
16494new.f_charbig = '####updated per update trigger####';
16495END|
16496UPDATE t1
16497SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16498f_charbig = '####updated per update statement itself####';
16499
16500# check trigger-9 success: 	1
16501DROP TRIGGER trg_2;
16502UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16503f_int2 = CAST(f_char1 AS SIGNED INT),
16504f_charbig = CONCAT('===',f_char1,'===');
16505CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
16506BEGIN
16507SET new.f_int1 = new.f_int1 + @max_row,
16508new.f_int2 = new.f_int2 - @max_row,
16509new.f_charbig = '####updated per update trigger####';
16510END|
16511UPDATE t1
16512SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
16513f_charbig = '####updated per update statement itself####';
16514
16515# check trigger-10 success: 	1
16516DROP TRIGGER trg_2;
16517UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16518f_int2 = CAST(f_char1 AS SIGNED INT),
16519f_charbig = CONCAT('===',f_char1,'===');
16520CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16521BEGIN
16522SET new.f_int1 = @my_max1 + @counter,
16523new.f_int2 = @my_min2 - @counter,
16524new.f_charbig = '####updated per insert trigger####';
16525SET @counter = @counter + 1;
16526END|
16527SET @counter = 1;
16528SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16529INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16530SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16531CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16532WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16533ORDER BY f_int1;
16534DROP TRIGGER trg_3;
16535
16536# check trigger-11 success: 	1
16537DELETE FROM t1
16538WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16539AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16540AND f_charbig = '####updated per insert trigger####';
16541CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
16542BEGIN
16543SET new.f_int1 = @my_max1 + @counter,
16544new.f_int2 = @my_min2 - @counter,
16545new.f_charbig = '####updated per insert trigger####';
16546SET @counter = @counter + 1;
16547END|
16548SET @counter = 1;
16549SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
16550INSERT INTO t1 (f_char1, f_char2, f_charbig)
16551SELECT CAST(f_int1 AS CHAR),
16552CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
16553WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
16554ORDER BY f_int1;
16555DROP TRIGGER trg_3;
16556
16557# check trigger-12 success: 	1
16558DELETE FROM t1
16559WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
16560AND f_int2 <> CAST(f_char1 AS SIGNED INT)
16561AND f_charbig = '####updated per insert trigger####';
16562ANALYZE  TABLE t1;
16563Table	Op	Msg_type	Msg_text
16564test.t1	analyze	status	OK
16565CHECK    TABLE t1 EXTENDED;
16566Table	Op	Msg_type	Msg_text
16567test.t1	check	status	OK
16568CHECKSUM TABLE t1 EXTENDED;
16569Table	Checksum
16570test.t1	<some_value>
16571OPTIMIZE TABLE t1;
16572Table	Op	Msg_type	Msg_text
16573test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
16574test.t1	optimize	status	OK
16575# check layout success:    1
16576REPAIR   TABLE t1 EXTENDED;
16577Table	Op	Msg_type	Msg_text
16578test.t1	repair	status	OK
16579# check layout success:    1
16580TRUNCATE t1;
16581
16582# check TRUNCATE success: 	1
16583# check layout success:    1
16584# End usability test (inc/partition_check.inc)
16585DROP TABLE t1;
16586CREATE TABLE t1 (
16587f_int1 INTEGER,
16588f_int2 INTEGER,
16589f_char1 CHAR(20),
16590f_char2 CHAR(20),
16591f_charbig VARCHAR(1000)
16592, UNIQUE INDEX uidx (f_int2,f_int1)
16593)
16594PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
16595INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16596SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16597WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
16598ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
16599INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16600SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
16601WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
16602# Start usability test (inc/partition_check.inc)
16603create_command
16604SHOW CREATE TABLE t1;
16605Table	Create Table
16606t1	CREATE TABLE `t1` (
16607  `f_int1` bigint(20) DEFAULT NULL,
16608  `f_int2` bigint(20) DEFAULT NULL,
16609  `f_char1` char(20) DEFAULT NULL,
16610  `f_char2` char(20) DEFAULT NULL,
16611  `f_charbig` varchar(1000) DEFAULT NULL,
16612  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
16613) ENGINE=InnoDB DEFAULT CHARSET=latin1
16614/*!50100 PARTITION BY KEY (f_int1,f_int2)
16615PARTITIONS 5 */
16616
16617# check prerequisites-1 success:    1
16618# check COUNT(*) success:    1
16619# check MIN/MAX(f_int1) success:    1
16620# check MIN/MAX(f_int2) success:    1
16621INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16622SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
16623CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
16624WHERE f_int1 IN (2,3);
16625ERROR 23000: Duplicate entry '2-2' for key 'uidx'
16626# check prerequisites-3 success:    1
16627# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
16628INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16629SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16630CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16631WHERE f_int1 IN (2,3);
16632DELETE FROM t1 WHERE f_charbig = 'delete me';
16633INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16634SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
16635CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
16636WHERE f_int1 IN (2,3);
16637DELETE FROM t1 WHERE f_charbig = 'delete me';
16638# check read via f_int1 success: 1
16639# check read via f_int2 success: 1
16640
16641# check multiple-1 success: 	1
16642DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
16643
16644# check multiple-2 success: 	1
16645INSERT INTO t1 SELECT * FROM t0_template
16646WHERE MOD(f_int1,3) = 0;
16647
16648# check multiple-3 success: 	1
16649UPDATE t1 SET f_int1 = f_int1 + @max_row
16650WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
16651AND @max_row_div2 + @max_row_div4;
16652
16653# check multiple-4 success: 	1
16654DELETE FROM t1
16655WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
16656AND @max_row_div2 + @max_row_div4 + @max_row;
16657
16658# check multiple-5 success: 	1
16659SELECT COUNT(*) INTO @try_count FROM t0_template
16660WHERE MOD(f_int1,3) = 0
16661AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16662SELECT COUNT(*) INTO @clash_count
16663FROM t1 INNER JOIN t0_template USING(f_int1)
16664WHERE MOD(f_int1,3) = 0
16665AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16666SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
16667INSERT INTO t1
16668SET f_int1 = @cur_value , f_int2 = @cur_value,
16669f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16670f_charbig = '#SINGLE#';
16671
16672# check single-1 success: 	1
16673SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
16674INSERT INTO t1
16675SET f_int1 = @cur_value , f_int2 = @cur_value,
16676f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
16677f_charbig = '#SINGLE#';
16678
16679# check single-2 success: 	1
16680SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
16681SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
16682UPDATE t1 SET f_int1 = @cur_value2
16683WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
16684
16685# check single-3 success: 	1
16686SET @cur_value1= -1;
16687SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
16688UPDATE t1 SET f_int1 = @cur_value1
16689WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
16690
16691# check single-4 success: 	1
16692SELECT MAX(f_int1) INTO @cur_value FROM t1;
16693DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
16694
16695# check single-5 success: 	1
16696DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
16697
16698# check single-6 success: 	1
16699INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
16700
16701# check single-7 success: 	1
16702DELETE FROM t1 WHERE f_charbig = '#2147483647##';
16703DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
16704INSERT t1 SET f_int1 = 0 , f_int2 = 0,
16705f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
16706f_charbig = '#NULL#';
16707INSERT INTO t1
16708SET f_int1 = NULL , f_int2 = -@max_row,
16709f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
16710f_charbig = '#NULL#';
16711# check null success:    1
16712
16713# check null-1 success: 	1
16714UPDATE t1 SET f_int1 = -@max_row
16715WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16716AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16717
16718# check null-2 success: 	1
16719UPDATE t1 SET f_int1 = NULL
16720WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16721AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16722
16723# check null-3 success: 	1
16724DELETE FROM t1
16725WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
16726AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
16727
16728# check null-4 success: 	1
16729DELETE FROM t1
16730WHERE f_int1 = 0 AND f_int2 = 0
16731AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
16732AND f_charbig = '#NULL#';
16733INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16734SELECT f_int1, f_int1, '', '', 'was inserted'
16735   FROM t0_template source_tab
16736WHERE MOD(f_int1,3) = 0
16737AND f_int1 BETWEEN @max_row_div2 AND @max_row
16738ON DUPLICATE KEY
16739UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
16740f_int2 = 2 * @max_row + source_tab.f_int1,
16741f_charbig = 'was updated';
16742
16743# check unique-1-a success: 	1
16744
16745# check unique-1-b success: 	1
16746DELETE FROM t1 WHERE f_charbig = 'was inserted';
16747UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16748f_int2 = CAST(f_char1 AS SIGNED INT),
16749f_charbig = CONCAT('===',f_char1,'===')
16750WHERE f_charbig = 'was updated';
16751REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16752SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
16753   FROM t0_template source_tab
16754WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
16755
16756# check replace success: 	1
16757DELETE FROM t1
16758WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
16759DELETE FROM t1
16760WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
16761f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
16762UPDATE t1 SET f_int2 = f_int1,
16763f_char1 = CAST(f_int1 AS CHAR),
16764f_char2 = CAST(f_int1 AS CHAR),
16765f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
16766WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
16767SET AUTOCOMMIT= 0;
16768INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16769SELECT f_int1, f_int1, '', '', 'was inserted'
16770FROM t0_template source_tab
16771WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16772
16773# check transactions-1 success: 	1
16774COMMIT WORK;
16775
16776# check transactions-2 success: 	1
16777ROLLBACK WORK;
16778
16779# check transactions-3 success: 	1
16780DELETE FROM t1 WHERE f_charbig = 'was inserted';
16781COMMIT WORK;
16782ROLLBACK WORK;
16783
16784# check transactions-4 success: 	1
16785INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16786SELECT f_int1, f_int1, '', '', 'was inserted'
16787FROM t0_template source_tab
16788WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16789
16790# check transactions-5 success: 	1
16791ROLLBACK WORK;
16792
16793# check transactions-6 success: 	1
16794# INFO: Storage engine used for t1 seems to be transactional.
16795COMMIT;
16796
16797# check transactions-7 success: 	1
16798DELETE FROM t1 WHERE f_charbig = 'was inserted';
16799COMMIT WORK;
16800SET @@session.sql_mode = 'traditional';
16801Warnings:
16802Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16803SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
16804INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
16805SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
16806'', '', 'was inserted' FROM t0_template
16807WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
16808ERROR 22012: Division by 0
16809COMMIT;
16810
16811# check transactions-8 success: 	1
16812# INFO: Storage engine used for t1 seems to be able to revert
16813#       changes made by the failing statement.
16814SET @@session.sql_mode = '';
16815Warnings:
16816Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
16817SET AUTOCOMMIT= 1;
16818DELETE FROM t1 WHERE f_charbig = 'was inserted';
16819COMMIT WORK;
16820UPDATE t1 SET f_charbig = REPEAT('b', 1000);
16821
16822# check special-1 success: 	1
16823UPDATE t1 SET f_charbig = '';
16824
16825# check special-2 success: 	1
16826UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
16827INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
16828SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
16829WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16830INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16831SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16832'just inserted' FROM t0_template
16833WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16834CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
16835BEGIN
16836UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16837f_charbig = 'updated by trigger'
16838      WHERE f_int1 = new.f_int1;
16839END|
16840INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16841SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16842WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16843
16844# check trigger-1 success: 	1
16845DROP TRIGGER trg_1;
16846UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16847f_int2 = CAST(f_char1 AS SIGNED INT),
16848f_charbig = 'just inserted'
16849   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16850DELETE FROM t0_aux
16851WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16852INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16853SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16854'just inserted' FROM t0_template
16855WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16856CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
16857BEGIN
16858UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16859f_charbig = 'updated by trigger'
16860      WHERE f_int1 = new.f_int1;
16861END|
16862INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16863SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
16864WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16865
16866# check trigger-2 success: 	1
16867DROP TRIGGER trg_1;
16868UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16869f_int2 = CAST(f_char1 AS SIGNED INT),
16870f_charbig = 'just inserted'
16871   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16872DELETE FROM t0_aux
16873WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16874INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16875SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16876'just inserted' FROM t0_template
16877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16878CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16879BEGIN
16880UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16881f_charbig = 'updated by trigger'
16882      WHERE f_int1 = new.f_int1;
16883END|
16884UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16885WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16886
16887# check trigger-3 success: 	1
16888DROP TRIGGER trg_1;
16889UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16890f_int2 = CAST(f_char1 AS SIGNED INT),
16891f_charbig = 'just inserted'
16892   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16893DELETE FROM t0_aux
16894WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16895INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16896SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16897'just inserted' FROM t0_template
16898WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16899CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
16900BEGIN
16901UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16902f_charbig = 'updated by trigger'
16903      WHERE f_int1 = - old.f_int1;
16904END|
16905UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16906WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16907
16908# check trigger-4 success: 	1
16909DROP TRIGGER trg_1;
16910UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16911f_int2 = CAST(f_char1 AS SIGNED INT),
16912f_charbig = 'just inserted'
16913   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16914DELETE FROM t0_aux
16915WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16916INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16917SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16918'just inserted' FROM t0_template
16919WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16920CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16921BEGIN
16922UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16923f_charbig = 'updated by trigger'
16924      WHERE f_int1 = new.f_int1;
16925END|
16926UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16927WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16928
16929# check trigger-5 success: 	1
16930DROP TRIGGER trg_1;
16931UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16932f_int2 = CAST(f_char1 AS SIGNED INT),
16933f_charbig = 'just inserted'
16934   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16935DELETE FROM t0_aux
16936WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16937INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16938SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16939'just inserted' FROM t0_template
16940WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16941CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
16942BEGIN
16943UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16944f_charbig = 'updated by trigger'
16945      WHERE f_int1 = - old.f_int1;
16946END|
16947UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
16948WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16949
16950# check trigger-6 success: 	1
16951DROP TRIGGER trg_1;
16952UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16953f_int2 = CAST(f_char1 AS SIGNED INT),
16954f_charbig = 'just inserted'
16955   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16956DELETE FROM t0_aux
16957WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16958INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16959SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16960'just inserted' FROM t0_template
16961WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16962CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
16963BEGIN
16964UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16965f_charbig = 'updated by trigger'
16966      WHERE f_int1 = - old.f_int1;
16967END|
16968DELETE FROM t0_aux
16969WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16970
16971# check trigger-7 success: 	1
16972DROP TRIGGER trg_1;
16973UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16974f_int2 = CAST(f_char1 AS SIGNED INT),
16975f_charbig = 'just inserted'
16976   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16977DELETE FROM t0_aux
16978WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16979INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
16980SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
16981'just inserted' FROM t0_template
16982WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
16983CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
16984BEGIN
16985UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
16986f_charbig = 'updated by trigger'
16987      WHERE f_int1 = - old.f_int1;
16988END|
16989DELETE FROM t0_aux
16990WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
16991
16992# check trigger-8 success: 	1
16993DROP TRIGGER trg_1;
16994UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
16995f_int2 = CAST(f_char1 AS SIGNED INT),
16996f_charbig = 'just inserted'
16997   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
16998DELETE FROM t0_aux
16999WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17000DELETE FROM t1
17001WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17002CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17003BEGIN
17004SET new.f_int1 = old.f_int1 + @max_row,
17005new.f_int2 = old.f_int2 - @max_row,
17006new.f_charbig = '####updated per update trigger####';
17007END|
17008UPDATE t1
17009SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17010f_charbig = '####updated per update statement itself####';
17011
17012# check trigger-9 success: 	1
17013DROP TRIGGER trg_2;
17014UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17015f_int2 = CAST(f_char1 AS SIGNED INT),
17016f_charbig = CONCAT('===',f_char1,'===');
17017CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17018BEGIN
17019SET new.f_int1 = new.f_int1 + @max_row,
17020new.f_int2 = new.f_int2 - @max_row,
17021new.f_charbig = '####updated per update trigger####';
17022END|
17023UPDATE t1
17024SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17025f_charbig = '####updated per update statement itself####';
17026
17027# check trigger-10 success: 	1
17028DROP TRIGGER trg_2;
17029UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17030f_int2 = CAST(f_char1 AS SIGNED INT),
17031f_charbig = CONCAT('===',f_char1,'===');
17032CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17033BEGIN
17034SET new.f_int1 = @my_max1 + @counter,
17035new.f_int2 = @my_min2 - @counter,
17036new.f_charbig = '####updated per insert trigger####';
17037SET @counter = @counter + 1;
17038END|
17039SET @counter = 1;
17040SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17041INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17042SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17043CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17044WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17045ORDER BY f_int1;
17046DROP TRIGGER trg_3;
17047
17048# check trigger-11 success: 	1
17049DELETE FROM t1
17050WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17051AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17052AND f_charbig = '####updated per insert trigger####';
17053CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17054BEGIN
17055SET new.f_int1 = @my_max1 + @counter,
17056new.f_int2 = @my_min2 - @counter,
17057new.f_charbig = '####updated per insert trigger####';
17058SET @counter = @counter + 1;
17059END|
17060SET @counter = 1;
17061SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17062INSERT INTO t1 (f_char1, f_char2, f_charbig)
17063SELECT CAST(f_int1 AS CHAR),
17064CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17065WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17066ORDER BY f_int1;
17067DROP TRIGGER trg_3;
17068
17069# check trigger-12 success: 	1
17070DELETE FROM t1
17071WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17072AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17073AND f_charbig = '####updated per insert trigger####';
17074ANALYZE  TABLE t1;
17075Table	Op	Msg_type	Msg_text
17076test.t1	analyze	status	OK
17077CHECK    TABLE t1 EXTENDED;
17078Table	Op	Msg_type	Msg_text
17079test.t1	check	status	OK
17080CHECKSUM TABLE t1 EXTENDED;
17081Table	Checksum
17082test.t1	<some_value>
17083OPTIMIZE TABLE t1;
17084Table	Op	Msg_type	Msg_text
17085test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17086test.t1	optimize	status	OK
17087# check layout success:    1
17088REPAIR   TABLE t1 EXTENDED;
17089Table	Op	Msg_type	Msg_text
17090test.t1	repair	status	OK
17091# check layout success:    1
17092TRUNCATE t1;
17093
17094# check TRUNCATE success: 	1
17095# check layout success:    1
17096# End usability test (inc/partition_check.inc)
17097DROP TABLE t1;
17098CREATE TABLE t1 (
17099f_int1 INTEGER,
17100f_int2 INTEGER,
17101f_char1 CHAR(20),
17102f_char2 CHAR(20),
17103f_charbig VARCHAR(1000)
17104, UNIQUE INDEX uidx (f_int2,f_int1)
17105)
17106PARTITION BY LIST(MOD(f_int1 + f_int2,4))
17107(PARTITION part_3 VALUES IN (-3),
17108PARTITION part_2 VALUES IN (-2),
17109PARTITION part_1 VALUES IN (-1),
17110PARTITION part_N VALUES IN (NULL),
17111PARTITION part0 VALUES IN (0),
17112PARTITION part1 VALUES IN (1),
17113PARTITION part2 VALUES IN (2),
17114PARTITION part3 VALUES IN (3));
17115INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17116SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17117WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17118ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
17119INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17120SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17121WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17122# Start usability test (inc/partition_check.inc)
17123create_command
17124SHOW CREATE TABLE t1;
17125Table	Create Table
17126t1	CREATE TABLE `t1` (
17127  `f_int1` bigint(20) DEFAULT NULL,
17128  `f_int2` bigint(20) DEFAULT NULL,
17129  `f_char1` char(20) DEFAULT NULL,
17130  `f_char2` char(20) DEFAULT NULL,
17131  `f_charbig` varchar(1000) DEFAULT NULL,
17132  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
17133) ENGINE=InnoDB DEFAULT CHARSET=latin1
17134/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4))
17135(PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB,
17136 PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB,
17137 PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB,
17138 PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB,
17139 PARTITION part0 VALUES IN (0) ENGINE = InnoDB,
17140 PARTITION part1 VALUES IN (1) ENGINE = InnoDB,
17141 PARTITION part2 VALUES IN (2) ENGINE = InnoDB,
17142 PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
17143
17144# check prerequisites-1 success:    1
17145# check COUNT(*) success:    1
17146# check MIN/MAX(f_int1) success:    1
17147# check MIN/MAX(f_int2) success:    1
17148INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17149SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17150CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17151WHERE f_int1 IN (2,3);
17152ERROR 23000: Duplicate entry '2-2' for key 'uidx'
17153# check prerequisites-3 success:    1
17154# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17155INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17156SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17157CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17158WHERE f_int1 IN (2,3);
17159DELETE FROM t1 WHERE f_charbig = 'delete me';
17160INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17161SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17162CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17163WHERE f_int1 IN (2,3);
17164DELETE FROM t1 WHERE f_charbig = 'delete me';
17165# check read via f_int1 success: 1
17166# check read via f_int2 success: 1
17167
17168# check multiple-1 success: 	1
17169DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17170
17171# check multiple-2 success: 	1
17172INSERT INTO t1 SELECT * FROM t0_template
17173WHERE MOD(f_int1,3) = 0;
17174
17175# check multiple-3 success: 	1
17176UPDATE t1 SET f_int1 = f_int1 + @max_row
17177WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17178AND @max_row_div2 + @max_row_div4;
17179
17180# check multiple-4 success: 	1
17181DELETE FROM t1
17182WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17183AND @max_row_div2 + @max_row_div4 + @max_row;
17184
17185# check multiple-5 success: 	1
17186SELECT COUNT(*) INTO @try_count FROM t0_template
17187WHERE MOD(f_int1,3) = 0
17188AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17189SELECT COUNT(*) INTO @clash_count
17190FROM t1 INNER JOIN t0_template USING(f_int1)
17191WHERE MOD(f_int1,3) = 0
17192AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17193SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17194INSERT INTO t1
17195SET f_int1 = @cur_value , f_int2 = @cur_value,
17196f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17197f_charbig = '#SINGLE#';
17198
17199# check single-1 success: 	1
17200SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17201INSERT INTO t1
17202SET f_int1 = @cur_value , f_int2 = @cur_value,
17203f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17204f_charbig = '#SINGLE#';
17205
17206# check single-2 success: 	1
17207SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17208SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17209UPDATE t1 SET f_int1 = @cur_value2
17210WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17211
17212# check single-3 success: 	1
17213SET @cur_value1= -1;
17214SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17215UPDATE t1 SET f_int1 = @cur_value1
17216WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17217
17218# check single-4 success: 	1
17219SELECT MAX(f_int1) INTO @cur_value FROM t1;
17220DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17221
17222# check single-5 success: 	1
17223DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17224
17225# check single-6 success: 	1
17226INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17227
17228# check single-7 success: 	1
17229DELETE FROM t1 WHERE f_charbig = '#2147483647##';
17230DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17231INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17232f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17233f_charbig = '#NULL#';
17234INSERT INTO t1
17235SET f_int1 = NULL , f_int2 = -@max_row,
17236f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17237f_charbig = '#NULL#';
17238# check null success:    1
17239
17240# check null-1 success: 	1
17241UPDATE t1 SET f_int1 = -@max_row
17242WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17243AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17244
17245# check null-2 success: 	1
17246UPDATE t1 SET f_int1 = NULL
17247WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17248AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17249
17250# check null-3 success: 	1
17251DELETE FROM t1
17252WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17253AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17254
17255# check null-4 success: 	1
17256DELETE FROM t1
17257WHERE f_int1 = 0 AND f_int2 = 0
17258AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17259AND f_charbig = '#NULL#';
17260INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17261SELECT f_int1, f_int1, '', '', 'was inserted'
17262   FROM t0_template source_tab
17263WHERE MOD(f_int1,3) = 0
17264AND f_int1 BETWEEN @max_row_div2 AND @max_row
17265ON DUPLICATE KEY
17266UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17267f_int2 = 2 * @max_row + source_tab.f_int1,
17268f_charbig = 'was updated';
17269
17270# check unique-1-a success: 	1
17271
17272# check unique-1-b success: 	1
17273DELETE FROM t1 WHERE f_charbig = 'was inserted';
17274UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17275f_int2 = CAST(f_char1 AS SIGNED INT),
17276f_charbig = CONCAT('===',f_char1,'===')
17277WHERE f_charbig = 'was updated';
17278REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17279SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17280   FROM t0_template source_tab
17281WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17282
17283# check replace success: 	1
17284DELETE FROM t1
17285WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17286DELETE FROM t1
17287WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17288f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17289UPDATE t1 SET f_int2 = f_int1,
17290f_char1 = CAST(f_int1 AS CHAR),
17291f_char2 = CAST(f_int1 AS CHAR),
17292f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17293WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17294SET AUTOCOMMIT= 0;
17295INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17296SELECT f_int1, f_int1, '', '', 'was inserted'
17297FROM t0_template source_tab
17298WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17299
17300# check transactions-1 success: 	1
17301COMMIT WORK;
17302
17303# check transactions-2 success: 	1
17304ROLLBACK WORK;
17305
17306# check transactions-3 success: 	1
17307DELETE FROM t1 WHERE f_charbig = 'was inserted';
17308COMMIT WORK;
17309ROLLBACK WORK;
17310
17311# check transactions-4 success: 	1
17312INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17313SELECT f_int1, f_int1, '', '', 'was inserted'
17314FROM t0_template source_tab
17315WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17316
17317# check transactions-5 success: 	1
17318ROLLBACK WORK;
17319
17320# check transactions-6 success: 	1
17321# INFO: Storage engine used for t1 seems to be transactional.
17322COMMIT;
17323
17324# check transactions-7 success: 	1
17325DELETE FROM t1 WHERE f_charbig = 'was inserted';
17326COMMIT WORK;
17327SET @@session.sql_mode = 'traditional';
17328Warnings:
17329Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17330SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17331INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17332SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17333'', '', 'was inserted' FROM t0_template
17334WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17335ERROR 22012: Division by 0
17336COMMIT;
17337
17338# check transactions-8 success: 	1
17339# INFO: Storage engine used for t1 seems to be able to revert
17340#       changes made by the failing statement.
17341SET @@session.sql_mode = '';
17342Warnings:
17343Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17344SET AUTOCOMMIT= 1;
17345DELETE FROM t1 WHERE f_charbig = 'was inserted';
17346COMMIT WORK;
17347UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17348
17349# check special-1 success: 	1
17350UPDATE t1 SET f_charbig = '';
17351
17352# check special-2 success: 	1
17353UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17354INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17355SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17356WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17357INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17358SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17359'just inserted' FROM t0_template
17360WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17361CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17362BEGIN
17363UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17364f_charbig = 'updated by trigger'
17365      WHERE f_int1 = new.f_int1;
17366END|
17367INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17368SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17369WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17370
17371# check trigger-1 success: 	1
17372DROP TRIGGER trg_1;
17373UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17374f_int2 = CAST(f_char1 AS SIGNED INT),
17375f_charbig = 'just inserted'
17376   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17377DELETE FROM t0_aux
17378WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17379INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17380SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17381'just inserted' FROM t0_template
17382WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17383CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17384BEGIN
17385UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17386f_charbig = 'updated by trigger'
17387      WHERE f_int1 = new.f_int1;
17388END|
17389INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17390SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17391WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17392
17393# check trigger-2 success: 	1
17394DROP TRIGGER trg_1;
17395UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17396f_int2 = CAST(f_char1 AS SIGNED INT),
17397f_charbig = 'just inserted'
17398   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17399DELETE FROM t0_aux
17400WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17401INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17402SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17403'just inserted' FROM t0_template
17404WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17405CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17406BEGIN
17407UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17408f_charbig = 'updated by trigger'
17409      WHERE f_int1 = new.f_int1;
17410END|
17411UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17412WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17413
17414# check trigger-3 success: 	1
17415DROP TRIGGER trg_1;
17416UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17417f_int2 = CAST(f_char1 AS SIGNED INT),
17418f_charbig = 'just inserted'
17419   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17420DELETE FROM t0_aux
17421WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17422INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17423SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17424'just inserted' FROM t0_template
17425WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17426CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17427BEGIN
17428UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17429f_charbig = 'updated by trigger'
17430      WHERE f_int1 = - old.f_int1;
17431END|
17432UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17433WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17434
17435# check trigger-4 success: 	1
17436DROP TRIGGER trg_1;
17437UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17438f_int2 = CAST(f_char1 AS SIGNED INT),
17439f_charbig = 'just inserted'
17440   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17441DELETE FROM t0_aux
17442WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17443INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17444SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17445'just inserted' FROM t0_template
17446WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17447CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17448BEGIN
17449UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17450f_charbig = 'updated by trigger'
17451      WHERE f_int1 = new.f_int1;
17452END|
17453UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17454WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17455
17456# check trigger-5 success: 	1
17457DROP TRIGGER trg_1;
17458UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17459f_int2 = CAST(f_char1 AS SIGNED INT),
17460f_charbig = 'just inserted'
17461   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17462DELETE FROM t0_aux
17463WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17464INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17465SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17466'just inserted' FROM t0_template
17467WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17468CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17469BEGIN
17470UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17471f_charbig = 'updated by trigger'
17472      WHERE f_int1 = - old.f_int1;
17473END|
17474UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17475WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17476
17477# check trigger-6 success: 	1
17478DROP TRIGGER trg_1;
17479UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17480f_int2 = CAST(f_char1 AS SIGNED INT),
17481f_charbig = 'just inserted'
17482   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17483DELETE FROM t0_aux
17484WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17485INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17486SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17487'just inserted' FROM t0_template
17488WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17489CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
17490BEGIN
17491UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17492f_charbig = 'updated by trigger'
17493      WHERE f_int1 = - old.f_int1;
17494END|
17495DELETE FROM t0_aux
17496WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17497
17498# check trigger-7 success: 	1
17499DROP TRIGGER trg_1;
17500UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17501f_int2 = CAST(f_char1 AS SIGNED INT),
17502f_charbig = 'just inserted'
17503   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17504DELETE FROM t0_aux
17505WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17506INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17507SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17508'just inserted' FROM t0_template
17509WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17510CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
17511BEGIN
17512UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17513f_charbig = 'updated by trigger'
17514      WHERE f_int1 = - old.f_int1;
17515END|
17516DELETE FROM t0_aux
17517WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17518
17519# check trigger-8 success: 	1
17520DROP TRIGGER trg_1;
17521UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17522f_int2 = CAST(f_char1 AS SIGNED INT),
17523f_charbig = 'just inserted'
17524   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17525DELETE FROM t0_aux
17526WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17527DELETE FROM t1
17528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17529CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17530BEGIN
17531SET new.f_int1 = old.f_int1 + @max_row,
17532new.f_int2 = old.f_int2 - @max_row,
17533new.f_charbig = '####updated per update trigger####';
17534END|
17535UPDATE t1
17536SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17537f_charbig = '####updated per update statement itself####';
17538
17539# check trigger-9 success: 	1
17540DROP TRIGGER trg_2;
17541UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17542f_int2 = CAST(f_char1 AS SIGNED INT),
17543f_charbig = CONCAT('===',f_char1,'===');
17544CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
17545BEGIN
17546SET new.f_int1 = new.f_int1 + @max_row,
17547new.f_int2 = new.f_int2 - @max_row,
17548new.f_charbig = '####updated per update trigger####';
17549END|
17550UPDATE t1
17551SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
17552f_charbig = '####updated per update statement itself####';
17553
17554# check trigger-10 success: 	1
17555DROP TRIGGER trg_2;
17556UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17557f_int2 = CAST(f_char1 AS SIGNED INT),
17558f_charbig = CONCAT('===',f_char1,'===');
17559CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17560BEGIN
17561SET new.f_int1 = @my_max1 + @counter,
17562new.f_int2 = @my_min2 - @counter,
17563new.f_charbig = '####updated per insert trigger####';
17564SET @counter = @counter + 1;
17565END|
17566SET @counter = 1;
17567SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17568INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17569SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17570CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17571WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17572ORDER BY f_int1;
17573DROP TRIGGER trg_3;
17574
17575# check trigger-11 success: 	1
17576DELETE FROM t1
17577WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17578AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17579AND f_charbig = '####updated per insert trigger####';
17580CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
17581BEGIN
17582SET new.f_int1 = @my_max1 + @counter,
17583new.f_int2 = @my_min2 - @counter,
17584new.f_charbig = '####updated per insert trigger####';
17585SET @counter = @counter + 1;
17586END|
17587SET @counter = 1;
17588SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
17589INSERT INTO t1 (f_char1, f_char2, f_charbig)
17590SELECT CAST(f_int1 AS CHAR),
17591CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
17592WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
17593ORDER BY f_int1;
17594DROP TRIGGER trg_3;
17595
17596# check trigger-12 success: 	1
17597DELETE FROM t1
17598WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
17599AND f_int2 <> CAST(f_char1 AS SIGNED INT)
17600AND f_charbig = '####updated per insert trigger####';
17601ANALYZE  TABLE t1;
17602Table	Op	Msg_type	Msg_text
17603test.t1	analyze	status	OK
17604CHECK    TABLE t1 EXTENDED;
17605Table	Op	Msg_type	Msg_text
17606test.t1	check	status	OK
17607CHECKSUM TABLE t1 EXTENDED;
17608Table	Checksum
17609test.t1	<some_value>
17610OPTIMIZE TABLE t1;
17611Table	Op	Msg_type	Msg_text
17612test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
17613test.t1	optimize	status	OK
17614# check layout success:    1
17615REPAIR   TABLE t1 EXTENDED;
17616Table	Op	Msg_type	Msg_text
17617test.t1	repair	status	OK
17618# check layout success:    1
17619TRUNCATE t1;
17620
17621# check TRUNCATE success: 	1
17622# check layout success:    1
17623# End usability test (inc/partition_check.inc)
17624DROP TABLE t1;
17625CREATE TABLE t1 (
17626f_int1 INTEGER,
17627f_int2 INTEGER,
17628f_char1 CHAR(20),
17629f_char2 CHAR(20),
17630f_charbig VARCHAR(1000)
17631, UNIQUE INDEX uidx (f_int2,f_int1)
17632)
17633PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
17634(PARTITION parta VALUES LESS THAN (0),
17635PARTITION partb VALUES LESS THAN (5),
17636PARTITION partc VALUES LESS THAN (10),
17637PARTITION partd VALUES LESS THAN (10 + 5),
17638PARTITION parte VALUES LESS THAN (20),
17639PARTITION partf VALUES LESS THAN (2147483646));
17640INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17641SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17642WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
17643ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
17644INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17645SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
17646WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
17647# Start usability test (inc/partition_check.inc)
17648create_command
17649SHOW CREATE TABLE t1;
17650Table	Create Table
17651t1	CREATE TABLE `t1` (
17652  `f_int1` bigint(20) DEFAULT NULL,
17653  `f_int2` bigint(20) DEFAULT NULL,
17654  `f_char1` char(20) DEFAULT NULL,
17655  `f_char2` char(20) DEFAULT NULL,
17656  `f_charbig` varchar(1000) DEFAULT NULL,
17657  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
17658) ENGINE=InnoDB DEFAULT CHARSET=latin1
17659/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2)
17660(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
17661 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
17662 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
17663 PARTITION partd VALUES LESS THAN (15) ENGINE = InnoDB,
17664 PARTITION parte VALUES LESS THAN (20) ENGINE = InnoDB,
17665 PARTITION partf VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
17666
17667# check prerequisites-1 success:    1
17668# check COUNT(*) success:    1
17669# check MIN/MAX(f_int1) success:    1
17670# check MIN/MAX(f_int2) success:    1
17671INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17672SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
17673CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
17674WHERE f_int1 IN (2,3);
17675ERROR 23000: Duplicate entry '2-2' for key 'uidx'
17676# check prerequisites-3 success:    1
17677# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
17678INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17679SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17680CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17681WHERE f_int1 IN (2,3);
17682DELETE FROM t1 WHERE f_charbig = 'delete me';
17683INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17684SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
17685CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
17686WHERE f_int1 IN (2,3);
17687DELETE FROM t1 WHERE f_charbig = 'delete me';
17688# check read via f_int1 success: 1
17689# check read via f_int2 success: 1
17690
17691# check multiple-1 success: 	1
17692DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
17693
17694# check multiple-2 success: 	1
17695INSERT INTO t1 SELECT * FROM t0_template
17696WHERE MOD(f_int1,3) = 0;
17697
17698# check multiple-3 success: 	1
17699UPDATE t1 SET f_int1 = f_int1 + @max_row
17700WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
17701AND @max_row_div2 + @max_row_div4;
17702
17703# check multiple-4 success: 	1
17704DELETE FROM t1
17705WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
17706AND @max_row_div2 + @max_row_div4 + @max_row;
17707
17708# check multiple-5 success: 	1
17709SELECT COUNT(*) INTO @try_count FROM t0_template
17710WHERE MOD(f_int1,3) = 0
17711AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17712SELECT COUNT(*) INTO @clash_count
17713FROM t1 INNER JOIN t0_template USING(f_int1)
17714WHERE MOD(f_int1,3) = 0
17715AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17716SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
17717INSERT INTO t1
17718SET f_int1 = @cur_value , f_int2 = @cur_value,
17719f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17720f_charbig = '#SINGLE#';
17721
17722# check single-1 success: 	1
17723SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
17724INSERT INTO t1
17725SET f_int1 = @cur_value , f_int2 = @cur_value,
17726f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
17727f_charbig = '#SINGLE#';
17728
17729# check single-2 success: 	1
17730SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
17731SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
17732UPDATE t1 SET f_int1 = @cur_value2
17733WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
17734
17735# check single-3 success: 	1
17736SET @cur_value1= -1;
17737SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
17738UPDATE t1 SET f_int1 = @cur_value1
17739WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
17740
17741# check single-4 success: 	1
17742SELECT MAX(f_int1) INTO @cur_value FROM t1;
17743DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
17744
17745# check single-5 success: 	1
17746DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
17747
17748# check single-6 success: 	1
17749INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
17750ERROR HY000: Table has no partition for value 2147483647
17751DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
17752INSERT t1 SET f_int1 = 0 , f_int2 = 0,
17753f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
17754f_charbig = '#NULL#';
17755INSERT INTO t1
17756SET f_int1 = NULL , f_int2 = -@max_row,
17757f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
17758f_charbig = '#NULL#';
17759# check null success:    1
17760
17761# check null-1 success: 	1
17762UPDATE t1 SET f_int1 = -@max_row
17763WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17764AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17765
17766# check null-2 success: 	1
17767UPDATE t1 SET f_int1 = NULL
17768WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17769AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17770
17771# check null-3 success: 	1
17772DELETE FROM t1
17773WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
17774AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
17775
17776# check null-4 success: 	1
17777DELETE FROM t1
17778WHERE f_int1 = 0 AND f_int2 = 0
17779AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
17780AND f_charbig = '#NULL#';
17781INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17782SELECT f_int1, f_int1, '', '', 'was inserted'
17783   FROM t0_template source_tab
17784WHERE MOD(f_int1,3) = 0
17785AND f_int1 BETWEEN @max_row_div2 AND @max_row
17786ON DUPLICATE KEY
17787UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
17788f_int2 = 2 * @max_row + source_tab.f_int1,
17789f_charbig = 'was updated';
17790
17791# check unique-1-a success: 	1
17792
17793# check unique-1-b success: 	1
17794DELETE FROM t1 WHERE f_charbig = 'was inserted';
17795UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17796f_int2 = CAST(f_char1 AS SIGNED INT),
17797f_charbig = CONCAT('===',f_char1,'===')
17798WHERE f_charbig = 'was updated';
17799REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17800SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
17801   FROM t0_template source_tab
17802WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
17803
17804# check replace success: 	1
17805DELETE FROM t1
17806WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
17807DELETE FROM t1
17808WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
17809f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
17810UPDATE t1 SET f_int2 = f_int1,
17811f_char1 = CAST(f_int1 AS CHAR),
17812f_char2 = CAST(f_int1 AS CHAR),
17813f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
17814WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
17815SET AUTOCOMMIT= 0;
17816INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17817SELECT f_int1, f_int1, '', '', 'was inserted'
17818FROM t0_template source_tab
17819WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17820
17821# check transactions-1 success: 	1
17822COMMIT WORK;
17823
17824# check transactions-2 success: 	1
17825ROLLBACK WORK;
17826
17827# check transactions-3 success: 	1
17828DELETE FROM t1 WHERE f_charbig = 'was inserted';
17829COMMIT WORK;
17830ROLLBACK WORK;
17831
17832# check transactions-4 success: 	1
17833INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17834SELECT f_int1, f_int1, '', '', 'was inserted'
17835FROM t0_template source_tab
17836WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17837
17838# check transactions-5 success: 	1
17839ROLLBACK WORK;
17840
17841# check transactions-6 success: 	1
17842# INFO: Storage engine used for t1 seems to be transactional.
17843COMMIT;
17844
17845# check transactions-7 success: 	1
17846DELETE FROM t1 WHERE f_charbig = 'was inserted';
17847COMMIT WORK;
17848SET @@session.sql_mode = 'traditional';
17849Warnings:
17850Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17851SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
17852INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
17853SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
17854'', '', 'was inserted' FROM t0_template
17855WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
17856ERROR 22012: Division by 0
17857COMMIT;
17858
17859# check transactions-8 success: 	1
17860# INFO: Storage engine used for t1 seems to be able to revert
17861#       changes made by the failing statement.
17862SET @@session.sql_mode = '';
17863Warnings:
17864Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
17865SET AUTOCOMMIT= 1;
17866DELETE FROM t1 WHERE f_charbig = 'was inserted';
17867COMMIT WORK;
17868UPDATE t1 SET f_charbig = REPEAT('b', 1000);
17869
17870# check special-1 success: 	1
17871UPDATE t1 SET f_charbig = '';
17872
17873# check special-2 success: 	1
17874UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
17875INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
17876SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
17877WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17878INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17879SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17880'just inserted' FROM t0_template
17881WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17882CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
17883BEGIN
17884UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17885f_charbig = 'updated by trigger'
17886      WHERE f_int1 = new.f_int1;
17887END|
17888INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17889SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17890WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17891
17892# check trigger-1 success: 	1
17893DROP TRIGGER trg_1;
17894UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17895f_int2 = CAST(f_char1 AS SIGNED INT),
17896f_charbig = 'just inserted'
17897   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17898DELETE FROM t0_aux
17899WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17900INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17901SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17902'just inserted' FROM t0_template
17903WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17904CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
17905BEGIN
17906UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17907f_charbig = 'updated by trigger'
17908      WHERE f_int1 = new.f_int1;
17909END|
17910INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17911SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
17912WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17913
17914# check trigger-2 success: 	1
17915DROP TRIGGER trg_1;
17916UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17917f_int2 = CAST(f_char1 AS SIGNED INT),
17918f_charbig = 'just inserted'
17919   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17920DELETE FROM t0_aux
17921WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17922INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17923SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17924'just inserted' FROM t0_template
17925WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17926CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17927BEGIN
17928UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17929f_charbig = 'updated by trigger'
17930      WHERE f_int1 = new.f_int1;
17931END|
17932UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17933WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17934
17935# check trigger-3 success: 	1
17936DROP TRIGGER trg_1;
17937UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17938f_int2 = CAST(f_char1 AS SIGNED INT),
17939f_charbig = 'just inserted'
17940   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17941DELETE FROM t0_aux
17942WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17943INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17944SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17945'just inserted' FROM t0_template
17946WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17947CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
17948BEGIN
17949UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17950f_charbig = 'updated by trigger'
17951      WHERE f_int1 = - old.f_int1;
17952END|
17953UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17954WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17955
17956# check trigger-4 success: 	1
17957DROP TRIGGER trg_1;
17958UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17959f_int2 = CAST(f_char1 AS SIGNED INT),
17960f_charbig = 'just inserted'
17961   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17962DELETE FROM t0_aux
17963WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17964INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17965SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17966'just inserted' FROM t0_template
17967WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17968CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17969BEGIN
17970UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17971f_charbig = 'updated by trigger'
17972      WHERE f_int1 = new.f_int1;
17973END|
17974UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17975WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17976
17977# check trigger-5 success: 	1
17978DROP TRIGGER trg_1;
17979UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
17980f_int2 = CAST(f_char1 AS SIGNED INT),
17981f_charbig = 'just inserted'
17982   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
17983DELETE FROM t0_aux
17984WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17985INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
17986SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
17987'just inserted' FROM t0_template
17988WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
17989CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
17990BEGIN
17991UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
17992f_charbig = 'updated by trigger'
17993      WHERE f_int1 = - old.f_int1;
17994END|
17995UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
17996WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
17997
17998# check trigger-6 success: 	1
17999DROP TRIGGER trg_1;
18000UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18001f_int2 = CAST(f_char1 AS SIGNED INT),
18002f_charbig = 'just inserted'
18003   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18004DELETE FROM t0_aux
18005WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18006INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18007SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18008'just inserted' FROM t0_template
18009WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18010CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18011BEGIN
18012UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18013f_charbig = 'updated by trigger'
18014      WHERE f_int1 = - old.f_int1;
18015END|
18016DELETE FROM t0_aux
18017WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18018
18019# check trigger-7 success: 	1
18020DROP TRIGGER trg_1;
18021UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18022f_int2 = CAST(f_char1 AS SIGNED INT),
18023f_charbig = 'just inserted'
18024   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18025DELETE FROM t0_aux
18026WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18027INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18028SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18029'just inserted' FROM t0_template
18030WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18031CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18032BEGIN
18033UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18034f_charbig = 'updated by trigger'
18035      WHERE f_int1 = - old.f_int1;
18036END|
18037DELETE FROM t0_aux
18038WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18039
18040# check trigger-8 success: 	1
18041DROP TRIGGER trg_1;
18042UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18043f_int2 = CAST(f_char1 AS SIGNED INT),
18044f_charbig = 'just inserted'
18045   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18046DELETE FROM t0_aux
18047WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18048DELETE FROM t1
18049WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18050CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18051BEGIN
18052SET new.f_int1 = old.f_int1 + @max_row,
18053new.f_int2 = old.f_int2 - @max_row,
18054new.f_charbig = '####updated per update trigger####';
18055END|
18056UPDATE t1
18057SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18058f_charbig = '####updated per update statement itself####';
18059
18060# check trigger-9 success: 	1
18061DROP TRIGGER trg_2;
18062UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18063f_int2 = CAST(f_char1 AS SIGNED INT),
18064f_charbig = CONCAT('===',f_char1,'===');
18065CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18066BEGIN
18067SET new.f_int1 = new.f_int1 + @max_row,
18068new.f_int2 = new.f_int2 - @max_row,
18069new.f_charbig = '####updated per update trigger####';
18070END|
18071UPDATE t1
18072SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18073f_charbig = '####updated per update statement itself####';
18074
18075# check trigger-10 success: 	1
18076DROP TRIGGER trg_2;
18077UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18078f_int2 = CAST(f_char1 AS SIGNED INT),
18079f_charbig = CONCAT('===',f_char1,'===');
18080CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18081BEGIN
18082SET new.f_int1 = @my_max1 + @counter,
18083new.f_int2 = @my_min2 - @counter,
18084new.f_charbig = '####updated per insert trigger####';
18085SET @counter = @counter + 1;
18086END|
18087SET @counter = 1;
18088SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18089INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18090SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18091CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18092WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18093ORDER BY f_int1;
18094DROP TRIGGER trg_3;
18095
18096# check trigger-11 success: 	1
18097DELETE FROM t1
18098WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18099AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18100AND f_charbig = '####updated per insert trigger####';
18101CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18102BEGIN
18103SET new.f_int1 = @my_max1 + @counter,
18104new.f_int2 = @my_min2 - @counter,
18105new.f_charbig = '####updated per insert trigger####';
18106SET @counter = @counter + 1;
18107END|
18108SET @counter = 1;
18109SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18110INSERT INTO t1 (f_char1, f_char2, f_charbig)
18111SELECT CAST(f_int1 AS CHAR),
18112CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18113WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18114ORDER BY f_int1;
18115DROP TRIGGER trg_3;
18116
18117# check trigger-12 success: 	1
18118DELETE FROM t1
18119WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18120AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18121AND f_charbig = '####updated per insert trigger####';
18122ANALYZE  TABLE t1;
18123Table	Op	Msg_type	Msg_text
18124test.t1	analyze	status	OK
18125CHECK    TABLE t1 EXTENDED;
18126Table	Op	Msg_type	Msg_text
18127test.t1	check	status	OK
18128CHECKSUM TABLE t1 EXTENDED;
18129Table	Checksum
18130test.t1	<some_value>
18131OPTIMIZE TABLE t1;
18132Table	Op	Msg_type	Msg_text
18133test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18134test.t1	optimize	status	OK
18135# check layout success:    1
18136REPAIR   TABLE t1 EXTENDED;
18137Table	Op	Msg_type	Msg_text
18138test.t1	repair	status	OK
18139# check layout success:    1
18140TRUNCATE t1;
18141
18142# check TRUNCATE success: 	1
18143# check layout success:    1
18144# End usability test (inc/partition_check.inc)
18145DROP TABLE t1;
18146CREATE TABLE t1 (
18147f_int1 INTEGER,
18148f_int2 INTEGER,
18149f_char1 CHAR(20),
18150f_char2 CHAR(20),
18151f_charbig VARCHAR(1000)
18152, UNIQUE INDEX uidx (f_int2,f_int1)
18153)
18154PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
18155(PARTITION parta VALUES LESS THAN (0),
18156PARTITION partb VALUES LESS THAN (5),
18157PARTITION partc VALUES LESS THAN (10),
18158PARTITION partd VALUES LESS THAN (2147483646));
18159INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18160SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18161WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18162ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
18163INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18164SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18165WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18166# Start usability test (inc/partition_check.inc)
18167create_command
18168SHOW CREATE TABLE t1;
18169Table	Create Table
18170t1	CREATE TABLE `t1` (
18171  `f_int1` bigint(20) DEFAULT NULL,
18172  `f_int2` bigint(20) DEFAULT NULL,
18173  `f_char1` char(20) DEFAULT NULL,
18174  `f_char2` char(20) DEFAULT NULL,
18175  `f_charbig` varchar(1000) DEFAULT NULL,
18176  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
18177) ENGINE=InnoDB DEFAULT CHARSET=latin1
18178/*!50100 PARTITION BY RANGE (f_int1)
18179SUBPARTITION BY HASH (f_int2)
18180SUBPARTITIONS 2
18181(PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB,
18182 PARTITION partb VALUES LESS THAN (5) ENGINE = InnoDB,
18183 PARTITION partc VALUES LESS THAN (10) ENGINE = InnoDB,
18184 PARTITION partd VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
18185
18186# check prerequisites-1 success:    1
18187# check COUNT(*) success:    1
18188# check MIN/MAX(f_int1) success:    1
18189# check MIN/MAX(f_int2) success:    1
18190INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18191SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18192CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18193WHERE f_int1 IN (2,3);
18194ERROR 23000: Duplicate entry '2-2' for key 'uidx'
18195# check prerequisites-3 success:    1
18196# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18197INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18198SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18199CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18200WHERE f_int1 IN (2,3);
18201DELETE FROM t1 WHERE f_charbig = 'delete me';
18202INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18203SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18204CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18205WHERE f_int1 IN (2,3);
18206DELETE FROM t1 WHERE f_charbig = 'delete me';
18207# check read via f_int1 success: 1
18208# check read via f_int2 success: 1
18209
18210# check multiple-1 success: 	1
18211DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18212
18213# check multiple-2 success: 	1
18214INSERT INTO t1 SELECT * FROM t0_template
18215WHERE MOD(f_int1,3) = 0;
18216
18217# check multiple-3 success: 	1
18218UPDATE t1 SET f_int1 = f_int1 + @max_row
18219WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18220AND @max_row_div2 + @max_row_div4;
18221
18222# check multiple-4 success: 	1
18223DELETE FROM t1
18224WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18225AND @max_row_div2 + @max_row_div4 + @max_row;
18226
18227# check multiple-5 success: 	1
18228SELECT COUNT(*) INTO @try_count FROM t0_template
18229WHERE MOD(f_int1,3) = 0
18230AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18231SELECT COUNT(*) INTO @clash_count
18232FROM t1 INNER JOIN t0_template USING(f_int1)
18233WHERE MOD(f_int1,3) = 0
18234AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18235SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18236INSERT INTO t1
18237SET f_int1 = @cur_value , f_int2 = @cur_value,
18238f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18239f_charbig = '#SINGLE#';
18240
18241# check single-1 success: 	1
18242SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18243INSERT INTO t1
18244SET f_int1 = @cur_value , f_int2 = @cur_value,
18245f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18246f_charbig = '#SINGLE#';
18247
18248# check single-2 success: 	1
18249SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18250SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18251UPDATE t1 SET f_int1 = @cur_value2
18252WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18253
18254# check single-3 success: 	1
18255SET @cur_value1= -1;
18256SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18257UPDATE t1 SET f_int1 = @cur_value1
18258WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18259
18260# check single-4 success: 	1
18261SELECT MAX(f_int1) INTO @cur_value FROM t1;
18262DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18263
18264# check single-5 success: 	1
18265DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18266
18267# check single-6 success: 	1
18268INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18269ERROR HY000: Table has no partition for value 2147483647
18270DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18271INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18272f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18273f_charbig = '#NULL#';
18274INSERT INTO t1
18275SET f_int1 = NULL , f_int2 = -@max_row,
18276f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18277f_charbig = '#NULL#';
18278# check null success:    1
18279
18280# check null-1 success: 	1
18281UPDATE t1 SET f_int1 = -@max_row
18282WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18283AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18284
18285# check null-2 success: 	1
18286UPDATE t1 SET f_int1 = NULL
18287WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18288AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18289
18290# check null-3 success: 	1
18291DELETE FROM t1
18292WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18293AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18294
18295# check null-4 success: 	1
18296DELETE FROM t1
18297WHERE f_int1 = 0 AND f_int2 = 0
18298AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18299AND f_charbig = '#NULL#';
18300INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18301SELECT f_int1, f_int1, '', '', 'was inserted'
18302   FROM t0_template source_tab
18303WHERE MOD(f_int1,3) = 0
18304AND f_int1 BETWEEN @max_row_div2 AND @max_row
18305ON DUPLICATE KEY
18306UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18307f_int2 = 2 * @max_row + source_tab.f_int1,
18308f_charbig = 'was updated';
18309
18310# check unique-1-a success: 	1
18311
18312# check unique-1-b success: 	1
18313DELETE FROM t1 WHERE f_charbig = 'was inserted';
18314UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18315f_int2 = CAST(f_char1 AS SIGNED INT),
18316f_charbig = CONCAT('===',f_char1,'===')
18317WHERE f_charbig = 'was updated';
18318REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18319SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18320   FROM t0_template source_tab
18321WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18322
18323# check replace success: 	1
18324DELETE FROM t1
18325WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18326DELETE FROM t1
18327WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18328f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18329UPDATE t1 SET f_int2 = f_int1,
18330f_char1 = CAST(f_int1 AS CHAR),
18331f_char2 = CAST(f_int1 AS CHAR),
18332f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18333WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18334SET AUTOCOMMIT= 0;
18335INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18336SELECT f_int1, f_int1, '', '', 'was inserted'
18337FROM t0_template source_tab
18338WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18339
18340# check transactions-1 success: 	1
18341COMMIT WORK;
18342
18343# check transactions-2 success: 	1
18344ROLLBACK WORK;
18345
18346# check transactions-3 success: 	1
18347DELETE FROM t1 WHERE f_charbig = 'was inserted';
18348COMMIT WORK;
18349ROLLBACK WORK;
18350
18351# check transactions-4 success: 	1
18352INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18353SELECT f_int1, f_int1, '', '', 'was inserted'
18354FROM t0_template source_tab
18355WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18356
18357# check transactions-5 success: 	1
18358ROLLBACK WORK;
18359
18360# check transactions-6 success: 	1
18361# INFO: Storage engine used for t1 seems to be transactional.
18362COMMIT;
18363
18364# check transactions-7 success: 	1
18365DELETE FROM t1 WHERE f_charbig = 'was inserted';
18366COMMIT WORK;
18367SET @@session.sql_mode = 'traditional';
18368Warnings:
18369Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18370SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18371INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18372SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18373'', '', 'was inserted' FROM t0_template
18374WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18375ERROR 22012: Division by 0
18376COMMIT;
18377
18378# check transactions-8 success: 	1
18379# INFO: Storage engine used for t1 seems to be able to revert
18380#       changes made by the failing statement.
18381SET @@session.sql_mode = '';
18382Warnings:
18383Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18384SET AUTOCOMMIT= 1;
18385DELETE FROM t1 WHERE f_charbig = 'was inserted';
18386COMMIT WORK;
18387UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18388
18389# check special-1 success: 	1
18390UPDATE t1 SET f_charbig = '';
18391
18392# check special-2 success: 	1
18393UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18394INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18395SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18396WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18397INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18398SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18399'just inserted' FROM t0_template
18400WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18401CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18402BEGIN
18403UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18404f_charbig = 'updated by trigger'
18405      WHERE f_int1 = new.f_int1;
18406END|
18407INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18408SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18409WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18410
18411# check trigger-1 success: 	1
18412DROP TRIGGER trg_1;
18413UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18414f_int2 = CAST(f_char1 AS SIGNED INT),
18415f_charbig = 'just inserted'
18416   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18417DELETE FROM t0_aux
18418WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18419INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18420SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18421'just inserted' FROM t0_template
18422WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18423CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18424BEGIN
18425UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18426f_charbig = 'updated by trigger'
18427      WHERE f_int1 = new.f_int1;
18428END|
18429INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18430SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18431WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18432
18433# check trigger-2 success: 	1
18434DROP TRIGGER trg_1;
18435UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18436f_int2 = CAST(f_char1 AS SIGNED INT),
18437f_charbig = 'just inserted'
18438   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18439DELETE FROM t0_aux
18440WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18441INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18442SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18443'just inserted' FROM t0_template
18444WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18445CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18446BEGIN
18447UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18448f_charbig = 'updated by trigger'
18449      WHERE f_int1 = new.f_int1;
18450END|
18451UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18452WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18453
18454# check trigger-3 success: 	1
18455DROP TRIGGER trg_1;
18456UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18457f_int2 = CAST(f_char1 AS SIGNED INT),
18458f_charbig = 'just inserted'
18459   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18460DELETE FROM t0_aux
18461WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18462INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18463SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18464'just inserted' FROM t0_template
18465WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18466CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18467BEGIN
18468UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18469f_charbig = 'updated by trigger'
18470      WHERE f_int1 = - old.f_int1;
18471END|
18472UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18473WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18474
18475# check trigger-4 success: 	1
18476DROP TRIGGER trg_1;
18477UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18478f_int2 = CAST(f_char1 AS SIGNED INT),
18479f_charbig = 'just inserted'
18480   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18481DELETE FROM t0_aux
18482WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18483INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18484SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18485'just inserted' FROM t0_template
18486WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18487CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18488BEGIN
18489UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18490f_charbig = 'updated by trigger'
18491      WHERE f_int1 = new.f_int1;
18492END|
18493UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18494WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18495
18496# check trigger-5 success: 	1
18497DROP TRIGGER trg_1;
18498UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18499f_int2 = CAST(f_char1 AS SIGNED INT),
18500f_charbig = 'just inserted'
18501   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18502DELETE FROM t0_aux
18503WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18504INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18505SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18506'just inserted' FROM t0_template
18507WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18508CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
18509BEGIN
18510UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18511f_charbig = 'updated by trigger'
18512      WHERE f_int1 = - old.f_int1;
18513END|
18514UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18515WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18516
18517# check trigger-6 success: 	1
18518DROP TRIGGER trg_1;
18519UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18520f_int2 = CAST(f_char1 AS SIGNED INT),
18521f_charbig = 'just inserted'
18522   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18523DELETE FROM t0_aux
18524WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18525INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18526SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18527'just inserted' FROM t0_template
18528WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18529CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
18530BEGIN
18531UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18532f_charbig = 'updated by trigger'
18533      WHERE f_int1 = - old.f_int1;
18534END|
18535DELETE FROM t0_aux
18536WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18537
18538# check trigger-7 success: 	1
18539DROP TRIGGER trg_1;
18540UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18541f_int2 = CAST(f_char1 AS SIGNED INT),
18542f_charbig = 'just inserted'
18543   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18544DELETE FROM t0_aux
18545WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18546INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18547SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18548'just inserted' FROM t0_template
18549WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18550CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
18551BEGIN
18552UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18553f_charbig = 'updated by trigger'
18554      WHERE f_int1 = - old.f_int1;
18555END|
18556DELETE FROM t0_aux
18557WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18558
18559# check trigger-8 success: 	1
18560DROP TRIGGER trg_1;
18561UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18562f_int2 = CAST(f_char1 AS SIGNED INT),
18563f_charbig = 'just inserted'
18564   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18565DELETE FROM t0_aux
18566WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18567DELETE FROM t1
18568WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18569CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18570BEGIN
18571SET new.f_int1 = old.f_int1 + @max_row,
18572new.f_int2 = old.f_int2 - @max_row,
18573new.f_charbig = '####updated per update trigger####';
18574END|
18575UPDATE t1
18576SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18577f_charbig = '####updated per update statement itself####';
18578
18579# check trigger-9 success: 	1
18580DROP TRIGGER trg_2;
18581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18582f_int2 = CAST(f_char1 AS SIGNED INT),
18583f_charbig = CONCAT('===',f_char1,'===');
18584CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
18585BEGIN
18586SET new.f_int1 = new.f_int1 + @max_row,
18587new.f_int2 = new.f_int2 - @max_row,
18588new.f_charbig = '####updated per update trigger####';
18589END|
18590UPDATE t1
18591SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
18592f_charbig = '####updated per update statement itself####';
18593
18594# check trigger-10 success: 	1
18595DROP TRIGGER trg_2;
18596UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18597f_int2 = CAST(f_char1 AS SIGNED INT),
18598f_charbig = CONCAT('===',f_char1,'===');
18599CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18600BEGIN
18601SET new.f_int1 = @my_max1 + @counter,
18602new.f_int2 = @my_min2 - @counter,
18603new.f_charbig = '####updated per insert trigger####';
18604SET @counter = @counter + 1;
18605END|
18606SET @counter = 1;
18607SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18608INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18609SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18610CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18612ORDER BY f_int1;
18613DROP TRIGGER trg_3;
18614
18615# check trigger-11 success: 	1
18616DELETE FROM t1
18617WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18618AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18619AND f_charbig = '####updated per insert trigger####';
18620CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
18621BEGIN
18622SET new.f_int1 = @my_max1 + @counter,
18623new.f_int2 = @my_min2 - @counter,
18624new.f_charbig = '####updated per insert trigger####';
18625SET @counter = @counter + 1;
18626END|
18627SET @counter = 1;
18628SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
18629INSERT INTO t1 (f_char1, f_char2, f_charbig)
18630SELECT CAST(f_int1 AS CHAR),
18631CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
18632WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
18633ORDER BY f_int1;
18634DROP TRIGGER trg_3;
18635
18636# check trigger-12 success: 	1
18637DELETE FROM t1
18638WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
18639AND f_int2 <> CAST(f_char1 AS SIGNED INT)
18640AND f_charbig = '####updated per insert trigger####';
18641ANALYZE  TABLE t1;
18642Table	Op	Msg_type	Msg_text
18643test.t1	analyze	status	OK
18644CHECK    TABLE t1 EXTENDED;
18645Table	Op	Msg_type	Msg_text
18646test.t1	check	status	OK
18647CHECKSUM TABLE t1 EXTENDED;
18648Table	Checksum
18649test.t1	<some_value>
18650OPTIMIZE TABLE t1;
18651Table	Op	Msg_type	Msg_text
18652test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
18653test.t1	optimize	status	OK
18654# check layout success:    1
18655REPAIR   TABLE t1 EXTENDED;
18656Table	Op	Msg_type	Msg_text
18657test.t1	repair	status	OK
18658# check layout success:    1
18659TRUNCATE t1;
18660
18661# check TRUNCATE success: 	1
18662# check layout success:    1
18663# End usability test (inc/partition_check.inc)
18664DROP TABLE t1;
18665CREATE TABLE t1 (
18666f_int1 INTEGER,
18667f_int2 INTEGER,
18668f_char1 CHAR(20),
18669f_char2 CHAR(20),
18670f_charbig VARCHAR(1000)
18671, UNIQUE INDEX uidx (f_int2,f_int1)
18672)
18673PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
18674(PARTITION part1 VALUES LESS THAN (0)
18675(SUBPARTITION subpart11, SUBPARTITION subpart12),
18676PARTITION part2 VALUES LESS THAN (5)
18677(SUBPARTITION subpart21, SUBPARTITION subpart22),
18678PARTITION part3 VALUES LESS THAN (10)
18679(SUBPARTITION subpart31, SUBPARTITION subpart32),
18680PARTITION part4 VALUES LESS THAN (2147483646)
18681(SUBPARTITION subpart41, SUBPARTITION subpart42));
18682INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18683SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18684WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
18685ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
18686INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18687SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
18688WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
18689# Start usability test (inc/partition_check.inc)
18690create_command
18691SHOW CREATE TABLE t1;
18692Table	Create Table
18693t1	CREATE TABLE `t1` (
18694  `f_int1` bigint(20) DEFAULT NULL,
18695  `f_int2` bigint(20) DEFAULT NULL,
18696  `f_char1` char(20) DEFAULT NULL,
18697  `f_char2` char(20) DEFAULT NULL,
18698  `f_charbig` varchar(1000) DEFAULT NULL,
18699  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
18700) ENGINE=InnoDB DEFAULT CHARSET=latin1
18701/*!50100 PARTITION BY RANGE (f_int1)
18702SUBPARTITION BY KEY (f_int2)
18703(PARTITION part1 VALUES LESS THAN (0)
18704 (SUBPARTITION subpart11 ENGINE = InnoDB,
18705  SUBPARTITION subpart12 ENGINE = InnoDB),
18706 PARTITION part2 VALUES LESS THAN (5)
18707 (SUBPARTITION subpart21 ENGINE = InnoDB,
18708  SUBPARTITION subpart22 ENGINE = InnoDB),
18709 PARTITION part3 VALUES LESS THAN (10)
18710 (SUBPARTITION subpart31 ENGINE = InnoDB,
18711  SUBPARTITION subpart32 ENGINE = InnoDB),
18712 PARTITION part4 VALUES LESS THAN (2147483646)
18713 (SUBPARTITION subpart41 ENGINE = InnoDB,
18714  SUBPARTITION subpart42 ENGINE = InnoDB)) */
18715
18716# check prerequisites-1 success:    1
18717# check COUNT(*) success:    1
18718# check MIN/MAX(f_int1) success:    1
18719# check MIN/MAX(f_int2) success:    1
18720INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18721SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
18722CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
18723WHERE f_int1 IN (2,3);
18724ERROR 23000: Duplicate entry '2-2' for key 'uidx'
18725# check prerequisites-3 success:    1
18726# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
18727INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18728SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18729CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18730WHERE f_int1 IN (2,3);
18731DELETE FROM t1 WHERE f_charbig = 'delete me';
18732INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18733SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
18734CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
18735WHERE f_int1 IN (2,3);
18736DELETE FROM t1 WHERE f_charbig = 'delete me';
18737# check read via f_int1 success: 1
18738# check read via f_int2 success: 1
18739
18740# check multiple-1 success: 	1
18741DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
18742
18743# check multiple-2 success: 	1
18744INSERT INTO t1 SELECT * FROM t0_template
18745WHERE MOD(f_int1,3) = 0;
18746
18747# check multiple-3 success: 	1
18748UPDATE t1 SET f_int1 = f_int1 + @max_row
18749WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
18750AND @max_row_div2 + @max_row_div4;
18751
18752# check multiple-4 success: 	1
18753DELETE FROM t1
18754WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
18755AND @max_row_div2 + @max_row_div4 + @max_row;
18756
18757# check multiple-5 success: 	1
18758SELECT COUNT(*) INTO @try_count FROM t0_template
18759WHERE MOD(f_int1,3) = 0
18760AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18761SELECT COUNT(*) INTO @clash_count
18762FROM t1 INNER JOIN t0_template USING(f_int1)
18763WHERE MOD(f_int1,3) = 0
18764AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18765SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
18766INSERT INTO t1
18767SET f_int1 = @cur_value , f_int2 = @cur_value,
18768f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18769f_charbig = '#SINGLE#';
18770
18771# check single-1 success: 	1
18772SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
18773INSERT INTO t1
18774SET f_int1 = @cur_value , f_int2 = @cur_value,
18775f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
18776f_charbig = '#SINGLE#';
18777
18778# check single-2 success: 	1
18779SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
18780SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
18781UPDATE t1 SET f_int1 = @cur_value2
18782WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
18783
18784# check single-3 success: 	1
18785SET @cur_value1= -1;
18786SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
18787UPDATE t1 SET f_int1 = @cur_value1
18788WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
18789
18790# check single-4 success: 	1
18791SELECT MAX(f_int1) INTO @cur_value FROM t1;
18792DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
18793
18794# check single-5 success: 	1
18795DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
18796
18797# check single-6 success: 	1
18798INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
18799ERROR HY000: Table has no partition for value 2147483647
18800DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
18801INSERT t1 SET f_int1 = 0 , f_int2 = 0,
18802f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
18803f_charbig = '#NULL#';
18804INSERT INTO t1
18805SET f_int1 = NULL , f_int2 = -@max_row,
18806f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
18807f_charbig = '#NULL#';
18808# check null success:    1
18809
18810# check null-1 success: 	1
18811UPDATE t1 SET f_int1 = -@max_row
18812WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18813AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18814
18815# check null-2 success: 	1
18816UPDATE t1 SET f_int1 = NULL
18817WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18818AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18819
18820# check null-3 success: 	1
18821DELETE FROM t1
18822WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
18823AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
18824
18825# check null-4 success: 	1
18826DELETE FROM t1
18827WHERE f_int1 = 0 AND f_int2 = 0
18828AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
18829AND f_charbig = '#NULL#';
18830INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18831SELECT f_int1, f_int1, '', '', 'was inserted'
18832   FROM t0_template source_tab
18833WHERE MOD(f_int1,3) = 0
18834AND f_int1 BETWEEN @max_row_div2 AND @max_row
18835ON DUPLICATE KEY
18836UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
18837f_int2 = 2 * @max_row + source_tab.f_int1,
18838f_charbig = 'was updated';
18839
18840# check unique-1-a success: 	1
18841
18842# check unique-1-b success: 	1
18843DELETE FROM t1 WHERE f_charbig = 'was inserted';
18844UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18845f_int2 = CAST(f_char1 AS SIGNED INT),
18846f_charbig = CONCAT('===',f_char1,'===')
18847WHERE f_charbig = 'was updated';
18848REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18849SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
18850   FROM t0_template source_tab
18851WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
18852
18853# check replace success: 	1
18854DELETE FROM t1
18855WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
18856DELETE FROM t1
18857WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
18858f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
18859UPDATE t1 SET f_int2 = f_int1,
18860f_char1 = CAST(f_int1 AS CHAR),
18861f_char2 = CAST(f_int1 AS CHAR),
18862f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
18863WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
18864SET AUTOCOMMIT= 0;
18865INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18866SELECT f_int1, f_int1, '', '', 'was inserted'
18867FROM t0_template source_tab
18868WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18869
18870# check transactions-1 success: 	1
18871COMMIT WORK;
18872
18873# check transactions-2 success: 	1
18874ROLLBACK WORK;
18875
18876# check transactions-3 success: 	1
18877DELETE FROM t1 WHERE f_charbig = 'was inserted';
18878COMMIT WORK;
18879ROLLBACK WORK;
18880
18881# check transactions-4 success: 	1
18882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18883SELECT f_int1, f_int1, '', '', 'was inserted'
18884FROM t0_template source_tab
18885WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18886
18887# check transactions-5 success: 	1
18888ROLLBACK WORK;
18889
18890# check transactions-6 success: 	1
18891# INFO: Storage engine used for t1 seems to be transactional.
18892COMMIT;
18893
18894# check transactions-7 success: 	1
18895DELETE FROM t1 WHERE f_charbig = 'was inserted';
18896COMMIT WORK;
18897SET @@session.sql_mode = 'traditional';
18898Warnings:
18899Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18900SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
18901INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
18902SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
18903'', '', 'was inserted' FROM t0_template
18904WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
18905ERROR 22012: Division by 0
18906COMMIT;
18907
18908# check transactions-8 success: 	1
18909# INFO: Storage engine used for t1 seems to be able to revert
18910#       changes made by the failing statement.
18911SET @@session.sql_mode = '';
18912Warnings:
18913Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
18914SET AUTOCOMMIT= 1;
18915DELETE FROM t1 WHERE f_charbig = 'was inserted';
18916COMMIT WORK;
18917UPDATE t1 SET f_charbig = REPEAT('b', 1000);
18918
18919# check special-1 success: 	1
18920UPDATE t1 SET f_charbig = '';
18921
18922# check special-2 success: 	1
18923UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
18924INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
18925SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
18926WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18927INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18928SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18929'just inserted' FROM t0_template
18930WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18931CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
18932BEGIN
18933UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18934f_charbig = 'updated by trigger'
18935      WHERE f_int1 = new.f_int1;
18936END|
18937INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18938SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18939WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18940
18941# check trigger-1 success: 	1
18942DROP TRIGGER trg_1;
18943UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18944f_int2 = CAST(f_char1 AS SIGNED INT),
18945f_charbig = 'just inserted'
18946   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18947DELETE FROM t0_aux
18948WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18949INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18950SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18951'just inserted' FROM t0_template
18952WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18953CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
18954BEGIN
18955UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18956f_charbig = 'updated by trigger'
18957      WHERE f_int1 = new.f_int1;
18958END|
18959INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18960SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
18961WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18962
18963# check trigger-2 success: 	1
18964DROP TRIGGER trg_1;
18965UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18966f_int2 = CAST(f_char1 AS SIGNED INT),
18967f_charbig = 'just inserted'
18968   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18969DELETE FROM t0_aux
18970WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18971INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18972SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18973'just inserted' FROM t0_template
18974WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18975CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18976BEGIN
18977UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18978f_charbig = 'updated by trigger'
18979      WHERE f_int1 = new.f_int1;
18980END|
18981UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
18982WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
18983
18984# check trigger-3 success: 	1
18985DROP TRIGGER trg_1;
18986UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
18987f_int2 = CAST(f_char1 AS SIGNED INT),
18988f_charbig = 'just inserted'
18989   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
18990DELETE FROM t0_aux
18991WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18992INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
18993SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
18994'just inserted' FROM t0_template
18995WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
18996CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
18997BEGIN
18998UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
18999f_charbig = 'updated by trigger'
19000      WHERE f_int1 = - old.f_int1;
19001END|
19002UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19003WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19004
19005# check trigger-4 success: 	1
19006DROP TRIGGER trg_1;
19007UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19008f_int2 = CAST(f_char1 AS SIGNED INT),
19009f_charbig = 'just inserted'
19010   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19011DELETE FROM t0_aux
19012WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19013INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19014SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19015'just inserted' FROM t0_template
19016WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19017CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19018BEGIN
19019UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19020f_charbig = 'updated by trigger'
19021      WHERE f_int1 = new.f_int1;
19022END|
19023UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19024WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19025
19026# check trigger-5 success: 	1
19027DROP TRIGGER trg_1;
19028UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19029f_int2 = CAST(f_char1 AS SIGNED INT),
19030f_charbig = 'just inserted'
19031   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19032DELETE FROM t0_aux
19033WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19034INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19035SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19036'just inserted' FROM t0_template
19037WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19038CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19039BEGIN
19040UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19041f_charbig = 'updated by trigger'
19042      WHERE f_int1 = - old.f_int1;
19043END|
19044UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19045WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19046
19047# check trigger-6 success: 	1
19048DROP TRIGGER trg_1;
19049UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19050f_int2 = CAST(f_char1 AS SIGNED INT),
19051f_charbig = 'just inserted'
19052   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19053DELETE FROM t0_aux
19054WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19055INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19056SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19057'just inserted' FROM t0_template
19058WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19059CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19060BEGIN
19061UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19062f_charbig = 'updated by trigger'
19063      WHERE f_int1 = - old.f_int1;
19064END|
19065DELETE FROM t0_aux
19066WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19067
19068# check trigger-7 success: 	1
19069DROP TRIGGER trg_1;
19070UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19071f_int2 = CAST(f_char1 AS SIGNED INT),
19072f_charbig = 'just inserted'
19073   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19074DELETE FROM t0_aux
19075WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19076INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19077SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19078'just inserted' FROM t0_template
19079WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19080CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19081BEGIN
19082UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19083f_charbig = 'updated by trigger'
19084      WHERE f_int1 = - old.f_int1;
19085END|
19086DELETE FROM t0_aux
19087WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19088
19089# check trigger-8 success: 	1
19090DROP TRIGGER trg_1;
19091UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19092f_int2 = CAST(f_char1 AS SIGNED INT),
19093f_charbig = 'just inserted'
19094   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19095DELETE FROM t0_aux
19096WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19097DELETE FROM t1
19098WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19099CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19100BEGIN
19101SET new.f_int1 = old.f_int1 + @max_row,
19102new.f_int2 = old.f_int2 - @max_row,
19103new.f_charbig = '####updated per update trigger####';
19104END|
19105UPDATE t1
19106SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19107f_charbig = '####updated per update statement itself####';
19108
19109# check trigger-9 success: 	1
19110DROP TRIGGER trg_2;
19111UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19112f_int2 = CAST(f_char1 AS SIGNED INT),
19113f_charbig = CONCAT('===',f_char1,'===');
19114CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19115BEGIN
19116SET new.f_int1 = new.f_int1 + @max_row,
19117new.f_int2 = new.f_int2 - @max_row,
19118new.f_charbig = '####updated per update trigger####';
19119END|
19120UPDATE t1
19121SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19122f_charbig = '####updated per update statement itself####';
19123
19124# check trigger-10 success: 	1
19125DROP TRIGGER trg_2;
19126UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19127f_int2 = CAST(f_char1 AS SIGNED INT),
19128f_charbig = CONCAT('===',f_char1,'===');
19129CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19130BEGIN
19131SET new.f_int1 = @my_max1 + @counter,
19132new.f_int2 = @my_min2 - @counter,
19133new.f_charbig = '####updated per insert trigger####';
19134SET @counter = @counter + 1;
19135END|
19136SET @counter = 1;
19137SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19138INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19139SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19140CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19141WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19142ORDER BY f_int1;
19143DROP TRIGGER trg_3;
19144
19145# check trigger-11 success: 	1
19146DELETE FROM t1
19147WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19148AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19149AND f_charbig = '####updated per insert trigger####';
19150CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19151BEGIN
19152SET new.f_int1 = @my_max1 + @counter,
19153new.f_int2 = @my_min2 - @counter,
19154new.f_charbig = '####updated per insert trigger####';
19155SET @counter = @counter + 1;
19156END|
19157SET @counter = 1;
19158SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19159INSERT INTO t1 (f_char1, f_char2, f_charbig)
19160SELECT CAST(f_int1 AS CHAR),
19161CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19162WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19163ORDER BY f_int1;
19164DROP TRIGGER trg_3;
19165
19166# check trigger-12 success: 	1
19167DELETE FROM t1
19168WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19169AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19170AND f_charbig = '####updated per insert trigger####';
19171ANALYZE  TABLE t1;
19172Table	Op	Msg_type	Msg_text
19173test.t1	analyze	status	OK
19174CHECK    TABLE t1 EXTENDED;
19175Table	Op	Msg_type	Msg_text
19176test.t1	check	status	OK
19177CHECKSUM TABLE t1 EXTENDED;
19178Table	Checksum
19179test.t1	<some_value>
19180OPTIMIZE TABLE t1;
19181Table	Op	Msg_type	Msg_text
19182test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
19183test.t1	optimize	status	OK
19184# check layout success:    1
19185REPAIR   TABLE t1 EXTENDED;
19186Table	Op	Msg_type	Msg_text
19187test.t1	repair	status	OK
19188# check layout success:    1
19189TRUNCATE t1;
19190
19191# check TRUNCATE success: 	1
19192# check layout success:    1
19193# End usability test (inc/partition_check.inc)
19194DROP TABLE t1;
19195CREATE TABLE t1 (
19196f_int1 INTEGER,
19197f_int2 INTEGER,
19198f_char1 CHAR(20),
19199f_char2 CHAR(20),
19200f_charbig VARCHAR(1000)
19201, UNIQUE INDEX uidx (f_int2,f_int1)
19202)
19203PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
19204(PARTITION part1 VALUES IN (0)
19205(SUBPARTITION sp11, SUBPARTITION sp12),
19206PARTITION part2 VALUES IN (1)
19207(SUBPARTITION sp21, SUBPARTITION sp22),
19208PARTITION part3 VALUES IN (2)
19209(SUBPARTITION sp31, SUBPARTITION sp32),
19210PARTITION part4 VALUES IN (NULL)
19211(SUBPARTITION sp41, SUBPARTITION sp42));
19212INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19213SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19214WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19215ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
19216INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19217SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19218WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19219# Start usability test (inc/partition_check.inc)
19220create_command
19221SHOW CREATE TABLE t1;
19222Table	Create Table
19223t1	CREATE TABLE `t1` (
19224  `f_int1` bigint(20) DEFAULT NULL,
19225  `f_int2` bigint(20) DEFAULT NULL,
19226  `f_char1` char(20) DEFAULT NULL,
19227  `f_char2` char(20) DEFAULT NULL,
19228  `f_charbig` varchar(1000) DEFAULT NULL,
19229  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
19230) ENGINE=InnoDB DEFAULT CHARSET=latin1
19231/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3)))
19232SUBPARTITION BY HASH (f_int2 + 1)
19233(PARTITION part1 VALUES IN (0)
19234 (SUBPARTITION sp11 ENGINE = InnoDB,
19235  SUBPARTITION sp12 ENGINE = InnoDB),
19236 PARTITION part2 VALUES IN (1)
19237 (SUBPARTITION sp21 ENGINE = InnoDB,
19238  SUBPARTITION sp22 ENGINE = InnoDB),
19239 PARTITION part3 VALUES IN (2)
19240 (SUBPARTITION sp31 ENGINE = InnoDB,
19241  SUBPARTITION sp32 ENGINE = InnoDB),
19242 PARTITION part4 VALUES IN (NULL)
19243 (SUBPARTITION sp41 ENGINE = InnoDB,
19244  SUBPARTITION sp42 ENGINE = InnoDB)) */
19245
19246# check prerequisites-1 success:    1
19247# check COUNT(*) success:    1
19248# check MIN/MAX(f_int1) success:    1
19249# check MIN/MAX(f_int2) success:    1
19250INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19251SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19252CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19253WHERE f_int1 IN (2,3);
19254ERROR 23000: Duplicate entry '2-2' for key 'uidx'
19255# check prerequisites-3 success:    1
19256# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19257INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19258SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19259CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19260WHERE f_int1 IN (2,3);
19261DELETE FROM t1 WHERE f_charbig = 'delete me';
19262INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19263SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19264CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19265WHERE f_int1 IN (2,3);
19266DELETE FROM t1 WHERE f_charbig = 'delete me';
19267# check read via f_int1 success: 1
19268# check read via f_int2 success: 1
19269
19270# check multiple-1 success: 	1
19271DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19272
19273# check multiple-2 success: 	1
19274INSERT INTO t1 SELECT * FROM t0_template
19275WHERE MOD(f_int1,3) = 0;
19276
19277# check multiple-3 success: 	1
19278UPDATE t1 SET f_int1 = f_int1 + @max_row
19279WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19280AND @max_row_div2 + @max_row_div4;
19281
19282# check multiple-4 success: 	1
19283DELETE FROM t1
19284WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19285AND @max_row_div2 + @max_row_div4 + @max_row;
19286
19287# check multiple-5 success: 	1
19288SELECT COUNT(*) INTO @try_count FROM t0_template
19289WHERE MOD(f_int1,3) = 0
19290AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19291SELECT COUNT(*) INTO @clash_count
19292FROM t1 INNER JOIN t0_template USING(f_int1)
19293WHERE MOD(f_int1,3) = 0
19294AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19295SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19296INSERT INTO t1
19297SET f_int1 = @cur_value , f_int2 = @cur_value,
19298f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19299f_charbig = '#SINGLE#';
19300
19301# check single-1 success: 	1
19302SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19303INSERT INTO t1
19304SET f_int1 = @cur_value , f_int2 = @cur_value,
19305f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19306f_charbig = '#SINGLE#';
19307
19308# check single-2 success: 	1
19309SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19310SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19311UPDATE t1 SET f_int1 = @cur_value2
19312WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19313
19314# check single-3 success: 	1
19315SET @cur_value1= -1;
19316SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19317UPDATE t1 SET f_int1 = @cur_value1
19318WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19319
19320# check single-4 success: 	1
19321SELECT MAX(f_int1) INTO @cur_value FROM t1;
19322DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19323
19324# check single-5 success: 	1
19325DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19326
19327# check single-6 success: 	1
19328INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19329
19330# check single-7 success: 	1
19331DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19332DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19333INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19334f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19335f_charbig = '#NULL#';
19336INSERT INTO t1
19337SET f_int1 = NULL , f_int2 = -@max_row,
19338f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19339f_charbig = '#NULL#';
19340# check null success:    1
19341
19342# check null-1 success: 	1
19343UPDATE t1 SET f_int1 = -@max_row
19344WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19345AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19346
19347# check null-2 success: 	1
19348UPDATE t1 SET f_int1 = NULL
19349WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19350AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19351
19352# check null-3 success: 	1
19353DELETE FROM t1
19354WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19355AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19356
19357# check null-4 success: 	1
19358DELETE FROM t1
19359WHERE f_int1 = 0 AND f_int2 = 0
19360AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19361AND f_charbig = '#NULL#';
19362INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19363SELECT f_int1, f_int1, '', '', 'was inserted'
19364   FROM t0_template source_tab
19365WHERE MOD(f_int1,3) = 0
19366AND f_int1 BETWEEN @max_row_div2 AND @max_row
19367ON DUPLICATE KEY
19368UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19369f_int2 = 2 * @max_row + source_tab.f_int1,
19370f_charbig = 'was updated';
19371
19372# check unique-1-a success: 	1
19373
19374# check unique-1-b success: 	1
19375DELETE FROM t1 WHERE f_charbig = 'was inserted';
19376UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19377f_int2 = CAST(f_char1 AS SIGNED INT),
19378f_charbig = CONCAT('===',f_char1,'===')
19379WHERE f_charbig = 'was updated';
19380REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19381SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19382   FROM t0_template source_tab
19383WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19384
19385# check replace success: 	1
19386DELETE FROM t1
19387WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19388DELETE FROM t1
19389WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19390f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19391UPDATE t1 SET f_int2 = f_int1,
19392f_char1 = CAST(f_int1 AS CHAR),
19393f_char2 = CAST(f_int1 AS CHAR),
19394f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19395WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19396SET AUTOCOMMIT= 0;
19397INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19398SELECT f_int1, f_int1, '', '', 'was inserted'
19399FROM t0_template source_tab
19400WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19401
19402# check transactions-1 success: 	1
19403COMMIT WORK;
19404
19405# check transactions-2 success: 	1
19406ROLLBACK WORK;
19407
19408# check transactions-3 success: 	1
19409DELETE FROM t1 WHERE f_charbig = 'was inserted';
19410COMMIT WORK;
19411ROLLBACK WORK;
19412
19413# check transactions-4 success: 	1
19414INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19415SELECT f_int1, f_int1, '', '', 'was inserted'
19416FROM t0_template source_tab
19417WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19418
19419# check transactions-5 success: 	1
19420ROLLBACK WORK;
19421
19422# check transactions-6 success: 	1
19423# INFO: Storage engine used for t1 seems to be transactional.
19424COMMIT;
19425
19426# check transactions-7 success: 	1
19427DELETE FROM t1 WHERE f_charbig = 'was inserted';
19428COMMIT WORK;
19429SET @@session.sql_mode = 'traditional';
19430Warnings:
19431Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19432SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19433INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19434SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19435'', '', 'was inserted' FROM t0_template
19436WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19437ERROR 22012: Division by 0
19438COMMIT;
19439
19440# check transactions-8 success: 	1
19441# INFO: Storage engine used for t1 seems to be able to revert
19442#       changes made by the failing statement.
19443SET @@session.sql_mode = '';
19444Warnings:
19445Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19446SET AUTOCOMMIT= 1;
19447DELETE FROM t1 WHERE f_charbig = 'was inserted';
19448COMMIT WORK;
19449UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19450
19451# check special-1 success: 	1
19452UPDATE t1 SET f_charbig = '';
19453
19454# check special-2 success: 	1
19455UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19456INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19457SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19458WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19459INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19460SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19461'just inserted' FROM t0_template
19462WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19463CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19464BEGIN
19465UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19466f_charbig = 'updated by trigger'
19467      WHERE f_int1 = new.f_int1;
19468END|
19469INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19470SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19471WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19472
19473# check trigger-1 success: 	1
19474DROP TRIGGER trg_1;
19475UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19476f_int2 = CAST(f_char1 AS SIGNED INT),
19477f_charbig = 'just inserted'
19478   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19479DELETE FROM t0_aux
19480WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19481INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19482SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19483'just inserted' FROM t0_template
19484WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19485CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
19486BEGIN
19487UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19488f_charbig = 'updated by trigger'
19489      WHERE f_int1 = new.f_int1;
19490END|
19491INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19492SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19493WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19494
19495# check trigger-2 success: 	1
19496DROP TRIGGER trg_1;
19497UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19498f_int2 = CAST(f_char1 AS SIGNED INT),
19499f_charbig = 'just inserted'
19500   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19501DELETE FROM t0_aux
19502WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19503INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19504SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19505'just inserted' FROM t0_template
19506WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19507CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19508BEGIN
19509UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19510f_charbig = 'updated by trigger'
19511      WHERE f_int1 = new.f_int1;
19512END|
19513UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19514WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19515
19516# check trigger-3 success: 	1
19517DROP TRIGGER trg_1;
19518UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19519f_int2 = CAST(f_char1 AS SIGNED INT),
19520f_charbig = 'just inserted'
19521   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19522DELETE FROM t0_aux
19523WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19524INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19525SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19526'just inserted' FROM t0_template
19527WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19528CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
19529BEGIN
19530UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19531f_charbig = 'updated by trigger'
19532      WHERE f_int1 = - old.f_int1;
19533END|
19534UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19535WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19536
19537# check trigger-4 success: 	1
19538DROP TRIGGER trg_1;
19539UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19540f_int2 = CAST(f_char1 AS SIGNED INT),
19541f_charbig = 'just inserted'
19542   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19543DELETE FROM t0_aux
19544WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19545INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19546SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19547'just inserted' FROM t0_template
19548WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19549CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19550BEGIN
19551UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19552f_charbig = 'updated by trigger'
19553      WHERE f_int1 = new.f_int1;
19554END|
19555UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19556WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19557
19558# check trigger-5 success: 	1
19559DROP TRIGGER trg_1;
19560UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19561f_int2 = CAST(f_char1 AS SIGNED INT),
19562f_charbig = 'just inserted'
19563   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19564DELETE FROM t0_aux
19565WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19566INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19567SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19568'just inserted' FROM t0_template
19569WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19570CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
19571BEGIN
19572UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19573f_charbig = 'updated by trigger'
19574      WHERE f_int1 = - old.f_int1;
19575END|
19576UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
19577WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19578
19579# check trigger-6 success: 	1
19580DROP TRIGGER trg_1;
19581UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19582f_int2 = CAST(f_char1 AS SIGNED INT),
19583f_charbig = 'just inserted'
19584   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19585DELETE FROM t0_aux
19586WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19587INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19588SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19589'just inserted' FROM t0_template
19590WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19591CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
19592BEGIN
19593UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19594f_charbig = 'updated by trigger'
19595      WHERE f_int1 = - old.f_int1;
19596END|
19597DELETE FROM t0_aux
19598WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19599
19600# check trigger-7 success: 	1
19601DROP TRIGGER trg_1;
19602UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19603f_int2 = CAST(f_char1 AS SIGNED INT),
19604f_charbig = 'just inserted'
19605   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19606DELETE FROM t0_aux
19607WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19608INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19609SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19610'just inserted' FROM t0_template
19611WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19612CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
19613BEGIN
19614UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19615f_charbig = 'updated by trigger'
19616      WHERE f_int1 = - old.f_int1;
19617END|
19618DELETE FROM t0_aux
19619WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
19620
19621# check trigger-8 success: 	1
19622DROP TRIGGER trg_1;
19623UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19624f_int2 = CAST(f_char1 AS SIGNED INT),
19625f_charbig = 'just inserted'
19626   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19627DELETE FROM t0_aux
19628WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19629DELETE FROM t1
19630WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19631CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19632BEGIN
19633SET new.f_int1 = old.f_int1 + @max_row,
19634new.f_int2 = old.f_int2 - @max_row,
19635new.f_charbig = '####updated per update trigger####';
19636END|
19637UPDATE t1
19638SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19639f_charbig = '####updated per update statement itself####';
19640
19641# check trigger-9 success: 	1
19642DROP TRIGGER trg_2;
19643UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19644f_int2 = CAST(f_char1 AS SIGNED INT),
19645f_charbig = CONCAT('===',f_char1,'===');
19646CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
19647BEGIN
19648SET new.f_int1 = new.f_int1 + @max_row,
19649new.f_int2 = new.f_int2 - @max_row,
19650new.f_charbig = '####updated per update trigger####';
19651END|
19652UPDATE t1
19653SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
19654f_charbig = '####updated per update statement itself####';
19655
19656# check trigger-10 success: 	1
19657DROP TRIGGER trg_2;
19658UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19659f_int2 = CAST(f_char1 AS SIGNED INT),
19660f_charbig = CONCAT('===',f_char1,'===');
19661CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19662BEGIN
19663SET new.f_int1 = @my_max1 + @counter,
19664new.f_int2 = @my_min2 - @counter,
19665new.f_charbig = '####updated per insert trigger####';
19666SET @counter = @counter + 1;
19667END|
19668SET @counter = 1;
19669SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19670INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19671SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19672CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19673WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19674ORDER BY f_int1;
19675DROP TRIGGER trg_3;
19676
19677# check trigger-11 success: 	1
19678DELETE FROM t1
19679WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19680AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19681AND f_charbig = '####updated per insert trigger####';
19682CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
19683BEGIN
19684SET new.f_int1 = @my_max1 + @counter,
19685new.f_int2 = @my_min2 - @counter,
19686new.f_charbig = '####updated per insert trigger####';
19687SET @counter = @counter + 1;
19688END|
19689SET @counter = 1;
19690SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
19691INSERT INTO t1 (f_char1, f_char2, f_charbig)
19692SELECT CAST(f_int1 AS CHAR),
19693CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
19694WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
19695ORDER BY f_int1;
19696DROP TRIGGER trg_3;
19697
19698# check trigger-12 success: 	1
19699DELETE FROM t1
19700WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
19701AND f_int2 <> CAST(f_char1 AS SIGNED INT)
19702AND f_charbig = '####updated per insert trigger####';
19703ANALYZE  TABLE t1;
19704Table	Op	Msg_type	Msg_text
19705test.t1	analyze	status	OK
19706CHECK    TABLE t1 EXTENDED;
19707Table	Op	Msg_type	Msg_text
19708test.t1	check	status	OK
19709CHECKSUM TABLE t1 EXTENDED;
19710Table	Checksum
19711test.t1	<some_value>
19712OPTIMIZE TABLE t1;
19713Table	Op	Msg_type	Msg_text
19714test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
19715test.t1	optimize	status	OK
19716# check layout success:    1
19717REPAIR   TABLE t1 EXTENDED;
19718Table	Op	Msg_type	Msg_text
19719test.t1	repair	status	OK
19720# check layout success:    1
19721TRUNCATE t1;
19722
19723# check TRUNCATE success: 	1
19724# check layout success:    1
19725# End usability test (inc/partition_check.inc)
19726DROP TABLE t1;
19727CREATE TABLE t1 (
19728f_int1 INTEGER,
19729f_int2 INTEGER,
19730f_char1 CHAR(20),
19731f_char2 CHAR(20),
19732f_charbig VARCHAR(1000)
19733, UNIQUE INDEX uidx (f_int2,f_int1)
19734)
19735PARTITION BY LIST(ABS(MOD(f_int1,2)))
19736SUBPARTITION BY KEY(f_int2)  SUBPARTITIONS 3
19737(PARTITION part1 VALUES IN (0),
19738PARTITION part2 VALUES IN (1),
19739PARTITION part3 VALUES IN (NULL));
19740INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19741SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19742WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
19743ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
19744INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19745SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
19746WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
19747# Start usability test (inc/partition_check.inc)
19748create_command
19749SHOW CREATE TABLE t1;
19750Table	Create Table
19751t1	CREATE TABLE `t1` (
19752  `f_int1` bigint(20) DEFAULT NULL,
19753  `f_int2` bigint(20) DEFAULT NULL,
19754  `f_char1` char(20) DEFAULT NULL,
19755  `f_char2` char(20) DEFAULT NULL,
19756  `f_charbig` varchar(1000) DEFAULT NULL,
19757  UNIQUE KEY `uidx` (`f_int2`,`f_int1`)
19758) ENGINE=InnoDB DEFAULT CHARSET=latin1
19759/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2)))
19760SUBPARTITION BY KEY (f_int2)
19761SUBPARTITIONS 3
19762(PARTITION part1 VALUES IN (0) ENGINE = InnoDB,
19763 PARTITION part2 VALUES IN (1) ENGINE = InnoDB,
19764 PARTITION part3 VALUES IN (NULL) ENGINE = InnoDB) */
19765
19766# check prerequisites-1 success:    1
19767# check COUNT(*) success:    1
19768# check MIN/MAX(f_int1) success:    1
19769# check MIN/MAX(f_int2) success:    1
19770INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19771SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
19772CAST(f_int1 AS CHAR), 'delete me' FROM t0_template
19773WHERE f_int1 IN (2,3);
19774ERROR 23000: Duplicate entry '2-2' for key 'uidx'
19775# check prerequisites-3 success:    1
19776# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE
19777INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19778SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19779CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19780WHERE f_int1 IN (2,3);
19781DELETE FROM t1 WHERE f_charbig = 'delete me';
19782INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19783SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
19784CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template
19785WHERE f_int1 IN (2,3);
19786DELETE FROM t1 WHERE f_charbig = 'delete me';
19787# check read via f_int1 success: 1
19788# check read via f_int2 success: 1
19789
19790# check multiple-1 success: 	1
19791DELETE FROM t1 WHERE MOD(f_int1,3) = 0;
19792
19793# check multiple-2 success: 	1
19794INSERT INTO t1 SELECT * FROM t0_template
19795WHERE MOD(f_int1,3) = 0;
19796
19797# check multiple-3 success: 	1
19798UPDATE t1 SET f_int1 = f_int1 + @max_row
19799WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
19800AND @max_row_div2 + @max_row_div4;
19801
19802# check multiple-4 success: 	1
19803DELETE FROM t1
19804WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
19805AND @max_row_div2 + @max_row_div4 + @max_row;
19806
19807# check multiple-5 success: 	1
19808SELECT COUNT(*) INTO @try_count FROM t0_template
19809WHERE MOD(f_int1,3) = 0
19810AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19811SELECT COUNT(*) INTO @clash_count
19812FROM t1 INNER JOIN t0_template USING(f_int1)
19813WHERE MOD(f_int1,3) = 0
19814AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19815SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1;
19816INSERT INTO t1
19817SET f_int1 = @cur_value , f_int2 = @cur_value,
19818f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19819f_charbig = '#SINGLE#';
19820
19821# check single-1 success: 	1
19822SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1;
19823INSERT INTO t1
19824SET f_int1 = @cur_value , f_int2 = @cur_value,
19825f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
19826f_charbig = '#SINGLE#';
19827
19828# check single-2 success: 	1
19829SELECT MIN(f_int1) INTO @cur_value1 FROM t1;
19830SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
19831UPDATE t1 SET f_int1 = @cur_value2
19832WHERE  f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
19833
19834# check single-3 success: 	1
19835SET @cur_value1= -1;
19836SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
19837UPDATE t1 SET f_int1 = @cur_value1
19838WHERE  f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
19839
19840# check single-4 success: 	1
19841SELECT MAX(f_int1) INTO @cur_value FROM t1;
19842DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
19843
19844# check single-5 success: 	1
19845DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
19846
19847# check single-6 success: 	1
19848INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##';
19849
19850# check single-7 success: 	1
19851DELETE FROM t1 WHERE f_charbig = '#2147483647##';
19852DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0;
19853INSERT t1 SET f_int1 = 0 , f_int2 = 0,
19854f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR),
19855f_charbig = '#NULL#';
19856INSERT INTO t1
19857SET f_int1 = NULL , f_int2 = -@max_row,
19858f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
19859f_charbig = '#NULL#';
19860# check null success:    1
19861
19862# check null-1 success: 	1
19863UPDATE t1 SET f_int1 = -@max_row
19864WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19865AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19866
19867# check null-2 success: 	1
19868UPDATE t1 SET f_int1 = NULL
19869WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19870AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19871
19872# check null-3 success: 	1
19873DELETE FROM t1
19874WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
19875AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
19876
19877# check null-4 success: 	1
19878DELETE FROM t1
19879WHERE f_int1 = 0 AND f_int2 = 0
19880AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR)
19881AND f_charbig = '#NULL#';
19882INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19883SELECT f_int1, f_int1, '', '', 'was inserted'
19884   FROM t0_template source_tab
19885WHERE MOD(f_int1,3) = 0
19886AND f_int1 BETWEEN @max_row_div2 AND @max_row
19887ON DUPLICATE KEY
19888UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
19889f_int2 = 2 * @max_row + source_tab.f_int1,
19890f_charbig = 'was updated';
19891
19892# check unique-1-a success: 	1
19893
19894# check unique-1-b success: 	1
19895DELETE FROM t1 WHERE f_charbig = 'was inserted';
19896UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19897f_int2 = CAST(f_char1 AS SIGNED INT),
19898f_charbig = CONCAT('===',f_char1,'===')
19899WHERE f_charbig = 'was updated';
19900REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19901SELECT f_int1, - f_int1, '', '', 'was inserted or replaced'
19902   FROM t0_template source_tab
19903WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
19904
19905# check replace success: 	1
19906DELETE FROM t1
19907WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4;
19908DELETE FROM t1
19909WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND
19910f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row;
19911UPDATE t1 SET f_int2 = f_int1,
19912f_char1 = CAST(f_int1 AS CHAR),
19913f_char2 = CAST(f_int1 AS CHAR),
19914f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===')
19915WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2;
19916SET AUTOCOMMIT= 0;
19917INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19918SELECT f_int1, f_int1, '', '', 'was inserted'
19919FROM t0_template source_tab
19920WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19921
19922# check transactions-1 success: 	1
19923COMMIT WORK;
19924
19925# check transactions-2 success: 	1
19926ROLLBACK WORK;
19927
19928# check transactions-3 success: 	1
19929DELETE FROM t1 WHERE f_charbig = 'was inserted';
19930COMMIT WORK;
19931ROLLBACK WORK;
19932
19933# check transactions-4 success: 	1
19934INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19935SELECT f_int1, f_int1, '', '', 'was inserted'
19936FROM t0_template source_tab
19937WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19938
19939# check transactions-5 success: 	1
19940ROLLBACK WORK;
19941
19942# check transactions-6 success: 	1
19943# INFO: Storage engine used for t1 seems to be transactional.
19944COMMIT;
19945
19946# check transactions-7 success: 	1
19947DELETE FROM t1 WHERE f_charbig = 'was inserted';
19948COMMIT WORK;
19949SET @@session.sql_mode = 'traditional';
19950Warnings:
19951Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19952SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows;
19953INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
19954SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1,
19955'', '', 'was inserted' FROM t0_template
19956WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4;
19957ERROR 22012: Division by 0
19958COMMIT;
19959
19960# check transactions-8 success: 	1
19961# INFO: Storage engine used for t1 seems to be able to revert
19962#       changes made by the failing statement.
19963SET @@session.sql_mode = '';
19964Warnings:
19965Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
19966SET AUTOCOMMIT= 1;
19967DELETE FROM t1 WHERE f_charbig = 'was inserted';
19968COMMIT WORK;
19969UPDATE t1 SET f_charbig = REPEAT('b', 1000);
19970
19971# check special-1 success: 	1
19972UPDATE t1 SET f_charbig = '';
19973
19974# check special-2 success: 	1
19975UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===');
19976INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
19977SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template
19978WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19979INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19980SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
19981'just inserted' FROM t0_template
19982WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19983CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW
19984BEGIN
19985UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
19986f_charbig = 'updated by trigger'
19987      WHERE f_int1 = new.f_int1;
19988END|
19989INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
19990SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
19991WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
19992
19993# check trigger-1 success: 	1
19994DROP TRIGGER trg_1;
19995UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
19996f_int2 = CAST(f_char1 AS SIGNED INT),
19997f_charbig = 'just inserted'
19998   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
19999DELETE FROM t0_aux
20000WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20001INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20002SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20003'just inserted' FROM t0_template
20004WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20005CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW
20006BEGIN
20007UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20008f_charbig = 'updated by trigger'
20009      WHERE f_int1 = new.f_int1;
20010END|
20011INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20012SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
20013WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20014
20015# check trigger-2 success: 	1
20016DROP TRIGGER trg_1;
20017UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20018f_int2 = CAST(f_char1 AS SIGNED INT),
20019f_charbig = 'just inserted'
20020   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20021DELETE FROM t0_aux
20022WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20023INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20024SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20025'just inserted' FROM t0_template
20026WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20027CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20028BEGIN
20029UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20030f_charbig = 'updated by trigger'
20031      WHERE f_int1 = new.f_int1;
20032END|
20033UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20034WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20035
20036# check trigger-3 success: 	1
20037DROP TRIGGER trg_1;
20038UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20039f_int2 = CAST(f_char1 AS SIGNED INT),
20040f_charbig = 'just inserted'
20041   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20042DELETE FROM t0_aux
20043WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20044INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20045SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20046'just inserted' FROM t0_template
20047WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20048CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW
20049BEGIN
20050UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20051f_charbig = 'updated by trigger'
20052      WHERE f_int1 = - old.f_int1;
20053END|
20054UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20055WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20056
20057# check trigger-4 success: 	1
20058DROP TRIGGER trg_1;
20059UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20060f_int2 = CAST(f_char1 AS SIGNED INT),
20061f_charbig = 'just inserted'
20062   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20063DELETE FROM t0_aux
20064WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20065INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20066SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20067'just inserted' FROM t0_template
20068WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20069CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20070BEGIN
20071UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20072f_charbig = 'updated by trigger'
20073      WHERE f_int1 = new.f_int1;
20074END|
20075UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20076WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20077
20078# check trigger-5 success: 	1
20079DROP TRIGGER trg_1;
20080UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20081f_int2 = CAST(f_char1 AS SIGNED INT),
20082f_charbig = 'just inserted'
20083   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20084DELETE FROM t0_aux
20085WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20086INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20087SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20088'just inserted' FROM t0_template
20089WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20090CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW
20091BEGIN
20092UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20093f_charbig = 'updated by trigger'
20094      WHERE f_int1 = - old.f_int1;
20095END|
20096UPDATE t0_aux SET f_int1 =  - f_int1, f_int2 = - f_int2
20097WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20098
20099# check trigger-6 success: 	1
20100DROP TRIGGER trg_1;
20101UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20102f_int2 = CAST(f_char1 AS SIGNED INT),
20103f_charbig = 'just inserted'
20104   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20105DELETE FROM t0_aux
20106WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20107INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20108SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20109'just inserted' FROM t0_template
20110WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20111CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW
20112BEGIN
20113UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20114f_charbig = 'updated by trigger'
20115      WHERE f_int1 = - old.f_int1;
20116END|
20117DELETE FROM t0_aux
20118WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20119
20120# check trigger-7 success: 	1
20121DROP TRIGGER trg_1;
20122UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20123f_int2 = CAST(f_char1 AS SIGNED INT),
20124f_charbig = 'just inserted'
20125   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20126DELETE FROM t0_aux
20127WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20128INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig)
20129SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
20130'just inserted' FROM t0_template
20131WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20132CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW
20133BEGIN
20134UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2,
20135f_charbig = 'updated by trigger'
20136      WHERE f_int1 = - old.f_int1;
20137END|
20138DELETE FROM t0_aux
20139WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
20140
20141# check trigger-8 success: 	1
20142DROP TRIGGER trg_1;
20143UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20144f_int2 = CAST(f_char1 AS SIGNED INT),
20145f_charbig = 'just inserted'
20146   WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
20147DELETE FROM t0_aux
20148WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20149DELETE FROM t1
20150WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
20151CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20152BEGIN
20153SET new.f_int1 = old.f_int1 + @max_row,
20154new.f_int2 = old.f_int2 - @max_row,
20155new.f_charbig = '####updated per update trigger####';
20156END|
20157UPDATE t1
20158SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20159f_charbig = '####updated per update statement itself####';
20160
20161# check trigger-9 success: 	1
20162DROP TRIGGER trg_2;
20163UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20164f_int2 = CAST(f_char1 AS SIGNED INT),
20165f_charbig = CONCAT('===',f_char1,'===');
20166CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW
20167BEGIN
20168SET new.f_int1 = new.f_int1 + @max_row,
20169new.f_int2 = new.f_int2 - @max_row,
20170new.f_charbig = '####updated per update trigger####';
20171END|
20172UPDATE t1
20173SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row,
20174f_charbig = '####updated per update statement itself####';
20175
20176# check trigger-10 success: 	1
20177DROP TRIGGER trg_2;
20178UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
20179f_int2 = CAST(f_char1 AS SIGNED INT),
20180f_charbig = CONCAT('===',f_char1,'===');
20181CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20182BEGIN
20183SET new.f_int1 = @my_max1 + @counter,
20184new.f_int2 = @my_min2 - @counter,
20185new.f_charbig = '####updated per insert trigger####';
20186SET @counter = @counter + 1;
20187END|
20188SET @counter = 1;
20189SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20190INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
20191SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
20192CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20193WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20194ORDER BY f_int1;
20195DROP TRIGGER trg_3;
20196
20197# check trigger-11 success: 	1
20198DELETE FROM t1
20199WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20200AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20201AND f_charbig = '####updated per insert trigger####';
20202CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW
20203BEGIN
20204SET new.f_int1 = @my_max1 + @counter,
20205new.f_int2 = @my_min2 - @counter,
20206new.f_charbig = '####updated per insert trigger####';
20207SET @counter = @counter + 1;
20208END|
20209SET @counter = 1;
20210SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
20211INSERT INTO t1 (f_char1, f_char2, f_charbig)
20212SELECT CAST(f_int1 AS CHAR),
20213CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template
20214WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1
20215ORDER BY f_int1;
20216DROP TRIGGER trg_3;
20217
20218# check trigger-12 success: 	1
20219DELETE FROM t1
20220WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
20221AND f_int2 <> CAST(f_char1 AS SIGNED INT)
20222AND f_charbig = '####updated per insert trigger####';
20223ANALYZE  TABLE t1;
20224Table	Op	Msg_type	Msg_text
20225test.t1	analyze	status	OK
20226CHECK    TABLE t1 EXTENDED;
20227Table	Op	Msg_type	Msg_text
20228test.t1	check	status	OK
20229CHECKSUM TABLE t1 EXTENDED;
20230Table	Checksum
20231test.t1	<some_value>
20232OPTIMIZE TABLE t1;
20233Table	Op	Msg_type	Msg_text
20234test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
20235test.t1	optimize	status	OK
20236# check layout success:    1
20237REPAIR   TABLE t1 EXTENDED;
20238Table	Op	Msg_type	Msg_text
20239test.t1	repair	status	OK
20240# check layout success:    1
20241TRUNCATE t1;
20242
20243# check TRUNCATE success: 	1
20244# check layout success:    1
20245# End usability test (inc/partition_check.inc)
20246DROP TABLE t1;
20247DROP VIEW  IF EXISTS v1;
20248DROP TABLE IF EXISTS t1;
20249DROP TABLE IF EXISTS t0_aux;
20250DROP TABLE IF EXISTS t0_definition;
20251DROP TABLE IF EXISTS t0_template;
20252